define_enum_group

Macro define_enum_group 

Source
define_enum_group!() { /* proc-macro */ }
Expand description

Defines a flat wire enum and multiple specialized categorical enums.

This macro generates:

  1. A set of categorical enums, each containing a subset of variants.
  2. A single flat “wire” enum containing all variants from all groups.
  3. A Group enum for dispatch between groups.
  4. An EnumGroup trait 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 enum
  • enum Business { C(MsgC) } - categorical enum
  • enum WireMsg { A(MsgA), B(MsgB), C(MsgC) } - flat wire enum
  • enum WireMsgGroup { Protocol(Protocol), Business(Business) } - dispatch enum
  • impl EnumGroup for WireMsg - conversion trait