Service is a trait representing an asynchronous
function of a request to a response. It's similar to
async fn(Request) -> Result<Response, Error>.
The argument and return value isn't strictly required to be for HTTP. Therefore, hyper uses several "trait aliases" to reduce clutter around bounds. These are:
HttpService: This is blanketly implemented for all types that implement
Service<http::Request<B1>, Response = http::Response<B2>>.
MakeService: When a
Servicereturns a new
Serviceas its "response", we consider it a
MakeService. Again, blanketly implemented in those cases.
Servicethat returns a "connection", a type that implements
In hyper, especially in the server setting, a
Service is usually bound
to a single connection. It defines how to respond to all requests that
connection will receive.
While it's possible to implement
Service for a type manually, the helper
service_fn should be sufficient for most cases.
Service is bound to a single connection, a
needs a way to make them as it accepts connections. This is what a
Resources that need to be shared by all
Services can be put into a
MakeService, and then passed to individual
An asynchronous function from a