1#![allow(non_camel_case_types)]
9#![allow(non_snake_case)]
10#![allow(non_upper_case_globals)]
11#![allow(unused_imports)]
12#![allow(dead_code)]
13#![allow(unused_variables)]
14#![allow(clippy::unnecessary_cast)]
15
16use crate::*;
17use core::option::Option;
18use core::ops::{Deref, DerefMut};
19
20#[cfg(feature = "std")]
21use std::io::{Read, Write};
22use xdrs::*;
23
24
25#[cfg(feature = "serde")]
26use ::serde::{{Serialize, Deserialize}};
27
28
29
30#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
38#[cfg_attr(feature = "serde", serde(transparent))]
39#[derive(ReadXDR, WriteXDR, ConstXDRSize)]
40#[derive(schemars::JsonSchema)]
41#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
42#[derive(Copy)]
43#[repr(transparent)]
44pub struct DbConflictCode(pub i32);
45
46impl DbConflictCode {
47 pub const ExclusiveLockDenied: Self = Self(0);
52
53 pub const TypeMismatch: Self = Self(1);
55
56 pub const ValueMismatch: Self = Self(2);
60
61 pub const BoundsExceeded: Self = Self(3);
65
66 pub const Overflow: Self = Self(4);
68
69 pub const ReplayProtection: Self = Self(5);
73
74 pub const QueueConsumer: Self = Self(6);
76
77 pub const CapacityExceeded: Self = Self(7);
80
81 pub const InsufficientFunds: Self = Self(8);
87
88 pub const DuplicateSigner: Self = Self(9);
93}
94impl From<i32> for DbConflictCode {
95 fn from(v: i32) -> Self {
96 Self(v)
97 }
98}
99#[cfg(feature = "std")]
100impl core::fmt::Display for DbConflictCode {
101 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
102 match self.0 {
103 x if x == Self::ExclusiveLockDenied.0 => {
104 write!(f, "DbConflictCode::ExclusiveLockDenied")
105 },
106 x if x == Self::TypeMismatch.0 => {
107 write!(f, "DbConflictCode::TypeMismatch")
108 },
109 x if x == Self::ValueMismatch.0 => {
110 write!(f, "DbConflictCode::ValueMismatch")
111 },
112 x if x == Self::BoundsExceeded.0 => {
113 write!(f, "DbConflictCode::BoundsExceeded")
114 },
115 x if x == Self::Overflow.0 => {
116 write!(f, "DbConflictCode::Overflow")
117 },
118 x if x == Self::ReplayProtection.0 => {
119 write!(f, "DbConflictCode::ReplayProtection")
120 },
121 x if x == Self::QueueConsumer.0 => {
122 write!(f, "DbConflictCode::QueueConsumer")
123 },
124 x if x == Self::CapacityExceeded.0 => {
125 write!(f, "DbConflictCode::CapacityExceeded")
126 },
127 x if x == Self::InsufficientFunds.0 => {
128 write!(f, "DbConflictCode::InsufficientFunds")
129 },
130 x if x == Self::DuplicateSigner.0 => {
131 write!(f, "DbConflictCode::DuplicateSigner")
132 },
133 _ => {
134 write!(f, "DbConflictCode({})", self.0)
135 }
136 }
137 }
138}
139
140
141#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
146#[cfg_attr(feature = "serde", serde(transparent))]
147#[derive(ReadXDR, WriteXDR, ConstXDRSize)]
148#[derive(schemars::JsonSchema)]
149#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
150#[derive(Copy)]
151#[repr(transparent)]
152pub struct DbDiagnosticLevel(pub i32);
153
154impl DbDiagnosticLevel {
155 pub const kDbDiagnosticNone: Self = Self(0);
157
158 pub const kDbDiagnosticFirst: Self = Self(1);
160
161 pub const kDbDiagnosticAll: Self = Self(2);
164}
165impl From<i32> for DbDiagnosticLevel {
166 fn from(v: i32) -> Self {
167 Self(v)
168 }
169}
170#[cfg(feature = "std")]
171impl core::fmt::Display for DbDiagnosticLevel {
172 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
173 match self.0 {
174 x if x == Self::kDbDiagnosticNone.0 => {
175 write!(f, "DbDiagnosticLevel::kDbDiagnosticNone")
176 },
177 x if x == Self::kDbDiagnosticFirst.0 => {
178 write!(f, "DbDiagnosticLevel::kDbDiagnosticFirst")
179 },
180 x if x == Self::kDbDiagnosticAll.0 => {
181 write!(f, "DbDiagnosticLevel::kDbDiagnosticAll")
182 },
183 _ => {
184 write!(f, "DbDiagnosticLevel({})", self.0)
185 }
186 }
187 }
188}
189
190
191#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
194#[derive(ReadXDR, WriteXDR, ConstXDRSize)]
195#[derive(schemars::JsonSchema)]
196#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
197#[repr(C)]
198pub struct DbConflictDiagnostic {
199 pub addrkey: AddressAndKey,
200 pub code: DbConflictCode,
201}
202
203#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
209#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
210#[derive(ReadXDR, WriteXDR, ConstXDRSize)]
211#[derive(schemars::JsonSchema)]
212#[repr(i32)]
213#[non_exhaustive]
214pub enum DbConflictResult {
215 kDbDiagnosticNone = DbDiagnosticLevel::kDbDiagnosticNone.0 as i32,
218 kDbDiagnosticFirst { first: DbConflictDiagnostic } = DbDiagnosticLevel::kDbDiagnosticFirst.0 as i32,
221 kDbDiagnosticAll { conflicts: VecM<DbConflictDiagnostic> } = DbDiagnosticLevel::kDbDiagnosticAll.0 as i32,
224
225}
226
227#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
233#[cfg_attr(feature = "serde", serde(transparent))]
234#[derive(ReadXDR, WriteXDR, ConstXDRSize)]
235#[derive(schemars::JsonSchema)]
236#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
237#[derive(Copy)]
238#[repr(transparent)]
239pub struct ContractRejectCode(pub i32);
240
241impl ContractRejectCode {
242 pub const ContractRejectTooMany: Self = Self(0);
245
246 pub const ContractRejectBlobTooLarge: Self = Self(1);
248
249 pub const ContractRejectNotDeployable: Self = Self(2);
252
253 pub const ContractRejectDuplicate: Self = Self(3);
255
256 pub const ContractRejectMalformedArtifact: Self = Self(4);
260
261 pub const ContractRejectUnsupportedFormat: Self = Self(5);
263
264 pub const ContractRejectUnsupportedAbi: Self = Self(6);
267
268 pub const ContractRejectGasScheduleMismatch: Self = Self(7);
272
273 pub const ContractRejectMemoryTooLarge: Self = Self(8);
275
276 pub const ContractRejectCodeSizeInvalid: Self = Self(9);
278
279 pub const ContractRejectInitialMemoryInvalid: Self = Self(10);
282
283 pub const ContractRejectDigestMismatch: Self = Self(11);
285
286 pub const ContractRejectInvalidProgram: Self = Self(12);
289}
290impl From<i32> for ContractRejectCode {
291 fn from(v: i32) -> Self {
292 Self(v)
293 }
294}
295#[cfg(feature = "std")]
296impl core::fmt::Display for ContractRejectCode {
297 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
298 match self.0 {
299 x if x == Self::ContractRejectTooMany.0 => {
300 write!(f, "ContractRejectCode::ContractRejectTooMany")
301 },
302 x if x == Self::ContractRejectBlobTooLarge.0 => {
303 write!(f, "ContractRejectCode::ContractRejectBlobTooLarge")
304 },
305 x if x == Self::ContractRejectNotDeployable.0 => {
306 write!(f, "ContractRejectCode::ContractRejectNotDeployable")
307 },
308 x if x == Self::ContractRejectDuplicate.0 => {
309 write!(f, "ContractRejectCode::ContractRejectDuplicate")
310 },
311 x if x == Self::ContractRejectMalformedArtifact.0 => {
312 write!(f, "ContractRejectCode::ContractRejectMalformedArtifact")
313 },
314 x if x == Self::ContractRejectUnsupportedFormat.0 => {
315 write!(f, "ContractRejectCode::ContractRejectUnsupportedFormat")
316 },
317 x if x == Self::ContractRejectUnsupportedAbi.0 => {
318 write!(f, "ContractRejectCode::ContractRejectUnsupportedAbi")
319 },
320 x if x == Self::ContractRejectGasScheduleMismatch.0 => {
321 write!(f, "ContractRejectCode::ContractRejectGasScheduleMismatch")
322 },
323 x if x == Self::ContractRejectMemoryTooLarge.0 => {
324 write!(f, "ContractRejectCode::ContractRejectMemoryTooLarge")
325 },
326 x if x == Self::ContractRejectCodeSizeInvalid.0 => {
327 write!(f, "ContractRejectCode::ContractRejectCodeSizeInvalid")
328 },
329 x if x == Self::ContractRejectInitialMemoryInvalid.0 => {
330 write!(f, "ContractRejectCode::ContractRejectInitialMemoryInvalid")
331 },
332 x if x == Self::ContractRejectDigestMismatch.0 => {
333 write!(f, "ContractRejectCode::ContractRejectDigestMismatch")
334 },
335 x if x == Self::ContractRejectInvalidProgram.0 => {
336 write!(f, "ContractRejectCode::ContractRejectInvalidProgram")
337 },
338 _ => {
339 write!(f, "ContractRejectCode({})", self.0)
340 }
341 }
342 }
343}
344
345
346#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
348#[derive(ReadXDR, WriteXDR, ConstXDRSize)]
349#[derive(schemars::JsonSchema)]
350#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
351#[repr(C)]
352pub struct ContractRejectDiagnostic {
353 pub contract_index: u32,
356 pub code: ContractRejectCode,
357}
358
359#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
360#[cfg_attr(feature = "serde", serde(transparent))]
361#[derive(ReadXDR, WriteXDR, ConstXDRSize)]
362#[derive(schemars::JsonSchema)]
363#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
364#[derive(Copy)]
365#[repr(transparent)]
366pub struct TxFailureKind(pub i32);
367
368impl TxFailureKind {
369 pub const TxFailureDbConflict: Self = Self(0);
371
372 pub const TxFailureContractRejected: Self = Self(1);
374}
375impl From<i32> for TxFailureKind {
376 fn from(v: i32) -> Self {
377 Self(v)
378 }
379}
380#[cfg(feature = "std")]
381impl core::fmt::Display for TxFailureKind {
382 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
383 match self.0 {
384 x if x == Self::TxFailureDbConflict.0 => {
385 write!(f, "TxFailureKind::TxFailureDbConflict")
386 },
387 x if x == Self::TxFailureContractRejected.0 => {
388 write!(f, "TxFailureKind::TxFailureContractRejected")
389 },
390 _ => {
391 write!(f, "TxFailureKind({})", self.0)
392 }
393 }
394 }
395}
396
397
398#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
399#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
400#[derive(ReadXDR, WriteXDR, ConstXDRSize)]
401#[derive(schemars::JsonSchema)]
402#[repr(i32)]
403#[non_exhaustive]
404pub enum TxFailureCause {
405 TxFailureDbConflict { conflict: DbConflictDiagnostic } = TxFailureKind::TxFailureDbConflict.0 as i32,
408 TxFailureContractRejected { contract: ContractRejectDiagnostic } = TxFailureKind::TxFailureContractRejected.0 as i32,
411
412}
413
414#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
421#[derive(ReadXDR, WriteXDR, ConstXDRSize)]
422#[derive(schemars::JsonSchema)]
423#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
424#[repr(C)]
425pub struct TxFailureDiagnostic {
426 pub attempt_height: BlockHeight,
427 pub cause: TxFailureCause,
428}
429
430
431impl DbConflictResult {
436 #[allow(clippy::match_single_binding)]
437 pub fn level(&self) -> DbDiagnosticLevel {
438 match self {
439
440 _ => (unsafe { *(self as *const Self as *const i32) }).into(),
441 }
442 }
443}
444
445impl TxFailureCause {
446 #[allow(clippy::match_single_binding)]
447 pub fn kind(&self) -> TxFailureKind {
448 match self {
449
450 _ => (unsafe { *(self as *const Self as *const i32) }).into(),
451 }
452 }
453}
454
455