1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4#[cfg_attr(feature = "serde", cfg_eval::cfg_eval)]
38#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
39#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
40#[cfg_attr(
41 all(feature = "serde", feature = "alloc"),
42 serde_with::serde_as,
43 derive(serde::Serialize, serde::Deserialize),
44 serde(rename_all = "snake_case")
45)]
46#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
47#[allow(clippy::large_enum_variant)]
48pub enum TransactionResultResult {
49 TxFeeBumpInnerSuccess(InnerTransactionResultPair),
50 TxFeeBumpInnerFailed(InnerTransactionResultPair),
51 TxSuccess(VecM<OperationResult>),
52 TxFailed(VecM<OperationResult>),
53 TxTooEarly,
54 TxTooLate,
55 TxMissingOperation,
56 TxBadSeq,
57 TxBadAuth,
58 TxInsufficientBalance,
59 TxNoAccount,
60 TxInsufficientFee,
61 TxBadAuthExtra,
62 TxInternalError,
63 TxNotSupported,
64 TxBadSponsorship,
65 TxBadMinSeqAgeOrGap,
66 TxMalformed,
67 TxSorobanInvalid,
68 TxFrozenKeyAccessed,
69}
70
71#[cfg(feature = "alloc")]
72impl Default for TransactionResultResult {
73 fn default() -> Self {
74 Self::TxFeeBumpInnerSuccess(InnerTransactionResultPair::default())
75 }
76}
77
78impl TransactionResultResult {
79 const _VARIANTS: &[TransactionResultCode] = &[
80 TransactionResultCode::TxFeeBumpInnerSuccess,
81 TransactionResultCode::TxFeeBumpInnerFailed,
82 TransactionResultCode::TxSuccess,
83 TransactionResultCode::TxFailed,
84 TransactionResultCode::TxTooEarly,
85 TransactionResultCode::TxTooLate,
86 TransactionResultCode::TxMissingOperation,
87 TransactionResultCode::TxBadSeq,
88 TransactionResultCode::TxBadAuth,
89 TransactionResultCode::TxInsufficientBalance,
90 TransactionResultCode::TxNoAccount,
91 TransactionResultCode::TxInsufficientFee,
92 TransactionResultCode::TxBadAuthExtra,
93 TransactionResultCode::TxInternalError,
94 TransactionResultCode::TxNotSupported,
95 TransactionResultCode::TxBadSponsorship,
96 TransactionResultCode::TxBadMinSeqAgeOrGap,
97 TransactionResultCode::TxMalformed,
98 TransactionResultCode::TxSorobanInvalid,
99 TransactionResultCode::TxFrozenKeyAccessed,
100 ];
101 pub const VARIANTS: [TransactionResultCode; Self::_VARIANTS.len()] = {
102 let mut arr = [Self::_VARIANTS[0]; Self::_VARIANTS.len()];
103 let mut i = 1;
104 while i < Self::_VARIANTS.len() {
105 arr[i] = Self::_VARIANTS[i];
106 i += 1;
107 }
108 arr
109 };
110 const _VARIANTS_STR: &[&str] = &[
111 "TxFeeBumpInnerSuccess",
112 "TxFeeBumpInnerFailed",
113 "TxSuccess",
114 "TxFailed",
115 "TxTooEarly",
116 "TxTooLate",
117 "TxMissingOperation",
118 "TxBadSeq",
119 "TxBadAuth",
120 "TxInsufficientBalance",
121 "TxNoAccount",
122 "TxInsufficientFee",
123 "TxBadAuthExtra",
124 "TxInternalError",
125 "TxNotSupported",
126 "TxBadSponsorship",
127 "TxBadMinSeqAgeOrGap",
128 "TxMalformed",
129 "TxSorobanInvalid",
130 "TxFrozenKeyAccessed",
131 ];
132 pub const VARIANTS_STR: [&'static str; Self::_VARIANTS_STR.len()] = {
133 let mut arr = [Self::_VARIANTS_STR[0]; Self::_VARIANTS_STR.len()];
134 let mut i = 1;
135 while i < Self::_VARIANTS_STR.len() {
136 arr[i] = Self::_VARIANTS_STR[i];
137 i += 1;
138 }
139 arr
140 };
141
142 #[must_use]
143 pub const fn name(&self) -> &'static str {
144 match self {
145 Self::TxFeeBumpInnerSuccess(_) => "TxFeeBumpInnerSuccess",
146 Self::TxFeeBumpInnerFailed(_) => "TxFeeBumpInnerFailed",
147 Self::TxSuccess(_) => "TxSuccess",
148 Self::TxFailed(_) => "TxFailed",
149 Self::TxTooEarly => "TxTooEarly",
150 Self::TxTooLate => "TxTooLate",
151 Self::TxMissingOperation => "TxMissingOperation",
152 Self::TxBadSeq => "TxBadSeq",
153 Self::TxBadAuth => "TxBadAuth",
154 Self::TxInsufficientBalance => "TxInsufficientBalance",
155 Self::TxNoAccount => "TxNoAccount",
156 Self::TxInsufficientFee => "TxInsufficientFee",
157 Self::TxBadAuthExtra => "TxBadAuthExtra",
158 Self::TxInternalError => "TxInternalError",
159 Self::TxNotSupported => "TxNotSupported",
160 Self::TxBadSponsorship => "TxBadSponsorship",
161 Self::TxBadMinSeqAgeOrGap => "TxBadMinSeqAgeOrGap",
162 Self::TxMalformed => "TxMalformed",
163 Self::TxSorobanInvalid => "TxSorobanInvalid",
164 Self::TxFrozenKeyAccessed => "TxFrozenKeyAccessed",
165 }
166 }
167
168 #[must_use]
169 pub const fn discriminant(&self) -> TransactionResultCode {
170 #[allow(clippy::match_same_arms)]
171 match self {
172 Self::TxFeeBumpInnerSuccess(_) => TransactionResultCode::TxFeeBumpInnerSuccess,
173 Self::TxFeeBumpInnerFailed(_) => TransactionResultCode::TxFeeBumpInnerFailed,
174 Self::TxSuccess(_) => TransactionResultCode::TxSuccess,
175 Self::TxFailed(_) => TransactionResultCode::TxFailed,
176 Self::TxTooEarly => TransactionResultCode::TxTooEarly,
177 Self::TxTooLate => TransactionResultCode::TxTooLate,
178 Self::TxMissingOperation => TransactionResultCode::TxMissingOperation,
179 Self::TxBadSeq => TransactionResultCode::TxBadSeq,
180 Self::TxBadAuth => TransactionResultCode::TxBadAuth,
181 Self::TxInsufficientBalance => TransactionResultCode::TxInsufficientBalance,
182 Self::TxNoAccount => TransactionResultCode::TxNoAccount,
183 Self::TxInsufficientFee => TransactionResultCode::TxInsufficientFee,
184 Self::TxBadAuthExtra => TransactionResultCode::TxBadAuthExtra,
185 Self::TxInternalError => TransactionResultCode::TxInternalError,
186 Self::TxNotSupported => TransactionResultCode::TxNotSupported,
187 Self::TxBadSponsorship => TransactionResultCode::TxBadSponsorship,
188 Self::TxBadMinSeqAgeOrGap => TransactionResultCode::TxBadMinSeqAgeOrGap,
189 Self::TxMalformed => TransactionResultCode::TxMalformed,
190 Self::TxSorobanInvalid => TransactionResultCode::TxSorobanInvalid,
191 Self::TxFrozenKeyAccessed => TransactionResultCode::TxFrozenKeyAccessed,
192 }
193 }
194
195 #[must_use]
196 pub const fn variants() -> [TransactionResultCode; Self::_VARIANTS.len()] {
197 Self::VARIANTS
198 }
199}
200
201impl Name for TransactionResultResult {
202 #[must_use]
203 fn name(&self) -> &'static str {
204 Self::name(self)
205 }
206}
207
208impl Discriminant<TransactionResultCode> for TransactionResultResult {
209 #[must_use]
210 fn discriminant(&self) -> TransactionResultCode {
211 Self::discriminant(self)
212 }
213}
214
215impl Variants<TransactionResultCode> for TransactionResultResult {
216 fn variants() -> slice::Iter<'static, TransactionResultCode> {
217 Self::VARIANTS.iter()
218 }
219}
220
221impl Union<TransactionResultCode> for TransactionResultResult {}
222
223impl ReadXdr for TransactionResultResult {
224 #[cfg(feature = "std")]
225 fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
226 r.with_limited_depth(|r| {
227 let dv: TransactionResultCode = <TransactionResultCode as ReadXdr>::read_xdr(r)?;
228 #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
229 let v = match dv {
230 TransactionResultCode::TxFeeBumpInnerSuccess => {
231 Self::TxFeeBumpInnerSuccess(InnerTransactionResultPair::read_xdr(r)?)
232 }
233 TransactionResultCode::TxFeeBumpInnerFailed => {
234 Self::TxFeeBumpInnerFailed(InnerTransactionResultPair::read_xdr(r)?)
235 }
236 TransactionResultCode::TxSuccess => {
237 Self::TxSuccess(VecM::<OperationResult>::read_xdr(r)?)
238 }
239 TransactionResultCode::TxFailed => {
240 Self::TxFailed(VecM::<OperationResult>::read_xdr(r)?)
241 }
242 TransactionResultCode::TxTooEarly => Self::TxTooEarly,
243 TransactionResultCode::TxTooLate => Self::TxTooLate,
244 TransactionResultCode::TxMissingOperation => Self::TxMissingOperation,
245 TransactionResultCode::TxBadSeq => Self::TxBadSeq,
246 TransactionResultCode::TxBadAuth => Self::TxBadAuth,
247 TransactionResultCode::TxInsufficientBalance => Self::TxInsufficientBalance,
248 TransactionResultCode::TxNoAccount => Self::TxNoAccount,
249 TransactionResultCode::TxInsufficientFee => Self::TxInsufficientFee,
250 TransactionResultCode::TxBadAuthExtra => Self::TxBadAuthExtra,
251 TransactionResultCode::TxInternalError => Self::TxInternalError,
252 TransactionResultCode::TxNotSupported => Self::TxNotSupported,
253 TransactionResultCode::TxBadSponsorship => Self::TxBadSponsorship,
254 TransactionResultCode::TxBadMinSeqAgeOrGap => Self::TxBadMinSeqAgeOrGap,
255 TransactionResultCode::TxMalformed => Self::TxMalformed,
256 TransactionResultCode::TxSorobanInvalid => Self::TxSorobanInvalid,
257 TransactionResultCode::TxFrozenKeyAccessed => Self::TxFrozenKeyAccessed,
258 #[allow(unreachable_patterns)]
259 _ => return Err(Error::Invalid),
260 };
261 Ok(v)
262 })
263 }
264}
265
266impl WriteXdr for TransactionResultResult {
267 #[cfg(feature = "std")]
268 fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
269 w.with_limited_depth(|w| {
270 self.discriminant().write_xdr(w)?;
271 #[allow(clippy::match_same_arms)]
272 match self {
273 Self::TxFeeBumpInnerSuccess(v) => v.write_xdr(w)?,
274 Self::TxFeeBumpInnerFailed(v) => v.write_xdr(w)?,
275 Self::TxSuccess(v) => v.write_xdr(w)?,
276 Self::TxFailed(v) => v.write_xdr(w)?,
277 Self::TxTooEarly => ().write_xdr(w)?,
278 Self::TxTooLate => ().write_xdr(w)?,
279 Self::TxMissingOperation => ().write_xdr(w)?,
280 Self::TxBadSeq => ().write_xdr(w)?,
281 Self::TxBadAuth => ().write_xdr(w)?,
282 Self::TxInsufficientBalance => ().write_xdr(w)?,
283 Self::TxNoAccount => ().write_xdr(w)?,
284 Self::TxInsufficientFee => ().write_xdr(w)?,
285 Self::TxBadAuthExtra => ().write_xdr(w)?,
286 Self::TxInternalError => ().write_xdr(w)?,
287 Self::TxNotSupported => ().write_xdr(w)?,
288 Self::TxBadSponsorship => ().write_xdr(w)?,
289 Self::TxBadMinSeqAgeOrGap => ().write_xdr(w)?,
290 Self::TxMalformed => ().write_xdr(w)?,
291 Self::TxSorobanInvalid => ().write_xdr(w)?,
292 Self::TxFrozenKeyAccessed => ().write_xdr(w)?,
293 };
294 Ok(())
295 })
296 }
297}