62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package routers
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
|
|
"github.com/tech/sendico/pkg/api/routers/internal/grpcimp"
|
|
"github.com/tech/sendico/pkg/mlogger"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
type (
|
|
GRPCServiceRegistration = func(grpc.ServiceRegistrar)
|
|
)
|
|
|
|
type GRPC interface {
|
|
Register(registration GRPCServiceRegistration) error
|
|
Start(ctx context.Context) error
|
|
Finish(ctx context.Context) error
|
|
Addr() net.Addr
|
|
Done() <-chan error
|
|
}
|
|
|
|
type (
|
|
GRPCConfig = grpcimp.Config
|
|
GRPCTLSConfig = grpcimp.TLSConfig
|
|
)
|
|
|
|
type GRPCOption func(*grpcimp.Options)
|
|
|
|
func WithUnaryInterceptors(interceptors ...grpc.UnaryServerInterceptor) GRPCOption {
|
|
return func(o *grpcimp.Options) {
|
|
o.UnaryInterceptors = append(o.UnaryInterceptors, interceptors...)
|
|
}
|
|
}
|
|
|
|
func WithStreamInterceptors(interceptors ...grpc.StreamServerInterceptor) GRPCOption {
|
|
return func(o *grpcimp.Options) {
|
|
o.StreamInterceptors = append(o.StreamInterceptors, interceptors...)
|
|
}
|
|
}
|
|
|
|
func WithListener(listener net.Listener) GRPCOption {
|
|
return func(o *grpcimp.Options) {
|
|
o.Listener = listener
|
|
}
|
|
}
|
|
|
|
func WithServerOptions(opts ...grpc.ServerOption) GRPCOption {
|
|
return func(o *grpcimp.Options) {
|
|
o.ServerOptions = append(o.ServerOptions, opts...)
|
|
}
|
|
}
|
|
|
|
func NewGRPCRouter(logger mlogger.Logger, config *GRPCConfig, opts ...GRPCOption) (GRPC, error) {
|
|
options := &grpcimp.Options{}
|
|
for _, opt := range opts {
|
|
opt(options)
|
|
}
|
|
return grpcimp.NewRouter(logger, config, options)
|
|
}
|