mm1_proto/message/
primitives.rs

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}