Skip to main content

Route

Struct Route 

Source
pub struct Route<I, R, E: Render = NoRender> { /* private fields */ }
Expand description

A route: a path pattern, one handler per method, and who may use it.

Patterns are made of literal segments, parameters (:id, one segment) and one wildcard at the end (*rest, the rest of the path). Literals are written decoded (/café); web-net compares them with the canonical request path.

use web_net::{App, get, Route};

let app = App::builder()
    .route(get("/", |cx| { cx.html(200, "<h1>Home</h1>"); Ok(()) }).public())
    .route(
        Route::at("/contact")
            .get(|cx| { cx.html(200, "<form method=post></form>"); Ok(()) })
            .post(|cx| { cx.see_other("/contact/thanks") })
            .public()
            // A real form gets CSRF protection: Builder::csrf and a gate
            // whose identities carry a binding.
            .csrf_exempt("example: the POST changes nothing"),
    )
    .build()?;

A closure that reads fields of a custom identity types its parameter, because the closure is checked before the builder fixes the type (a named fn handler needs nothing extra):

use web_net::{Cx, Route, get};

struct User { name: String }
impl web_net::Identity for User {
    fn is_guest(&self) -> bool { self.name.is_empty() }
}
enum Rule { SignedIn }

let account: Route<User, Rule> = get("/account", |cx: &mut Cx<'_, User>| {
    let name = cx.identity().name.clone();
    cx.text(200, &name);
    Ok(())
})
.allow(Rule::SignedIn);

Implementations§

Source§

impl<I: 'static, R, E: Render> Route<I, R, E>

Source

pub fn at(pattern: impl Into<String>) -> Self

A route at pattern with no methods yet.

Source

pub fn on(self, method: Method, handler: impl Handler<I, E>) -> Self

Adds a handler for method. HEAD follows GET unless it has its own; OPTIONS is answered for every route unless it has its own.

Source

pub fn get<F>(self, f: F) -> Self
where F: Fn(&mut Cx<'_, I, E>) -> Result + Send + Sync + 'static,

Adds a GET handler.

Source

pub fn post<F>(self, f: F) -> Self
where F: Fn(&mut Cx<'_, I, E>) -> Result + Send + Sync + 'static,

Adds a POST handler.

Source

pub fn put<F>(self, f: F) -> Self
where F: Fn(&mut Cx<'_, I, E>) -> Result + Send + Sync + 'static,

Adds a PUT handler.

Source

pub fn patch<F>(self, f: F) -> Self
where F: Fn(&mut Cx<'_, I, E>) -> Result + Send + Sync + 'static,

Adds a PATCH handler.

Source

pub fn delete<F>(self, f: F) -> Self
where F: Fn(&mut Cx<'_, I, E>) -> Result + Send + Sync + 'static,

Adds a DELETE handler.

Source

pub fn public(self) -> Self

Anyone may use the route, guests included. Public is a declaration, never a default: a route with neither public nor allow stops the build.

Source

pub fn allow(self, rule: R) -> Self

Those rule allows may use the route; the gate’s authorize decides on every request.

Source

pub fn name(self, name: &'static str) -> Self

A name for logs, events, and hooks.

Source

pub fn work(self, work: WorkClass) -> Self

How the handlers behave: Quick (the default), Io, or Cpu. A dispatcher in front of web-net reads it through App::classify to move slow work off the connection’s worker.

Source

pub fn csrf_exempt(self, reason: &'static str) -> Self

Takes the route out of CSRF protection, with the reason (a webhook signed by its sender, an API authenticated by a bearer token that a browser never sends on its own). The reason is required and must not be empty: an exemption is a decision, never a default.

Source

pub fn form_limits(self, limits: Limits) -> Self

The budgets for reading this route’s forms (field count, sizes, files; default form_net::Limits::DEFAULT). Keep them to what the form needs: they bound what one request can make the server hold.

Source

pub fn cors(self, cors: Cors) -> Self

The route’s CORS policy: preflights answered, replies to allowed origins readable by their scripts.

Source

pub fn cache(self, policy: CachePolicy) -> Self

How the route’s pages may be cached.

Source

pub fn template(self, name: &'static str) -> Self

The template Cx::render uses. Resolved when the application is built: an unknown name stops the build.

Trait Implementations§

Source§

impl<I, R, E: Render> Debug for Route<I, R, E>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<I, R, E = NoRender> !RefUnwindSafe for Route<I, R, E>

§

impl<I, R, E = NoRender> !UnwindSafe for Route<I, R, E>

§

impl<I, R, E> Forget for Route<I, R, E>

§

impl<I, R, E> Freeze for Route<I, R, E>
where Vec<(Method, Arc<dyn Handler<I, E>>)>: Freeze, Access<R>: Freeze,

§

impl<I, R, E> Send for Route<I, R, E>
where Vec<(Method, Arc<dyn Handler<I, E>>)>: Send, Access<R>: Send,

§

impl<I, R, E> Sync for Route<I, R, E>
where Vec<(Method, Arc<dyn Handler<I, E>>)>: Sync, Access<R>: Sync,

§

impl<I, R, E> Unpin for Route<I, R, E>
where Vec<(Method, Arc<dyn Handler<I, E>>)>: Unpin, Access<R>: Unpin,

§

impl<I, R, E> UnsafeUnpin for Route<I, R, E>
where Vec<(Method, Arc<dyn Handler<I, E>>)>: UnsafeUnpin, Access<R>: UnsafeUnpin,

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