macro_rules! string_constants {
($(#[$meta:meta])* $name:ident { $( $(#[$cmeta:meta])* $field:ident => $val:literal ),* $(,)? }) => {
$(#[$meta])*
pub struct $name;
impl $name {
$(
$(#[$cmeta])*
pub const $field: &'static str = $val;
)*
pub const ALL_VALUES: &'static [&'static str] = &[$($val),*];
}
};
}
macro_rules! define_one_of_or_reference {
($(#[$meta:meta])* $name:ident, $variant:ident($inner:ty)) => {
$(#[$meta])*
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum $name {
$variant($inner),
Reference(String),
}
impl Default for $name {
fn default() -> Self {
$name::$variant(Default::default())
}
}
};
}