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