# Better Routes `better_routes` is a macro for centralizing all routes in an Axum application, making routing type-safe, maintainable, and less error-prone. It allows you to define routes, their handlers, and rejections in a single place, simplifying your application's routing logic. ## Usage Here’s a simple example demonstrating how to use `better_routes`. ### Example ```rust use axum_extra::routing::RouterExt; use axum_extra::routing::TypedPath; use better_routes::routes; use serde::Deserialize; #[derive(Deserialize)] struct Foo { id: usize, } async fn foo(foo_path: Foo) { println!("id: {}", foo_path.id); } #[derive(Deserialize)] struct Bar; async fn bar(_: Bar) {} // Define routes using the `routes!` macro. routes! { name => pub AllRoutes, // Visibility is optional "/foo/:id" => Foo { get => foo }, "/bar" => Bar { post => bar }, } #[tokio::main] async fn main() { // Use the router function generated by the `routes!` macro. let app = AllRoutes::routes(); // Generate a URI from the `Foo` instance let foo_uri = Foo { id: 42 }.to_uri(); println!("foo_uri: {}", foo_uri); // Output: foo_uri: /foo/42 // Start the server let tcp_listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); axum::serve(tcp_listener, app).await.unwrap(); } ``` ## Documentation For more advanced usage, including state and rejection handling, please refer to the full [documentation][docs] or explore additional [examples][examples] provided in the codebase. ## License This project is licensed under the MIT License. See the [LICENSE][license] file for details. [license]: https://github.com/ratnaraj7/better-routes/blob/main/better-routes/LICENSE [examples]: https://github.com/ratnaraj7/better-routes/tree/main/examples [docs]: https://docs.rs/better-routes/latest/better_routes/index.html