Skip to main content

ServiceChainFactory

Struct ServiceChainFactory 

Source
pub struct ServiceChainFactory<Sf, St, Req> { /* private fields */ }
Expand description

A builder for composing service factories and combinators.

Implementations§

Source§

impl<Sf: ServiceFactory<St, Req>, St, Req> ServiceChainFactory<Sf, St, Req>

Source

pub fn and_then<U>( self, factory: impl IntoServiceFactory<U, St, Sf::Res>, ) -> ServiceChainFactory<AndThenFactory<Sf, U>, St, Req>
where Self: Sized, U: ServiceFactory<St, Sf::Res, Error = Sf::Error, InitError = Sf::InitError>,

Chains another factory after this factory’s services.

Each created service passes its response to the next service as its request. If the first service returns an error, the next service is not called.

Source

pub fn apply<U>( self, tr: U, ) -> ServiceChainFactory<ApplyMiddleware<U, Sf>, St, Req>
where U: Middleware<Sf::Service, St>,

Applies middleware to this service factory.

This is shorthand for calling crate::apply on the chained factory.

Source

pub fn apply_fn<F, In, Out, Err>( self, f: F, ) -> ServiceChainFactory<ApplyFactory<F, Sf, St, Req, In, Out, Err>, St, In>
where F: AsyncFn(In, &ApplyCtx<'_, Sf::Service, St, Req>) -> Result<Out, Err> + Clone, Err: From<Sf::Error>,

Applies an asynchronous function as middleware to this service factory.

This is shorthand for calling crate::apply_fn_factory on the chained factory.

Source

pub fn then<F, U>( self, factory: F, ) -> ServiceChainFactory<ThenFactory<Sf, U>, St, Req>
where Self: Sized, F: IntoServiceFactory<U, St, Result<Sf::Res, Sf::Error>>, U: ServiceFactory<St, Result<Sf::Res, Sf::Error>, Error = Sf::Error, InitError = Sf::InitError>,

Chains a factory whose services receive the preceding service’s complete Result.

Source

pub fn map<F, Res>( self, f: F, ) -> ServiceChainFactory<MapFactory<F, Sf, Res>, St, Req>
where Self: Sized, F: Fn(Sf::Res) -> Res + Clone,

Maps responses produced by this factory’s services.

Source

pub fn map_err<F, E>( self, f: F, ) -> ServiceChainFactory<MapErrFactory<F, Sf, E>, St, Req>
where Self: Sized, F: Fn(Sf::Error) -> E + Clone,

Maps errors produced by this factory’s services.

Source

pub fn map_init_err<F, E>( self, f: F, ) -> ServiceChainFactory<MapInitErr<F, Sf, E>, St, Req>
where Self: Sized, F: Fn(Sf::InitError) -> E + Clone,

Maps this factory’s initialization error.

Source

pub fn readiness<F>( self, ready: F, ) -> ServiceChainFactory<AndThenFactory<Sf, FnReadiness<F, Sf::Error>>, St, Req>
where Self: Sized, F: AsyncFn(&St) -> Result<(), Sf::Error> + Clone,

Adds a custom readiness check to each created service.

The check runs after the wrapped service’s own readiness check succeeds; the service is ready only when both are ready.

Source

pub fn shutdown<F>( self, sh: F, ) -> ServiceChainFactory<AndThenFactory<Sf, FnShutdown<F, Sf::Error>>, St, Req>
where Self: Sized, F: AsyncFnOnce(&St) + Clone,

Adds a shutdown callback to each created service.

Source

pub async fn pipeline( &self, st: St, ) -> Result<Pipeline<Req, Sf::Res, Sf::Error>, Sf::InitError>
where Sf: 'static, St: 'static, Req: 'static,

Creates a service and wraps it with its state in a Pipeline.

Trait Implementations§

Source§

impl<Sf, St, Req> Clone for ServiceChainFactory<Sf, St, Req>
where Sf: Clone,

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<Sf, St, Req> Debug for ServiceChainFactory<Sf, St, Req>
where Sf: Debug,

Source§

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

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

impl<Sf: ServiceFactory<St, Req>, St, Req> ServiceFactory<St, Req> for ServiceChainFactory<Sf, St, Req>

Source§

type Res = <Sf as ServiceFactory<St, Req>>::Res

Response produced by the created services.
Source§

type Error = <Sf as ServiceFactory<St, Req>>::Error

Error produced by the created services.
Source§

type Service = <Sf as ServiceFactory<St, Req>>::Service

The type of Service produced by this factory.
Source§

type InitError = <Sf as ServiceFactory<St, Req>>::InitError

Error that can occur while constructing a service.
Source§

async fn create(&self, st: &St) -> Result<Sf::Service, Sf::InitError>

Asynchronously creates a service using the supplied state.
Source§

async fn pipeline( &self, st: St, ) -> Result<Pipeline<Req, Self::Res, Self::Error>, Self::InitError>
where Self: 'static, St: 'static, Req: 'static,

Creates a service and wraps it with its state in a Pipeline.
Source§

fn map<F, Res>( self, f: F, ) -> ServiceChainFactory<MapFactory<F, Self, Res>, St, Req>
where Self: Sized, F: Fn(Self::Res) -> Res + Clone,

Returns a factory whose services map responses to a different type.
Source§

fn map_err<F, E>( self, f: F, ) -> ServiceChainFactory<MapErrFactory<F, Self, E>, St, Req>
where Self: Sized, F: Fn(Self::Error) -> E + Clone,

Returns a factory whose services map errors to a different type.
Source§

fn map_init_err<F, E>( self, f: F, ) -> ServiceChainFactory<MapInitErr<F, Self, E>, St, Req>
where Self: Sized, F: Fn(Self::InitError) -> E + Clone,

Maps this factory’s initialization error to a different error, returning a new service factory.
Source§

fn and_then<U, F>( self, f: F, ) -> ServiceChainFactory<AndThenFactory<Self, U>, St, Req>
where Self: Sized, U: ServiceFactory<St, Self::Res, Error = Self::Error, InitError = Self::InitError>, F: IntoServiceFactory<U, St, Self::Res>,

Chains another factory after this factory’s services. Read more
Source§

fn boxed( self, ) -> BoxServiceFactory<St, Req, Self::Res, Self::Error, Self::InitError>
where St: 'static, Req: 'static, Self: Sized + 'static,

Creates a boxed service factory.

Auto Trait Implementations§

§

impl<Sf, St, Req> Freeze for ServiceChainFactory<Sf, St, Req>
where Sf: Freeze,

§

impl<Sf, St, Req> RefUnwindSafe for ServiceChainFactory<Sf, St, Req>

§

impl<Sf, St, Req> Send for ServiceChainFactory<Sf, St, Req>
where Sf: Send, St: Send, Req: Send,

§

impl<Sf, St, Req> Sync for ServiceChainFactory<Sf, St, Req>
where Sf: Sync, St: Sync, Req: Sync,

§

impl<Sf, St, Req> Unpin for ServiceChainFactory<Sf, St, Req>
where Sf: Unpin, St: Unpin, Req: Unpin,

§

impl<Sf, St, Req> UnsafeUnpin for ServiceChainFactory<Sf, St, Req>
where Sf: UnsafeUnpin,

§

impl<Sf, St, Req> UnwindSafe for ServiceChainFactory<Sf, St, Req>
where Sf: UnwindSafe, St: UnwindSafe, Req: UnwindSafe,

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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<Sf, St, Req> IntoServiceFactory<Sf, St, Req> for Sf
where Sf: ServiceFactory<St, Req>,

Source§

fn into_factory(self) -> Sf

Converts this value into a service factory.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.