Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( ErrAlreadyRunning error = terrors.InternalService("", "Server is already running", nil) // empty dotted code so impl details don't leak outside ErrTransportClosed error = terrors.InternalService("", "Transport closed", nil) )
Functions ¶
func ErrorResponse ¶
ErrorResponse constructs a response for the given request, with the given error as its contents. Mercury clients know how to unmarshal these errors.
func SetDefaultMiddleware ¶
func SetDefaultMiddleware(middleware []ServerMiddleware)
Types ¶
type Endpoint ¶
type Endpoint struct { // Name is the Endpoint's unique name, and is used to route requests to it. Name string // Handler is a function to be invoked upon receiving a request, to generate a response. Handler Handler // Request is a "template" object for the Endpoint's request format. Request interface{} // Response is a "template" object for the Endpoint's response format. Response interface{} }
An Endpoint represents a handler function bound to a particular endpoint name.
type Server ¶
type Server interface { // Name returns the service name. It must be set at construction time and is immutable. Name() string // AddEndpoints registers new Endpoint. If any name conflicts with an existing endpoint, the old endpoint(s) will be // removed. Errors raised as panics. AddEndpoints(eps ...Endpoint) // RemoveEndpoints removes the Endpoints given (if they are registered). RemoveEndpoints(eps ...Endpoint) // Endpoint returns a registered endpoint (if there is one) for the given Name. Endpoint(name string) (Endpoint, bool) // Endpoints returns all Endpoints registered. Endpoints() []Endpoint // Start starts the server on the given transport, and returns once the server is ready for work. The server will // continue until purposefully stopped, or until a terminal error occurs. The transport should be pre-initialised. Start(trans transport.Transport) error // Run starts the server and blocks until it stops. As this function is intended to support the main run loop of a // service, an error results in a panic. Run(trans transport.Transport) // Stop forcefully stops the server. It does not terminate the underlying transport. Stop() // Middleware returns a copy of the ServerMiddleware stack currently installed. // // Server middleware is used to act upon or transform a handler's input or output. Middleware is applied in order // during the request phase, and in reverse order during the response phase. Middleware() []ServerMiddleware // SetMiddleware replaces the server's ServerMiddleware stack. SetMiddleware([]ServerMiddleware) // AddMiddleware appends the given ServerMiddleware to the stack. AddMiddleware(ServerMiddleware) }
A Server provides Endpoint RPC functionality atop a typhon Transport.
type ServerMiddleware ¶
type ServerMiddleware interface { // ProcessServerRequest is called on each inbound request, before it is routed to an Endpoint. If a response or an // error is returned, Mercury does not bother calling any other request middleware. It will apply response // middleware and respond to the caller with the result. // // If an error is to be returned, use `ErrorResponse`. ProcessServerRequest(req mercury.Request) (mercury.Request, mercury.Response) // ProcessServerResponse is called on all responses before they are returned to a caller. Unlike request middleware, // response middleware is always called. If an error is returned, it will be marshaled to a response and will // continue to other response middleware. // // Nil responses MUST be handled. If an error is to be returned, use `ErrorResponse`. // // Note that response middleware are applied in reverse order. ProcessServerResponse(rsp mercury.Response, req mercury.Request) mercury.Response }
Click to show internal directories.
Click to hide internal directories.