1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
use crate::{Dummy, Fake, Faker};
use rand::Rng;

macro_rules! tuple_impl {
    ($(
        $Tuple:ident {
            $(($idx:tt) $U:ident -> $T:ident)+
        }
    )+) => {
        $(
            impl<$($T:Dummy<Faker>),+> Dummy<Faker> for ($($T,)+) {
                #[inline]
                fn dummy_with_rng<R: Rng + ?Sized>(config: &Faker, rng: &mut R) -> Self {
                    ($({ let x: $T = config.fake_with_rng(rng); x},)+)
                }
            }

            impl<$($U, $T:Dummy<$U>),+> Dummy<($($U,)+)> for ($($T,)+) {
                #[inline]
                fn dummy_with_rng<R: Rng + ?Sized>(config: &($($U,)+), rng: &mut R) -> Self {
                    ($({ let x: $T = config.$idx.fake_with_rng(rng); x},)+)
                }
            }
        )+
    }
}

tuple_impl! {
    Tuple1 {
        (0) T0 -> A
    }
    Tuple2 {
        (0) T0 -> A
        (1) T1 -> B
    }
    Tuple3 {
        (0) T0 -> A
        (1) T1 -> B
        (2) T2 -> C
    }
    Tuple4 {
        (0) T0 -> A
        (1) T1 -> B
        (2) T2 -> C
        (3) T3 -> D
    }
    Tuple5 {
        (0) T0 -> A
        (1) T1 -> B
        (2) T2 -> C
        (3) T3 -> D
        (4) T4 -> E
    }
    Tuple6 {
        (0) T0 -> A
        (1) T1 -> B
        (2) T2 -> C
        (3) T3 -> D
        (4) T4 -> E
        (5) T5 -> F
    }
    Tuple7 {
        (0) T0 -> A
        (1) T1 -> B
        (2) T2 -> C
        (3) T3 -> D
        (4) T4 -> E
        (5) T5 -> F
        (6) T6 -> G
    }
    Tuple8 {
        (0) T0 -> A
        (1) T1 -> B
        (2) T2 -> C
        (3) T3 -> D
        (4) T4 -> E
        (5) T5 -> F
        (6) T6 -> G
        (7) T7 -> H
    }
    Tuple9 {
        (0) T0 -> A
        (1) T1 -> B
        (2) T2 -> C
        (3) T3 -> D
        (4) T4 -> E
        (5) T5 -> F
        (6) T6 -> G
        (7) T7 -> H
        (8) T8 -> I
    }
    Tuple10 {
        (0) T0 -> A
        (1) T1 -> B
        (2) T2 -> C
        (3) T3 -> D
        (4) T4 -> E
        (5) T5 -> F
        (6) T6 -> G
        (7) T7 -> H
        (8) T8 -> I
        (9) T9 -> J
    }
    Tuple11 {
        (0) T0 -> A
        (1) T1 -> B
        (2) T2 -> C
        (3) T3 -> D
        (4) T4 -> E
        (5) T5 -> F
        (6) T6 -> G
        (7) T7 -> H
        (8) T8 -> I
        (9) T9 -> J
        (10) T10 -> K
    }
    Tuple12 {
        (0) T0 -> A
        (1) T1 -> B
        (2) T2 -> C
        (3) T3 -> D
        (4) T4 -> E
        (5) T5 -> F
        (6) T6 -> G
        (7) T7 -> H
        (8) T8 -> I
        (9) T9 -> J
        (10) T10 -> K
        (11) T11 -> L
    }
}