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

Creates a Klipper compatible enumeration

The general syntax can be seen by the following example:

klipper_enumeration! {
    #[derive(Debug)]
    #[klipper_enumeration(name = "pin", rename_all = "UPPERCASE")]
    enum Pins {
        Range(PA, 0, 15),
        Range(PB, 0, 15),
        AdcTemperature,
    }
}

The item must always be an enum.

Variants can either be directly specified, or a range can be requested. For ranges, the format is:

Range(Prefix, start, count)

This will generate count items named Prefix{start+i}.

Variants can be enabled or disabled using standard #[cfg(feature...)] feature flags.

The top item and the enumerations can accept parameters. These can be given using the #[klipper_enumeration(opts)] attribute. For the top level item, opts can take the following forms:

  • name = "a_name": An override name of the enumeration seen in the dictionary
  • rename_all = "UPPERCASE|lowercase|snake_case": a default renaming option for all variants

For each variant entry, the following options are available:

  • rename: An override name of this variant in the dictionary. For range variants, all values are renamed.

All values will be automatically mapped to IDs. Implementations of TryFrom<u{8, 16, 32, 64, size> are generated automatically, along with implementations of From<Self> for u{8, 16, 32, 64, usize}. The number of bits in these generated functions is determining by the number of variants. E.g. if the enum has more than 255 variants, the u8 functions are not generated.