Skip to main content

prost_more/
lib.rs

1#![allow(non_snake_case)]
2
3#[cfg(feature = "0_14")]
4pub use prost_0_14::{bytes::Buf, DecodeError, Message};
5
6#[cfg(feature = "0_13")]
7pub use prost_0_13::{bytes::Buf, DecodeError, Message};
8
9#[cfg(feature = "0_12")]
10pub use prost_0_12::{bytes::Buf, DecodeError, Message};
11
12#[cfg(feature = "0_11")]
13pub use prost_0_11::{bytes::Buf, DecodeError, Message};
14
15#[cfg(feature = "0_10")]
16pub use prost_0_10::{bytes::Buf, DecodeError, Message};
17
18pub trait MessageExt: Send + Sync {
19    fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>
20    where
21        Self: Default;
22}
23
24// impl<T1, T2> MessageExt for (T1, T2)
25// where
26//     T1: Message + Default + Send + Sync,
27//     T2: Message + Default + Send + Sync,
28// {
29//     fn decode_length_delimited(mut buf: impl Buf) -> Result<Self, DecodeError> {
30//         let t1 = T1::decode_length_delimited(&mut buf)?;
31
32//         let t2 = T2::decode_length_delimited(&mut buf)?;
33
34//         Ok((t1, t2))
35//     }
36// }
37
38
39
40// 使用宏为不同大小的元组实现MessageExt
41macro_rules! impl_message_ext_for_tuple {
42    ($($T:ident),*) => {
43        impl<$($T),*> MessageExt for ($($T),*)
44        where
45            $($T: Message + Default + Send + Sync,)*
46        {
47            fn decode_length_delimited(mut buf: impl Buf) -> Result<Self, DecodeError> {
48                $(
49                    let $T = $T::decode_length_delimited(&mut buf)?;
50                )*
51                Ok(($($T),*))
52            }
53        }
54    };
55}
56
57// 为2到17元组生成实现
58impl_message_ext_for_tuple!(T1, T2);
59impl_message_ext_for_tuple!(T1, T2, T3);
60impl_message_ext_for_tuple!(T1, T2, T3, T4);
61impl_message_ext_for_tuple!(T1, T2, T3, T4, T5);
62impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6);
63impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6, T7);
64impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8);
65impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9);
66impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10);
67impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11);
68impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12);
69impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13);
70impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14);
71impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15);
72impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16);
73impl_message_ext_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17);