Skip to main content

labeled_enum

Macro labeled_enum 

Source
macro_rules! labeled_enum {
    (
        $(#[$enum_attr:meta])*
        $vis:vis enum $name:ident {
            $(
                $(#[$variant_attr:meta])*
                $variant:ident = $canonical:literal $(| $alias:literal)* => $doc:literal
            ),* $(,)?
        }
    ) => { ... };
}
Expand description

Declare an option enum whose variants carry a canonical label, optional parse aliases and a one-line completion doc.

Expands to the enum (deriving Debug, Clone, Copy, PartialEq, Eq, Default) plus inherent label(), doc(), all() and parse_label(). Exactly one variant must be #[default]. See the module docs for syntax, aliases and extra derives.

ยงExamples

use lattice_core::labeled_enum;

labeled_enum! {
    /// `:set bell=...`.
    pub enum Bell {
        /// Silent.
        #[default]
        Off = "off" | "false" => "No bell",
        /// Flash the screen.
        Visual = "visual" => "Flash instead of beeping",
    }
}

assert_eq!(Bell::parse_label("false"), Ok(Bell::Off));
assert_eq!(Bell::Visual.doc(), "Flash instead of beeping");
assert!(Bell::parse_label("loud").is_err());