Expand description
§DEPRECATED
This crate does not receive further development, it might work for your use case. I’ve changed how I do routing & recommend checking out axum-folder-router.
§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, like all my personal projects, 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.
If the AGPL license doesn’t suit your needs, a version under more permissive terms (like MIT, Apache, or BSD license) is available. Please contact me directly via the email in the crate metadata for licensing inquiries.
§Inspiration & Influences
This crate is inspired by and uses/used axum-typed-routing & route_controller . I basically just merged their public API into a single coherent one to get the best of both worlds.
§Basic route macro usage
See the docs of axum_typed_routing
for details on the route macro.
For convenience we re-export the route macro & TypedRouter for you
so that all you need to use on your side is use axum_controller::*
§Controller macro usage
This crate also offers a controller() attribute macro. use it like this:
use axum::extract::State;
use axum_controller::*;
struct ExampleController;
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();
#[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: axum::Router<AppState> = ExampleController::into_router(AppState());
}
Traits§
- Typed
Router - A trait that allows typed routes, created with the
route
macro to be added to an axum router.
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 - route
- A macro that generates statically-typed routes for axum handlers.