better-routes

Crates.iobetter-routes
lib.rsbetter-routes
version0.3.4
sourcesrc
created_at2024-07-30 04:55:50.864783
updated_at2024-10-03 16:51:10.929048
descriptionA powerful Rust library designed for generating type-safe and maintainable Axum routers.
homepage
repositoryhttps://github.com/ratnaraj7/better-routes
max_upload_size
id1319462
size32,939
(ratnaraj7)

documentation

README

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

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 or explore additional examples provided in the codebase.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Commit count: 116

cargo fmt