#enums #tags #serde

macro enser_derive

Proc macro for enser crate

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

#24 in #tag

Download history 78/week @ 2024-07-19 87/week @ 2024-07-26 59/week @ 2024-08-02 85/week @ 2024-08-09 56/week @ 2024-08-16 60/week @ 2024-08-23 71/week @ 2024-08-30 50/week @ 2024-09-06 54/week @ 2024-09-13 83/week @ 2024-09-20 44/week @ 2024-09-27 29/week @ 2024-10-04 62/week @ 2024-10-11 88/week @ 2024-10-18 87/week @ 2024-10-25 56/week @ 2024-11-01

296 downloads per month
Used in 24 crates (via enser)

MIT/Apache

15KB
223 lines

✒️ 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

~325–770KB
~18K SLoC