Skip to main content

diesel/expression_methods/
eq_all.rs

1use crate::expression::Expression;
2use crate::expression::grouped::Grouped;
3use crate::expression::operators::And;
4use crate::expression_methods::*;
5use crate::sql_types::Bool;
6
7/// This method is used by `FindDsl` to work with tuples. Because we cannot
8/// express this without specialization or overlapping impls, it is brute force
9/// implemented on columns in the `column!` macro.
10#[doc(hidden)]
11pub trait EqAll<Rhs> {
12    type Output: Expression<SqlType = Bool>;
13
14    fn eq_all(self, rhs: Rhs) -> Self::Output;
15}
16
17macro_rules! impl_eq_all {
18    // General case for 2+ elements
19    (
20        ($Left1:ident, $($Left:ident,)+)
21        ($Right1:ident, $($Right:ident,)+)
22    ) => {
23        #[allow(non_snake_case)]
24        impl<$Left1, $($Left,)+ $Right1, $($Right,)+>
25            EqAll<($Right1, $($Right,)+)> for ($Left1, $($Left,)+)
26        where
27            $Left1: EqAll<$Right1>,
28            ($($Left,)+): EqAll<($($Right,)+)>,
29        {
30            type Output = Grouped<And<
31                <$Left1 as EqAll<$Right1>>::Output,
32                <($($Left,)+) as EqAll<($($Right,)+)>>::Output,
33            >>;
34
35            fn eq_all(self, rhs: ($Right1, $($Right,)+)) -> Self::Output {
36                let ($Left1, $($Left,)+) = self;
37                let ($Right1, $($Right,)+) = rhs;
38                $Left1.eq_all($Right1).and(($($Left,)+).eq_all(($($Right,)+)))
39            }
40        }
41    };
42
43    // Special case for 1 element
44    (
45        ($Left:ident,) ($Right:ident,)
46    ) => {
47        impl<$Left, $Right> EqAll<($Right,)> for ($Left,)
48        where
49            $Left: EqAll<$Right>,
50        {
51            type Output = <$Left as EqAll<$Right>>::Output;
52
53            fn eq_all(self, rhs: ($Right,)) -> Self::Output {
54                self.0.eq_all(rhs.0)
55            }
56        }
57    };
58}
59
60macro_rules! impl_eq_all_for_all_tuples {
61    ($(
62        $unused1:tt {
63            $($unused2:tt -> $Left:ident, $Right:ident, $unused3:tt,)+
64        }
65    )+) => {
66        $(
67            impl_eq_all!(($($Left,)+) ($($Right,)+));
68        )+
69    };
70}
71
72impl<T, ST> EqAll<(ST,)> for (T,) where T: EqAll<ST> {
    type Output = <T as EqAll<ST>>::Output;
    fn eq_all(self, rhs: (ST,)) -> Self::Output { self.0.eq_all(rhs.0) }
}
#[allow(non_snake_case)]
impl<T, T1, ST, ST1> EqAll<(ST, ST1)> for (T, T1) where T: EqAll<ST>,
    (T1,): EqAll<(ST1,)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1,) as EqAll<(ST1,)>>::Output>>;
    fn eq_all(self, rhs: (ST, ST1)) -> Self::Output {
        let (T, T1) = self;
        let (ST, ST1) = rhs;
        T.eq_all(ST).and((T1,).eq_all((ST1,)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, ST, ST1, ST2> EqAll<(ST, ST1, ST2)> for (T, T1, T2) where
    T: EqAll<ST>, (T1, T2): EqAll<(ST1, ST2)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2) as EqAll<(ST1, ST2)>>::Output>>;
    fn eq_all(self, rhs: (ST, ST1, ST2)) -> Self::Output {
        let (T, T1, T2) = self;
        let (ST, ST1, ST2) = rhs;
        T.eq_all(ST).and((T1, T2).eq_all((ST1, ST2)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, ST, ST1, ST2, ST3> EqAll<(ST, ST1, ST2, ST3)> for
    (T, T1, T2, T3) where T: EqAll<ST>, (T1, T2, T3): EqAll<(ST1, ST2, ST3)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3) as EqAll<(ST1, ST2, ST3)>>::Output>>;
    fn eq_all(self, rhs: (ST, ST1, ST2, ST3)) -> Self::Output {
        let (T, T1, T2, T3) = self;
        let (ST, ST1, ST2, ST3) = rhs;
        T.eq_all(ST).and((T1, T2, T3).eq_all((ST1, ST2, ST3)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, ST, ST1, ST2, ST3, ST4>
    EqAll<(ST, ST1, ST2, ST3, ST4)> for (T, T1, T2, T3, T4) where
    T: EqAll<ST>, (T1, T2, T3, T4): EqAll<(ST1, ST2, ST3, ST4)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4) as EqAll<(ST1, ST2, ST3, ST4)>>::Output>>;
    fn eq_all(self, rhs: (ST, ST1, ST2, ST3, ST4)) -> Self::Output {
        let (T, T1, T2, T3, T4) = self;
        let (ST, ST1, ST2, ST3, ST4) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4).eq_all((ST1, ST2, ST3, ST4)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, ST, ST1, ST2, ST3, ST4, ST5>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5)> for (T, T1, T2, T3, T4, T5) where
    T: EqAll<ST>, (T1, T2, T3, T4, T5): EqAll<(ST1, ST2, ST3, ST4, ST5)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5) as EqAll<(ST1, ST2, ST3, ST4, ST5)>>::Output>>;
    fn eq_all(self, rhs: (ST, ST1, ST2, ST3, ST4, ST5)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4,
                    T5).eq_all((ST1, ST2, ST3, ST4, ST5)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, ST, ST1, ST2, ST3, ST4, ST5, ST6>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6)> for (T, T1, T2, T3, T4, T5, T6)
    where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6)>>::Output>>;
    fn eq_all(self, rhs: (ST, ST1, ST2, ST3, ST4, ST5, ST6)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5,
                    T6).eq_all((ST1, ST2, ST3, ST4, ST5, ST6)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7)> for
    (T, T1, T2, T3, T4, T5, T6, T7) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7)>>::Output>>;
    fn eq_all(self, rhs: (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7))
        -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6,
                    T7).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7,
    ST8> EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7,
    T8): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8)>>::Output>>;
    fn eq_all(self, rhs: (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8))
        -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7,
                    T8).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, ST, ST1, ST2, ST3, ST4, ST5, ST6,
    ST7, ST8, ST9> EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9)>
    for (T, T1, T2, T3, T4, T5, T6, T7, T8, T9) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8,
    T9): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9)>>::Output>>;
    fn eq_all(self, rhs: (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9))
        -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8,
                    T9).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, ST, ST1, ST2, ST3, ST4, ST5,
    ST6, ST7, ST8, ST9, ST10>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9,
    T10): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10)>>::Output>>;
    fn eq_all(self,
        rhs: (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10))
        -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9,
                    T10).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ST, ST1, ST2, ST3, ST4,
    ST5, ST6, ST7, ST8, ST9, ST10, ST11>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
    T11): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10,
        ST11)>>::Output>>;
    fn eq_all(self,
        rhs: (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11))
        -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11) =
            rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
                    T11).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, ST, ST1, ST2, ST3,
    ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12)>
    for (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) where
    T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
    T12): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
        ST12)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
                    T12).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, ST, ST1, ST2,
    ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13)> for (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)
    where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
    T13): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) =
            self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, ST, ST1,
    ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13, ST14>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) where
    T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
    T14): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) =
            self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13,
                    T14).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, ST,
    ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13, ST14,
    ST15>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)
    where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
    T15): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14,
                    T15).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
    where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
    T16): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15,
                    T16).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16,
                    T17).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17,
    T18): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17,
                    T18).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10,
    ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18,
    T19): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18,
                    T19).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18,
                    ST19)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10,
    ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19,
    T20): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20))
        -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19,
                    T20).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20,
    T21): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21))
        -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21) =
            rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20,
                    T21).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8,
    ST9, ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20,
    ST21, ST22>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21,
    T22): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21, T22) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
        ST22)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22))
        -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21, T22) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
                ST22) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, T21,
                    T22).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21, ST22)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7,
    ST8, ST9, ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
    ST20, ST21, ST22, ST23>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22,
    T23): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21, T22, T23) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
        ST23)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
            ST23)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21, T22, T23) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
                ST22, ST23) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, T21, T22,
                    T23).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21, ST22, ST23)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, ST, ST1, ST2, ST3, ST4, ST5, ST6,
    ST7, ST8, ST9, ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
    ST20, ST21, ST22, ST23, ST24>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24)>
    for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23,
    T24): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21, T22, T23, T24) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
        ST24)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
            ST23, ST24)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21, T22, T23, T24) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
                ST22, ST23, ST24) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23,
                    T24).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21, ST22, ST23, ST24)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, ST, ST1, ST2, ST3, ST4, ST5,
    ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18,
    ST19, ST20, ST21, ST22, ST23, ST24, ST25>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24,
    T25): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21, T22, T23, T24, T25) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
        ST24, ST25)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
            ST23, ST24, ST25)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
                ST22, ST23, ST24, ST25) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24,
                    T25).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21, ST22, ST23, ST24, ST25)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, ST, ST1, ST2, ST3, ST4,
    ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17,
    ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25, ST26>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25,
    T26): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25, ST26)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
        ST24, ST25, ST26)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
            ST23, ST24, ST25, ST26)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26) =
            self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
                ST22, ST23, ST24, ST25, ST26) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24,
                    T25,
                    T26).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21, ST22, ST23, ST24, ST25, ST26)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, ST, ST1, ST2, ST3,
    ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13, ST14, ST15, ST16,
    ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25, ST26, ST27>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26, ST27)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27) where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
    T27): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25, ST26, ST27)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
        ST24, ST25, ST26, ST27)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
            ST23, ST24, ST25, ST26, ST27)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
                T27) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
                ST22, ST23, ST24, ST25, ST26, ST27) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24,
                    T25, T26,
                    T27).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21, ST22, ST23, ST24, ST25, ST26, ST27)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, ST, ST1, ST2,
    ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13, ST14, ST15,
    ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25, ST26, ST27,
    ST28>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26, ST27, ST28)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28) where
    T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
    T28): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25, ST26, ST27, ST28)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
        ST24, ST25, ST26, ST27, ST28)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
            ST23, ST24, ST25, ST26, ST27, ST28)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
                T27, T28) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
                ST22, ST23, ST24, ST25, ST26, ST27, ST28) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24,
                    T25, T26, T27,
                    T28).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21, ST22, ST23, ST24, ST25, ST26, ST27, ST28)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, ST, ST1,
    ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13, ST14,
    ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25, ST26,
    ST27, ST28, ST29>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26, ST27, ST28, ST29)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29) where
    T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
    T29): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25, ST26, ST27, ST28, ST29)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29)
        as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
        ST24, ST25, ST26, ST27, ST28, ST29)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
            ST23, ST24, ST25, ST26, ST27, ST28, ST29)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
                T27, T28, T29) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
                ST22, ST23, ST24, ST25, ST26, ST27, ST28, ST29) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24,
                    T25, T26, T27, T28,
                    T29).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21, ST22, ST23, ST24, ST25, ST26, ST27, ST28,
                    ST29)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, ST,
    ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13, ST14,
    ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25, ST26,
    ST27, ST28, ST29, ST30>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26, ST27, ST28, ST29, ST30)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30)
    where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
    T30): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25, ST26, ST27, ST28, ST29, ST30)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
        T30) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
        ST24, ST25, ST26, ST27, ST28, ST29, ST30)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
            ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30)) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
                T27, T28, T29, T30) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
                ST22, ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30) = rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24,
                    T25, T26, T27, T28, T29,
                    T30).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21, ST22, ST23, ST24, ST25, ST26, ST27, ST28, ST29,
                    ST30)))
    }
}
#[allow(non_snake_case)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31>
    EqAll<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26, ST27, ST28, ST29, ST30, ST31)> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where T: EqAll<ST>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
    T31): EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31)> {
    type Output =
        Grouped<And<<T as EqAll<ST>>::Output,
        <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
        T30, T31) as
        EqAll<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
        ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
        ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31)>>::Output>>;
    fn eq_all(self,
        rhs:
            (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
            ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
            ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31))
        -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
                T27, T28, T29, T30, T31) = self;
        let (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
                ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
                ST22, ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31) =
            rhs;
        T.eq_all(ST).and((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24,
                    T25, T26, T27, T28, T29, T30,
                    T31).eq_all((ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21, ST22, ST23, ST24, ST25, ST26, ST27, ST28, ST29,
                    ST30, ST31)))
    }
}crate::for_each_tuple!(impl_eq_all_for_all_tuples);