#enums #tags #serde #cargo-toml

enser

带标签的枚举序列化

5个版本

0.1.4 2023年6月4日
0.1.3 2023年1月16日
0.1.2 2023年1月16日
0.1.1 2023年1月16日
0.1.0 2023年1月15日

#829 in 编码

Download history 66/week @ 2024-03-11 53/week @ 2024-03-18 88/week @ 2024-03-25 91/week @ 2024-04-01 40/week @ 2024-04-08 46/week @ 2024-04-15 81/week @ 2024-04-22 48/week @ 2024-04-29 65/week @ 2024-05-06 55/week @ 2024-05-13 75/week @ 2024-05-20 108/week @ 2024-05-27 70/week @ 2024-06-03 63/week @ 2024-06-10 46/week @ 2024-06-17 77/week @ 2024-06-24

每月下载量290
23个crate中使用(通过peace_cfg

MIT/Apache

12KB

✒️ enser

Crates.io docs.rs CI Coverage Status

带标签的枚举序列化

 # serde_yaml -- every variant starts with a !Tag
 enser:
-- Tbd
-- None
+- !Tbd null
+- !None null
 - !Some 123
 - !Named
   value: 456

 # serde_json -- every variant is an object
 {
   "enser": [
-    "Tbd",
-    "None",
+    { "Tbd": null },
+    { "None": null },
     { "Some": 123 },
     { "Named": { "value": 456 } }
   ]
 }

用法

将以下内容添加到Cargo.toml

enser = "0.1.4"
#[enser::enser] // <-- just add this
                // Note: It *must* come above `#[derive(Clone, Deserialize, Serialize)]`
#[derive(Clone, Debug, Deserialize, Serialize)]
enum MyEnum {
    Tbd,
    None,
    Some(u32),
    Named { value: u32 },
}

泛型

这将自动适用于泛型类型

#[enser::enser]
#[derive(Clone, Debug, Deserialize, Serialize)]
enum MyEnum<T, U> {
    None,
    Some(T),
    Named { value: U },
}

然而,它还将Clone约束添加到每个类型参数,因此所有impl块都将需要类型参数具有Clone约束。

如果您能找到一种方法使泛型示例在不传播Clone约束的情况下工作,请告诉我/提交一个pull request!

许可证

在以下两者中选择许可

任选其一。

贡献

除非您明确声明,否则您提交的任何旨在包含在作品中的贡献,如Apache-2.0许可证中定义,将按上述方式双重许可,不附加任何额外条款或条件。

依赖关系

~0.4–0.8MB
~19K SLoC