4个版本 (破坏性)
0.4.0 | 2024年4月22日 |
---|---|
0.3.0 | 2024年2月15日 |
0.2.0 | 2024年2月15日 |
0.1.0 | 2024年1月18日 |
第285名在 HTTP服务器
每月下载量818
24KB
495 行
routem:一个类型感知路由解析库
routem
是一个Rust crate,允许您将路径与不同路由的规范进行匹配。主要用途是允许您指定只有当路径的参数是正确的类型时,路径才匹配。
安装
要将routem
添加到您的Rust项目中,请使用Cargo进行安装
cargo add routem
它与稳定版兼容,并且已使用Cargo 1.74.1进行测试。
用法和示例
routem
的核心结构是Route
、Routes
和Parser
。
Route
是您应用程序中特定路由的规范。它包含一个名称(在找到匹配的路由后用于查找相关数据很有用)和一个路由规范。您可以使用它来查询特定路径是否匹配此规范。Routes
包含多个Route
,并可用于检查所有配置的路由中哪一条与路径匹配。这对于查找传入请求的处理程序或简单地验证是否存在匹配非常有用。Parser
用于构建路由。默认情况下,它配置了三种参数类型(字符串、64位整数和UUID)
以下是一个从头到尾的示例,创建一个解析器,配置路由,然后找到给定路径的匹配路由(如果有)。
use routem::Parser;
let parser = Parser::default();
let user_route = parser.route("user-by-id", "/user/<id:uuid>/").unwrap();
let club_route = parser.route("club-by-id", "/user/<id:int>/").unwrap();
routes.add(user_route);
routes.add(club_route);
routes.find("/user/36be8705-6c31-45d7-9321-d56cc07b50d9/") // Some(user_route)
routes.find("/club/123/"); // Some(club_route)
routes.find("/user/123/"); // None
routes.find("/club/36be8705-6c31-45d7-9321-d56cc07b50d9/") // None
routes.find("/club/123"); // None
以下是一个添加自定义参数类型的示例。添加自定义类型是可选的。
use routem::{Parser, ParamType};
fn is_palindrome(ident: &str) -> bool {
ident.chars().rev().collect::<String>() == ident
}
let custom_type = ParamType::new("palindrome", is_palindrome);
let parser = Parser::default();
parser.add_param_type(custom_type);
let club_route = parser.route("club-by-id", "/club/<id:palindrome>/").unwrap();
assert_eq!(None, routes.find("/club/myclub/"));
assert_eq!(Some(&club_route), routes.find("/club/radar/"));
路线图
目前routem缺少一些有用的功能。以下是计划最终开发的:
- 查询参数验证和解析
- 路由和查询参数中的联合类型
许可证
初始代码的版权属于Remesh。任何外部贡献者保留其版权;我们不寻求版权转让。
本软件采用双许可模式,遵循Apache v2和MIT许可证。
请参阅LICENSE-APACHE和LICENSE-MIT以获取详细信息。
依赖项
~1.4–2.1MB
~43K SLoC