1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use fmt;
use Future;
use Service;
/// 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_async::{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
/// .call(Request::new())
/// .await?;
///
/// assert_eq!("Hello, World!", response.into_body());
/// #
/// # Ok(())
/// # }
/// ```
/// A [`Service`] implemented by a closure.
///
/// See [`service_fn`] for more details.