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());