Macro prometheus_utils::label_enum [−][src]
macro_rules! label_enum { ($(#[$attr : meta]) * enum $N : ident { $($(#[$var_attr : meta]) * $V : ident), * $(,) * }) => { ... }; ($(#[$attr : meta]) * pub enum $N : ident { $($(#[$var_attr : meta]) * $V : ident), * $(,) * }) => { ... }; ($(#[$attr : meta]) * pub($($vis : tt) +) enum $N : ident { $($(#[$var_attr : meta]) * $V : ident), * $(,) * }) => { ... }; }
Expand description
Declare an enum intended to be used as a Prometheus label.
This helper macro can only be used to define enums consisting of tags without values.
Each tag corresponds to a possible Prometheus label value. The macro then generates
two functions, as_str
and all_variants
, as described in the example below. Those
funtions are intended to assist in implementing the Labels
trait for a label struct
that contains the enum, ensuring a consistent conversion to strings for label values,
and that all possible variants are included when implementing possible_label_values
.
Example
When using the macro, define exactly one enum
inside, as you would normally:
ⓘ
label_enum! { pub(crate) enum MyErrorLabel { IoError, TimeoutError, MemoryError, } }
The macro will declare the enum exactly as provided. But in addition, it will generate two functions:
ⓘ
impl MyErrorLabel { /// The name of this enum variant, as a string slice. pub fn as_str(&self) -> &'static str { ... } /// A vector containing one instance of each of the enum's variants. pub fn all_variants() -> Vec<Self> { ... } }