Chain

Struct Chain 

Source
pub struct Chain { /* private fields */ }
Expand description

Actix-Web service chaining service.

The chain is constructed from a series of Link instances which encode when services should be run and when their responses should be reguarded in favor of running the next service.

Chain service must be registered with App::service() method.

§Examples

use actix_web::{App, HttpRequest, HttpResponse, Responder, web};
use actix_chain::{Chain, Link};

async fn might_fail(req: HttpRequest) -> impl Responder {
    if !req.headers().contains_key("Required-Header") {
        return HttpResponse::NotFound().body("Request Failed");
    }
    HttpResponse::Ok().body("It worked!")
}

async fn default() -> &'static str {
    "First link failed!"
}

App::new().service(
    Chain::default()
        .link(Link::new(web::get().to(might_fail)))
        .link(Link::new(web::get().to(default)))
);

Implementations§

Source§

impl Chain

Source

pub fn new(mount_path: &str) -> Self

Creates new Chain instance.

The first argument (mount_path) is the root URL at which the static files are served. For example, /assets will serve files at example.com/assets/....

Source

pub fn guard<G: Guard + 'static>(self, guards: G) -> Self

Adds a routing guard.

Use this to allow multiple chained services that respond to strictly different properties of a request. Due to the way routing works, if a guard check returns true and the request starts being handled by the file service, it will not be able to back-out and try the next service, you will simply get a 404 (or 405) error response.

§Examples
use actix_web::{guard::Header, App};
use actix_chain::Chain;

App::new().service(
    Chain::default()
        .guard(Header("Host", "example.com"))
);

Add a new Link to the established chain.

Append a Link via mutable reference for dynamic assignment.

Trait Implementations§

Source§

impl Clone for Chain

Source§

fn clone(&self) -> Chain

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Default for Chain

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl HttpServiceFactory for Chain

Source§

fn register(self, config: &mut AppService)

Source§

impl ServiceFactory<ServiceRequest> for Chain

Source§

type Response = ServiceResponse

Responses given by the created services.
Source§

type Error = Error

Errors produced by the created services.
Source§

type Config = ()

Service factory configuration.
Source§

type Service = ChainService

The kind of Service created by this factory.
Source§

type InitError = ()

Errors potentially raised while building a service.
Source§

type Future = Pin<Box<dyn Future<Output = Result<<Chain as ServiceFactory<ServiceRequest>>::Service, <Chain as ServiceFactory<ServiceRequest>>::InitError>>>>

The future of the Service instance.g
Source§

fn new_service(&self, _: ()) -> Self::Future

Create and return a new service asynchronously.

Auto Trait Implementations§

§

impl Freeze for Chain

§

impl !RefUnwindSafe for Chain

§

impl !Send for Chain

§

impl !Sync for Chain

§

impl Unpin for Chain

§

impl !UnwindSafe for Chain

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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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, Req> IntoServiceFactory<SF, Req> for SF
where SF: ServiceFactory<Req>,

Source§

fn into_factory(self) -> SF

Convert Self to a ServiceFactory
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SF, Req> ServiceFactoryExt<Req> for SF
where SF: ServiceFactory<Req>,

Source§

fn map<F, R>(self, f: F) -> MapServiceFactory<Self, F, Req, R>
where Self: Sized, F: FnMut(Self::Response) -> R + Clone,

Map this service’s output to a different type, returning a new service of the resulting type.
Source§

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

Map this service’s error to a different error, returning a new service.
Source§

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

Map this factory’s init error to a different error, returning a new service.
Source§

fn and_then<I, SF1>(self, factory: I) -> AndThenServiceFactory<Self, SF1, Req>
where Self: Sized, Self::Config: Clone, I: IntoServiceFactory<SF1, Self::Response>, SF1: ServiceFactory<Self::Response, Config = Self::Config, Error = Self::Error, InitError = Self::InitError>,

Call another service after call to this one has resolved successfully.
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.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,