5 releases

0.1.4 Jun 4, 2023
0.1.3 Jan 16, 2023
0.1.2 Jan 16, 2023
0.1.1 Jan 16, 2023
0.1.0 Jan 15, 2023

#829 in Encoding

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 downloads per month
Used in 23 crates (via peace_cfg)

MIT/Apache

12KB

✒️ enser

Crates.io docs.rs CI Coverage Status

Enum Serialization with Tag

 # 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 } }
   ]
 }

Usage

Add the following to 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 },
}

Generics

This will automatically work for generic types:

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

However, it also adds a Clone bound to each type parameter, so all impl blocks will require the type parameters to have a Clone bound.

If you can find a way for the generics example to work without causing the Clone bound propagation, then please let me know / submit a pull request!

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~0.4–0.8MB
~19K SLoC