Skip to main content

stellar_xdr/generated/
ledger_entry_change.rs

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