stellar_xdr/generated/
bucket_entry.rs1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4#[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}