5 个版本
0.2.2 | 2024年5月14日 |
---|---|
0.2.1 | 2024年5月4日 |
0.1.2 | 2024年4月15日 |
0.1.1 | 2024年4月14日 |
0.1.0 | 2024年2月11日 |
#67 在 值格式化 中
1,166 每月下载量
用于 acknowledgements-rs
12KB
unfmt
unfmt
是一个编译时模式匹配库,它反转了 format!
的插值过程。
你可以将其视为一个极轻量级的正则表达式引擎,没有运行时模式编译的成本。
安装
cargo add -D unfmt
使用方法
let value = "My name is Rho.";
// Unnamed captures are returned as tuples.
assert_eq!(
unformat!("My {} is {}.", value),
Some(("name", "Rho"))
);
// You can put indices as well; just make sure ALL captures use indices
// otherwise it's not well defined.
assert_eq!(
unformat!("My {1} is {0}.", value),
Some(("Rho", "name"))
);
// You can also name captures using variables, but make sure you check the
// return is not None.
let subject;
let object;
assert_eq!(
unformat!("My {subject} is {object}.", value),
Some(())
);
assert_eq!((subject, object), (Some("name"), Some("Rho")));
// If a type implements `FromStr`, you can use it as a type argument. This
// is written as `{:Type}`.
assert_eq!(
unformat!("Listening on {:url::Url}", "Listening on http://localhost:3000"),
Some((url::Url::from_str("http://localhost:3000").unwrap(),))
);
通常,捕获被写成 {<index-or-variable>:<type>}
。不支持一行中的多个捕获(即 {}{}
),因为它们没有明确定义。
限制
- 没有回溯。
依赖项
~0.7–1.3MB
~26K SLoC