simplicity/
macros.rs

1// SPDX-License-Identifier: CC0-1.0
2
3#[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}