#[macro_export]
macro_rules! exhaustive_match {
(
$expr:expr => Option<$return_ty:ty>;
{
$($pattern:pat => Some($variant:ident $($rest:tt)*)),+ $(,)?
}
default $default_pattern:pat => $default:expr
) => {{
use $return_ty::*;
::assert_enum_variants::assert_enum_variants!($return_ty, { $($variant),+ });
match $expr {
$($pattern => Some($variant $($rest)*),)+
$default_pattern => $default
}
}};
(
$expr:expr => $return_ty:ty;
{
$($pattern:pat => $variant:ident $(($($args:tt)*))? ),+ $(,)?
}
default $default_pattern:pat => $default:expr
) => {{
use $return_ty::*;
::assert_enum_variants::assert_enum_variants!($return_ty, { $($variant),+ });
match $expr {
$($pattern => $variant $(($($args)*))? ,)+
$default_pattern => $default
}
}};
(
$expr:expr => $return_ty:ty;
{
$($pattern:pat => $variant:ident $(($($args:tt)*))? ),+ $(,)?
}
) => {{
use $return_ty::*;
::assert_enum_variants::assert_enum_variants!($return_ty, { $($variant),+ });
match $expr {
$($pattern => $variant $(($($args)*))? ),+
}
}};
}