Documentation ¶
Overview ¶
Package grpc provides a gRPC binding for endpoints.
Index ¶
- Constants
- func EncodeKeyValue(key, val string) (string, string)
- func Interceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, ...) (resp interface{}, err error)
- type Client
- type ClientFinalizerFunc
- type ClientOption
- type ClientRequestFunc
- type ClientResponseFunc
- type DecodeRequestFunc
- type DecodeResponseFunc
- type EncodeRequestFunc
- type EncodeResponseFunc
- type Handler
- type Server
- type ServerFinalizerFunc
- type ServerOption
- func ServerAfter[REQ any, RES any](after ...ServerResponseFunc) ServerOption[REQ, RES]
- func ServerBefore[REQ any, RES any](before ...ServerRequestFunc) ServerOption[REQ, RES]
- func ServerErrorHandler[REQ any, RES any](errorHandler transport.ErrorHandler) ServerOption[REQ, RES]
- func ServerErrorLogger[REQ any, RES any](logger log.Logger) ServerOption[REQ, RES]
- func ServerFinalizer[REQ any, RES any](f ...ServerFinalizerFunc) ServerOption[REQ, RES]
- type ServerRequestFunc
- type ServerResponseFunc
Constants ¶
const (
ContextKeyRequestMethod contextKey = iota
)
Variables ¶
This section is empty.
Functions ¶
func EncodeKeyValue ¶
EncodeKeyValue sanitizes a key-value pair for use in gRPC metadata headers.
func Interceptor ¶ added in v0.7.0
func Interceptor( ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler, ) (resp interface{}, err error)
Interceptor is a grpc UnaryInterceptor that injects the method name into context so it can be consumed by Go kit gRPC middlewares. The Interceptor typically is added at creation time of the grpc-go server. Like this: `grpc.NewServer(grpc.UnaryInterceptor(kitgrpc.Interceptor))`
Types ¶
type Client ¶
Client wraps a gRPC connection and provides a method that implements endpoint.Endpoint.
func NewClient ¶
func NewClient[REQ any, RES any]( cc *grpc.ClientConn, serviceName string, method string, enc EncodeRequestFunc[REQ], dec DecodeResponseFunc[RES], grpcReply interface{}, options ...ClientOption[REQ, RES], ) *Client[REQ, RES]
NewClient constructs a usable Client for a single remote endpoint. Pass an zero-value protobuf message of the RPC response type as the grpcReply argument.
type ClientFinalizerFunc ¶ added in v0.7.0
ClientFinalizerFunc can be used to perform work at the end of a client gRPC request, after the response is returned. The principal intended use is for error logging. Additional response parameters are provided in the context under keys with the ContextKeyResponse prefix. Note: err may be nil. There maybe also no additional response parameters depending on when an error occurs.
type ClientOption ¶
ClientOption sets an optional parameter for clients.
func ClientAfter ¶ added in v0.4.0
func ClientAfter[REQ any, RES any](after ...ClientResponseFunc) ClientOption[REQ, RES]
ClientAfter sets the ClientResponseFuncs that are applied to the incoming gRPC response prior to it being decoded. This is useful for obtaining response metadata and adding onto the context prior to decoding.
func ClientBefore ¶ added in v0.2.0
func ClientBefore[REQ any, RES any](before ...ClientRequestFunc) ClientOption[REQ, RES]
ClientBefore sets the RequestFuncs that are applied to the outgoing gRPC request before it's invoked.
func ClientFinalizer ¶ added in v0.7.0
func ClientFinalizer[REQ any, RES any](f ...ClientFinalizerFunc) ClientOption[REQ, RES]
ClientFinalizer is executed at the end of every gRPC request. By default, no finalizer is registered.
type ClientRequestFunc ¶ added in v0.4.0
ClientRequestFunc may take information from context and use it to construct metadata headers to be transported to the server. ClientRequestFuncs are executed after creating the request but prior to sending the gRPC request to the server.
func SetRequestHeader ¶
func SetRequestHeader(key, val string) ClientRequestFunc
SetRequestHeader returns a ClientRequestFunc that sets the specified metadata key-value pair.
type ClientResponseFunc ¶ added in v0.4.0
type ClientResponseFunc func(ctx context.Context, header metadata.MD, trailer metadata.MD) context.Context
ClientResponseFunc may take information from a gRPC metadata header and/or trailer and make the responses available for consumption. ClientResponseFuncs are only executed in clients, after a request has been made, but prior to it being decoded.
type DecodeRequestFunc ¶
DecodeRequestFunc extracts a user-domain request object from a gRPC request. It's designed to be used in gRPC servers, for server-side endpoints. One straightforward DecodeRequestFunc could be something that decodes from the gRPC request message to the concrete request type.
type DecodeResponseFunc ¶
DecodeResponseFunc extracts a user-domain response object from a gRPC response object. It's designed to be used in gRPC clients, for client-side endpoints. One straightforward DecodeResponseFunc could be something that decodes from the gRPC response message to the concrete response type.
type EncodeRequestFunc ¶
EncodeRequestFunc encodes the passed request object into the gRPC request object. It's designed to be used in gRPC clients, for client-side endpoints. One straightforward EncodeRequestFunc could something that encodes the object directly to the gRPC request message.
type EncodeResponseFunc ¶
EncodeResponseFunc encodes the passed response object to the gRPC response message. It's designed to be used in gRPC servers, for server-side endpoints. One straightforward EncodeResponseFunc could be something that encodes the object directly to the gRPC response message.
type Handler ¶
type Handler interface {
ServeGRPC(ctx context.Context, request interface{}) (context.Context, interface{}, error)
}
Handler which should be called from the gRPC binding of the service implementation. The incoming request parameter, and returned response parameter, are both gRPC types, not user-domain.
type Server ¶
Server wraps an endpoint and implements grpc.Handler.
func NewServer ¶
func NewServer[REQ any, RES any]( e endpoint.Endpoint[REQ, RES], dec DecodeRequestFunc[REQ], enc EncodeResponseFunc[RES], options ...ServerOption[REQ, RES], ) *Server[REQ, RES]
NewServer constructs a new server, which implements wraps the provided endpoint and implements the Handler interface. Consumers should write bindings that adapt the concrete gRPC methods from their compiled protobuf definitions to individual handlers. Request and response objects are from the caller business domain, not gRPC request and reply types.
type ServerFinalizerFunc ¶ added in v0.7.0
ServerFinalizerFunc can be used to perform work at the end of an gRPC request, after the response has been written to the client.
type ServerOption ¶
ServerOption sets an optional parameter for servers.
func ServerAfter ¶
func ServerAfter[REQ any, RES any](after ...ServerResponseFunc) ServerOption[REQ, RES]
ServerAfter functions are executed on the gRPC response writer after the endpoint is invoked, but before anything is written to the client.
func ServerBefore ¶
func ServerBefore[REQ any, RES any](before ...ServerRequestFunc) ServerOption[REQ, RES]
ServerBefore functions are executed on the gRPC request object before the request is decoded.
func ServerErrorHandler ¶ added in v0.9.0
func ServerErrorHandler[REQ any, RES any](errorHandler transport.ErrorHandler) ServerOption[REQ, RES]
ServerErrorHandler is used to handle non-terminal errors. By default, non-terminal errors are ignored.
func ServerErrorLogger ¶
func ServerErrorLogger[REQ any, RES any](logger log.Logger) ServerOption[REQ, RES]
ServerErrorLogger is used to log non-terminal errors. By default, no errors are logged. Deprecated: Use ServerErrorHandler instead.
func ServerFinalizer ¶ added in v0.7.0
func ServerFinalizer[REQ any, RES any](f ...ServerFinalizerFunc) ServerOption[REQ, RES]
ServerFinalizer is executed at the end of every gRPC request. By default, no finalizer is registered.
type ServerRequestFunc ¶ added in v0.4.0
ServerRequestFunc may take information from the received metadata header and use it to place items in the request scoped context. ServerRequestFuncs are executed prior to invoking the endpoint.
type ServerResponseFunc ¶ added in v0.4.0
type ServerResponseFunc func(ctx context.Context, header *metadata.MD, trailer *metadata.MD) context.Context
ServerResponseFunc may take information from a request context and use it to manipulate the gRPC response metadata headers and trailers. ResponseFuncs are only executed in servers, after invoking the endpoint but prior to writing a response.
func SetResponseHeader ¶
func SetResponseHeader(key, val string) ServerResponseFunc
SetResponseHeader returns a ResponseFunc that sets the specified metadata key-value pair.
func SetResponseTrailer ¶ added in v0.4.0
func SetResponseTrailer(key, val string) ServerResponseFunc
SetResponseTrailer returns a ResponseFunc that sets the specified metadata key-value pair.