| #[cfg(feature = "tokio")] |
| use crate::extract::connect_info::IntoMakeServiceWithConnectInfo; |
| use crate::routing::IntoMakeService; |
| use tower_service::Service; |
| |
| /// Extension trait that adds additional methods to any [`Service`]. |
| pub trait ServiceExt<R>: Service<R> + Sized { |
| /// Convert this service into a [`MakeService`], that is a [`Service`] whose |
| /// response is another service. |
| /// |
| /// This is commonly used when applying middleware around an entire [`Router`]. See ["Rewriting |
| /// request URI in middleware"] for more details. |
| /// |
| /// [`MakeService`]: tower::make::MakeService |
| /// ["Rewriting request URI in middleware"]: crate::middleware#rewriting-request-uri-in-middleware |
| /// [`Router`]: crate::Router |
| fn into_make_service(self) -> IntoMakeService<Self>; |
| |
| /// Convert this service into a [`MakeService`], that will store `C`'s |
| /// associated `ConnectInfo` in a request extension such that [`ConnectInfo`] |
| /// can extract it. |
| /// |
| /// This enables extracting things like the client's remote address. |
| /// This is commonly used when applying middleware around an entire [`Router`]. See ["Rewriting |
| /// request URI in middleware"] for more details. |
| /// |
| /// [`MakeService`]: tower::make::MakeService |
| /// ["Rewriting request URI in middleware"]: crate::middleware#rewriting-request-uri-in-middleware |
| /// [`Router`]: crate::Router |
| /// [`ConnectInfo`]: crate::extract::connect_info::ConnectInfo |
| #[cfg(feature = "tokio")] |
| fn into_make_service_with_connect_info<C>(self) -> IntoMakeServiceWithConnectInfo<Self, C>; |
| } |
| |
| impl<S, R> ServiceExt<R> for S |
| where |
| S: Service<R> + Sized, |
| { |
| fn into_make_service(self) -> IntoMakeService<Self> { |
| IntoMakeService::new(self) |
| } |
| |
| #[cfg(feature = "tokio")] |
| fn into_make_service_with_connect_info<C>(self) -> IntoMakeServiceWithConnectInfo<Self, C> { |
| IntoMakeServiceWithConnectInfo::new(self) |
| } |
| } |