Expand description
§Axum-Controller
Helper macros for wiring up axum routes with less boilerplate.
This crate is an extension of axum-typed-routing.
It uses the #[route] attribute and TypedRouter trait from that crate.
You must add axum-typed-routing to your own Cargo.toml dependencies.
See example here.
See the docs for more information.
§Licensing
This repository, is licensed under the Mozilla Public License v2.0 (MPL-2.0). You’re free to use this library in proprietary software as long as you publish your modifications under the MPL-2.0.
You can find a copy of the licenses at ./LICENSE.md.
§Inspiration & Influences
This crate is inspired by and uses/used axum-typed-routing & route_controller .
This crate is an extension of [axum_typed_routing]. It uses the #[route]
attribute and the TypedRouter trait from that crate to discover and wire up
handler methods. You must add axum-typed-routing to your own
Cargo.toml dependencies for this crate to work.
§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::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_app_router(AppState());
}Attribute Macros§
- controller
- A macro that generates
into_routerandinto_app_routermethods which automatically wire up all#[route]handlers and the given middlewares, path-prefix etc.