package test import ( "context" "fmt" oldcontext "golang.org/x/net/context" "github.com/go-kit/kit/endpoint" grpctransport "github.com/go-kit/kit/transport/grpc" "github.com/go-kit/kit/transport/grpc/_grpc_test/pb" ) type service struct{} func (service) Test(ctx context.Context, a string, b int64) (context.Context, string, error) { return nil, fmt.Sprintf("%s = %d", a, b), nil } func NewService() Service { return service{} } func makeTestEndpoint(svc Service) endpoint.Endpoint { return func(ctx context.Context, request interface{}) (interface{}, error) { req := request.(TestRequest) newCtx, v, err := svc.Test(ctx, req.A, req.B) return &TestResponse{ V: v, Ctx: newCtx, }, err } } type serverBinding struct { test grpctransport.Handler } func (b *serverBinding) Test(ctx oldcontext.Context, req *pb.TestRequest) (*pb.TestResponse, error) { _, response, err := b.test.ServeGRPC(ctx, req) if err != nil { return nil, err } return response.(*pb.TestResponse), nil } func NewBinding(svc Service) *serverBinding { return &serverBinding{ test: grpctransport.NewServer( makeTestEndpoint(svc), decodeRequest, encodeResponse, grpctransport.ServerBefore( extractCorrelationID, ), grpctransport.ServerBefore( displayServerRequestHeaders, ), grpctransport.ServerAfter( injectResponseHeader, injectResponseTrailer, injectConsumedCorrelationID, ), grpctransport.ServerAfter( displayServerResponseHeaders, displayServerResponseTrailers, ), ), } }