#deserialize #regex #serde #derive-deserialize

de-regex

基于正则表达式的 serde 反序列化

1 个不稳定版本

0.1.0 2021年4月29日

#2042编码

MIT/Apache

20KB
362

De-Regex

本包包含一个库,该库可以根据正则表达式和 serde 将字符串反序列化到结构体。

示例

use serde::Deserialize;

#[derive(Deserialize)]
struct Dimensions {
    width: u32,
    height: u32
}

let pattern = r"^(?P<width>\d+)x(?P<height>\d+)$";
let input = "800x600";

let dim: Dimensions = de_regex::from_str(input, pattern).unwrap();

assert_eq!(dim.width, 800);
assert_eq!(dim.height, 600);

许可证

本项目采用以下任一许可证:

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交以包含在 serde_urlencoded 中的任何贡献,应按上述方式双重许可,不附加任何额外条款或条件。


lib.rs:

De-Regex

本包包含一个库,该库可以根据正则表达式和 serde 将字符串反序列化到结构体。

示例:将图像尺寸解析到结构体

use serde::Deserialize;

#[derive(Deserialize)]
struct Dimension {
width: u32,
height: u32
}

let pattern = r"^(?P<width>\d+)x(?P<height>\d+)$";
let input = "800x600";

let dim: Dimension = de_regex::from_str(input, pattern)?;

assert_eq!(dim.width, 800);
assert_eq!(dim.height, 600);

支持的数据类型

以下数据类型可以用作结构体字段。

  • bool:支持值为 truefalse,不区分大小写
    示例模式:^(?P<group_name>(?i)(true|false))$

  • u8, u16, u32, u64:可选的带有前缀 + 的十进制值
    示例模式:^(?P<group_name>\+?\d+)$

  • i8, i16, i32, i64:可选的带有前缀 + 的十进制值
    示例模式:^(?P<group_name>[-+]?\d+)$

  • f32, f64:有关有效语法的说明,请参阅 f32/f64 的 FromStr 实现
    简单的十进制浮点数的示例模式: ^(?P<group_name>[-+]?\d+(\.\d*)?)$

  • 字符串:一个Unicode(utf8)字符串值。
    示例模式: ^(?P<group_name>\w*)$

  • 元组结构体:只有一个字段(新类型习语)的元组结构体。该结构体需要实现 ´Deserialize´

#[derive(Deserialize)]
struct NewType(i32);
  • 枚举:具有单元变体的枚举(没有新类型和变体字段)。该枚举需要实现 ´Deserialize´
#[derive(Deserialize)]
enum SomeEnum {
Foo,
#[serde(rename = "bar")]
Bar,
Baz(i32) // <- Will compile but is not available in matching because of newtype
};
  • Option<>:所有上述类型都可以用作可选值

serde 支持的其他数据类型可能有效,但不是官方支持并测试的。

名言警句

如果你的正则表达式看起来像一只巨兽,任何人都无法理解,请重新考虑使用这个crate

依赖项

~2.6–4MB
~77K SLoC