1use crate::Key;
2use http::{Method, Uri, Version};
3
4impl Key for Uri {
5 type Extractor = Uri;
6
7 fn from_extractor(extractor: &Self::Extractor) -> Self {
8 extractor.clone()
9 }
10}
11
12impl Key for Method {
13 type Extractor = Method;
14
15 fn from_extractor(extractor: &Self::Extractor) -> Self {
16 extractor.clone()
17 }
18}
19
20impl Key for Version {
21 type Extractor = Version;
22
23 fn from_extractor(extractor: &Self::Extractor) -> Self {
24 *extractor
25 }
26}
27
28macro_rules! impl_key_for_tuple {
29 ($($name:ident),+) => {
30 #[allow(non_snake_case)]
31 impl<$($name),+> Key for ($($name,)+)
32 where
33 $($name: Key,)+
34 {
35 type Extractor = ($($name::Extractor,)+);
36
37 fn from_extractor(($($name,)+): &Self::Extractor) -> Self {
38 ($($name::from_extractor($name),)+)
39 }
40 }
41 }
42}
43
44impl_key_for_tuple!(T0);
45impl_key_for_tuple!(T0, T1);
46impl_key_for_tuple!(T0, T1, T2);
47impl_key_for_tuple!(T0, T1, T2, T3);
48impl_key_for_tuple!(T0, T1, T2, T3, T4);
49impl_key_for_tuple!(T0, T1, T2, T3, T4, T5);
50impl_key_for_tuple!(T0, T1, T2, T3, T4, T5, T6);
51impl_key_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7);
52impl_key_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8);
53impl_key_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9);
54impl_key_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10);
55impl_key_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11);