#hash-map #struct #macro-derive #string #try #parser #deserialize

try-from-map

将HashMap转换为结构的派生宏

5个版本

0.2.1 2024年3月13日
0.2.0 2024年3月13日
0.1.2 2024年3月5日
0.1.1 2024年3月5日
0.1.0 2024年3月5日

427过程宏

Download history 38/week @ 2024-04-10 4/week @ 2024-04-17

每月 156 下载

MIT 许可证

8KB
131 代码行

为结构派生 TryFrom<HashMap<String, String>>

支持具有命名字段的结构的派生,这些字段可以实现 impl FromStrserde::Deserialize。实现 serde::Deserialize 的字段可以注释为 #[serde_json] 以将值解析为JSON。

示例

use try_from_map::TryFromMap;

#[derive(TryFromMap, Debug)]
struct Foo {
   a: i32,
   b: f32,
   c: Option<bool>,
   #[serde_json] // Parse as JSON as Vec<f64> does not impl FromStr
   d: Vec<f64>,
}

let map = std::collections::HashMap::from([
    ("a".to_string(), "42".to_string()),
    ("b".to_string(), "3.14".to_string()),
    ("d".to_string(), "[3.14, 2.71]".to_string()),
]);

let foo = Foo::try_from(map).unwrap();
println!("{:?}", foo);

assert_eq!(foo.a, 42);
assert_eq!(foo.b, 3.14);
assert_eq!(foo.c, None);
assert_eq!(foo.d, vec![3.14, 2.71]);

依赖项

~295–750KB
~18K SLoC