auto_delegate/
lib.rs

1#![no_std]
2
3
4pub use auto_delegate_impl::{delegate, Delegate};
5
6#[doc(hidden)]
7pub struct Delegates<A, B, C, D, E, F, G, H, I, J, K, L>(
8    pub Option<A>,
9    pub Option<B>,
10    pub Option<C>,
11    pub Option<D>,
12    pub Option<E>,
13    pub Option<F>,
14    pub Option<G>,
15    pub Option<H>,
16    pub Option<I>,
17    pub Option<J>,
18    pub Option<K>,
19    pub Option<L>,
20);
21
22macro_rules! expand_delegatable {
23    ($($g: tt), *) => {
24        #[doc(hidden)]
25        pub trait Delegatable<$(const $g: char = ' ',)*> {
26            type A;
27            type B;
28            type C;
29            type D;
30            type E;
31            type F;
32            type G;
33            type H;
34            type I;
35            type J;
36            type K;
37            type L;
38
39            fn delegate_by_owned(
40                self
41            ) -> Delegates<Self::A, Self::B, Self::C, Self::D, Self::E, Self::F, Self::G, Self::H, Self::I, Self::J, Self::K, Self::L>;
42
43            fn delegate_by_ref(
44                &self
45            ) -> Delegates<&Self::A, &Self::B, &Self::C, &Self::D, &Self::E, &Self::F, &Self::G, &Self::H, &Self::I, &Self::J, &Self::K, &Self::L>;
46
47            fn delegate_by_mut(
48                &mut self
49            ) -> Delegates<&mut Self::A, &mut Self::B, &mut Self::C, &mut Self::D, &mut Self::E, &mut Self::F, &mut Self::G, &mut Self::H, &mut Self::I, &mut Self::J, &mut Self::K, &mut Self::L>;
50        }
51    };
52}
53
54expand_delegatable!(
55    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD
56);