axum_limit/
key.rs

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);