43 lines
1.4 KiB
Markdown
43 lines
1.4 KiB
Markdown
[](https://github.com/d-e-s-o/serde_variant/actions/workflows/test.yml)
|
|
[](https://crates.io/crates/serde_variant)
|
|
[](https://docs.rs/serde_variant)
|
|
[](https://blog.rust-lang.org/2021/12/02/Rust-1.57.0.html)
|
|
|
|
serde_variant
|
|
=============
|
|
|
|
- [Documentation][docs-rs]
|
|
- [Changelog](CHANGELOG.md)
|
|
|
|
So you have just carefully defined your `enum` to be serialized and
|
|
deserialized using [`serde`][serde] as you intended and now you need an
|
|
additional `FromStr` or `Display` implementation that uses the same
|
|
names for `enum` variants as `serde` uses? You are reluctant to
|
|
duplicate all those definitions in two places?
|
|
|
|
**serde_variant** is a crate that allows you to retrieve back the
|
|
identifier of any `enum` variant passed to it.
|
|
|
|
|
|
Usage
|
|
-----
|
|
|
|
The crate provides a single function, `to_variant_name`, that retrieves
|
|
the name of a passed in `enum` variant. For example:
|
|
```rust
|
|
use serde_variant::to_variant_name;
|
|
|
|
#[derive(Serialize)]
|
|
enum Foo {
|
|
Var1,
|
|
#[serde(rename = "VAR2")]
|
|
Var2,
|
|
}
|
|
|
|
assert_eq!(to_variant_name(&Foo::Var1).unwrap(), "Var1");
|
|
assert_eq!(to_variant_name(&Foo::Var2).unwrap(), "VAR2");
|
|
```
|
|
|
|
[docs-rs]: https://docs.rs/crate/serde_variant
|
|
[serde]: https://crates.io/crates/serde
|