[][src]Struct tower::buffer::Buffer

pub struct Buffer<T, Request> where
    T: Service<Request>, 
{ /* fields omitted */ }
This is supported on crate feature buffer only.

Adds an mpsc buffer in front of an inner service.

See the module documentation for more details.

Implementations

impl<T, Request> Buffer<T, Request> where
    T: Service<Request>,
    T::Error: Into<BoxError>, 
[src]

pub fn new(service: T, bound: usize) -> Self where
    T: Send + 'static,
    T::Future: Send,
    T::Error: Send + Sync,
    Request: Send + 'static, 
[src]

Creates a new Buffer wrapping service.

bound gives the maximal number of requests that can be queued for the service before backpressure is applied to callers.

The default Tokio executor is used to run the given service, which means that this method must be called while on the Tokio runtime.

A note on choosing a bound

When Buffer's implementation of poll_ready returns Poll::Ready, it reserves a slot in the channel for the forthcoming call(). However, if this call doesn't arrive, this reserved slot may be held up for a long time. As a result, it's advisable to set bound to be at least the maximum number of concurrent requests the Buffer will see. If you do not, all the slots in the buffer may be held up by futures that have just called poll_ready but will not issue a call, which prevents other senders from issuing new requests.

pub fn pair(
    service: T,
    bound: usize
) -> (Buffer<T, Request>, Worker<T, Request>) where
    T: Send + 'static,
    T::Error: Send + Sync,
    Request: Send + 'static, 
[src]

Creates a new Buffer wrapping service, but returns the background worker.

This is useful if you do not want to spawn directly onto the tokio runtime but instead want to use your own executor. This will return the Buffer and the background Worker that you can then spawn.

Trait Implementations

impl<T, Request> Clone for Buffer<T, Request> where
    T: Service<Request>, 
[src]

impl<T: Debug, Request: Debug> Debug for Buffer<T, Request> where
    T: Service<Request>,
    T::Future: Debug
[src]

impl<T, Request> Service<Request> for Buffer<T, Request> where
    T: Service<Request>,
    T::Error: Into<BoxError>, 
[src]

type Response = T::Response

Responses given by the service.

type Error = BoxError

Errors produced by the service.

type Future = ResponseFuture<T::Future>

The future response value.

Auto Trait Implementations

impl<T, Request> !RefUnwindSafe for Buffer<T, Request>[src]

impl<T, Request> Send for Buffer<T, Request> where
    Request: Send,
    <T as Service<Request>>::Future: Send
[src]

impl<T, Request> !Sync for Buffer<T, Request>[src]

impl<T, Request> Unpin for Buffer<T, Request>[src]

impl<T, Request> !UnwindSafe for Buffer<T, Request>[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T> Instrument for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, Request> ServiceExt<Request> for T where
    T: Service<Request> + ?Sized
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,