gmsol_decode/value/
untagged_enum.rs1#[macro_export]
3macro_rules! untagged {
4 ($name:ident, [$($decoded:ty),+]) => {
5 $crate::paste::paste! {
6 #[doc = "A untagged decodable enum `" $name "`."]
7 #[allow(clippy::large_enum_variant)]
8 #[derive(Debug)]
9 pub enum $name {
10 $(
11 #[doc = "Variant `" $decoded "`."]
12 [<$decoded>]($decoded)
13 ),+
14 }
15
16 impl $crate::Decode for $name {
17 #[allow(unused_variables)]
18 fn decode<D: $crate::Decoder>(decoder: D) -> Result<Self, $crate::DecodeError> {
19 $(
20 match $decoded::decode(&decoder) {
21 Ok(decoded) => {
22 return Ok($name::[<$decoded>](decoded));
23 },
24 Err(err) => {
25 $crate::tracing::trace!(%err, "try variant `{}::{}`, failed", stringify!($name), stringify!($decoded));
26 }
27 }
28 );+
29 Err($crate::DecodeError::custom("no matching variant found"))
30 }
31 }
32 }
33 };
34}