Derive Macro EnumUpdate

Source
#[derive(EnumUpdate)]
{
    // Attributes available to this derive:
    #[variant_group]
    #[skip_default]
    #[rename_default]
    #[enum_update]
}
Expand description

Generates an enum representing updates to a given struct. See the README.md for an overview.

The EnumUpdate macro works by creating a list of “variant groups” with each group representing a modification to the state struct. By default, a variant group is constructed for each struct member. An enum variant is generated for each variant group containing all changes for fields in that group.

§Available attributes:

§variant_group

Specifies that a field should belong to an extra group.

#[derive(EnumUpdate)]
pub struct TimeSeriesData {
    #[variant_group(RecordOne)]
    time: u32,
    #[variant_group(RecordOne)]
    value_one: u32,
    value_two: u32
}

will generate

pub enum TimeSeriesDataUpdate {
    Time(u32),
    ValueOne(u32),
    ValueTwo(u32),
    RecordOne(u32, u32), // <- represents multiple changes
}

§skip_default

Specifies that a default variant group should not be generated for a field.

#[derive(EnumUpdate)]
pub struct TimeSeriesData {
    time: u32,
    value_one: u32,
    #[skip_default]
    cached_data
}

will generate

pub enum TimeSeriesDataUpdate {
    Time(u32),
    ValueOne(u32)
}

§rename_default

Renames the default variant group generated for a field.

#[derive(EnumUpdate)]
pub struct TimeSeriesData {
    time: u32,
    value_one: u32,
    #[rename_default(new_name)]
    original_name: u32
}

will generate

pub enum TimeSeriesDataUpdate {
    Time(u32),
    ValueOne(u32),
    NewName(u32), // <-- corresponds to original_name
}

§enum_update

Passes on any provided attributes to the generated enum.

#[derive(EnumUpdate)]
#[enum_update(derive(Debug))]
pub struct State {
    value: u32
}

will generate

#[derive(Debug)]
pub enum StateUpdate {
    Value(u32)
}