#tags #枚举 #serde

enser_derive

enser 包的 Proc macro

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日

#tags 中排名 448

Download history 66/week @ 2024-03-13 85/week @ 2024-03-20 95/week @ 2024-03-27 52/week @ 2024-04-03 51/week @ 2024-04-10 52/week @ 2024-04-17 83/week @ 2024-04-24 63/week @ 2024-05-01 58/week @ 2024-05-08 62/week @ 2024-05-15 89/week @ 2024-05-22 115/week @ 2024-05-29 59/week @ 2024-06-05 61/week @ 2024-06-12 58/week @ 2024-06-19 51/week @ 2024-06-26

每月下载 231
24 个包中(通过 enser 使用)

MIT/Apache

15KB
223

✒️ 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 约束。

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

许可

在以下任一许可证下发布

任选其一。

贡献

除非您明确说明,否则任何有意提交以包含在您的工作中的贡献,根据 Apache-2.0 许可证定义,应按上述方式双许可,而无需任何附加条款或条件。

依赖关系

~0.4–0.8MB
~19K SLoC