diff --git a/assets/templates/transport/grpc_client.tmpl b/assets/templates/transport/grpc_client.tmpl index 757071cfa2be922f9c9c92b6b5108383922987bf..7e11e72a299e53741f5af211d6b3844db394ad01 100644 --- a/assets/templates/transport/grpc_client.tmpl +++ b/assets/templates/transport/grpc_client.tmpl @@ -10,46 +10,18 @@ import ( type Client struct { client pb.{{.Interface.Name}}Client - decoder ProtoDecoder + decoder ProtoEncoder } var _ {{.Interface.Name}} = &Client{} -func NewClient(conn *grpc.ClientConn, decoder ProtoDecoder) *Client { +func NewClient(conn *grpc.ClientConn, decoder ProtoEncoder) *Client { return &Client{ client: pb.New{{.Interface.Name}}Client(conn), decoder: decoder, } } -type ProtoDecoder interface { -{{range $method := .Interface.Methods}} -{{- if $method.ReturnsError}} - {{ $resList := list }} - {{ $resListLen := add 0 }} - {{- range $param := $method.Results -}} - {{- if not ( and $method.ReturnsError (eq $param.Name "err")) -}} - {{- $resList = append $resList (printf "%s %s" $param.Name $param.Type) -}} - {{- $resListLen = add $resListLen 1 -}} - {{- end -}} - {{- end -}} - - {{- $paramList := list -}} - {{- range $param := $method.Params -}} - {{- if not ( and $method.AcceptsContext (eq $param.Name "ctx")) -}} - {{- $paramList = append $paramList (printf "%s %s" $param.Name $param.Type) - -}} - {{- end -}} - {{- end -}} - - {{ $method.Name }}Request({{ $paramList | join `, ` }}) *pb.{{ $method.Name }}Request - {{- if gt $resListLen 0 }} - {{ $method.Name }}Response(res *pb.{{ $method.Name }}Response) ({{ $resList | join `, ` }}) - {{- end }} -{{- end -}} -{{end}} -} - {{range $method := .Interface.Methods}} {{- if $method.ReturnsError}} @@ -72,14 +44,14 @@ type ProtoDecoder interface { // {{$method.Name}} implements {{$.Interface.Name}} func (c *Client) {{$method.Declaration}} { - request := c.decoder.{{$method.Name}}Request({{ $paramList | join `, ` }}) + request := c.decoder.Encode{{$method.Name}}Request({{ $paramList | join `, ` }}) {{- if gt $resListLen 0 }} res, err := c.client.{{ $method.Name }}(ctx, request) {{- else }} _, err = c.client.{{ $method.Name }}(ctx, request) {{- end }} {{- if gt $resListLen 0 }} - {{ $resList | join `,` }} = c.decoder.{{ $method.Name }}Response(res) + {{ $resList | join `,` }} = c.decoder.Encode{{ $method.Name }}Response(res) {{- end }} return } diff --git a/assets/templates/transport/grpc_encoder.tmpl b/assets/templates/transport/grpc_encoder.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..f1e684efeac1b098cb6d6d25a658c152cd24f034 --- /dev/null +++ b/assets/templates/transport/grpc_encoder.tmpl @@ -0,0 +1,28 @@ +type ProtoEncoder interface { +{{range $method := .Interface.Methods}} + {{- if $method.ReturnsError}} + {{ $resList := list }} + {{ $resListLen := add 0 }} + {{- range $param := $method.Results -}} + {{- if not ( and $method.ReturnsError (eq $param.Name "err")) -}} + {{- $resList = append $resList (printf "%s %s" $param.Name $param.Type) -}} + {{- $resListLen = add $resListLen 1 -}} + {{- end -}} + {{- end -}} + + {{- $paramList := list -}} + {{- range $param := $method.Params -}} + {{- if not ( and $method.AcceptsContext (eq $param.Name "ctx")) -}} + {{- $paramList = append $paramList (printf "%s %s" $param.Name $param.Type) -}} + {{- end -}} + {{- end -}} + + Encode{{ $method.Name }}Request({{ $paramList | join `, ` }}) *pb.{{ $method.Name }}Request + Decode{{ $method.Name }}Request(request *pb.{{ $method.Name }}Request) ({{ $paramList | join `, ` }}) + {{- if gt $resListLen 0 }} + Encode{{ $method.Name }}Response(response *pb.{{ $method.Name }}Response) ({{ $resList | join `, ` }}) + Decode{{ $method.Name }}Response({{ $resList | join `, ` }}) *pb.{{ $method.Name }}Response + {{- end }} + {{- end -}} +{{end}} +} \ No newline at end of file diff --git a/assets/templates/transport/grpc_server.tmpl b/assets/templates/transport/grpc_server.tmpl index 1d3aad0baefe217b166ad3ea79245072453fe361..e2f2245815e78be2976ef71adcab47dae956955a 100644 --- a/assets/templates/transport/grpc_server.tmpl +++ b/assets/templates/transport/grpc_server.tmpl @@ -8,10 +8,11 @@ import ( type Server struct { pb.Unimplemented{{.Interface.Name}}Server service {{.Interface.Name}} + encoder ProtoEncoder } -func NewServer(svc {{.Interface.Name}}) *Server { - return &Server{service: svc} +func NewServer(svc {{.Interface.Name}}, encoder ProtoEncoder) *Server { + return &Server{service: svc, encoder: encoder} } func RegisterServer(grpcSrv *grpc.Server, srv *Server) { @@ -38,21 +39,21 @@ func RegisterServer(grpcSrv *grpc.Server, srv *Server) { {{- $paramList := list -}} {{- range $param := $method.Params -}} {{- if not ( and $method.AcceptsContext (eq $param.Name "ctx")) -}} - {{- $paramList = append $paramList (printf "req.%s" $param.Name ) -}} + {{- $paramList = append $paramList $param.Name -}} {{- end -}} {{- end -}} // {{$method.Name}} implements {{$.Interface.Name}} func (s *Server) {{$method.Name}}(ctx context.Context, request *pb.{{$method.Name}}Request) (response {{ $response }}, err error) { - req := {{$method.Name}}RequestFromPB(request) + {{ $paramList | join `,` }} := s.encoder.Decode{{$method.Name}}Request(request) {{- if gt $resListLen 0 }} {{ $method.ResultsNames | join `,` }} := s.service.{{ $method.Name }}(ctx, {{ $paramList | join `, ` }}) {{- else }} err = s.service.{{ $method.Name }}(ctx, {{ $paramList | join `, ` }}) {{- end }} {{- if gt $resListLen 0 }} - response = {{ $method.Name }}ResponseToPB({{ $resList | join `,` }}) + response = s.encoder.Decode{{ $method.Name }}Response({{ $resList | join `,` }}) {{- end }} return } diff --git a/perxis-proto b/perxis-proto index 9b500f82cbfed60c8aaee6ca3e1004df072368bc..28531974cc43f8ce31e7456241f3cb2535f8c179 160000 --- a/perxis-proto +++ b/perxis-proto @@ -1 +1 @@ -Subproject commit 9b500f82cbfed60c8aaee6ca3e1004df072368bc +Subproject commit 28531974cc43f8ce31e7456241f3cb2535f8c179 diff --git a/pkg/invitations/client.go b/pkg/invitations/client.go index 6566d65d88d7c90434d3d1abb8c8e96f46e9bf0b..55e469f971aae63bd180a86410bfc7e2dae1d9a2 100644 --- a/pkg/invitations/client.go +++ b/pkg/invitations/client.go @@ -16,67 +16,52 @@ import ( type Client struct { client pb.InvitationsClient - decoder ProtoDecoder + decoder ProtoEncoder } var _ Invitations = &Client{} -func NewClient(conn *grpc.ClientConn, decoder ProtoDecoder) *Client { +func NewClient(conn *grpc.ClientConn, decoder ProtoEncoder) *Client { return &Client{ client: pb.NewInvitationsClient(conn), decoder: decoder, } } -type ProtoDecoder interface { - AcceptRequest(invitationId string, userId string) *pb.AcceptRequest - - CreateRequest(invitation *Invitation) *pb.CreateRequest - CreateResponse(res *pb.CreateResponse) (created *Invitation) - - DeleteRequest(invitationId string) *pb.DeleteRequest - - FindRequest(filter *Filter, opts *options.FindOptions) *pb.FindRequest - FindResponse(res *pb.FindResponse) (invitations []*Invitation, total int) - - GetRequest(invitationId string) *pb.GetRequest - GetResponse(res *pb.GetResponse) (invitation *Invitation) -} - // Accept implements Invitations func (c *Client) Accept(ctx context.Context, invitationId string, userId string) (err error) { - request := c.decoder.AcceptRequest(invitationId, userId) + request := c.decoder.EncodeAcceptRequest(invitationId, userId) _, err = c.client.Accept(ctx, request) return } // Create implements Invitations func (c *Client) Create(ctx context.Context, invitation *Invitation) (created *Invitation, err error) { - request := c.decoder.CreateRequest(invitation) + request := c.decoder.EncodeCreateRequest(invitation) res, err := c.client.Create(ctx, request) - created = c.decoder.CreateResponse(res) + created = c.decoder.EncodeCreateResponse(res) return } // Delete implements Invitations func (c *Client) Delete(ctx context.Context, invitationId string) (err error) { - request := c.decoder.DeleteRequest(invitationId) + request := c.decoder.EncodeDeleteRequest(invitationId) _, err = c.client.Delete(ctx, request) return } // Find implements Invitations func (c *Client) Find(ctx context.Context, filter *Filter, opts *options.FindOptions) (invitations []*Invitation, total int, err error) { - request := c.decoder.FindRequest(filter, opts) + request := c.decoder.EncodeFindRequest(filter, opts) res, err := c.client.Find(ctx, request) - invitations, total = c.decoder.FindResponse(res) + invitations, total = c.decoder.EncodeFindResponse(res) return } // Get implements Invitations func (c *Client) Get(ctx context.Context, invitationId string) (invitation *Invitation, err error) { - request := c.decoder.GetRequest(invitationId) + request := c.decoder.EncodeGetRequest(invitationId) res, err := c.client.Get(ctx, request) - invitation = c.decoder.GetResponse(res) + invitation = c.decoder.EncodeGetResponse(res) return } diff --git a/pkg/invitations/conv/proto_decoder.go b/pkg/invitations/conv/proto_decoder.go deleted file mode 100644 index 57c1c378c29d7877cc8caa9bc19db8fc1c5d44db..0000000000000000000000000000000000000000 --- a/pkg/invitations/conv/proto_decoder.go +++ /dev/null @@ -1,54 +0,0 @@ -package conv - -import ( - "git.perx.ru/perxis/perxis-go/pkg/invitations" - "git.perx.ru/perxis/perxis-go/pkg/options" - pb "git.perx.ru/perxis/perxis-go/proto/invitations" -) - -type Decoder struct { -} - -var _ invitations.ProtoDecoder = &Decoder{} - -func (d Decoder) AcceptRequest(invitationId string, userId string) *pb.AcceptRequest { - return &pb.AcceptRequest{ - InvitationId: invitationId, - UserId: userId, - } -} - -func (d Decoder) CreateRequest(invitation *invitations.Invitation) *pb.CreateRequest { - // TODO implement me - panic("implement me") -} - -func (d Decoder) CreateResponse(res *pb.CreateResponse) (created *invitations.Invitation) { - // TODO implement me - panic("implement me") -} - -func (d Decoder) DeleteRequest(invitationId string) *pb.DeleteRequest { - // TODO implement me - panic("implement me") -} - -func (d Decoder) FindRequest(filter *invitations.Filter, opts *options.FindOptions) *pb.FindRequest { - // TODO implement me - panic("implement me") -} - -func (d Decoder) FindResponse(res *pb.FindResponse) (invitations []*invitations.Invitation, total int) { - // TODO implement me - panic("implement me") -} - -func (d Decoder) GetRequest(invitationId string) *pb.GetRequest { - // TODO implement me - panic("implement me") -} - -func (d Decoder) GetResponse(res *pb.GetResponse) (invitation *invitations.Invitation) { - // TODO implement me - panic("implement me") -} diff --git a/pkg/invitations/encoder.go b/pkg/invitations/encoder.go new file mode 100644 index 0000000000000000000000000000000000000000..ddbcb5fb2401a570eef15f97a53e88ad789da609 --- /dev/null +++ b/pkg/invitations/encoder.go @@ -0,0 +1,35 @@ +// Code generated by gowrap. DO NOT EDIT. +// template: ../../assets/templates/transport/grpc_encoder.tmpl +// gowrap: http://github.com/hexdigest/gowrap + +package invitations + +import ( + "git.perx.ru/perxis/perxis-go/pkg/options" + pb "git.perx.ru/perxis/perxis-go/proto/invitations" +) + +//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/invitations -i Invitations -t ../../assets/templates/transport/grpc_encoder.tmpl -o encoder.go -l "" + +type ProtoEncoder interface { + EncodeAcceptRequest(invitationId string, userId string) *pb.AcceptRequest + DecodeAcceptRequest(request *pb.AcceptRequest) (invitationId string, userId string) + + EncodeCreateRequest(invitation *Invitation) *pb.CreateRequest + DecodeCreateRequest(request *pb.CreateRequest) (invitation *Invitation) + EncodeCreateResponse(response *pb.CreateResponse) (created *Invitation) + DecodeCreateResponse(created *Invitation) *pb.CreateResponse + + EncodeDeleteRequest(invitationId string) *pb.DeleteRequest + DecodeDeleteRequest(request *pb.DeleteRequest) (invitationId string) + + EncodeFindRequest(filter *Filter, opts *options.FindOptions) *pb.FindRequest + DecodeFindRequest(request *pb.FindRequest) (filter *Filter, opts *options.FindOptions) + EncodeFindResponse(response *pb.FindResponse) (invitations []*Invitation, total int) + DecodeFindResponse(invitations []*Invitation, total int) *pb.FindResponse + + EncodeGetRequest(invitationId string) *pb.GetRequest + DecodeGetRequest(request *pb.GetRequest) (invitationId string) + EncodeGetResponse(response *pb.GetResponse) (invitation *Invitation) + DecodeGetResponse(invitation *Invitation) *pb.GetResponse +} diff --git a/pkg/invitations/encoder/grpc.go b/pkg/invitations/encoder/grpc.go new file mode 100644 index 0000000000000000000000000000000000000000..a4488c09ab25dc5663b48b28ab57d25540779aa0 --- /dev/null +++ b/pkg/invitations/encoder/grpc.go @@ -0,0 +1,94 @@ +package conv + +import ( + "git.perx.ru/perxis/perxis-go/pkg/invitations" + "git.perx.ru/perxis/perxis-go/pkg/options" + pb "git.perx.ru/perxis/perxis-go/proto/invitations" +) + +type Encoder struct { +} + +var _ invitations.ProtoEncoder = &Encoder{} + +func (d Encoder) EncodeAcceptRequest(invitationId string, userId string) *pb.AcceptRequest { + return &pb.AcceptRequest{ + InvitationId: invitationId, + UserId: userId, + } +} + +func (d Encoder) DecodeAcceptRequest(request *pb.AcceptRequest) (invitationId string, userId string) { + // TODO implement me + panic("implement me") +} + +func (d Encoder) EncodeCreateRequest(invitation *invitations.Invitation) *pb.CreateRequest { + // TODO implement me + panic("implement me") +} + +func (d Encoder) DecodeCreateRequest(request *pb.CreateRequest) (invitation *invitations.Invitation) { + // TODO implement me + panic("implement me") +} + +func (d Encoder) EncodeCreateResponse(response *pb.CreateResponse) (created *invitations.Invitation) { + // TODO implement me + panic("implement me") +} + +func (d Encoder) DecodeCreateResponse(created *invitations.Invitation) *pb.CreateResponse { + // TODO implement me + panic("implement me") +} + +func (d Encoder) EncodeDeleteRequest(invitationId string) *pb.DeleteRequest { + // TODO implement me + panic("implement me") +} + +func (d Encoder) DecodeDeleteRequest(request *pb.DeleteRequest) (invitationId string) { + // TODO implement me + panic("implement me") +} + +func (d Encoder) EncodeFindRequest(filter *invitations.Filter, opts *options.FindOptions) *pb.FindRequest { + // TODO implement me + panic("implement me") +} + +func (d Encoder) DecodeFindRequest(request *pb.FindRequest) (filter *invitations.Filter, opts *options.FindOptions) { + // TODO implement me + panic("implement me") +} + +func (d Encoder) EncodeFindResponse(response *pb.FindResponse) (invitations []*invitations.Invitation, total int) { + // TODO implement me + panic("implement me") +} + +func (d Encoder) DecodeFindResponse(invitations []*invitations.Invitation, total int) *pb.FindResponse { + // TODO implement me + panic("implement me") +} + +func (d Encoder) EncodeGetRequest(invitationId string) *pb.GetRequest { + // TODO implement me + panic("implement me") +} + +func (d Encoder) DecodeGetRequest(request *pb.GetRequest) (invitationId string) { + // TODO implement me + panic("implement me") +} + +func (d Encoder) EncodeGetResponse(response *pb.GetResponse) (invitation *invitations.Invitation) { + // TODO implement me + panic("implement me") +} + +func (d Encoder) DecodeGetResponse(invitation *invitations.Invitation) *pb.GetResponse { + // TODO implement me + panic("implement me") +} diff --git a/pkg/invitations/server.go b/pkg/invitations/server.go index 8c220b754277f20ac00392ee86761d33323d2a5b..74a394edbdb38c0b01c8e62850291ec2f9c7d30f 100644 --- a/pkg/invitations/server.go +++ b/pkg/invitations/server.go @@ -17,10 +17,11 @@ import ( type Server struct { pb.UnimplementedInvitationsServer service Invitations + encoder ProtoEncoder } -func NewServer(svc Invitations) *Server { - return &Server{service: svc} +func NewServer(svc Invitations, encoder ProtoEncoder) *Server { + return &Server{service: svc, encoder: encoder} } func RegisterServer(grpcSrv *grpc.Server, srv *Server) { @@ -29,38 +30,38 @@ func RegisterServer(grpcSrv *grpc.Server, srv *Server) { // Accept implements Invitations func (s *Server) Accept(ctx context.Context, request *pb.AcceptRequest) (response *emptypb.Empty, err error) { - req := AcceptRequestFromPB(request) - err = s.service.Accept(ctx, req.invitationId, req.userId) + invitationId, userId := s.encoder.DecodeAcceptRequest(request) + err = s.service.Accept(ctx, invitationId, userId) return } // Create implements Invitations func (s *Server) Create(ctx context.Context, request *pb.CreateRequest) (response *pb.CreateResponse, err error) { - req := CreateRequestFromPB(request) - created, err := s.service.Create(ctx, req.invitation) - response = CreateResponseToPB(created) + invitation := s.encoder.DecodeCreateRequest(request) + created, err := s.service.Create(ctx, invitation) + response = s.encoder.DecodeCreateResponse(created) return } // Delete implements Invitations func (s *Server) Delete(ctx context.Context, request *pb.DeleteRequest) (response *emptypb.Empty, err error) { - req := DeleteRequestFromPB(request) - err = s.service.Delete(ctx, req.invitationId) + invitationId := s.encoder.DecodeDeleteRequest(request) + err = s.service.Delete(ctx, invitationId) return } // Find implements Invitations func (s *Server) Find(ctx context.Context, request *pb.FindRequest) (response *pb.FindResponse, err error) { - req := FindRequestFromPB(request) - invitations, total, err := s.service.Find(ctx, req.filter, req.opts) - response = FindResponseToPB(invitations, total) + filter, opts := s.encoder.DecodeFindRequest(request) + invitations, total, err := s.service.Find(ctx, filter, opts) + response = s.encoder.DecodeFindResponse(invitations, total) return } // Get implements Invitations func (s *Server) Get(ctx context.Context, request *pb.GetRequest) (response *pb.GetResponse, err error) { - req := GetRequestFromPB(request) - invitation, err := s.service.Get(ctx, req.invitationId) - response = GetResponseToPB(invitation) + invitationId := s.encoder.DecodeGetRequest(request) + invitation, err := s.service.Get(ctx, invitationId) + response = s.encoder.DecodeGetResponse(invitation) return }