1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
/// An utility macro to construct a compound `Require`.
#[macro_export]
macro_rules! Require {
    [ $lt_p: lifetime, $lt_d: lifetime ] => { $crate::requirements::RequireNil, };
    [ $lt_p: lifetime, $lt_d: lifetime, $head: ty ] => { $crate::requirements::RequireOne<$lt_p, $lt_d, $head> };
    [ $lt_p: lifetime, $lt_d: lifetime, $head: ty, $($tail: ty), * ] => {
        $crate::requirements::RequirePair<
            $crate::requirements::RequireOne<$lt_p, $lt_d, $head>,
            $crate::Require![ $lt_p, $lt_d, $($tail), *]
        > };
    [ $lt_p: lifetime, $lt_d: lifetime, $head: ty, $($tail: ty), *, ] => {
        $crate::requirements::RequirePair<
            $crate::requirements::RequireOne<$lt_p, $lt_d, $head>,
            $crate::Require![ $lt_p, $lt_d, $($tail), *]
        > };
}