Merge pull request #31 from moul/dev/moul/gokit-grpcclient

Add basic go-kit gRPC client
This commit is contained in:
Manfred Touron 2016-12-25 22:43:58 +01:00 committed by GitHub
commit c26d72d1ad
14 changed files with 349 additions and 55 deletions

View File

@ -0,0 +1,44 @@
package session_clientgrpc
import (
jwt "github.com/go-kit/kit/auth/jwt"
"github.com/go-kit/kit/endpoint"
"github.com/go-kit/kit/log"
grpctransport "github.com/go-kit/kit/transport/grpc"
context "golang.org/x/net/context"
"google.golang.org/grpc"
endpoints "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/session/gen/endpoints"
pb "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/session/gen/pb"
)
func New(conn *grpc.ClientConn, logger log.Logger) pb.SessionServiceServer {
var loginEndpoint endpoint.Endpoint
{
loginEndpoint = grpctransport.NewClient(
conn,
"session.SessionService",
"Login",
EncodeLoginRequest,
DecodeLoginResponse,
pb.LoginResponse{},
append([]grpctransport.ClientOption{}, grpctransport.ClientBefore(jwt.FromGRPCContext()))...,
).Endpoint()
}
return &endpoints.Endpoints{
LoginEndpoint: loginEndpoint,
}
}
func EncodeLoginRequest(_ context.Context, request interface{}) (interface{}, error) {
req := request.(*pb.LoginRequest)
return req, nil
}
func DecodeLoginResponse(_ context.Context, grpcResponse interface{}) (interface{}, error) {
response := grpcResponse.(*pb.LoginResponse)
return response, nil
}

View File

@ -10,6 +10,8 @@ import (
var _ = fmt.Errorf
type StreamEndpoint func(server interface{}, req interface{}) (err error)
type Endpoints struct {
LoginEndpoint endpoint.Endpoint
}

View File

@ -4,9 +4,10 @@ import (
"fmt"
grpctransport "github.com/go-kit/kit/transport/grpc"
context "golang.org/x/net/context"
endpoints "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/session/gen/endpoints"
pb "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/session/gen/pb"
context "golang.org/x/net/context"
)
// avoid import errors
@ -19,7 +20,7 @@ func MakeGRPCServer(ctx context.Context, endpoints endpoints.Endpoints) pb.Sessi
login: grpctransport.NewServer(
ctx,
endpoints.LoginEndpoint,
decodeLoginRequest,
decodeRequest,
encodeLoginResponse,
options...,
),
@ -38,11 +39,26 @@ func (s *grpcServer) Login(ctx context.Context, req *pb.LoginRequest) (*pb.Login
return rep.(*pb.LoginResponse), nil
}
func decodeLoginRequest(ctx context.Context, grpcReq interface{}) (interface{}, error) {
return grpcReq, nil
}
func encodeLoginResponse(ctx context.Context, response interface{}) (interface{}, error) {
resp := response.(*pb.LoginResponse)
return resp, nil
}
func decodeRequest(ctx context.Context, grpcReq interface{}) (interface{}, error) {
return grpcReq, nil
}
type streamHandler interface {
Do(server interface{}, req interface{}) (err error)
}
type server struct {
e endpoints.StreamEndpoint
}
func (s server) Do(server interface{}, req interface{}) (err error) {
if err := s.e(server, req); err != nil {
return err
}
return nil
}

View File

@ -17,7 +17,7 @@ func MakeLoginHandler(ctx context.Context, svc pb.SessionServiceServer, endpoint
ctx,
endpoint,
decodeLoginRequest,
encodeLoginResponse,
encodeResponse,
[]httptransport.ServerOption{}...,
)
}
@ -30,7 +30,7 @@ func decodeLoginRequest(ctx context.Context, r *http.Request) (interface{}, erro
return &req, nil
}
func encodeLoginResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
func encodeResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
return json.NewEncoder(w).Encode(response)
}

View File

@ -0,0 +1,94 @@
package sprint_clientgrpc
import (
jwt "github.com/go-kit/kit/auth/jwt"
"github.com/go-kit/kit/endpoint"
"github.com/go-kit/kit/log"
grpctransport "github.com/go-kit/kit/transport/grpc"
context "golang.org/x/net/context"
"google.golang.org/grpc"
endpoints "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/sprint/gen/endpoints"
pb "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/sprint/gen/pb"
)
func New(conn *grpc.ClientConn, logger log.Logger) pb.SprintServiceServer {
var addsprintEndpoint endpoint.Endpoint
{
addsprintEndpoint = grpctransport.NewClient(
conn,
"sprint.SprintService",
"AddSprint",
EncodeAddSprintRequest,
DecodeAddSprintResponse,
pb.AddSprintResponse{},
append([]grpctransport.ClientOption{}, grpctransport.ClientBefore(jwt.FromGRPCContext()))...,
).Endpoint()
}
var closesprintEndpoint endpoint.Endpoint
{
closesprintEndpoint = grpctransport.NewClient(
conn,
"sprint.SprintService",
"CloseSprint",
EncodeCloseSprintRequest,
DecodeCloseSprintResponse,
pb.CloseSprintResponse{},
append([]grpctransport.ClientOption{}, grpctransport.ClientBefore(jwt.FromGRPCContext()))...,
).Endpoint()
}
var getsprintEndpoint endpoint.Endpoint
{
getsprintEndpoint = grpctransport.NewClient(
conn,
"sprint.SprintService",
"GetSprint",
EncodeGetSprintRequest,
DecodeGetSprintResponse,
pb.GetSprintResponse{},
append([]grpctransport.ClientOption{}, grpctransport.ClientBefore(jwt.FromGRPCContext()))...,
).Endpoint()
}
return &endpoints.Endpoints{
AddSprintEndpoint: addsprintEndpoint,
CloseSprintEndpoint: closesprintEndpoint,
GetSprintEndpoint: getsprintEndpoint,
}
}
func EncodeAddSprintRequest(_ context.Context, request interface{}) (interface{}, error) {
req := request.(*pb.AddSprintRequest)
return req, nil
}
func DecodeAddSprintResponse(_ context.Context, grpcResponse interface{}) (interface{}, error) {
response := grpcResponse.(*pb.AddSprintResponse)
return response, nil
}
func EncodeCloseSprintRequest(_ context.Context, request interface{}) (interface{}, error) {
req := request.(*pb.CloseSprintRequest)
return req, nil
}
func DecodeCloseSprintResponse(_ context.Context, grpcResponse interface{}) (interface{}, error) {
response := grpcResponse.(*pb.CloseSprintResponse)
return response, nil
}
func EncodeGetSprintRequest(_ context.Context, request interface{}) (interface{}, error) {
req := request.(*pb.GetSprintRequest)
return req, nil
}
func DecodeGetSprintResponse(_ context.Context, grpcResponse interface{}) (interface{}, error) {
response := grpcResponse.(*pb.GetSprintResponse)
return response, nil
}

View File

