[−][src]Struct erkpht_tower::builder::ServiceBuilder
Declaratively construct Service values.
ServiceBuilder
provides a builder-like interface for composing
layers to be applied to a Service
.
Service
A Service
is a trait representing an
asynchronous function of a request to a response. It is similar to async fn(Request) -> Result<Response, Error>
.
A Service
is typically bound to a single transport, such as a TCP
connection. It defines how all inbound or outbound requests are handled
by that connection.
Order
The order in which layers are added impacts how requests are handled. Layers
that are added first will be called with the request first. The argument to
service
will be last to see the request.
#[cfg(all(feature = "buffer", feature = "limit"))] ServiceBuilder::new() .buffer(100) .concurrency_limit(10) .service(svc)
In the above example, the buffer layer receives the request first followed
by concurrency_limit
. buffer
enables up to 100 request to be in-flight
on top of the requests that have already been forwarded to the next
layer. Combined with concurrency_limit
, this allows up to 110 requests to be
in-flight.
#[cfg(all(feature = "buffer", feature = "limit"))] ServiceBuilder::new() .concurrency_limit(10) .buffer(100) .service(svc)
The above example is similar, but the order of layers is reversed. Now,
concurrency_limit
applies first and only allows 10 requests to be in-flight
total.
Examples
A Service
stack with a single layer:
#[cfg(feature = "limit")] ServiceBuilder::new() .concurrency_limit(5) .service(svc);
A Service
stack with multiple layers that contain rate limiting,
in-flight request limits, and a channel-backed, clonable Service
:
#[cfg(all(feature = "buffer", feature = "limit"))] ServiceBuilder::new() .buffer(5) .concurrency_limit(5) .rate_limit(5, Duration::from_secs(1)) .service(svc);
Methods
impl ServiceBuilder<Identity>
[src]
impl<L> ServiceBuilder<L>
[src]
pub fn layer<T>(self, layer: T) -> ServiceBuilder<Stack<T, L>>
[src]
Add a new layer T
into the ServiceBuilder
.
pub fn into_inner(self) -> L
[src]
Obtains the underlying Layer
implementation.
pub fn service<S>(self, service: S) -> L::Service where
L: Layer<S>,
[src]
L: Layer<S>,
Wrap the service S
with the layers.
Trait Implementations
impl<L: Clone> Clone for ServiceBuilder<L>
[src]
fn clone(&self) -> ServiceBuilder<L>
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<L: Debug> Debug for ServiceBuilder<L>
[src]
Auto Trait Implementations
impl<L> RefUnwindSafe for ServiceBuilder<L> where
L: RefUnwindSafe,
L: RefUnwindSafe,
impl<L> Send for ServiceBuilder<L> where
L: Send,
L: Send,
impl<L> Sync for ServiceBuilder<L> where
L: Sync,
L: Sync,
impl<L> Unpin for ServiceBuilder<L> where
L: Unpin,
L: Unpin,
impl<L> UnwindSafe for ServiceBuilder<L> where
L: UnwindSafe,
L: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,