Skip to main content

OneRequestService

Struct OneRequestService 

Source
pub struct OneRequestService<S> { /* private fields */ }
Expand description

Service wrapper that allows only one call to run at a time.

This type is intentionally not cloneable. Cloning its readiness state would create another independent gate and allow calls to overlap.

Acquiring or releasing the call slot invalidates this service’s readiness. The wrapped service has an independent readiness cache and must notify when its readiness changes.

Implementations§

Source§

impl<S> OneRequestService<S>

Source

pub fn new<St, Req>(service: S) -> Self
where S: Service<St, Req>,

Wraps a service so that concurrent callers wait for the active call.

Trait Implementations§

Source§

impl<S: Debug> Debug for OneRequestService<S>

Source§

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

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

impl<S: Service<St, Req>, St, Req> Service<St, Req> for OneRequestService<S>

Source§

type Res = <S as Service<St, Req>>::Res

Response produced by the service.
Source§

type Error = <S as Service<St, Req>>::Error

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: Ctx<'_, Self, St>) -> Result<(), S::Error>

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

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

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

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

Shuts down the service. 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§

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<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, 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.