Skip to main content

stellar_xdr/generated/
trust_line_entry_ext.rs

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