Crates.io | better-routes |
lib.rs | better-routes |
version | 0.3.4 |
source | src |
created_at | 2024-07-30 04:55:50.864783 |
updated_at | 2024-10-03 16:51:10.929048 |
description | A powerful Rust library designed for generating type-safe and maintainable Axum routers. |
homepage | |
repository | https://github.com/ratnaraj7/better-routes |
max_upload_size | |
id | 1319462 |
size | 32,939 |
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.
Here’s a simple example demonstrating how to use better_routes
.
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();
}
For more advanced usage, including state and rejection handling, please refer to the full documentation or explore additional examples provided in the codebase.
This project is licensed under the MIT License. See the LICENSE file for details.