diff --git a/tower-util/src/lib.rs b/tower-util/src/lib.rs index 2237e7d..67d472a 100644 --- a/tower-util/src/lib.rs +++ b/tower-util/src/lib.rs @@ -31,6 +31,8 @@ pub use crate::{ #[cfg(feature = "call-all")] pub use crate::call_all::{CallAll, CallAllUnordered}; +type Error = Box; + pub mod error { //! Error types @@ -44,3 +46,39 @@ pub mod future { pub use crate::either::future as either; pub use crate::optional::future as optional; } + +/// An extension trait for `Service`s that provides a variety of convenient +/// adapters +pub trait ServiceExt: tower_service::Service { + /// A future yielding the service when it is ready to accept a request. + fn ready(&mut self) -> Ready<'_, Self, Request> + where + Self: Sized, + { + Ready::new(self) + } + + /// Consume this `Service`, calling with the providing request once it is ready. + fn oneshot(self, req: Request) -> Oneshot + where + Self: Sized, + { + Oneshot::new(self, req) + } + + /// Process all requests from the given `Stream`, and produce a `Stream` of their responses. + /// + /// This is essentially `Stream` + `Self` => `Stream`. See the + /// documentation for [`CallAll`](struct.CallAll.html) for details. + #[cfg(feature = "call-all")] + fn call_all(self, reqs: S) -> CallAll + where + Self: Sized, + Self::Error: Into, + S: futures_core::Stream, + { + CallAll::new(self, reqs) + } +} + +impl ServiceExt for T where T: tower_service::Service {} diff --git a/tower/src/util.rs b/tower/src/util.rs index 8eea103..87cf6c8 100644 --- a/tower/src/util.rs +++ b/tower/src/util.rs @@ -1,44 +1,6 @@ //! Combinators for working with `Service`s -use futures_core::Stream; -use tower_service::Service; pub use tower_util::{ - BoxService, CallAll, CallAllUnordered, Either, Oneshot, Optional, Ready, UnsyncBoxService, + BoxService, CallAll, CallAllUnordered, Either, Oneshot, Optional, Ready, ServiceExt, + UnsyncBoxService, }; - -impl ServiceExt for T where T: Service {} - -type Error = Box; - -/// An extension trait for `Service`s that provides a variety of convenient -/// adapters -pub trait ServiceExt: Service { - /// A future yielding the service when it is ready to accept a request. - fn ready(&mut self) -> Ready<'_, Self, Request> - where - Self: Sized, - { - Ready::new(self) - } - - /// Consume this `Service`, calling with the providing request once it is ready. - fn oneshot(self, req: Request) -> Oneshot - where - Self: Sized, - { - Oneshot::new(self, req) - } - - /// Process all requests from the given `Stream`, and produce a `Stream` of their responses. - /// - /// This is essentially `Stream` + `Self` => `Stream`. See the - /// documentation for [`CallAll`](struct.CallAll.html) for details. - fn call_all(self, reqs: S) -> CallAll - where - Self: Sized, - Self::Error: Into, - S: Stream, - { - CallAll::new(self, reqs) - } -}