#[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: Service + 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; /// 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(self) -> IntoMakeServiceWithConnectInfo; } impl ServiceExt for S where S: Service + Sized, { fn into_make_service(self) -> IntoMakeService { IntoMakeService::new(self) } #[cfg(feature = "tokio")] fn into_make_service_with_connect_info(self) -> IntoMakeServiceWithConnectInfo { IntoMakeServiceWithConnectInfo::new(self) } }