define_enum_group!() { /* proc-macro */ }Expand description
Defines a flat wire enum and multiple specialized categorical enums.
This macro generates:
- A set of categorical enums, each containing a subset of variants.
- A single flat “wire” enum containing all variants from all groups.
- A
Groupenum for dispatch between groups. - An
EnumGrouptrait implementation for converting wire → group.
§Example
ⓘ
use enum_group_macros::define_enum_group;
use serde::{Deserialize, Serialize};
define_enum_group! {
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", content = "payload")]
pub enum WireMsg {
Protocol {
A(MsgA),
B(MsgB),
},
Business {
C(MsgC),
}
}
}This generates:
enum Protocol { A(MsgA), B(MsgB) }- categorical enumenum Business { C(MsgC) }- categorical enumenum WireMsg { A(MsgA), B(MsgB), C(MsgC) }- flat wire enumenum WireMsgGroup { Protocol(Protocol), Business(Business) }- dispatch enumimpl EnumGroup for WireMsg- conversion trait