1个不稳定版本
0.1.0 | 2022年6月2日 |
---|
在 过程宏 中排名第 1373
17KB
392 行
uri_path_router
该库提供了一个过程宏,它使用一个小型的领域特定语言来创建一个简单的解析器,该解析器可以将URI的路径转换为用于路由目的的扁平枚举的变体。
生成的逻辑基本上是一个大的嵌套 match
,它贪婪地接受一个输入 &str
,将其分割为用 /
字符分隔的段,并输出枚举的一个变体,如果指定为变量,则捕获路径的段。
用法
您编写如下
use uri_path_router::route;
route! {
Router,
"foo" => VariantA,
"bar" => VariantBar {
"x" => BarX,
var => BarWithVariable(var)
},
"nested" / "syntax" / "demonstration" => Nested,
}
该宏将生成一个扁平的 enum
,如下所示
pub enum Router<'a> {
VariantA,
VariantBar,
BarX,
BarWithVariable { var: &'a str },
Nested,
}
请注意,只有当变体指定时,枚举才会捕获变量,并且始终作为借用进行,因此不会进行任何分配。要将 &str
转换为变体,请使用 TryFrom
assert_eq!(Router::try_from("/foo"), Ok(Router::VariantA));
assert_eq!(Router::try_from("/bar"), Ok(Router::VariantBar));
assert_eq!(Router::try_from("/bar/x"), Ok(Router::BarX));
assert_eq!(
Router::try_from("/bar/not-x"),
Ok(Router::BarWithVariable { var: "not-x" })
);
assert_eq!(Router::try_from("/whatever"), Err(()));
assert_eq!(
Router::try_from("/nested/syntax/demonstration"),
Ok(Router::Nested)
);
此crate的一个巧妙功能是自动为枚举的每个变体生成文档,描述它匹配的模式。您可以通过在IDE中悬停(假设您已配置 rust-analyzer
或类似工具以显示工具提示)或通过在您的crate上运行 cargo doc
并搜索生成的枚举来查看这些信息。
许可证
本库在MIT许可证下提供。请参阅 LICENSE。
依赖关系
~1.5MB
~36K SLoC