Skip to main content

stellar_xdr/generated/
bucket_entry.rs

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