#[macro_export]
macro_rules! custom_error {
($msg:expr) => {
$crate::Error::Custom($msg.to_string())
};
($template:expr, $($arg:expr),+) => {
$crate::Error::Custom(format!($template, $($arg),+))
};
}
#[macro_export]
macro_rules! map {
{} => { ::std::collections::HashMap::new() };
{
map_keys: $mapper:expr;
$($key:expr => $value:expr),+,
} => {
{
let mut _map: ::std::collections::HashMap<_, _> = ::std::collections::HashMap::new();
$(_map.insert($mapper($key), $value);)+
_map
}
};
{ $($key:expr => $value:expr),+, } => {
{
let mut _map: ::std::collections::HashMap<_, _> = ::std::collections::HashMap::new();
$(_map.insert($key, $value);)+
_map
}
};
}
#[macro_export]
macro_rules! manage_hooks {
{ $($query:expr => $hook:expr),+, } => {
{
use $crate::core::hooks::ManageHook as _;
let mut _hooks = vec![];
$(
_hooks.push(
$crate::core::hooks::ManageHook::boxed(($query, $hook))
);
)+
Box::new(_hooks)
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! pop_where {
($self:ident, $lst:ident, $($pred:tt)+) => {{
let placeholder = ::std::mem::take(&mut $self.$lst);
let mut remaining = ::std::collections::VecDeque::default();
let mut popped = None;
let pred = $($pred)+;
for item in placeholder.into_iter() {
if pred(&item) {
popped = Some(item);
} else {
remaining.push_back(item);
}
}
::std::mem::swap(&mut $self.$lst, &mut remaining);
popped
}};
}