Skip to main content

BufferService

Struct BufferService 

Source
pub struct BufferService<St, Req, Res, Err> { /* private fields */ }
Expand description

A service that buffers requests while its wrapped service is not ready.

The service is ready while the buffer has room; it does not depend on the readiness of the wrapped service. Requests that arrive while the wrapped service is not ready, or while earlier requests are still waiting, are buffered and released in order. Each released request waits for the wrapped service’s readiness, then releases the next one before calling the wrapped service. The wrapped service must notify synchronously when a call consumes its capacity, as required by readiness caching.

The buffer size is a soft limit: callers that call without a readiness check, or after an outdated one, are still buffered. Queue capacity changes invalidate cached readiness for every pipeline sharing this service, including when a queued request is canceled.

Errors of the wrapped service’s readiness are returned to the waiting request. Shutdown waits until all buffered requests have completed their calls, unless cancel_on_shutdown is set, and shuts down the wrapped service afterwards.

The default buffer capacity is 16 requests. A capacity of 0 is treated as 1.

Implementations§

Source§

impl<St, Req, Res, Err> BufferService<St, Req, Res, Err>
where St: Clone + 'static,

Source

pub fn new(size: usize, service: PipelineState<St, Req, Res, Err>) -> Self

Creates a buffering service with the specified capacity.

Source

pub fn cancel_on_shutdown(self) -> Self

Cancels pending buffered requests instead of releasing them on shutdown.

Trait Implementations§

Source§

impl<St, Req, Res, Err> Debug for BufferService<St, Req, Res, Err>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<St, Req, Res, Err> Service<St, Req> for BufferService<St, Req, Res, Err>
where St: Clone + 'static, Req: 'static, Res: 'static, Err: 'static,

Source§

type Res = Res

Response produced by the service.
Source§

type Error = BufferServiceError<Err>

Error produced while checking readiness or processing a request.
Source§

fn bind(&self, ctx: BindCtx<'_>)

Initializes the service within a Pipeline. Read more
Source§

async fn ready(&self, _: Ctx<'_, Self, St>) -> Result<(), Self::Error>

Waits until the service is ready to process a request. Read more
Source§

async fn shutdown(&self, ctx: Ctx<'_, Self, St>)

Shuts down the service. Read more
Source§

async fn call( &self, req: Req, ctx: Ctx<'_, Self, St>, ) -> Result<Res, Self::Error>

Processes a request and asynchronously returns the response. Read more
Source§

fn map<F, Res>(self, f: F) -> ServiceChain<Map<F, Self, Res>, St, Req>
where Self: Sized, F: Fn(Self::Res) -> Res,

Maps this service’s output to a different type, returning a new service. Read more
Source§

fn map_err<F, E>(self, f: F) -> ServiceChain<MapErr<F, Self, E>, St, Req>
where Self: Sized, F: Fn(Self::Error) -> E,

Maps this service’s error to a different type, returning a new service. Read more
Source§

fn and_then<Next, F>(self, f: F) -> ServiceChain<AndThen<Self, Next>, St, Req>
where Self: Sized, Next: Service<St, Self::Res, Error = Self::Error>, F: IntoService<Next, St, Self::Res>,

Calls another service after this service completes successfully. Read more
Source§

fn pipeline(self, st: St) -> Pipeline<Req, Self::Res, Self::Error>
where Self: Sized + 'static, St: 'static, Req: 'static,

Wraps this service and its state in a Pipeline.

Auto Trait Implementations§

§

impl<St, Req, Res, Err> !RefUnwindSafe for BufferService<St, Req, Res, Err>

§

impl<St, Req, Res, Err> !Send for BufferService<St, Req, Res, Err>

§

impl<St, Req, Res, Err> !Sync for BufferService<St, Req, Res, Err>

§

impl<St, Req, Res, Err> !UnwindSafe for BufferService<St, Req, Res, Err>

§

impl<St, Req, Res, Err> Freeze for BufferService<St, Req, Res, Err>
where PipelineState<St, Req, Res, Err>: Freeze,

§

impl<St, Req, Res, Err> Unpin for BufferService<St, Req, Res, Err>
where PipelineState<St, Req, Res, Err>: Unpin,

§

impl<St, Req, Res, Err> UnsafeUnpin for BufferService<St, Req, Res, Err>
where PipelineState<St, Req, Res, Err>: UnsafeUnpin,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<S, St, Req> IntoService<S, St, Req> for S
where S: Service<St, Req>,

Source§

fn into_service(self) -> S

Converts this value into a service.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

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

Source§

fn vzip(self) -> V