9 个版本 (稳定版)
1.1.2 | 2024年3月25日 |
---|---|
1.1.1 | 2023年12月15日 |
1.0.3 | 2023年8月15日 |
1.0.1 | 2023年3月22日 |
0.1.0 | 2022年12月18日 |
#6 在 #format-args
每月下载量 63
在 2 个 crate 中使用(通过 prse)
53KB
1K SLoC
Prse
Prse 是一个注重速度和易用性的小型字符串解析库。(它也兼容 no-std!)
它提供了 parse!
宏,允许您使用类似格式参数的语法轻松将字符串解析为任何类型。
Prse 目前支持 rustc 1.70 及以上版本。
示例
use prse::parse;
let input = "5 + -2 = 3";
let total: i32;
let (lhs, rhs): (i32, i32) = parse!(input, "{} + {} = {total}");
assert_eq!(lhs + rhs, total);
它还允许您一次解析多个由分隔符分隔的变量。
use prse::parse;
let input = "My farm contains some amount of booleans: true || false || true || false";
let many: Vec<bool>;
// the variable to store the answer in is many and the separator is equal to " || "
parse!(input, "My farm contains some amount of booleans: {many: || :}");
assert_eq!(many, vec![true, false, true, false]);
如果您不想在解析失败时 panic,可以使用 try_parse!
宏。
use prse::try_parse;
use std::path::PathBuf;
let input = "cd C:\\windows\\system32";
let path: Result<PathBuf, _ > = try_parse!(input, "cd {}");
assert_eq!(path.unwrap(), PathBuf::from("C:\\windows\\system32"));
此外,您还可以使用 Parse
derive 宏来帮助您解析自定义类型。为了获得更大的灵活性,您可以自己实现 Parse
trait,以进行完全定制的解析,例如十六进制数字解析。
use prse::{parse, Parse};
#[derive(Parse, PartialEq, Eq, Debug)]
#[prse = "({x}, {y})"]
struct Position {
x: i32,
y: i32,
}
let input = "(1, 3) + (-2, 9)";
let (lhs, rhs): (Position, Position) = parse!(input, "{} + {}");
assert_eq!(lhs, Position { x: 1, y: 3 });
assert_eq!(rhs, Position { x: -2, y: 9 });
许可证
根据您的选择,许可协议为 Apache 许可协议,版本 2.0 或 MIT 许可协议。除非您明确声明,否则根据 Apache-2.0 许可协议定义,您提交给此 crate 的任何有意贡献都应按上述方式双重许可,不得添加任何其他条款或条件。
依赖项
~0.7–1.2MB
~26K SLoC