3 个版本
0.1.3 | 2023 年 12 月 16 日 |
---|---|
0.1.2 |
|
0.1.1 | 2022 年 4 月 15 日 |
0.1.0 | 2022 年 3 月 1 日 |
#354 在 编码
每月 3,615 次下载
用于 midwest_mainline
10KB
126 代码行
Serde Unit Struct Derive
该包为 Serde 的 Serialize
和 Deserialize
特性提供了 derive 宏,以便单元结构以字符串形式表示其名称。如果您希望保留类型信息,即区分不同的单元结构,这非常有用。
没有 serde_unit_struct
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize)]
struct Foo;
#[derive(Deserialize, Serialize)]
struct Bar;
fn main() {
// Normally, unit structs serialize to null.
let json = serde_json::to_string(&Foo).unwrap();
assert_eq!(json, "null");
// We can successfully deserialize them, but...
let foo: Foo = serde_json::from_str(&json).unwrap();
assert_eq!(foo, Foo);
// ...this also works; the type information is lost.
let bar: Bar = serde_json::from_str(&json).unwrap();
assert_eq!(bar, Bar);
}
使用 serde_unit_struct
use serde_unit_struct::{Deserialize_unit_struct, Serialize_unit_struct};
#[derive(Deserialize_unit_struct, Serialize_unit_struct)]
struct Foo;
#[derive(Deserialize_unit_struct, Serialize_unit_struct)]
struct Bar;
fn main() {
// Now, unit structs serialise to their name as a string.
let json = serde_json::to_string(&Foo).unwrap();
assert_eq!(json, "\"Foo\"");
// We can successfully deserialize them.
let foo: Foo = serde_json::from_str(&json).unwrap();
assert_eq!(foo, Foo);
// Type information is maintained.
let bar: Result<Bar, _> = serde_json::from_str(&json);
assert!(bar.is_err());
}
许可证
根据您的选择,此代码受 Apache License, Version 2.0 或 MIT 许可证的许可,请参阅 Apache License, Version 2.0 或 MIT 许可证。
除非您明确说明,否则您根据 Apache-2.0 许可证定义的任何旨在包含在此包中的贡献,均应如上所述双重许可,不附加任何额外条款或条件。
依赖项
~270–720KB
~17K SLoC