Skip to main content

Crate axum_controller

Crate axum_controller 

Source
Expand description

Crates.io Documentation Maintenance unsafe forbidden

§Axum-Controller

Helper macro’s for wiring up axum routes with less boilerplate.

See example here.

See the docs for more information.

§Licensing

This repository, is licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later). This ensures that modifications to the code remain open source when used in network services.

§Inspiration & Influences

This crate is inspired by and uses/used axum-typed-routing & route_controller .

§Route macro usage

See the docs of [axum_typed_routing] for details on the route macro.

§Controller macro usage

This crate offers the controller() attribute macro. use it like this:

use axum::extract::State;
use axum_controller::*;

use axum_typed_routing::route;
use axum_typed_routing::TypedRouter;

async fn my_middleware(
    request: axum::extract::Request,
    next: axum::middleware::Next,
) -> axum::response::Response {
    next.run(request).await
}

async fn my_other_middleware(
    request: axum::extract::Request,
    next: axum::middleware::Next,
) -> axum::response::Response {
    next.run(request).await
}

#[derive(Clone, Debug)]
struct AppState();

struct ExampleController;

#[controller(
    path = "/asd",
    state = AppState,
    middleware=axum::middleware::from_fn(my_middleware),
    middleware=axum::middleware::from_fn(my_other_middleware),
)]
impl ExampleController {
    #[route(GET "/test")]
    async fn test_handler_fn(_: State<AppState>) -> String {
        todo!("handle request")
    }

    #[route(GET "/test2")]
    async fn test_handler_fn2(State(_): State<AppState>) -> String {
        todo!("handle request")
    }
}

fn main() {
    let _router_a: axum::Router<AppState> = ExampleController::into_router();
    let _router_b: axum::Router<()> = ExampleController::into_stateless_router(AppState());
}

Attribute Macros§

controller
A macro that generates a into_router(_: State<_>) impl which automatically wires up all route’s and the given middlewares, path-prefix etc