Skip to main content

stellar_xdr/generated/
ledger_entry_data.rs

1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4/// LedgerEntryData is an XDR NestedUnion defined as:
5///
6/// ```text
7/// union switch (LedgerEntryType type)
8///     {
9///     case ACCOUNT:
10///         AccountEntry account;
11///     case TRUSTLINE:
12///         TrustLineEntry trustLine;
13///     case OFFER:
14///         OfferEntry offer;
15///     case DATA:
16///         DataEntry data;
17///     case CLAIMABLE_BALANCE:
18///         ClaimableBalanceEntry claimableBalance;
19///     case LIQUIDITY_POOL:
20///         LiquidityPoolEntry liquidityPool;
21///     case CONTRACT_DATA:
22///         ContractDataEntry contractData;
23///     case CONTRACT_CODE:
24///         ContractCodeEntry contractCode;
25///     case CONFIG_SETTING:
26///         ConfigSettingEntry configSetting;
27///     case TTL:
28///         TTLEntry ttl;
29///     }
30/// ```
31///
32// union with discriminant LedgerEntryType
33#[cfg_attr(feature = "serde", cfg_eval::cfg_eval)]
34#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36#[cfg_attr(
37    all(feature = "serde", feature = "alloc"),
38    serde_with::serde_as,
39    derive(serde::Serialize, serde::Deserialize),
40    serde(rename_all = "snake_case")
41)]
42#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
43#[allow(clippy::large_enum_variant)]
44pub enum LedgerEntryData {
45    Account(AccountEntry),
46    Trustline(TrustLineEntry),
47    Offer(OfferEntry),
48    Data(DataEntry),
49    ClaimableBalance(ClaimableBalanceEntry),
50    LiquidityPool(LiquidityPoolEntry),
51    ContractData(ContractDataEntry),
52    ContractCode(ContractCodeEntry),
53    ConfigSetting(ConfigSettingEntry),
54    Ttl(TtlEntry),
55}
56
57#[cfg(feature = "alloc")]
58impl Default for LedgerEntryData {
59    fn default() -> Self {
60        Self::Account(AccountEntry::default())
61    }
62}
63
64impl LedgerEntryData {
65    const _VARIANTS: &[LedgerEntryType] = &[
66        LedgerEntryType::Account,
67        LedgerEntryType::Trustline,
68        LedgerEntryType::Offer,
69        LedgerEntryType::Data,
70        LedgerEntryType::ClaimableBalance,
71        LedgerEntryType::LiquidityPool,
72        LedgerEntryType::ContractData,
73        LedgerEntryType::ContractCode,
74        LedgerEntryType::ConfigSetting,
75        LedgerEntryType::Ttl,
76    ];
77    pub const VARIANTS: [LedgerEntryType; Self::_VARIANTS.len()] = {
78        let mut arr = [Self::_VARIANTS[0]; Self::_VARIANTS.len()];
79        let mut i = 1;
80        while i < Self::_VARIANTS.len() {
81            arr[i] = Self::_VARIANTS[i];
82            i += 1;
83        }
84        arr
85    };
86    const _VARIANTS_STR: &[&str] = &[
87        "Account",
88        "Trustline",
89        "Offer",
90        "Data",
91        "ClaimableBalance",
92        "LiquidityPool",
93        "ContractData",
94        "ContractCode",
95        "ConfigSetting",
96        "Ttl",
97    ];
98    pub const VARIANTS_STR: [&'static str; Self::_VARIANTS_STR.len()] = {
99        let mut arr = [Self::_VARIANTS_STR[0]; Self::_VARIANTS_STR.len()];
100        let mut i = 1;
101        while i < Self::_VARIANTS_STR.len() {
102            arr[i] = Self::_VARIANTS_STR[i];
103            i += 1;
104        }
105        arr
106    };
107
108    #[must_use]
109    pub const fn name(&self) -> &'static str {
110        match self {
111            Self::Account(_) => "Account",
112            Self::Trustline(_) => "Trustline",
113            Self::Offer(_) => "Offer",
114            Self::Data(_) => "Data",
115            Self::ClaimableBalance(_) => "ClaimableBalance",
116            Self::LiquidityPool(_) => "LiquidityPool",
117            Self::ContractData(_) => "ContractData",
118            Self::ContractCode(_) => "ContractCode",
119            Self::ConfigSetting(_) => "ConfigSetting",
120            Self::Ttl(_) => "Ttl",
121        }
122    }
123
124    #[must_use]
125    pub const fn discriminant(&self) -> LedgerEntryType {
126        #[allow(clippy::match_same_arms)]
127        match self {
128            Self::Account(_) => LedgerEntryType::Account,
129            Self::Trustline(_) => LedgerEntryType::Trustline,
130            Self::Offer(_) => LedgerEntryType::Offer,
131            Self::Data(_) => LedgerEntryType::Data,
132            Self::ClaimableBalance(_) => LedgerEntryType::ClaimableBalance,
133            Self::LiquidityPool(_) => LedgerEntryType::LiquidityPool,
134            Self::ContractData(_) => LedgerEntryType::ContractData,
135            Self::ContractCode(_) => LedgerEntryType::ContractCode,
136            Self::ConfigSetting(_) => LedgerEntryType::ConfigSetting,
137            Self::Ttl(_) => LedgerEntryType::Ttl,
138        }
139    }
140
141    #[must_use]
142    pub const fn variants() -> [LedgerEntryType; Self::_VARIANTS.len()] {
143        Self::VARIANTS
144    }
145}
146
147impl Name for LedgerEntryData {
148    #[must_use]
149    fn name(&self) -> &'static str {
150        Self::name(self)
151    }
152}
153
154impl Discriminant<LedgerEntryType> for LedgerEntryData {
155    #[must_use]
156    fn discriminant(&self) -> LedgerEntryType {
157        Self::discriminant(self)
158    }
159}
160
161impl Variants<LedgerEntryType> for LedgerEntryData {
162    fn variants() -> slice::Iter<'static, LedgerEntryType> {
163        Self::VARIANTS.iter()
164    }
165}
166
167impl Union<LedgerEntryType> for LedgerEntryData {}
168
169impl ReadXdr for LedgerEntryData {
170    #[cfg(feature = "std")]
171    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
172        r.with_limited_depth(|r| {
173            let dv: LedgerEntryType = <LedgerEntryType as ReadXdr>::read_xdr(r)?;
174            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
175            let v = match dv {
176                LedgerEntryType::Account => Self::Account(AccountEntry::read_xdr(r)?),
177                LedgerEntryType::Trustline => Self::Trustline(TrustLineEntry::read_xdr(r)?),
178                LedgerEntryType::Offer => Self::Offer(OfferEntry::read_xdr(r)?),
179                LedgerEntryType::Data => Self::Data(DataEntry::read_xdr(r)?),
180                LedgerEntryType::ClaimableBalance => {
181                    Self::ClaimableBalance(ClaimableBalanceEntry::read_xdr(r)?)
182                }
183                LedgerEntryType::LiquidityPool => {
184                    Self::LiquidityPool(LiquidityPoolEntry::read_xdr(r)?)
185                }
186                LedgerEntryType::ContractData => {
187                    Self::ContractData(ContractDataEntry::read_xdr(r)?)
188                }
189                LedgerEntryType::ContractCode => {
190                    Self::ContractCode(ContractCodeEntry::read_xdr(r)?)
191                }
192                LedgerEntryType::ConfigSetting => {
193                    Self::ConfigSetting(ConfigSettingEntry::read_xdr(r)?)
194                }
195                LedgerEntryType::Ttl => Self::Ttl(TtlEntry::read_xdr(r)?),
196                #[allow(unreachable_patterns)]
197                _ => return Err(Error::Invalid),
198            };
199            Ok(v)
200        })
201    }
202}
203
204impl WriteXdr for LedgerEntryData {
205    #[cfg(feature = "std")]
206    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
207        w.with_limited_depth(|w| {
208            self.discriminant().write_xdr(w)?;
209            #[allow(clippy::match_same_arms)]
210            match self {
211                Self::Account(v) => v.write_xdr(w)?,
212                Self::Trustline(v) => v.write_xdr(w)?,
213                Self::Offer(v) => v.write_xdr(w)?,
214                Self::Data(v) => v.write_xdr(w)?,
215                Self::ClaimableBalance(v) => v.write_xdr(w)?,
216                Self::LiquidityPool(v) => v.write_xdr(w)?,
217                Self::ContractData(v) => v.write_xdr(w)?,
218                Self::ContractCode(v) => v.write_xdr(w)?,
219                Self::ConfigSetting(v) => v.write_xdr(w)?,
220                Self::Ttl(v) => v.write_xdr(w)?,
221            };
222            Ok(())
223        })
224    }
225}