Expand description
§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 allroute’s and the given middlewares, path-prefix etc