actix_web::dev

Trait ServiceFactory

source
pub trait ServiceFactory<Req> {
    type Response;
    type Error;
    type Config;
    type Service: Service<Req, Response = Self::Response, Error = Self::Error>;
    type InitError;
    type Future: Future<Output = Result<Self::Service, Self::InitError>>;

    // Required method
    fn new_service(&self, cfg: Self::Config) -> Self::Future;
}
Expand description

Factory for creating Services.

This is useful for cases where new Services must be produced. One case is a TCP server listener: a listener accepts new connections, constructs a new Service for each using the ServiceFactory trait, and uses the new Service to process inbound requests on that new connection.

Config is a service factory configuration type.

Simple factories may be able to use fn_factory or fn_factory_with_config to reduce boilerplate.

Required Associated Types§

source

type Response

Responses given by the created services.

source

type Error

Errors produced by the created services.

source

type Config

Service factory configuration.

source

type Service: Service<Req, Response = Self::Response, Error = Self::Error>

The kind of Service created by this factory.

source

type InitError

Errors potentially raised while building a service.

source

type Future: Future<Output = Result<Self::Service, Self::InitError>>

The future of the Service instance.g

Required Methods§

source

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

Create and return a new service asynchronously.

Implementations on Foreign Types§

source§

impl ServiceFactory<Request> for ExpectHandler

source§

impl<S, Req> ServiceFactory<Req> for Rc<S>
where S: ServiceFactory<Req>,

source§

type Response = <S as ServiceFactory<Req>>::Response

source§

type Error = <S as ServiceFactory<Req>>::Error

source§

type Config = <S as ServiceFactory<Req>>::Config

source§

type Service = <S as ServiceFactory<Req>>::Service

source§

type InitError = <S as ServiceFactory<Req>>::InitError

source§

type Future = <S as ServiceFactory<Req>>::Future

source§

fn new_service( &self, cfg: <S as ServiceFactory<Req>>::Config, ) -> <S as ServiceFactory<Req>>::Future

source§

impl<S, Req> ServiceFactory<Req> for Arc<S>
where S: ServiceFactory<Req>,

source§

type Response = <S as ServiceFactory<Req>>::Response

source§

type Error = <S as ServiceFactory<Req>>::Error

source§

type Config = <S as ServiceFactory<Req>>::Config

source§

type Service = <S as ServiceFactory<Req>>::Service

source§

type InitError = <S as ServiceFactory<Req>>::InitError

source§

type Future = <S as ServiceFactory<Req>>::Future

source§

fn new_service( &self, cfg: <S as ServiceFactory<Req>>::Config, ) -> <S as ServiceFactory<Req>>::Future

source§

impl<T> ServiceFactory<(Request, Framed<T, Codec>)> for UpgradeHandler

source§

impl<T, S, B> ServiceFactory<(T, Option<SocketAddr>)> for H2Service<T, S, B>
where T: AsyncRead + AsyncWrite + Unpin + 'static, S: ServiceFactory<Request, Config = ()>, <S as ServiceFactory<Request>>::Future: 'static, <S as ServiceFactory<Request>>::Error: Into<Response<BoxBody>> + 'static, <S as ServiceFactory<Request>>::Response: Into<Response<B>> + 'static, <<S as ServiceFactory<Request>>::Service as Service<Request>>::Future: 'static, B: MessageBody + 'static,

source§

impl<T, S, B, X, U> ServiceFactory<(T, Protocol, Option<SocketAddr>)> for HttpService<T, S, B, X, U>
where T: AsyncRead + AsyncWrite + Unpin + 'static, S: ServiceFactory<Request, Config = ()>, <S as ServiceFactory<Request>>::Future: 'static, <S as ServiceFactory<Request>>::Error: Into<Response<BoxBody>> + 'static, <S as ServiceFactory<Request>>::InitError: Debug, <S as ServiceFactory<Request>>::Response: Into<Response<B>> + 'static, <<S as ServiceFactory<Request>>::Service as Service<Request>>::Future: 'static, B: MessageBody + 'static, X: ServiceFactory<Request, Config = (), Response = Request>, <X as ServiceFactory<Request>>::Future: 'static, <X as ServiceFactory<Request>>::Error: Into<Response<BoxBody>>, <X as ServiceFactory<Request>>::InitError: Debug, U: ServiceFactory<(Request, Framed<T, Codec>), Config = (), Response = ()>, <U as ServiceFactory<(Request, Framed<T, Codec>)>>::Future: 'static, <U as ServiceFactory<(Request, Framed<T, Codec>)>>::Error: Display + Into<Response<BoxBody>>, <U as ServiceFactory<(Request, Framed<T, Codec>)>>::InitError: Debug,

source§

impl<T, S, B, X, U> ServiceFactory<(T, Option<SocketAddr>)> for H1Service<T, S, B, X, U>

source§

type Response = ()

source§

type Error = DispatchError

source§

type Config = ()

source§

type Service = HttpServiceHandler<T, <S as ServiceFactory<Request>>::Service, B, <X as ServiceFactory<Request>>::Service, <U as ServiceFactory<(Request, Framed<T, Codec>)>>::Service>

source§

type InitError = ()

source§

type Future = Pin<Box<dyn Future<Output = Result<<H1Service<T, S, B, X, U> as ServiceFactory<(T, Option<SocketAddr>)>>::Service, <H1Service<T, S, B, X, U> as ServiceFactory<(T, Option<SocketAddr>)>>::InitError>>>>

source§

fn new_service( &self, _: (), ) -> <H1Service<T, S, B, X, U> as ServiceFactory<(T, Option<SocketAddr>)>>::Future

Implementors§

source§

impl ServiceFactory<ServiceRequest> for Route

source§

impl<C, Req, Res, Err, InitErr> ServiceFactory<Req> for BoxServiceFactory<C, Req, Res, Err, InitErr>
where Req: 'static, Res: 'static, Err: 'static, InitErr: 'static,

source§

type Response = Res

source§

type Error = Err

source§

type Config = C

source§

type Service = Box<dyn Service<Req, Future = Pin<Box<dyn Future<Output = Result<Res, Err>>>>, Response = Res, Error = Err>>

source§

type InitError = InitErr

source§

type Future = Pin<Box<dyn Future<Output = Result<<BoxServiceFactory<C, Req, Res, Err, InitErr> as ServiceFactory<Req>>::Service, InitErr>>>>

source§

impl<T, S, Req> ServiceFactory<Req> for ApplyTransform<T, S, Req>
where S: ServiceFactory<Req>, T: Transform<<S as ServiceFactory<Req>>::Service, Req, InitError = <S as ServiceFactory<Req>>::InitError>,

source§

type Response = <T as Transform<<S as ServiceFactory<Req>>::Service, Req>>::Response

source§

type Error = <T as Transform<<S as ServiceFactory<Req>>::Service, Req>>::Error

source§

type Config = <S as ServiceFactory<Req>>::Config

source§

type Service = <T as Transform<<S as ServiceFactory<Req>>::Service, Req>>::Transform

source§

type InitError = <T as Transform<<S as ServiceFactory<Req>>::Service, Req>>::InitError

source§

type Future = ApplyTransformFuture<T, S, Req>