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

Добавлен шаблон для генерации сервера gPRC

parent 9d7458e1
No related branches found
No related tags found
No related merge requests found
import (
pb "git.perx.ru/perxis/perxis-go/proto/{{lower .Interface.Name}}"
grpc "google.golang.org/grpc"
"google.golang.org/protobuf/types/known/emptypb"
)
type Server struct {
pb.Unimplemented{{.Interface.Name}}Server
service {{.Interface.Name}}
}
func NewServer(svc {{.Interface.Name}}) *Server {
return &Server{service: svc}
}
func RegisterServer(grpcSrv *grpc.Server, srv *Server) {
pb.Register{{.Interface.Name}}Server(grpcSrv, srv)
}
{{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 $param.Name -}}
{{- $resListLen = add $resListLen 1 -}}
{{- end -}}
{{- end -}}
{{- $response := (printf "*pb.%sResponse" $method.Name) -}}
{{- if eq $resListLen 0 -}}
{{- $response = (print "*emptypb.Empty") -}}
{{- 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 := list -}}
{{- range $param := $method.Params -}}
{{- if not ( and $method.AcceptsContext (eq $param.Name "ctx")) -}}
{{- $paramList = append $paramList (printf "req.%s" $param.Name ) -}}
{{- end -}}
{{- end }}
{{ 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 `,` -}})
{{- end }}
return
}
{{ end }}
{{ end }}
\ No newline at end of file
Subproject commit e86c1f4304bde0094f870346f4ba3bf4a7e8858f
Subproject commit 0a04737abf1e4f779ad1319b80721482f7af91cd
package invitations
import (
"git.perx.ru/perxis/perxis-go/pkg/options"
pb "git.perx.ru/perxis/perxis-go/proto/invitations"
timestamp "google.golang.org/protobuf/types/known/timestamppb"
)
type AcceptRequest struct {
invitationId string
userId string
}
func AcceptRequestFromPB(request *pb.AcceptRequest) *AcceptRequest {
return &AcceptRequest{invitationId: request.InvitationId, userId: request.UserId}
}
type CreateRequest struct {
invitation *Invitation
}
func CreateRequestFromPB(request *pb.CreateRequest) *CreateRequest {
return &CreateRequest{invitation: InvitationFromProto(request.Invitation)}
}
func CreateResponseToPB(invitation *Invitation) *pb.CreateResponse {
return nil
}
type DeleteRequest struct {
invitationId string
}
func DeleteRequestFromPB(request *pb.DeleteRequest) *DeleteRequest {
return &DeleteRequest{invitationId: request.InvitationId}
}
type FindRequest struct {
filter *Filter
opts *options.FindOptions
}
func FindRequestFromPB(request *pb.FindRequest) *FindRequest {
if request == nil {
return nil
}
req := &FindRequest{}
if request.Filter != nil {
req.filter = &Filter{
ID: request.Filter.Id,
Email: request.Filter.Email,
OrgID: request.Filter.OrgId,
SpaceID: request.Filter.SpaceId,
OwnerID: request.Filter.OwnerId,
Role: request.Filter.Role,
}
}
if request.Options != nil {
req.opts = options.FindOptionsFromPB(request.Options)
}
return nil
}
func FindResponseToPB(invitations []*Invitation, total int) *pb.FindResponse {
protoInvitations := make([]*pb.Invitation, 0, len(invitations))
for _, i := range invitations {
protoInvitations = append(protoInvitations, InvitationToProto(i))
}
return &pb.FindResponse{
Invitations: protoInvitations,
Total: int64(total),
}
}
type GetRequest struct {
invitationId string
}
func GetRequestFromPB(request *pb.GetRequest) *GetRequest {
if request == nil {
return nil
}
return &GetRequest{invitationId: request.InvitationId}
}
func GetResponseToPB(invitation *Invitation) *pb.GetResponse {
return &pb.GetResponse{Invitation: InvitationToProto(invitation)}
}
func InvitationToProto(invitation *Invitation) *pb.Invitation {
if invitation == nil {
return nil
}
pi := &pb.Invitation{
Id: invitation.ID,
Email: invitation.Email,
OrgId: invitation.OrgID,
SpaceId: invitation.SpaceID,
OwnerId: invitation.OwnerID,
Role: invitation.Role,
}
if invitation.CreatedAt != nil && !invitation.CreatedAt.IsZero() {
pi.CreatedAt = timestamp.New(*invitation.CreatedAt)
}
if invitation.ValidUntil != nil && !invitation.ValidUntil.IsZero() {
pi.ValidUntil = timestamp.New(*invitation.ValidUntil)
}
return pi
}
func InvitationFromProto(protoInvitation *pb.Invitation) *Invitation {
if protoInvitation == nil {
return nil
}
i := &Invitation{
ID: protoInvitation.Id,
Email: protoInvitation.Email,
OrgID: protoInvitation.OrgId,
SpaceID: protoInvitation.SpaceId,
OwnerID: protoInvitation.OwnerId,
Role: protoInvitation.Role,
}
if protoInvitation.CreatedAt != nil {
t := protoInvitation.CreatedAt.AsTime()
i.CreatedAt = &t
}
if protoInvitation.ValidUntil != nil {
t := protoInvitation.ValidUntil.AsTime()
i.ValidUntil = &t
}
return i
}
// Code generated by gowrap. DO NOT EDIT.
// template: ../../assets/templates/transport/grpc_server.tmpl
// gowrap: http://github.com/hexdigest/gowrap
package invitations
//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/invitations -i Invitations -t ../../assets/templates/transport/grpc_server.tmpl -o server.go -l ""
import (
"context"
pb "git.perx.ru/perxis/perxis-go/proto/invitations"
grpc "google.golang.org/grpc"
"google.golang.org/protobuf/types/known/emptypb"
)
type Server struct {
pb.UnimplementedInvitationsServer
service Invitations
}
func NewServer(svc Invitations) *Server {
return &Server{service: svc}
}
func RegisterServer(grpcSrv *grpc.Server, srv *Server) {
pb.RegisterInvitationsServer(grpcSrv, srv)
}
// 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)
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)
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)
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)
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)
return
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment