...
1 package test
2
3 import (
4 "context"
5 "fmt"
6
7 "github.com/go-kit/kit/endpoint"
8 grpctransport "github.com/go-kit/kit/transport/grpc"
9 "github.com/go-kit/kit/transport/grpc/_grpc_test/pb"
10 )
11
12 type service struct{}
13
14 func (service) Test(ctx context.Context, a string, b int64) (context.Context, string, error) {
15 return nil, fmt.Sprintf("%s = %d", a, b), nil
16 }
17
18 func NewService() Service {
19 return service{}
20 }
21
22 func makeTestEndpoint(svc Service) endpoint.Endpoint {
23 return func(ctx context.Context, request interface{}) (interface{}, error) {
24 req := request.(TestRequest)
25 newCtx, v, err := svc.Test(ctx, req.A, req.B)
26 return &TestResponse{
27 V: v,
28 Ctx: newCtx,
29 }, err
30 }
31 }
32
33 type serverBinding struct {
34 pb.UnimplementedTestServer
35
36 test grpctransport.Handler
37 }
38
39 func (b *serverBinding) Test(ctx context.Context, req *pb.TestRequest) (*pb.TestResponse, error) {
40 _, response, err := b.test.ServeGRPC(ctx, req)
41 if err != nil {
42 return nil, err
43 }
44 return response.(*pb.TestResponse), nil
45 }
46
47 func NewBinding(svc Service) *serverBinding {
48 return &serverBinding{
49 test: grpctransport.NewServer(
50 makeTestEndpoint(svc),
51 decodeRequest,
52 encodeResponse,
53 grpctransport.ServerBefore(
54 extractCorrelationID,
55 ),
56 grpctransport.ServerBefore(
57 displayServerRequestHeaders,
58 ),
59 grpctransport.ServerAfter(
60 injectResponseHeader,
61 injectResponseTrailer,
62 injectConsumedCorrelationID,
63 ),
64 grpctransport.ServerAfter(
65 displayServerResponseHeaders,
66 displayServerResponseTrailers,
67 ),
68 ),
69 }
70 }
71
View as plain text