Crates.io | ryde_router |
lib.rs | ryde_router |
version | 0.1.1 |
source | src |
created_at | 2024-02-29 16:52:51.742407 |
updated_at | 2024-03-18 21:10:39.058943 |
description | router crate for ryde |
homepage | https://github.com/swlkr/ryde |
repository | https://github.com/swlkr/ryde |
max_upload_size | |
id | 1157971 |
size | 6,223 |
router is a rust enum router for axum that doesn't support nesting.
use router::router;
#[router]
pub enum Route {
#[get("/")]
Root,
#[get("/todos/:id/edit")]
EditTodo(i32)
#[put("/todos/:id")]
UpdateTodo(i32)
}
It will complain about missing functions which you still have to write:
async fn root() -> String {
Route::Root.to_string() // "/"
}
async fn edit_todo(Path(id): Path<i32>) -> String {
Route::EditTodo(id).to_string() // "/todos/:id/edit"
}
async fn update_todo(Path(id): Path<i32>) -> String {
Route::UpdateTodo(id).to_string() // "/todos/:id"
}
#[tokio::main]
async fn main() {
let ip = "127.0.0.1:9001";
let listener = tokio::net::TcpListener::bind(ip).await.unwrap();
let router = Route::router();
axum::serve(listener, router).await.unwrap();
}
use std::sync::Arc;
use axum::extract::State;
struct AppState {
count: u64
}
#[router(Arc<AppState>)]
enum Routes {
#[get("/")]
Index
}
async fn index(State(_st): State<Arc<AppState>>) -> String {
Routes::Index.to_string()
}
#[tokio::main]
async fn main() {
let ip = "127.0.0.1:9001";
let listener = tokio::net::TcpListener::bind(ip).await.unwrap();
let router = Routes::router().with_state(Arc::new(AppState { count: 0 }));
axum::serve(listener, router).await.unwrap();
}