axum_extra::routing

Trait RouterExt

Source
pub trait RouterExt<S>: Sealed {
    // Required methods
    fn typed_get<H, T, P>(self, handler: H) -> Self
       where H: Handler<T, S>,
             T: SecondElementIs<P> + 'static,
             P: TypedPath;
    fn typed_delete<H, T, P>(self, handler: H) -> Self
       where H: Handler<T, S>,
             T: SecondElementIs<P> + 'static,
             P: TypedPath;
    fn typed_head<H, T, P>(self, handler: H) -> Self
       where H: Handler<T, S>,
             T: SecondElementIs<P> + 'static,
             P: TypedPath;
    fn typed_options<H, T, P>(self, handler: H) -> Self
       where H: Handler<T, S>,
             T: SecondElementIs<P> + 'static,
             P: TypedPath;
    fn typed_patch<H, T, P>(self, handler: H) -> Self
       where H: Handler<T, S>,
             T: SecondElementIs<P> + 'static,
             P: TypedPath;
    fn typed_post<H, T, P>(self, handler: H) -> Self
       where H: Handler<T, S>,
             T: SecondElementIs<P> + 'static,
             P: TypedPath;
    fn typed_put<H, T, P>(self, handler: H) -> Self
       where H: Handler<T, S>,
             T: SecondElementIs<P> + 'static,
             P: TypedPath;
    fn typed_trace<H, T, P>(self, handler: H) -> Self
       where H: Handler<T, S>,
             T: SecondElementIs<P> + 'static,
             P: TypedPath;
    fn typed_connect<H, T, P>(self, handler: H) -> Self
       where H: Handler<T, S>,
             T: SecondElementIs<P> + 'static,
             P: TypedPath;
    fn route_with_tsr(self, path: &str, method_router: MethodRouter<S>) -> Self
       where Self: Sized;
    fn route_service_with_tsr<T>(self, path: &str, service: T) -> Self
       where T: Service<Request, Error = Infallible> + Clone + Send + 'static,
             T::Response: IntoResponse,
             T::Future: Send + 'static,
             Self: Sized;
}
Expand description

Extension trait that adds additional methods to Router.

Required Methods§

Source

fn typed_get<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.

Add a typed GET route to the router.

The path will be inferred from the first argument to the handler function which must implement TypedPath.

See TypedPath for more details and examples.

Source

fn typed_delete<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.

Add a typed DELETE route to the router.

The path will be inferred from the first argument to the handler function which must implement TypedPath.

See TypedPath for more details and examples.

Source

fn typed_head<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.

Add a typed HEAD route to the router.

The path will be inferred from the first argument to the handler function which must implement TypedPath.

See TypedPath for more details and examples.

Source

fn typed_options<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.

Add a typed OPTIONS route to the router.

The path will be inferred from the first argument to the handler function which must implement TypedPath.

See TypedPath for more details and examples.

Source

fn typed_patch<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.

Add a typed PATCH route to the router.

The path will be inferred from the first argument to the handler function which must implement TypedPath.

See TypedPath for more details and examples.

Source

fn typed_post<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.

Add a typed POST route to the router.

The path will be inferred from the first argument to the handler function which must implement TypedPath.

See TypedPath for more details and examples.

Source

fn typed_put<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.

Add a typed PUT route to the router.

The path will be inferred from the first argument to the handler function which must implement TypedPath.

See TypedPath for more details and examples.

Source

fn typed_trace<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.

Add a typed TRACE route to the router.

The path will be inferred from the first argument to the handler function which must implement TypedPath.

See TypedPath for more details and examples.

Source

fn typed_connect<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.

Add a typed CONNECT route to the router.

The path will be inferred from the first argument to the handler function which must implement TypedPath.

See TypedPath for more details and examples.

Source

fn route_with_tsr(self, path: &str, method_router: MethodRouter<S>) -> Self
where Self: Sized,

Add another route to the router with an additional “trailing slash redirect” route.

If you add a route without a trailing slash, such as /foo, this method will also add a route for /foo/ that redirects to /foo.

If you add a route with a trailing slash, such as /bar/, this method will also add a route for /bar that redirects to /bar/.

This is similar to what axum 0.5.x did by default, except this explicitly adds another route, so trying to add a /foo/ route after calling .route_with_tsr("/foo", /* ... */) will result in a panic due to route overlap.

§Example
use axum::{Router, routing::get};
use axum_extra::routing::RouterExt;

let app = Router::new()
    // `/foo/` will redirect to `/foo`
    .route_with_tsr("/foo", get(|| async {}))
    // `/bar` will redirect to `/bar/`
    .route_with_tsr("/bar/", get(|| async {}));
Source

fn route_service_with_tsr<T>(self, path: &str, service: T) -> Self
where T: Service<Request, Error = Infallible> + Clone + Send + 'static, T::Response: IntoResponse, T::Future: Send + 'static, Self: Sized,

Add another route to the router with an additional “trailing slash redirect” route.

This works like RouterExt::route_with_tsr but accepts any Service.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<S> RouterExt<S> for Router<S>
where S: Clone + Send + Sync + 'static,

Source§

fn typed_get<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.
Source§

fn typed_delete<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.
Source§

fn typed_head<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.
Source§

fn typed_options<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.
Source§

fn typed_patch<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.
Source§

fn typed_post<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.
Source§

fn typed_put<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.
Source§

fn typed_trace<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.
Source§

fn typed_connect<H, T, P>(self, handler: H) -> Self
where H: Handler<T, S>, T: SecondElementIs<P> + 'static, P: TypedPath,

Available on crate feature typed-routing only.
Source§

fn route_with_tsr(self, path: &str, method_router: MethodRouter<S>) -> Self
where Self: Sized,

Source§

fn route_service_with_tsr<T>(self, path: &str, service: T) -> Self
where T: Service<Request, Error = Infallible> + Clone + Send + 'static, T::Response: IntoResponse, T::Future: Send + 'static, Self: Sized,

Implementors§