4个版本
0.1.3 | 2019年11月19日 |
---|---|
0.1.2 | 2019年11月18日 |
0.1.1 | 2019年11月18日 |
0.1.0 | 2019年11月18日 |
#638 in 进程宏
41KB
927 代码行
miniserde-enum
此crate公开了为miniserde的Serialize
和Deserialize
特质在枚举上提供的派生宏。
此crate的目标是提供类似于Serde对miniserde的枚举支持(见Serde的枚举表示列表)。
示例
外部标记枚举的反序列化
use miniserde::{Deserialize, json};
use miniserde_enum::Deserialize_enum;
#[derive(Deserialize_enum, Debug, PartialEq)]
enum External {
A(i32),
#[serde(rename = "renamedB")]
B(i32, String),
C {
x: i32,
},
D,
}
use External::*;
let example = r#"[{"A":21},{"renamedB":[42,"everything"]},{"C":{"x":2}},"D"]"#;
let actual: Vec<External> = json::from_str(example).unwrap();
let expected = [A(21), B(42, "everything".to_string()), C { x: 2 }, D];
assert_eq!(actual, expected);
内部标记枚举的序列化
use miniserde::{json, Serialize};
use miniserde_enum::Serialize_enum;
#[serde(tag = "type")]
#[derive(Serialize_enum)]
enum Internal {
A,
#[serde(rename = "renamedB")]
B,
C {
x: i32,
},
}
use Internal::*;
let example = [A, B, C { x: 2 }];
let actual = json::to_string(&example[..]);
let expected = r#"[{"type":"A"},{"type":"renamedB"},{"type":"C","x":2}]"#;
assert_eq!(actual, expected);
更多示例可以在测试目录中找到。
限制
内部标记枚举和相邻标记枚举的反序列化需要标记是对象的第一个键,否则from_str将返回错误。
此外,并非所有枚举表示目前都受到支持(见TODO)。
TODO
- 序列化
外部标记枚举内部标记枚举无标记枚举- 相邻标记枚举
- 反序列化
外部标记枚举内部标记枚举- 无标记枚举
相邻标记枚举
许可证
根据您的选择,许可在Apache许可证,版本2.0或MIT许可证下。除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交给Serde的贡献,将按上述方式双重许可,没有任何附加条款或条件。
依赖关系
~0.4–1MB
~21K SLoC