Documentation
macro_rules! dyn_match {
    ($scalar:expr, $enum:ident, $inner_macro:ident) => {
        match $scalar {
            $enum::I8 => $inner_macro!(i8),
            $enum::I16 => $inner_macro!(i16),
            $enum::I32 => $inner_macro!(i32),
            $enum::I64 => $inner_macro!(i64),
            $enum::U8 => $inner_macro!(u8),
            $enum::U16 => $inner_macro!(u16),
            $enum::U32 => $inner_macro!(u32),
            $enum::U64 => $inner_macro!(u64),
            $enum::F32 => $inner_macro!(f32),
            $enum::F64 => $inner_macro!(f64),
            $enum::Bool => $inner_macro!(bool),
            $enum::String => $inner_macro!(String),
        }
    };
}

macro_rules! dyn_map {
    ($scalar:expr, $enum:ident, $inner_macro:ident) => {
        match $scalar {
            $enum::I8(_val) => $inner_macro!(I8, _val),
            $enum::I16(_val) => $inner_macro!(I16, _val),
            $enum::I32(_val) => $inner_macro!(I32, _val),
            $enum::I64(_val) => $inner_macro!(I64, _val),
            $enum::U8(_val) => $inner_macro!(U8, _val),
            $enum::U16(_val) => $inner_macro!(U16, _val),
            $enum::U32(_val) => $inner_macro!(U32, _val),
            $enum::U64(_val) => $inner_macro!(U64, _val),
            $enum::F32(_val) => $inner_macro!(F32, _val),
            $enum::F64(_val) => $inner_macro!(F64, _val),
            $enum::Bool(_val) => $inner_macro!(Bool, _val),
            $enum::String(_val) => $inner_macro!(String, _val),
        }
    };
}

macro_rules! dyn_map_fun {
    ($scalar:expr, $enum:ident, $fun:ident $(, $arg:expr)*) => {
        match $scalar {
            $enum::I8(_val) => _val.$fun($($arg),*),
            $enum::I16(_val) => _val.$fun($($arg),*),
            $enum::I32(_val) => _val.$fun($($arg),*),
            $enum::I64(_val) => _val.$fun($($arg),*),
            $enum::U8(_val) => _val.$fun($($arg),*),
            $enum::U16(_val) => _val.$fun($($arg),*),
            $enum::U32(_val) => _val.$fun($($arg),*),
            $enum::U64(_val) => _val.$fun($($arg),*),
            $enum::F32(_val) => _val.$fun($($arg),*),
            $enum::F64(_val) => _val.$fun($($arg),*),
            $enum::Bool(_val) => _val.$fun($($arg),*),
            $enum::String(_val) => _val.$fun($($arg),*),
        }
    };
}

pub(crate) use {dyn_match, dyn_map, dyn_map_fun};