move ServiceExt to tower-util crate

This commit is contained in:
Sean McArthur 2019-12-11 11:32:09 -08:00
parent 2e9e2d1813
commit 1863304331
2 changed files with 40 additions and 40 deletions

View File

@ -31,6 +31,8 @@ pub use crate::{
#[cfg(feature = "call-all")]
pub use crate::call_all::{CallAll, CallAllUnordered};
type Error = Box<dyn std::error::Error + Send + Sync>;
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<Request>: tower_service::Service<Request> {
/// 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<Self, Request>
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<Item = Request>` + `Self` => `Stream<Item = Response>`. See the
/// documentation for [`CallAll`](struct.CallAll.html) for details.
#[cfg(feature = "call-all")]
fn call_all<S>(self, reqs: S) -> CallAll<Self, S>
where
Self: Sized,
Self::Error: Into<Error>,
S: futures_core::Stream<Item = Request>,
{
CallAll::new(self, reqs)
}
}
impl<T: ?Sized, Request> ServiceExt<Request> for T where T: tower_service::Service<Request> {}

View File

@ -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<T: ?Sized, Request> ServiceExt<Request> for T where T: Service<Request> {}
type Error = Box<dyn std::error::Error + Send + Sync>;
/// An extension trait for `Service`s that provides a variety of convenient
/// adapters
pub trait ServiceExt<Request>: Service<Request> {
/// 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<Self, Request>
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<Item = Request>` + `Self` => `Stream<Item = Response>`. See the
/// documentation for [`CallAll`](struct.CallAll.html) for details.
fn call_all<S>(self, reqs: S) -> CallAll<Self, S>
where
Self: Sized,
Self::Error: Into<Error>,
S: Stream<Item = Request>,
{
CallAll::new(self, reqs)
}
}