Skip to main content

stellar_xdr/generated/
sc_spec_udt_union_case_v0.rs

1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4/// ScSpecUdtUnionCaseV0 is an XDR Union defined as:
5///
6/// ```text
7/// union SCSpecUDTUnionCaseV0 switch (SCSpecUDTUnionCaseV0Kind kind)
8/// {
9/// case SC_SPEC_UDT_UNION_CASE_VOID_V0:
10///     SCSpecUDTUnionCaseVoidV0 voidCase;
11/// case SC_SPEC_UDT_UNION_CASE_TUPLE_V0:
12///     SCSpecUDTUnionCaseTupleV0 tupleCase;
13/// };
14/// ```
15///
16// union with discriminant ScSpecUdtUnionCaseV0Kind
17#[cfg_attr(feature = "serde", cfg_eval::cfg_eval)]
18#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20#[cfg_attr(
21    all(feature = "serde", feature = "alloc"),
22    serde_with::serde_as,
23    derive(serde::Serialize, serde::Deserialize),
24    serde(rename_all = "snake_case")
25)]
26#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27#[allow(clippy::large_enum_variant)]
28pub enum ScSpecUdtUnionCaseV0 {
29    VoidV0(ScSpecUdtUnionCaseVoidV0),
30    TupleV0(ScSpecUdtUnionCaseTupleV0),
31}
32
33#[cfg(feature = "alloc")]
34impl Default for ScSpecUdtUnionCaseV0 {
35    fn default() -> Self {
36        Self::VoidV0(ScSpecUdtUnionCaseVoidV0::default())
37    }
38}
39
40impl ScSpecUdtUnionCaseV0 {
41    const _VARIANTS: &[ScSpecUdtUnionCaseV0Kind] = &[
42        ScSpecUdtUnionCaseV0Kind::VoidV0,
43        ScSpecUdtUnionCaseV0Kind::TupleV0,
44    ];
45    pub const VARIANTS: [ScSpecUdtUnionCaseV0Kind; Self::_VARIANTS.len()] = {
46        let mut arr = [Self::_VARIANTS[0]; Self::_VARIANTS.len()];
47        let mut i = 1;
48        while i < Self::_VARIANTS.len() {
49            arr[i] = Self::_VARIANTS[i];
50            i += 1;
51        }
52        arr
53    };
54    const _VARIANTS_STR: &[&str] = &["VoidV0", "TupleV0"];
55    pub const VARIANTS_STR: [&'static str; Self::_VARIANTS_STR.len()] = {
56        let mut arr = [Self::_VARIANTS_STR[0]; Self::_VARIANTS_STR.len()];
57        let mut i = 1;
58        while i < Self::_VARIANTS_STR.len() {
59            arr[i] = Self::_VARIANTS_STR[i];
60            i += 1;
61        }
62        arr
63    };
64
65    #[must_use]
66    pub const fn name(&self) -> &'static str {
67        match self {
68            Self::VoidV0(_) => "VoidV0",
69            Self::TupleV0(_) => "TupleV0",
70        }
71    }
72
73    #[must_use]
74    pub const fn discriminant(&self) -> ScSpecUdtUnionCaseV0Kind {
75        #[allow(clippy::match_same_arms)]
76        match self {
77            Self::VoidV0(_) => ScSpecUdtUnionCaseV0Kind::VoidV0,
78            Self::TupleV0(_) => ScSpecUdtUnionCaseV0Kind::TupleV0,
79        }
80    }
81
82    #[must_use]
83    pub const fn variants() -> [ScSpecUdtUnionCaseV0Kind; Self::_VARIANTS.len()] {
84        Self::VARIANTS
85    }
86}
87
88impl Name for ScSpecUdtUnionCaseV0 {
89    #[must_use]
90    fn name(&self) -> &'static str {
91        Self::name(self)
92    }
93}
94
95impl Discriminant<ScSpecUdtUnionCaseV0Kind> for ScSpecUdtUnionCaseV0 {
96    #[must_use]
97    fn discriminant(&self) -> ScSpecUdtUnionCaseV0Kind {
98        Self::discriminant(self)
99    }
100}
101
102impl Variants<ScSpecUdtUnionCaseV0Kind> for ScSpecUdtUnionCaseV0 {
103    fn variants() -> slice::Iter<'static, ScSpecUdtUnionCaseV0Kind> {
104        Self::VARIANTS.iter()
105    }
106}
107
108impl Union<ScSpecUdtUnionCaseV0Kind> for ScSpecUdtUnionCaseV0 {}
109
110impl ReadXdr for ScSpecUdtUnionCaseV0 {
111    #[cfg(feature = "std")]
112    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
113        r.with_limited_depth(|r| {
114            let dv: ScSpecUdtUnionCaseV0Kind = <ScSpecUdtUnionCaseV0Kind as ReadXdr>::read_xdr(r)?;
115            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
116            let v = match dv {
117                ScSpecUdtUnionCaseV0Kind::VoidV0 => {
118                    Self::VoidV0(ScSpecUdtUnionCaseVoidV0::read_xdr(r)?)
119                }
120                ScSpecUdtUnionCaseV0Kind::TupleV0 => {
121                    Self::TupleV0(ScSpecUdtUnionCaseTupleV0::read_xdr(r)?)
122                }
123                #[allow(unreachable_patterns)]
124                _ => return Err(Error::Invalid),
125            };
126            Ok(v)
127        })
128    }
129}
130
131impl WriteXdr for ScSpecUdtUnionCaseV0 {
132    #[cfg(feature = "std")]
133    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
134        w.with_limited_depth(|w| {
135            self.discriminant().write_xdr(w)?;
136            #[allow(clippy::match_same_arms)]
137            match self {
138                Self::VoidV0(v) => v.write_xdr(w)?,
139                Self::TupleV0(v) => v.write_xdr(w)?,
140            };
141            Ok(())
142        })
143    }
144}