#![warn(missing_docs)]
#![no_std]
#[macro_export]
macro_rules! implies {
($($tt:tt)*) => {
$crate::implies_tt!(() $($tt)*)
};
}
#[doc(hidden)]
pub use core::compile_error;
#[doc(hidden)]
#[macro_export]
macro_rules! implies_tt {
(($($front:tt)*) => $($tail:tt)*) => {
if $($front)* {
$crate::implies_tt_tail!(() $($tail)*)
} else {
true
}
};
(($($front:tt)*) $next:tt $($tail:tt)*) => {
$crate::implies_tt!(($($front)* $next) $($tail)*)
};
(($($front:tt)*)) => {
{
$crate::compile_error!("`implies` macro invocation must contain at least one implication (`=>`)");
$($front)*
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! implies_tt_tail {
(($($front:tt)*) => $($tail:tt)*) => {
if $($front)* {
$crate::implies_tt_tail!(() $($tail)*)
} else {
true
}
};
(($($front:tt)*) $next:tt $($tail:tt)*) => {
$crate::implies_tt_tail!(($($front)* $next) $($tail)*)
};
(($($front:tt)*)) => {
$($front)*
};
}