#[macro_export]
macro_rules! formatx {
($template:expr $(,)?) => {
(|| -> ::std::result::Result<::std::string::String, $crate::Error> {
$crate::Template::new($template)?.render().finish()
})()
};
($template:expr, $($args:tt)*) => {
(|| -> ::std::result::Result<::std::string::String, $crate::Error> {
let t = $crate::Template::new($template)?;
let mut r = t.render();
$crate::_formatx_internal!(r, $($args)*);
r.finish()
})()
};
}
#[macro_export]
macro_rules! formatxl {
($template:expr $(,)?) => {
(|| -> ::std::result::Result<::std::string::String, $crate::Error> {
$crate::Template::new($template)?.render().finish_lenient()
})()
};
($template:expr, $($args:tt)*) => {
(|| -> ::std::result::Result<::std::string::String, $crate::Error> {
let t = $crate::Template::new($template)?;
let mut r = t.render();
$crate::_formatx_internal!(r, $($args)*);
r.finish_lenient()
})()
};
}
#[macro_export]
#[doc(hidden)]
macro_rules! _formatx_internal {
($r:expr, $name:ident = $value:expr $(,)?) => {
$r.named(stringify!($name), &$value);
};
($r:expr, $value:expr $(,)?) => {
$r.arg(&$value);
};
($r:expr, $name:ident = $value:expr, $($rest:tt)*) => {
$r.named(stringify!($name), &$value);
$crate::_formatx_internal!($r, $($rest)*);
};
($r:expr, $value:expr, $($rest:tt)*) => {
$r.arg(&$value);
$crate::_formatx_internal!($r, $($rest)*);
};
}