@ -10,6 +10,8 @@ import (
var _ = fmt.Errorf
type StreamEndpoint func(server interface{}, req interface{}) (err error)
type Endpoints struct {
AddSprintEndpoint endpoint.Endpoint

View File

@ -4,9 +4,10 @@ import (
"fmt"
grpctransport "github.com/go-kit/kit/transport/grpc"
context "golang.org/x/net/context"
endpoints "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/sprint/gen/endpoints"
pb "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/sprint/gen/pb"
context "golang.org/x/net/context"
)
// avoid import errors
@ -19,7 +20,7 @@ func MakeGRPCServer(ctx context.Context, endpoints endpoints.Endpoints) pb.Sprin
addsprint: grpctransport.NewServer(
ctx,
endpoints.AddSprintEndpoint,
decodeAddSprintRequest,
decodeRequest,
encodeAddSprintResponse,
options...,
),
@ -27,7 +28,7 @@ func MakeGRPCServer(ctx context.Context, endpoints endpoints.Endpoints) pb.Sprin
closesprint: grpctransport.NewServer(
ctx,
endpoints.CloseSprintEndpoint,
decodeCloseSprintRequest,
decodeRequest,
encodeCloseSprintResponse,
options...,
),
@ -35,7 +36,7 @@ func MakeGRPCServer(ctx context.Context, endpoints endpoints.Endpoints) pb.Sprin
getsprint: grpctransport.NewServer(
ctx,
endpoints.GetSprintEndpoint,
decodeGetSprintRequest,
decodeRequest,
encodeGetSprintResponse,
options...,
),
@ -58,10 +59,6 @@ func (s *grpcServer) AddSprint(ctx context.Context, req *pb.AddSprintRequest) (*
return rep.(*pb.AddSprintResponse), nil
}
func decodeAddSprintRequest(ctx context.Context, grpcReq interface{}) (interface{}, error) {
return grpcReq, nil
}
func encodeAddSprintResponse(ctx context.Context, response interface{}) (interface{}, error) {
resp := response.(*pb.AddSprintResponse)
return resp, nil
@ -75,10 +72,6 @@ func (s *grpcServer) CloseSprint(ctx context.Context, req *pb.CloseSprintRequest
return rep.(*pb.CloseSprintResponse), nil
}
func decodeCloseSprintRequest(ctx context.Context, grpcReq interface{}) (interface{}, error) {
return grpcReq, nil
}
func encodeCloseSprintResponse(ctx context.Context, response interface{}) (interface{}, error) {
resp := response.(*pb.CloseSprintResponse)
return resp, nil
@ -92,11 +85,26 @@ func (s *grpcServer) GetSprint(ctx context.Context, req *pb.GetSprintRequest) (*
return rep.(*pb.GetSprintResponse), nil
}
func decodeGetSprintRequest(ctx context.Context, grpcReq interface{}) (interface{}, error) {
return grpcReq, nil
}
func encodeGetSprintResponse(ctx context.Context, response interface{}) (interface{}, error) {
resp := response.(*pb.GetSprintResponse)
return resp, nil
}
func decodeRequest(ctx context.Context, grpcReq interface{}) (interface{}, error) {
return grpcReq, nil
}
type streamHandler interface {
Do(server interface{}, req interface{}) (err error)
}
type server struct {
e endpoints.StreamEndpoint
}
func (s server) Do(server interface{}, req interface{}) (err error) {
if err := s.e(server, req); err != nil {
return err
}
return nil
}

View File

@ -17,7 +17,7 @@ func MakeAddSprintHandler(ctx context.Context, svc pb.SprintServiceServer, endpo
ctx,
endpoint,
decodeAddSprintRequest,
encodeAddSprintResponse,
encodeResponse,
[]httptransport.ServerOption{}...,
)
}
@ -30,16 +30,12 @@ func decodeAddSprintRequest(ctx context.Context, r *http.Request) (interface{},
return &req, nil
}
func encodeAddSprintResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
return json.NewEncoder(w).Encode(response)
}
func MakeCloseSprintHandler(ctx context.Context, svc pb.SprintServiceServer, endpoint gokit_endpoint.Endpoint) *httptransport.Server {
return httptransport.NewServer(
ctx,
endpoint,
decodeCloseSprintRequest,
encodeCloseSprintResponse,
encodeResponse,
[]httptransport.ServerOption{}...,
)
}
@ -52,16 +48,12 @@ func decodeCloseSprintRequest(ctx context.Context, r *http.Request) (interface{}
return &req, nil
}
func encodeCloseSprintResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
return json.NewEncoder(w).Encode(response)
}
func MakeGetSprintHandler(ctx context.Context, svc pb.SprintServiceServer, endpoint gokit_endpoint.Endpoint) *httptransport.Server {
return httptransport.NewServer(
ctx,
endpoint,
decodeGetSprintRequest,
encodeGetSprintResponse,
encodeResponse,
[]httptransport.ServerOption{}...,
)
}
@ -74,7 +66,7 @@ func decodeGetSprintRequest(ctx context.Context, r *http.Request) (interface{},
return &req, nil
}
func encodeGetSprintResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
func encodeResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
return json.NewEncoder(w).Encode(response)
}

View File

