pub struct Route { /* private fields */ }
Expand description
A request handler with guards.
Route uses a builder-like pattern for configuration. If handler is not set, a 404 Not Found
handler is used.
Implementations§
source§impl Route
impl Route
sourcepub fn wrap<M, B>(self, mw: M) -> Routewhere
M: Transform<BoxService<ServiceRequest, ServiceResponse, Error>, ServiceRequest, Response = ServiceResponse<B>, Error = Error, InitError = ()> + 'static,
B: MessageBody + 'static,
pub fn wrap<M, B>(self, mw: M) -> Routewhere
M: Transform<BoxService<ServiceRequest, ServiceResponse, Error>, ServiceRequest, Response = ServiceResponse<B>, Error = Error, InitError = ()> + 'static,
B: MessageBody + 'static,
Registers a route middleware.
mw
is a middleware component (type), that can modify the requests and responses handled by
this Route
.
See App::wrap
for more details.
source§impl Route
impl Route
sourcepub fn method(self, method: Method) -> Self
pub fn method(self, method: Method) -> Self
Add method guard to the route.
§Examples
App::new().service(web::resource("/path").route(
web::get()
.method(http::Method::CONNECT)
.guard(guard::Header("content-type", "text/plain"))
.to(|req: HttpRequest| HttpResponse::Ok()))
);
sourcepub fn guard<F: Guard + 'static>(self, f: F) -> Self
pub fn guard<F: Guard + 'static>(self, f: F) -> Self
Add guard to the route.
§Examples
App::new().service(web::resource("/path").route(
web::route()
.guard(guard::Get())
.guard(guard::Header("content-type", "text/plain"))
.to(|req: HttpRequest| HttpResponse::Ok()))
);
sourcepub fn to<F, Args>(self, handler: F) -> Self
pub fn to<F, Args>(self, handler: F) -> Self
Set handler function, use request extractors for parameters.
§Examples
use actix_web::{web, http, App};
use serde::Deserialize;
#[derive(Deserialize)]
struct Info {
username: String,
}
/// extract path info using serde
async fn index(info: web::Path<Info>) -> String {
format!("Welcome {}!", info.username)
}
let app = App::new().service(
web::resource("/{username}/index.html") // <- define path parameters
.route(web::get().to(index)) // <- register handler
);
It is possible to use multiple extractors for one handler function.
use actix_web::{web, App};
#[derive(Deserialize)]
struct Info {
username: String,
}
/// extract path info using serde
async fn index(
path: web::Path<Info>,
query: web::Query<HashMap<String, String>>,
body: web::Json<Info>
) -> String {
format!("Welcome {}!", path.username)
}
let app = App::new().service(
web::resource("/{username}/index.html") // <- define path parameters
.route(web::get().to(index))
);
sourcepub fn service<S, E>(self, service_factory: S) -> Selfwhere
S: ServiceFactory<ServiceRequest, Response = ServiceResponse, Error = E, InitError = (), Config = ()> + 'static,
E: Into<Error> + 'static,
pub fn service<S, E>(self, service_factory: S) -> Selfwhere
S: ServiceFactory<ServiceRequest, Response = ServiceResponse, Error = E, InitError = (), Config = ()> + 'static,
E: Into<Error> + 'static,
Set raw service to be constructed and called as the request handler.
§Examples
struct HelloWorld;
impl Service<ServiceRequest> for HelloWorld {
type Response = ServiceResponse;
type Error = Infallible;
type Future = LocalBoxFuture<'static, Result<Self::Response, Self::Error>>;
dev::always_ready!();
fn call(&self, req: ServiceRequest) -> Self::Future {
let (req, _) = req.into_parts();
let res = HttpResponse::Ok()
.insert_header(header::ContentType::plaintext())
.body("Hello world!");
Box::pin(async move { Ok(ServiceResponse::new(req, res)) })
}
}
App::new().route(
"/",
web::get().service(fn_factory(|| async { Ok(HelloWorld) })),
);
Trait Implementations§
source§impl ServiceFactory<ServiceRequest> for Route
impl ServiceFactory<ServiceRequest> for Route
§type Response = ServiceResponse
type Response = ServiceResponse
Responses given by the created services.
§type Future = Pin<Box<dyn Future<Output = Result<<Route as ServiceFactory<ServiceRequest>>::Service, <Route as ServiceFactory<ServiceRequest>>::InitError>>>>
type Future = Pin<Box<dyn Future<Output = Result<<Route as ServiceFactory<ServiceRequest>>::Service, <Route as ServiceFactory<ServiceRequest>>::InitError>>>>
The future of the
Service
instance.gsource§fn new_service(&self, _: ()) -> Self::Future
fn new_service(&self, _: ()) -> Self::Future
Create and return a new service asynchronously.
Auto Trait Implementations§
impl Freeze for Route
impl !RefUnwindSafe for Route
impl !Send for Route
impl !Sync for Route
impl Unpin for Route
impl !UnwindSafe for Route
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<SF, Req> IntoServiceFactory<SF, Req> for SFwhere
SF: ServiceFactory<Req>,
impl<SF, Req> IntoServiceFactory<SF, Req> for SFwhere
SF: ServiceFactory<Req>,
source§fn into_factory(self) -> SF
fn into_factory(self) -> SF
Convert
Self
to a ServiceFactory
source§impl<SF, Req> ServiceFactoryExt<Req> for SFwhere
SF: ServiceFactory<Req>,
impl<SF, Req> ServiceFactoryExt<Req> for SFwhere
SF: ServiceFactory<Req>,
source§fn map<F, R>(self, f: F) -> MapServiceFactory<Self, F, Req, R>
fn map<F, R>(self, f: F) -> MapServiceFactory<Self, F, Req, R>
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>
fn map_err<F, E>(self, f: F) -> MapErrServiceFactory<Self, Req, F, E>
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>
fn map_init_err<F, E>(self, f: F) -> MapInitErr<Self, F, Req, E>
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>,
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.