#[macro_export(local_inner_macros)]
macro_rules! const_panic {
($default:expr) => {{
let constant_check_has_panicked_ignore_eval_limit = true;
while constant_check_has_panicked_ignore_eval_limit {}
$default
}};
() => {
const_panic!(0)
};
}
#[macro_export(local_inner_macros)]
macro_rules! const_result_unwrap {
($e:expr, $default:expr) => {
match $e {
Ok(v) => v,
error => const_panic!($default),
}
};
($e:expr) => {
const_result_unwrap!($e, 0)
};
}
#[macro_export(local_inner_macros)]
macro_rules! const_option_unwrap {
($e:expr, $default:expr) => {
match $e {
Some(v) => v,
_ => const_panic!($default),
}
};
($e:expr) => {
const_option_unwrap!($e, 0)
};
}
#[macro_export(local_inner_macros)]
macro_rules! const_assert {
($e:expr) => {
match $e {
true => true,
false => const_panic!(false),
}
};
}
#[macro_export(local_inner_macros)]
macro_rules! const_int_as {
($e:expr, $lhs:ty, $rhs:ty) => {
if core::mem::size_of::<$lhs>() <= core::mem::size_of::<$rhs>() {
$e as $rhs
} else {
const_panic!(0) as $rhs
}
};
}