@ -0,0 +1,69 @@
package user_clientgrpc
import (
jwt "github.com/go-kit/kit/auth/jwt"
"github.com/go-kit/kit/endpoint"
"github.com/go-kit/kit/log"
grpctransport "github.com/go-kit/kit/transport/grpc"
context "golang.org/x/net/context"
"google.golang.org/grpc"
endpoints "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/user/gen/endpoints"
pb "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/user/gen/pb"
)
func New(conn *grpc.ClientConn, logger log.Logger) pb.UserServiceServer {
var createuserEndpoint endpoint.Endpoint
{
createuserEndpoint = grpctransport.NewClient(
conn,
"user.UserService",
"CreateUser",
EncodeCreateUserRequest,
DecodeCreateUserResponse,
pb.CreateUserResponse{},
append([]grpctransport.ClientOption{}, grpctransport.ClientBefore(jwt.FromGRPCContext()))...,
).Endpoint()
}
var getuserEndpoint endpoint.Endpoint
{
getuserEndpoint = grpctransport.NewClient(
conn,
"user.UserService",
"GetUser",
EncodeGetUserRequest,
DecodeGetUserResponse,
pb.GetUserResponse{},
append([]grpctransport.ClientOption{}, grpctransport.ClientBefore(jwt.FromGRPCContext()))...,
).Endpoint()
}
return &endpoints.Endpoints{
CreateUserEndpoint: createuserEndpoint,
GetUserEndpoint: getuserEndpoint,
}
}
func EncodeCreateUserRequest(_ context.Context, request interface{}) (interface{}, error) {
req := request.(*pb.CreateUserRequest)
return req, nil
}
func DecodeCreateUserResponse(_ context.Context, grpcResponse interface{}) (interface{}, error) {
response := grpcResponse.(*pb.CreateUserResponse)
return response, nil
}
func EncodeGetUserRequest(_ context.Context, request interface{}) (interface{}, error) {
req := request.(*pb.GetUserRequest)
return req, nil
}
func DecodeGetUserResponse(_ context.Context, grpcResponse interface{}) (interface{}, error) {
response := grpcResponse.(*pb.GetUserResponse)
return response, nil
}

View File

@ -10,6 +10,8 @@ import (
var _ = fmt.Errorf
type StreamEndpoint func(server interface{}, req interface{}) (err error)
type Endpoints struct {
CreateUserEndpoint endpoint.Endpoint

View File

@ -4,9 +4,10 @@ import (
"fmt"
grpctransport "github.com/go-kit/kit/transport/grpc"
context "golang.org/x/net/context"
endpoints "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/user/gen/endpoints"
pb "github.com/moul/protoc-gen-gotemplate/examples/go-kit/services/user/gen/pb"
context "golang.org/x/net/context"
)
// avoid import errors
@ -19,7 +20,7 @@ func MakeGRPCServer(ctx context.Context, endpoints endpoints.Endpoints) pb.UserS
createuser: grpctransport.NewServer(
ctx,
endpoints.CreateUserEndpoint,
decodeCreateUserRequest,
decodeRequest,
encodeCreateUserResponse,
options...,
),
@ -27,7 +28,7 @@ func MakeGRPCServer(ctx context.Context, endpoints endpoints.Endpoints) pb.UserS
getuser: grpctransport.NewServer(
ctx,
endpoints.GetUserEndpoint,
decodeGetUserRequest,
decodeRequest,
encodeGetUserResponse,
options...,
),
@ -48,10 +49,6 @@ func (s *grpcServer) CreateUser(ctx context.Context, req *pb.CreateUserRequest)
return rep.(*pb.CreateUserResponse), nil
}
func decodeCreateUserRequest(ctx context.Context, grpcReq interface{}) (interface{}, error) {
return grpcReq, nil
}
func encodeCreateUserResponse(ctx context.Context, response interface{}) (interface{}, error) {
resp := response.(*pb.CreateUserResponse)
return resp, nil
@ -65,11 +62,26 @@ func (s *grpcServer) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.G
return rep.(*pb.GetUserResponse), nil
}
func decodeGetUserRequest(ctx context.Context, grpcReq interface{}) (interface{}, error) {
return grpcReq, nil
}
func encodeGetUserResponse(ctx context.Context, response interface{}) (interface{}, error) {
resp := response.(*pb.GetUserResponse)
return resp, nil
}
func decodeRequest(ctx context.Context, grpcReq interface{}) (interface{}, error) {
return grpcReq, nil
}
type streamHandler interface {
Do(server interface{}, req interface{}) (err error)
}
type server struct {
e endpoints.StreamEndpoint
}
func (s server) Do(server interface{}, req interface{}) (err error) {
if err := s.e(server, req); err != nil {
return err
}
return nil
}

View File

@ -17,7 +17,7 @@ func MakeCreateUserHandler(ctx context.Context, svc pb.UserServiceServer, endpoi
ctx,
endpoint,
decodeCreateUserRequest,
encodeCreateUserResponse,
encodeResponse,
[]httptransport.ServerOption{}...,
)
}
@ -30,16 +30,12 @@ func decodeCreateUserRequest(ctx context.Context, r *http.Request) (interface{},
return &req, nil
}
func encodeCreateUserResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
return json.NewEncoder(w).Encode(response)
}
func MakeGetUserHandler(ctx context.Context, svc pb.UserServiceServer, endpoint gokit_endpoint.Endpoint) *httptransport.Server {
return httptransport.NewServer(
ctx,
endpoint,
decodeGetUserRequest,
encodeGetUserResponse,
encodeResponse,
[]httptransport.ServerOption{}...,
)
}
@ -52,7 +48,7 @@ func decodeGetUserRequest(ctx context.Context, r *http.Request) (interface{}, er
return &req, nil
}
func encodeGetUserResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
func encodeResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
return json.NewEncoder(w).Encode(response)
}

