# Module hyper::service [−] [src]

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 implement `Service<http::Request<B1>, Response = http::Response<B2>>`.
- `MakeService`: When a `Service` returns a new `Service` as its “response”, we consider it a `MakeService`. Again, blanketly implemented in those cases.
- `MakeConnection`: A `Service` that returns a “connection”, a type that implements `AsyncRead` and `AsyncWrite`.

# 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

Service | An asynchronous function from a `Request` to a `Response`.

## Functions

make_service_fn | Create a `MakeService` from a function.
service_fn | Create a `Service` from a function.