1 use crate::Layer; 2 3 impl<S> Layer<S> for () { 4 type Service = S; 5 layer(&self, service: S) -> Self::Service6 fn layer(&self, service: S) -> Self::Service { 7 service 8 } 9 } 10 11 impl<S, L1> Layer<S> for (L1,) 12 where 13 L1: Layer<S>, 14 { 15 type Service = L1::Service; 16 layer(&self, service: S) -> Self::Service17 fn layer(&self, service: S) -> Self::Service { 18 let (l1,) = self; 19 l1.layer(service) 20 } 21 } 22 23 impl<S, L1, L2> Layer<S> for (L1, L2) 24 where 25 L1: Layer<L2::Service>, 26 L2: Layer<S>, 27 { 28 type Service = L1::Service; 29 layer(&self, service: S) -> Self::Service30 fn layer(&self, service: S) -> Self::Service { 31 let (l1, l2) = self; 32 l1.layer(l2.layer(service)) 33 } 34 } 35 36 impl<S, L1, L2, L3> Layer<S> for (L1, L2, L3) 37 where 38 L1: Layer<L2::Service>, 39 L2: Layer<L3::Service>, 40 L3: Layer<S>, 41 { 42 type Service = L1::Service; 43 layer(&self, service: S) -> Self::Service44 fn layer(&self, service: S) -> Self::Service { 45 let (l1, l2, l3) = self; 46 l1.layer((l2, l3).layer(service)) 47 } 48 } 49 50 impl<S, L1, L2, L3, L4> Layer<S> for (L1, L2, L3, L4) 51 where 52 L1: Layer<L2::Service>, 53 L2: Layer<L3::Service>, 54 L3: Layer<L4::Service>, 55 L4: Layer<S>, 56 { 57 type Service = L1::Service; 58 layer(&self, service: S) -> Self::Service59 fn layer(&self, service: S) -> Self::Service { 60 let (l1, l2, l3, l4) = self; 61 l1.layer((l2, l3, l4).layer(service)) 62 } 63 } 64 65 impl<S, L1, L2, L3, L4, L5> Layer<S> for (L1, L2, L3, L4, L5) 66 where 67 L1: Layer<L2::Service>, 68 L2: Layer<L3::Service>, 69 L3: Layer<L4::Service>, 70 L4: Layer<L5::Service>, 71 L5: Layer<S>, 72 { 73 type Service = L1::Service; 74 layer(&self, service: S) -> Self::Service75 fn layer(&self, service: S) -> Self::Service { 76 let (l1, l2, l3, l4, l5) = self; 77 l1.layer((l2, l3, l4, l5).layer(service)) 78 } 79 } 80 81 impl<S, L1, L2, L3, L4, L5, L6> Layer<S> for (L1, L2, L3, L4, L5, L6) 82 where 83 L1: Layer<L2::Service>, 84 L2: Layer<L3::Service>, 85 L3: Layer<L4::Service>, 86 L4: Layer<L5::Service>, 87 L5: Layer<L6::Service>, 88 L6: Layer<S>, 89 { 90 type Service = L1::Service; 91 layer(&self, service: S) -> Self::Service92 fn layer(&self, service: S) -> Self::Service { 93 let (l1, l2, l3, l4, l5, l6) = self; 94 l1.layer((l2, l3, l4, l5, l6).layer(service)) 95 } 96 } 97 98 impl<S, L1, L2, L3, L4, L5, L6, L7> Layer<S> for (L1, L2, L3, L4, L5, L6, L7) 99 where 100 L1: Layer<L2::Service>, 101 L2: Layer<L3::Service>, 102 L3: Layer<L4::Service>, 103 L4: Layer<L5::Service>, 104 L5: Layer<L6::Service>, 105 L6: Layer<L7::Service>, 106 L7: Layer<S>, 107 { 108 type Service = L1::Service; 109 layer(&self, service: S) -> Self::Service110 fn layer(&self, service: S) -> Self::Service { 111 let (l1, l2, l3, l4, l5, l6, l7) = self; 112 l1.layer((l2, l3, l4, l5, l6, l7).layer(service)) 113 } 114 } 115 116 impl<S, L1, L2, L3, L4, L5, L6, L7, L8> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8) 117 where 118 L1: Layer<L2::Service>, 119 L2: Layer<L3::Service>, 120 L3: Layer<L4::Service>, 121 L4: Layer<L5::Service>, 122 L5: Layer<L6::Service>, 123 L6: Layer<L7::Service>, 124 L7: Layer<L8::Service>, 125 L8: Layer<S>, 126 { 127 type Service = L1::Service; 128 layer(&self, service: S) -> Self::Service129 fn layer(&self, service: S) -> Self::Service { 130 let (l1, l2, l3, l4, l5, l6, l7, l8) = self; 131 l1.layer((l2, l3, l4, l5, l6, l7, l8).layer(service)) 132 } 133 } 134 135 impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9) 136 where 137 L1: Layer<L2::Service>, 138 L2: Layer<L3::Service>, 139 L3: Layer<L4::Service>, 140 L4: Layer<L5::Service>, 141 L5: Layer<L6::Service>, 142 L6: Layer<L7::Service>, 143 L7: Layer<L8::Service>, 144 L8: Layer<L9::Service>, 145 L9: Layer<S>, 146 { 147 type Service = L1::Service; 148 layer(&self, service: S) -> Self::Service149 fn layer(&self, service: S) -> Self::Service { 150 let (l1, l2, l3, l4, l5, l6, l7, l8, l9) = self; 151 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9).layer(service)) 152 } 153 } 154 155 impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10> Layer<S> 156 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10) 157 where 158 L1: Layer<L2::Service>, 159 L2: Layer<L3::Service>, 160 L3: Layer<L4::Service>, 161 L4: Layer<L5::Service>, 162 L5: Layer<L6::Service>, 163 L6: Layer<L7::Service>, 164 L7: Layer<L8::Service>, 165 L8: Layer<L9::Service>, 166 L9: Layer<L10::Service>, 167 L10: Layer<S>, 168 { 169 type Service = L1::Service; 170 layer(&self, service: S) -> Self::Service171 fn layer(&self, service: S) -> Self::Service { 172 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10) = self; 173 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10).layer(service)) 174 } 175 } 176 177 impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11> Layer<S> 178 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11) 179 where 180 L1: Layer<L2::Service>, 181 L2: Layer<L3::Service>, 182 L3: Layer<L4::Service>, 183 L4: Layer<L5::Service>, 184 L5: Layer<L6::Service>, 185 L6: Layer<L7::Service>, 186 L7: Layer<L8::Service>, 187 L8: Layer<L9::Service>, 188 L9: Layer<L10::Service>, 189 L10: Layer<L11::Service>, 190 L11: Layer<S>, 191 { 192 type Service = L1::Service; 193 layer(&self, service: S) -> Self::Service194 fn layer(&self, service: S) -> Self::Service { 195 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11) = self; 196 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11).layer(service)) 197 } 198 } 199 200 impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12> Layer<S> 201 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12) 202 where 203 L1: Layer<L2::Service>, 204 L2: Layer<L3::Service>, 205 L3: Layer<L4::Service>, 206 L4: Layer<L5::Service>, 207 L5: Layer<L6::Service>, 208 L6: Layer<L7::Service>, 209 L7: Layer<L8::Service>, 210 L8: Layer<L9::Service>, 211 L9: Layer<L10::Service>, 212 L10: Layer<L11::Service>, 213 L11: Layer<L12::Service>, 214 L12: Layer<S>, 215 { 216 type Service = L1::Service; 217 layer(&self, service: S) -> Self::Service218 fn layer(&self, service: S) -> Self::Service { 219 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12) = self; 220 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12).layer(service)) 221 } 222 } 223 224 impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13> Layer<S> 225 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13) 226 where 227 L1: Layer<L2::Service>, 228 L2: Layer<L3::Service>, 229 L3: Layer<L4::Service>, 230 L4: Layer<L5::Service>, 231 L5: Layer<L6::Service>, 232 L6: Layer<L7::Service>, 233 L7: Layer<L8::Service>, 234 L8: Layer<L9::Service>, 235 L9: Layer<L10::Service>, 236 L10: Layer<L11::Service>, 237 L11: Layer<L12::Service>, 238 L12: Layer<L13::Service>, 239 L13: Layer<S>, 240 { 241 type Service = L1::Service; 242 layer(&self, service: S) -> Self::Service243 fn layer(&self, service: S) -> Self::Service { 244 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13) = self; 245 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13).layer(service)) 246 } 247 } 248 249 impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14> Layer<S> 250 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14) 251 where 252 L1: Layer<L2::Service>, 253 L2: Layer<L3::Service>, 254 L3: Layer<L4::Service>, 255 L4: Layer<L5::Service>, 256 L5: Layer<L6::Service>, 257 L6: Layer<L7::Service>, 258 L7: Layer<L8::Service>, 259 L8: Layer<L9::Service>, 260 L9: Layer<L10::Service>, 261 L10: Layer<L11::Service>, 262 L11: Layer<L12::Service>, 263 L12: Layer<L13::Service>, 264 L13: Layer<L14::Service>, 265 L14: Layer<S>, 266 { 267 type Service = L1::Service; 268 layer(&self, service: S) -> Self::Service269 fn layer(&self, service: S) -> Self::Service { 270 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14) = self; 271 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14).layer(service)) 272 } 273 } 274 275 #[rustfmt::skip] 276 impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15> Layer<S> 277 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15) 278 where 279 L1: Layer<L2::Service>, 280 L2: Layer<L3::Service>, 281 L3: Layer<L4::Service>, 282 L4: Layer<L5::Service>, 283 L5: Layer<L6::Service>, 284 L6: Layer<L7::Service>, 285 L7: Layer<L8::Service>, 286 L8: Layer<L9::Service>, 287 L9: Layer<L10::Service>, 288 L10: Layer<L11::Service>, 289 L11: Layer<L12::Service>, 290 L12: Layer<L13::Service>, 291 L13: Layer<L14::Service>, 292 L14: Layer<L15::Service>, 293 L15: Layer<S>, 294 { 295 type Service = L1::Service; 296 layer(&self, service: S) -> Self::Service297 fn layer(&self, service: S) -> Self::Service { 298 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15) = self; 299 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15).layer(service)) 300 } 301 } 302 303 #[rustfmt::skip] 304 impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16> Layer<S> 305 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16) 306 where 307 L1: Layer<L2::Service>, 308 L2: Layer<L3::Service>, 309 L3: Layer<L4::Service>, 310 L4: Layer<L5::Service>, 311 L5: Layer<L6::Service>, 312 L6: Layer<L7::Service>, 313 L7: Layer<L8::Service>, 314 L8: Layer<L9::Service>, 315 L9: Layer<L10::Service>, 316 L10: Layer<L11::Service>, 317 L11: Layer<L12::Service>, 318 L12: Layer<L13::Service>, 319 L13: Layer<L14::Service>, 320 L14: Layer<L15::Service>, 321 L15: Layer<L16::Service>, 322 L16: Layer<S>, 323 { 324 type Service = L1::Service; 325 layer(&self, service: S) -> Self::Service326 fn layer(&self, service: S) -> Self::Service { 327 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16) = self; 328 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16).layer(service)) 329 } 330 } 331