View File

@ -0,0 +1,56 @@
package {{.File.Package}}_clientgrpc
import (
"github.com/go-kit/kit/log"
context "golang.org/x/net/context"
"google.golang.org/grpc"
grpctransport "github.com/go-kit/kit/transport/grpc"
"github.com/go-kit/kit/endpoint"
jwt "github.com/go-kit/kit/auth/jwt"
pb "{{cat .GoPWD "/" .DestinationDir | nospace | clean}}/pb"
endpoints "{{cat .GoPWD "/" .DestinationDir | nospace | clean}}/endpoints"
)
{{$file:=.File}}
func New(conn *grpc.ClientConn, logger log.Logger) pb.{{.File.Package | title}}ServiceServer {
{{range .Service.Method}}
{{if and (not .ServerStreaming) (not .ClientStreaming)}}
var {{.Name | lower}}Endpoint endpoint.Endpoint
{
{{.Name | lower}}Endpoint = grpctransport.NewClient(
conn,
"{{$file.Package}}.{{$file.Package | title}}Service",
"{{.Name}}",
Encode{{.Name}}Request,
Decode{{.Name}}Response,
pb.{{.Name}}Response{},
append([]grpctransport.ClientOption{}, grpctransport.ClientBefore(jwt.FromGRPCContext()))...,
).Endpoint()
}
{{end}}
{{end}}
return &endpoints.Endpoints {
{{range .Service.Method}}
{{if and (not .ServerStreaming) (not .ClientStreaming)}}
{{.Name | title}}Endpoint: {{.Name | lower}}Endpoint,
{{end}}
{{end}}
}
}
{{range .Service.Method}}
{{if and (not .ServerStreaming) (not .ClientStreaming)}}
func Encode{{.Name}}Request(_ context.Context, request interface{}) (interface{}, error) {
req := request.(*pb.{{.Name}}Request)
return req, nil
}
func Decode{{.Name}}Response(_ context.Context, grpcResponse interface{}) (interface{}, error) {
response := grpcResponse.(*pb.{{.Name}}Response)
return response, nil
}
{{end}}
{{end}}

View File

@ -6,9 +6,10 @@ import (
"fmt"
context "golang.org/x/net/context"
grpctransport "github.com/go-kit/kit/transport/grpc"
pb "{{cat .GoPWD "/" .DestinationDir | nospace | clean}}/pb"
endpoints "{{cat .GoPWD "/" .DestinationDir | nospace | clean}}/endpoints"
grpctransport "github.com/go-kit/kit/transport/grpc"
)
// avoid import errors