From 7a0a9722d0ec03209c20f263f9cf10ff769b0e49 Mon Sep 17 00:00:00 2001 From: etwyniel Date: Mon, 18 Nov 2019 11:35:04 +0100 Subject: [PATCH] Add readme --- README.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..fd1acbe --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ +# miniserde-enum + +This crate exposes derive macros for miniserde's `Serialize` and `Deserialize` +traits on enums. + +The goal of this crate is to provide enum support like that of Serde for +miniserde (see [Serde's list of enum representations](https://serde.rs/enum-representations.html)). + +# Examples + +## Deserializing an externally tagged enum +```rust +use miniserde::{Deserialize, json}; +use miniserde_enum::Deserialize_enum; + +#[derive(Deserialize_enum, Debug, PartialEq)] +enum External { + A(i32), + #[serde(rename = "renamedB")] + B(i32, String), + C { + x: i32, + }, + D, +} +use External::*; + +let example = r#"[{"A":21},{"renamedB":[42,"everything"]},{"C":{"x":2}},"D"]"#; +let actual: Vec = json::from_str(example).unwrap(); +let expected = [A(21), B(42, "everything".to_string()), C { x: 2 }, D]; +assert_eq!(actual, expected); +``` + +## Serializing an internally tagged enum +```rust +use miniserde::{json, Serialize}; +use miniserde_enum::Serialize_enum; + +#[serde(tag = "type")] +#[derive(Serialize_enum)] +enum Internal { + A, + #[serde(rename = "renamedB")] + B, + C { + x: i32, + }, +} +use Internal::*; + +let example = [A, B, C { x: 2 }]; +let actual = json::to_string(&example[..]); +let expected = r#"[{"type":"A"},{"type":"renamedB"},{"type":"C","x":2}]"#; +assert_eq!(actual, expected); +``` + +More examples can be found in the [tests](https://github.com/etwyniel/miniserde-enum/tree/master/tests) +directory. + +# TODO + +- Serialization: + - ~~Externally tagged enums~~ + - ~~Internally tagged enums~~ + - ~~Untagged enums~~ + - Adjacently tagged enums +- Deserialization + - ~~Externally tagged enums~~ + - Internally tagged enums + - Untagged enums + - Adjacently tagged enums