move ServiceExt to tower-util crate
This commit is contained in:
parent
2e9e2d1813
commit
1863304331
|
@ -31,6 +31,8 @@ pub use crate::{
|
||||||
#[cfg(feature = "call-all")]
|
#[cfg(feature = "call-all")]
|
||||||
pub use crate::call_all::{CallAll, CallAllUnordered};
|
pub use crate::call_all::{CallAll, CallAllUnordered};
|
||||||
|
|
||||||
|
type Error = Box<dyn std::error::Error + Send + Sync>;
|
||||||
|
|
||||||
pub mod error {
|
pub mod error {
|
||||||
//! Error types
|
//! Error types
|
||||||
|
|
||||||
|
@ -44,3 +46,39 @@ pub mod future {
|
||||||
pub use crate::either::future as either;
|
pub use crate::either::future as either;
|
||||||
pub use crate::optional::future as optional;
|
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> {}
|
||||||
|
|
|
@ -1,44 +1,6 @@
|
||||||
//! Combinators for working with `Service`s
|
//! Combinators for working with `Service`s
|
||||||
|
|
||||||
use futures_core::Stream;
|
|
||||||
use tower_service::Service;
|
|
||||||
pub use tower_util::{
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue