#string #format-args #parser #no-std

no-std prse-derive

prse crate 的辅助宏库

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

Download history 60/week @ 2024-03-11 64/week @ 2024-03-18 145/week @ 2024-03-25 87/week @ 2024-04-01 30/week @ 2024-04-08 75/week @ 2024-04-15 123/week @ 2024-04-22 26/week @ 2024-04-29 27/week @ 2024-05-06 16/week @ 2024-05-13 56/week @ 2024-05-20 61/week @ 2024-05-27 9/week @ 2024-06-03 15/week @ 2024-06-10 9/week @ 2024-06-17 20/week @ 2024-06-24

每月下载量 63
2 个 crate 中使用(通过 prse

MIT/Apache 协议

53KB
1K SLoC

Prse

github crates.io docs.rs

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.0MIT 许可协议
除非您明确声明,否则根据 Apache-2.0 许可协议定义,您提交给此 crate 的任何有意贡献都应按上述方式双重许可,不得添加任何其他条款或条件。

依赖项

~0.7–1.2MB
~26K SLoC