#[macro_export]
macro_rules! strfmt {
($inst:expr, $($key:ident => $value:tt),*,) => {
$crate::strfmt!($inst, $($key => $value)*)
};
($inst:expr, $($values:tt),*,) => {
$crate::strfmt!($inst, $($values)*)
};
($inst:expr,$($values:tt)*) =>({
let mut vars: std::collections::HashMap<String, Box<dyn $crate::DisplayStr>> =
std::collections::HashMap::new();
$crate::strfmt_builder!(vars,$($values)*);
$crate::strfmt($inst,&vars)
});
}
#[macro_export]
macro_rules! strfmt_builder {
($vars:expr,$value:expr) => (
$vars.insert(stringify!($value).to_string(),Box::new($value));
);
($vars:expr,$name:ident => $value:expr) => {
$vars.insert(stringify!($name).to_string(),Box::new($value));
};
($vars:expr,$value:expr,$($values:tt)*) => {
$vars.insert(stringify!($value).to_string(),Box::new($value));
$crate::strfmt_builder!($vars,$($values)*)
};
($vars:expr,$name:ident => $value:expr,$($values:tt)*) => {
$vars.insert(stringify!($name).to_string(),Box::new($value));
$crate::strfmt_builder!($vars,$($values)*)
};
}