Expand description
Asynchronous Services
A 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 implementService<http::Request<B1>, Response = http::Response<B2>>
.MakeService
: When aService
returns a newService
as its “response”, we consider it aMakeService
. Again, blanketly implemented in those cases.MakeConnection
: AService
that returns a “connection”, a type that implementsAsyncRead
andAsyncWrite
.
HttpService
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.
The helper service_fn
should be sufficient for most cases, but
if you need to implement Service
for a type manually, you can follow the example
in service_struct_impl.rs
.
MakeService
Since a Service
is bound to a single connection, a Server
needs a way to make them as it accepts connections. This is what a
MakeService
does.
Resources that need to be shared by all Service
s can be put into a
MakeService
, and then passed to individual Service
s when call
is called.
Traits
Request
to a Response
.Functions
MakeService
from a function.Service
from a function.