# Derive data struct for enum
[](https://crates.io/crates/variants-data-struct)
[](https://crates.io/crates/variants-data-struct)
[](https://docs.rs/variants-data-struct)
[](https://crates.io/crates/variants-data-struct)
[](https://deps.rs/repo/github/JohnScience/variants-data-struct)
This crate provides `VariantsDataStruct` derive macro that generates a struct for an enum, where each field corresponds to a variant of the enum. Each field's type is a struct representing the data of that variant or `()` if the variant has no data.
## Example
```rust
use variants_data_struct::VariantsDataStruct;
#[derive(VariantsDataStruct)]
pub enum MyEnum {
UnitEnum,
TupleEnum(i32, String),
StructEnum { id: u32, name: String },
}
// Equivalent to:
//
// pub struct MyEnumVariantsData {
// pub unit_enum: (),
// pub tuple_enum: TupleEnumVariantType,
// pub struct_enum: StructEnumVariantType,
// }
// pub struct TupleEnumVariantType(pub i32, pub String);
//
// pub struct StructEnumVariantType {
// pub id: u32,
// pub name: String,
// }
```
## Similar crates
* [`variants-struct`](https://crates.io/crates/variants-struct),
* [`enum-struct`](https://crates.io/crates/enum-struct),
* [`enum-collections`](https://crates.io/crates/enum-collections),
* [`enum_variant_type`](https://crates.io/crates/enum_variant_type).