5 个版本
0.2.3 | 2023 年 9 月 30 日 |
---|---|
0.2.2 | 2023 年 1 月 6 日 |
0.2.1 | 2022 年 12 月 31 日 |
0.2.0 | 2022 年 12 月 2 日 |
0.1.0 | 2022 年 8 月 15 日 |
#23 in #named
18KB
301 行代码(不包括注释)
Axum Named Routes
axum-named-routes
是一个库,允许用户在 axum 中轻松定义带有名称的路由,并在运行时从路由名称获取路由路径。
安全性
- 使用 100% 安全的 Rust,并使用
#![forbid(unsafe_code)]
禁用不安全代码
使用示例
use std::{net::SocketAddr, path::PathBuf};
use axum::routing::get;
use axum_named_routes::{NamedRouter, Routes};
async fn index() -> &'static str {
"Hello, World!"
}
// gets the routes from axum extensions
async fn nested_other(routes: Routes) {
// this could panic if the name is not in the Routes map
// but we know that it is because we got here
let this_route = routes.has("ui.other");
assert_eq!(this_route, &PathBuf::from("/ui/other"));
}
async fn other(routes: Routes) {
// the get function does not panic rather it returns an Option
let route = routes.get("ui.other");
let this_route = routes.get("other");
assert_ne!(route, this_route);
}
#[tokio::main]
async fn main() {
let ui = NamedRouter::new()
.route("index", "/", get(index))
.route("other", "/other", get(nested_other));
let app = NamedRouter::new()
.nest("ui", "/ui/", ui)
.route("other", "/other", get(other));
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
示例可以在 examples/simple.rs
中找到。
性能
该路由器在创建映射时内部使用 HashMap
,并在完成后将其包装在 Arc
中作为 axum 扩展添加。因此,整体性能成本应该非常低。
许可证
该项目根据 MIT 许可证 许可。
依赖关系
~6–15MB
~187K SLoC