1#[macro_export]
4macro_rules! decode_bits {
5 ($bits:ident, {}) => {
6 Err($crate::decode::Error::InvalidJet.into())
7 };
8 ($bits:ident, {$jet:path}) => {
9 Ok($jet)
10 };
11 ($bits:ident, { 0 => $false_branch:tt, 1 => $true_branch:tt }) => {
12 match $bits.next() {
13 None => Err($crate::decode::Error::EndOfStream.into()),
14 Some(false) => decode_bits!($bits, $false_branch),
15 Some(true) => decode_bits!($bits, $true_branch),
16 }
17 };
18}
19
20#[macro_export]
21macro_rules! impl_serde_string {
22 ($name:ident) => {
23 #[cfg(feature = "serde")]
24 impl serde::Serialize for $name {
25 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
26 where
27 S: serde::Serializer,
28 {
29 serializer.serialize_str(&self.to_string())
30 }
31 }
32
33 #[cfg(feature = "serde")]
34 impl<'de> serde::Deserialize<'de> for $name {
35 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
36 where
37 D: serde::Deserializer<'de>,
38 {
39 let s = String::deserialize(deserializer)?;
40 <$name as std::str::FromStr>::from_str(&s).map_err(serde::de::Error::custom)
41 }
42 }
43 };
44}