Skip to main content

stellar_xdr/generated/
ledger_upgrade.rs

1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4/// LedgerUpgrade is an XDR Union defined as:
5///
6/// ```text
7/// union LedgerUpgrade switch (LedgerUpgradeType type)
8/// {
9/// case LEDGER_UPGRADE_VERSION:
10///     uint32 newLedgerVersion; // update ledgerVersion
11/// case LEDGER_UPGRADE_BASE_FEE:
12///     uint32 newBaseFee; // update baseFee
13/// case LEDGER_UPGRADE_MAX_TX_SET_SIZE:
14///     uint32 newMaxTxSetSize; // update maxTxSetSize
15/// case LEDGER_UPGRADE_BASE_RESERVE:
16///     uint32 newBaseReserve; // update baseReserve
17/// case LEDGER_UPGRADE_FLAGS:
18///     uint32 newFlags; // update flags
19/// case LEDGER_UPGRADE_CONFIG:
20///     // Update arbitrary `ConfigSetting` entries identified by the key.
21///     ConfigUpgradeSetKey newConfig;
22/// case LEDGER_UPGRADE_MAX_SOROBAN_TX_SET_SIZE:
23///     // Update ConfigSettingContractExecutionLanesV0.ledgerMaxTxCount without
24///     // using `LEDGER_UPGRADE_CONFIG`.
25///     uint32 newMaxSorobanTxSetSize;
26/// };
27/// ```
28///
29// union with discriminant LedgerUpgradeType
30#[cfg_attr(feature = "serde", cfg_eval::cfg_eval)]
31#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33#[cfg_attr(
34    all(feature = "serde", feature = "alloc"),
35    serde_with::serde_as,
36    derive(serde::Serialize, serde::Deserialize),
37    serde(rename_all = "snake_case")
38)]
39#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
40#[allow(clippy::large_enum_variant)]
41pub enum LedgerUpgrade {
42    Version(u32),
43    BaseFee(u32),
44    MaxTxSetSize(u32),
45    BaseReserve(u32),
46    Flags(u32),
47    Config(ConfigUpgradeSetKey),
48    MaxSorobanTxSetSize(u32),
49}
50
51#[cfg(feature = "alloc")]
52impl Default for LedgerUpgrade {
53    fn default() -> Self {
54        Self::Version(u32::default())
55    }
56}
57
58impl LedgerUpgrade {
59    const _VARIANTS: &[LedgerUpgradeType] = &[
60        LedgerUpgradeType::Version,
61        LedgerUpgradeType::BaseFee,
62        LedgerUpgradeType::MaxTxSetSize,
63        LedgerUpgradeType::BaseReserve,
64        LedgerUpgradeType::Flags,
65        LedgerUpgradeType::Config,
66        LedgerUpgradeType::MaxSorobanTxSetSize,
67    ];
68    pub const VARIANTS: [LedgerUpgradeType; Self::_VARIANTS.len()] = {
69        let mut arr = [Self::_VARIANTS[0]; Self::_VARIANTS.len()];
70        let mut i = 1;
71        while i < Self::_VARIANTS.len() {
72            arr[i] = Self::_VARIANTS[i];
73            i += 1;
74        }
75        arr
76    };
77    const _VARIANTS_STR: &[&str] = &[
78        "Version",
79        "BaseFee",
80        "MaxTxSetSize",
81        "BaseReserve",
82        "Flags",
83        "Config",
84        "MaxSorobanTxSetSize",
85    ];
86    pub const VARIANTS_STR: [&'static str; Self::_VARIANTS_STR.len()] = {
87        let mut arr = [Self::_VARIANTS_STR[0]; Self::_VARIANTS_STR.len()];
88        let mut i = 1;
89        while i < Self::_VARIANTS_STR.len() {
90            arr[i] = Self::_VARIANTS_STR[i];
91            i += 1;
92        }
93        arr
94    };
95
96    #[must_use]
97    pub const fn name(&self) -> &'static str {
98        match self {
99            Self::Version(_) => "Version",
100            Self::BaseFee(_) => "BaseFee",
101            Self::MaxTxSetSize(_) => "MaxTxSetSize",
102            Self::BaseReserve(_) => "BaseReserve",
103            Self::Flags(_) => "Flags",
104            Self::Config(_) => "Config",
105            Self::MaxSorobanTxSetSize(_) => "MaxSorobanTxSetSize",
106        }
107    }
108
109    #[must_use]
110    pub const fn discriminant(&self) -> LedgerUpgradeType {
111        #[allow(clippy::match_same_arms)]
112        match self {
113            Self::Version(_) => LedgerUpgradeType::Version,
114            Self::BaseFee(_) => LedgerUpgradeType::BaseFee,
115            Self::MaxTxSetSize(_) => LedgerUpgradeType::MaxTxSetSize,
116            Self::BaseReserve(_) => LedgerUpgradeType::BaseReserve,
117            Self::Flags(_) => LedgerUpgradeType::Flags,
118            Self::Config(_) => LedgerUpgradeType::Config,
119            Self::MaxSorobanTxSetSize(_) => LedgerUpgradeType::MaxSorobanTxSetSize,
120        }
121    }
122
123    #[must_use]
124    pub const fn variants() -> [LedgerUpgradeType; Self::_VARIANTS.len()] {
125        Self::VARIANTS
126    }
127}
128
129impl Name for LedgerUpgrade {
130    #[must_use]
131    fn name(&self) -> &'static str {
132        Self::name(self)
133    }
134}
135
136impl Discriminant<LedgerUpgradeType> for LedgerUpgrade {
137    #[must_use]
138    fn discriminant(&self) -> LedgerUpgradeType {
139        Self::discriminant(self)
140    }
141}
142
143impl Variants<LedgerUpgradeType> for LedgerUpgrade {
144    fn variants() -> slice::Iter<'static, LedgerUpgradeType> {
145        Self::VARIANTS.iter()
146    }
147}
148
149impl Union<LedgerUpgradeType> for LedgerUpgrade {}
150
151impl ReadXdr for LedgerUpgrade {
152    #[cfg(feature = "std")]
153    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
154        r.with_limited_depth(|r| {
155            let dv: LedgerUpgradeType = <LedgerUpgradeType as ReadXdr>::read_xdr(r)?;
156            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
157            let v = match dv {
158                LedgerUpgradeType::Version => Self::Version(u32::read_xdr(r)?),
159                LedgerUpgradeType::BaseFee => Self::BaseFee(u32::read_xdr(r)?),
160                LedgerUpgradeType::MaxTxSetSize => Self::MaxTxSetSize(u32::read_xdr(r)?),
161                LedgerUpgradeType::BaseReserve => Self::BaseReserve(u32::read_xdr(r)?),
162                LedgerUpgradeType::Flags => Self::Flags(u32::read_xdr(r)?),
163                LedgerUpgradeType::Config => Self::Config(ConfigUpgradeSetKey::read_xdr(r)?),
164                LedgerUpgradeType::MaxSorobanTxSetSize => {
165                    Self::MaxSorobanTxSetSize(u32::read_xdr(r)?)
166                }
167                #[allow(unreachable_patterns)]
168                _ => return Err(Error::Invalid),
169            };
170            Ok(v)
171        })
172    }
173}
174
175impl WriteXdr for LedgerUpgrade {
176    #[cfg(feature = "std")]
177    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
178        w.with_limited_depth(|w| {
179            self.discriminant().write_xdr(w)?;
180            #[allow(clippy::match_same_arms)]
181            match self {
182                Self::Version(v) => v.write_xdr(w)?,
183                Self::BaseFee(v) => v.write_xdr(w)?,
184                Self::MaxTxSetSize(v) => v.write_xdr(w)?,
185                Self::BaseReserve(v) => v.write_xdr(w)?,
186                Self::Flags(v) => v.write_xdr(w)?,
187                Self::Config(v) => v.write_xdr(w)?,
188                Self::MaxSorobanTxSetSize(v) => v.write_xdr(w)?,
189            };
190            Ok(())
191        })
192    }
193}