macro_rules! enum_with_get_inner { ( inner = $inner: ty; $(#[$attr: meta])* $visibility: vis enum $enum_name: ident { $( $(#[$variant_attr: meta])* $variant: ident($variant_inner: ty), )* } ) => { $(#[$attr])* $visibility enum $enum_name { $( $(#[$variant_attr])* $variant($inner) ),* } impl $enum_name { /// Returns the inner value. #[must_use] pub fn inner(&self) -> &$inner { match self { $( $enum_name::$variant(inner) => inner ),* } } } }; } pub(crate) use enum_with_get_inner;