Function service_fn

fn service_fn<T>(f: T) -> ServiceFn<T>

Returns a new ServiceFn with the given closure.

This lets you build a Service from an async function that returns a Result.

Example

use tower::{service_fn, Service, ServiceExt, BoxError};
# struct Request;
# impl Request {
#     fn new() -> Self { Self }
# }
# struct Response(&'static str);
# impl Response {
#     fn new(body: &'static str) -> Self {
#         Self(body)
#     }
#     fn into_body(self) -> &'static str { self.0 }
# }

# #[tokio::main]
# async fn main() -> Result<(), BoxError> {
async fn handle(request: Request) -> Result<Response, BoxError> {
    let response = Response::new("Hello, World!");
    Ok(response)
}

let mut service = service_fn(handle);

let response = service
    .ready()
    .await?
    .call(Request::new())
    .await?;

assert_eq!("Hello, World!", response.into_body());
#
# Ok(())
# }