#[allow(unused_imports)]
use crate::MetaCallValue;
pub(crate) mod private_macros {
macro_rules! cstring_enum {
($var:ident, $enum:ident) => {{
let var = $var.to_string();
match ::std::ffi::CString::new(var.clone()) {
Ok(str) => Ok(str),
Err(err) => Err($enum::UnexpectedCStringConversionErr(
$crate::MetaCallStringConversionError::new(var, err),
)),
}
}};
($var:expr, $enum:ident) => {{
let var = $var;
cstring_enum!(var, $enum)
}};
}
macro_rules! cstring {
($var:ident) => {{
let var = $var.to_string();
match ::std::ffi::CString::new(var.clone()) {
Ok(str) => Ok(str),
Err(err) => Err($crate::MetaCallStringConversionError::new(var, err)),
}
}};
($var:expr) => {{
let var = $var;
cstring!(var)
}};
}
pub(crate) use cstring;
pub(crate) use cstring_enum;
}
#[macro_export]
macro_rules! match_metacall_value {
( $any:expr, { $( $var:ident : $type:ty => $arm:expr ),*, _ => $default:expr } ) => (
$(
if $any.is::<$type>() {
let $var = $any.downcast::<$type>().unwrap();
$arm
} else
)*
{
$default
}
)
}
#[macro_export]
macro_rules! match_metacall_value_ref {
( $any:expr, { $( $var:ident : $type:ty => $arm:expr ),*, _ => $default:expr } ) => (
$(
if $any.is::<$type>() {
let $var = $any.downcast_ref::<$type>().unwrap();
$arm
} else
)*
{
$default
}
)
}
#[macro_export]
macro_rules! match_metacall_value_mut {
( $any:expr, { $( $var:ident : $type:ty => $arm:expr ),*, _ => $default:expr } ) => (
$(
if $any.is::<$type>() {
let $var = $any.downcast_mut::<$type>().unwrap();
$arm
} else
)*
{
$default
}
)
}