serde-double-tag 0.0.4

double tagged enum representation for `serde`
Documentation
# serde-double-tag

This crates provides derive macros for a double tagged enum representation for [`serde`].
It is basically a combination of externally and adjecently tagged enums.

If you enable the `schemars` feature,
the crate also exposes a derive macro for the [`schemars::JsonSchema`] trait.

For example, consider this enum:
```rust
#[derive(serde_double_tag::Deserialize, serde_double_tag::Serialize)]
#[serde(tag = "species")]
#[serde(rename_all = "snake_case")]
enum Friend {
  Human {
    name: String,
    hobbies: Vec<String>,
  },
  Dog {
    name: String,
    color: String,
  }
}
```

A `Friend::Human` will be serialized as:
```json
{
  "species": "human",
  "human": {
    "name": "Zohan",
    "hobbies": ["hair dressing"],
  }
}
```

Similarly, a `Friend::Dog` will be serialized as:
```json
{
  "species": "dog",
  "dog": {
    "name": "Scrappy",
    "color": "white and gray",
  }
}
```

This enum representation could be useful if you want data for the different variants to co-exist in a single file or in your database.
Since each variant uses a different field name, they will never conflict.
And since there is still a separate field for the enum tag, you can still known which variant is actually active.

Currently supported `serde` attributes:
* `#[serde(rename = "...")]
* `#[serde(rename_all = "...")]
* `#[serde(rename_all_fields = "...")]
* `#[serde(deny_unknown_fields = "...")]

[`serde`]: https://docs.rs/serde/
[`schemars::JsonSchema`]: https://docs.rs/schemars/latest/schemars/trait.JsonSchema.html