1use std::sync::Arc;
2
3use crate::message::Message;
4
5impl<T> Message for Option<T>
6where
7 Self: Send + 'static,
8 T: Message,
9{
10}
11impl<T, E> Message for Result<T, E>
12where
13 Self: Send + 'static,
14 T: Message,
15 E: Message,
16{
17}
18impl<T> Message for Arc<T> where T: Message + Sync {}
19impl<T> Message for Vec<T> where T: Message {}
20
21macro_rules! impl_message_for_primitives {
22 ( $( $t:ty ),+ $(,)? ) => {
23 $(
24 impl Message for $t {}
25 )+
26 };
27}
28
29impl_message_for_primitives! {
30 u8, i8, u16, i16, u32, i32, u64, i64, u128, i128, usize, isize,
31 f32, f64,
32 bool, char,
33 (),
34 String,
35 std::time::Duration,
36 &'static str,
37}
38
39macro_rules! impl_message_for_tuples {
40 ($( $len:literal => ( $( $T:ident ),+ ) ),+ $(,)?) => {
41 $(
42 impl<$( $T ),+> Message for ( $( $T, )+ )
43 where
44 $( $T: Message ),+
45 {}
46 )+
47 };
48}
49
50impl_message_for_tuples! {
51 1 => (T0),
52 2 => (T0, T1),
53 3 => (T0, T1, T2),
54 4 => (T0, T1, T2, T3),
55 5 => (T0, T1, T2, T3, T4),
56 6 => (T0, T1, T2, T3, T4, T5),
57 7 => (T0, T1, T2, T3, T4, T5, T6),
58 8 => (T0, T1, T2, T3, T4, T5, T6, T7),
59 9 => (T0, T1, T2, T3, T4, T5, T6, T7, T8),
60 10 => (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9),
61 11 => (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10),
62 12 => (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11),
63}