Skip to content
Snippets Groups Projects
Commit 3b0d7c32 authored by Anton Sattarov's avatar Anton Sattarov
Browse files

add encoder and change server template

parent 2bed92f7
No related branches found
No related tags found
No related merge requests found
...@@ -10,46 +10,18 @@ import ( ...@@ -10,46 +10,18 @@ import (
type Client struct { type Client struct {
client pb.{{.Interface.Name}}Client client pb.{{.Interface.Name}}Client
decoder ProtoDecoder decoder ProtoEncoder
} }
var _ {{.Interface.Name}} = &Client{} var _ {{.Interface.Name}} = &Client{}
func NewClient(conn *grpc.ClientConn, decoder ProtoDecoder) *Client { func NewClient(conn *grpc.ClientConn, decoder ProtoEncoder) *Client {
return &Client{ return &Client{
client: pb.New{{.Interface.Name}}Client(conn), client: pb.New{{.Interface.Name}}Client(conn),
decoder: decoder, 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}} {{range $method := .Interface.Methods}}
{{- if $method.ReturnsError}} {{- if $method.ReturnsError}}
...@@ -72,14 +44,14 @@ type ProtoDecoder interface { ...@@ -72,14 +44,14 @@ type ProtoDecoder interface {
// {{$method.Name}} implements {{$.Interface.Name}} // {{$method.Name}} implements {{$.Interface.Name}}
func (c *Client) {{$method.Declaration}} { 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 }} {{- if gt $resListLen 0 }}
res, err := c.client.{{ $method.Name }}(ctx, request) res, err := c.client.{{ $method.Name }}(ctx, request)
{{- else }} {{- else }}
_, err = c.client.{{ $method.Name }}(ctx, request) _, err = c.client.{{ $method.Name }}(ctx, request)
{{- end }} {{- end }}
{{- if gt $resListLen 0 }} {{- if gt $resListLen 0 }}
{{ $resList | join `,` }} = c.decoder.{{ $method.Name }}Response(res) {{ $resList | join `,` }} = c.decoder.Encode{{ $method.Name }}Response(res)
{{- end }} {{- end }}
return return
} }
......
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
...@@ -8,10 +8,11 @@ import ( ...@@ -8,10 +8,11 @@ import (
type Server struct { type Server struct {
pb.Unimplemented{{.Interface.Name}}Server pb.Unimplemented{{.Interface.Name}}Server
service {{.Interface.Name}} service {{.Interface.Name}}
encoder ProtoEncoder
} }
func NewServer(svc {{.Interface.Name}}) *Server { func NewServer(svc {{.Interface.Name}}, encoder ProtoEncoder) *Server {
return &Server{service: svc} return &Server{service: svc, encoder: encoder}
} }
func RegisterServer(grpcSrv *grpc.Server, srv *Server) { func RegisterServer(grpcSrv *grpc.Server, srv *Server) {
...@@ -38,21 +39,21 @@ func RegisterServer(grpcSrv *grpc.Server, srv *Server) { ...@@ -38,21 +39,21 @@ func RegisterServer(grpcSrv *grpc.Server, srv *Server) {
{{- $paramList := list -}} {{- $paramList := list -}}
{{- range $param := $method.Params -}} {{- range $param := $method.Params -}}
{{- if not ( and $method.AcceptsContext (eq $param.Name "ctx")) -}} {{- if not ( and $method.AcceptsContext (eq $param.Name "ctx")) -}}
{{- $paramList = append $paramList (printf "req.%s" $param.Name ) -}} {{- $paramList = append $paramList $param.Name -}}
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}
// {{$method.Name}} implements {{$.Interface.Name}} // {{$method.Name}} implements {{$.Interface.Name}}
func (s *Server) {{$method.Name}}(ctx context.Context, request *pb.{{$method.Name}}Request) (response {{ $response }}, err error) { 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 }} {{- if gt $resListLen 0 }}
{{ $method.ResultsNames | join `,` }} := s.service.{{ $method.Name }}(ctx, {{ $paramList | join `, ` }}) {{ $method.ResultsNames | join `,` }} := s.service.{{ $method.Name }}(ctx, {{ $paramList | join `, ` }})
{{- else }} {{- else }}
err = s.service.{{ $method.Name }}(ctx, {{ $paramList | join `, ` }}) err = s.service.{{ $method.Name }}(ctx, {{ $paramList | join `, ` }})
{{- end }} {{- end }}
{{- if gt $resListLen 0 }} {{- if gt $resListLen 0 }}
response = {{ $method.Name }}ResponseToPB({{ $resList | join `,` }}) response = s.encoder.Decode{{ $method.Name }}Response({{ $resList | join `,` }})
{{- end }} {{- end }}
return return
} }
......
Subproject commit 9b500f82cbfed60c8aaee6ca3e1004df072368bc Subproject commit 28531974cc43f8ce31e7456241f3cb2535f8c179
...@@ -16,67 +16,52 @@ import ( ...@@ -16,67 +16,52 @@ import (
type Client struct { type Client struct {
client pb.InvitationsClient client pb.InvitationsClient
decoder ProtoDecoder decoder ProtoEncoder
} }
var _ Invitations = &Client{} var _ Invitations = &Client{}
func NewClient(conn *grpc.ClientConn, decoder ProtoDecoder) *Client { func NewClient(conn *grpc.ClientConn, decoder ProtoEncoder) *Client {
return &Client{ return &Client{
client: pb.NewInvitationsClient(conn), client: pb.NewInvitationsClient(conn),
decoder: decoder, 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 // Accept implements Invitations
func (c *Client) Accept(ctx context.Context, invitationId string, userId string) (err error) { 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) _, err = c.client.Accept(ctx, request)
return return
} }
// Create implements Invitations // Create implements Invitations
func (c *Client) Create(ctx context.Context, invitation *Invitation) (created *Invitation, err error) { 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) res, err := c.client.Create(ctx, request)
created = c.decoder.CreateResponse(res) created = c.decoder.EncodeCreateResponse(res)
return return
} }
// Delete implements Invitations // Delete implements Invitations
func (c *Client) Delete(ctx context.Context, invitationId string) (err error) { 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) _, err = c.client.Delete(ctx, request)
return return
} }
// Find implements Invitations // Find implements Invitations
func (c *Client) Find(ctx context.Context, filter *Filter, opts *options.FindOptions) (invitations []*Invitation, total int, err error) { 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) res, err := c.client.Find(ctx, request)
invitations, total = c.decoder.FindResponse(res) invitations, total = c.decoder.EncodeFindResponse(res)
return return
} }
// Get implements Invitations // Get implements Invitations
func (c *Client) Get(ctx context.Context, invitationId string) (invitation *Invitation, err error) { 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) res, err := c.client.Get(ctx, request)
invitation = c.decoder.GetResponse(res) invitation = c.decoder.EncodeGetResponse(res)
return return
} }
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")
}
// 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
}
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")
}
...@@ -17,10 +17,11 @@ import ( ...@@ -17,10 +17,11 @@ import (
type Server struct { type Server struct {
pb.UnimplementedInvitationsServer pb.UnimplementedInvitationsServer
service Invitations service Invitations
encoder ProtoEncoder
} }
func NewServer(svc Invitations) *Server { func NewServer(svc Invitations, encoder ProtoEncoder) *Server {
return &Server{service: svc} return &Server{service: svc, encoder: encoder}
} }
func RegisterServer(grpcSrv *grpc.Server, srv *Server) { func RegisterServer(grpcSrv *grpc.Server, srv *Server) {
...@@ -29,38 +30,38 @@ func RegisterServer(grpcSrv *grpc.Server, srv *Server) { ...@@ -29,38 +30,38 @@ func RegisterServer(grpcSrv *grpc.Server, srv *Server) {
// Accept implements Invitations // Accept implements Invitations
func (s *Server) Accept(ctx context.Context, request *pb.AcceptRequest) (response *emptypb.Empty, err error) { func (s *Server) Accept(ctx context.Context, request *pb.AcceptRequest) (response *emptypb.Empty, err error) {
req := AcceptRequestFromPB(request) invitationId, userId := s.encoder.DecodeAcceptRequest(request)
err = s.service.Accept(ctx, req.invitationId, req.userId) err = s.service.Accept(ctx, invitationId, userId)
return return
} }
// Create implements Invitations // Create implements Invitations
func (s *Server) Create(ctx context.Context, request *pb.CreateRequest) (response *pb.CreateResponse, err error) { func (s *Server) Create(ctx context.Context, request *pb.CreateRequest) (response *pb.CreateResponse, err error) {
req := CreateRequestFromPB(request) invitation := s.encoder.DecodeCreateRequest(request)
created, err := s.service.Create(ctx, req.invitation) created, err := s.service.Create(ctx, invitation)
response = CreateResponseToPB(created) response = s.encoder.DecodeCreateResponse(created)
return return
} }
// Delete implements Invitations // Delete implements Invitations
func (s *Server) Delete(ctx context.Context, request *pb.DeleteRequest) (response *emptypb.Empty, err error) { func (s *Server) Delete(ctx context.Context, request *pb.DeleteRequest) (response *emptypb.Empty, err error) {
req := DeleteRequestFromPB(request) invitationId := s.encoder.DecodeDeleteRequest(request)
err = s.service.Delete(ctx, req.invitationId) err = s.service.Delete(ctx, invitationId)
return return
} }
// Find implements Invitations // Find implements Invitations
func (s *Server) Find(ctx context.Context, request *pb.FindRequest) (response *pb.FindResponse, err error) { func (s *Server) Find(ctx context.Context, request *pb.FindRequest) (response *pb.FindResponse, err error) {
req := FindRequestFromPB(request) filter, opts := s.encoder.DecodeFindRequest(request)
invitations, total, err := s.service.Find(ctx, req.filter, req.opts) invitations, total, err := s.service.Find(ctx, filter, opts)
response = FindResponseToPB(invitations, total) response = s.encoder.DecodeFindResponse(invitations, total)
return return
} }
// Get implements Invitations // Get implements Invitations
func (s *Server) Get(ctx context.Context, request *pb.GetRequest) (response *pb.GetResponse, err error) { func (s *Server) Get(ctx context.Context, request *pb.GetRequest) (response *pb.GetResponse, err error) {
req := GetRequestFromPB(request) invitationId := s.encoder.DecodeGetRequest(request)
invitation, err := s.service.Get(ctx, req.invitationId) invitation, err := s.service.Get(ctx, invitationId)
response = GetResponseToPB(invitation) response = s.encoder.DecodeGetResponse(invitation)
return return
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment