#模式匹配 #编译时 #正则表达式 #插值 #unformat #格式化 #处理

无 std unfmt

一个编译时模式匹配库,它反转了 format! 的插值过程。

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值格式化

Download history 158/week @ 2024-04-25 315/week @ 2024-05-02 250/week @ 2024-05-09 374/week @ 2024-05-16 144/week @ 2024-05-23 200/week @ 2024-05-30 112/week @ 2024-06-06 306/week @ 2024-06-13 463/week @ 2024-06-20 597/week @ 2024-06-27 277/week @ 2024-07-04 397/week @ 2024-07-11 333/week @ 2024-07-18 336/week @ 2024-07-25 282/week @ 2024-08-01 154/week @ 2024-08-08

1,166 每月下载量
用于 acknowledgements-rs

MIT/Apache

12KB

unfmt

crates.io license ci docs

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