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 在 过程宏 中
每月 156 下载
8KB
131 代码行
为结构派生 TryFrom<HashMap<String, String>>
。
支持具有命名字段的结构的派生,这些字段可以实现 impl FromStr
或 serde::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