Skip to main content

stellar_xdr/generated/
ledger_close_meta.rs

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