stellar_xdr/next/
generated.rs

1// Module  is generated from:
2//  xdr/next/Stellar-SCP.x
3//  xdr/next/Stellar-contract-config-setting.x
4//  xdr/next/Stellar-contract-env-meta.x
5//  xdr/next/Stellar-contract-meta.x
6//  xdr/next/Stellar-contract-spec.x
7//  xdr/next/Stellar-contract.x
8//  xdr/next/Stellar-exporter.x
9//  xdr/next/Stellar-internal.x
10//  xdr/next/Stellar-ledger-entries.x
11//  xdr/next/Stellar-ledger.x
12//  xdr/next/Stellar-overlay.x
13//  xdr/next/Stellar-transaction.x
14//  xdr/next/Stellar-types.x
15
16#![allow(clippy::missing_errors_doc, clippy::unreadable_literal)]
17
18/// `XDR_FILES_SHA256` is a list of pairs of source files and their SHA256 hashes.
19pub const XDR_FILES_SHA256: [(&str, &str); 13] = [
20    (
21        "xdr/next/Stellar-SCP.x",
22        "8f32b04d008f8bc33b8843d075e69837231a673691ee41d8b821ca229a6e802a",
23    ),
24    (
25        "xdr/next/Stellar-contract-config-setting.x",
26        "5d1d926e4288b0f2d1ce9f891ca2cab97de9246381d57fca22e25a0d276c6682",
27    ),
28    (
29        "xdr/next/Stellar-contract-env-meta.x",
30        "75a271414d852096fea3283c63b7f2a702f2905f78fc28eb60ec7d7bd366a780",
31    ),
32    (
33        "xdr/next/Stellar-contract-meta.x",
34        "f01532c11ca044e19d9f9f16fe373e9af64835da473be556b9a807ee3319ae0d",
35    ),
36    (
37        "xdr/next/Stellar-contract-spec.x",
38        "7bd048e1b008c274f667a4f9b8fcf5ae848e301aca0073cdc8b266ecd2c5f2f9",
39    ),
40    (
41        "xdr/next/Stellar-contract.x",
42        "dce61df115c93fef5bb352beac1b504a518cb11dcb8ee029b1bb1b5f8fe52982",
43    ),
44    (
45        "xdr/next/Stellar-exporter.x",
46        "a00c83d02e8c8382e06f79a191f1fb5abd097a4bbcab8481c67467e3270e0529",
47    ),
48    (
49        "xdr/next/Stellar-internal.x",
50        "227835866c1b2122d1eaf28839ba85ea7289d1cb681dda4ca619c2da3d71fe00",
51    ),
52    (
53        "xdr/next/Stellar-ledger-entries.x",
54        "5157cad76b008b3606fe5bc2cfe87596827d8e02d16cbec3cedc297bb571aa54",
55    ),
56    (
57        "xdr/next/Stellar-ledger.x",
58        "cf936606885dd265082e553aa433c2cf47b720b6d58839b154cf71096b885d1e",
59    ),
60    (
61        "xdr/next/Stellar-overlay.x",
62        "8c9b9c13c86fa4672f03d741705b41e7221be0fc48e1ea6eeb1ba07d31ec0723",
63    ),
64    (
65        "xdr/next/Stellar-transaction.x",
66        "7c4c951f233ad7cdabedd740abd9697626ec5bc03ce97bf60cbaeee1481a48d1",
67    ),
68    (
69        "xdr/next/Stellar-types.x",
70        "d37a4b8683d2ddb9f13f6d8a4e5111dfe7de4176516db52bc0517ec46a82c3d4",
71    ),
72];
73
74use core::{array::TryFromSliceError, fmt, fmt::Debug, marker::Sized, ops::Deref, slice};
75
76#[cfg(feature = "std")]
77use core::marker::PhantomData;
78
79// When feature alloc is turned off use static lifetime Box and Vec types.
80#[cfg(not(feature = "alloc"))]
81mod noalloc {
82    pub mod boxed {
83        pub type Box<T> = &'static T;
84    }
85    pub mod vec {
86        pub type Vec<T> = &'static [T];
87    }
88}
89#[cfg(not(feature = "alloc"))]
90use noalloc::{boxed::Box, vec::Vec};
91
92// When feature std is turned off, but feature alloc is turned on import the
93// alloc crate and use its Box and Vec types.
94#[cfg(all(not(feature = "std"), feature = "alloc"))]
95extern crate alloc;
96#[cfg(all(not(feature = "std"), feature = "alloc"))]
97use alloc::{
98    borrow::ToOwned,
99    boxed::Box,
100    string::{FromUtf8Error, String},
101    vec::Vec,
102};
103#[cfg(feature = "std")]
104use std::string::FromUtf8Error;
105
106#[cfg(feature = "arbitrary")]
107use arbitrary::Arbitrary;
108
109#[cfg(all(feature = "schemars", feature = "alloc", not(feature = "std")))]
110use alloc::borrow::Cow;
111#[cfg(all(feature = "schemars", feature = "alloc", feature = "std"))]
112use std::borrow::Cow;
113
114// TODO: Add support for read/write xdr fns when std not available.
115
116#[cfg(feature = "std")]
117use std::{
118    error, io,
119    io::{BufRead, BufReader, Cursor, Read, Write},
120};
121
122/// Error contains all errors returned by functions in this crate. It can be
123/// compared via `PartialEq`, however any contained IO errors will only be
124/// compared on their `ErrorKind`.
125#[derive(Debug)]
126pub enum Error {
127    Invalid,
128    Unsupported,
129    LengthExceedsMax,
130    LengthMismatch,
131    NonZeroPadding,
132    Utf8Error(core::str::Utf8Error),
133    #[cfg(feature = "alloc")]
134    InvalidHex,
135    #[cfg(feature = "std")]
136    Io(io::Error),
137    DepthLimitExceeded,
138    #[cfg(feature = "serde_json")]
139    Json(serde_json::Error),
140    LengthLimitExceeded,
141    #[cfg(feature = "arbitrary")]
142    Arbitrary(arbitrary::Error),
143}
144
145impl PartialEq for Error {
146    fn eq(&self, other: &Self) -> bool {
147        match (self, other) {
148            (Self::Invalid, Self::Invalid)
149            | (Self::Unsupported, Self::Unsupported)
150            | (Self::LengthExceedsMax, Self::LengthExceedsMax)
151            | (Self::LengthMismatch, Self::LengthMismatch)
152            | (Self::NonZeroPadding, Self::NonZeroPadding) => true,
153
154            (Self::Utf8Error(l), Self::Utf8Error(r)) => l == r,
155
156            #[cfg(feature = "alloc")]
157            (Self::InvalidHex, Self::InvalidHex) => true,
158
159            // IO errors cannot be compared, but in the absence of any more
160            // meaningful way to compare the errors we compare the kind of error
161            // and ignore the embedded source error or OS error. The main use
162            // case for comparing errors outputted by the XDR library is for
163            // error case testing, and a lack of the ability to compare has a
164            // detrimental affect on failure testing, so this is a tradeoff.
165            #[cfg(feature = "std")]
166            (Self::Io(l), Self::Io(r)) => l.kind() == r.kind(),
167
168            (Self::DepthLimitExceeded, Self::DepthLimitExceeded) => true,
169
170            #[cfg(feature = "serde_json")]
171            (Self::Json(l), Self::Json(r)) => l.classify() == r.classify(),
172
173            (Self::LengthLimitExceeded, Self::LengthLimitExceeded) => true,
174
175            #[cfg(feature = "arbitrary")]
176            (Self::Arbitrary(l), Self::Arbitrary(r)) => l == r,
177
178            _ => false,
179        }
180    }
181}
182
183#[cfg(feature = "std")]
184impl error::Error for Error {
185    #[must_use]
186    fn source(&self) -> Option<&(dyn error::Error + 'static)> {
187        match self {
188            Error::Invalid
189            | Error::Unsupported
190            | Error::LengthExceedsMax
191            | Error::LengthMismatch
192            | Error::NonZeroPadding => None,
193
194            Error::Utf8Error(e) => Some(e),
195
196            Self::InvalidHex => None,
197
198            Self::Io(e) => Some(e),
199
200            Self::DepthLimitExceeded => None,
201
202            #[cfg(feature = "serde_json")]
203            Self::Json(e) => Some(e),
204
205            Self::LengthLimitExceeded => None,
206
207            #[cfg(feature = "arbitrary")]
208            Self::Arbitrary(e) => Some(e),
209        }
210    }
211}
212
213impl fmt::Display for Error {
214    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
215        match self {
216            Error::Invalid => write!(f, "xdr value invalid"),
217            Error::Unsupported => write!(f, "xdr value unsupported"),
218            Error::LengthExceedsMax => write!(f, "xdr value max length exceeded"),
219            Error::LengthMismatch => write!(f, "xdr value length does not match"),
220            Error::NonZeroPadding => write!(f, "xdr padding contains non-zero bytes"),
221            Error::Utf8Error(e) => write!(f, "{e}"),
222
223            #[cfg(feature = "alloc")]
224            Error::InvalidHex => write!(f, "hex invalid"),
225
226            #[cfg(feature = "std")]
227            Error::Io(e) => write!(f, "{e}"),
228
229            Error::DepthLimitExceeded => write!(f, "depth limit exceeded"),
230
231            #[cfg(feature = "serde_json")]
232            Error::Json(e) => write!(f, "{e}"),
233
234            Error::LengthLimitExceeded => write!(f, "length limit exceeded"),
235
236            #[cfg(feature = "arbitrary")]
237            Error::Arbitrary(e) => write!(f, "{e}"),
238        }
239    }
240}
241
242impl From<TryFromSliceError> for Error {
243    fn from(_: TryFromSliceError) -> Error {
244        Error::LengthMismatch
245    }
246}
247
248impl From<core::str::Utf8Error> for Error {
249    #[must_use]
250    fn from(e: core::str::Utf8Error) -> Self {
251        Error::Utf8Error(e)
252    }
253}
254
255#[cfg(feature = "alloc")]
256impl From<FromUtf8Error> for Error {
257    #[must_use]
258    fn from(e: FromUtf8Error) -> Self {
259        Error::Utf8Error(e.utf8_error())
260    }
261}
262
263#[cfg(feature = "std")]
264impl From<io::Error> for Error {
265    #[must_use]
266    fn from(e: io::Error) -> Self {
267        Error::Io(e)
268    }
269}
270
271#[cfg(feature = "serde_json")]
272impl From<serde_json::Error> for Error {
273    #[must_use]
274    fn from(e: serde_json::Error) -> Self {
275        Error::Json(e)
276    }
277}
278
279#[cfg(feature = "arbitrary")]
280impl From<arbitrary::Error> for Error {
281    #[must_use]
282    fn from(e: arbitrary::Error) -> Self {
283        Error::Arbitrary(e)
284    }
285}
286
287impl From<Error> for () {
288    fn from(_: Error) {}
289}
290
291/// Name defines types that assign a static name to their value, such as the
292/// name given to an identifier in an XDR enum, or the name given to the case in
293/// a union.
294pub trait Name {
295    fn name(&self) -> &'static str;
296}
297
298/// Discriminant defines types that may contain a one-of value determined
299/// according to the discriminant, and exposes the value of the discriminant for
300/// that type, such as in an XDR union.
301pub trait Discriminant<D> {
302    fn discriminant(&self) -> D;
303}
304
305/// Iter defines types that have variants that can be iterated.
306pub trait Variants<V> {
307    fn variants() -> slice::Iter<'static, V>
308    where
309        V: Sized;
310}
311
312// Enum defines a type that is represented as an XDR enumeration when encoded.
313pub trait Enum: Name + Variants<Self> + Sized {}
314
315// Union defines a type that is represented as an XDR union when encoded.
316pub trait Union<D>: Name + Discriminant<D> + Variants<D>
317where
318    D: Sized,
319{
320}
321
322/// `Limits` contains the limits that a limited reader or writer will be
323/// constrained to.
324#[cfg(feature = "std")]
325#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
326pub struct Limits {
327    /// Defines the maximum depth for recursive calls in `Read/WriteXdr` to
328    /// prevent stack overflow.
329    ///
330    /// The depth limit is akin to limiting stack depth. Its purpose is to
331    /// prevent the program from hitting the maximum stack size allowed by Rust,
332    /// which would result in an unrecoverable `SIGABRT`.  For more information
333    /// about Rust's stack size limit, refer to the [Rust
334    /// documentation](https://doc.rust-lang.org/std/thread/#stack-size).
335    pub depth: u32,
336
337    /// Defines the maximum number of bytes that will be read or written.
338    pub len: usize,
339}
340
341#[cfg(feature = "std")]
342impl Limits {
343    #[must_use]
344    pub fn none() -> Self {
345        Self {
346            depth: u32::MAX,
347            len: usize::MAX,
348        }
349    }
350
351    #[must_use]
352    pub fn depth(depth: u32) -> Self {
353        Limits {
354            depth,
355            ..Limits::none()
356        }
357    }
358
359    #[must_use]
360    pub fn len(len: usize) -> Self {
361        Limits {
362            len,
363            ..Limits::none()
364        }
365    }
366}
367
368/// `Limited` wraps an object and provides functions for enforcing limits.
369///
370/// Intended for use with readers and writers and limiting their reads and
371/// writes.
372#[cfg(feature = "std")]
373pub struct Limited<L> {
374    pub inner: L,
375    pub(crate) limits: Limits,
376}
377
378#[cfg(feature = "std")]
379impl<L> Limited<L> {
380    /// Constructs a new `Limited`.
381    ///
382    /// - `inner`: The value being limited.
383    /// - `limits`: The limits to enforce.
384    pub fn new(inner: L, limits: Limits) -> Self {
385        Limited { inner, limits }
386    }
387
388    /// Consume the given length from the internal remaining length limit.
389    ///
390    /// ### Errors
391    ///
392    /// If the length would consume more length than the remaining length limit
393    /// allows.
394    pub(crate) fn consume_len(&mut self, len: usize) -> Result<(), Error> {
395        if let Some(len) = self.limits.len.checked_sub(len) {
396            self.limits.len = len;
397            Ok(())
398        } else {
399            Err(Error::LengthLimitExceeded)
400        }
401    }
402
403    /// Consumes a single depth for the duration of the given function.
404    ///
405    /// ### Errors
406    ///
407    /// If the depth limit is already exhausted.
408    pub(crate) fn with_limited_depth<T, F>(&mut self, f: F) -> Result<T, Error>
409    where
410        F: FnOnce(&mut Self) -> Result<T, Error>,
411    {
412        if let Some(depth) = self.limits.depth.checked_sub(1) {
413            self.limits.depth = depth;
414            let res = f(self);
415            self.limits.depth = self.limits.depth.saturating_add(1);
416            res
417        } else {
418            Err(Error::DepthLimitExceeded)
419        }
420    }
421}
422
423#[cfg(feature = "std")]
424impl<R: Read> Read for Limited<R> {
425    /// Forwards the read operation to the wrapped object.
426    fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
427        self.inner.read(buf)
428    }
429}
430
431#[cfg(feature = "std")]
432impl<R: BufRead> BufRead for Limited<R> {
433    /// Forwards the read operation to the wrapped object.
434    fn fill_buf(&mut self) -> std::io::Result<&[u8]> {
435        self.inner.fill_buf()
436    }
437
438    /// Forwards the read operation to the wrapped object.
439    fn consume(&mut self, amt: usize) {
440        self.inner.consume(amt);
441    }
442}
443
444#[cfg(feature = "std")]
445impl<W: Write> Write for Limited<W> {
446    /// Forwards the write operation to the wrapped object.
447    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
448        self.inner.write(buf)
449    }
450
451    /// Forwards the flush operation to the wrapped object.
452    fn flush(&mut self) -> std::io::Result<()> {
453        self.inner.flush()
454    }
455}
456
457#[cfg(feature = "std")]
458pub struct ReadXdrIter<R: Read, S: ReadXdr> {
459    reader: Limited<BufReader<R>>,
460    _s: PhantomData<S>,
461}
462
463#[cfg(feature = "std")]
464impl<R: Read, S: ReadXdr> ReadXdrIter<R, S> {
465    fn new(r: R, limits: Limits) -> Self {
466        Self {
467            reader: Limited {
468                inner: BufReader::new(r),
469                limits,
470            },
471            _s: PhantomData,
472        }
473    }
474}
475
476#[cfg(feature = "std")]
477impl<R: Read, S: ReadXdr> Iterator for ReadXdrIter<R, S> {
478    type Item = Result<S, Error>;
479
480    // Next reads the internal reader and XDR decodes it into the Self type. If
481    // the EOF is reached without reading any new bytes `None` is returned. If
482    // EOF is reached after reading some bytes a truncated entry is assumed an
483    // an `Error::Io` containing an `UnexpectedEof`. If any other IO error
484    // occurs it is returned. Iteration of this iterator stops naturally when
485    // `None` is returned, but not when a `Some(Err(...))` is returned. The
486    // caller is responsible for checking each Result.
487    fn next(&mut self) -> Option<Self::Item> {
488        // Try to fill the buffer to see if the EOF has been reached or not.
489        // This happens to effectively peek to see if the stream has finished
490        // and there are no more items.  It is necessary to do this because the
491        // xdr types in this crate heavily use the `std::io::Read::read_exact`
492        // method that doesn't distinguish between an EOF at the beginning of a
493        // read and an EOF after a partial fill of a read_exact.
494        match self.reader.fill_buf() {
495            // If the reader has no more data and is unable to fill any new data
496            // into its internal buf, then the EOF has been reached.
497            Ok([]) => return None,
498            // If an error occurs filling the buffer, treat that as an error and stop.
499            Err(e) => return Some(Err(Error::Io(e))),
500            // If there is data in the buf available for reading, continue.
501            Ok([..]) => (),
502        };
503        // Read the buf into the type.
504        let r = self.reader.with_limited_depth(|dlr| S::read_xdr(dlr));
505        match r {
506            Ok(s) => Some(Ok(s)),
507            Err(e) => Some(Err(e)),
508        }
509    }
510}
511
512pub trait ReadXdr
513where
514    Self: Sized,
515{
516    /// Read the XDR and construct the type.
517    ///
518    /// Read bytes from the given read implementation, decoding the bytes as
519    /// XDR, and construct the type implementing this interface from those
520    /// bytes.
521    ///
522    /// Just enough bytes are read from the read implementation to construct the
523    /// type. Any residual bytes remain in the read implementation.
524    ///
525    /// All implementations should continue if the read implementation returns
526    /// [`ErrorKind::Interrupted`](std::io::ErrorKind::Interrupted).
527    ///
528    /// Use [`ReadXdR: Read_xdr_to_end`] when the intent is for all bytes in the
529    /// read implementation to be consumed by the read.
530    #[cfg(feature = "std")]
531    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error>;
532
533    /// Construct the type from the XDR bytes base64 encoded.
534    ///
535    /// An error is returned if the bytes are not completely consumed by the
536    /// deserialization.
537    #[cfg(feature = "base64")]
538    fn read_xdr_base64<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
539        let mut dec = Limited::new(
540            base64::read::DecoderReader::new(
541                SkipWhitespace::new(&mut r.inner),
542                &base64::engine::general_purpose::STANDARD,
543            ),
544            r.limits.clone(),
545        );
546        let t = Self::read_xdr(&mut dec)?;
547        Ok(t)
548    }
549
550    /// Read the XDR and construct the type, and consider it an error if the
551    /// read does not completely consume the read implementation.
552    ///
553    /// Read bytes from the given read implementation, decoding the bytes as
554    /// XDR, and construct the type implementing this interface from those
555    /// bytes.
556    ///
557    /// Just enough bytes are read from the read implementation to construct the
558    /// type, and then confirm that no further bytes remain. To confirm no
559    /// further bytes remain additional bytes are attempted to be read from the
560    /// read implementation. If it is possible to read any residual bytes from
561    /// the read implementation an error is returned. The read implementation
562    /// may not be exhaustively read if there are residual bytes, and it is
563    /// considered undefined how many residual bytes or how much of the residual
564    /// buffer are consumed in this case.
565    ///
566    /// All implementations should continue if the read implementation returns
567    /// [`ErrorKind::Interrupted`](std::io::ErrorKind::Interrupted).
568    #[cfg(feature = "std")]
569    fn read_xdr_to_end<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
570        let s = Self::read_xdr(r)?;
571        // Check that any further reads, such as this read of one byte, read no
572        // data, indicating EOF. If a byte is read the data is invalid.
573        if r.read(&mut [0u8; 1])? == 0 {
574            Ok(s)
575        } else {
576            Err(Error::Invalid)
577        }
578    }
579
580    /// Construct the type from the XDR bytes base64 encoded.
581    ///
582    /// An error is returned if the bytes are not completely consumed by the
583    /// deserialization.
584    #[cfg(feature = "base64")]
585    fn read_xdr_base64_to_end<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
586        let mut dec = Limited::new(
587            base64::read::DecoderReader::new(
588                SkipWhitespace::new(&mut r.inner),
589                &base64::engine::general_purpose::STANDARD,
590            ),
591            r.limits.clone(),
592        );
593        let t = Self::read_xdr_to_end(&mut dec)?;
594        Ok(t)
595    }
596
597    /// Read the XDR and construct the type.
598    ///
599    /// Read bytes from the given read implementation, decoding the bytes as
600    /// XDR, and construct the type implementing this interface from those
601    /// bytes.
602    ///
603    /// Just enough bytes are read from the read implementation to construct the
604    /// type. Any residual bytes remain in the read implementation.
605    ///
606    /// All implementations should continue if the read implementation returns
607    /// [`ErrorKind::Interrupted`](std::io::ErrorKind::Interrupted).
608    ///
609    /// Use [`ReadXdR: Read_xdr_into_to_end`] when the intent is for all bytes
610    /// in the read implementation to be consumed by the read.
611    #[cfg(feature = "std")]
612    fn read_xdr_into<R: Read>(&mut self, r: &mut Limited<R>) -> Result<(), Error> {
613        *self = Self::read_xdr(r)?;
614        Ok(())
615    }
616
617    /// Read the XDR into the existing value, and consider it an error if the
618    /// read does not completely consume the read implementation.
619    ///
620    /// Read bytes from the given read implementation, decoding the bytes as
621    /// XDR, and construct the type implementing this interface from those
622    /// bytes.
623    ///
624    /// Just enough bytes are read from the read implementation to construct the
625    /// type, and then confirm that no further bytes remain. To confirm no
626    /// further bytes remain additional bytes are attempted to be read from the
627    /// read implementation. If it is possible to read any residual bytes from
628    /// the read implementation an error is returned. The read implementation
629    /// may not be exhaustively read if there are residual bytes, and it is
630    /// considered undefined how many residual bytes or how much of the residual
631    /// buffer are consumed in this case.
632    ///
633    /// All implementations should continue if the read implementation returns
634    /// [`ErrorKind::Interrupted`](std::io::ErrorKind::Interrupted).
635    #[cfg(feature = "std")]
636    fn read_xdr_into_to_end<R: Read>(&mut self, r: &mut Limited<R>) -> Result<(), Error> {
637        Self::read_xdr_into(self, r)?;
638        // Check that any further reads, such as this read of one byte, read no
639        // data, indicating EOF. If a byte is read the data is invalid.
640        if r.read(&mut [0u8; 1])? == 0 {
641            Ok(())
642        } else {
643            Err(Error::Invalid)
644        }
645    }
646
647    /// Create an iterator that reads the read implementation as a stream of
648    /// values that are read into the implementing type.
649    ///
650    /// Read bytes from the given read implementation, decoding the bytes as
651    /// XDR, and construct the type implementing this interface from those
652    /// bytes.
653    ///
654    /// Just enough bytes are read from the read implementation to construct the
655    /// type, and then confirm that no further bytes remain. To confirm no
656    /// further bytes remain additional bytes are attempted to be read from the
657    /// read implementation. If it is possible to read any residual bytes from
658    /// the read implementation an error is returned. The read implementation
659    /// may not be exhaustively read if there are residual bytes, and it is
660    /// considered undefined how many residual bytes or how much of the residual
661    /// buffer are consumed in this case.
662    ///
663    /// All implementations should continue if the read implementation returns
664    /// [`ErrorKind::Interrupted`](std::io::ErrorKind::Interrupted).
665    #[cfg(feature = "std")]
666    fn read_xdr_iter<R: Read>(r: &mut Limited<R>) -> ReadXdrIter<&mut R, Self> {
667        ReadXdrIter::new(&mut r.inner, r.limits.clone())
668    }
669
670    /// Create an iterator that reads the read implementation as a stream of
671    /// values that are read into the implementing type.
672    #[cfg(feature = "base64")]
673    fn read_xdr_base64_iter<R: Read>(
674        r: &mut Limited<R>,
675    ) -> ReadXdrIter<
676        base64::read::DecoderReader<
677            '_,
678            base64::engine::general_purpose::GeneralPurpose,
679            SkipWhitespace<&mut R>,
680        >,
681        Self,
682    > {
683        let dec = base64::read::DecoderReader::new(
684            SkipWhitespace::new(&mut r.inner),
685            &base64::engine::general_purpose::STANDARD,
686        );
687        ReadXdrIter::new(dec, r.limits.clone())
688    }
689
690    /// Construct the type from the XDR bytes.
691    ///
692    /// An error is returned if the bytes are not completely consumed by the
693    /// deserialization.
694    #[cfg(feature = "std")]
695    fn from_xdr(bytes: impl AsRef<[u8]>, limits: Limits) -> Result<Self, Error> {
696        let mut cursor = Limited::new(Cursor::new(bytes.as_ref()), limits);
697        let t = Self::read_xdr_to_end(&mut cursor)?;
698        Ok(t)
699    }
700
701    /// Construct the type from the XDR bytes base64 encoded.
702    ///
703    /// An error is returned if the bytes are not completely consumed by the
704    /// deserialization.
705    #[cfg(feature = "base64")]
706    fn from_xdr_base64(b64: impl AsRef<[u8]>, limits: Limits) -> Result<Self, Error> {
707        let b64_reader = Cursor::new(b64);
708        let mut dec = Limited::new(
709            base64::read::DecoderReader::new(
710                SkipWhitespace::new(b64_reader),
711                &base64::engine::general_purpose::STANDARD,
712            ),
713            limits,
714        );
715        let t = Self::read_xdr_to_end(&mut dec)?;
716        Ok(t)
717    }
718}
719
720pub trait WriteXdr {
721    #[cfg(feature = "std")]
722    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error>;
723
724    #[cfg(feature = "std")]
725    fn to_xdr(&self, limits: Limits) -> Result<Vec<u8>, Error> {
726        let mut cursor = Limited::new(Cursor::new(vec![]), limits);
727        self.write_xdr(&mut cursor)?;
728        let bytes = cursor.inner.into_inner();
729        Ok(bytes)
730    }
731
732    #[cfg(feature = "base64")]
733    fn to_xdr_base64(&self, limits: Limits) -> Result<String, Error> {
734        let mut enc = Limited::new(
735            base64::write::EncoderStringWriter::new(&base64::engine::general_purpose::STANDARD),
736            limits,
737        );
738        self.write_xdr(&mut enc)?;
739        let b64 = enc.inner.into_inner();
740        Ok(b64)
741    }
742}
743
744/// `Pad_len` returns the number of bytes to pad an XDR value of the given
745/// length to make the final serialized size a multiple of 4.
746#[cfg(feature = "std")]
747fn pad_len(len: usize) -> usize {
748    (4 - (len % 4)) % 4
749}
750
751impl ReadXdr for i32 {
752    #[cfg(feature = "std")]
753    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
754        let mut b = [0u8; 4];
755        r.with_limited_depth(|r| {
756            r.consume_len(b.len())?;
757            r.read_exact(&mut b)?;
758            Ok(i32::from_be_bytes(b))
759        })
760    }
761}
762
763impl WriteXdr for i32 {
764    #[cfg(feature = "std")]
765    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
766        let b: [u8; 4] = self.to_be_bytes();
767        w.with_limited_depth(|w| {
768            w.consume_len(b.len())?;
769            Ok(w.write_all(&b)?)
770        })
771    }
772}
773
774impl ReadXdr for u32 {
775    #[cfg(feature = "std")]
776    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
777        let mut b = [0u8; 4];
778        r.with_limited_depth(|r| {
779            r.consume_len(b.len())?;
780            r.read_exact(&mut b)?;
781            Ok(u32::from_be_bytes(b))
782        })
783    }
784}
785
786impl WriteXdr for u32 {
787    #[cfg(feature = "std")]
788    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
789        let b: [u8; 4] = self.to_be_bytes();
790        w.with_limited_depth(|w| {
791            w.consume_len(b.len())?;
792            Ok(w.write_all(&b)?)
793        })
794    }
795}
796
797impl ReadXdr for i64 {
798    #[cfg(feature = "std")]
799    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
800        let mut b = [0u8; 8];
801        r.with_limited_depth(|r| {
802            r.consume_len(b.len())?;
803            r.read_exact(&mut b)?;
804            Ok(i64::from_be_bytes(b))
805        })
806    }
807}
808
809impl WriteXdr for i64 {
810    #[cfg(feature = "std")]
811    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
812        let b: [u8; 8] = self.to_be_bytes();
813        w.with_limited_depth(|w| {
814            w.consume_len(b.len())?;
815            Ok(w.write_all(&b)?)
816        })
817    }
818}
819
820impl ReadXdr for u64 {
821    #[cfg(feature = "std")]
822    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
823        let mut b = [0u8; 8];
824        r.with_limited_depth(|r| {
825            r.consume_len(b.len())?;
826            r.read_exact(&mut b)?;
827            Ok(u64::from_be_bytes(b))
828        })
829    }
830}
831
832impl WriteXdr for u64 {
833    #[cfg(feature = "std")]
834    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
835        let b: [u8; 8] = self.to_be_bytes();
836        w.with_limited_depth(|w| {
837            w.consume_len(b.len())?;
838            Ok(w.write_all(&b)?)
839        })
840    }
841}
842
843impl ReadXdr for f32 {
844    #[cfg(feature = "std")]
845    fn read_xdr<R: Read>(_r: &mut Limited<R>) -> Result<Self, Error> {
846        todo!()
847    }
848}
849
850impl WriteXdr for f32 {
851    #[cfg(feature = "std")]
852    fn write_xdr<W: Write>(&self, _w: &mut Limited<W>) -> Result<(), Error> {
853        todo!()
854    }
855}
856
857impl ReadXdr for f64 {
858    #[cfg(feature = "std")]
859    fn read_xdr<R: Read>(_r: &mut Limited<R>) -> Result<Self, Error> {
860        todo!()
861    }
862}
863
864impl WriteXdr for f64 {
865    #[cfg(feature = "std")]
866    fn write_xdr<W: Write>(&self, _w: &mut Limited<W>) -> Result<(), Error> {
867        todo!()
868    }
869}
870
871impl ReadXdr for bool {
872    #[cfg(feature = "std")]
873    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
874        r.with_limited_depth(|r| {
875            let i = u32::read_xdr(r)?;
876            let b = i == 1;
877            Ok(b)
878        })
879    }
880}
881
882impl WriteXdr for bool {
883    #[cfg(feature = "std")]
884    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
885        w.with_limited_depth(|w| {
886            let i = u32::from(*self); // true = 1, false = 0
887            i.write_xdr(w)
888        })
889    }
890}
891
892impl<T: ReadXdr> ReadXdr for Option<T> {
893    #[cfg(feature = "std")]
894    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
895        r.with_limited_depth(|r| {
896            let i = u32::read_xdr(r)?;
897            match i {
898                0 => Ok(None),
899                1 => {
900                    let t = T::read_xdr(r)?;
901                    Ok(Some(t))
902                }
903                _ => Err(Error::Invalid),
904            }
905        })
906    }
907}
908
909impl<T: WriteXdr> WriteXdr for Option<T> {
910    #[cfg(feature = "std")]
911    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
912        w.with_limited_depth(|w| {
913            if let Some(t) = self {
914                1u32.write_xdr(w)?;
915                t.write_xdr(w)?;
916            } else {
917                0u32.write_xdr(w)?;
918            }
919            Ok(())
920        })
921    }
922}
923
924impl<T: ReadXdr> ReadXdr for Box<T> {
925    #[cfg(feature = "std")]
926    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
927        r.with_limited_depth(|r| Ok(Box::new(T::read_xdr(r)?)))
928    }
929}
930
931impl<T: WriteXdr> WriteXdr for Box<T> {
932    #[cfg(feature = "std")]
933    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
934        w.with_limited_depth(|w| T::write_xdr(self, w))
935    }
936}
937
938impl ReadXdr for () {
939    #[cfg(feature = "std")]
940    fn read_xdr<R: Read>(_r: &mut Limited<R>) -> Result<Self, Error> {
941        Ok(())
942    }
943}
944
945impl WriteXdr for () {
946    #[cfg(feature = "std")]
947    fn write_xdr<W: Write>(&self, _w: &mut Limited<W>) -> Result<(), Error> {
948        Ok(())
949    }
950}
951
952impl<const N: usize> ReadXdr for [u8; N] {
953    #[cfg(feature = "std")]
954    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
955        r.with_limited_depth(|r| {
956            r.consume_len(N)?;
957            let padding = pad_len(N);
958            r.consume_len(padding)?;
959            let mut arr = [0u8; N];
960            r.read_exact(&mut arr)?;
961            let pad = &mut [0u8; 3][..padding];
962            r.read_exact(pad)?;
963            if pad.iter().any(|b| *b != 0) {
964                return Err(Error::NonZeroPadding);
965            }
966            Ok(arr)
967        })
968    }
969}
970
971impl<const N: usize> WriteXdr for [u8; N] {
972    #[cfg(feature = "std")]
973    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
974        w.with_limited_depth(|w| {
975            w.consume_len(N)?;
976            let padding = pad_len(N);
977            w.consume_len(padding)?;
978            w.write_all(self)?;
979            w.write_all(&[0u8; 3][..padding])?;
980            Ok(())
981        })
982    }
983}
984
985impl<T: ReadXdr, const N: usize> ReadXdr for [T; N] {
986    #[cfg(feature = "std")]
987    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
988        r.with_limited_depth(|r| {
989            let mut vec = Vec::with_capacity(N);
990            for _ in 0..N {
991                let t = T::read_xdr(r)?;
992                vec.push(t);
993            }
994            let arr: [T; N] = vec.try_into().unwrap_or_else(|_: Vec<T>| unreachable!());
995            Ok(arr)
996        })
997    }
998}
999
1000impl<T: WriteXdr, const N: usize> WriteXdr for [T; N] {
1001    #[cfg(feature = "std")]
1002    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
1003        w.with_limited_depth(|w| {
1004            for t in self {
1005                t.write_xdr(w)?;
1006            }
1007            Ok(())
1008        })
1009    }
1010}
1011
1012// VecM ------------------------------------------------------------------------
1013
1014#[cfg(feature = "alloc")]
1015#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
1016#[cfg_attr(
1017    feature = "serde",
1018    serde_with::serde_as,
1019    derive(serde::Serialize, serde::Deserialize)
1020)]
1021#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1022pub struct VecM<T, const MAX: u32 = { u32::MAX }>(Vec<T>);
1023
1024#[cfg(not(feature = "alloc"))]
1025#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
1026#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1027pub struct VecM<T, const MAX: u32 = { u32::MAX }>(Vec<T>)
1028where
1029    T: 'static;
1030
1031impl<T, const MAX: u32> Deref for VecM<T, MAX> {
1032    type Target = Vec<T>;
1033
1034    fn deref(&self) -> &Self::Target {
1035        &self.0
1036    }
1037}
1038
1039impl<T, const MAX: u32> Default for VecM<T, MAX> {
1040    fn default() -> Self {
1041        Self(Vec::default())
1042    }
1043}
1044
1045#[cfg(feature = "schemars")]
1046impl<T: schemars::JsonSchema, const MAX: u32> schemars::JsonSchema for VecM<T, MAX> {
1047    fn schema_name() -> String {
1048        format!("VecM<{}, {}>", T::schema_name(), MAX)
1049    }
1050
1051    fn is_referenceable() -> bool {
1052        false
1053    }
1054
1055    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
1056        let schema = Vec::<T>::json_schema(gen);
1057        if let schemars::schema::Schema::Object(mut schema) = schema {
1058            if let Some(array) = schema.array.clone() {
1059                schema.array = Some(Box::new(schemars::schema::ArrayValidation {
1060                    max_items: Some(MAX),
1061                    ..*array
1062                }));
1063            }
1064            schema.into()
1065        } else {
1066            schema
1067        }
1068    }
1069}
1070
1071#[cfg(feature = "schemars")]
1072impl<T, TA, const MAX: u32> serde_with::schemars_0_8::JsonSchemaAs<VecM<T, MAX>> for VecM<TA, MAX>
1073where
1074    TA: serde_with::schemars_0_8::JsonSchemaAs<T>,
1075{
1076    fn schema_name() -> String {
1077        <VecM<serde_with::Schema<T, TA>, MAX> as schemars::JsonSchema>::schema_name()
1078    }
1079
1080    fn schema_id() -> Cow<'static, str> {
1081        <VecM<serde_with::Schema<T, TA>, MAX> as schemars::JsonSchema>::schema_id()
1082    }
1083
1084    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
1085        <VecM<serde_with::Schema<T, TA>, MAX> as schemars::JsonSchema>::json_schema(gen)
1086    }
1087
1088    fn is_referenceable() -> bool {
1089        <VecM<serde_with::Schema<T, TA>, MAX> as schemars::JsonSchema>::is_referenceable()
1090    }
1091}
1092
1093#[cfg(feature = "serde")]
1094impl<T, U, const MAX: u32> serde_with::SerializeAs<VecM<T, MAX>> for VecM<U, MAX>
1095where
1096    U: serde_with::SerializeAs<T>,
1097{
1098    fn serialize_as<S>(source: &VecM<T, MAX>, serializer: S) -> Result<S::Ok, S::Error>
1099    where
1100        S: serde::Serializer,
1101    {
1102        serializer.collect_seq(
1103            source
1104                .iter()
1105                .map(|item| serde_with::ser::SerializeAsWrap::<T, U>::new(item)),
1106        )
1107    }
1108}
1109
1110#[cfg(feature = "serde")]
1111impl<'de, T, U, const MAX: u32> serde_with::DeserializeAs<'de, VecM<T, MAX>> for VecM<U, MAX>
1112where
1113    U: serde_with::DeserializeAs<'de, T>,
1114{
1115    fn deserialize_as<D>(deserializer: D) -> Result<VecM<T, MAX>, D::Error>
1116    where
1117        D: serde::Deserializer<'de>,
1118    {
1119        let vec = <Vec<U> as serde_with::DeserializeAs<Vec<T>>>::deserialize_as(deserializer)?;
1120        vec.try_into().map_err(serde::de::Error::custom)
1121    }
1122}
1123
1124impl<T, const MAX: u32> VecM<T, MAX> {
1125    pub const MAX_LEN: usize = { MAX as usize };
1126
1127    #[must_use]
1128    #[allow(clippy::unused_self)]
1129    pub fn max_len(&self) -> usize {
1130        Self::MAX_LEN
1131    }
1132
1133    #[must_use]
1134    pub fn as_vec(&self) -> &Vec<T> {
1135        self.as_ref()
1136    }
1137}
1138
1139#[cfg(feature = "alloc")]
1140impl<T, const MAX: u32> VecM<T, MAX> {
1141    pub fn iter_mut(&mut self) -> core::slice::IterMut<'_, T> {
1142        self.0.iter_mut()
1143    }
1144}
1145
1146#[cfg(feature = "alloc")]
1147impl<'a, T, const MAX: u32> core::iter::IntoIterator for &'a mut VecM<T, MAX> {
1148    type Item = &'a mut T;
1149    type IntoIter = core::slice::IterMut<'a, T>;
1150    fn into_iter(self) -> Self::IntoIter {
1151        self.iter_mut()
1152    }
1153}
1154
1155impl<T: Clone, const MAX: u32> VecM<T, MAX> {
1156    #[must_use]
1157    #[cfg(feature = "alloc")]
1158    pub fn to_vec(&self) -> Vec<T> {
1159        self.into()
1160    }
1161
1162    #[must_use]
1163    pub fn into_vec(self) -> Vec<T> {
1164        self.into()
1165    }
1166}
1167
1168impl<const MAX: u32> VecM<u8, MAX> {
1169    #[cfg(feature = "alloc")]
1170    pub fn to_string(&self) -> Result<String, Error> {
1171        self.try_into()
1172    }
1173
1174    #[cfg(feature = "alloc")]
1175    pub fn into_string(self) -> Result<String, Error> {
1176        self.try_into()
1177    }
1178
1179    #[cfg(feature = "alloc")]
1180    #[must_use]
1181    pub fn to_string_lossy(&self) -> String {
1182        String::from_utf8_lossy(&self.0).into_owned()
1183    }
1184
1185    #[cfg(feature = "alloc")]
1186    #[must_use]
1187    pub fn into_string_lossy(self) -> String {
1188        String::from_utf8_lossy(&self.0).into_owned()
1189    }
1190}
1191
1192impl<T: Clone> VecM<T, 1> {
1193    #[must_use]
1194    pub fn to_option(&self) -> Option<T> {
1195        if self.len() > 0 {
1196            Some(self.0[0].clone())
1197        } else {
1198            None
1199        }
1200    }
1201}
1202
1203#[cfg(not(feature = "alloc"))]
1204impl<T: Clone> From<VecM<T, 1>> for Option<T> {
1205    #[must_use]
1206    fn from(v: VecM<T, 1>) -> Self {
1207        v.to_option()
1208    }
1209}
1210
1211#[cfg(feature = "alloc")]
1212impl<T> VecM<T, 1> {
1213    #[must_use]
1214    pub fn into_option(mut self) -> Option<T> {
1215        self.0.drain(..).next()
1216    }
1217}
1218
1219#[cfg(feature = "alloc")]
1220impl<T> From<VecM<T, 1>> for Option<T> {
1221    #[must_use]
1222    fn from(v: VecM<T, 1>) -> Self {
1223        v.into_option()
1224    }
1225}
1226
1227impl<T, const MAX: u32> TryFrom<Vec<T>> for VecM<T, MAX> {
1228    type Error = Error;
1229
1230    fn try_from(v: Vec<T>) -> Result<Self, Error> {
1231        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1232        if len <= MAX {
1233            Ok(VecM(v))
1234        } else {
1235            Err(Error::LengthExceedsMax)
1236        }
1237    }
1238}
1239
1240impl<T, const MAX: u32> From<VecM<T, MAX>> for Vec<T> {
1241    #[must_use]
1242    fn from(v: VecM<T, MAX>) -> Self {
1243        v.0
1244    }
1245}
1246
1247#[cfg(feature = "alloc")]
1248impl<T: Clone, const MAX: u32> From<&VecM<T, MAX>> for Vec<T> {
1249    #[must_use]
1250    fn from(v: &VecM<T, MAX>) -> Self {
1251        v.0.clone()
1252    }
1253}
1254
1255impl<T, const MAX: u32> AsRef<Vec<T>> for VecM<T, MAX> {
1256    #[must_use]
1257    fn as_ref(&self) -> &Vec<T> {
1258        &self.0
1259    }
1260}
1261
1262#[cfg(feature = "alloc")]
1263impl<T: Clone, const MAX: u32> TryFrom<&Vec<T>> for VecM<T, MAX> {
1264    type Error = Error;
1265
1266    fn try_from(v: &Vec<T>) -> Result<Self, Error> {
1267        v.as_slice().try_into()
1268    }
1269}
1270
1271#[cfg(feature = "alloc")]
1272impl<T: Clone, const MAX: u32> TryFrom<&[T]> for VecM<T, MAX> {
1273    type Error = Error;
1274
1275    fn try_from(v: &[T]) -> Result<Self, Error> {
1276        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1277        if len <= MAX {
1278            Ok(VecM(v.to_vec()))
1279        } else {
1280            Err(Error::LengthExceedsMax)
1281        }
1282    }
1283}
1284
1285impl<T, const MAX: u32> AsRef<[T]> for VecM<T, MAX> {
1286    #[cfg(feature = "alloc")]
1287    #[must_use]
1288    fn as_ref(&self) -> &[T] {
1289        self.0.as_ref()
1290    }
1291    #[cfg(not(feature = "alloc"))]
1292    #[must_use]
1293    fn as_ref(&self) -> &[T] {
1294        self.0
1295    }
1296}
1297
1298#[cfg(feature = "alloc")]
1299impl<T: Clone, const N: usize, const MAX: u32> TryFrom<[T; N]> for VecM<T, MAX> {
1300    type Error = Error;
1301
1302    fn try_from(v: [T; N]) -> Result<Self, Error> {
1303        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1304        if len <= MAX {
1305            Ok(VecM(v.to_vec()))
1306        } else {
1307            Err(Error::LengthExceedsMax)
1308        }
1309    }
1310}
1311
1312#[cfg(feature = "alloc")]
1313impl<T: Clone, const N: usize, const MAX: u32> TryFrom<VecM<T, MAX>> for [T; N] {
1314    type Error = VecM<T, MAX>;
1315
1316    fn try_from(v: VecM<T, MAX>) -> core::result::Result<Self, Self::Error> {
1317        let s: [T; N] = v.0.try_into().map_err(|v: Vec<T>| VecM::<T, MAX>(v))?;
1318        Ok(s)
1319    }
1320}
1321
1322#[cfg(feature = "alloc")]
1323impl<T: Clone, const N: usize, const MAX: u32> TryFrom<&[T; N]> for VecM<T, MAX> {
1324    type Error = Error;
1325
1326    fn try_from(v: &[T; N]) -> Result<Self, Error> {
1327        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1328        if len <= MAX {
1329            Ok(VecM(v.to_vec()))
1330        } else {
1331            Err(Error::LengthExceedsMax)
1332        }
1333    }
1334}
1335
1336#[cfg(not(feature = "alloc"))]
1337impl<T: Clone, const N: usize, const MAX: u32> TryFrom<&'static [T; N]> for VecM<T, MAX> {
1338    type Error = Error;
1339
1340    fn try_from(v: &'static [T; N]) -> Result<Self, Error> {
1341        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1342        if len <= MAX {
1343            Ok(VecM(v))
1344        } else {
1345            Err(Error::LengthExceedsMax)
1346        }
1347    }
1348}
1349
1350#[cfg(feature = "alloc")]
1351impl<const MAX: u32> TryFrom<&String> for VecM<u8, MAX> {
1352    type Error = Error;
1353
1354    fn try_from(v: &String) -> Result<Self, Error> {
1355        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1356        if len <= MAX {
1357            Ok(VecM(v.as_bytes().to_vec()))
1358        } else {
1359            Err(Error::LengthExceedsMax)
1360        }
1361    }
1362}
1363
1364#[cfg(feature = "alloc")]
1365impl<const MAX: u32> TryFrom<String> for VecM<u8, MAX> {
1366    type Error = Error;
1367
1368    fn try_from(v: String) -> Result<Self, Error> {
1369        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1370        if len <= MAX {
1371            Ok(VecM(v.into()))
1372        } else {
1373            Err(Error::LengthExceedsMax)
1374        }
1375    }
1376}
1377
1378#[cfg(feature = "alloc")]
1379impl<const MAX: u32> TryFrom<VecM<u8, MAX>> for String {
1380    type Error = Error;
1381
1382    fn try_from(v: VecM<u8, MAX>) -> Result<Self, Error> {
1383        Ok(String::from_utf8(v.0)?)
1384    }
1385}
1386
1387#[cfg(feature = "alloc")]
1388impl<const MAX: u32> TryFrom<&VecM<u8, MAX>> for String {
1389    type Error = Error;
1390
1391    fn try_from(v: &VecM<u8, MAX>) -> Result<Self, Error> {
1392        Ok(core::str::from_utf8(v.as_ref())?.to_owned())
1393    }
1394}
1395
1396#[cfg(feature = "alloc")]
1397impl<const MAX: u32> TryFrom<&str> for VecM<u8, MAX> {
1398    type Error = Error;
1399
1400    fn try_from(v: &str) -> Result<Self, Error> {
1401        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1402        if len <= MAX {
1403            Ok(VecM(v.into()))
1404        } else {
1405            Err(Error::LengthExceedsMax)
1406        }
1407    }
1408}
1409
1410#[cfg(not(feature = "alloc"))]
1411impl<const MAX: u32> TryFrom<&'static str> for VecM<u8, MAX> {
1412    type Error = Error;
1413
1414    fn try_from(v: &'static str) -> Result<Self, Error> {
1415        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1416        if len <= MAX {
1417            Ok(VecM(v.as_bytes()))
1418        } else {
1419            Err(Error::LengthExceedsMax)
1420        }
1421    }
1422}
1423
1424impl<'a, const MAX: u32> TryFrom<&'a VecM<u8, MAX>> for &'a str {
1425    type Error = Error;
1426
1427    fn try_from(v: &'a VecM<u8, MAX>) -> Result<Self, Error> {
1428        Ok(core::str::from_utf8(v.as_ref())?)
1429    }
1430}
1431
1432impl<const MAX: u32> ReadXdr for VecM<u8, MAX> {
1433    #[cfg(feature = "std")]
1434    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
1435        r.with_limited_depth(|r| {
1436            let len: u32 = u32::read_xdr(r)?;
1437            if len > MAX {
1438                return Err(Error::LengthExceedsMax);
1439            }
1440
1441            r.consume_len(len as usize)?;
1442            let padding = pad_len(len as usize);
1443            r.consume_len(padding)?;
1444
1445            let mut vec = vec![0u8; len as usize];
1446            r.read_exact(&mut vec)?;
1447
1448            let pad = &mut [0u8; 3][..padding];
1449            r.read_exact(pad)?;
1450            if pad.iter().any(|b| *b != 0) {
1451                return Err(Error::NonZeroPadding);
1452            }
1453
1454            Ok(VecM(vec))
1455        })
1456    }
1457}
1458
1459impl<const MAX: u32> WriteXdr for VecM<u8, MAX> {
1460    #[cfg(feature = "std")]
1461    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
1462        w.with_limited_depth(|w| {
1463            let len: u32 = self.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1464            len.write_xdr(w)?;
1465
1466            w.consume_len(self.len())?;
1467            let padding = pad_len(self.len());
1468            w.consume_len(padding)?;
1469
1470            w.write_all(&self.0)?;
1471
1472            w.write_all(&[0u8; 3][..padding])?;
1473
1474            Ok(())
1475        })
1476    }
1477}
1478
1479impl<T: ReadXdr, const MAX: u32> ReadXdr for VecM<T, MAX> {
1480    #[cfg(feature = "std")]
1481    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
1482        r.with_limited_depth(|r| {
1483            let len = u32::read_xdr(r)?;
1484            if len > MAX {
1485                return Err(Error::LengthExceedsMax);
1486            }
1487
1488            let mut vec = Vec::new();
1489            for _ in 0..len {
1490                let t = T::read_xdr(r)?;
1491                vec.push(t);
1492            }
1493
1494            Ok(VecM(vec))
1495        })
1496    }
1497}
1498
1499impl<T: WriteXdr, const MAX: u32> WriteXdr for VecM<T, MAX> {
1500    #[cfg(feature = "std")]
1501    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
1502        w.with_limited_depth(|w| {
1503            let len: u32 = self.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1504            len.write_xdr(w)?;
1505
1506            for t in &self.0 {
1507                t.write_xdr(w)?;
1508            }
1509
1510            Ok(())
1511        })
1512    }
1513}
1514
1515// BytesM ------------------------------------------------------------------------
1516
1517#[cfg(feature = "alloc")]
1518#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
1519#[cfg_attr(
1520    feature = "serde",
1521    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
1522)]
1523#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1524pub struct BytesM<const MAX: u32 = { u32::MAX }>(Vec<u8>);
1525
1526#[cfg(not(feature = "alloc"))]
1527#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
1528#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1529pub struct BytesM<const MAX: u32 = { u32::MAX }>(Vec<u8>);
1530
1531impl<const MAX: u32> core::fmt::Display for BytesM<MAX> {
1532    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1533        #[cfg(feature = "alloc")]
1534        let v = &self.0;
1535        #[cfg(not(feature = "alloc"))]
1536        let v = self.0;
1537        for b in v {
1538            write!(f, "{b:02x}")?;
1539        }
1540        Ok(())
1541    }
1542}
1543
1544impl<const MAX: u32> core::fmt::Debug for BytesM<MAX> {
1545    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1546        #[cfg(feature = "alloc")]
1547        let v = &self.0;
1548        #[cfg(not(feature = "alloc"))]
1549        let v = self.0;
1550        write!(f, "BytesM(")?;
1551        for b in v {
1552            write!(f, "{b:02x}")?;
1553        }
1554        write!(f, ")")?;
1555        Ok(())
1556    }
1557}
1558
1559#[cfg(feature = "alloc")]
1560impl<const MAX: u32> core::str::FromStr for BytesM<MAX> {
1561    type Err = Error;
1562    fn from_str(s: &str) -> core::result::Result<Self, Self::Err> {
1563        hex::decode(s).map_err(|_| Error::InvalidHex)?.try_into()
1564    }
1565}
1566
1567impl<const MAX: u32> Deref for BytesM<MAX> {
1568    type Target = Vec<u8>;
1569
1570    fn deref(&self) -> &Self::Target {
1571        &self.0
1572    }
1573}
1574
1575#[cfg(feature = "schemars")]
1576impl<const MAX: u32> schemars::JsonSchema for BytesM<MAX> {
1577    fn schema_name() -> String {
1578        format!("BytesM<{MAX}>")
1579    }
1580
1581    fn is_referenceable() -> bool {
1582        false
1583    }
1584
1585    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
1586        let schema = String::json_schema(gen);
1587        if let schemars::schema::Schema::Object(mut schema) = schema {
1588            schema.extensions.insert(
1589                "contentEncoding".to_owned(),
1590                serde_json::Value::String("hex".to_string()),
1591            );
1592            schema.extensions.insert(
1593                "contentMediaType".to_owned(),
1594                serde_json::Value::String("application/binary".to_string()),
1595            );
1596            let string = *schema.string.unwrap_or_default().clone();
1597            schema.string = Some(Box::new(schemars::schema::StringValidation {
1598                max_length: MAX.checked_mul(2).map(Some).unwrap_or_default(),
1599                min_length: None,
1600                ..string
1601            }));
1602            schema.into()
1603        } else {
1604            schema
1605        }
1606    }
1607}
1608
1609impl<const MAX: u32> Default for BytesM<MAX> {
1610    fn default() -> Self {
1611        Self(Vec::default())
1612    }
1613}
1614
1615impl<const MAX: u32> BytesM<MAX> {
1616    pub const MAX_LEN: usize = { MAX as usize };
1617
1618    #[must_use]
1619    #[allow(clippy::unused_self)]
1620    pub fn max_len(&self) -> usize {
1621        Self::MAX_LEN
1622    }
1623
1624    #[must_use]
1625    pub fn as_vec(&self) -> &Vec<u8> {
1626        self.as_ref()
1627    }
1628}
1629
1630impl<const MAX: u32> BytesM<MAX> {
1631    #[must_use]
1632    #[cfg(feature = "alloc")]
1633    pub fn to_vec(&self) -> Vec<u8> {
1634        self.into()
1635    }
1636
1637    #[must_use]
1638    pub fn into_vec(self) -> Vec<u8> {
1639        self.into()
1640    }
1641}
1642
1643impl<const MAX: u32> BytesM<MAX> {
1644    #[cfg(feature = "alloc")]
1645    pub fn to_string(&self) -> Result<String, Error> {
1646        self.try_into()
1647    }
1648
1649    #[cfg(feature = "alloc")]
1650    pub fn into_string(self) -> Result<String, Error> {
1651        self.try_into()
1652    }
1653
1654    #[cfg(feature = "alloc")]
1655    #[must_use]
1656    pub fn to_string_lossy(&self) -> String {
1657        String::from_utf8_lossy(&self.0).into_owned()
1658    }
1659
1660    #[cfg(feature = "alloc")]
1661    #[must_use]
1662    pub fn into_string_lossy(self) -> String {
1663        String::from_utf8_lossy(&self.0).into_owned()
1664    }
1665}
1666
1667impl<const MAX: u32> TryFrom<Vec<u8>> for BytesM<MAX> {
1668    type Error = Error;
1669
1670    fn try_from(v: Vec<u8>) -> Result<Self, Error> {
1671        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1672        if len <= MAX {
1673            Ok(BytesM(v))
1674        } else {
1675            Err(Error::LengthExceedsMax)
1676        }
1677    }
1678}
1679
1680impl<const MAX: u32> From<BytesM<MAX>> for Vec<u8> {
1681    #[must_use]
1682    fn from(v: BytesM<MAX>) -> Self {
1683        v.0
1684    }
1685}
1686
1687#[cfg(feature = "alloc")]
1688impl<const MAX: u32> From<&BytesM<MAX>> for Vec<u8> {
1689    #[must_use]
1690    fn from(v: &BytesM<MAX>) -> Self {
1691        v.0.clone()
1692    }
1693}
1694
1695impl<const MAX: u32> AsRef<Vec<u8>> for BytesM<MAX> {
1696    #[must_use]
1697    fn as_ref(&self) -> &Vec<u8> {
1698        &self.0
1699    }
1700}
1701
1702#[cfg(feature = "alloc")]
1703impl<const MAX: u32> TryFrom<&Vec<u8>> for BytesM<MAX> {
1704    type Error = Error;
1705
1706    fn try_from(v: &Vec<u8>) -> Result<Self, Error> {
1707        v.as_slice().try_into()
1708    }
1709}
1710
1711#[cfg(feature = "alloc")]
1712impl<const MAX: u32> TryFrom<&[u8]> for BytesM<MAX> {
1713    type Error = Error;
1714
1715    fn try_from(v: &[u8]) -> Result<Self, Error> {
1716        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1717        if len <= MAX {
1718            Ok(BytesM(v.to_vec()))
1719        } else {
1720            Err(Error::LengthExceedsMax)
1721        }
1722    }
1723}
1724
1725impl<const MAX: u32> AsRef<[u8]> for BytesM<MAX> {
1726    #[cfg(feature = "alloc")]
1727    #[must_use]
1728    fn as_ref(&self) -> &[u8] {
1729        self.0.as_ref()
1730    }
1731    #[cfg(not(feature = "alloc"))]
1732    #[must_use]
1733    fn as_ref(&self) -> &[u8] {
1734        self.0
1735    }
1736}
1737
1738#[cfg(feature = "alloc")]
1739impl<const N: usize, const MAX: u32> TryFrom<[u8; N]> for BytesM<MAX> {
1740    type Error = Error;
1741
1742    fn try_from(v: [u8; N]) -> Result<Self, Error> {
1743        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1744        if len <= MAX {
1745            Ok(BytesM(v.to_vec()))
1746        } else {
1747            Err(Error::LengthExceedsMax)
1748        }
1749    }
1750}
1751
1752#[cfg(feature = "alloc")]
1753impl<const N: usize, const MAX: u32> TryFrom<BytesM<MAX>> for [u8; N] {
1754    type Error = BytesM<MAX>;
1755
1756    fn try_from(v: BytesM<MAX>) -> core::result::Result<Self, Self::Error> {
1757        let s: [u8; N] = v.0.try_into().map_err(BytesM::<MAX>)?;
1758        Ok(s)
1759    }
1760}
1761
1762#[cfg(feature = "alloc")]
1763impl<const N: usize, const MAX: u32> TryFrom<&[u8; N]> for BytesM<MAX> {
1764    type Error = Error;
1765
1766    fn try_from(v: &[u8; N]) -> Result<Self, Error> {
1767        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1768        if len <= MAX {
1769            Ok(BytesM(v.to_vec()))
1770        } else {
1771            Err(Error::LengthExceedsMax)
1772        }
1773    }
1774}
1775
1776#[cfg(not(feature = "alloc"))]
1777impl<const N: usize, const MAX: u32> TryFrom<&'static [u8; N]> for BytesM<MAX> {
1778    type Error = Error;
1779
1780    fn try_from(v: &'static [u8; N]) -> Result<Self, Error> {
1781        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1782        if len <= MAX {
1783            Ok(BytesM(v))
1784        } else {
1785            Err(Error::LengthExceedsMax)
1786        }
1787    }
1788}
1789
1790#[cfg(feature = "alloc")]
1791impl<const MAX: u32> TryFrom<&String> for BytesM<MAX> {
1792    type Error = Error;
1793
1794    fn try_from(v: &String) -> Result<Self, Error> {
1795        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1796        if len <= MAX {
1797            Ok(BytesM(v.as_bytes().to_vec()))
1798        } else {
1799            Err(Error::LengthExceedsMax)
1800        }
1801    }
1802}
1803
1804#[cfg(feature = "alloc")]
1805impl<const MAX: u32> TryFrom<String> for BytesM<MAX> {
1806    type Error = Error;
1807
1808    fn try_from(v: String) -> Result<Self, Error> {
1809        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1810        if len <= MAX {
1811            Ok(BytesM(v.into()))
1812        } else {
1813            Err(Error::LengthExceedsMax)
1814        }
1815    }
1816}
1817
1818#[cfg(feature = "alloc")]
1819impl<const MAX: u32> TryFrom<BytesM<MAX>> for String {
1820    type Error = Error;
1821
1822    fn try_from(v: BytesM<MAX>) -> Result<Self, Error> {
1823        Ok(String::from_utf8(v.0)?)
1824    }
1825}
1826
1827#[cfg(feature = "alloc")]
1828impl<const MAX: u32> TryFrom<&BytesM<MAX>> for String {
1829    type Error = Error;
1830
1831    fn try_from(v: &BytesM<MAX>) -> Result<Self, Error> {
1832        Ok(core::str::from_utf8(v.as_ref())?.to_owned())
1833    }
1834}
1835
1836#[cfg(feature = "alloc")]
1837impl<const MAX: u32> TryFrom<&str> for BytesM<MAX> {
1838    type Error = Error;
1839
1840    fn try_from(v: &str) -> Result<Self, Error> {
1841        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1842        if len <= MAX {
1843            Ok(BytesM(v.into()))
1844        } else {
1845            Err(Error::LengthExceedsMax)
1846        }
1847    }
1848}
1849
1850#[cfg(not(feature = "alloc"))]
1851impl<const MAX: u32> TryFrom<&'static str> for BytesM<MAX> {
1852    type Error = Error;
1853
1854    fn try_from(v: &'static str) -> Result<Self, Error> {
1855        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1856        if len <= MAX {
1857            Ok(BytesM(v.as_bytes()))
1858        } else {
1859            Err(Error::LengthExceedsMax)
1860        }
1861    }
1862}
1863
1864impl<'a, const MAX: u32> TryFrom<&'a BytesM<MAX>> for &'a str {
1865    type Error = Error;
1866
1867    fn try_from(v: &'a BytesM<MAX>) -> Result<Self, Error> {
1868        Ok(core::str::from_utf8(v.as_ref())?)
1869    }
1870}
1871
1872impl<const MAX: u32> ReadXdr for BytesM<MAX> {
1873    #[cfg(feature = "std")]
1874    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
1875        r.with_limited_depth(|r| {
1876            let len: u32 = u32::read_xdr(r)?;
1877            if len > MAX {
1878                return Err(Error::LengthExceedsMax);
1879            }
1880
1881            r.consume_len(len as usize)?;
1882            let padding = pad_len(len as usize);
1883            r.consume_len(padding)?;
1884
1885            let mut vec = vec![0u8; len as usize];
1886            r.read_exact(&mut vec)?;
1887
1888            let pad = &mut [0u8; 3][..padding];
1889            r.read_exact(pad)?;
1890            if pad.iter().any(|b| *b != 0) {
1891                return Err(Error::NonZeroPadding);
1892            }
1893
1894            Ok(BytesM(vec))
1895        })
1896    }
1897}
1898
1899impl<const MAX: u32> WriteXdr for BytesM<MAX> {
1900    #[cfg(feature = "std")]
1901    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
1902        w.with_limited_depth(|w| {
1903            let len: u32 = self.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
1904            len.write_xdr(w)?;
1905
1906            w.consume_len(self.len())?;
1907            let padding = pad_len(self.len());
1908            w.consume_len(padding)?;
1909
1910            w.write_all(&self.0)?;
1911
1912            w.write_all(&[0u8; 3][..pad_len(len as usize)])?;
1913
1914            Ok(())
1915        })
1916    }
1917}
1918
1919// StringM ------------------------------------------------------------------------
1920
1921/// A string type that contains arbitrary bytes.
1922///
1923/// Convertible, fallibly, to/from a Rust UTF-8 String using
1924/// [`TryFrom`]/[`TryInto`]/[`StringM::to_utf8_string`].
1925///
1926/// Convertible, lossyly, to a Rust UTF-8 String using
1927/// [`StringM::to_utf8_string_lossy`].
1928///
1929/// Convertible to/from escaped printable-ASCII using
1930/// [`Display`]/[`ToString`]/[`FromStr`].
1931
1932#[cfg(feature = "alloc")]
1933#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
1934#[cfg_attr(
1935    feature = "serde",
1936    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
1937)]
1938#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1939pub struct StringM<const MAX: u32 = { u32::MAX }>(Vec<u8>);
1940
1941#[cfg(not(feature = "alloc"))]
1942#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
1943#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
1944pub struct StringM<const MAX: u32 = { u32::MAX }>(Vec<u8>);
1945
1946impl<const MAX: u32> core::fmt::Display for StringM<MAX> {
1947    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1948        #[cfg(feature = "alloc")]
1949        let v = &self.0;
1950        #[cfg(not(feature = "alloc"))]
1951        let v = self.0;
1952        for b in escape_bytes::Escape::new(v) {
1953            write!(f, "{}", b as char)?;
1954        }
1955        Ok(())
1956    }
1957}
1958
1959impl<const MAX: u32> core::fmt::Debug for StringM<MAX> {
1960    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1961        #[cfg(feature = "alloc")]
1962        let v = &self.0;
1963        #[cfg(not(feature = "alloc"))]
1964        let v = self.0;
1965        write!(f, "StringM(")?;
1966        for b in escape_bytes::Escape::new(v) {
1967            write!(f, "{}", b as char)?;
1968        }
1969        write!(f, ")")?;
1970        Ok(())
1971    }
1972}
1973
1974#[cfg(feature = "alloc")]
1975impl<const MAX: u32> core::str::FromStr for StringM<MAX> {
1976    type Err = Error;
1977    fn from_str(s: &str) -> core::result::Result<Self, Self::Err> {
1978        let b = escape_bytes::unescape(s.as_bytes()).map_err(|_| Error::Invalid)?;
1979        Ok(Self(b))
1980    }
1981}
1982
1983impl<const MAX: u32> Deref for StringM<MAX> {
1984    type Target = Vec<u8>;
1985
1986    fn deref(&self) -> &Self::Target {
1987        &self.0
1988    }
1989}
1990
1991impl<const MAX: u32> Default for StringM<MAX> {
1992    fn default() -> Self {
1993        Self(Vec::default())
1994    }
1995}
1996
1997#[cfg(feature = "schemars")]
1998impl<const MAX: u32> schemars::JsonSchema for StringM<MAX> {
1999    fn schema_name() -> String {
2000        format!("StringM<{MAX}>")
2001    }
2002
2003    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
2004        let schema = String::json_schema(gen);
2005        if let schemars::schema::Schema::Object(mut schema) = schema {
2006            let string = *schema.string.unwrap_or_default().clone();
2007            schema.string = Some(Box::new(schemars::schema::StringValidation {
2008                max_length: Some(MAX),
2009                ..string
2010            }));
2011            schema.into()
2012        } else {
2013            schema
2014        }
2015    }
2016}
2017
2018impl<const MAX: u32> StringM<MAX> {
2019    pub const MAX_LEN: usize = { MAX as usize };
2020
2021    #[must_use]
2022    #[allow(clippy::unused_self)]
2023    pub fn max_len(&self) -> usize {
2024        Self::MAX_LEN
2025    }
2026
2027    #[must_use]
2028    pub fn as_vec(&self) -> &Vec<u8> {
2029        self.as_ref()
2030    }
2031}
2032
2033impl<const MAX: u32> StringM<MAX> {
2034    #[must_use]
2035    #[cfg(feature = "alloc")]
2036    pub fn to_vec(&self) -> Vec<u8> {
2037        self.into()
2038    }
2039
2040    #[must_use]
2041    pub fn into_vec(self) -> Vec<u8> {
2042        self.into()
2043    }
2044}
2045
2046impl<const MAX: u32> StringM<MAX> {
2047    #[cfg(feature = "alloc")]
2048    pub fn to_utf8_string(&self) -> Result<String, Error> {
2049        self.try_into()
2050    }
2051
2052    #[cfg(feature = "alloc")]
2053    pub fn into_utf8_string(self) -> Result<String, Error> {
2054        self.try_into()
2055    }
2056
2057    #[cfg(feature = "alloc")]
2058    #[must_use]
2059    pub fn to_utf8_string_lossy(&self) -> String {
2060        String::from_utf8_lossy(&self.0).into_owned()
2061    }
2062
2063    #[cfg(feature = "alloc")]
2064    #[must_use]
2065    pub fn into_utf8_string_lossy(self) -> String {
2066        String::from_utf8_lossy(&self.0).into_owned()
2067    }
2068}
2069
2070impl<const MAX: u32> TryFrom<Vec<u8>> for StringM<MAX> {
2071    type Error = Error;
2072
2073    fn try_from(v: Vec<u8>) -> Result<Self, Error> {
2074        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
2075        if len <= MAX {
2076            Ok(StringM(v))
2077        } else {
2078            Err(Error::LengthExceedsMax)
2079        }
2080    }
2081}
2082
2083impl<const MAX: u32> From<StringM<MAX>> for Vec<u8> {
2084    #[must_use]
2085    fn from(v: StringM<MAX>) -> Self {
2086        v.0
2087    }
2088}
2089
2090#[cfg(feature = "alloc")]
2091impl<const MAX: u32> From<&StringM<MAX>> for Vec<u8> {
2092    #[must_use]
2093    fn from(v: &StringM<MAX>) -> Self {
2094        v.0.clone()
2095    }
2096}
2097
2098impl<const MAX: u32> AsRef<Vec<u8>> for StringM<MAX> {
2099    #[must_use]
2100    fn as_ref(&self) -> &Vec<u8> {
2101        &self.0
2102    }
2103}
2104
2105#[cfg(feature = "alloc")]
2106impl<const MAX: u32> TryFrom<&Vec<u8>> for StringM<MAX> {
2107    type Error = Error;
2108
2109    fn try_from(v: &Vec<u8>) -> Result<Self, Error> {
2110        v.as_slice().try_into()
2111    }
2112}
2113
2114#[cfg(feature = "alloc")]
2115impl<const MAX: u32> TryFrom<&[u8]> for StringM<MAX> {
2116    type Error = Error;
2117
2118    fn try_from(v: &[u8]) -> Result<Self, Error> {
2119        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
2120        if len <= MAX {
2121            Ok(StringM(v.to_vec()))
2122        } else {
2123            Err(Error::LengthExceedsMax)
2124        }
2125    }
2126}
2127
2128impl<const MAX: u32> AsRef<[u8]> for StringM<MAX> {
2129    #[cfg(feature = "alloc")]
2130    #[must_use]
2131    fn as_ref(&self) -> &[u8] {
2132        self.0.as_ref()
2133    }
2134    #[cfg(not(feature = "alloc"))]
2135    #[must_use]
2136    fn as_ref(&self) -> &[u8] {
2137        self.0
2138    }
2139}
2140
2141#[cfg(feature = "alloc")]
2142impl<const N: usize, const MAX: u32> TryFrom<[u8; N]> for StringM<MAX> {
2143    type Error = Error;
2144
2145    fn try_from(v: [u8; N]) -> Result<Self, Error> {
2146        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
2147        if len <= MAX {
2148            Ok(StringM(v.to_vec()))
2149        } else {
2150            Err(Error::LengthExceedsMax)
2151        }
2152    }
2153}
2154
2155#[cfg(feature = "alloc")]
2156impl<const N: usize, const MAX: u32> TryFrom<StringM<MAX>> for [u8; N] {
2157    type Error = StringM<MAX>;
2158
2159    fn try_from(v: StringM<MAX>) -> core::result::Result<Self, Self::Error> {
2160        let s: [u8; N] = v.0.try_into().map_err(StringM::<MAX>)?;
2161        Ok(s)
2162    }
2163}
2164
2165#[cfg(feature = "alloc")]
2166impl<const N: usize, const MAX: u32> TryFrom<&[u8; N]> for StringM<MAX> {
2167    type Error = Error;
2168
2169    fn try_from(v: &[u8; N]) -> Result<Self, Error> {
2170        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
2171        if len <= MAX {
2172            Ok(StringM(v.to_vec()))
2173        } else {
2174            Err(Error::LengthExceedsMax)
2175        }
2176    }
2177}
2178
2179#[cfg(not(feature = "alloc"))]
2180impl<const N: usize, const MAX: u32> TryFrom<&'static [u8; N]> for StringM<MAX> {
2181    type Error = Error;
2182
2183    fn try_from(v: &'static [u8; N]) -> Result<Self, Error> {
2184        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
2185        if len <= MAX {
2186            Ok(StringM(v))
2187        } else {
2188            Err(Error::LengthExceedsMax)
2189        }
2190    }
2191}
2192
2193#[cfg(feature = "alloc")]
2194impl<const MAX: u32> TryFrom<&String> for StringM<MAX> {
2195    type Error = Error;
2196
2197    fn try_from(v: &String) -> Result<Self, Error> {
2198        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
2199        if len <= MAX {
2200            Ok(StringM(v.as_bytes().to_vec()))
2201        } else {
2202            Err(Error::LengthExceedsMax)
2203        }
2204    }
2205}
2206
2207#[cfg(feature = "alloc")]
2208impl<const MAX: u32> TryFrom<String> for StringM<MAX> {
2209    type Error = Error;
2210
2211    fn try_from(v: String) -> Result<Self, Error> {
2212        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
2213        if len <= MAX {
2214            Ok(StringM(v.into()))
2215        } else {
2216            Err(Error::LengthExceedsMax)
2217        }
2218    }
2219}
2220
2221#[cfg(feature = "alloc")]
2222impl<const MAX: u32> TryFrom<StringM<MAX>> for String {
2223    type Error = Error;
2224
2225    fn try_from(v: StringM<MAX>) -> Result<Self, Error> {
2226        Ok(String::from_utf8(v.0)?)
2227    }
2228}
2229
2230#[cfg(feature = "alloc")]
2231impl<const MAX: u32> TryFrom<&StringM<MAX>> for String {
2232    type Error = Error;
2233
2234    fn try_from(v: &StringM<MAX>) -> Result<Self, Error> {
2235        Ok(core::str::from_utf8(v.as_ref())?.to_owned())
2236    }
2237}
2238
2239#[cfg(feature = "alloc")]
2240impl<const MAX: u32> TryFrom<&str> for StringM<MAX> {
2241    type Error = Error;
2242
2243    fn try_from(v: &str) -> Result<Self, Error> {
2244        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
2245        if len <= MAX {
2246            Ok(StringM(v.into()))
2247        } else {
2248            Err(Error::LengthExceedsMax)
2249        }
2250    }
2251}
2252
2253#[cfg(not(feature = "alloc"))]
2254impl<const MAX: u32> TryFrom<&'static str> for StringM<MAX> {
2255    type Error = Error;
2256
2257    fn try_from(v: &'static str) -> Result<Self, Error> {
2258        let len: u32 = v.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
2259        if len <= MAX {
2260            Ok(StringM(v.as_bytes()))
2261        } else {
2262            Err(Error::LengthExceedsMax)
2263        }
2264    }
2265}
2266
2267impl<'a, const MAX: u32> TryFrom<&'a StringM<MAX>> for &'a str {
2268    type Error = Error;
2269
2270    fn try_from(v: &'a StringM<MAX>) -> Result<Self, Error> {
2271        Ok(core::str::from_utf8(v.as_ref())?)
2272    }
2273}
2274
2275impl<const MAX: u32> ReadXdr for StringM<MAX> {
2276    #[cfg(feature = "std")]
2277    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
2278        r.with_limited_depth(|r| {
2279            let len: u32 = u32::read_xdr(r)?;
2280            if len > MAX {
2281                return Err(Error::LengthExceedsMax);
2282            }
2283
2284            r.consume_len(len as usize)?;
2285            let padding = pad_len(len as usize);
2286            r.consume_len(padding)?;
2287
2288            let mut vec = vec![0u8; len as usize];
2289            r.read_exact(&mut vec)?;
2290
2291            let pad = &mut [0u8; 3][..padding];
2292            r.read_exact(pad)?;
2293            if pad.iter().any(|b| *b != 0) {
2294                return Err(Error::NonZeroPadding);
2295            }
2296
2297            Ok(StringM(vec))
2298        })
2299    }
2300}
2301
2302impl<const MAX: u32> WriteXdr for StringM<MAX> {
2303    #[cfg(feature = "std")]
2304    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
2305        w.with_limited_depth(|w| {
2306            let len: u32 = self.len().try_into().map_err(|_| Error::LengthExceedsMax)?;
2307            len.write_xdr(w)?;
2308
2309            w.consume_len(self.len())?;
2310            let padding = pad_len(self.len());
2311            w.consume_len(padding)?;
2312
2313            w.write_all(&self.0)?;
2314
2315            w.write_all(&[0u8; 3][..padding])?;
2316
2317            Ok(())
2318        })
2319    }
2320}
2321
2322// Frame ------------------------------------------------------------------------
2323
2324#[derive(Default, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
2325#[cfg_attr(
2326    all(feature = "serde", feature = "alloc"),
2327    derive(serde::Serialize, serde::Deserialize),
2328    serde(rename_all = "snake_case")
2329)]
2330pub struct Frame<T>(pub T)
2331where
2332    T: ReadXdr;
2333
2334#[cfg(feature = "schemars")]
2335impl<T: schemars::JsonSchema + ReadXdr> schemars::JsonSchema for Frame<T> {
2336    fn schema_name() -> String {
2337        format!("Frame<{}>", T::schema_name())
2338    }
2339
2340    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
2341        T::json_schema(gen)
2342    }
2343}
2344
2345impl<T> ReadXdr for Frame<T>
2346where
2347    T: ReadXdr,
2348{
2349    #[cfg(feature = "std")]
2350    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
2351        // Read the frame header value that contains 1 flag-bit and a 33-bit length.
2352        //  - The 1 flag bit is 0 when there are more frames for the same record.
2353        //  - The 31-bit length is the length of the bytes within the frame that
2354        //  follow the frame header.
2355        let header = u32::read_xdr(r)?;
2356        // TODO: Use the length and cap the length we'll read from `r`.
2357        let last_record = header >> 31 == 1;
2358        if last_record {
2359            // Read the record in the frame.
2360            Ok(Self(T::read_xdr(r)?))
2361        } else {
2362            // TODO: Support reading those additional frames for the same
2363            // record.
2364            Err(Error::Unsupported)
2365        }
2366    }
2367}
2368
2369/// Forwards read operations to the wrapped object, skipping over any
2370/// whitespace.
2371#[cfg(feature = "std")]
2372pub struct SkipWhitespace<R: Read> {
2373    pub inner: R,
2374}
2375
2376#[cfg(feature = "std")]
2377impl<R: Read> SkipWhitespace<R> {
2378    pub fn new(inner: R) -> Self {
2379        SkipWhitespace { inner }
2380    }
2381}
2382
2383#[cfg(feature = "std")]
2384impl<R: Read> Read for SkipWhitespace<R> {
2385    fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
2386        let n = self.inner.read(buf)?;
2387
2388        let mut written = 0;
2389        for read in 0..n {
2390            if !buf[read].is_ascii_whitespace() {
2391                buf[written] = buf[read];
2392                written += 1;
2393            }
2394        }
2395
2396        Ok(written)
2397    }
2398}
2399
2400#[cfg(all(test, feature = "std"))]
2401mod test_skip_whitespace {
2402    use super::*;
2403
2404    #[test]
2405    fn test() {
2406        struct Test {
2407            input: &'static [u8],
2408            output: &'static [u8],
2409        }
2410        let tests = [
2411            Test {
2412                input: b"",
2413                output: b"",
2414            },
2415            Test {
2416                input: b" \n\t\r",
2417                output: b"",
2418            },
2419            Test {
2420                input: b"a c",
2421                output: b"ac",
2422            },
2423            Test {
2424                input: b"ab cd",
2425                output: b"abcd",
2426            },
2427            Test {
2428                input: b" ab \n cd ",
2429                output: b"abcd",
2430            },
2431        ];
2432        for (i, t) in tests.iter().enumerate() {
2433            let mut skip = SkipWhitespace::new(t.input);
2434            let mut output = Vec::new();
2435            skip.read_to_end(&mut output).unwrap();
2436            assert_eq!(output, t.output, "#{i}");
2437        }
2438    }
2439}
2440
2441// NumberOrString ---------------------------------------------------------------
2442
2443/// NumberOrString is a serde_as serializer/deserializer.
2444///
2445/// It deserializers any integer that fits into a 64-bit value into an i64 or u64 field from either
2446/// a JSON Number or JSON String value.
2447///
2448/// It serializes always to a string.
2449///
2450/// It has a JsonSchema implementation that only advertises that the allowed format is a String.
2451/// This is because the type is intended to soften the changing of fields from JSON Number to JSON
2452/// String by permitting deserialization, but discourage new uses of JSON Number.
2453#[cfg(feature = "serde")]
2454struct NumberOrString;
2455
2456#[cfg(feature = "serde")]
2457impl<'de> serde_with::DeserializeAs<'de, i64> for NumberOrString {
2458    fn deserialize_as<D>(deserializer: D) -> Result<i64, D::Error>
2459    where
2460        D: serde::Deserializer<'de>,
2461    {
2462        use serde::Deserialize;
2463        #[derive(Deserialize)]
2464        #[serde(untagged)]
2465        enum I64OrString<'a> {
2466            Str(&'a str),
2467            String(String),
2468            I64(i64),
2469        }
2470        match I64OrString::deserialize(deserializer)? {
2471            I64OrString::Str(s) => s.parse().map_err(serde::de::Error::custom),
2472            I64OrString::String(s) => s.parse().map_err(serde::de::Error::custom),
2473            I64OrString::I64(v) => Ok(v),
2474        }
2475    }
2476}
2477
2478#[cfg(feature = "serde")]
2479impl<'de> serde_with::DeserializeAs<'de, u64> for NumberOrString {
2480    fn deserialize_as<D>(deserializer: D) -> Result<u64, D::Error>
2481    where
2482        D: serde::Deserializer<'de>,
2483    {
2484        use serde::Deserialize;
2485        #[derive(Deserialize)]
2486        #[serde(untagged)]
2487        enum U64OrString<'a> {
2488            Str(&'a str),
2489            String(String),
2490            U64(u64),
2491        }
2492        match U64OrString::deserialize(deserializer)? {
2493            U64OrString::Str(s) => s.parse().map_err(serde::de::Error::custom),
2494            U64OrString::String(s) => s.parse().map_err(serde::de::Error::custom),
2495            U64OrString::U64(v) => Ok(v),
2496        }
2497    }
2498}
2499
2500#[cfg(feature = "serde")]
2501impl serde_with::SerializeAs<i64> for NumberOrString {
2502    fn serialize_as<S>(source: &i64, serializer: S) -> Result<S::Ok, S::Error>
2503    where
2504        S: serde::Serializer,
2505    {
2506        serializer.collect_str(source)
2507    }
2508}
2509
2510#[cfg(feature = "serde")]
2511impl serde_with::SerializeAs<u64> for NumberOrString {
2512    fn serialize_as<S>(source: &u64, serializer: S) -> Result<S::Ok, S::Error>
2513    where
2514        S: serde::Serializer,
2515    {
2516        serializer.collect_str(source)
2517    }
2518}
2519
2520#[cfg(feature = "schemars")]
2521impl<T> serde_with::schemars_0_8::JsonSchemaAs<T> for NumberOrString {
2522    fn schema_name() -> String {
2523        <String as schemars::JsonSchema>::schema_name()
2524    }
2525
2526    fn schema_id() -> std::borrow::Cow<'static, str> {
2527        <String as schemars::JsonSchema>::schema_id()
2528    }
2529
2530    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
2531        <String as schemars::JsonSchema>::json_schema(gen)
2532    }
2533
2534    fn is_referenceable() -> bool {
2535        <String as schemars::JsonSchema>::is_referenceable()
2536    }
2537}
2538
2539// Tests ------------------------------------------------------------------------
2540
2541#[cfg(all(test, feature = "std"))]
2542mod tests {
2543    use std::io::Cursor;
2544
2545    use super::*;
2546
2547    #[test]
2548    pub fn vec_u8_read_without_padding() {
2549        let buf = Cursor::new(vec![0, 0, 0, 4, 2, 2, 2, 2]);
2550        let v = VecM::<u8, 8>::read_xdr(&mut Limited::new(buf, Limits::none())).unwrap();
2551        assert_eq!(v.to_vec(), vec![2, 2, 2, 2]);
2552    }
2553
2554    #[test]
2555    pub fn vec_u8_read_with_padding() {
2556        let buf = Cursor::new(vec![0, 0, 0, 1, 2, 0, 0, 0]);
2557        let v = VecM::<u8, 8>::read_xdr(&mut Limited::new(buf, Limits::none())).unwrap();
2558        assert_eq!(v.to_vec(), vec![2]);
2559    }
2560
2561    #[test]
2562    pub fn vec_u8_read_with_insufficient_padding() {
2563        let buf = Cursor::new(vec![0, 0, 0, 1, 2, 0, 0]);
2564        let res = VecM::<u8, 8>::read_xdr(&mut Limited::new(buf, Limits::none()));
2565        match res {
2566            Err(Error::Io(_)) => (),
2567            _ => panic!("expected IO error got {res:?}"),
2568        }
2569    }
2570
2571    #[test]
2572    pub fn vec_u8_read_with_non_zero_padding() {
2573        let buf = Cursor::new(vec![0, 0, 0, 1, 2, 3, 0, 0]);
2574        let res = VecM::<u8, 8>::read_xdr(&mut Limited::new(buf, Limits::none()));
2575        match res {
2576            Err(Error::NonZeroPadding) => (),
2577            _ => panic!("expected NonZeroPadding got {res:?}"),
2578        }
2579    }
2580
2581    #[test]
2582    pub fn vec_u8_write_without_padding() {
2583        let mut buf = vec![];
2584        let v: VecM<u8, 8> = vec![2, 2, 2, 2].try_into().unwrap();
2585
2586        v.write_xdr(&mut Limited::new(Cursor::new(&mut buf), Limits::none()))
2587            .unwrap();
2588        assert_eq!(buf, vec![0, 0, 0, 4, 2, 2, 2, 2]);
2589    }
2590
2591    #[test]
2592    pub fn vec_u8_write_with_padding() {
2593        let mut buf = vec![];
2594        let v: VecM<u8, 8> = vec![2].try_into().unwrap();
2595        v.write_xdr(&mut Limited::new(Cursor::new(&mut buf), Limits::none()))
2596            .unwrap();
2597        assert_eq!(buf, vec![0, 0, 0, 1, 2, 0, 0, 0]);
2598    }
2599
2600    #[test]
2601    pub fn arr_u8_read_without_padding() {
2602        let buf = Cursor::new(vec![2, 2, 2, 2]);
2603        let v = <[u8; 4]>::read_xdr(&mut Limited::new(buf, Limits::none())).unwrap();
2604        assert_eq!(v, [2, 2, 2, 2]);
2605    }
2606
2607    #[test]
2608    pub fn arr_u8_read_with_padding() {
2609        let buf = Cursor::new(vec![2, 0, 0, 0]);
2610        let v = <[u8; 1]>::read_xdr(&mut Limited::new(buf, Limits::none())).unwrap();
2611        assert_eq!(v, [2]);
2612    }
2613
2614    #[test]
2615    pub fn arr_u8_read_with_insufficient_padding() {
2616        let buf = Cursor::new(vec![2, 0, 0]);
2617        let res = <[u8; 1]>::read_xdr(&mut Limited::new(buf, Limits::none()));
2618        match res {
2619            Err(Error::Io(_)) => (),
2620            _ => panic!("expected IO error got {res:?}"),
2621        }
2622    }
2623
2624    #[test]
2625    pub fn arr_u8_read_with_non_zero_padding() {
2626        let buf = Cursor::new(vec![2, 3, 0, 0]);
2627        let res = <[u8; 1]>::read_xdr(&mut Limited::new(buf, Limits::none()));
2628        match res {
2629            Err(Error::NonZeroPadding) => (),
2630            _ => panic!("expected NonZeroPadding got {res:?}"),
2631        }
2632    }
2633
2634    #[test]
2635    pub fn arr_u8_write_without_padding() {
2636        let mut buf = vec![];
2637        [2u8, 2, 2, 2]
2638            .write_xdr(&mut Limited::new(Cursor::new(&mut buf), Limits::none()))
2639            .unwrap();
2640        assert_eq!(buf, vec![2, 2, 2, 2]);
2641    }
2642
2643    #[test]
2644    pub fn arr_u8_write_with_padding() {
2645        let mut buf = vec![];
2646        [2u8]
2647            .write_xdr(&mut Limited::new(Cursor::new(&mut buf), Limits::none()))
2648            .unwrap();
2649        assert_eq!(buf, vec![2, 0, 0, 0]);
2650    }
2651}
2652
2653#[cfg(all(test, feature = "std"))]
2654mod test {
2655    use super::*;
2656
2657    #[test]
2658    fn into_option_none() {
2659        let v: VecM<u32, 1> = vec![].try_into().unwrap();
2660        assert_eq!(v.into_option(), None);
2661    }
2662
2663    #[test]
2664    fn into_option_some() {
2665        let v: VecM<_, 1> = vec![1].try_into().unwrap();
2666        assert_eq!(v.into_option(), Some(1));
2667    }
2668
2669    #[test]
2670    fn to_option_none() {
2671        let v: VecM<u32, 1> = vec![].try_into().unwrap();
2672        assert_eq!(v.to_option(), None);
2673    }
2674
2675    #[test]
2676    fn to_option_some() {
2677        let v: VecM<_, 1> = vec![1].try_into().unwrap();
2678        assert_eq!(v.to_option(), Some(1));
2679    }
2680
2681    #[test]
2682    fn depth_limited_read_write_under_the_limit_success() {
2683        let a: Option<Option<Option<u32>>> = Some(Some(Some(5)));
2684        let mut buf = Limited::new(Vec::new(), Limits::depth(4));
2685        a.write_xdr(&mut buf).unwrap();
2686
2687        let mut dlr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::depth(4));
2688        let a_back: Option<Option<Option<u32>>> = ReadXdr::read_xdr(&mut dlr).unwrap();
2689        assert_eq!(a, a_back);
2690    }
2691
2692    #[test]
2693    fn write_over_depth_limit_fail() {
2694        let a: Option<Option<Option<u32>>> = Some(Some(Some(5)));
2695        let mut buf = Limited::new(Vec::new(), Limits::depth(3));
2696        let res = a.write_xdr(&mut buf);
2697        match res {
2698            Err(Error::DepthLimitExceeded) => (),
2699            _ => panic!("expected DepthLimitExceeded got {res:?}"),
2700        }
2701    }
2702
2703    #[test]
2704    fn read_over_depth_limit_fail() {
2705        let read_limits = Limits::depth(3);
2706        let write_limits = Limits::depth(5);
2707        let a: Option<Option<Option<u32>>> = Some(Some(Some(5)));
2708        let mut buf = Limited::new(Vec::new(), write_limits);
2709        a.write_xdr(&mut buf).unwrap();
2710
2711        let mut dlr = Limited::new(Cursor::new(buf.inner.as_slice()), read_limits);
2712        let res: Result<Option<Option<Option<u32>>>, _> = ReadXdr::read_xdr(&mut dlr);
2713        match res {
2714            Err(Error::DepthLimitExceeded) => (),
2715            _ => panic!("expected DepthLimitExceeded got {res:?}"),
2716        }
2717    }
2718
2719    #[test]
2720    fn length_limited_read_write_i32() {
2721        // Exact limit, success
2722        let v = 123i32;
2723        let mut buf = Limited::new(Vec::new(), Limits::len(4));
2724        v.write_xdr(&mut buf).unwrap();
2725        assert_eq!(buf.limits.len, 0);
2726        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(4));
2727        let v_back: i32 = ReadXdr::read_xdr(&mut lr).unwrap();
2728        assert_eq!(buf.limits.len, 0);
2729        assert_eq!(v, v_back);
2730
2731        // Over limit, success
2732        let v = 123i32;
2733        let mut buf = Limited::new(Vec::new(), Limits::len(5));
2734        v.write_xdr(&mut buf).unwrap();
2735        assert_eq!(buf.limits.len, 1);
2736        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(5));
2737        let v_back: i32 = ReadXdr::read_xdr(&mut lr).unwrap();
2738        assert_eq!(buf.limits.len, 1);
2739        assert_eq!(v, v_back);
2740
2741        // Write under limit, failure
2742        let v = 123i32;
2743        let mut buf = Limited::new(Vec::new(), Limits::len(3));
2744        assert_eq!(v.write_xdr(&mut buf), Err(Error::LengthLimitExceeded));
2745
2746        // Read under limit, failure
2747        let v = 123i32;
2748        let mut buf = Limited::new(Vec::new(), Limits::len(4));
2749        v.write_xdr(&mut buf).unwrap();
2750        assert_eq!(buf.limits.len, 0);
2751        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(3));
2752        assert_eq!(
2753            <i32 as ReadXdr>::read_xdr(&mut lr),
2754            Err(Error::LengthLimitExceeded)
2755        );
2756    }
2757
2758    #[test]
2759    fn length_limited_read_write_u32() {
2760        // Exact limit, success
2761        let v = 123u32;
2762        let mut buf = Limited::new(Vec::new(), Limits::len(4));
2763        v.write_xdr(&mut buf).unwrap();
2764        assert_eq!(buf.limits.len, 0);
2765        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(4));
2766        let v_back: u32 = ReadXdr::read_xdr(&mut lr).unwrap();
2767        assert_eq!(buf.limits.len, 0);
2768        assert_eq!(v, v_back);
2769
2770        // Over limit, success
2771        let v = 123u32;
2772        let mut buf = Limited::new(Vec::new(), Limits::len(5));
2773        v.write_xdr(&mut buf).unwrap();
2774        assert_eq!(buf.limits.len, 1);
2775        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(5));
2776        let v_back: u32 = ReadXdr::read_xdr(&mut lr).unwrap();
2777        assert_eq!(buf.limits.len, 1);
2778        assert_eq!(v, v_back);
2779
2780        // Write under limit, failure
2781        let v = 123u32;
2782        let mut buf = Limited::new(Vec::new(), Limits::len(3));
2783        assert_eq!(v.write_xdr(&mut buf), Err(Error::LengthLimitExceeded));
2784
2785        // Read under limit, failure
2786        let v = 123u32;
2787        let mut buf = Limited::new(Vec::new(), Limits::len(4));
2788        v.write_xdr(&mut buf).unwrap();
2789        assert_eq!(buf.limits.len, 0);
2790        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(3));
2791        assert_eq!(
2792            <u32 as ReadXdr>::read_xdr(&mut lr),
2793            Err(Error::LengthLimitExceeded)
2794        );
2795    }
2796
2797    #[test]
2798    fn length_limited_read_write_i64() {
2799        // Exact limit, success
2800        let v = 123i64;
2801        let mut buf = Limited::new(Vec::new(), Limits::len(8));
2802        v.write_xdr(&mut buf).unwrap();
2803        assert_eq!(buf.limits.len, 0);
2804        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(8));
2805        let v_back: i64 = ReadXdr::read_xdr(&mut lr).unwrap();
2806        assert_eq!(buf.limits.len, 0);
2807        assert_eq!(v, v_back);
2808
2809        // Over limit, success
2810        let v = 123i64;
2811        let mut buf = Limited::new(Vec::new(), Limits::len(9));
2812        v.write_xdr(&mut buf).unwrap();
2813        assert_eq!(buf.limits.len, 1);
2814        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(9));
2815        let v_back: i64 = ReadXdr::read_xdr(&mut lr).unwrap();
2816        assert_eq!(buf.limits.len, 1);
2817        assert_eq!(v, v_back);
2818
2819        // Write under limit, failure
2820        let v = 123i64;
2821        let mut buf = Limited::new(Vec::new(), Limits::len(7));
2822        assert_eq!(v.write_xdr(&mut buf), Err(Error::LengthLimitExceeded));
2823
2824        // Read under limit, failure
2825        let v = 123i64;
2826        let mut buf = Limited::new(Vec::new(), Limits::len(8));
2827        v.write_xdr(&mut buf).unwrap();
2828        assert_eq!(buf.limits.len, 0);
2829        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(7));
2830        assert_eq!(
2831            <i64 as ReadXdr>::read_xdr(&mut lr),
2832            Err(Error::LengthLimitExceeded)
2833        );
2834    }
2835
2836    #[test]
2837    fn length_limited_read_write_u64() {
2838        // Exact limit, success
2839        let v = 123u64;
2840        let mut buf = Limited::new(Vec::new(), Limits::len(8));
2841        v.write_xdr(&mut buf).unwrap();
2842        assert_eq!(buf.limits.len, 0);
2843        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(8));
2844        let v_back: u64 = ReadXdr::read_xdr(&mut lr).unwrap();
2845        assert_eq!(buf.limits.len, 0);
2846        assert_eq!(v, v_back);
2847
2848        // Over limit, success
2849        let v = 123u64;
2850        let mut buf = Limited::new(Vec::new(), Limits::len(9));
2851        v.write_xdr(&mut buf).unwrap();
2852        assert_eq!(buf.limits.len, 1);
2853        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(9));
2854        let v_back: u64 = ReadXdr::read_xdr(&mut lr).unwrap();
2855        assert_eq!(buf.limits.len, 1);
2856        assert_eq!(v, v_back);
2857
2858        // Write under limit, failure
2859        let v = 123u64;
2860        let mut buf = Limited::new(Vec::new(), Limits::len(7));
2861        assert_eq!(v.write_xdr(&mut buf), Err(Error::LengthLimitExceeded));
2862
2863        // Read under limit, failure
2864        let v = 123u64;
2865        let mut buf = Limited::new(Vec::new(), Limits::len(8));
2866        v.write_xdr(&mut buf).unwrap();
2867        assert_eq!(buf.limits.len, 0);
2868        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(7));
2869        assert_eq!(
2870            <u64 as ReadXdr>::read_xdr(&mut lr),
2871            Err(Error::LengthLimitExceeded)
2872        );
2873    }
2874
2875    #[test]
2876    fn length_limited_read_write_bool() {
2877        // Exact limit, success
2878        let v = true;
2879        let mut buf = Limited::new(Vec::new(), Limits::len(4));
2880        v.write_xdr(&mut buf).unwrap();
2881        assert_eq!(buf.limits.len, 0);
2882        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(4));
2883        let v_back: bool = ReadXdr::read_xdr(&mut lr).unwrap();
2884        assert_eq!(buf.limits.len, 0);
2885        assert_eq!(v, v_back);
2886
2887        // Over limit, success
2888        let v = true;
2889        let mut buf = Limited::new(Vec::new(), Limits::len(5));
2890        v.write_xdr(&mut buf).unwrap();
2891        assert_eq!(buf.limits.len, 1);
2892        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(5));
2893        let v_back: bool = ReadXdr::read_xdr(&mut lr).unwrap();
2894        assert_eq!(buf.limits.len, 1);
2895        assert_eq!(v, v_back);
2896
2897        // Write under limit, failure
2898        let v = true;
2899        let mut buf = Limited::new(Vec::new(), Limits::len(3));
2900        assert_eq!(v.write_xdr(&mut buf), Err(Error::LengthLimitExceeded));
2901
2902        // Read under limit, failure
2903        let v = true;
2904        let mut buf = Limited::new(Vec::new(), Limits::len(4));
2905        v.write_xdr(&mut buf).unwrap();
2906        assert_eq!(buf.limits.len, 0);
2907        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(3));
2908        assert_eq!(
2909            <bool as ReadXdr>::read_xdr(&mut lr),
2910            Err(Error::LengthLimitExceeded)
2911        );
2912    }
2913
2914    #[test]
2915    fn length_limited_read_write_option() {
2916        // Exact limit, success
2917        let v = Some(true);
2918        let mut buf = Limited::new(Vec::new(), Limits::len(8));
2919        v.write_xdr(&mut buf).unwrap();
2920        assert_eq!(buf.limits.len, 0);
2921        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(8));
2922        let v_back: Option<bool> = ReadXdr::read_xdr(&mut lr).unwrap();
2923        assert_eq!(buf.limits.len, 0);
2924        assert_eq!(v, v_back);
2925
2926        // Over limit, success
2927        let v = Some(true);
2928        let mut buf = Limited::new(Vec::new(), Limits::len(9));
2929        v.write_xdr(&mut buf).unwrap();
2930        assert_eq!(buf.limits.len, 1);
2931        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(9));
2932        let v_back: Option<bool> = ReadXdr::read_xdr(&mut lr).unwrap();
2933        assert_eq!(buf.limits.len, 1);
2934        assert_eq!(v, v_back);
2935
2936        // Write under limit, failure
2937        let v = Some(true);
2938        let mut buf = Limited::new(Vec::new(), Limits::len(7));
2939        assert_eq!(v.write_xdr(&mut buf), Err(Error::LengthLimitExceeded));
2940
2941        // Read under limit, failure
2942        let v = Some(true);
2943        let mut buf = Limited::new(Vec::new(), Limits::len(8));
2944        v.write_xdr(&mut buf).unwrap();
2945        assert_eq!(buf.limits.len, 0);
2946        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(7));
2947        assert_eq!(
2948            <Option<bool> as ReadXdr>::read_xdr(&mut lr),
2949            Err(Error::LengthLimitExceeded)
2950        );
2951    }
2952
2953    #[test]
2954    fn length_limited_read_write_array_u8() {
2955        // Exact limit, success
2956        let v = [1u8, 2, 3];
2957        let mut buf = Limited::new(Vec::new(), Limits::len(4));
2958        v.write_xdr(&mut buf).unwrap();
2959        assert_eq!(buf.limits.len, 0);
2960        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(4));
2961        let v_back: [u8; 3] = ReadXdr::read_xdr(&mut lr).unwrap();
2962        assert_eq!(buf.limits.len, 0);
2963        assert_eq!(v, v_back);
2964
2965        // Over limit, success
2966        let v = [1u8, 2, 3];
2967        let mut buf = Limited::new(Vec::new(), Limits::len(5));
2968        v.write_xdr(&mut buf).unwrap();
2969        assert_eq!(buf.limits.len, 1);
2970        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(5));
2971        let v_back: [u8; 3] = ReadXdr::read_xdr(&mut lr).unwrap();
2972        assert_eq!(buf.limits.len, 1);
2973        assert_eq!(v, v_back);
2974
2975        // Write under limit, failure
2976        let v = [1u8, 2, 3];
2977        let mut buf = Limited::new(Vec::new(), Limits::len(3));
2978        assert_eq!(v.write_xdr(&mut buf), Err(Error::LengthLimitExceeded));
2979
2980        // Read under limit, failure
2981        let v = [1u8, 2, 3];
2982        let mut buf = Limited::new(Vec::new(), Limits::len(4));
2983        v.write_xdr(&mut buf).unwrap();
2984        assert_eq!(buf.limits.len, 0);
2985        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(3));
2986        assert_eq!(
2987            <[u8; 3] as ReadXdr>::read_xdr(&mut lr),
2988            Err(Error::LengthLimitExceeded)
2989        );
2990    }
2991
2992    #[test]
2993    fn length_limited_read_write_array_type() {
2994        // Exact limit, success
2995        let v = [true, false, true];
2996        let mut buf = Limited::new(Vec::new(), Limits::len(12));
2997        v.write_xdr(&mut buf).unwrap();
2998        assert_eq!(buf.limits.len, 0);
2999        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(12));
3000        let v_back: [bool; 3] = ReadXdr::read_xdr(&mut lr).unwrap();
3001        assert_eq!(buf.limits.len, 0);
3002        assert_eq!(v, v_back);
3003
3004        // Over limit, success
3005        let v = [true, false, true];
3006        let mut buf = Limited::new(Vec::new(), Limits::len(13));
3007        v.write_xdr(&mut buf).unwrap();
3008        assert_eq!(buf.limits.len, 1);
3009        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(13));
3010        let v_back: [bool; 3] = ReadXdr::read_xdr(&mut lr).unwrap();
3011        assert_eq!(buf.limits.len, 1);
3012        assert_eq!(v, v_back);
3013
3014        // Write under limit, failure
3015        let v = [true, false, true];
3016        let mut buf = Limited::new(Vec::new(), Limits::len(11));
3017        assert_eq!(v.write_xdr(&mut buf), Err(Error::LengthLimitExceeded));
3018
3019        // Read under limit, failure
3020        let v = [true, false, true];
3021        let mut buf = Limited::new(Vec::new(), Limits::len(12));
3022        v.write_xdr(&mut buf).unwrap();
3023        assert_eq!(buf.limits.len, 0);
3024        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(11));
3025        assert_eq!(
3026            <[bool; 3] as ReadXdr>::read_xdr(&mut lr),
3027            Err(Error::LengthLimitExceeded)
3028        );
3029    }
3030
3031    #[test]
3032    fn length_limited_read_write_vec() {
3033        // Exact limit, success
3034        let v = VecM::<i32, 3>::try_from([1i32, 2, 3]).unwrap();
3035        let mut buf = Limited::new(Vec::new(), Limits::len(16));
3036        v.write_xdr(&mut buf).unwrap();
3037        assert_eq!(buf.limits.len, 0);
3038        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(16));
3039        let v_back: VecM<i32, 3> = ReadXdr::read_xdr(&mut lr).unwrap();
3040        assert_eq!(buf.limits.len, 0);
3041        assert_eq!(v, v_back);
3042
3043        // Over limit, success
3044        let v = VecM::<i32, 3>::try_from([1i32, 2, 3]).unwrap();
3045        let mut buf = Limited::new(Vec::new(), Limits::len(17));
3046        v.write_xdr(&mut buf).unwrap();
3047        assert_eq!(buf.limits.len, 1);
3048        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(17));
3049        let v_back: VecM<i32, 3> = ReadXdr::read_xdr(&mut lr).unwrap();
3050        assert_eq!(buf.limits.len, 1);
3051        assert_eq!(v, v_back);
3052
3053        // Write under limit, failure
3054        let v = VecM::<i32, 3>::try_from([1i32, 2, 3]).unwrap();
3055        let mut buf = Limited::new(Vec::new(), Limits::len(15));
3056        assert_eq!(v.write_xdr(&mut buf), Err(Error::LengthLimitExceeded));
3057
3058        // Read under limit, failure
3059        let v = VecM::<i32, 3>::try_from([1i32, 2, 3]).unwrap();
3060        let mut buf = Limited::new(Vec::new(), Limits::len(16));
3061        v.write_xdr(&mut buf).unwrap();
3062        assert_eq!(buf.limits.len, 0);
3063        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(15));
3064        assert_eq!(
3065            <VecM<i32, 3> as ReadXdr>::read_xdr(&mut lr),
3066            Err(Error::LengthLimitExceeded)
3067        );
3068    }
3069
3070    #[test]
3071    fn length_limited_read_write_bytes() {
3072        // Exact limit, success
3073        let v = BytesM::<3>::try_from([1u8, 2, 3]).unwrap();
3074        let mut buf = Limited::new(Vec::new(), Limits::len(8));
3075        v.write_xdr(&mut buf).unwrap();
3076        assert_eq!(buf.limits.len, 0);
3077        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(8));
3078        let v_back: BytesM<3> = ReadXdr::read_xdr(&mut lr).unwrap();
3079        assert_eq!(buf.limits.len, 0);
3080        assert_eq!(v, v_back);
3081
3082        // Over limit, success
3083        let v = BytesM::<3>::try_from([1u8, 2, 3]).unwrap();
3084        let mut buf = Limited::new(Vec::new(), Limits::len(9));
3085        v.write_xdr(&mut buf).unwrap();
3086        assert_eq!(buf.limits.len, 1);
3087        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(9));
3088        let v_back: BytesM<3> = ReadXdr::read_xdr(&mut lr).unwrap();
3089        assert_eq!(buf.limits.len, 1);
3090        assert_eq!(v, v_back);
3091
3092        // Write under limit, failure
3093        let v = BytesM::<3>::try_from([1u8, 2, 3]).unwrap();
3094        let mut buf = Limited::new(Vec::new(), Limits::len(7));
3095        assert_eq!(v.write_xdr(&mut buf), Err(Error::LengthLimitExceeded));
3096
3097        // Read under limit, failure
3098        let v = BytesM::<3>::try_from([1u8, 2, 3]).unwrap();
3099        let mut buf = Limited::new(Vec::new(), Limits::len(8));
3100        v.write_xdr(&mut buf).unwrap();
3101        assert_eq!(buf.limits.len, 0);
3102        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(7));
3103        assert_eq!(
3104            <BytesM<3> as ReadXdr>::read_xdr(&mut lr),
3105            Err(Error::LengthLimitExceeded)
3106        );
3107    }
3108
3109    #[test]
3110    fn length_limited_read_write_string() {
3111        // Exact limit, success
3112        let v = StringM::<3>::try_from("123").unwrap();
3113        let mut buf = Limited::new(Vec::new(), Limits::len(8));
3114        v.write_xdr(&mut buf).unwrap();
3115        assert_eq!(buf.limits.len, 0);
3116        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(8));
3117        let v_back: StringM<3> = ReadXdr::read_xdr(&mut lr).unwrap();
3118        assert_eq!(buf.limits.len, 0);
3119        assert_eq!(v, v_back);
3120
3121        // Over limit, success
3122        let v = StringM::<3>::try_from("123").unwrap();
3123        let mut buf = Limited::new(Vec::new(), Limits::len(9));
3124        v.write_xdr(&mut buf).unwrap();
3125        assert_eq!(buf.limits.len, 1);
3126        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(9));
3127        let v_back: StringM<3> = ReadXdr::read_xdr(&mut lr).unwrap();
3128        assert_eq!(buf.limits.len, 1);
3129        assert_eq!(v, v_back);
3130
3131        // Write under limit, failure
3132        let v = StringM::<3>::try_from("123").unwrap();
3133        let mut buf = Limited::new(Vec::new(), Limits::len(7));
3134        assert_eq!(v.write_xdr(&mut buf), Err(Error::LengthLimitExceeded));
3135
3136        // Read under limit, failure
3137        let v = StringM::<3>::try_from("123").unwrap();
3138        let mut buf = Limited::new(Vec::new(), Limits::len(8));
3139        v.write_xdr(&mut buf).unwrap();
3140        assert_eq!(buf.limits.len, 0);
3141        let mut lr = Limited::new(Cursor::new(buf.inner.as_slice()), Limits::len(7));
3142        assert_eq!(
3143            <StringM<3> as ReadXdr>::read_xdr(&mut lr),
3144            Err(Error::LengthLimitExceeded)
3145        );
3146    }
3147}
3148
3149#[cfg(all(test, not(feature = "alloc")))]
3150mod test {
3151    use super::VecM;
3152
3153    #[test]
3154    fn to_option_none() {
3155        let v: VecM<u32, 1> = (&[]).try_into().unwrap();
3156        assert_eq!(v.to_option(), None);
3157    }
3158
3159    #[test]
3160    fn to_option_some() {
3161        let v: VecM<_, 1> = (&[1]).try_into().unwrap();
3162        assert_eq!(v.to_option(), Some(1));
3163    }
3164}
3165
3166#[cfg(all(test, feature = "serde"))]
3167mod tests_for_number_or_string {
3168    use super::*;
3169    use serde::{Deserialize, Serialize};
3170    use serde_json;
3171    use serde_with::serde_as;
3172
3173    // --- Helper Structs ---
3174    #[serde_as]
3175    #[derive(Debug, PartialEq, Deserialize, Serialize)]
3176    struct TestI64 {
3177        #[serde_as(as = "NumberOrString")]
3178        val: i64,
3179    }
3180
3181    #[serde_as]
3182    #[derive(Debug, PartialEq, Deserialize, Serialize)]
3183    struct TestU64 {
3184        #[serde_as(as = "NumberOrString")]
3185        val: u64,
3186    }
3187
3188    #[serde_as]
3189    #[derive(Debug, PartialEq, Deserialize, Serialize)]
3190    struct TestOptionI64 {
3191        #[serde_as(as = "Option<NumberOrString>")]
3192        val: Option<i64>,
3193    }
3194
3195    #[serde_as]
3196    #[derive(Debug, PartialEq, Deserialize, Serialize)]
3197    struct TestOptionU64 {
3198        #[serde_as(as = "Option<NumberOrString>")]
3199        val: Option<u64>,
3200    }
3201
3202    #[serde_as]
3203    #[derive(Debug, PartialEq, Deserialize, Serialize)]
3204    struct TestVecI64 {
3205        #[serde_as(as = "Vec<NumberOrString>")]
3206        val: Vec<i64>,
3207    }
3208
3209    #[serde_as]
3210    #[derive(Debug, PartialEq, Deserialize, Serialize)]
3211    struct TestVecU64 {
3212        #[serde_as(as = "Vec<NumberOrString>")]
3213        val: Vec<u64>,
3214    }
3215
3216    // Helper Enum for testing field access within variants
3217    #[serde_as]
3218    #[derive(Debug, PartialEq, Deserialize, Serialize)]
3219    #[serde(rename_all = "camelCase")] // Added to make JSON keys distinct for variants
3220    enum TestEnum {
3221        VariantA {
3222            #[serde(rename = "numVal")]
3223            #[serde_as(as = "NumberOrString")]
3224            num_val: i64,
3225            #[serde(rename = "otherData")]
3226            other_data: String,
3227        },
3228        VariantB {
3229            #[serde_as(as = "NumberOrString")]
3230            count: u64,
3231        },
3232        SimpleVariant,
3233    }
3234
3235    // --- i64 Deserialization Tests ---
3236    #[test]
3237    fn deserialize_i64_from_json_reader() {
3238        let json = r#"{"val": "123"}"#;
3239        let expected = TestI64 { val: 123 };
3240        assert_eq!(
3241            serde_json::from_reader::<_, TestI64>(Cursor::new(json)).unwrap(),
3242            expected
3243        );
3244    }
3245
3246    #[test]
3247    fn deserialize_i64_from_json_number_positive() {
3248        let json = r#"{"val": 123}"#;
3249        let expected = TestI64 { val: 123 };
3250        assert_eq!(serde_json::from_str::<TestI64>(json).unwrap(), expected);
3251    }
3252
3253    #[test]
3254    fn deserialize_i64_from_json_number_negative() {
3255        let json = r#"{"val": -456}"#;
3256        let expected = TestI64 { val: -456 };
3257        assert_eq!(serde_json::from_str::<TestI64>(json).unwrap(), expected);
3258    }
3259
3260    #[test]
3261    fn deserialize_i64_from_json_number_zero() {
3262        let json = r#"{"val": 0}"#;
3263        let expected = TestI64 { val: 0 };
3264        assert_eq!(serde_json::from_str::<TestI64>(json).unwrap(), expected);
3265    }
3266
3267    #[test]
3268    fn deserialize_i64_from_json_number_max() {
3269        let json = format!(r#"{{"val": {}}}"#, i64::MAX);
3270        let expected = TestI64 { val: i64::MAX };
3271        assert_eq!(serde_json::from_str::<TestI64>(&json).unwrap(), expected);
3272    }
3273
3274    #[test]
3275    fn deserialize_i64_from_json_number_min() {
3276        let json = format!(r#"{{"val": {}}}"#, i64::MIN);
3277        let expected = TestI64 { val: i64::MIN };
3278        assert_eq!(serde_json::from_str::<TestI64>(&json).unwrap(), expected);
3279    }
3280
3281    #[test]
3282    fn deserialize_i64_from_json_string_positive() {
3283        let json = r#"{"val": "789"}"#;
3284        let expected = TestI64 { val: 789 };
3285        assert_eq!(serde_json::from_str::<TestI64>(json).unwrap(), expected);
3286    }
3287
3288    #[test]
3289    fn deserialize_i64_from_json_string_negative() {
3290        let json = r#"{"val": "-101"}"#;
3291        let expected = TestI64 { val: -101 };
3292        assert_eq!(serde_json::from_str::<TestI64>(json).unwrap(), expected);
3293    }
3294
3295    #[test]
3296    fn deserialize_i64_from_json_string_zero() {
3297        let json = r#"{"val": "0"}"#;
3298        let expected = TestI64 { val: 0 };
3299        assert_eq!(serde_json::from_str::<TestI64>(json).unwrap(), expected);
3300    }
3301
3302    #[test]
3303    fn deserialize_i64_from_json_string_max() {
3304        let json = format!(r#"{{"val": "{}"}}"#, i64::MAX);
3305        let expected = TestI64 { val: i64::MAX };
3306        assert_eq!(serde_json::from_str::<TestI64>(&json).unwrap(), expected);
3307    }
3308
3309    #[test]
3310    fn deserialize_i64_from_json_string_min() {
3311        let json = format!(r#"{{"val": "{}"}}"#, i64::MIN);
3312        let expected = TestI64 { val: i64::MIN };
3313        assert_eq!(serde_json::from_str::<TestI64>(&json).unwrap(), expected);
3314    }
3315
3316    #[test]
3317    fn deserialize_i64_from_json_string_with_plus_prefix() {
3318        let json = r#"{"val": "+123"}"#;
3319        let expected = TestI64 { val: 123 };
3320        assert_eq!(serde_json::from_str::<TestI64>(json).unwrap(), expected);
3321    }
3322
3323    #[test]
3324    fn deserialize_i64_from_json_string_with_plus_zero() {
3325        let json = r#"{"val": "+0"}"#;
3326        let expected = TestI64 { val: 0 };
3327        assert_eq!(serde_json::from_str::<TestI64>(json).unwrap(), expected);
3328    }
3329
3330    #[test]
3331    fn deserialize_i64_from_json_string_with_minus_zero() {
3332        let json = r#"{"val": "-0"}"#;
3333        let expected = TestI64 { val: 0 };
3334        assert_eq!(serde_json::from_str::<TestI64>(json).unwrap(), expected);
3335    }
3336
3337    #[test]
3338    fn deserialize_i64_error_from_json_string_with_leading_whitespace() {
3339        let json = r#"{"val": " 123"}"#;
3340        assert!(serde_json::from_str::<TestI64>(json).is_err());
3341    }
3342
3343    #[test]
3344    fn deserialize_i64_error_from_json_string_with_trailing_whitespace() {
3345        let json = r#"{"val": "123 "}"#;
3346        assert!(serde_json::from_str::<TestI64>(json).is_err());
3347    }
3348
3349    #[test]
3350    fn deserialize_i64_error_from_json_string_with_both_whitespace() {
3351        let json = r#"{"val": " 123 "}"#;
3352        assert!(serde_json::from_str::<TestI64>(json).is_err());
3353    }
3354
3355    #[test]
3356    fn deserialize_i64_error_from_json_string_with_invalid_plus_prefix() {
3357        let json = r#"{"val": "++123"}"#;
3358        assert!(serde_json::from_str::<TestI64>(json).is_err());
3359    }
3360
3361    #[test]
3362    fn deserialize_i64_error_from_json_string_with_invalid_minus_prefix() {
3363        let json = r#"{"val": "--123"}"#;
3364        assert!(serde_json::from_str::<TestI64>(json).is_err());
3365    }
3366
3367    #[test]
3368    fn deserialize_i64_error_from_json_string_with_invalid_mixed_prefix() {
3369        let json = r#"{"val": "+-123"}"#;
3370        assert!(serde_json::from_str::<TestI64>(json).is_err());
3371    }
3372
3373    #[test]
3374    fn deserialize_i64_error_from_string_not_a_number() {
3375        let json = r#"{"val": "abc"}"#;
3376        assert!(serde_json::from_str::<TestI64>(json).is_err());
3377    }
3378
3379    #[test]
3380    fn deserialize_i64_error_from_string_float() {
3381        let json = r#"{"val": "123.45"}"#; // Not an integer
3382        assert!(serde_json::from_str::<TestI64>(json).is_err());
3383    }
3384
3385    #[test]
3386    fn deserialize_i64_error_from_string_empty() {
3387        let json = r#"{"val": ""}"#;
3388        assert!(serde_json::from_str::<TestI64>(json).is_err());
3389    }
3390
3391    #[test]
3392    fn deserialize_i64_error_from_string_overflow() {
3393        let overflow_val = i128::from(i64::MAX) + 1;
3394        let json = format!(r#"{{"val": "{overflow_val}"}}"#);
3395        assert!(serde_json::from_str::<TestI64>(&json).is_err());
3396    }
3397
3398    #[test]
3399    fn deserialize_i64_error_from_string_underflow() {
3400        let underflow_val = i128::from(i64::MIN) - 1;
3401        let json = format!(r#"{{"val": "{underflow_val}"}}"#);
3402        assert!(serde_json::from_str::<TestI64>(&json).is_err());
3403    }
3404
3405    #[test]
3406    fn deserialize_i64_error_from_json_float_number() {
3407        let json = r#"{"val": 123.45}"#;
3408        assert!(serde_json::from_str::<TestI64>(json).is_err());
3409    }
3410
3411    #[test]
3412    fn deserialize_i64_error_from_json_bool_true() {
3413        let json = r#"{"val": true}"#;
3414        assert!(serde_json::from_str::<TestI64>(json).is_err());
3415    }
3416
3417    #[test]
3418    fn deserialize_i64_error_from_json_array() {
3419        let json = r#"{"val": []}"#;
3420        assert!(serde_json::from_str::<TestI64>(json).is_err());
3421    }
3422
3423    #[test]
3424    fn deserialize_i64_error_from_json_object() {
3425        let json = r#"{"val": {}}"#;
3426        assert!(serde_json::from_str::<TestI64>(json).is_err());
3427    }
3428
3429    #[test]
3430    fn deserialize_i64_error_from_json_null() {
3431        let json = r#"{"val": null}"#;
3432        assert!(serde_json::from_str::<TestI64>(json).is_err());
3433    }
3434
3435    // -- Additional i64 String Format Tests --
3436    #[test]
3437    fn deserialize_i64_error_from_hex_string() {
3438        let json = r#"{"val": "0x1A"}"#; // Hex "26"
3439                                         // std::primitive::i64.from_str() does not support "0x"
3440        assert!(
3441            serde_json::from_str::<TestI64>(json).is_err(),
3442            "Hex string should fail parsing to i64"
3443        );
3444    }
3445
3446    #[test]
3447    fn deserialize_i64_error_from_octal_string() {
3448        let json = r#"{"val": "0o77"}"#; // Octal "63"
3449                                         // std::primitive::i64.from_str() does not support "0o"
3450        assert!(
3451            serde_json::from_str::<TestI64>(json).is_err(),
3452            "Octal string should fail parsing to i64"
3453        );
3454    }
3455
3456    #[test]
3457    fn deserialize_i64_error_from_scientific_notation_string() {
3458        let json = r#"{"val": "1e3"}"#; // "1000" in scientific
3459                                        // std::primitive::i64.from_str() does not support scientific notation
3460        assert!(
3461            serde_json::from_str::<TestI64>(json).is_err(),
3462            "Scientific notation string should fail parsing to i64"
3463        );
3464    }
3465
3466    #[test]
3467    fn deserialize_i64_error_from_invalid_scientific_notation_string() {
3468        let json = r#"{"val": "1e"}"#;
3469        assert!(
3470            serde_json::from_str::<TestI64>(json).is_err(),
3471            "Invalid scientific notation string should fail"
3472        );
3473    }
3474
3475    #[test]
3476    fn deserialize_i64_error_from_string_with_underscores() {
3477        let json = r#"{"val": "1_000_000"}"#;
3478        // std::primitive::i64.from_str() does not support underscores
3479        assert!(
3480            serde_json::from_str::<TestI64>(json).is_err(),
3481            "String with underscores should fail parsing to i64"
3482        );
3483    }
3484
3485    #[test]
3486    fn deserialize_i64_from_string_with_leading_zeros() {
3487        let json = r#"{"val": "000123"}"#;
3488        let expected = TestI64 { val: 123 };
3489        // std::primitive::i64.from_str() supports leading zeros
3490        assert_eq!(
3491            serde_json::from_str::<TestI64>(json).unwrap(),
3492            expected,
3493            "String with leading zeros should parse"
3494        );
3495    }
3496
3497    #[test]
3498    fn deserialize_i64_from_string_with_leading_zeros_negative() {
3499        let json = r#"{"val": "-000123"}"#;
3500        let expected = TestI64 { val: -123 };
3501        assert_eq!(
3502            serde_json::from_str::<TestI64>(json).unwrap(),
3503            expected,
3504            "Negative string with leading zeros should parse"
3505        );
3506    }
3507
3508    #[test]
3509    fn deserialize_i64_error_from_string_with_decimal_zeros() {
3510        let json = r#"{"val": "123.000"}"#;
3511        // std::primitive::i64.from_str() does not support decimals
3512        assert!(
3513            serde_json::from_str::<TestI64>(json).is_err(),
3514            "String with decimal part should fail parsing to i64"
3515        );
3516    }
3517
3518    #[test]
3519    fn deserialize_i64_error_from_string_with_internal_decimal() {
3520        let json = r#"{"val": "12.345"}"#;
3521        assert!(
3522            serde_json::from_str::<TestI64>(json).is_err(),
3523            "String with internal decimal point should fail"
3524        );
3525    }
3526
3527    #[test]
3528    fn deserialize_i64_error_from_localized_string_commas() {
3529        let json = r#"{"val": "1,234"}"#;
3530        // std::primitive::i64.from_str() does not support commas
3531        assert!(
3532            serde_json::from_str::<TestI64>(json).is_err(),
3533            "Localized string with commas should fail parsing to i64"
3534        );
3535    }
3536
3537    // --- u64 Deserialization Tests ---
3538    #[test]
3539    fn deserialize_u64_from_json_reader() {
3540        let json = r#"{"val": "123"}"#;
3541        let expected = TestU64 { val: 123 };
3542        assert_eq!(
3543            serde_json::from_reader::<_, TestU64>(Cursor::new(json)).unwrap(),
3544            expected
3545        );
3546    }
3547
3548    #[test]
3549    fn deserialize_u64_from_json_number() {
3550        let json = r#"{"val": 123}"#;
3551        let expected = TestU64 { val: 123 };
3552        assert_eq!(serde_json::from_str::<TestU64>(json).unwrap(), expected);
3553    }
3554
3555    #[test]
3556    fn deserialize_u64_from_json_number_zero() {
3557        let json = r#"{"val": 0}"#;
3558        let expected = TestU64 { val: 0 };
3559        assert_eq!(serde_json::from_str::<TestU64>(json).unwrap(), expected);
3560    }
3561
3562    #[test]
3563    fn deserialize_u64_from_json_number_max() {
3564        let json = format!(r#"{{"val": {}}}"#, u64::MAX);
3565        let expected = TestU64 { val: u64::MAX };
3566        assert_eq!(serde_json::from_str::<TestU64>(&json).unwrap(), expected);
3567    }
3568
3569    #[test]
3570    fn deserialize_u64_from_json_string() {
3571        let json = r#"{"val": "789"}"#;
3572        let expected = TestU64 { val: 789 };
3573        assert_eq!(serde_json::from_str::<TestU64>(json).unwrap(), expected);
3574    }
3575
3576    #[test]
3577    fn deserialize_u64_from_json_string_zero() {
3578        let json = r#"{"val": "0"}"#;
3579        let expected = TestU64 { val: 0 };
3580        assert_eq!(serde_json::from_str::<TestU64>(json).unwrap(), expected);
3581    }
3582
3583    #[test]
3584    fn deserialize_u64_from_json_string_max() {
3585        let json = format!(r#"{{"val": "{}"}}"#, u64::MAX);
3586        let expected = TestU64 { val: u64::MAX };
3587        assert_eq!(serde_json::from_str::<TestU64>(&json).unwrap(), expected);
3588    }
3589
3590    #[test]
3591    fn deserialize_u64_from_json_string_with_plus_prefix() {
3592        let json = r#"{"val": "+123"}"#;
3593        let expected = TestU64 { val: 123 };
3594        assert_eq!(serde_json::from_str::<TestU64>(json).unwrap(), expected);
3595    }
3596
3597    #[test]
3598    fn deserialize_u64_from_json_string_with_plus_zero() {
3599        let json = r#"{"val": "+0"}"#;
3600        let expected = TestU64 { val: 0 };
3601        assert_eq!(serde_json::from_str::<TestU64>(json).unwrap(), expected);
3602    }
3603
3604    #[test]
3605    fn deserialize_u64_error_from_json_string_with_leading_whitespace() {
3606        let json = r#"{"val": " 123"}"#;
3607        assert!(serde_json::from_str::<TestU64>(json).is_err());
3608    }
3609
3610    #[test]
3611    fn deserialize_u64_error_from_json_string_with_trailing_whitespace() {
3612        let json = r#"{"val": "123 "}"#;
3613        assert!(serde_json::from_str::<TestU64>(json).is_err());
3614    }
3615
3616    #[test]
3617    fn deserialize_u64_error_from_json_string_with_invalid_plus_prefix() {
3618        let json = r#"{"val": "++123"}"#;
3619        assert!(serde_json::from_str::<TestU64>(json).is_err());
3620    }
3621
3622    #[test]
3623    fn deserialize_u64_error_from_string_negative() {
3624        let json = r#"{"val": "-123"}"#; // Negative not allowed for u64 string parse
3625        assert!(serde_json::from_str::<TestU64>(json).is_err());
3626    }
3627
3628    #[test]
3629    fn deserialize_u64_error_from_json_number_negative() {
3630        let json = r#"{"val": -1}"#; // Negative not allowed for u64
3631        assert!(serde_json::from_str::<TestU64>(json).is_err());
3632    }
3633
3634    #[test]
3635    fn deserialize_u64_error_from_string_not_a_number() {
3636        let json = r#"{"val": "abc"}"#;
3637        assert!(serde_json::from_str::<TestU64>(json).is_err());
3638    }
3639
3640    #[test]
3641    fn deserialize_u64_error_from_string_float() {
3642        let json = r#"{"val": "123.45"}"#;
3643        assert!(serde_json::from_str::<TestU64>(json).is_err());
3644    }
3645
3646    #[test]
3647    fn deserialize_u64_error_from_string_empty() {
3648        let json = r#"{"val": ""}"#;
3649        assert!(serde_json::from_str::<TestU64>(json).is_err());
3650    }
3651
3652    #[test]
3653    fn deserialize_u64_error_from_string_overflow() {
3654        let overflow_val = u128::from(u64::MAX) + 1;
3655        let json = format!(r#"{{"val": "{overflow_val}"}}"#);
3656        assert!(serde_json::from_str::<TestU64>(&json).is_err());
3657    }
3658
3659    #[test]
3660    fn deserialize_u64_error_from_json_float_number() {
3661        let json = r#"{"val": 123.45}"#;
3662        assert!(serde_json::from_str::<TestU64>(json).is_err());
3663    }
3664
3665    #[test]
3666    fn deserialize_u64_error_from_json_bool_true() {
3667        let json = r#"{"val": true}"#;
3668        assert!(serde_json::from_str::<TestU64>(json).is_err());
3669    }
3670
3671    #[test]
3672    fn deserialize_u64_error_from_json_array() {
3673        let json = r#"{"val": []}"#;
3674        assert!(serde_json::from_str::<TestU64>(json).is_err());
3675    }
3676
3677    #[test]
3678    fn deserialize_u64_error_from_json_object() {
3679        let json = r#"{"val": {}}"#;
3680        assert!(serde_json::from_str::<TestU64>(json).is_err());
3681    }
3682
3683    #[test]
3684    fn deserialize_u64_error_from_json_null() {
3685        let json = r#"{"val": null}"#;
3686        assert!(serde_json::from_str::<TestU64>(json).is_err());
3687    }
3688
3689    // -- Additional u64 String Format Tests --
3690    #[test]
3691    fn deserialize_u64_error_from_hex_string() {
3692        let json = r#"{"val": "0x1A"}"#; // Hex "26"
3693        assert!(
3694            serde_json::from_str::<TestU64>(json).is_err(),
3695            "Hex string should fail parsing to u64"
3696        );
3697    }
3698
3699    #[test]
3700    fn deserialize_u64_error_from_octal_string() {
3701        let json = r#"{"val": "0o77"}"#; // Octal "63"
3702        assert!(
3703            serde_json::from_str::<TestU64>(json).is_err(),
3704            "Octal string should fail parsing to u64"
3705        );
3706    }
3707
3708    #[test]
3709    fn deserialize_u64_error_from_scientific_notation_string() {
3710        let json = r#"{"val": "1e3"}"#;
3711        assert!(
3712            serde_json::from_str::<TestU64>(json).is_err(),
3713            "Scientific notation string should fail parsing to u64"
3714        );
3715    }
3716
3717    #[test]
3718    fn deserialize_u64_error_from_string_with_underscores() {
3719        let json = r#"{"val": "1_000_000"}"#;
3720        assert!(
3721            serde_json::from_str::<TestU64>(json).is_err(),
3722            "String with underscores should fail parsing to u64"
3723        );
3724    }
3725
3726    #[test]
3727    fn deserialize_u64_from_string_with_leading_zeros() {
3728        let json = r#"{"val": "000123"}"#;
3729        let expected = TestU64 { val: 123 };
3730        assert_eq!(
3731            serde_json::from_str::<TestU64>(json).unwrap(),
3732            expected,
3733            "String with leading zeros should parse to u64"
3734        );
3735    }
3736
3737    #[test]
3738    fn deserialize_u64_error_from_string_with_decimal_zeros() {
3739        let json = r#"{"val": "123.000"}"#;
3740        assert!(
3741            serde_json::from_str::<TestU64>(json).is_err(),
3742            "String with decimal part should fail parsing to u64"
3743        );
3744    }
3745
3746    #[test]
3747    fn deserialize_u64_error_from_localized_string_commas() {
3748        let json = r#"{"val": "1,234"}"#;
3749        assert!(
3750            serde_json::from_str::<TestU64>(json).is_err(),
3751            "Localized string with commas should fail parsing to u64"
3752        );
3753    }
3754
3755    // --- i64 Serialization Tests ---
3756    #[test]
3757    fn serialize_i64_positive() {
3758        let data = TestI64 { val: 123 };
3759        let expected_json = r#"{"val":"123"}"#;
3760        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3761    }
3762
3763    #[test]
3764    fn serialize_i64_negative() {
3765        let data = TestI64 { val: -456 };
3766        let expected_json = r#"{"val":"-456"}"#;
3767        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3768    }
3769
3770    #[test]
3771    fn serialize_i64_zero() {
3772        let data = TestI64 { val: 0 };
3773        let expected_json = r#"{"val":"0"}"#;
3774        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3775    }
3776
3777    #[test]
3778    fn serialize_i64_max() {
3779        let data = TestI64 { val: i64::MAX };
3780        let expected_json = format!(r#"{{"val":"{}"}}"#, i64::MAX);
3781        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3782    }
3783
3784    #[test]
3785    fn serialize_i64_min() {
3786        let data = TestI64 { val: i64::MIN };
3787        let expected_json = format!(r#"{{"val":"{}"}}"#, i64::MIN);
3788        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3789    }
3790
3791    // --- u64 Serialization Tests ---
3792    #[test]
3793    fn serialize_u64_positive() {
3794        let data = TestU64 { val: 789 };
3795        let expected_json = r#"{"val":"789"}"#;
3796        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3797    }
3798
3799    #[test]
3800    fn serialize_u64_zero() {
3801        let data = TestU64 { val: 0 };
3802        let expected_json = r#"{"val":"0"}"#;
3803        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3804    }
3805
3806    #[test]
3807    fn serialize_u64_max() {
3808        let data = TestU64 { val: u64::MAX };
3809        let expected_json = format!(r#"{{"val":"{}"}}"#, u64::MAX);
3810        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3811    }
3812
3813    // --- Option<i64> Tests ---
3814    #[test]
3815    fn deserialize_option_i64_some_from_json_number() {
3816        let json = r#"{"val": 123}"#;
3817        let expected = TestOptionI64 { val: Some(123) };
3818        assert_eq!(
3819            serde_json::from_str::<TestOptionI64>(json).unwrap(),
3820            expected
3821        );
3822    }
3823
3824    #[test]
3825    fn deserialize_option_i64_some_from_json_string() {
3826        let json = r#"{"val": "456"}"#;
3827        let expected = TestOptionI64 { val: Some(456) };
3828        assert_eq!(
3829            serde_json::from_str::<TestOptionI64>(json).unwrap(),
3830            expected
3831        );
3832    }
3833
3834    #[test]
3835    fn deserialize_option_i64_none_from_json_null() {
3836        let json = r#"{"val": null}"#;
3837        let expected = TestOptionI64 { val: None };
3838        assert_eq!(
3839            serde_json::from_str::<TestOptionI64>(json).unwrap(),
3840            expected
3841        );
3842    }
3843
3844    #[test]
3845    fn deserialize_option_i64_error_from_invalid_string() {
3846        let json = r#"{"val": "abc"}"#;
3847        assert!(serde_json::from_str::<TestOptionI64>(json).is_err());
3848    }
3849
3850    #[test]
3851    fn deserialize_option_i64_error_from_invalid_type() {
3852        let json = r#"{"val": true}"#;
3853        assert!(serde_json::from_str::<TestOptionI64>(json).is_err());
3854    }
3855
3856    #[test]
3857    fn serialize_option_i64_some() {
3858        let data = TestOptionI64 { val: Some(123) };
3859        let expected_json = r#"{"val":"123"}"#;
3860        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3861    }
3862
3863    #[test]
3864    fn serialize_option_i64_none() {
3865        let data = TestOptionI64 { val: None };
3866        let expected_json = r#"{"val":null}"#;
3867        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3868    }
3869
3870    // --- Option<u64> Tests ---
3871    #[test]
3872    fn deserialize_option_u64_some_from_json_number() {
3873        let json = r#"{"val": 123}"#;
3874        let expected = TestOptionU64 { val: Some(123) };
3875        assert_eq!(
3876            serde_json::from_str::<TestOptionU64>(json).unwrap(),
3877            expected
3878        );
3879    }
3880
3881    #[test]
3882    fn deserialize_option_u64_some_from_json_string() {
3883        let json = r#"{"val": "456"}"#;
3884        let expected = TestOptionU64 { val: Some(456) };
3885        assert_eq!(
3886            serde_json::from_str::<TestOptionU64>(json).unwrap(),
3887            expected
3888        );
3889    }
3890
3891    #[test]
3892    fn deserialize_option_u64_none_from_json_null() {
3893        let json = r#"{"val": null}"#;
3894        let expected = TestOptionU64 { val: None };
3895        assert_eq!(
3896            serde_json::from_str::<TestOptionU64>(json).unwrap(),
3897            expected
3898        );
3899    }
3900
3901    #[test]
3902    fn deserialize_option_u64_error_from_invalid_string() {
3903        let json = r#"{"val": "abc"}"#;
3904        assert!(serde_json::from_str::<TestOptionU64>(json).is_err());
3905    }
3906
3907    #[test]
3908    fn deserialize_option_u64_error_from_negative_string() {
3909        let json = r#"{"val": "-1"}"#; // Invalid for u64
3910        assert!(serde_json::from_str::<TestOptionU64>(json).is_err());
3911    }
3912
3913    #[test]
3914    fn serialize_option_u64_some() {
3915        let data = TestOptionU64 { val: Some(123) };
3916        let expected_json = r#"{"val":"123"}"#;
3917        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3918    }
3919
3920    #[test]
3921    fn serialize_option_u64_none() {
3922        let data = TestOptionU64 { val: None };
3923        let expected_json = r#"{"val":null}"#;
3924        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3925    }
3926
3927    // --- Vec<i64> Tests ---
3928    #[test]
3929    fn deserialize_vec_i64_empty() {
3930        let json = r#"{"val": []}"#;
3931        let expected = TestVecI64 { val: vec![] };
3932        assert_eq!(serde_json::from_str::<TestVecI64>(json).unwrap(), expected);
3933    }
3934
3935    #[test]
3936    fn deserialize_vec_i64_from_numbers_and_strings() {
3937        let json = r#"{"val": [1, "2", -3, "-4"]}"#;
3938        let expected = TestVecI64 {
3939            val: vec![1, 2, -3, -4],
3940        };
3941        assert_eq!(serde_json::from_str::<TestVecI64>(json).unwrap(), expected);
3942    }
3943
3944    #[test]
3945    fn deserialize_vec_i64_error_if_item_is_invalid_string() {
3946        let json = r#"{"val": [1, "abc", 3]}"#;
3947        let err = serde_json::from_str::<TestVecI64>(json).unwrap_err();
3948        // The error will point to the specific failing element
3949        assert!(err.to_string().contains("invalid digit found in string")); // From parse error
3950    }
3951
3952    #[test]
3953    fn deserialize_vec_i64_error_if_item_is_invalid_type() {
3954        let json = r#"{"val": [1, true, 3]}"#;
3955        assert!(serde_json::from_str::<TestVecI64>(json).is_err());
3956    }
3957
3958    #[test]
3959    fn serialize_vec_i64_empty() {
3960        let data = TestVecI64 { val: vec![] };
3961        let expected_json = r#"{"val":[]}"#;
3962        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3963    }
3964
3965    #[test]
3966    fn serialize_vec_i64_with_values() {
3967        let data = TestVecI64 {
3968            val: vec![1, -2, 0],
3969        };
3970        let expected_json = r#"{"val":["1","-2","0"]}"#;
3971        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
3972    }
3973
3974    // --- Vec<u64> Tests ---
3975    #[test]
3976    fn deserialize_vec_u64_empty() {
3977        let json = r#"{"val": []}"#;
3978        let expected = TestVecU64 { val: vec![] };
3979        assert_eq!(serde_json::from_str::<TestVecU64>(json).unwrap(), expected);
3980    }
3981
3982    #[test]
3983    fn deserialize_vec_u64_from_numbers_and_strings() {
3984        let json = r#"{"val": [1, "2", 3, "4"]}"#;
3985        let expected = TestVecU64 {
3986            val: vec![1, 2, 3, 4],
3987        };
3988        assert_eq!(serde_json::from_str::<TestVecU64>(json).unwrap(), expected);
3989    }
3990
3991    #[test]
3992    fn deserialize_vec_u64_error_if_item_is_invalid_string() {
3993        let json = r#"{"val": [1, "abc", 3]}"#;
3994        let err = serde_json::from_str::<TestVecU64>(json).unwrap_err();
3995        assert!(err.to_string().contains("invalid digit found in string"));
3996    }
3997
3998    #[test]
3999    fn deserialize_vec_u64_error_if_item_is_negative_string() {
4000        let json = r#"{"val": [1, "-2", 3]}"#;
4001        let err = serde_json::from_str::<TestVecU64>(json).unwrap_err();
4002        assert!(err.to_string().contains("invalid digit found in string")); // u64 parse error
4003    }
4004
4005    #[test]
4006    fn deserialize_vec_u64_error_if_item_is_negative_number() {
4007        let json = r#"{"val": [1, -2, 3]}"#;
4008        assert!(serde_json::from_str::<TestVecU64>(json).is_err());
4009    }
4010
4011    #[test]
4012    fn serialize_vec_u64_empty() {
4013        let data = TestVecU64 { val: vec![] };
4014        let expected_json = r#"{"val":[]}"#;
4015        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
4016    }
4017
4018    #[test]
4019    fn serialize_vec_u64_with_values() {
4020        let data = TestVecU64 { val: vec![1, 2, 0] };
4021        let expected_json = r#"{"val":["1","2","0"]}"#;
4022        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
4023    }
4024
4025    // --- Enum with NumberOrString field Tests ---
4026    #[test]
4027    fn deserialize_enum_variant_a_with_number() {
4028        let json = r#"{"variantA": {"numVal": 123, "otherData": "test"}}"#;
4029        let expected = TestEnum::VariantA {
4030            num_val: 123,
4031            other_data: "test".to_string(),
4032        };
4033        assert_eq!(serde_json::from_str::<TestEnum>(json).unwrap(), expected);
4034    }
4035
4036    #[test]
4037    fn deserialize_enum_variant_a_with_string_number() {
4038        let json = r#"{"variantA": {"numVal": "-45", "otherData": "data"}}"#;
4039        let expected = TestEnum::VariantA {
4040            num_val: -45,
4041            other_data: "data".to_string(),
4042        };
4043        assert_eq!(serde_json::from_str::<TestEnum>(json).unwrap(), expected);
4044    }
4045
4046    #[test]
4047    fn deserialize_enum_variant_b_with_number() {
4048        let json = r#"{"variantB": {"count": 7890}}"#;
4049        let expected = TestEnum::VariantB { count: 7890 };
4050        assert_eq!(serde_json::from_str::<TestEnum>(json).unwrap(), expected);
4051    }
4052
4053    #[test]
4054    fn deserialize_enum_variant_b_with_string_number() {
4055        let json = r#"{"variantB": {"count": "1234567890"}}"#;
4056        let expected = TestEnum::VariantB { count: 1234567890 };
4057        assert_eq!(serde_json::from_str::<TestEnum>(json).unwrap(), expected);
4058    }
4059
4060    #[test]
4061    fn deserialize_enum_variant_a_error_invalid_num_string() {
4062        let json = r#"{"variantA": {"numVal": "abc", "otherData": "test"}}"#;
4063        assert!(serde_json::from_str::<TestEnum>(json).is_err());
4064    }
4065
4066    #[test]
4067    fn serialize_enum_variant_a() {
4068        let data = TestEnum::VariantA {
4069            num_val: 123,
4070            other_data: "test".to_string(),
4071        };
4072        // Note: num_val will be serialized as a string by NumberOrString
4073        let expected_json = r#"{"variantA":{"numVal":"123","otherData":"test"}}"#;
4074        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
4075    }
4076
4077    #[test]
4078    fn serialize_enum_variant_b() {
4079        let data = TestEnum::VariantB { count: 7890 };
4080        let expected_json = r#"{"variantB":{"count":"7890"}}"#;
4081        assert_eq!(serde_json::to_string(&data).unwrap(), expected_json);
4082    }
4083}
4084
4085/// Value is an XDR Typedef defines as:
4086///
4087/// ```text
4088/// typedef opaque Value<>;
4089/// ```
4090///
4091#[cfg_eval::cfg_eval]
4092#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
4093#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4094#[cfg_attr(
4095    all(feature = "serde", feature = "alloc"),
4096    serde_with::serde_as,
4097    derive(serde::Serialize, serde::Deserialize),
4098    serde(rename_all = "snake_case")
4099)]
4100#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4101#[derive(Debug)]
4102pub struct Value(pub BytesM);
4103
4104impl From<Value> for BytesM {
4105    #[must_use]
4106    fn from(x: Value) -> Self {
4107        x.0
4108    }
4109}
4110
4111impl From<BytesM> for Value {
4112    #[must_use]
4113    fn from(x: BytesM) -> Self {
4114        Value(x)
4115    }
4116}
4117
4118impl AsRef<BytesM> for Value {
4119    #[must_use]
4120    fn as_ref(&self) -> &BytesM {
4121        &self.0
4122    }
4123}
4124
4125impl ReadXdr for Value {
4126    #[cfg(feature = "std")]
4127    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4128        r.with_limited_depth(|r| {
4129            let i = BytesM::read_xdr(r)?;
4130            let v = Value(i);
4131            Ok(v)
4132        })
4133    }
4134}
4135
4136impl WriteXdr for Value {
4137    #[cfg(feature = "std")]
4138    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4139        w.with_limited_depth(|w| self.0.write_xdr(w))
4140    }
4141}
4142
4143impl Deref for Value {
4144    type Target = BytesM;
4145    fn deref(&self) -> &Self::Target {
4146        &self.0
4147    }
4148}
4149
4150impl From<Value> for Vec<u8> {
4151    #[must_use]
4152    fn from(x: Value) -> Self {
4153        x.0 .0
4154    }
4155}
4156
4157impl TryFrom<Vec<u8>> for Value {
4158    type Error = Error;
4159    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
4160        Ok(Value(x.try_into()?))
4161    }
4162}
4163
4164#[cfg(feature = "alloc")]
4165impl TryFrom<&Vec<u8>> for Value {
4166    type Error = Error;
4167    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
4168        Ok(Value(x.try_into()?))
4169    }
4170}
4171
4172impl AsRef<Vec<u8>> for Value {
4173    #[must_use]
4174    fn as_ref(&self) -> &Vec<u8> {
4175        &self.0 .0
4176    }
4177}
4178
4179impl AsRef<[u8]> for Value {
4180    #[cfg(feature = "alloc")]
4181    #[must_use]
4182    fn as_ref(&self) -> &[u8] {
4183        &self.0 .0
4184    }
4185    #[cfg(not(feature = "alloc"))]
4186    #[must_use]
4187    fn as_ref(&self) -> &[u8] {
4188        self.0 .0
4189    }
4190}
4191
4192/// ScpBallot is an XDR Struct defines as:
4193///
4194/// ```text
4195/// struct SCPBallot
4196/// {
4197///     uint32 counter; // n
4198///     Value value;    // x
4199/// };
4200/// ```
4201///
4202#[cfg_attr(feature = "alloc", derive(Default))]
4203#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
4204#[cfg_eval::cfg_eval]
4205#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4206#[cfg_attr(
4207    all(feature = "serde", feature = "alloc"),
4208    serde_with::serde_as,
4209    derive(serde::Serialize, serde::Deserialize),
4210    serde(rename_all = "snake_case")
4211)]
4212#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4213pub struct ScpBallot {
4214    pub counter: u32,
4215    pub value: Value,
4216}
4217
4218impl ReadXdr for ScpBallot {
4219    #[cfg(feature = "std")]
4220    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4221        r.with_limited_depth(|r| {
4222            Ok(Self {
4223                counter: u32::read_xdr(r)?,
4224                value: Value::read_xdr(r)?,
4225            })
4226        })
4227    }
4228}
4229
4230impl WriteXdr for ScpBallot {
4231    #[cfg(feature = "std")]
4232    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4233        w.with_limited_depth(|w| {
4234            self.counter.write_xdr(w)?;
4235            self.value.write_xdr(w)?;
4236            Ok(())
4237        })
4238    }
4239}
4240
4241/// ScpStatementType is an XDR Enum defines as:
4242///
4243/// ```text
4244/// enum SCPStatementType
4245/// {
4246///     SCP_ST_PREPARE = 0,
4247///     SCP_ST_CONFIRM = 1,
4248///     SCP_ST_EXTERNALIZE = 2,
4249///     SCP_ST_NOMINATE = 3
4250/// };
4251/// ```
4252///
4253// enum
4254#[cfg_attr(feature = "alloc", derive(Default))]
4255#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
4256#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4257#[cfg_attr(
4258    all(feature = "serde", feature = "alloc"),
4259    derive(serde::Serialize, serde::Deserialize),
4260    serde(rename_all = "snake_case")
4261)]
4262#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4263#[repr(i32)]
4264pub enum ScpStatementType {
4265    #[cfg_attr(feature = "alloc", default)]
4266    Prepare = 0,
4267    Confirm = 1,
4268    Externalize = 2,
4269    Nominate = 3,
4270}
4271
4272impl ScpStatementType {
4273    pub const VARIANTS: [ScpStatementType; 4] = [
4274        ScpStatementType::Prepare,
4275        ScpStatementType::Confirm,
4276        ScpStatementType::Externalize,
4277        ScpStatementType::Nominate,
4278    ];
4279    pub const VARIANTS_STR: [&'static str; 4] = ["Prepare", "Confirm", "Externalize", "Nominate"];
4280
4281    #[must_use]
4282    pub const fn name(&self) -> &'static str {
4283        match self {
4284            Self::Prepare => "Prepare",
4285            Self::Confirm => "Confirm",
4286            Self::Externalize => "Externalize",
4287            Self::Nominate => "Nominate",
4288        }
4289    }
4290
4291    #[must_use]
4292    pub const fn variants() -> [ScpStatementType; 4] {
4293        Self::VARIANTS
4294    }
4295}
4296
4297impl Name for ScpStatementType {
4298    #[must_use]
4299    fn name(&self) -> &'static str {
4300        Self::name(self)
4301    }
4302}
4303
4304impl Variants<ScpStatementType> for ScpStatementType {
4305    fn variants() -> slice::Iter<'static, ScpStatementType> {
4306        Self::VARIANTS.iter()
4307    }
4308}
4309
4310impl Enum for ScpStatementType {}
4311
4312impl fmt::Display for ScpStatementType {
4313    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
4314        f.write_str(self.name())
4315    }
4316}
4317
4318impl TryFrom<i32> for ScpStatementType {
4319    type Error = Error;
4320
4321    fn try_from(i: i32) -> Result<Self, Error> {
4322        let e = match i {
4323            0 => ScpStatementType::Prepare,
4324            1 => ScpStatementType::Confirm,
4325            2 => ScpStatementType::Externalize,
4326            3 => ScpStatementType::Nominate,
4327            #[allow(unreachable_patterns)]
4328            _ => return Err(Error::Invalid),
4329        };
4330        Ok(e)
4331    }
4332}
4333
4334impl From<ScpStatementType> for i32 {
4335    #[must_use]
4336    fn from(e: ScpStatementType) -> Self {
4337        e as Self
4338    }
4339}
4340
4341impl ReadXdr for ScpStatementType {
4342    #[cfg(feature = "std")]
4343    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4344        r.with_limited_depth(|r| {
4345            let e = i32::read_xdr(r)?;
4346            let v: Self = e.try_into()?;
4347            Ok(v)
4348        })
4349    }
4350}
4351
4352impl WriteXdr for ScpStatementType {
4353    #[cfg(feature = "std")]
4354    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4355        w.with_limited_depth(|w| {
4356            let i: i32 = (*self).into();
4357            i.write_xdr(w)
4358        })
4359    }
4360}
4361
4362/// ScpNomination is an XDR Struct defines as:
4363///
4364/// ```text
4365/// struct SCPNomination
4366/// {
4367///     Hash quorumSetHash; // D
4368///     Value votes<>;      // X
4369///     Value accepted<>;   // Y
4370/// };
4371/// ```
4372///
4373#[cfg_attr(feature = "alloc", derive(Default))]
4374#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
4375#[cfg_eval::cfg_eval]
4376#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4377#[cfg_attr(
4378    all(feature = "serde", feature = "alloc"),
4379    serde_with::serde_as,
4380    derive(serde::Serialize, serde::Deserialize),
4381    serde(rename_all = "snake_case")
4382)]
4383#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4384pub struct ScpNomination {
4385    pub quorum_set_hash: Hash,
4386    pub votes: VecM<Value>,
4387    pub accepted: VecM<Value>,
4388}
4389
4390impl ReadXdr for ScpNomination {
4391    #[cfg(feature = "std")]
4392    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4393        r.with_limited_depth(|r| {
4394            Ok(Self {
4395                quorum_set_hash: Hash::read_xdr(r)?,
4396                votes: VecM::<Value>::read_xdr(r)?,
4397                accepted: VecM::<Value>::read_xdr(r)?,
4398            })
4399        })
4400    }
4401}
4402
4403impl WriteXdr for ScpNomination {
4404    #[cfg(feature = "std")]
4405    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4406        w.with_limited_depth(|w| {
4407            self.quorum_set_hash.write_xdr(w)?;
4408            self.votes.write_xdr(w)?;
4409            self.accepted.write_xdr(w)?;
4410            Ok(())
4411        })
4412    }
4413}
4414
4415/// ScpStatementPrepare is an XDR NestedStruct defines as:
4416///
4417/// ```text
4418/// struct
4419///         {
4420///             Hash quorumSetHash;       // D
4421///             SCPBallot ballot;         // b
4422///             SCPBallot* prepared;      // p
4423///             SCPBallot* preparedPrime; // p'
4424///             uint32 nC;                // c.n
4425///             uint32 nH;                // h.n
4426///         }
4427/// ```
4428///
4429#[cfg_attr(feature = "alloc", derive(Default))]
4430#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
4431#[cfg_eval::cfg_eval]
4432#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4433#[cfg_attr(
4434    all(feature = "serde", feature = "alloc"),
4435    serde_with::serde_as,
4436    derive(serde::Serialize, serde::Deserialize),
4437    serde(rename_all = "snake_case")
4438)]
4439#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4440pub struct ScpStatementPrepare {
4441    pub quorum_set_hash: Hash,
4442    pub ballot: ScpBallot,
4443    pub prepared: Option<ScpBallot>,
4444    pub prepared_prime: Option<ScpBallot>,
4445    pub n_c: u32,
4446    pub n_h: u32,
4447}
4448
4449impl ReadXdr for ScpStatementPrepare {
4450    #[cfg(feature = "std")]
4451    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4452        r.with_limited_depth(|r| {
4453            Ok(Self {
4454                quorum_set_hash: Hash::read_xdr(r)?,
4455                ballot: ScpBallot::read_xdr(r)?,
4456                prepared: Option::<ScpBallot>::read_xdr(r)?,
4457                prepared_prime: Option::<ScpBallot>::read_xdr(r)?,
4458                n_c: u32::read_xdr(r)?,
4459                n_h: u32::read_xdr(r)?,
4460            })
4461        })
4462    }
4463}
4464
4465impl WriteXdr for ScpStatementPrepare {
4466    #[cfg(feature = "std")]
4467    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4468        w.with_limited_depth(|w| {
4469            self.quorum_set_hash.write_xdr(w)?;
4470            self.ballot.write_xdr(w)?;
4471            self.prepared.write_xdr(w)?;
4472            self.prepared_prime.write_xdr(w)?;
4473            self.n_c.write_xdr(w)?;
4474            self.n_h.write_xdr(w)?;
4475            Ok(())
4476        })
4477    }
4478}
4479
4480/// ScpStatementConfirm is an XDR NestedStruct defines as:
4481///
4482/// ```text
4483/// struct
4484///         {
4485///             SCPBallot ballot;   // b
4486///             uint32 nPrepared;   // p.n
4487///             uint32 nCommit;     // c.n
4488///             uint32 nH;          // h.n
4489///             Hash quorumSetHash; // D
4490///         }
4491/// ```
4492///
4493#[cfg_attr(feature = "alloc", derive(Default))]
4494#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
4495#[cfg_eval::cfg_eval]
4496#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4497#[cfg_attr(
4498    all(feature = "serde", feature = "alloc"),
4499    serde_with::serde_as,
4500    derive(serde::Serialize, serde::Deserialize),
4501    serde(rename_all = "snake_case")
4502)]
4503#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4504pub struct ScpStatementConfirm {
4505    pub ballot: ScpBallot,
4506    pub n_prepared: u32,
4507    pub n_commit: u32,
4508    pub n_h: u32,
4509    pub quorum_set_hash: Hash,
4510}
4511
4512impl ReadXdr for ScpStatementConfirm {
4513    #[cfg(feature = "std")]
4514    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4515        r.with_limited_depth(|r| {
4516            Ok(Self {
4517                ballot: ScpBallot::read_xdr(r)?,
4518                n_prepared: u32::read_xdr(r)?,
4519                n_commit: u32::read_xdr(r)?,
4520                n_h: u32::read_xdr(r)?,
4521                quorum_set_hash: Hash::read_xdr(r)?,
4522            })
4523        })
4524    }
4525}
4526
4527impl WriteXdr for ScpStatementConfirm {
4528    #[cfg(feature = "std")]
4529    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4530        w.with_limited_depth(|w| {
4531            self.ballot.write_xdr(w)?;
4532            self.n_prepared.write_xdr(w)?;
4533            self.n_commit.write_xdr(w)?;
4534            self.n_h.write_xdr(w)?;
4535            self.quorum_set_hash.write_xdr(w)?;
4536            Ok(())
4537        })
4538    }
4539}
4540
4541/// ScpStatementExternalize is an XDR NestedStruct defines as:
4542///
4543/// ```text
4544/// struct
4545///         {
4546///             SCPBallot commit;         // c
4547///             uint32 nH;                // h.n
4548///             Hash commitQuorumSetHash; // D used before EXTERNALIZE
4549///         }
4550/// ```
4551///
4552#[cfg_attr(feature = "alloc", derive(Default))]
4553#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
4554#[cfg_eval::cfg_eval]
4555#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4556#[cfg_attr(
4557    all(feature = "serde", feature = "alloc"),
4558    serde_with::serde_as,
4559    derive(serde::Serialize, serde::Deserialize),
4560    serde(rename_all = "snake_case")
4561)]
4562#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4563pub struct ScpStatementExternalize {
4564    pub commit: ScpBallot,
4565    pub n_h: u32,
4566    pub commit_quorum_set_hash: Hash,
4567}
4568
4569impl ReadXdr for ScpStatementExternalize {
4570    #[cfg(feature = "std")]
4571    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4572        r.with_limited_depth(|r| {
4573            Ok(Self {
4574                commit: ScpBallot::read_xdr(r)?,
4575                n_h: u32::read_xdr(r)?,
4576                commit_quorum_set_hash: Hash::read_xdr(r)?,
4577            })
4578        })
4579    }
4580}
4581
4582impl WriteXdr for ScpStatementExternalize {
4583    #[cfg(feature = "std")]
4584    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4585        w.with_limited_depth(|w| {
4586            self.commit.write_xdr(w)?;
4587            self.n_h.write_xdr(w)?;
4588            self.commit_quorum_set_hash.write_xdr(w)?;
4589            Ok(())
4590        })
4591    }
4592}
4593
4594/// ScpStatementPledges is an XDR NestedUnion defines as:
4595///
4596/// ```text
4597/// union switch (SCPStatementType type)
4598///     {
4599///     case SCP_ST_PREPARE:
4600///         struct
4601///         {
4602///             Hash quorumSetHash;       // D
4603///             SCPBallot ballot;         // b
4604///             SCPBallot* prepared;      // p
4605///             SCPBallot* preparedPrime; // p'
4606///             uint32 nC;                // c.n
4607///             uint32 nH;                // h.n
4608///         } prepare;
4609///     case SCP_ST_CONFIRM:
4610///         struct
4611///         {
4612///             SCPBallot ballot;   // b
4613///             uint32 nPrepared;   // p.n
4614///             uint32 nCommit;     // c.n
4615///             uint32 nH;          // h.n
4616///             Hash quorumSetHash; // D
4617///         } confirm;
4618///     case SCP_ST_EXTERNALIZE:
4619///         struct
4620///         {
4621///             SCPBallot commit;         // c
4622///             uint32 nH;                // h.n
4623///             Hash commitQuorumSetHash; // D used before EXTERNALIZE
4624///         } externalize;
4625///     case SCP_ST_NOMINATE:
4626///         SCPNomination nominate;
4627///     }
4628/// ```
4629///
4630// union with discriminant ScpStatementType
4631#[cfg_eval::cfg_eval]
4632#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
4633#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4634#[cfg_attr(
4635    all(feature = "serde", feature = "alloc"),
4636    serde_with::serde_as,
4637    derive(serde::Serialize, serde::Deserialize),
4638    serde(rename_all = "snake_case")
4639)]
4640#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4641#[allow(clippy::large_enum_variant)]
4642pub enum ScpStatementPledges {
4643    Prepare(ScpStatementPrepare),
4644    Confirm(ScpStatementConfirm),
4645    Externalize(ScpStatementExternalize),
4646    Nominate(ScpNomination),
4647}
4648
4649#[cfg(feature = "alloc")]
4650impl Default for ScpStatementPledges {
4651    fn default() -> Self {
4652        Self::Prepare(ScpStatementPrepare::default())
4653    }
4654}
4655
4656impl ScpStatementPledges {
4657    pub const VARIANTS: [ScpStatementType; 4] = [
4658        ScpStatementType::Prepare,
4659        ScpStatementType::Confirm,
4660        ScpStatementType::Externalize,
4661        ScpStatementType::Nominate,
4662    ];
4663    pub const VARIANTS_STR: [&'static str; 4] = ["Prepare", "Confirm", "Externalize", "Nominate"];
4664
4665    #[must_use]
4666    pub const fn name(&self) -> &'static str {
4667        match self {
4668            Self::Prepare(_) => "Prepare",
4669            Self::Confirm(_) => "Confirm",
4670            Self::Externalize(_) => "Externalize",
4671            Self::Nominate(_) => "Nominate",
4672        }
4673    }
4674
4675    #[must_use]
4676    pub const fn discriminant(&self) -> ScpStatementType {
4677        #[allow(clippy::match_same_arms)]
4678        match self {
4679            Self::Prepare(_) => ScpStatementType::Prepare,
4680            Self::Confirm(_) => ScpStatementType::Confirm,
4681            Self::Externalize(_) => ScpStatementType::Externalize,
4682            Self::Nominate(_) => ScpStatementType::Nominate,
4683        }
4684    }
4685
4686    #[must_use]
4687    pub const fn variants() -> [ScpStatementType; 4] {
4688        Self::VARIANTS
4689    }
4690}
4691
4692impl Name for ScpStatementPledges {
4693    #[must_use]
4694    fn name(&self) -> &'static str {
4695        Self::name(self)
4696    }
4697}
4698
4699impl Discriminant<ScpStatementType> for ScpStatementPledges {
4700    #[must_use]
4701    fn discriminant(&self) -> ScpStatementType {
4702        Self::discriminant(self)
4703    }
4704}
4705
4706impl Variants<ScpStatementType> for ScpStatementPledges {
4707    fn variants() -> slice::Iter<'static, ScpStatementType> {
4708        Self::VARIANTS.iter()
4709    }
4710}
4711
4712impl Union<ScpStatementType> for ScpStatementPledges {}
4713
4714impl ReadXdr for ScpStatementPledges {
4715    #[cfg(feature = "std")]
4716    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4717        r.with_limited_depth(|r| {
4718            let dv: ScpStatementType = <ScpStatementType as ReadXdr>::read_xdr(r)?;
4719            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
4720            let v = match dv {
4721                ScpStatementType::Prepare => Self::Prepare(ScpStatementPrepare::read_xdr(r)?),
4722                ScpStatementType::Confirm => Self::Confirm(ScpStatementConfirm::read_xdr(r)?),
4723                ScpStatementType::Externalize => {
4724                    Self::Externalize(ScpStatementExternalize::read_xdr(r)?)
4725                }
4726                ScpStatementType::Nominate => Self::Nominate(ScpNomination::read_xdr(r)?),
4727                #[allow(unreachable_patterns)]
4728                _ => return Err(Error::Invalid),
4729            };
4730            Ok(v)
4731        })
4732    }
4733}
4734
4735impl WriteXdr for ScpStatementPledges {
4736    #[cfg(feature = "std")]
4737    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4738        w.with_limited_depth(|w| {
4739            self.discriminant().write_xdr(w)?;
4740            #[allow(clippy::match_same_arms)]
4741            match self {
4742                Self::Prepare(v) => v.write_xdr(w)?,
4743                Self::Confirm(v) => v.write_xdr(w)?,
4744                Self::Externalize(v) => v.write_xdr(w)?,
4745                Self::Nominate(v) => v.write_xdr(w)?,
4746            };
4747            Ok(())
4748        })
4749    }
4750}
4751
4752/// ScpStatement is an XDR Struct defines as:
4753///
4754/// ```text
4755/// struct SCPStatement
4756/// {
4757///     NodeID nodeID;    // v
4758///     uint64 slotIndex; // i
4759///
4760///     union switch (SCPStatementType type)
4761///     {
4762///     case SCP_ST_PREPARE:
4763///         struct
4764///         {
4765///             Hash quorumSetHash;       // D
4766///             SCPBallot ballot;         // b
4767///             SCPBallot* prepared;      // p
4768///             SCPBallot* preparedPrime; // p'
4769///             uint32 nC;                // c.n
4770///             uint32 nH;                // h.n
4771///         } prepare;
4772///     case SCP_ST_CONFIRM:
4773///         struct
4774///         {
4775///             SCPBallot ballot;   // b
4776///             uint32 nPrepared;   // p.n
4777///             uint32 nCommit;     // c.n
4778///             uint32 nH;          // h.n
4779///             Hash quorumSetHash; // D
4780///         } confirm;
4781///     case SCP_ST_EXTERNALIZE:
4782///         struct
4783///         {
4784///             SCPBallot commit;         // c
4785///             uint32 nH;                // h.n
4786///             Hash commitQuorumSetHash; // D used before EXTERNALIZE
4787///         } externalize;
4788///     case SCP_ST_NOMINATE:
4789///         SCPNomination nominate;
4790///     }
4791///     pledges;
4792/// };
4793/// ```
4794///
4795#[cfg_attr(feature = "alloc", derive(Default))]
4796#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
4797#[cfg_eval::cfg_eval]
4798#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4799#[cfg_attr(
4800    all(feature = "serde", feature = "alloc"),
4801    serde_with::serde_as,
4802    derive(serde::Serialize, serde::Deserialize),
4803    serde(rename_all = "snake_case")
4804)]
4805#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4806pub struct ScpStatement {
4807    pub node_id: NodeId,
4808    #[cfg_attr(
4809        all(feature = "serde", feature = "alloc"),
4810        serde_as(as = "NumberOrString")
4811    )]
4812    pub slot_index: u64,
4813    pub pledges: ScpStatementPledges,
4814}
4815
4816impl ReadXdr for ScpStatement {
4817    #[cfg(feature = "std")]
4818    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4819        r.with_limited_depth(|r| {
4820            Ok(Self {
4821                node_id: NodeId::read_xdr(r)?,
4822                slot_index: u64::read_xdr(r)?,
4823                pledges: ScpStatementPledges::read_xdr(r)?,
4824            })
4825        })
4826    }
4827}
4828
4829impl WriteXdr for ScpStatement {
4830    #[cfg(feature = "std")]
4831    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4832        w.with_limited_depth(|w| {
4833            self.node_id.write_xdr(w)?;
4834            self.slot_index.write_xdr(w)?;
4835            self.pledges.write_xdr(w)?;
4836            Ok(())
4837        })
4838    }
4839}
4840
4841/// ScpEnvelope is an XDR Struct defines as:
4842///
4843/// ```text
4844/// struct SCPEnvelope
4845/// {
4846///     SCPStatement statement;
4847///     Signature signature;
4848/// };
4849/// ```
4850///
4851#[cfg_attr(feature = "alloc", derive(Default))]
4852#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
4853#[cfg_eval::cfg_eval]
4854#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4855#[cfg_attr(
4856    all(feature = "serde", feature = "alloc"),
4857    serde_with::serde_as,
4858    derive(serde::Serialize, serde::Deserialize),
4859    serde(rename_all = "snake_case")
4860)]
4861#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4862pub struct ScpEnvelope {
4863    pub statement: ScpStatement,
4864    pub signature: Signature,
4865}
4866
4867impl ReadXdr for ScpEnvelope {
4868    #[cfg(feature = "std")]
4869    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4870        r.with_limited_depth(|r| {
4871            Ok(Self {
4872                statement: ScpStatement::read_xdr(r)?,
4873                signature: Signature::read_xdr(r)?,
4874            })
4875        })
4876    }
4877}
4878
4879impl WriteXdr for ScpEnvelope {
4880    #[cfg(feature = "std")]
4881    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4882        w.with_limited_depth(|w| {
4883            self.statement.write_xdr(w)?;
4884            self.signature.write_xdr(w)?;
4885            Ok(())
4886        })
4887    }
4888}
4889
4890/// ScpQuorumSet is an XDR Struct defines as:
4891///
4892/// ```text
4893/// struct SCPQuorumSet
4894/// {
4895///     uint32 threshold;
4896///     NodeID validators<>;
4897///     SCPQuorumSet innerSets<>;
4898/// };
4899/// ```
4900///
4901#[cfg_attr(feature = "alloc", derive(Default))]
4902#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
4903#[cfg_eval::cfg_eval]
4904#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4905#[cfg_attr(
4906    all(feature = "serde", feature = "alloc"),
4907    serde_with::serde_as,
4908    derive(serde::Serialize, serde::Deserialize),
4909    serde(rename_all = "snake_case")
4910)]
4911#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4912pub struct ScpQuorumSet {
4913    pub threshold: u32,
4914    pub validators: VecM<NodeId>,
4915    pub inner_sets: VecM<ScpQuorumSet>,
4916}
4917
4918impl ReadXdr for ScpQuorumSet {
4919    #[cfg(feature = "std")]
4920    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4921        r.with_limited_depth(|r| {
4922            Ok(Self {
4923                threshold: u32::read_xdr(r)?,
4924                validators: VecM::<NodeId>::read_xdr(r)?,
4925                inner_sets: VecM::<ScpQuorumSet>::read_xdr(r)?,
4926            })
4927        })
4928    }
4929}
4930
4931impl WriteXdr for ScpQuorumSet {
4932    #[cfg(feature = "std")]
4933    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4934        w.with_limited_depth(|w| {
4935            self.threshold.write_xdr(w)?;
4936            self.validators.write_xdr(w)?;
4937            self.inner_sets.write_xdr(w)?;
4938            Ok(())
4939        })
4940    }
4941}
4942
4943/// ConfigSettingContractExecutionLanesV0 is an XDR Struct defines as:
4944///
4945/// ```text
4946/// struct ConfigSettingContractExecutionLanesV0
4947/// {
4948///     // maximum number of Soroban transactions per ledger
4949///     uint32 ledgerMaxTxCount;
4950/// };
4951/// ```
4952///
4953#[cfg_attr(feature = "alloc", derive(Default))]
4954#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
4955#[cfg_eval::cfg_eval]
4956#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
4957#[cfg_attr(
4958    all(feature = "serde", feature = "alloc"),
4959    serde_with::serde_as,
4960    derive(serde::Serialize, serde::Deserialize),
4961    serde(rename_all = "snake_case")
4962)]
4963#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
4964pub struct ConfigSettingContractExecutionLanesV0 {
4965    pub ledger_max_tx_count: u32,
4966}
4967
4968impl ReadXdr for ConfigSettingContractExecutionLanesV0 {
4969    #[cfg(feature = "std")]
4970    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
4971        r.with_limited_depth(|r| {
4972            Ok(Self {
4973                ledger_max_tx_count: u32::read_xdr(r)?,
4974            })
4975        })
4976    }
4977}
4978
4979impl WriteXdr for ConfigSettingContractExecutionLanesV0 {
4980    #[cfg(feature = "std")]
4981    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
4982        w.with_limited_depth(|w| {
4983            self.ledger_max_tx_count.write_xdr(w)?;
4984            Ok(())
4985        })
4986    }
4987}
4988
4989/// ConfigSettingContractComputeV0 is an XDR Struct defines as:
4990///
4991/// ```text
4992/// struct ConfigSettingContractComputeV0
4993/// {
4994///     // Maximum instructions per ledger
4995///     int64 ledgerMaxInstructions;
4996///     // Maximum instructions per transaction
4997///     int64 txMaxInstructions;
4998///     // Cost of 10000 instructions
4999///     int64 feeRatePerInstructionsIncrement;
5000///
5001///     // Memory limit per transaction. Unlike instructions, there is no fee
5002///     // for memory, just the limit.
5003///     uint32 txMemoryLimit;
5004/// };
5005/// ```
5006///
5007#[cfg_attr(feature = "alloc", derive(Default))]
5008#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
5009#[cfg_eval::cfg_eval]
5010#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5011#[cfg_attr(
5012    all(feature = "serde", feature = "alloc"),
5013    serde_with::serde_as,
5014    derive(serde::Serialize, serde::Deserialize),
5015    serde(rename_all = "snake_case")
5016)]
5017#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
5018pub struct ConfigSettingContractComputeV0 {
5019    #[cfg_attr(
5020        all(feature = "serde", feature = "alloc"),
5021        serde_as(as = "NumberOrString")
5022    )]
5023    pub ledger_max_instructions: i64,
5024    #[cfg_attr(
5025        all(feature = "serde", feature = "alloc"),
5026        serde_as(as = "NumberOrString")
5027    )]
5028    pub tx_max_instructions: i64,
5029    #[cfg_attr(
5030        all(feature = "serde", feature = "alloc"),
5031        serde_as(as = "NumberOrString")
5032    )]
5033    pub fee_rate_per_instructions_increment: i64,
5034    pub tx_memory_limit: u32,
5035}
5036
5037impl ReadXdr for ConfigSettingContractComputeV0 {
5038    #[cfg(feature = "std")]
5039    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
5040        r.with_limited_depth(|r| {
5041            Ok(Self {
5042                ledger_max_instructions: i64::read_xdr(r)?,
5043                tx_max_instructions: i64::read_xdr(r)?,
5044                fee_rate_per_instructions_increment: i64::read_xdr(r)?,
5045                tx_memory_limit: u32::read_xdr(r)?,
5046            })
5047        })
5048    }
5049}
5050
5051impl WriteXdr for ConfigSettingContractComputeV0 {
5052    #[cfg(feature = "std")]
5053    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
5054        w.with_limited_depth(|w| {
5055            self.ledger_max_instructions.write_xdr(w)?;
5056            self.tx_max_instructions.write_xdr(w)?;
5057            self.fee_rate_per_instructions_increment.write_xdr(w)?;
5058            self.tx_memory_limit.write_xdr(w)?;
5059            Ok(())
5060        })
5061    }
5062}
5063
5064/// ConfigSettingContractParallelComputeV0 is an XDR Struct defines as:
5065///
5066/// ```text
5067/// struct ConfigSettingContractParallelComputeV0
5068/// {
5069///     // Maximum number of clusters with dependent transactions allowed in a
5070///     // stage of parallel tx set component.
5071///     // This effectively sets the lower bound on the number of physical threads
5072///     // necessary to effectively apply transaction sets in parallel.
5073///     uint32 ledgerMaxDependentTxClusters;
5074/// };
5075/// ```
5076///
5077#[cfg_attr(feature = "alloc", derive(Default))]
5078#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
5079#[cfg_eval::cfg_eval]
5080#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5081#[cfg_attr(
5082    all(feature = "serde", feature = "alloc"),
5083    serde_with::serde_as,
5084    derive(serde::Serialize, serde::Deserialize),
5085    serde(rename_all = "snake_case")
5086)]
5087#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
5088pub struct ConfigSettingContractParallelComputeV0 {
5089    pub ledger_max_dependent_tx_clusters: u32,
5090}
5091
5092impl ReadXdr for ConfigSettingContractParallelComputeV0 {
5093    #[cfg(feature = "std")]
5094    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
5095        r.with_limited_depth(|r| {
5096            Ok(Self {
5097                ledger_max_dependent_tx_clusters: u32::read_xdr(r)?,
5098            })
5099        })
5100    }
5101}
5102
5103impl WriteXdr for ConfigSettingContractParallelComputeV0 {
5104    #[cfg(feature = "std")]
5105    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
5106        w.with_limited_depth(|w| {
5107            self.ledger_max_dependent_tx_clusters.write_xdr(w)?;
5108            Ok(())
5109        })
5110    }
5111}
5112
5113/// ConfigSettingContractLedgerCostV0 is an XDR Struct defines as:
5114///
5115/// ```text
5116/// struct ConfigSettingContractLedgerCostV0
5117/// {
5118///     // Maximum number of disk entry read operations per ledger
5119///     uint32 ledgerMaxDiskReadEntries;
5120///     // Maximum number of bytes of disk reads that can be performed per ledger
5121///     uint32 ledgerMaxDiskReadBytes;
5122///     // Maximum number of ledger entry write operations per ledger
5123///     uint32 ledgerMaxWriteLedgerEntries;
5124///     // Maximum number of bytes that can be written per ledger
5125///     uint32 ledgerMaxWriteBytes;
5126///
5127///     // Maximum number of disk entry read operations per transaction
5128///     uint32 txMaxDiskReadEntries;
5129///     // Maximum number of bytes of disk reads that can be performed per transaction
5130///     uint32 txMaxDiskReadBytes;
5131///     // Maximum number of ledger entry write operations per transaction
5132///     uint32 txMaxWriteLedgerEntries;
5133///     // Maximum number of bytes that can be written per transaction
5134///     uint32 txMaxWriteBytes;
5135///
5136///     int64 feeDiskReadLedgerEntry;  // Fee per disk ledger entry read
5137///     int64 feeWriteLedgerEntry;     // Fee per ledger entry write
5138///
5139///     int64 feeDiskRead1KB;          // Fee for reading 1KB disk
5140///
5141///     // The following parameters determine the write fee per 1KB.
5142///     // Rent fee grows linearly until soroban state reaches this size
5143///     int64 sorobanStateTargetSizeBytes;
5144///     // Fee per 1KB rent when the soroban state is empty
5145///     int64 rentFee1KBSorobanStateSizeLow;
5146///     // Fee per 1KB rent when the soroban state has reached `sorobanStateTargetSizeBytes`
5147///     int64 rentFee1KBSorobanStateSizeHigh;
5148///     // Rent fee multiplier for any additional data past the first `sorobanStateTargetSizeBytes`
5149///     uint32 sorobanStateRentFeeGrowthFactor;
5150/// };
5151/// ```
5152///
5153#[cfg_attr(feature = "alloc", derive(Default))]
5154#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
5155#[cfg_eval::cfg_eval]
5156#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5157#[cfg_attr(
5158    all(feature = "serde", feature = "alloc"),
5159    serde_with::serde_as,
5160    derive(serde::Serialize, serde::Deserialize),
5161    serde(rename_all = "snake_case")
5162)]
5163#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
5164pub struct ConfigSettingContractLedgerCostV0 {
5165    pub ledger_max_disk_read_entries: u32,
5166    pub ledger_max_disk_read_bytes: u32,
5167    pub ledger_max_write_ledger_entries: u32,
5168    pub ledger_max_write_bytes: u32,
5169    pub tx_max_disk_read_entries: u32,
5170    pub tx_max_disk_read_bytes: u32,
5171    pub tx_max_write_ledger_entries: u32,
5172    pub tx_max_write_bytes: u32,
5173    #[cfg_attr(
5174        all(feature = "serde", feature = "alloc"),
5175        serde_as(as = "NumberOrString")
5176    )]
5177    pub fee_disk_read_ledger_entry: i64,
5178    #[cfg_attr(
5179        all(feature = "serde", feature = "alloc"),
5180        serde_as(as = "NumberOrString")
5181    )]
5182    pub fee_write_ledger_entry: i64,
5183    #[cfg_attr(
5184        all(feature = "serde", feature = "alloc"),
5185        serde_as(as = "NumberOrString")
5186    )]
5187    pub fee_disk_read1_kb: i64,
5188    #[cfg_attr(
5189        all(feature = "serde", feature = "alloc"),
5190        serde_as(as = "NumberOrString")
5191    )]
5192    pub soroban_state_target_size_bytes: i64,
5193    #[cfg_attr(
5194        all(feature = "serde", feature = "alloc"),
5195        serde_as(as = "NumberOrString")
5196    )]
5197    pub rent_fee1_kb_soroban_state_size_low: i64,
5198    #[cfg_attr(
5199        all(feature = "serde", feature = "alloc"),
5200        serde_as(as = "NumberOrString")
5201    )]
5202    pub rent_fee1_kb_soroban_state_size_high: i64,
5203    pub soroban_state_rent_fee_growth_factor: u32,
5204}
5205
5206impl ReadXdr for ConfigSettingContractLedgerCostV0 {
5207    #[cfg(feature = "std")]
5208    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
5209        r.with_limited_depth(|r| {
5210            Ok(Self {
5211                ledger_max_disk_read_entries: u32::read_xdr(r)?,
5212                ledger_max_disk_read_bytes: u32::read_xdr(r)?,
5213                ledger_max_write_ledger_entries: u32::read_xdr(r)?,
5214                ledger_max_write_bytes: u32::read_xdr(r)?,
5215                tx_max_disk_read_entries: u32::read_xdr(r)?,
5216                tx_max_disk_read_bytes: u32::read_xdr(r)?,
5217                tx_max_write_ledger_entries: u32::read_xdr(r)?,
5218                tx_max_write_bytes: u32::read_xdr(r)?,
5219                fee_disk_read_ledger_entry: i64::read_xdr(r)?,
5220                fee_write_ledger_entry: i64::read_xdr(r)?,
5221                fee_disk_read1_kb: i64::read_xdr(r)?,
5222                soroban_state_target_size_bytes: i64::read_xdr(r)?,
5223                rent_fee1_kb_soroban_state_size_low: i64::read_xdr(r)?,
5224                rent_fee1_kb_soroban_state_size_high: i64::read_xdr(r)?,
5225                soroban_state_rent_fee_growth_factor: u32::read_xdr(r)?,
5226            })
5227        })
5228    }
5229}
5230
5231impl WriteXdr for ConfigSettingContractLedgerCostV0 {
5232    #[cfg(feature = "std")]
5233    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
5234        w.with_limited_depth(|w| {
5235            self.ledger_max_disk_read_entries.write_xdr(w)?;
5236            self.ledger_max_disk_read_bytes.write_xdr(w)?;
5237            self.ledger_max_write_ledger_entries.write_xdr(w)?;
5238            self.ledger_max_write_bytes.write_xdr(w)?;
5239            self.tx_max_disk_read_entries.write_xdr(w)?;
5240            self.tx_max_disk_read_bytes.write_xdr(w)?;
5241            self.tx_max_write_ledger_entries.write_xdr(w)?;
5242            self.tx_max_write_bytes.write_xdr(w)?;
5243            self.fee_disk_read_ledger_entry.write_xdr(w)?;
5244            self.fee_write_ledger_entry.write_xdr(w)?;
5245            self.fee_disk_read1_kb.write_xdr(w)?;
5246            self.soroban_state_target_size_bytes.write_xdr(w)?;
5247            self.rent_fee1_kb_soroban_state_size_low.write_xdr(w)?;
5248            self.rent_fee1_kb_soroban_state_size_high.write_xdr(w)?;
5249            self.soroban_state_rent_fee_growth_factor.write_xdr(w)?;
5250            Ok(())
5251        })
5252    }
5253}
5254
5255/// ConfigSettingContractLedgerCostExtV0 is an XDR Struct defines as:
5256///
5257/// ```text
5258/// struct ConfigSettingContractLedgerCostExtV0
5259/// {
5260///     // Maximum number of RO+RW entries in the transaction footprint.
5261///     uint32 txMaxFootprintEntries;
5262///     // Fee per 1 KB of data written to the ledger.
5263///     // Unlike the rent fee, this is a flat fee that is charged for any ledger
5264///     // write, independent of the type of the entry being written.
5265///     int64 feeWrite1KB;
5266/// };
5267/// ```
5268///
5269#[cfg_attr(feature = "alloc", derive(Default))]
5270#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
5271#[cfg_eval::cfg_eval]
5272#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5273#[cfg_attr(
5274    all(feature = "serde", feature = "alloc"),
5275    serde_with::serde_as,
5276    derive(serde::Serialize, serde::Deserialize),
5277    serde(rename_all = "snake_case")
5278)]
5279#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
5280pub struct ConfigSettingContractLedgerCostExtV0 {
5281    pub tx_max_footprint_entries: u32,
5282    #[cfg_attr(
5283        all(feature = "serde", feature = "alloc"),
5284        serde_as(as = "NumberOrString")
5285    )]
5286    pub fee_write1_kb: i64,
5287}
5288
5289impl ReadXdr for ConfigSettingContractLedgerCostExtV0 {
5290    #[cfg(feature = "std")]
5291    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
5292        r.with_limited_depth(|r| {
5293            Ok(Self {
5294                tx_max_footprint_entries: u32::read_xdr(r)?,
5295                fee_write1_kb: i64::read_xdr(r)?,
5296            })
5297        })
5298    }
5299}
5300
5301impl WriteXdr for ConfigSettingContractLedgerCostExtV0 {
5302    #[cfg(feature = "std")]
5303    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
5304        w.with_limited_depth(|w| {
5305            self.tx_max_footprint_entries.write_xdr(w)?;
5306            self.fee_write1_kb.write_xdr(w)?;
5307            Ok(())
5308        })
5309    }
5310}
5311
5312/// ConfigSettingContractHistoricalDataV0 is an XDR Struct defines as:
5313///
5314/// ```text
5315/// struct ConfigSettingContractHistoricalDataV0
5316/// {
5317///     int64 feeHistorical1KB; // Fee for storing 1KB in archives
5318/// };
5319/// ```
5320///
5321#[cfg_attr(feature = "alloc", derive(Default))]
5322#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
5323#[cfg_eval::cfg_eval]
5324#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5325#[cfg_attr(
5326    all(feature = "serde", feature = "alloc"),
5327    serde_with::serde_as,
5328    derive(serde::Serialize, serde::Deserialize),
5329    serde(rename_all = "snake_case")
5330)]
5331#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
5332pub struct ConfigSettingContractHistoricalDataV0 {
5333    #[cfg_attr(
5334        all(feature = "serde", feature = "alloc"),
5335        serde_as(as = "NumberOrString")
5336    )]
5337    pub fee_historical1_kb: i64,
5338}
5339
5340impl ReadXdr for ConfigSettingContractHistoricalDataV0 {
5341    #[cfg(feature = "std")]
5342    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
5343        r.with_limited_depth(|r| {
5344            Ok(Self {
5345                fee_historical1_kb: i64::read_xdr(r)?,
5346            })
5347        })
5348    }
5349}
5350
5351impl WriteXdr for ConfigSettingContractHistoricalDataV0 {
5352    #[cfg(feature = "std")]
5353    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
5354        w.with_limited_depth(|w| {
5355            self.fee_historical1_kb.write_xdr(w)?;
5356            Ok(())
5357        })
5358    }
5359}
5360
5361/// ConfigSettingContractEventsV0 is an XDR Struct defines as:
5362///
5363/// ```text
5364/// struct ConfigSettingContractEventsV0
5365/// {
5366///     // Maximum size of events that a contract call can emit.
5367///     uint32 txMaxContractEventsSizeBytes;
5368///     // Fee for generating 1KB of contract events.
5369///     int64 feeContractEvents1KB;
5370/// };
5371/// ```
5372///
5373#[cfg_attr(feature = "alloc", derive(Default))]
5374#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
5375#[cfg_eval::cfg_eval]
5376#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5377#[cfg_attr(
5378    all(feature = "serde", feature = "alloc"),
5379    serde_with::serde_as,
5380    derive(serde::Serialize, serde::Deserialize),
5381    serde(rename_all = "snake_case")
5382)]
5383#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
5384pub struct ConfigSettingContractEventsV0 {
5385    pub tx_max_contract_events_size_bytes: u32,
5386    #[cfg_attr(
5387        all(feature = "serde", feature = "alloc"),
5388        serde_as(as = "NumberOrString")
5389    )]
5390    pub fee_contract_events1_kb: i64,
5391}
5392
5393impl ReadXdr for ConfigSettingContractEventsV0 {
5394    #[cfg(feature = "std")]
5395    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
5396        r.with_limited_depth(|r| {
5397            Ok(Self {
5398                tx_max_contract_events_size_bytes: u32::read_xdr(r)?,
5399                fee_contract_events1_kb: i64::read_xdr(r)?,
5400            })
5401        })
5402    }
5403}
5404
5405impl WriteXdr for ConfigSettingContractEventsV0 {
5406    #[cfg(feature = "std")]
5407    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
5408        w.with_limited_depth(|w| {
5409            self.tx_max_contract_events_size_bytes.write_xdr(w)?;
5410            self.fee_contract_events1_kb.write_xdr(w)?;
5411            Ok(())
5412        })
5413    }
5414}
5415
5416/// ConfigSettingContractBandwidthV0 is an XDR Struct defines as:
5417///
5418/// ```text
5419/// struct ConfigSettingContractBandwidthV0
5420/// {
5421///     // Maximum sum of all transaction sizes in the ledger in bytes
5422///     uint32 ledgerMaxTxsSizeBytes;
5423///     // Maximum size in bytes for a transaction
5424///     uint32 txMaxSizeBytes;
5425///
5426///     // Fee for 1 KB of transaction size
5427///     int64 feeTxSize1KB;
5428/// };
5429/// ```
5430///
5431#[cfg_attr(feature = "alloc", derive(Default))]
5432#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
5433#[cfg_eval::cfg_eval]
5434#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5435#[cfg_attr(
5436    all(feature = "serde", feature = "alloc"),
5437    serde_with::serde_as,
5438    derive(serde::Serialize, serde::Deserialize),
5439    serde(rename_all = "snake_case")
5440)]
5441#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
5442pub struct ConfigSettingContractBandwidthV0 {
5443    pub ledger_max_txs_size_bytes: u32,
5444    pub tx_max_size_bytes: u32,
5445    #[cfg_attr(
5446        all(feature = "serde", feature = "alloc"),
5447        serde_as(as = "NumberOrString")
5448    )]
5449    pub fee_tx_size1_kb: i64,
5450}
5451
5452impl ReadXdr for ConfigSettingContractBandwidthV0 {
5453    #[cfg(feature = "std")]
5454    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
5455        r.with_limited_depth(|r| {
5456            Ok(Self {
5457                ledger_max_txs_size_bytes: u32::read_xdr(r)?,
5458                tx_max_size_bytes: u32::read_xdr(r)?,
5459                fee_tx_size1_kb: i64::read_xdr(r)?,
5460            })
5461        })
5462    }
5463}
5464
5465impl WriteXdr for ConfigSettingContractBandwidthV0 {
5466    #[cfg(feature = "std")]
5467    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
5468        w.with_limited_depth(|w| {
5469            self.ledger_max_txs_size_bytes.write_xdr(w)?;
5470            self.tx_max_size_bytes.write_xdr(w)?;
5471            self.fee_tx_size1_kb.write_xdr(w)?;
5472            Ok(())
5473        })
5474    }
5475}
5476
5477/// ContractCostType is an XDR Enum defines as:
5478///
5479/// ```text
5480/// enum ContractCostType {
5481///     // Cost of running 1 wasm instruction
5482///     WasmInsnExec = 0,
5483///     // Cost of allocating a slice of memory (in bytes)
5484///     MemAlloc = 1,
5485///     // Cost of copying a slice of bytes into a pre-allocated memory
5486///     MemCpy = 2,
5487///     // Cost of comparing two slices of memory
5488///     MemCmp = 3,
5489///     // Cost of a host function dispatch, not including the actual work done by
5490///     // the function nor the cost of VM invocation machinary
5491///     DispatchHostFunction = 4,
5492///     // Cost of visiting a host object from the host object storage. Exists to
5493///     // make sure some baseline cost coverage, i.e. repeatly visiting objects
5494///     // by the guest will always incur some charges.
5495///     VisitObject = 5,
5496///     // Cost of serializing an xdr object to bytes
5497///     ValSer = 6,
5498///     // Cost of deserializing an xdr object from bytes
5499///     ValDeser = 7,
5500///     // Cost of computing the sha256 hash from bytes
5501///     ComputeSha256Hash = 8,
5502///     // Cost of computing the ed25519 pubkey from bytes
5503///     ComputeEd25519PubKey = 9,
5504///     // Cost of verifying ed25519 signature of a payload.
5505///     VerifyEd25519Sig = 10,
5506///     // Cost of instantiation a VM from wasm bytes code.
5507///     VmInstantiation = 11,
5508///     // Cost of instantiation a VM from a cached state.
5509///     VmCachedInstantiation = 12,
5510///     // Cost of invoking a function on the VM. If the function is a host function,
5511///     // additional cost will be covered by `DispatchHostFunction`.
5512///     InvokeVmFunction = 13,
5513///     // Cost of computing a keccak256 hash from bytes.
5514///     ComputeKeccak256Hash = 14,
5515///     // Cost of decoding an ECDSA signature computed from a 256-bit prime modulus
5516///     // curve (e.g. secp256k1 and secp256r1)
5517///     DecodeEcdsaCurve256Sig = 15,
5518///     // Cost of recovering an ECDSA secp256k1 key from a signature.
5519///     RecoverEcdsaSecp256k1Key = 16,
5520///     // Cost of int256 addition (`+`) and subtraction (`-`) operations
5521///     Int256AddSub = 17,
5522///     // Cost of int256 multiplication (`*`) operation
5523///     Int256Mul = 18,
5524///     // Cost of int256 division (`/`) operation
5525///     Int256Div = 19,
5526///     // Cost of int256 power (`exp`) operation
5527///     Int256Pow = 20,
5528///     // Cost of int256 shift (`shl`, `shr`) operation
5529///     Int256Shift = 21,
5530///     // Cost of drawing random bytes using a ChaCha20 PRNG
5531///     ChaCha20DrawBytes = 22,
5532///
5533///     // Cost of parsing wasm bytes that only encode instructions.
5534///     ParseWasmInstructions = 23,
5535///     // Cost of parsing a known number of wasm functions.
5536///     ParseWasmFunctions = 24,
5537///     // Cost of parsing a known number of wasm globals.
5538///     ParseWasmGlobals = 25,
5539///     // Cost of parsing a known number of wasm table entries.
5540///     ParseWasmTableEntries = 26,
5541///     // Cost of parsing a known number of wasm types.
5542///     ParseWasmTypes = 27,
5543///     // Cost of parsing a known number of wasm data segments.
5544///     ParseWasmDataSegments = 28,
5545///     // Cost of parsing a known number of wasm element segments.
5546///     ParseWasmElemSegments = 29,
5547///     // Cost of parsing a known number of wasm imports.
5548///     ParseWasmImports = 30,
5549///     // Cost of parsing a known number of wasm exports.
5550///     ParseWasmExports = 31,
5551///     // Cost of parsing a known number of data segment bytes.
5552///     ParseWasmDataSegmentBytes = 32,
5553///
5554///     // Cost of instantiating wasm bytes that only encode instructions.
5555///     InstantiateWasmInstructions = 33,
5556///     // Cost of instantiating a known number of wasm functions.
5557///     InstantiateWasmFunctions = 34,
5558///     // Cost of instantiating a known number of wasm globals.
5559///     InstantiateWasmGlobals = 35,
5560///     // Cost of instantiating a known number of wasm table entries.
5561///     InstantiateWasmTableEntries = 36,
5562///     // Cost of instantiating a known number of wasm types.
5563///     InstantiateWasmTypes = 37,
5564///     // Cost of instantiating a known number of wasm data segments.
5565///     InstantiateWasmDataSegments = 38,
5566///     // Cost of instantiating a known number of wasm element segments.
5567///     InstantiateWasmElemSegments = 39,
5568///     // Cost of instantiating a known number of wasm imports.
5569///     InstantiateWasmImports = 40,
5570///     // Cost of instantiating a known number of wasm exports.
5571///     InstantiateWasmExports = 41,
5572///     // Cost of instantiating a known number of data segment bytes.
5573///     InstantiateWasmDataSegmentBytes = 42,
5574///
5575///     // Cost of decoding a bytes array representing an uncompressed SEC-1 encoded
5576///     // point on a 256-bit elliptic curve
5577///     Sec1DecodePointUncompressed = 43,
5578///     // Cost of verifying an ECDSA Secp256r1 signature
5579///     VerifyEcdsaSecp256r1Sig = 44,
5580///
5581///     // Cost of encoding a BLS12-381 Fp (base field element)
5582///     Bls12381EncodeFp = 45,
5583///     // Cost of decoding a BLS12-381 Fp (base field element)
5584///     Bls12381DecodeFp = 46,
5585///     // Cost of checking a G1 point lies on the curve
5586///     Bls12381G1CheckPointOnCurve = 47,
5587///     // Cost of checking a G1 point belongs to the correct subgroup
5588///     Bls12381G1CheckPointInSubgroup = 48,
5589///     // Cost of checking a G2 point lies on the curve
5590///     Bls12381G2CheckPointOnCurve = 49,
5591///     // Cost of checking a G2 point belongs to the correct subgroup
5592///     Bls12381G2CheckPointInSubgroup = 50,
5593///     // Cost of converting a BLS12-381 G1 point from projective to affine coordinates
5594///     Bls12381G1ProjectiveToAffine = 51,
5595///     // Cost of converting a BLS12-381 G2 point from projective to affine coordinates
5596///     Bls12381G2ProjectiveToAffine = 52,
5597///     // Cost of performing BLS12-381 G1 point addition
5598///     Bls12381G1Add = 53,
5599///     // Cost of performing BLS12-381 G1 scalar multiplication
5600///     Bls12381G1Mul = 54,
5601///     // Cost of performing BLS12-381 G1 multi-scalar multiplication (MSM)
5602///     Bls12381G1Msm = 55,
5603///     // Cost of mapping a BLS12-381 Fp field element to a G1 point
5604///     Bls12381MapFpToG1 = 56,
5605///     // Cost of hashing to a BLS12-381 G1 point
5606///     Bls12381HashToG1 = 57,
5607///     // Cost of performing BLS12-381 G2 point addition
5608///     Bls12381G2Add = 58,
5609///     // Cost of performing BLS12-381 G2 scalar multiplication
5610///     Bls12381G2Mul = 59,
5611///     // Cost of performing BLS12-381 G2 multi-scalar multiplication (MSM)
5612///     Bls12381G2Msm = 60,
5613///     // Cost of mapping a BLS12-381 Fp2 field element to a G2 point
5614///     Bls12381MapFp2ToG2 = 61,
5615///     // Cost of hashing to a BLS12-381 G2 point
5616///     Bls12381HashToG2 = 62,
5617///     // Cost of performing BLS12-381 pairing operation
5618///     Bls12381Pairing = 63,
5619///     // Cost of converting a BLS12-381 scalar element from U256
5620///     Bls12381FrFromU256 = 64,
5621///     // Cost of converting a BLS12-381 scalar element to U256
5622///     Bls12381FrToU256 = 65,
5623///     // Cost of performing BLS12-381 scalar element addition/subtraction
5624///     Bls12381FrAddSub = 66,
5625///     // Cost of performing BLS12-381 scalar element multiplication
5626///     Bls12381FrMul = 67,
5627///     // Cost of performing BLS12-381 scalar element exponentiation
5628///     Bls12381FrPow = 68,
5629///     // Cost of performing BLS12-381 scalar element inversion
5630///     Bls12381FrInv = 69
5631/// };
5632/// ```
5633///
5634// enum
5635#[cfg_attr(feature = "alloc", derive(Default))]
5636#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
5637#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
5638#[cfg_attr(
5639    all(feature = "serde", feature = "alloc"),
5640    derive(serde::Serialize, serde::Deserialize),
5641    serde(rename_all = "snake_case")
5642)]
5643#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
5644#[repr(i32)]
5645pub enum ContractCostType {
5646    #[cfg_attr(feature = "alloc", default)]
5647    WasmInsnExec = 0,
5648    MemAlloc = 1,
5649    MemCpy = 2,
5650    MemCmp = 3,
5651    DispatchHostFunction = 4,
5652    VisitObject = 5,
5653    ValSer = 6,
5654    ValDeser = 7,
5655    ComputeSha256Hash = 8,
5656    ComputeEd25519PubKey = 9,
5657    VerifyEd25519Sig = 10,
5658    VmInstantiation = 11,
5659    VmCachedInstantiation = 12,
5660    InvokeVmFunction = 13,
5661    ComputeKeccak256Hash = 14,
5662    DecodeEcdsaCurve256Sig = 15,
5663    RecoverEcdsaSecp256k1Key = 16,
5664    Int256AddSub = 17,
5665    Int256Mul = 18,
5666    Int256Div = 19,
5667    Int256Pow = 20,
5668    Int256Shift = 21,
5669    ChaCha20DrawBytes = 22,
5670    ParseWasmInstructions = 23,
5671    ParseWasmFunctions = 24,
5672    ParseWasmGlobals = 25,
5673    ParseWasmTableEntries = 26,
5674    ParseWasmTypes = 27,
5675    ParseWasmDataSegments = 28,
5676    ParseWasmElemSegments = 29,
5677    ParseWasmImports = 30,
5678    ParseWasmExports = 31,
5679    ParseWasmDataSegmentBytes = 32,
5680    InstantiateWasmInstructions = 33,
5681    InstantiateWasmFunctions = 34,
5682    InstantiateWasmGlobals = 35,
5683    InstantiateWasmTableEntries = 36,
5684    InstantiateWasmTypes = 37,
5685    InstantiateWasmDataSegments = 38,
5686    InstantiateWasmElemSegments = 39,
5687    InstantiateWasmImports = 40,
5688    InstantiateWasmExports = 41,
5689    InstantiateWasmDataSegmentBytes = 42,
5690    Sec1DecodePointUncompressed = 43,
5691    VerifyEcdsaSecp256r1Sig = 44,
5692    Bls12381EncodeFp = 45,
5693    Bls12381DecodeFp = 46,
5694    Bls12381G1CheckPointOnCurve = 47,
5695    Bls12381G1CheckPointInSubgroup = 48,
5696    Bls12381G2CheckPointOnCurve = 49,
5697    Bls12381G2CheckPointInSubgroup = 50,
5698    Bls12381G1ProjectiveToAffine = 51,
5699    Bls12381G2ProjectiveToAffine = 52,
5700    Bls12381G1Add = 53,
5701    Bls12381G1Mul = 54,
5702    Bls12381G1Msm = 55,
5703    Bls12381MapFpToG1 = 56,
5704    Bls12381HashToG1 = 57,
5705    Bls12381G2Add = 58,
5706    Bls12381G2Mul = 59,
5707    Bls12381G2Msm = 60,
5708    Bls12381MapFp2ToG2 = 61,
5709    Bls12381HashToG2 = 62,
5710    Bls12381Pairing = 63,
5711    Bls12381FrFromU256 = 64,
5712    Bls12381FrToU256 = 65,
5713    Bls12381FrAddSub = 66,
5714    Bls12381FrMul = 67,
5715    Bls12381FrPow = 68,
5716    Bls12381FrInv = 69,
5717}
5718
5719impl ContractCostType {
5720    pub const VARIANTS: [ContractCostType; 70] = [
5721        ContractCostType::WasmInsnExec,
5722        ContractCostType::MemAlloc,
5723        ContractCostType::MemCpy,
5724        ContractCostType::MemCmp,
5725        ContractCostType::DispatchHostFunction,
5726        ContractCostType::VisitObject,
5727        ContractCostType::ValSer,
5728        ContractCostType::ValDeser,
5729        ContractCostType::ComputeSha256Hash,
5730        ContractCostType::ComputeEd25519PubKey,
5731        ContractCostType::VerifyEd25519Sig,
5732        ContractCostType::VmInstantiation,
5733        ContractCostType::VmCachedInstantiation,
5734        ContractCostType::InvokeVmFunction,
5735        ContractCostType::ComputeKeccak256Hash,
5736        ContractCostType::DecodeEcdsaCurve256Sig,
5737        ContractCostType::RecoverEcdsaSecp256k1Key,
5738        ContractCostType::Int256AddSub,
5739        ContractCostType::Int256Mul,
5740        ContractCostType::Int256Div,
5741        ContractCostType::Int256Pow,
5742        ContractCostType::Int256Shift,
5743        ContractCostType::ChaCha20DrawBytes,
5744        ContractCostType::ParseWasmInstructions,
5745        ContractCostType::ParseWasmFunctions,
5746        ContractCostType::ParseWasmGlobals,
5747        ContractCostType::ParseWasmTableEntries,
5748        ContractCostType::ParseWasmTypes,
5749        ContractCostType::ParseWasmDataSegments,
5750        ContractCostType::ParseWasmElemSegments,
5751        ContractCostType::ParseWasmImports,
5752        ContractCostType::ParseWasmExports,
5753        ContractCostType::ParseWasmDataSegmentBytes,
5754        ContractCostType::InstantiateWasmInstructions,
5755        ContractCostType::InstantiateWasmFunctions,
5756        ContractCostType::InstantiateWasmGlobals,
5757        ContractCostType::InstantiateWasmTableEntries,
5758        ContractCostType::InstantiateWasmTypes,
5759        ContractCostType::InstantiateWasmDataSegments,
5760        ContractCostType::InstantiateWasmElemSegments,
5761        ContractCostType::InstantiateWasmImports,
5762        ContractCostType::InstantiateWasmExports,
5763        ContractCostType::InstantiateWasmDataSegmentBytes,
5764        ContractCostType::Sec1DecodePointUncompressed,
5765        ContractCostType::VerifyEcdsaSecp256r1Sig,
5766        ContractCostType::Bls12381EncodeFp,
5767        ContractCostType::Bls12381DecodeFp,
5768        ContractCostType::Bls12381G1CheckPointOnCurve,
5769        ContractCostType::Bls12381G1CheckPointInSubgroup,
5770        ContractCostType::Bls12381G2CheckPointOnCurve,
5771        ContractCostType::Bls12381G2CheckPointInSubgroup,
5772        ContractCostType::Bls12381G1ProjectiveToAffine,
5773        ContractCostType::Bls12381G2ProjectiveToAffine,
5774        ContractCostType::Bls12381G1Add,
5775        ContractCostType::Bls12381G1Mul,
5776        ContractCostType::Bls12381G1Msm,
5777        ContractCostType::Bls12381MapFpToG1,
5778        ContractCostType::Bls12381HashToG1,
5779        ContractCostType::Bls12381G2Add,
5780        ContractCostType::Bls12381G2Mul,
5781        ContractCostType::Bls12381G2Msm,
5782        ContractCostType::Bls12381MapFp2ToG2,
5783        ContractCostType::Bls12381HashToG2,
5784        ContractCostType::Bls12381Pairing,
5785        ContractCostType::Bls12381FrFromU256,
5786        ContractCostType::Bls12381FrToU256,
5787        ContractCostType::Bls12381FrAddSub,
5788        ContractCostType::Bls12381FrMul,
5789        ContractCostType::Bls12381FrPow,
5790        ContractCostType::Bls12381FrInv,
5791    ];
5792    pub const VARIANTS_STR: [&'static str; 70] = [
5793        "WasmInsnExec",
5794        "MemAlloc",
5795        "MemCpy",
5796        "MemCmp",
5797        "DispatchHostFunction",
5798        "VisitObject",
5799        "ValSer",
5800        "ValDeser",
5801        "ComputeSha256Hash",
5802        "ComputeEd25519PubKey",
5803        "VerifyEd25519Sig",
5804        "VmInstantiation",
5805        "VmCachedInstantiation",
5806        "InvokeVmFunction",
5807        "ComputeKeccak256Hash",
5808        "DecodeEcdsaCurve256Sig",
5809        "RecoverEcdsaSecp256k1Key",
5810        "Int256AddSub",
5811        "Int256Mul",
5812        "Int256Div",
5813        "Int256Pow",
5814        "Int256Shift",
5815        "ChaCha20DrawBytes",
5816        "ParseWasmInstructions",
5817        "ParseWasmFunctions",
5818        "ParseWasmGlobals",
5819        "ParseWasmTableEntries",
5820        "ParseWasmTypes",
5821        "ParseWasmDataSegments",
5822        "ParseWasmElemSegments",
5823        "ParseWasmImports",
5824        "ParseWasmExports",
5825        "ParseWasmDataSegmentBytes",
5826        "InstantiateWasmInstructions",
5827        "InstantiateWasmFunctions",
5828        "InstantiateWasmGlobals",
5829        "InstantiateWasmTableEntries",
5830        "InstantiateWasmTypes",
5831        "InstantiateWasmDataSegments",
5832        "InstantiateWasmElemSegments",
5833        "InstantiateWasmImports",
5834        "InstantiateWasmExports",
5835        "InstantiateWasmDataSegmentBytes",
5836        "Sec1DecodePointUncompressed",
5837        "VerifyEcdsaSecp256r1Sig",
5838        "Bls12381EncodeFp",
5839        "Bls12381DecodeFp",
5840        "Bls12381G1CheckPointOnCurve",
5841        "Bls12381G1CheckPointInSubgroup",
5842        "Bls12381G2CheckPointOnCurve",
5843        "Bls12381G2CheckPointInSubgroup",
5844        "Bls12381G1ProjectiveToAffine",
5845        "Bls12381G2ProjectiveToAffine",
5846        "Bls12381G1Add",
5847        "Bls12381G1Mul",
5848        "Bls12381G1Msm",
5849        "Bls12381MapFpToG1",
5850        "Bls12381HashToG1",
5851        "Bls12381G2Add",
5852        "Bls12381G2Mul",
5853        "Bls12381G2Msm",
5854        "Bls12381MapFp2ToG2",
5855        "Bls12381HashToG2",
5856        "Bls12381Pairing",
5857        "Bls12381FrFromU256",
5858        "Bls12381FrToU256",
5859        "Bls12381FrAddSub",
5860        "Bls12381FrMul",
5861        "Bls12381FrPow",
5862        "Bls12381FrInv",
5863    ];
5864
5865    #[must_use]
5866    pub const fn name(&self) -> &'static str {
5867        match self {
5868            Self::WasmInsnExec => "WasmInsnExec",
5869            Self::MemAlloc => "MemAlloc",
5870            Self::MemCpy => "MemCpy",
5871            Self::MemCmp => "MemCmp",
5872            Self::DispatchHostFunction => "DispatchHostFunction",
5873            Self::VisitObject => "VisitObject",
5874            Self::ValSer => "ValSer",
5875            Self::ValDeser => "ValDeser",
5876            Self::ComputeSha256Hash => "ComputeSha256Hash",
5877            Self::ComputeEd25519PubKey => "ComputeEd25519PubKey",
5878            Self::VerifyEd25519Sig => "VerifyEd25519Sig",
5879            Self::VmInstantiation => "VmInstantiation",
5880            Self::VmCachedInstantiation => "VmCachedInstantiation",
5881            Self::InvokeVmFunction => "InvokeVmFunction",
5882            Self::ComputeKeccak256Hash => "ComputeKeccak256Hash",
5883            Self::DecodeEcdsaCurve256Sig => "DecodeEcdsaCurve256Sig",
5884            Self::RecoverEcdsaSecp256k1Key => "RecoverEcdsaSecp256k1Key",
5885            Self::Int256AddSub => "Int256AddSub",
5886            Self::Int256Mul => "Int256Mul",
5887            Self::Int256Div => "Int256Div",
5888            Self::Int256Pow => "Int256Pow",
5889            Self::Int256Shift => "Int256Shift",
5890            Self::ChaCha20DrawBytes => "ChaCha20DrawBytes",
5891            Self::ParseWasmInstructions => "ParseWasmInstructions",
5892            Self::ParseWasmFunctions => "ParseWasmFunctions",
5893            Self::ParseWasmGlobals => "ParseWasmGlobals",
5894            Self::ParseWasmTableEntries => "ParseWasmTableEntries",
5895            Self::ParseWasmTypes => "ParseWasmTypes",
5896            Self::ParseWasmDataSegments => "ParseWasmDataSegments",
5897            Self::ParseWasmElemSegments => "ParseWasmElemSegments",
5898            Self::ParseWasmImports => "ParseWasmImports",
5899            Self::ParseWasmExports => "ParseWasmExports",
5900            Self::ParseWasmDataSegmentBytes => "ParseWasmDataSegmentBytes",
5901            Self::InstantiateWasmInstructions => "InstantiateWasmInstructions",
5902            Self::InstantiateWasmFunctions => "InstantiateWasmFunctions",
5903            Self::InstantiateWasmGlobals => "InstantiateWasmGlobals",
5904            Self::InstantiateWasmTableEntries => "InstantiateWasmTableEntries",
5905            Self::InstantiateWasmTypes => "InstantiateWasmTypes",
5906            Self::InstantiateWasmDataSegments => "InstantiateWasmDataSegments",
5907            Self::InstantiateWasmElemSegments => "InstantiateWasmElemSegments",
5908            Self::InstantiateWasmImports => "InstantiateWasmImports",
5909            Self::InstantiateWasmExports => "InstantiateWasmExports",
5910            Self::InstantiateWasmDataSegmentBytes => "InstantiateWasmDataSegmentBytes",
5911            Self::Sec1DecodePointUncompressed => "Sec1DecodePointUncompressed",
5912            Self::VerifyEcdsaSecp256r1Sig => "VerifyEcdsaSecp256r1Sig",
5913            Self::Bls12381EncodeFp => "Bls12381EncodeFp",
5914            Self::Bls12381DecodeFp => "Bls12381DecodeFp",
5915            Self::Bls12381G1CheckPointOnCurve => "Bls12381G1CheckPointOnCurve",
5916            Self::Bls12381G1CheckPointInSubgroup => "Bls12381G1CheckPointInSubgroup",
5917            Self::Bls12381G2CheckPointOnCurve => "Bls12381G2CheckPointOnCurve",
5918            Self::Bls12381G2CheckPointInSubgroup => "Bls12381G2CheckPointInSubgroup",
5919            Self::Bls12381G1ProjectiveToAffine => "Bls12381G1ProjectiveToAffine",
5920            Self::Bls12381G2ProjectiveToAffine => "Bls12381G2ProjectiveToAffine",
5921            Self::Bls12381G1Add => "Bls12381G1Add",
5922            Self::Bls12381G1Mul => "Bls12381G1Mul",
5923            Self::Bls12381G1Msm => "Bls12381G1Msm",
5924            Self::Bls12381MapFpToG1 => "Bls12381MapFpToG1",
5925            Self::Bls12381HashToG1 => "Bls12381HashToG1",
5926            Self::Bls12381G2Add => "Bls12381G2Add",
5927            Self::Bls12381G2Mul => "Bls12381G2Mul",
5928            Self::Bls12381G2Msm => "Bls12381G2Msm",
5929            Self::Bls12381MapFp2ToG2 => "Bls12381MapFp2ToG2",
5930            Self::Bls12381HashToG2 => "Bls12381HashToG2",
5931            Self::Bls12381Pairing => "Bls12381Pairing",
5932            Self::Bls12381FrFromU256 => "Bls12381FrFromU256",
5933            Self::Bls12381FrToU256 => "Bls12381FrToU256",
5934            Self::Bls12381FrAddSub => "Bls12381FrAddSub",
5935            Self::Bls12381FrMul => "Bls12381FrMul",
5936            Self::Bls12381FrPow => "Bls12381FrPow",
5937            Self::Bls12381FrInv => "Bls12381FrInv",
5938        }
5939    }
5940
5941    #[must_use]
5942    pub const fn variants() -> [ContractCostType; 70] {
5943        Self::VARIANTS
5944    }
5945}
5946
5947impl Name for ContractCostType {
5948    #[must_use]
5949    fn name(&self) -> &'static str {
5950        Self::name(self)
5951    }
5952}
5953
5954impl Variants<ContractCostType> for ContractCostType {
5955    fn variants() -> slice::Iter<'static, ContractCostType> {
5956        Self::VARIANTS.iter()
5957    }
5958}
5959
5960impl Enum for ContractCostType {}
5961
5962impl fmt::Display for ContractCostType {
5963    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
5964        f.write_str(self.name())
5965    }
5966}
5967
5968impl TryFrom<i32> for ContractCostType {
5969    type Error = Error;
5970
5971    fn try_from(i: i32) -> Result<Self, Error> {
5972        let e = match i {
5973            0 => ContractCostType::WasmInsnExec,
5974            1 => ContractCostType::MemAlloc,
5975            2 => ContractCostType::MemCpy,
5976            3 => ContractCostType::MemCmp,
5977            4 => ContractCostType::DispatchHostFunction,
5978            5 => ContractCostType::VisitObject,
5979            6 => ContractCostType::ValSer,
5980            7 => ContractCostType::ValDeser,
5981            8 => ContractCostType::ComputeSha256Hash,
5982            9 => ContractCostType::ComputeEd25519PubKey,
5983            10 => ContractCostType::VerifyEd25519Sig,
5984            11 => ContractCostType::VmInstantiation,
5985            12 => ContractCostType::VmCachedInstantiation,
5986            13 => ContractCostType::InvokeVmFunction,
5987            14 => ContractCostType::ComputeKeccak256Hash,
5988            15 => ContractCostType::DecodeEcdsaCurve256Sig,
5989            16 => ContractCostType::RecoverEcdsaSecp256k1Key,
5990            17 => ContractCostType::Int256AddSub,
5991            18 => ContractCostType::Int256Mul,
5992            19 => ContractCostType::Int256Div,
5993            20 => ContractCostType::Int256Pow,
5994            21 => ContractCostType::Int256Shift,
5995            22 => ContractCostType::ChaCha20DrawBytes,
5996            23 => ContractCostType::ParseWasmInstructions,
5997            24 => ContractCostType::ParseWasmFunctions,
5998            25 => ContractCostType::ParseWasmGlobals,
5999            26 => ContractCostType::ParseWasmTableEntries,
6000            27 => ContractCostType::ParseWasmTypes,
6001            28 => ContractCostType::ParseWasmDataSegments,
6002            29 => ContractCostType::ParseWasmElemSegments,
6003            30 => ContractCostType::ParseWasmImports,
6004            31 => ContractCostType::ParseWasmExports,
6005            32 => ContractCostType::ParseWasmDataSegmentBytes,
6006            33 => ContractCostType::InstantiateWasmInstructions,
6007            34 => ContractCostType::InstantiateWasmFunctions,
6008            35 => ContractCostType::InstantiateWasmGlobals,
6009            36 => ContractCostType::InstantiateWasmTableEntries,
6010            37 => ContractCostType::InstantiateWasmTypes,
6011            38 => ContractCostType::InstantiateWasmDataSegments,
6012            39 => ContractCostType::InstantiateWasmElemSegments,
6013            40 => ContractCostType::InstantiateWasmImports,
6014            41 => ContractCostType::InstantiateWasmExports,
6015            42 => ContractCostType::InstantiateWasmDataSegmentBytes,
6016            43 => ContractCostType::Sec1DecodePointUncompressed,
6017            44 => ContractCostType::VerifyEcdsaSecp256r1Sig,
6018            45 => ContractCostType::Bls12381EncodeFp,
6019            46 => ContractCostType::Bls12381DecodeFp,
6020            47 => ContractCostType::Bls12381G1CheckPointOnCurve,
6021            48 => ContractCostType::Bls12381G1CheckPointInSubgroup,
6022            49 => ContractCostType::Bls12381G2CheckPointOnCurve,
6023            50 => ContractCostType::Bls12381G2CheckPointInSubgroup,
6024            51 => ContractCostType::Bls12381G1ProjectiveToAffine,
6025            52 => ContractCostType::Bls12381G2ProjectiveToAffine,
6026            53 => ContractCostType::Bls12381G1Add,
6027            54 => ContractCostType::Bls12381G1Mul,
6028            55 => ContractCostType::Bls12381G1Msm,
6029            56 => ContractCostType::Bls12381MapFpToG1,
6030            57 => ContractCostType::Bls12381HashToG1,
6031            58 => ContractCostType::Bls12381G2Add,
6032            59 => ContractCostType::Bls12381G2Mul,
6033            60 => ContractCostType::Bls12381G2Msm,
6034            61 => ContractCostType::Bls12381MapFp2ToG2,
6035            62 => ContractCostType::Bls12381HashToG2,
6036            63 => ContractCostType::Bls12381Pairing,
6037            64 => ContractCostType::Bls12381FrFromU256,
6038            65 => ContractCostType::Bls12381FrToU256,
6039            66 => ContractCostType::Bls12381FrAddSub,
6040            67 => ContractCostType::Bls12381FrMul,
6041            68 => ContractCostType::Bls12381FrPow,
6042            69 => ContractCostType::Bls12381FrInv,
6043            #[allow(unreachable_patterns)]
6044            _ => return Err(Error::Invalid),
6045        };
6046        Ok(e)
6047    }
6048}
6049
6050impl From<ContractCostType> for i32 {
6051    #[must_use]
6052    fn from(e: ContractCostType) -> Self {
6053        e as Self
6054    }
6055}
6056
6057impl ReadXdr for ContractCostType {
6058    #[cfg(feature = "std")]
6059    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
6060        r.with_limited_depth(|r| {
6061            let e = i32::read_xdr(r)?;
6062            let v: Self = e.try_into()?;
6063            Ok(v)
6064        })
6065    }
6066}
6067
6068impl WriteXdr for ContractCostType {
6069    #[cfg(feature = "std")]
6070    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
6071        w.with_limited_depth(|w| {
6072            let i: i32 = (*self).into();
6073            i.write_xdr(w)
6074        })
6075    }
6076}
6077
6078/// ContractCostParamEntry is an XDR Struct defines as:
6079///
6080/// ```text
6081/// struct ContractCostParamEntry {
6082///     // use `ext` to add more terms (e.g. higher order polynomials) in the future
6083///     ExtensionPoint ext;
6084///
6085///     int64 constTerm;
6086///     int64 linearTerm;
6087/// };
6088/// ```
6089///
6090#[cfg_attr(feature = "alloc", derive(Default))]
6091#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
6092#[cfg_eval::cfg_eval]
6093#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6094#[cfg_attr(
6095    all(feature = "serde", feature = "alloc"),
6096    serde_with::serde_as,
6097    derive(serde::Serialize, serde::Deserialize),
6098    serde(rename_all = "snake_case")
6099)]
6100#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
6101pub struct ContractCostParamEntry {
6102    pub ext: ExtensionPoint,
6103    #[cfg_attr(
6104        all(feature = "serde", feature = "alloc"),
6105        serde_as(as = "NumberOrString")
6106    )]
6107    pub const_term: i64,
6108    #[cfg_attr(
6109        all(feature = "serde", feature = "alloc"),
6110        serde_as(as = "NumberOrString")
6111    )]
6112    pub linear_term: i64,
6113}
6114
6115impl ReadXdr for ContractCostParamEntry {
6116    #[cfg(feature = "std")]
6117    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
6118        r.with_limited_depth(|r| {
6119            Ok(Self {
6120                ext: ExtensionPoint::read_xdr(r)?,
6121                const_term: i64::read_xdr(r)?,
6122                linear_term: i64::read_xdr(r)?,
6123            })
6124        })
6125    }
6126}
6127
6128impl WriteXdr for ContractCostParamEntry {
6129    #[cfg(feature = "std")]
6130    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
6131        w.with_limited_depth(|w| {
6132            self.ext.write_xdr(w)?;
6133            self.const_term.write_xdr(w)?;
6134            self.linear_term.write_xdr(w)?;
6135            Ok(())
6136        })
6137    }
6138}
6139
6140/// StateArchivalSettings is an XDR Struct defines as:
6141///
6142/// ```text
6143/// struct StateArchivalSettings {
6144///     uint32 maxEntryTTL;
6145///     uint32 minTemporaryTTL;
6146///     uint32 minPersistentTTL;
6147///
6148///     // rent_fee = wfee_rate_average / rent_rate_denominator_for_type
6149///     int64 persistentRentRateDenominator;
6150///     int64 tempRentRateDenominator;
6151///
6152///     // max number of entries that emit archival meta in a single ledger
6153///     uint32 maxEntriesToArchive;
6154///
6155///     // Number of snapshots to use when calculating average live Soroban State size
6156///     uint32 liveSorobanStateSizeWindowSampleSize;
6157///
6158///     // How often to sample the live Soroban State size for the average, in ledgers
6159///     uint32 liveSorobanStateSizeWindowSamplePeriod;
6160///
6161///     // Maximum number of bytes that we scan for eviction per ledger
6162///     uint32 evictionScanSize;
6163///
6164///     // Lowest BucketList level to be scanned to evict entries
6165///     uint32 startingEvictionScanLevel;
6166/// };
6167/// ```
6168///
6169#[cfg_attr(feature = "alloc", derive(Default))]
6170#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
6171#[cfg_eval::cfg_eval]
6172#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6173#[cfg_attr(
6174    all(feature = "serde", feature = "alloc"),
6175    serde_with::serde_as,
6176    derive(serde::Serialize, serde::Deserialize),
6177    serde(rename_all = "snake_case")
6178)]
6179#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
6180pub struct StateArchivalSettings {
6181    pub max_entry_ttl: u32,
6182    pub min_temporary_ttl: u32,
6183    pub min_persistent_ttl: u32,
6184    #[cfg_attr(
6185        all(feature = "serde", feature = "alloc"),
6186        serde_as(as = "NumberOrString")
6187    )]
6188    pub persistent_rent_rate_denominator: i64,
6189    #[cfg_attr(
6190        all(feature = "serde", feature = "alloc"),
6191        serde_as(as = "NumberOrString")
6192    )]
6193    pub temp_rent_rate_denominator: i64,
6194    pub max_entries_to_archive: u32,
6195    pub live_soroban_state_size_window_sample_size: u32,
6196    pub live_soroban_state_size_window_sample_period: u32,
6197    pub eviction_scan_size: u32,
6198    pub starting_eviction_scan_level: u32,
6199}
6200
6201impl ReadXdr for StateArchivalSettings {
6202    #[cfg(feature = "std")]
6203    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
6204        r.with_limited_depth(|r| {
6205            Ok(Self {
6206                max_entry_ttl: u32::read_xdr(r)?,
6207                min_temporary_ttl: u32::read_xdr(r)?,
6208                min_persistent_ttl: u32::read_xdr(r)?,
6209                persistent_rent_rate_denominator: i64::read_xdr(r)?,
6210                temp_rent_rate_denominator: i64::read_xdr(r)?,
6211                max_entries_to_archive: u32::read_xdr(r)?,
6212                live_soroban_state_size_window_sample_size: u32::read_xdr(r)?,
6213                live_soroban_state_size_window_sample_period: u32::read_xdr(r)?,
6214                eviction_scan_size: u32::read_xdr(r)?,
6215                starting_eviction_scan_level: u32::read_xdr(r)?,
6216            })
6217        })
6218    }
6219}
6220
6221impl WriteXdr for StateArchivalSettings {
6222    #[cfg(feature = "std")]
6223    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
6224        w.with_limited_depth(|w| {
6225            self.max_entry_ttl.write_xdr(w)?;
6226            self.min_temporary_ttl.write_xdr(w)?;
6227            self.min_persistent_ttl.write_xdr(w)?;
6228            self.persistent_rent_rate_denominator.write_xdr(w)?;
6229            self.temp_rent_rate_denominator.write_xdr(w)?;
6230            self.max_entries_to_archive.write_xdr(w)?;
6231            self.live_soroban_state_size_window_sample_size
6232                .write_xdr(w)?;
6233            self.live_soroban_state_size_window_sample_period
6234                .write_xdr(w)?;
6235            self.eviction_scan_size.write_xdr(w)?;
6236            self.starting_eviction_scan_level.write_xdr(w)?;
6237            Ok(())
6238        })
6239    }
6240}
6241
6242/// EvictionIterator is an XDR Struct defines as:
6243///
6244/// ```text
6245/// struct EvictionIterator {
6246///     uint32 bucketListLevel;
6247///     bool isCurrBucket;
6248///     uint64 bucketFileOffset;
6249/// };
6250/// ```
6251///
6252#[cfg_attr(feature = "alloc", derive(Default))]
6253#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
6254#[cfg_eval::cfg_eval]
6255#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6256#[cfg_attr(
6257    all(feature = "serde", feature = "alloc"),
6258    serde_with::serde_as,
6259    derive(serde::Serialize, serde::Deserialize),
6260    serde(rename_all = "snake_case")
6261)]
6262#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
6263pub struct EvictionIterator {
6264    pub bucket_list_level: u32,
6265    pub is_curr_bucket: bool,
6266    #[cfg_attr(
6267        all(feature = "serde", feature = "alloc"),
6268        serde_as(as = "NumberOrString")
6269    )]
6270    pub bucket_file_offset: u64,
6271}
6272
6273impl ReadXdr for EvictionIterator {
6274    #[cfg(feature = "std")]
6275    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
6276        r.with_limited_depth(|r| {
6277            Ok(Self {
6278                bucket_list_level: u32::read_xdr(r)?,
6279                is_curr_bucket: bool::read_xdr(r)?,
6280                bucket_file_offset: u64::read_xdr(r)?,
6281            })
6282        })
6283    }
6284}
6285
6286impl WriteXdr for EvictionIterator {
6287    #[cfg(feature = "std")]
6288    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
6289        w.with_limited_depth(|w| {
6290            self.bucket_list_level.write_xdr(w)?;
6291            self.is_curr_bucket.write_xdr(w)?;
6292            self.bucket_file_offset.write_xdr(w)?;
6293            Ok(())
6294        })
6295    }
6296}
6297
6298/// ConfigSettingScpTiming is an XDR Struct defines as:
6299///
6300/// ```text
6301/// struct ConfigSettingSCPTiming {
6302///     uint32 ledgerTargetCloseTimeMilliseconds;
6303///     uint32 nominationTimeoutInitialMilliseconds;
6304///     uint32 nominationTimeoutIncrementMilliseconds;
6305///     uint32 ballotTimeoutInitialMilliseconds;
6306///     uint32 ballotTimeoutIncrementMilliseconds;
6307/// };
6308/// ```
6309///
6310#[cfg_attr(feature = "alloc", derive(Default))]
6311#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
6312#[cfg_eval::cfg_eval]
6313#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6314#[cfg_attr(
6315    all(feature = "serde", feature = "alloc"),
6316    serde_with::serde_as,
6317    derive(serde::Serialize, serde::Deserialize),
6318    serde(rename_all = "snake_case")
6319)]
6320#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
6321pub struct ConfigSettingScpTiming {
6322    pub ledger_target_close_time_milliseconds: u32,
6323    pub nomination_timeout_initial_milliseconds: u32,
6324    pub nomination_timeout_increment_milliseconds: u32,
6325    pub ballot_timeout_initial_milliseconds: u32,
6326    pub ballot_timeout_increment_milliseconds: u32,
6327}
6328
6329impl ReadXdr for ConfigSettingScpTiming {
6330    #[cfg(feature = "std")]
6331    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
6332        r.with_limited_depth(|r| {
6333            Ok(Self {
6334                ledger_target_close_time_milliseconds: u32::read_xdr(r)?,
6335                nomination_timeout_initial_milliseconds: u32::read_xdr(r)?,
6336                nomination_timeout_increment_milliseconds: u32::read_xdr(r)?,
6337                ballot_timeout_initial_milliseconds: u32::read_xdr(r)?,
6338                ballot_timeout_increment_milliseconds: u32::read_xdr(r)?,
6339            })
6340        })
6341    }
6342}
6343
6344impl WriteXdr for ConfigSettingScpTiming {
6345    #[cfg(feature = "std")]
6346    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
6347        w.with_limited_depth(|w| {
6348            self.ledger_target_close_time_milliseconds.write_xdr(w)?;
6349            self.nomination_timeout_initial_milliseconds.write_xdr(w)?;
6350            self.nomination_timeout_increment_milliseconds
6351                .write_xdr(w)?;
6352            self.ballot_timeout_initial_milliseconds.write_xdr(w)?;
6353            self.ballot_timeout_increment_milliseconds.write_xdr(w)?;
6354            Ok(())
6355        })
6356    }
6357}
6358
6359/// ContractCostCountLimit is an XDR Const defines as:
6360///
6361/// ```text
6362/// const CONTRACT_COST_COUNT_LIMIT = 1024;
6363/// ```
6364///
6365pub const CONTRACT_COST_COUNT_LIMIT: u64 = 1024;
6366
6367/// ContractCostParams is an XDR Typedef defines as:
6368///
6369/// ```text
6370/// typedef ContractCostParamEntry ContractCostParams<CONTRACT_COST_COUNT_LIMIT>;
6371/// ```
6372///
6373#[cfg_eval::cfg_eval]
6374#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
6375#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6376#[cfg_attr(
6377    all(feature = "serde", feature = "alloc"),
6378    serde_with::serde_as,
6379    derive(serde::Serialize, serde::Deserialize),
6380    serde(rename_all = "snake_case")
6381)]
6382#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
6383#[derive(Debug)]
6384pub struct ContractCostParams(pub VecM<ContractCostParamEntry, 1024>);
6385
6386impl From<ContractCostParams> for VecM<ContractCostParamEntry, 1024> {
6387    #[must_use]
6388    fn from(x: ContractCostParams) -> Self {
6389        x.0
6390    }
6391}
6392
6393impl From<VecM<ContractCostParamEntry, 1024>> for ContractCostParams {
6394    #[must_use]
6395    fn from(x: VecM<ContractCostParamEntry, 1024>) -> Self {
6396        ContractCostParams(x)
6397    }
6398}
6399
6400impl AsRef<VecM<ContractCostParamEntry, 1024>> for ContractCostParams {
6401    #[must_use]
6402    fn as_ref(&self) -> &VecM<ContractCostParamEntry, 1024> {
6403        &self.0
6404    }
6405}
6406
6407impl ReadXdr for ContractCostParams {
6408    #[cfg(feature = "std")]
6409    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
6410        r.with_limited_depth(|r| {
6411            let i = VecM::<ContractCostParamEntry, 1024>::read_xdr(r)?;
6412            let v = ContractCostParams(i);
6413            Ok(v)
6414        })
6415    }
6416}
6417
6418impl WriteXdr for ContractCostParams {
6419    #[cfg(feature = "std")]
6420    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
6421        w.with_limited_depth(|w| self.0.write_xdr(w))
6422    }
6423}
6424
6425impl Deref for ContractCostParams {
6426    type Target = VecM<ContractCostParamEntry, 1024>;
6427    fn deref(&self) -> &Self::Target {
6428        &self.0
6429    }
6430}
6431
6432impl From<ContractCostParams> for Vec<ContractCostParamEntry> {
6433    #[must_use]
6434    fn from(x: ContractCostParams) -> Self {
6435        x.0 .0
6436    }
6437}
6438
6439impl TryFrom<Vec<ContractCostParamEntry>> for ContractCostParams {
6440    type Error = Error;
6441    fn try_from(x: Vec<ContractCostParamEntry>) -> Result<Self, Error> {
6442        Ok(ContractCostParams(x.try_into()?))
6443    }
6444}
6445
6446#[cfg(feature = "alloc")]
6447impl TryFrom<&Vec<ContractCostParamEntry>> for ContractCostParams {
6448    type Error = Error;
6449    fn try_from(x: &Vec<ContractCostParamEntry>) -> Result<Self, Error> {
6450        Ok(ContractCostParams(x.try_into()?))
6451    }
6452}
6453
6454impl AsRef<Vec<ContractCostParamEntry>> for ContractCostParams {
6455    #[must_use]
6456    fn as_ref(&self) -> &Vec<ContractCostParamEntry> {
6457        &self.0 .0
6458    }
6459}
6460
6461impl AsRef<[ContractCostParamEntry]> for ContractCostParams {
6462    #[cfg(feature = "alloc")]
6463    #[must_use]
6464    fn as_ref(&self) -> &[ContractCostParamEntry] {
6465        &self.0 .0
6466    }
6467    #[cfg(not(feature = "alloc"))]
6468    #[must_use]
6469    fn as_ref(&self) -> &[ContractCostParamEntry] {
6470        self.0 .0
6471    }
6472}
6473
6474/// ConfigSettingId is an XDR Enum defines as:
6475///
6476/// ```text
6477/// enum ConfigSettingID
6478/// {
6479///     CONFIG_SETTING_CONTRACT_MAX_SIZE_BYTES = 0,
6480///     CONFIG_SETTING_CONTRACT_COMPUTE_V0 = 1,
6481///     CONFIG_SETTING_CONTRACT_LEDGER_COST_V0 = 2,
6482///     CONFIG_SETTING_CONTRACT_HISTORICAL_DATA_V0 = 3,
6483///     CONFIG_SETTING_CONTRACT_EVENTS_V0 = 4,
6484///     CONFIG_SETTING_CONTRACT_BANDWIDTH_V0 = 5,
6485///     CONFIG_SETTING_CONTRACT_COST_PARAMS_CPU_INSTRUCTIONS = 6,
6486///     CONFIG_SETTING_CONTRACT_COST_PARAMS_MEMORY_BYTES = 7,
6487///     CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES = 8,
6488///     CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES = 9,
6489///     CONFIG_SETTING_STATE_ARCHIVAL = 10,
6490///     CONFIG_SETTING_CONTRACT_EXECUTION_LANES = 11,
6491///     CONFIG_SETTING_LIVE_SOROBAN_STATE_SIZE_WINDOW = 12,
6492///     CONFIG_SETTING_EVICTION_ITERATOR = 13,
6493///     CONFIG_SETTING_CONTRACT_PARALLEL_COMPUTE_V0 = 14,
6494///     CONFIG_SETTING_CONTRACT_LEDGER_COST_EXT_V0 = 15,
6495///     CONFIG_SETTING_SCP_TIMING = 16
6496/// };
6497/// ```
6498///
6499// enum
6500#[cfg_attr(feature = "alloc", derive(Default))]
6501#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
6502#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6503#[cfg_attr(
6504    all(feature = "serde", feature = "alloc"),
6505    derive(serde::Serialize, serde::Deserialize),
6506    serde(rename_all = "snake_case")
6507)]
6508#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
6509#[repr(i32)]
6510pub enum ConfigSettingId {
6511    #[cfg_attr(feature = "alloc", default)]
6512    ContractMaxSizeBytes = 0,
6513    ContractComputeV0 = 1,
6514    ContractLedgerCostV0 = 2,
6515    ContractHistoricalDataV0 = 3,
6516    ContractEventsV0 = 4,
6517    ContractBandwidthV0 = 5,
6518    ContractCostParamsCpuInstructions = 6,
6519    ContractCostParamsMemoryBytes = 7,
6520    ContractDataKeySizeBytes = 8,
6521    ContractDataEntrySizeBytes = 9,
6522    StateArchival = 10,
6523    ContractExecutionLanes = 11,
6524    LiveSorobanStateSizeWindow = 12,
6525    EvictionIterator = 13,
6526    ContractParallelComputeV0 = 14,
6527    ContractLedgerCostExtV0 = 15,
6528    ScpTiming = 16,
6529}
6530
6531impl ConfigSettingId {
6532    pub const VARIANTS: [ConfigSettingId; 17] = [
6533        ConfigSettingId::ContractMaxSizeBytes,
6534        ConfigSettingId::ContractComputeV0,
6535        ConfigSettingId::ContractLedgerCostV0,
6536        ConfigSettingId::ContractHistoricalDataV0,
6537        ConfigSettingId::ContractEventsV0,
6538        ConfigSettingId::ContractBandwidthV0,
6539        ConfigSettingId::ContractCostParamsCpuInstructions,
6540        ConfigSettingId::ContractCostParamsMemoryBytes,
6541        ConfigSettingId::ContractDataKeySizeBytes,
6542        ConfigSettingId::ContractDataEntrySizeBytes,
6543        ConfigSettingId::StateArchival,
6544        ConfigSettingId::ContractExecutionLanes,
6545        ConfigSettingId::LiveSorobanStateSizeWindow,
6546        ConfigSettingId::EvictionIterator,
6547        ConfigSettingId::ContractParallelComputeV0,
6548        ConfigSettingId::ContractLedgerCostExtV0,
6549        ConfigSettingId::ScpTiming,
6550    ];
6551    pub const VARIANTS_STR: [&'static str; 17] = [
6552        "ContractMaxSizeBytes",
6553        "ContractComputeV0",
6554        "ContractLedgerCostV0",
6555        "ContractHistoricalDataV0",
6556        "ContractEventsV0",
6557        "ContractBandwidthV0",
6558        "ContractCostParamsCpuInstructions",
6559        "ContractCostParamsMemoryBytes",
6560        "ContractDataKeySizeBytes",
6561        "ContractDataEntrySizeBytes",
6562        "StateArchival",
6563        "ContractExecutionLanes",
6564        "LiveSorobanStateSizeWindow",
6565        "EvictionIterator",
6566        "ContractParallelComputeV0",
6567        "ContractLedgerCostExtV0",
6568        "ScpTiming",
6569    ];
6570
6571    #[must_use]
6572    pub const fn name(&self) -> &'static str {
6573        match self {
6574            Self::ContractMaxSizeBytes => "ContractMaxSizeBytes",
6575            Self::ContractComputeV0 => "ContractComputeV0",
6576            Self::ContractLedgerCostV0 => "ContractLedgerCostV0",
6577            Self::ContractHistoricalDataV0 => "ContractHistoricalDataV0",
6578            Self::ContractEventsV0 => "ContractEventsV0",
6579            Self::ContractBandwidthV0 => "ContractBandwidthV0",
6580            Self::ContractCostParamsCpuInstructions => "ContractCostParamsCpuInstructions",
6581            Self::ContractCostParamsMemoryBytes => "ContractCostParamsMemoryBytes",
6582            Self::ContractDataKeySizeBytes => "ContractDataKeySizeBytes",
6583            Self::ContractDataEntrySizeBytes => "ContractDataEntrySizeBytes",
6584            Self::StateArchival => "StateArchival",
6585            Self::ContractExecutionLanes => "ContractExecutionLanes",
6586            Self::LiveSorobanStateSizeWindow => "LiveSorobanStateSizeWindow",
6587            Self::EvictionIterator => "EvictionIterator",
6588            Self::ContractParallelComputeV0 => "ContractParallelComputeV0",
6589            Self::ContractLedgerCostExtV0 => "ContractLedgerCostExtV0",
6590            Self::ScpTiming => "ScpTiming",
6591        }
6592    }
6593
6594    #[must_use]
6595    pub const fn variants() -> [ConfigSettingId; 17] {
6596        Self::VARIANTS
6597    }
6598}
6599
6600impl Name for ConfigSettingId {
6601    #[must_use]
6602    fn name(&self) -> &'static str {
6603        Self::name(self)
6604    }
6605}
6606
6607impl Variants<ConfigSettingId> for ConfigSettingId {
6608    fn variants() -> slice::Iter<'static, ConfigSettingId> {
6609        Self::VARIANTS.iter()
6610    }
6611}
6612
6613impl Enum for ConfigSettingId {}
6614
6615impl fmt::Display for ConfigSettingId {
6616    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
6617        f.write_str(self.name())
6618    }
6619}
6620
6621impl TryFrom<i32> for ConfigSettingId {
6622    type Error = Error;
6623
6624    fn try_from(i: i32) -> Result<Self, Error> {
6625        let e = match i {
6626            0 => ConfigSettingId::ContractMaxSizeBytes,
6627            1 => ConfigSettingId::ContractComputeV0,
6628            2 => ConfigSettingId::ContractLedgerCostV0,
6629            3 => ConfigSettingId::ContractHistoricalDataV0,
6630            4 => ConfigSettingId::ContractEventsV0,
6631            5 => ConfigSettingId::ContractBandwidthV0,
6632            6 => ConfigSettingId::ContractCostParamsCpuInstructions,
6633            7 => ConfigSettingId::ContractCostParamsMemoryBytes,
6634            8 => ConfigSettingId::ContractDataKeySizeBytes,
6635            9 => ConfigSettingId::ContractDataEntrySizeBytes,
6636            10 => ConfigSettingId::StateArchival,
6637            11 => ConfigSettingId::ContractExecutionLanes,
6638            12 => ConfigSettingId::LiveSorobanStateSizeWindow,
6639            13 => ConfigSettingId::EvictionIterator,
6640            14 => ConfigSettingId::ContractParallelComputeV0,
6641            15 => ConfigSettingId::ContractLedgerCostExtV0,
6642            16 => ConfigSettingId::ScpTiming,
6643            #[allow(unreachable_patterns)]
6644            _ => return Err(Error::Invalid),
6645        };
6646        Ok(e)
6647    }
6648}
6649
6650impl From<ConfigSettingId> for i32 {
6651    #[must_use]
6652    fn from(e: ConfigSettingId) -> Self {
6653        e as Self
6654    }
6655}
6656
6657impl ReadXdr for ConfigSettingId {
6658    #[cfg(feature = "std")]
6659    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
6660        r.with_limited_depth(|r| {
6661            let e = i32::read_xdr(r)?;
6662            let v: Self = e.try_into()?;
6663            Ok(v)
6664        })
6665    }
6666}
6667
6668impl WriteXdr for ConfigSettingId {
6669    #[cfg(feature = "std")]
6670    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
6671        w.with_limited_depth(|w| {
6672            let i: i32 = (*self).into();
6673            i.write_xdr(w)
6674        })
6675    }
6676}
6677
6678/// ConfigSettingEntry is an XDR Union defines as:
6679///
6680/// ```text
6681/// union ConfigSettingEntry switch (ConfigSettingID configSettingID)
6682/// {
6683/// case CONFIG_SETTING_CONTRACT_MAX_SIZE_BYTES:
6684///     uint32 contractMaxSizeBytes;
6685/// case CONFIG_SETTING_CONTRACT_COMPUTE_V0:
6686///     ConfigSettingContractComputeV0 contractCompute;
6687/// case CONFIG_SETTING_CONTRACT_LEDGER_COST_V0:
6688///     ConfigSettingContractLedgerCostV0 contractLedgerCost;
6689/// case CONFIG_SETTING_CONTRACT_HISTORICAL_DATA_V0:
6690///     ConfigSettingContractHistoricalDataV0 contractHistoricalData;
6691/// case CONFIG_SETTING_CONTRACT_EVENTS_V0:
6692///     ConfigSettingContractEventsV0 contractEvents;
6693/// case CONFIG_SETTING_CONTRACT_BANDWIDTH_V0:
6694///     ConfigSettingContractBandwidthV0 contractBandwidth;
6695/// case CONFIG_SETTING_CONTRACT_COST_PARAMS_CPU_INSTRUCTIONS:
6696///     ContractCostParams contractCostParamsCpuInsns;
6697/// case CONFIG_SETTING_CONTRACT_COST_PARAMS_MEMORY_BYTES:
6698///     ContractCostParams contractCostParamsMemBytes;
6699/// case CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES:
6700///     uint32 contractDataKeySizeBytes;
6701/// case CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES:
6702///     uint32 contractDataEntrySizeBytes;
6703/// case CONFIG_SETTING_STATE_ARCHIVAL:
6704///     StateArchivalSettings stateArchivalSettings;
6705/// case CONFIG_SETTING_CONTRACT_EXECUTION_LANES:
6706///     ConfigSettingContractExecutionLanesV0 contractExecutionLanes;
6707/// case CONFIG_SETTING_LIVE_SOROBAN_STATE_SIZE_WINDOW:
6708///     uint64 liveSorobanStateSizeWindow<>;
6709/// case CONFIG_SETTING_EVICTION_ITERATOR:
6710///     EvictionIterator evictionIterator;
6711/// case CONFIG_SETTING_CONTRACT_PARALLEL_COMPUTE_V0:
6712///     ConfigSettingContractParallelComputeV0 contractParallelCompute;
6713/// case CONFIG_SETTING_CONTRACT_LEDGER_COST_EXT_V0:
6714///     ConfigSettingContractLedgerCostExtV0 contractLedgerCostExt;
6715/// case CONFIG_SETTING_SCP_TIMING:
6716///     ConfigSettingSCPTiming contractSCPTiming;
6717/// };
6718/// ```
6719///
6720// union with discriminant ConfigSettingId
6721#[cfg_eval::cfg_eval]
6722#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
6723#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6724#[cfg_attr(
6725    all(feature = "serde", feature = "alloc"),
6726    serde_with::serde_as,
6727    derive(serde::Serialize, serde::Deserialize),
6728    serde(rename_all = "snake_case")
6729)]
6730#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
6731#[allow(clippy::large_enum_variant)]
6732pub enum ConfigSettingEntry {
6733    ContractMaxSizeBytes(u32),
6734    ContractComputeV0(ConfigSettingContractComputeV0),
6735    ContractLedgerCostV0(ConfigSettingContractLedgerCostV0),
6736    ContractHistoricalDataV0(ConfigSettingContractHistoricalDataV0),
6737    ContractEventsV0(ConfigSettingContractEventsV0),
6738    ContractBandwidthV0(ConfigSettingContractBandwidthV0),
6739    ContractCostParamsCpuInstructions(ContractCostParams),
6740    ContractCostParamsMemoryBytes(ContractCostParams),
6741    ContractDataKeySizeBytes(u32),
6742    ContractDataEntrySizeBytes(u32),
6743    StateArchival(StateArchivalSettings),
6744    ContractExecutionLanes(ConfigSettingContractExecutionLanesV0),
6745    LiveSorobanStateSizeWindow(
6746        #[cfg_attr(
6747            all(feature = "serde", feature = "alloc"),
6748            serde_as(as = "VecM<NumberOrString>")
6749        )]
6750        VecM<u64>,
6751    ),
6752    EvictionIterator(EvictionIterator),
6753    ContractParallelComputeV0(ConfigSettingContractParallelComputeV0),
6754    ContractLedgerCostExtV0(ConfigSettingContractLedgerCostExtV0),
6755    ScpTiming(ConfigSettingScpTiming),
6756}
6757
6758#[cfg(feature = "alloc")]
6759impl Default for ConfigSettingEntry {
6760    fn default() -> Self {
6761        Self::ContractMaxSizeBytes(u32::default())
6762    }
6763}
6764
6765impl ConfigSettingEntry {
6766    pub const VARIANTS: [ConfigSettingId; 17] = [
6767        ConfigSettingId::ContractMaxSizeBytes,
6768        ConfigSettingId::ContractComputeV0,
6769        ConfigSettingId::ContractLedgerCostV0,
6770        ConfigSettingId::ContractHistoricalDataV0,
6771        ConfigSettingId::ContractEventsV0,
6772        ConfigSettingId::ContractBandwidthV0,
6773        ConfigSettingId::ContractCostParamsCpuInstructions,
6774        ConfigSettingId::ContractCostParamsMemoryBytes,
6775        ConfigSettingId::ContractDataKeySizeBytes,
6776        ConfigSettingId::ContractDataEntrySizeBytes,
6777        ConfigSettingId::StateArchival,
6778        ConfigSettingId::ContractExecutionLanes,
6779        ConfigSettingId::LiveSorobanStateSizeWindow,
6780        ConfigSettingId::EvictionIterator,
6781        ConfigSettingId::ContractParallelComputeV0,
6782        ConfigSettingId::ContractLedgerCostExtV0,
6783        ConfigSettingId::ScpTiming,
6784    ];
6785    pub const VARIANTS_STR: [&'static str; 17] = [
6786        "ContractMaxSizeBytes",
6787        "ContractComputeV0",
6788        "ContractLedgerCostV0",
6789        "ContractHistoricalDataV0",
6790        "ContractEventsV0",
6791        "ContractBandwidthV0",
6792        "ContractCostParamsCpuInstructions",
6793        "ContractCostParamsMemoryBytes",
6794        "ContractDataKeySizeBytes",
6795        "ContractDataEntrySizeBytes",
6796        "StateArchival",
6797        "ContractExecutionLanes",
6798        "LiveSorobanStateSizeWindow",
6799        "EvictionIterator",
6800        "ContractParallelComputeV0",
6801        "ContractLedgerCostExtV0",
6802        "ScpTiming",
6803    ];
6804
6805    #[must_use]
6806    pub const fn name(&self) -> &'static str {
6807        match self {
6808            Self::ContractMaxSizeBytes(_) => "ContractMaxSizeBytes",
6809            Self::ContractComputeV0(_) => "ContractComputeV0",
6810            Self::ContractLedgerCostV0(_) => "ContractLedgerCostV0",
6811            Self::ContractHistoricalDataV0(_) => "ContractHistoricalDataV0",
6812            Self::ContractEventsV0(_) => "ContractEventsV0",
6813            Self::ContractBandwidthV0(_) => "ContractBandwidthV0",
6814            Self::ContractCostParamsCpuInstructions(_) => "ContractCostParamsCpuInstructions",
6815            Self::ContractCostParamsMemoryBytes(_) => "ContractCostParamsMemoryBytes",
6816            Self::ContractDataKeySizeBytes(_) => "ContractDataKeySizeBytes",
6817            Self::ContractDataEntrySizeBytes(_) => "ContractDataEntrySizeBytes",
6818            Self::StateArchival(_) => "StateArchival",
6819            Self::ContractExecutionLanes(_) => "ContractExecutionLanes",
6820            Self::LiveSorobanStateSizeWindow(_) => "LiveSorobanStateSizeWindow",
6821            Self::EvictionIterator(_) => "EvictionIterator",
6822            Self::ContractParallelComputeV0(_) => "ContractParallelComputeV0",
6823            Self::ContractLedgerCostExtV0(_) => "ContractLedgerCostExtV0",
6824            Self::ScpTiming(_) => "ScpTiming",
6825        }
6826    }
6827
6828    #[must_use]
6829    pub const fn discriminant(&self) -> ConfigSettingId {
6830        #[allow(clippy::match_same_arms)]
6831        match self {
6832            Self::ContractMaxSizeBytes(_) => ConfigSettingId::ContractMaxSizeBytes,
6833            Self::ContractComputeV0(_) => ConfigSettingId::ContractComputeV0,
6834            Self::ContractLedgerCostV0(_) => ConfigSettingId::ContractLedgerCostV0,
6835            Self::ContractHistoricalDataV0(_) => ConfigSettingId::ContractHistoricalDataV0,
6836            Self::ContractEventsV0(_) => ConfigSettingId::ContractEventsV0,
6837            Self::ContractBandwidthV0(_) => ConfigSettingId::ContractBandwidthV0,
6838            Self::ContractCostParamsCpuInstructions(_) => {
6839                ConfigSettingId::ContractCostParamsCpuInstructions
6840            }
6841            Self::ContractCostParamsMemoryBytes(_) => {
6842                ConfigSettingId::ContractCostParamsMemoryBytes
6843            }
6844            Self::ContractDataKeySizeBytes(_) => ConfigSettingId::ContractDataKeySizeBytes,
6845            Self::ContractDataEntrySizeBytes(_) => ConfigSettingId::ContractDataEntrySizeBytes,
6846            Self::StateArchival(_) => ConfigSettingId::StateArchival,
6847            Self::ContractExecutionLanes(_) => ConfigSettingId::ContractExecutionLanes,
6848            Self::LiveSorobanStateSizeWindow(_) => ConfigSettingId::LiveSorobanStateSizeWindow,
6849            Self::EvictionIterator(_) => ConfigSettingId::EvictionIterator,
6850            Self::ContractParallelComputeV0(_) => ConfigSettingId::ContractParallelComputeV0,
6851            Self::ContractLedgerCostExtV0(_) => ConfigSettingId::ContractLedgerCostExtV0,
6852            Self::ScpTiming(_) => ConfigSettingId::ScpTiming,
6853        }
6854    }
6855
6856    #[must_use]
6857    pub const fn variants() -> [ConfigSettingId; 17] {
6858        Self::VARIANTS
6859    }
6860}
6861
6862impl Name for ConfigSettingEntry {
6863    #[must_use]
6864    fn name(&self) -> &'static str {
6865        Self::name(self)
6866    }
6867}
6868
6869impl Discriminant<ConfigSettingId> for ConfigSettingEntry {
6870    #[must_use]
6871    fn discriminant(&self) -> ConfigSettingId {
6872        Self::discriminant(self)
6873    }
6874}
6875
6876impl Variants<ConfigSettingId> for ConfigSettingEntry {
6877    fn variants() -> slice::Iter<'static, ConfigSettingId> {
6878        Self::VARIANTS.iter()
6879    }
6880}
6881
6882impl Union<ConfigSettingId> for ConfigSettingEntry {}
6883
6884impl ReadXdr for ConfigSettingEntry {
6885    #[cfg(feature = "std")]
6886    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
6887        r.with_limited_depth(|r| {
6888            let dv: ConfigSettingId = <ConfigSettingId as ReadXdr>::read_xdr(r)?;
6889            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
6890            let v = match dv {
6891                ConfigSettingId::ContractMaxSizeBytes => {
6892                    Self::ContractMaxSizeBytes(u32::read_xdr(r)?)
6893                }
6894                ConfigSettingId::ContractComputeV0 => {
6895                    Self::ContractComputeV0(ConfigSettingContractComputeV0::read_xdr(r)?)
6896                }
6897                ConfigSettingId::ContractLedgerCostV0 => {
6898                    Self::ContractLedgerCostV0(ConfigSettingContractLedgerCostV0::read_xdr(r)?)
6899                }
6900                ConfigSettingId::ContractHistoricalDataV0 => Self::ContractHistoricalDataV0(
6901                    ConfigSettingContractHistoricalDataV0::read_xdr(r)?,
6902                ),
6903                ConfigSettingId::ContractEventsV0 => {
6904                    Self::ContractEventsV0(ConfigSettingContractEventsV0::read_xdr(r)?)
6905                }
6906                ConfigSettingId::ContractBandwidthV0 => {
6907                    Self::ContractBandwidthV0(ConfigSettingContractBandwidthV0::read_xdr(r)?)
6908                }
6909                ConfigSettingId::ContractCostParamsCpuInstructions => {
6910                    Self::ContractCostParamsCpuInstructions(ContractCostParams::read_xdr(r)?)
6911                }
6912                ConfigSettingId::ContractCostParamsMemoryBytes => {
6913                    Self::ContractCostParamsMemoryBytes(ContractCostParams::read_xdr(r)?)
6914                }
6915                ConfigSettingId::ContractDataKeySizeBytes => {
6916                    Self::ContractDataKeySizeBytes(u32::read_xdr(r)?)
6917                }
6918                ConfigSettingId::ContractDataEntrySizeBytes => {
6919                    Self::ContractDataEntrySizeBytes(u32::read_xdr(r)?)
6920                }
6921                ConfigSettingId::StateArchival => {
6922                    Self::StateArchival(StateArchivalSettings::read_xdr(r)?)
6923                }
6924                ConfigSettingId::ContractExecutionLanes => Self::ContractExecutionLanes(
6925                    ConfigSettingContractExecutionLanesV0::read_xdr(r)?,
6926                ),
6927                ConfigSettingId::LiveSorobanStateSizeWindow => {
6928                    Self::LiveSorobanStateSizeWindow(VecM::<u64>::read_xdr(r)?)
6929                }
6930                ConfigSettingId::EvictionIterator => {
6931                    Self::EvictionIterator(EvictionIterator::read_xdr(r)?)
6932                }
6933                ConfigSettingId::ContractParallelComputeV0 => Self::ContractParallelComputeV0(
6934                    ConfigSettingContractParallelComputeV0::read_xdr(r)?,
6935                ),
6936                ConfigSettingId::ContractLedgerCostExtV0 => Self::ContractLedgerCostExtV0(
6937                    ConfigSettingContractLedgerCostExtV0::read_xdr(r)?,
6938                ),
6939                ConfigSettingId::ScpTiming => Self::ScpTiming(ConfigSettingScpTiming::read_xdr(r)?),
6940                #[allow(unreachable_patterns)]
6941                _ => return Err(Error::Invalid),
6942            };
6943            Ok(v)
6944        })
6945    }
6946}
6947
6948impl WriteXdr for ConfigSettingEntry {
6949    #[cfg(feature = "std")]
6950    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
6951        w.with_limited_depth(|w| {
6952            self.discriminant().write_xdr(w)?;
6953            #[allow(clippy::match_same_arms)]
6954            match self {
6955                Self::ContractMaxSizeBytes(v) => v.write_xdr(w)?,
6956                Self::ContractComputeV0(v) => v.write_xdr(w)?,
6957                Self::ContractLedgerCostV0(v) => v.write_xdr(w)?,
6958                Self::ContractHistoricalDataV0(v) => v.write_xdr(w)?,
6959                Self::ContractEventsV0(v) => v.write_xdr(w)?,
6960                Self::ContractBandwidthV0(v) => v.write_xdr(w)?,
6961                Self::ContractCostParamsCpuInstructions(v) => v.write_xdr(w)?,
6962                Self::ContractCostParamsMemoryBytes(v) => v.write_xdr(w)?,
6963                Self::ContractDataKeySizeBytes(v) => v.write_xdr(w)?,
6964                Self::ContractDataEntrySizeBytes(v) => v.write_xdr(w)?,
6965                Self::StateArchival(v) => v.write_xdr(w)?,
6966                Self::ContractExecutionLanes(v) => v.write_xdr(w)?,
6967                Self::LiveSorobanStateSizeWindow(v) => v.write_xdr(w)?,
6968                Self::EvictionIterator(v) => v.write_xdr(w)?,
6969                Self::ContractParallelComputeV0(v) => v.write_xdr(w)?,
6970                Self::ContractLedgerCostExtV0(v) => v.write_xdr(w)?,
6971                Self::ScpTiming(v) => v.write_xdr(w)?,
6972            };
6973            Ok(())
6974        })
6975    }
6976}
6977
6978/// ScEnvMetaKind is an XDR Enum defines as:
6979///
6980/// ```text
6981/// enum SCEnvMetaKind
6982/// {
6983///     SC_ENV_META_KIND_INTERFACE_VERSION = 0
6984/// };
6985/// ```
6986///
6987// enum
6988#[cfg_attr(feature = "alloc", derive(Default))]
6989#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
6990#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
6991#[cfg_attr(
6992    all(feature = "serde", feature = "alloc"),
6993    derive(serde::Serialize, serde::Deserialize),
6994    serde(rename_all = "snake_case")
6995)]
6996#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
6997#[repr(i32)]
6998pub enum ScEnvMetaKind {
6999    #[cfg_attr(feature = "alloc", default)]
7000    ScEnvMetaKindInterfaceVersion = 0,
7001}
7002
7003impl ScEnvMetaKind {
7004    pub const VARIANTS: [ScEnvMetaKind; 1] = [ScEnvMetaKind::ScEnvMetaKindInterfaceVersion];
7005    pub const VARIANTS_STR: [&'static str; 1] = ["ScEnvMetaKindInterfaceVersion"];
7006
7007    #[must_use]
7008    pub const fn name(&self) -> &'static str {
7009        match self {
7010            Self::ScEnvMetaKindInterfaceVersion => "ScEnvMetaKindInterfaceVersion",
7011        }
7012    }
7013
7014    #[must_use]
7015    pub const fn variants() -> [ScEnvMetaKind; 1] {
7016        Self::VARIANTS
7017    }
7018}
7019
7020impl Name for ScEnvMetaKind {
7021    #[must_use]
7022    fn name(&self) -> &'static str {
7023        Self::name(self)
7024    }
7025}
7026
7027impl Variants<ScEnvMetaKind> for ScEnvMetaKind {
7028    fn variants() -> slice::Iter<'static, ScEnvMetaKind> {
7029        Self::VARIANTS.iter()
7030    }
7031}
7032
7033impl Enum for ScEnvMetaKind {}
7034
7035impl fmt::Display for ScEnvMetaKind {
7036    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
7037        f.write_str(self.name())
7038    }
7039}
7040
7041impl TryFrom<i32> for ScEnvMetaKind {
7042    type Error = Error;
7043
7044    fn try_from(i: i32) -> Result<Self, Error> {
7045        let e = match i {
7046            0 => ScEnvMetaKind::ScEnvMetaKindInterfaceVersion,
7047            #[allow(unreachable_patterns)]
7048            _ => return Err(Error::Invalid),
7049        };
7050        Ok(e)
7051    }
7052}
7053
7054impl From<ScEnvMetaKind> for i32 {
7055    #[must_use]
7056    fn from(e: ScEnvMetaKind) -> Self {
7057        e as Self
7058    }
7059}
7060
7061impl ReadXdr for ScEnvMetaKind {
7062    #[cfg(feature = "std")]
7063    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7064        r.with_limited_depth(|r| {
7065            let e = i32::read_xdr(r)?;
7066            let v: Self = e.try_into()?;
7067            Ok(v)
7068        })
7069    }
7070}
7071
7072impl WriteXdr for ScEnvMetaKind {
7073    #[cfg(feature = "std")]
7074    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
7075        w.with_limited_depth(|w| {
7076            let i: i32 = (*self).into();
7077            i.write_xdr(w)
7078        })
7079    }
7080}
7081
7082/// ScEnvMetaEntryInterfaceVersion is an XDR NestedStruct defines as:
7083///
7084/// ```text
7085/// struct {
7086///         uint32 protocol;
7087///         uint32 preRelease;
7088///     }
7089/// ```
7090///
7091#[cfg_attr(feature = "alloc", derive(Default))]
7092#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
7093#[cfg_eval::cfg_eval]
7094#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7095#[cfg_attr(
7096    all(feature = "serde", feature = "alloc"),
7097    serde_with::serde_as,
7098    derive(serde::Serialize, serde::Deserialize),
7099    serde(rename_all = "snake_case")
7100)]
7101#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
7102pub struct ScEnvMetaEntryInterfaceVersion {
7103    pub protocol: u32,
7104    pub pre_release: u32,
7105}
7106
7107impl ReadXdr for ScEnvMetaEntryInterfaceVersion {
7108    #[cfg(feature = "std")]
7109    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7110        r.with_limited_depth(|r| {
7111            Ok(Self {
7112                protocol: u32::read_xdr(r)?,
7113                pre_release: u32::read_xdr(r)?,
7114            })
7115        })
7116    }
7117}
7118
7119impl WriteXdr for ScEnvMetaEntryInterfaceVersion {
7120    #[cfg(feature = "std")]
7121    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
7122        w.with_limited_depth(|w| {
7123            self.protocol.write_xdr(w)?;
7124            self.pre_release.write_xdr(w)?;
7125            Ok(())
7126        })
7127    }
7128}
7129
7130/// ScEnvMetaEntry is an XDR Union defines as:
7131///
7132/// ```text
7133/// union SCEnvMetaEntry switch (SCEnvMetaKind kind)
7134/// {
7135/// case SC_ENV_META_KIND_INTERFACE_VERSION:
7136///     struct {
7137///         uint32 protocol;
7138///         uint32 preRelease;
7139///     } interfaceVersion;
7140/// };
7141/// ```
7142///
7143// union with discriminant ScEnvMetaKind
7144#[cfg_eval::cfg_eval]
7145#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
7146#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7147#[cfg_attr(
7148    all(feature = "serde", feature = "alloc"),
7149    serde_with::serde_as,
7150    derive(serde::Serialize, serde::Deserialize),
7151    serde(rename_all = "snake_case")
7152)]
7153#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
7154#[allow(clippy::large_enum_variant)]
7155pub enum ScEnvMetaEntry {
7156    ScEnvMetaKindInterfaceVersion(ScEnvMetaEntryInterfaceVersion),
7157}
7158
7159#[cfg(feature = "alloc")]
7160impl Default for ScEnvMetaEntry {
7161    fn default() -> Self {
7162        Self::ScEnvMetaKindInterfaceVersion(ScEnvMetaEntryInterfaceVersion::default())
7163    }
7164}
7165
7166impl ScEnvMetaEntry {
7167    pub const VARIANTS: [ScEnvMetaKind; 1] = [ScEnvMetaKind::ScEnvMetaKindInterfaceVersion];
7168    pub const VARIANTS_STR: [&'static str; 1] = ["ScEnvMetaKindInterfaceVersion"];
7169
7170    #[must_use]
7171    pub const fn name(&self) -> &'static str {
7172        match self {
7173            Self::ScEnvMetaKindInterfaceVersion(_) => "ScEnvMetaKindInterfaceVersion",
7174        }
7175    }
7176
7177    #[must_use]
7178    pub const fn discriminant(&self) -> ScEnvMetaKind {
7179        #[allow(clippy::match_same_arms)]
7180        match self {
7181            Self::ScEnvMetaKindInterfaceVersion(_) => ScEnvMetaKind::ScEnvMetaKindInterfaceVersion,
7182        }
7183    }
7184
7185    #[must_use]
7186    pub const fn variants() -> [ScEnvMetaKind; 1] {
7187        Self::VARIANTS
7188    }
7189}
7190
7191impl Name for ScEnvMetaEntry {
7192    #[must_use]
7193    fn name(&self) -> &'static str {
7194        Self::name(self)
7195    }
7196}
7197
7198impl Discriminant<ScEnvMetaKind> for ScEnvMetaEntry {
7199    #[must_use]
7200    fn discriminant(&self) -> ScEnvMetaKind {
7201        Self::discriminant(self)
7202    }
7203}
7204
7205impl Variants<ScEnvMetaKind> for ScEnvMetaEntry {
7206    fn variants() -> slice::Iter<'static, ScEnvMetaKind> {
7207        Self::VARIANTS.iter()
7208    }
7209}
7210
7211impl Union<ScEnvMetaKind> for ScEnvMetaEntry {}
7212
7213impl ReadXdr for ScEnvMetaEntry {
7214    #[cfg(feature = "std")]
7215    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7216        r.with_limited_depth(|r| {
7217            let dv: ScEnvMetaKind = <ScEnvMetaKind as ReadXdr>::read_xdr(r)?;
7218            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
7219            let v = match dv {
7220                ScEnvMetaKind::ScEnvMetaKindInterfaceVersion => {
7221                    Self::ScEnvMetaKindInterfaceVersion(ScEnvMetaEntryInterfaceVersion::read_xdr(
7222                        r,
7223                    )?)
7224                }
7225                #[allow(unreachable_patterns)]
7226                _ => return Err(Error::Invalid),
7227            };
7228            Ok(v)
7229        })
7230    }
7231}
7232
7233impl WriteXdr for ScEnvMetaEntry {
7234    #[cfg(feature = "std")]
7235    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
7236        w.with_limited_depth(|w| {
7237            self.discriminant().write_xdr(w)?;
7238            #[allow(clippy::match_same_arms)]
7239            match self {
7240                Self::ScEnvMetaKindInterfaceVersion(v) => v.write_xdr(w)?,
7241            };
7242            Ok(())
7243        })
7244    }
7245}
7246
7247/// ScMetaV0 is an XDR Struct defines as:
7248///
7249/// ```text
7250/// struct SCMetaV0
7251/// {
7252///     string key<>;
7253///     string val<>;
7254/// };
7255/// ```
7256///
7257#[cfg_attr(feature = "alloc", derive(Default))]
7258#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
7259#[cfg_eval::cfg_eval]
7260#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7261#[cfg_attr(
7262    all(feature = "serde", feature = "alloc"),
7263    serde_with::serde_as,
7264    derive(serde::Serialize, serde::Deserialize),
7265    serde(rename_all = "snake_case")
7266)]
7267#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
7268pub struct ScMetaV0 {
7269    pub key: StringM,
7270    pub val: StringM,
7271}
7272
7273impl ReadXdr for ScMetaV0 {
7274    #[cfg(feature = "std")]
7275    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7276        r.with_limited_depth(|r| {
7277            Ok(Self {
7278                key: StringM::read_xdr(r)?,
7279                val: StringM::read_xdr(r)?,
7280            })
7281        })
7282    }
7283}
7284
7285impl WriteXdr for ScMetaV0 {
7286    #[cfg(feature = "std")]
7287    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
7288        w.with_limited_depth(|w| {
7289            self.key.write_xdr(w)?;
7290            self.val.write_xdr(w)?;
7291            Ok(())
7292        })
7293    }
7294}
7295
7296/// ScMetaKind is an XDR Enum defines as:
7297///
7298/// ```text
7299/// enum SCMetaKind
7300/// {
7301///     SC_META_V0 = 0
7302/// };
7303/// ```
7304///
7305// enum
7306#[cfg_attr(feature = "alloc", derive(Default))]
7307#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
7308#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7309#[cfg_attr(
7310    all(feature = "serde", feature = "alloc"),
7311    derive(serde::Serialize, serde::Deserialize),
7312    serde(rename_all = "snake_case")
7313)]
7314#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
7315#[repr(i32)]
7316pub enum ScMetaKind {
7317    #[cfg_attr(feature = "alloc", default)]
7318    ScMetaV0 = 0,
7319}
7320
7321impl ScMetaKind {
7322    pub const VARIANTS: [ScMetaKind; 1] = [ScMetaKind::ScMetaV0];
7323    pub const VARIANTS_STR: [&'static str; 1] = ["ScMetaV0"];
7324
7325    #[must_use]
7326    pub const fn name(&self) -> &'static str {
7327        match self {
7328            Self::ScMetaV0 => "ScMetaV0",
7329        }
7330    }
7331
7332    #[must_use]
7333    pub const fn variants() -> [ScMetaKind; 1] {
7334        Self::VARIANTS
7335    }
7336}
7337
7338impl Name for ScMetaKind {
7339    #[must_use]
7340    fn name(&self) -> &'static str {
7341        Self::name(self)
7342    }
7343}
7344
7345impl Variants<ScMetaKind> for ScMetaKind {
7346    fn variants() -> slice::Iter<'static, ScMetaKind> {
7347        Self::VARIANTS.iter()
7348    }
7349}
7350
7351impl Enum for ScMetaKind {}
7352
7353impl fmt::Display for ScMetaKind {
7354    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
7355        f.write_str(self.name())
7356    }
7357}
7358
7359impl TryFrom<i32> for ScMetaKind {
7360    type Error = Error;
7361
7362    fn try_from(i: i32) -> Result<Self, Error> {
7363        let e = match i {
7364            0 => ScMetaKind::ScMetaV0,
7365            #[allow(unreachable_patterns)]
7366            _ => return Err(Error::Invalid),
7367        };
7368        Ok(e)
7369    }
7370}
7371
7372impl From<ScMetaKind> for i32 {
7373    #[must_use]
7374    fn from(e: ScMetaKind) -> Self {
7375        e as Self
7376    }
7377}
7378
7379impl ReadXdr for ScMetaKind {
7380    #[cfg(feature = "std")]
7381    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7382        r.with_limited_depth(|r| {
7383            let e = i32::read_xdr(r)?;
7384            let v: Self = e.try_into()?;
7385            Ok(v)
7386        })
7387    }
7388}
7389
7390impl WriteXdr for ScMetaKind {
7391    #[cfg(feature = "std")]
7392    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
7393        w.with_limited_depth(|w| {
7394            let i: i32 = (*self).into();
7395            i.write_xdr(w)
7396        })
7397    }
7398}
7399
7400/// ScMetaEntry is an XDR Union defines as:
7401///
7402/// ```text
7403/// union SCMetaEntry switch (SCMetaKind kind)
7404/// {
7405/// case SC_META_V0:
7406///     SCMetaV0 v0;
7407/// };
7408/// ```
7409///
7410// union with discriminant ScMetaKind
7411#[cfg_eval::cfg_eval]
7412#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
7413#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7414#[cfg_attr(
7415    all(feature = "serde", feature = "alloc"),
7416    serde_with::serde_as,
7417    derive(serde::Serialize, serde::Deserialize),
7418    serde(rename_all = "snake_case")
7419)]
7420#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
7421#[allow(clippy::large_enum_variant)]
7422pub enum ScMetaEntry {
7423    ScMetaV0(ScMetaV0),
7424}
7425
7426#[cfg(feature = "alloc")]
7427impl Default for ScMetaEntry {
7428    fn default() -> Self {
7429        Self::ScMetaV0(ScMetaV0::default())
7430    }
7431}
7432
7433impl ScMetaEntry {
7434    pub const VARIANTS: [ScMetaKind; 1] = [ScMetaKind::ScMetaV0];
7435    pub const VARIANTS_STR: [&'static str; 1] = ["ScMetaV0"];
7436
7437    #[must_use]
7438    pub const fn name(&self) -> &'static str {
7439        match self {
7440            Self::ScMetaV0(_) => "ScMetaV0",
7441        }
7442    }
7443
7444    #[must_use]
7445    pub const fn discriminant(&self) -> ScMetaKind {
7446        #[allow(clippy::match_same_arms)]
7447        match self {
7448            Self::ScMetaV0(_) => ScMetaKind::ScMetaV0,
7449        }
7450    }
7451
7452    #[must_use]
7453    pub const fn variants() -> [ScMetaKind; 1] {
7454        Self::VARIANTS
7455    }
7456}
7457
7458impl Name for ScMetaEntry {
7459    #[must_use]
7460    fn name(&self) -> &'static str {
7461        Self::name(self)
7462    }
7463}
7464
7465impl Discriminant<ScMetaKind> for ScMetaEntry {
7466    #[must_use]
7467    fn discriminant(&self) -> ScMetaKind {
7468        Self::discriminant(self)
7469    }
7470}
7471
7472impl Variants<ScMetaKind> for ScMetaEntry {
7473    fn variants() -> slice::Iter<'static, ScMetaKind> {
7474        Self::VARIANTS.iter()
7475    }
7476}
7477
7478impl Union<ScMetaKind> for ScMetaEntry {}
7479
7480impl ReadXdr for ScMetaEntry {
7481    #[cfg(feature = "std")]
7482    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7483        r.with_limited_depth(|r| {
7484            let dv: ScMetaKind = <ScMetaKind as ReadXdr>::read_xdr(r)?;
7485            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
7486            let v = match dv {
7487                ScMetaKind::ScMetaV0 => Self::ScMetaV0(ScMetaV0::read_xdr(r)?),
7488                #[allow(unreachable_patterns)]
7489                _ => return Err(Error::Invalid),
7490            };
7491            Ok(v)
7492        })
7493    }
7494}
7495
7496impl WriteXdr for ScMetaEntry {
7497    #[cfg(feature = "std")]
7498    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
7499        w.with_limited_depth(|w| {
7500            self.discriminant().write_xdr(w)?;
7501            #[allow(clippy::match_same_arms)]
7502            match self {
7503                Self::ScMetaV0(v) => v.write_xdr(w)?,
7504            };
7505            Ok(())
7506        })
7507    }
7508}
7509
7510/// ScSpecDocLimit is an XDR Const defines as:
7511///
7512/// ```text
7513/// const SC_SPEC_DOC_LIMIT = 1024;
7514/// ```
7515///
7516pub const SC_SPEC_DOC_LIMIT: u64 = 1024;
7517
7518/// ScSpecType is an XDR Enum defines as:
7519///
7520/// ```text
7521/// enum SCSpecType
7522/// {
7523///     SC_SPEC_TYPE_VAL = 0,
7524///
7525///     // Types with no parameters.
7526///     SC_SPEC_TYPE_BOOL = 1,
7527///     SC_SPEC_TYPE_VOID = 2,
7528///     SC_SPEC_TYPE_ERROR = 3,
7529///     SC_SPEC_TYPE_U32 = 4,
7530///     SC_SPEC_TYPE_I32 = 5,
7531///     SC_SPEC_TYPE_U64 = 6,
7532///     SC_SPEC_TYPE_I64 = 7,
7533///     SC_SPEC_TYPE_TIMEPOINT = 8,
7534///     SC_SPEC_TYPE_DURATION = 9,
7535///     SC_SPEC_TYPE_U128 = 10,
7536///     SC_SPEC_TYPE_I128 = 11,
7537///     SC_SPEC_TYPE_U256 = 12,
7538///     SC_SPEC_TYPE_I256 = 13,
7539///     SC_SPEC_TYPE_BYTES = 14,
7540///     SC_SPEC_TYPE_STRING = 16,
7541///     SC_SPEC_TYPE_SYMBOL = 17,
7542///     SC_SPEC_TYPE_ADDRESS = 19,
7543///     SC_SPEC_TYPE_MUXED_ADDRESS = 20,
7544///
7545///     // Types with parameters.
7546///     SC_SPEC_TYPE_OPTION = 1000,
7547///     SC_SPEC_TYPE_RESULT = 1001,
7548///     SC_SPEC_TYPE_VEC = 1002,
7549///     SC_SPEC_TYPE_MAP = 1004,
7550///     SC_SPEC_TYPE_TUPLE = 1005,
7551///     SC_SPEC_TYPE_BYTES_N = 1006,
7552///
7553///     // User defined types.
7554///     SC_SPEC_TYPE_UDT = 2000
7555/// };
7556/// ```
7557///
7558// enum
7559#[cfg_attr(feature = "alloc", derive(Default))]
7560#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
7561#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7562#[cfg_attr(
7563    all(feature = "serde", feature = "alloc"),
7564    derive(serde::Serialize, serde::Deserialize),
7565    serde(rename_all = "snake_case")
7566)]
7567#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
7568#[repr(i32)]
7569pub enum ScSpecType {
7570    #[cfg_attr(feature = "alloc", default)]
7571    Val = 0,
7572    Bool = 1,
7573    Void = 2,
7574    Error = 3,
7575    U32 = 4,
7576    I32 = 5,
7577    U64 = 6,
7578    I64 = 7,
7579    Timepoint = 8,
7580    Duration = 9,
7581    U128 = 10,
7582    I128 = 11,
7583    U256 = 12,
7584    I256 = 13,
7585    Bytes = 14,
7586    String = 16,
7587    Symbol = 17,
7588    Address = 19,
7589    MuxedAddress = 20,
7590    Option = 1000,
7591    Result = 1001,
7592    Vec = 1002,
7593    Map = 1004,
7594    Tuple = 1005,
7595    BytesN = 1006,
7596    Udt = 2000,
7597}
7598
7599impl ScSpecType {
7600    pub const VARIANTS: [ScSpecType; 26] = [
7601        ScSpecType::Val,
7602        ScSpecType::Bool,
7603        ScSpecType::Void,
7604        ScSpecType::Error,
7605        ScSpecType::U32,
7606        ScSpecType::I32,
7607        ScSpecType::U64,
7608        ScSpecType::I64,
7609        ScSpecType::Timepoint,
7610        ScSpecType::Duration,
7611        ScSpecType::U128,
7612        ScSpecType::I128,
7613        ScSpecType::U256,
7614        ScSpecType::I256,
7615        ScSpecType::Bytes,
7616        ScSpecType::String,
7617        ScSpecType::Symbol,
7618        ScSpecType::Address,
7619        ScSpecType::MuxedAddress,
7620        ScSpecType::Option,
7621        ScSpecType::Result,
7622        ScSpecType::Vec,
7623        ScSpecType::Map,
7624        ScSpecType::Tuple,
7625        ScSpecType::BytesN,
7626        ScSpecType::Udt,
7627    ];
7628    pub const VARIANTS_STR: [&'static str; 26] = [
7629        "Val",
7630        "Bool",
7631        "Void",
7632        "Error",
7633        "U32",
7634        "I32",
7635        "U64",
7636        "I64",
7637        "Timepoint",
7638        "Duration",
7639        "U128",
7640        "I128",
7641        "U256",
7642        "I256",
7643        "Bytes",
7644        "String",
7645        "Symbol",
7646        "Address",
7647        "MuxedAddress",
7648        "Option",
7649        "Result",
7650        "Vec",
7651        "Map",
7652        "Tuple",
7653        "BytesN",
7654        "Udt",
7655    ];
7656
7657    #[must_use]
7658    pub const fn name(&self) -> &'static str {
7659        match self {
7660            Self::Val => "Val",
7661            Self::Bool => "Bool",
7662            Self::Void => "Void",
7663            Self::Error => "Error",
7664            Self::U32 => "U32",
7665            Self::I32 => "I32",
7666            Self::U64 => "U64",
7667            Self::I64 => "I64",
7668            Self::Timepoint => "Timepoint",
7669            Self::Duration => "Duration",
7670            Self::U128 => "U128",
7671            Self::I128 => "I128",
7672            Self::U256 => "U256",
7673            Self::I256 => "I256",
7674            Self::Bytes => "Bytes",
7675            Self::String => "String",
7676            Self::Symbol => "Symbol",
7677            Self::Address => "Address",
7678            Self::MuxedAddress => "MuxedAddress",
7679            Self::Option => "Option",
7680            Self::Result => "Result",
7681            Self::Vec => "Vec",
7682            Self::Map => "Map",
7683            Self::Tuple => "Tuple",
7684            Self::BytesN => "BytesN",
7685            Self::Udt => "Udt",
7686        }
7687    }
7688
7689    #[must_use]
7690    pub const fn variants() -> [ScSpecType; 26] {
7691        Self::VARIANTS
7692    }
7693}
7694
7695impl Name for ScSpecType {
7696    #[must_use]
7697    fn name(&self) -> &'static str {
7698        Self::name(self)
7699    }
7700}
7701
7702impl Variants<ScSpecType> for ScSpecType {
7703    fn variants() -> slice::Iter<'static, ScSpecType> {
7704        Self::VARIANTS.iter()
7705    }
7706}
7707
7708impl Enum for ScSpecType {}
7709
7710impl fmt::Display for ScSpecType {
7711    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
7712        f.write_str(self.name())
7713    }
7714}
7715
7716impl TryFrom<i32> for ScSpecType {
7717    type Error = Error;
7718
7719    fn try_from(i: i32) -> Result<Self, Error> {
7720        let e = match i {
7721            0 => ScSpecType::Val,
7722            1 => ScSpecType::Bool,
7723            2 => ScSpecType::Void,
7724            3 => ScSpecType::Error,
7725            4 => ScSpecType::U32,
7726            5 => ScSpecType::I32,
7727            6 => ScSpecType::U64,
7728            7 => ScSpecType::I64,
7729            8 => ScSpecType::Timepoint,
7730            9 => ScSpecType::Duration,
7731            10 => ScSpecType::U128,
7732            11 => ScSpecType::I128,
7733            12 => ScSpecType::U256,
7734            13 => ScSpecType::I256,
7735            14 => ScSpecType::Bytes,
7736            16 => ScSpecType::String,
7737            17 => ScSpecType::Symbol,
7738            19 => ScSpecType::Address,
7739            20 => ScSpecType::MuxedAddress,
7740            1000 => ScSpecType::Option,
7741            1001 => ScSpecType::Result,
7742            1002 => ScSpecType::Vec,
7743            1004 => ScSpecType::Map,
7744            1005 => ScSpecType::Tuple,
7745            1006 => ScSpecType::BytesN,
7746            2000 => ScSpecType::Udt,
7747            #[allow(unreachable_patterns)]
7748            _ => return Err(Error::Invalid),
7749        };
7750        Ok(e)
7751    }
7752}
7753
7754impl From<ScSpecType> for i32 {
7755    #[must_use]
7756    fn from(e: ScSpecType) -> Self {
7757        e as Self
7758    }
7759}
7760
7761impl ReadXdr for ScSpecType {
7762    #[cfg(feature = "std")]
7763    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7764        r.with_limited_depth(|r| {
7765            let e = i32::read_xdr(r)?;
7766            let v: Self = e.try_into()?;
7767            Ok(v)
7768        })
7769    }
7770}
7771
7772impl WriteXdr for ScSpecType {
7773    #[cfg(feature = "std")]
7774    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
7775        w.with_limited_depth(|w| {
7776            let i: i32 = (*self).into();
7777            i.write_xdr(w)
7778        })
7779    }
7780}
7781
7782/// ScSpecTypeOption is an XDR Struct defines as:
7783///
7784/// ```text
7785/// struct SCSpecTypeOption
7786/// {
7787///     SCSpecTypeDef valueType;
7788/// };
7789/// ```
7790///
7791#[cfg_attr(feature = "alloc", derive(Default))]
7792#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
7793#[cfg_eval::cfg_eval]
7794#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7795#[cfg_attr(
7796    all(feature = "serde", feature = "alloc"),
7797    serde_with::serde_as,
7798    derive(serde::Serialize, serde::Deserialize),
7799    serde(rename_all = "snake_case")
7800)]
7801#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
7802pub struct ScSpecTypeOption {
7803    pub value_type: Box<ScSpecTypeDef>,
7804}
7805
7806impl ReadXdr for ScSpecTypeOption {
7807    #[cfg(feature = "std")]
7808    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7809        r.with_limited_depth(|r| {
7810            Ok(Self {
7811                value_type: Box::<ScSpecTypeDef>::read_xdr(r)?,
7812            })
7813        })
7814    }
7815}
7816
7817impl WriteXdr for ScSpecTypeOption {
7818    #[cfg(feature = "std")]
7819    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
7820        w.with_limited_depth(|w| {
7821            self.value_type.write_xdr(w)?;
7822            Ok(())
7823        })
7824    }
7825}
7826
7827/// ScSpecTypeResult is an XDR Struct defines as:
7828///
7829/// ```text
7830/// struct SCSpecTypeResult
7831/// {
7832///     SCSpecTypeDef okType;
7833///     SCSpecTypeDef errorType;
7834/// };
7835/// ```
7836///
7837#[cfg_attr(feature = "alloc", derive(Default))]
7838#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
7839#[cfg_eval::cfg_eval]
7840#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7841#[cfg_attr(
7842    all(feature = "serde", feature = "alloc"),
7843    serde_with::serde_as,
7844    derive(serde::Serialize, serde::Deserialize),
7845    serde(rename_all = "snake_case")
7846)]
7847#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
7848pub struct ScSpecTypeResult {
7849    pub ok_type: Box<ScSpecTypeDef>,
7850    pub error_type: Box<ScSpecTypeDef>,
7851}
7852
7853impl ReadXdr for ScSpecTypeResult {
7854    #[cfg(feature = "std")]
7855    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7856        r.with_limited_depth(|r| {
7857            Ok(Self {
7858                ok_type: Box::<ScSpecTypeDef>::read_xdr(r)?,
7859                error_type: Box::<ScSpecTypeDef>::read_xdr(r)?,
7860            })
7861        })
7862    }
7863}
7864
7865impl WriteXdr for ScSpecTypeResult {
7866    #[cfg(feature = "std")]
7867    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
7868        w.with_limited_depth(|w| {
7869            self.ok_type.write_xdr(w)?;
7870            self.error_type.write_xdr(w)?;
7871            Ok(())
7872        })
7873    }
7874}
7875
7876/// ScSpecTypeVec is an XDR Struct defines as:
7877///
7878/// ```text
7879/// struct SCSpecTypeVec
7880/// {
7881///     SCSpecTypeDef elementType;
7882/// };
7883/// ```
7884///
7885#[cfg_attr(feature = "alloc", derive(Default))]
7886#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
7887#[cfg_eval::cfg_eval]
7888#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7889#[cfg_attr(
7890    all(feature = "serde", feature = "alloc"),
7891    serde_with::serde_as,
7892    derive(serde::Serialize, serde::Deserialize),
7893    serde(rename_all = "snake_case")
7894)]
7895#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
7896pub struct ScSpecTypeVec {
7897    pub element_type: Box<ScSpecTypeDef>,
7898}
7899
7900impl ReadXdr for ScSpecTypeVec {
7901    #[cfg(feature = "std")]
7902    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7903        r.with_limited_depth(|r| {
7904            Ok(Self {
7905                element_type: Box::<ScSpecTypeDef>::read_xdr(r)?,
7906            })
7907        })
7908    }
7909}
7910
7911impl WriteXdr for ScSpecTypeVec {
7912    #[cfg(feature = "std")]
7913    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
7914        w.with_limited_depth(|w| {
7915            self.element_type.write_xdr(w)?;
7916            Ok(())
7917        })
7918    }
7919}
7920
7921/// ScSpecTypeMap is an XDR Struct defines as:
7922///
7923/// ```text
7924/// struct SCSpecTypeMap
7925/// {
7926///     SCSpecTypeDef keyType;
7927///     SCSpecTypeDef valueType;
7928/// };
7929/// ```
7930///
7931#[cfg_attr(feature = "alloc", derive(Default))]
7932#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
7933#[cfg_eval::cfg_eval]
7934#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7935#[cfg_attr(
7936    all(feature = "serde", feature = "alloc"),
7937    serde_with::serde_as,
7938    derive(serde::Serialize, serde::Deserialize),
7939    serde(rename_all = "snake_case")
7940)]
7941#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
7942pub struct ScSpecTypeMap {
7943    pub key_type: Box<ScSpecTypeDef>,
7944    pub value_type: Box<ScSpecTypeDef>,
7945}
7946
7947impl ReadXdr for ScSpecTypeMap {
7948    #[cfg(feature = "std")]
7949    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7950        r.with_limited_depth(|r| {
7951            Ok(Self {
7952                key_type: Box::<ScSpecTypeDef>::read_xdr(r)?,
7953                value_type: Box::<ScSpecTypeDef>::read_xdr(r)?,
7954            })
7955        })
7956    }
7957}
7958
7959impl WriteXdr for ScSpecTypeMap {
7960    #[cfg(feature = "std")]
7961    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
7962        w.with_limited_depth(|w| {
7963            self.key_type.write_xdr(w)?;
7964            self.value_type.write_xdr(w)?;
7965            Ok(())
7966        })
7967    }
7968}
7969
7970/// ScSpecTypeTuple is an XDR Struct defines as:
7971///
7972/// ```text
7973/// struct SCSpecTypeTuple
7974/// {
7975///     SCSpecTypeDef valueTypes<12>;
7976/// };
7977/// ```
7978///
7979#[cfg_attr(feature = "alloc", derive(Default))]
7980#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
7981#[cfg_eval::cfg_eval]
7982#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
7983#[cfg_attr(
7984    all(feature = "serde", feature = "alloc"),
7985    serde_with::serde_as,
7986    derive(serde::Serialize, serde::Deserialize),
7987    serde(rename_all = "snake_case")
7988)]
7989#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
7990pub struct ScSpecTypeTuple {
7991    pub value_types: VecM<ScSpecTypeDef, 12>,
7992}
7993
7994impl ReadXdr for ScSpecTypeTuple {
7995    #[cfg(feature = "std")]
7996    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
7997        r.with_limited_depth(|r| {
7998            Ok(Self {
7999                value_types: VecM::<ScSpecTypeDef, 12>::read_xdr(r)?,
8000            })
8001        })
8002    }
8003}
8004
8005impl WriteXdr for ScSpecTypeTuple {
8006    #[cfg(feature = "std")]
8007    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8008        w.with_limited_depth(|w| {
8009            self.value_types.write_xdr(w)?;
8010            Ok(())
8011        })
8012    }
8013}
8014
8015/// ScSpecTypeBytesN is an XDR Struct defines as:
8016///
8017/// ```text
8018/// struct SCSpecTypeBytesN
8019/// {
8020///     uint32 n;
8021/// };
8022/// ```
8023///
8024#[cfg_attr(feature = "alloc", derive(Default))]
8025#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8026#[cfg_eval::cfg_eval]
8027#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8028#[cfg_attr(
8029    all(feature = "serde", feature = "alloc"),
8030    serde_with::serde_as,
8031    derive(serde::Serialize, serde::Deserialize),
8032    serde(rename_all = "snake_case")
8033)]
8034#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8035pub struct ScSpecTypeBytesN {
8036    pub n: u32,
8037}
8038
8039impl ReadXdr for ScSpecTypeBytesN {
8040    #[cfg(feature = "std")]
8041    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
8042        r.with_limited_depth(|r| {
8043            Ok(Self {
8044                n: u32::read_xdr(r)?,
8045            })
8046        })
8047    }
8048}
8049
8050impl WriteXdr for ScSpecTypeBytesN {
8051    #[cfg(feature = "std")]
8052    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8053        w.with_limited_depth(|w| {
8054            self.n.write_xdr(w)?;
8055            Ok(())
8056        })
8057    }
8058}
8059
8060/// ScSpecTypeUdt is an XDR Struct defines as:
8061///
8062/// ```text
8063/// struct SCSpecTypeUDT
8064/// {
8065///     string name<60>;
8066/// };
8067/// ```
8068///
8069#[cfg_attr(feature = "alloc", derive(Default))]
8070#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8071#[cfg_eval::cfg_eval]
8072#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8073#[cfg_attr(
8074    all(feature = "serde", feature = "alloc"),
8075    serde_with::serde_as,
8076    derive(serde::Serialize, serde::Deserialize),
8077    serde(rename_all = "snake_case")
8078)]
8079#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8080pub struct ScSpecTypeUdt {
8081    pub name: StringM<60>,
8082}
8083
8084impl ReadXdr for ScSpecTypeUdt {
8085    #[cfg(feature = "std")]
8086    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
8087        r.with_limited_depth(|r| {
8088            Ok(Self {
8089                name: StringM::<60>::read_xdr(r)?,
8090            })
8091        })
8092    }
8093}
8094
8095impl WriteXdr for ScSpecTypeUdt {
8096    #[cfg(feature = "std")]
8097    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8098        w.with_limited_depth(|w| {
8099            self.name.write_xdr(w)?;
8100            Ok(())
8101        })
8102    }
8103}
8104
8105/// ScSpecTypeDef is an XDR Union defines as:
8106///
8107/// ```text
8108/// union SCSpecTypeDef switch (SCSpecType type)
8109/// {
8110/// case SC_SPEC_TYPE_VAL:
8111/// case SC_SPEC_TYPE_BOOL:
8112/// case SC_SPEC_TYPE_VOID:
8113/// case SC_SPEC_TYPE_ERROR:
8114/// case SC_SPEC_TYPE_U32:
8115/// case SC_SPEC_TYPE_I32:
8116/// case SC_SPEC_TYPE_U64:
8117/// case SC_SPEC_TYPE_I64:
8118/// case SC_SPEC_TYPE_TIMEPOINT:
8119/// case SC_SPEC_TYPE_DURATION:
8120/// case SC_SPEC_TYPE_U128:
8121/// case SC_SPEC_TYPE_I128:
8122/// case SC_SPEC_TYPE_U256:
8123/// case SC_SPEC_TYPE_I256:
8124/// case SC_SPEC_TYPE_BYTES:
8125/// case SC_SPEC_TYPE_STRING:
8126/// case SC_SPEC_TYPE_SYMBOL:
8127/// case SC_SPEC_TYPE_ADDRESS:
8128/// case SC_SPEC_TYPE_MUXED_ADDRESS:
8129///     void;
8130/// case SC_SPEC_TYPE_OPTION:
8131///     SCSpecTypeOption option;
8132/// case SC_SPEC_TYPE_RESULT:
8133///     SCSpecTypeResult result;
8134/// case SC_SPEC_TYPE_VEC:
8135///     SCSpecTypeVec vec;
8136/// case SC_SPEC_TYPE_MAP:
8137///     SCSpecTypeMap map;
8138/// case SC_SPEC_TYPE_TUPLE:
8139///     SCSpecTypeTuple tuple;
8140/// case SC_SPEC_TYPE_BYTES_N:
8141///     SCSpecTypeBytesN bytesN;
8142/// case SC_SPEC_TYPE_UDT:
8143///     SCSpecTypeUDT udt;
8144/// };
8145/// ```
8146///
8147// union with discriminant ScSpecType
8148#[cfg_eval::cfg_eval]
8149#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8150#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8151#[cfg_attr(
8152    all(feature = "serde", feature = "alloc"),
8153    serde_with::serde_as,
8154    derive(serde::Serialize, serde::Deserialize),
8155    serde(rename_all = "snake_case")
8156)]
8157#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8158#[allow(clippy::large_enum_variant)]
8159pub enum ScSpecTypeDef {
8160    Val,
8161    Bool,
8162    Void,
8163    Error,
8164    U32,
8165    I32,
8166    U64,
8167    I64,
8168    Timepoint,
8169    Duration,
8170    U128,
8171    I128,
8172    U256,
8173    I256,
8174    Bytes,
8175    String,
8176    Symbol,
8177    Address,
8178    MuxedAddress,
8179    Option(Box<ScSpecTypeOption>),
8180    Result(Box<ScSpecTypeResult>),
8181    Vec(Box<ScSpecTypeVec>),
8182    Map(Box<ScSpecTypeMap>),
8183    Tuple(Box<ScSpecTypeTuple>),
8184    BytesN(ScSpecTypeBytesN),
8185    Udt(ScSpecTypeUdt),
8186}
8187
8188#[cfg(feature = "alloc")]
8189impl Default for ScSpecTypeDef {
8190    fn default() -> Self {
8191        Self::Val
8192    }
8193}
8194
8195impl ScSpecTypeDef {
8196    pub const VARIANTS: [ScSpecType; 26] = [
8197        ScSpecType::Val,
8198        ScSpecType::Bool,
8199        ScSpecType::Void,
8200        ScSpecType::Error,
8201        ScSpecType::U32,
8202        ScSpecType::I32,
8203        ScSpecType::U64,
8204        ScSpecType::I64,
8205        ScSpecType::Timepoint,
8206        ScSpecType::Duration,
8207        ScSpecType::U128,
8208        ScSpecType::I128,
8209        ScSpecType::U256,
8210        ScSpecType::I256,
8211        ScSpecType::Bytes,
8212        ScSpecType::String,
8213        ScSpecType::Symbol,
8214        ScSpecType::Address,
8215        ScSpecType::MuxedAddress,
8216        ScSpecType::Option,
8217        ScSpecType::Result,
8218        ScSpecType::Vec,
8219        ScSpecType::Map,
8220        ScSpecType::Tuple,
8221        ScSpecType::BytesN,
8222        ScSpecType::Udt,
8223    ];
8224    pub const VARIANTS_STR: [&'static str; 26] = [
8225        "Val",
8226        "Bool",
8227        "Void",
8228        "Error",
8229        "U32",
8230        "I32",
8231        "U64",
8232        "I64",
8233        "Timepoint",
8234        "Duration",
8235        "U128",
8236        "I128",
8237        "U256",
8238        "I256",
8239        "Bytes",
8240        "String",
8241        "Symbol",
8242        "Address",
8243        "MuxedAddress",
8244        "Option",
8245        "Result",
8246        "Vec",
8247        "Map",
8248        "Tuple",
8249        "BytesN",
8250        "Udt",
8251    ];
8252
8253    #[must_use]
8254    pub const fn name(&self) -> &'static str {
8255        match self {
8256            Self::Val => "Val",
8257            Self::Bool => "Bool",
8258            Self::Void => "Void",
8259            Self::Error => "Error",
8260            Self::U32 => "U32",
8261            Self::I32 => "I32",
8262            Self::U64 => "U64",
8263            Self::I64 => "I64",
8264            Self::Timepoint => "Timepoint",
8265            Self::Duration => "Duration",
8266            Self::U128 => "U128",
8267            Self::I128 => "I128",
8268            Self::U256 => "U256",
8269            Self::I256 => "I256",
8270            Self::Bytes => "Bytes",
8271            Self::String => "String",
8272            Self::Symbol => "Symbol",
8273            Self::Address => "Address",
8274            Self::MuxedAddress => "MuxedAddress",
8275            Self::Option(_) => "Option",
8276            Self::Result(_) => "Result",
8277            Self::Vec(_) => "Vec",
8278            Self::Map(_) => "Map",
8279            Self::Tuple(_) => "Tuple",
8280            Self::BytesN(_) => "BytesN",
8281            Self::Udt(_) => "Udt",
8282        }
8283    }
8284
8285    #[must_use]
8286    pub const fn discriminant(&self) -> ScSpecType {
8287        #[allow(clippy::match_same_arms)]
8288        match self {
8289            Self::Val => ScSpecType::Val,
8290            Self::Bool => ScSpecType::Bool,
8291            Self::Void => ScSpecType::Void,
8292            Self::Error => ScSpecType::Error,
8293            Self::U32 => ScSpecType::U32,
8294            Self::I32 => ScSpecType::I32,
8295            Self::U64 => ScSpecType::U64,
8296            Self::I64 => ScSpecType::I64,
8297            Self::Timepoint => ScSpecType::Timepoint,
8298            Self::Duration => ScSpecType::Duration,
8299            Self::U128 => ScSpecType::U128,
8300            Self::I128 => ScSpecType::I128,
8301            Self::U256 => ScSpecType::U256,
8302            Self::I256 => ScSpecType::I256,
8303            Self::Bytes => ScSpecType::Bytes,
8304            Self::String => ScSpecType::String,
8305            Self::Symbol => ScSpecType::Symbol,
8306            Self::Address => ScSpecType::Address,
8307            Self::MuxedAddress => ScSpecType::MuxedAddress,
8308            Self::Option(_) => ScSpecType::Option,
8309            Self::Result(_) => ScSpecType::Result,
8310            Self::Vec(_) => ScSpecType::Vec,
8311            Self::Map(_) => ScSpecType::Map,
8312            Self::Tuple(_) => ScSpecType::Tuple,
8313            Self::BytesN(_) => ScSpecType::BytesN,
8314            Self::Udt(_) => ScSpecType::Udt,
8315        }
8316    }
8317
8318    #[must_use]
8319    pub const fn variants() -> [ScSpecType; 26] {
8320        Self::VARIANTS
8321    }
8322}
8323
8324impl Name for ScSpecTypeDef {
8325    #[must_use]
8326    fn name(&self) -> &'static str {
8327        Self::name(self)
8328    }
8329}
8330
8331impl Discriminant<ScSpecType> for ScSpecTypeDef {
8332    #[must_use]
8333    fn discriminant(&self) -> ScSpecType {
8334        Self::discriminant(self)
8335    }
8336}
8337
8338impl Variants<ScSpecType> for ScSpecTypeDef {
8339    fn variants() -> slice::Iter<'static, ScSpecType> {
8340        Self::VARIANTS.iter()
8341    }
8342}
8343
8344impl Union<ScSpecType> for ScSpecTypeDef {}
8345
8346impl ReadXdr for ScSpecTypeDef {
8347    #[cfg(feature = "std")]
8348    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
8349        r.with_limited_depth(|r| {
8350            let dv: ScSpecType = <ScSpecType as ReadXdr>::read_xdr(r)?;
8351            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
8352            let v = match dv {
8353                ScSpecType::Val => Self::Val,
8354                ScSpecType::Bool => Self::Bool,
8355                ScSpecType::Void => Self::Void,
8356                ScSpecType::Error => Self::Error,
8357                ScSpecType::U32 => Self::U32,
8358                ScSpecType::I32 => Self::I32,
8359                ScSpecType::U64 => Self::U64,
8360                ScSpecType::I64 => Self::I64,
8361                ScSpecType::Timepoint => Self::Timepoint,
8362                ScSpecType::Duration => Self::Duration,
8363                ScSpecType::U128 => Self::U128,
8364                ScSpecType::I128 => Self::I128,
8365                ScSpecType::U256 => Self::U256,
8366                ScSpecType::I256 => Self::I256,
8367                ScSpecType::Bytes => Self::Bytes,
8368                ScSpecType::String => Self::String,
8369                ScSpecType::Symbol => Self::Symbol,
8370                ScSpecType::Address => Self::Address,
8371                ScSpecType::MuxedAddress => Self::MuxedAddress,
8372                ScSpecType::Option => Self::Option(Box::<ScSpecTypeOption>::read_xdr(r)?),
8373                ScSpecType::Result => Self::Result(Box::<ScSpecTypeResult>::read_xdr(r)?),
8374                ScSpecType::Vec => Self::Vec(Box::<ScSpecTypeVec>::read_xdr(r)?),
8375                ScSpecType::Map => Self::Map(Box::<ScSpecTypeMap>::read_xdr(r)?),
8376                ScSpecType::Tuple => Self::Tuple(Box::<ScSpecTypeTuple>::read_xdr(r)?),
8377                ScSpecType::BytesN => Self::BytesN(ScSpecTypeBytesN::read_xdr(r)?),
8378                ScSpecType::Udt => Self::Udt(ScSpecTypeUdt::read_xdr(r)?),
8379                #[allow(unreachable_patterns)]
8380                _ => return Err(Error::Invalid),
8381            };
8382            Ok(v)
8383        })
8384    }
8385}
8386
8387impl WriteXdr for ScSpecTypeDef {
8388    #[cfg(feature = "std")]
8389    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8390        w.with_limited_depth(|w| {
8391            self.discriminant().write_xdr(w)?;
8392            #[allow(clippy::match_same_arms)]
8393            match self {
8394                Self::Val => ().write_xdr(w)?,
8395                Self::Bool => ().write_xdr(w)?,
8396                Self::Void => ().write_xdr(w)?,
8397                Self::Error => ().write_xdr(w)?,
8398                Self::U32 => ().write_xdr(w)?,
8399                Self::I32 => ().write_xdr(w)?,
8400                Self::U64 => ().write_xdr(w)?,
8401                Self::I64 => ().write_xdr(w)?,
8402                Self::Timepoint => ().write_xdr(w)?,
8403                Self::Duration => ().write_xdr(w)?,
8404                Self::U128 => ().write_xdr(w)?,
8405                Self::I128 => ().write_xdr(w)?,
8406                Self::U256 => ().write_xdr(w)?,
8407                Self::I256 => ().write_xdr(w)?,
8408                Self::Bytes => ().write_xdr(w)?,
8409                Self::String => ().write_xdr(w)?,
8410                Self::Symbol => ().write_xdr(w)?,
8411                Self::Address => ().write_xdr(w)?,
8412                Self::MuxedAddress => ().write_xdr(w)?,
8413                Self::Option(v) => v.write_xdr(w)?,
8414                Self::Result(v) => v.write_xdr(w)?,
8415                Self::Vec(v) => v.write_xdr(w)?,
8416                Self::Map(v) => v.write_xdr(w)?,
8417                Self::Tuple(v) => v.write_xdr(w)?,
8418                Self::BytesN(v) => v.write_xdr(w)?,
8419                Self::Udt(v) => v.write_xdr(w)?,
8420            };
8421            Ok(())
8422        })
8423    }
8424}
8425
8426/// ScSpecUdtStructFieldV0 is an XDR Struct defines as:
8427///
8428/// ```text
8429/// struct SCSpecUDTStructFieldV0
8430/// {
8431///     string doc<SC_SPEC_DOC_LIMIT>;
8432///     string name<30>;
8433///     SCSpecTypeDef type;
8434/// };
8435/// ```
8436///
8437#[cfg_attr(feature = "alloc", derive(Default))]
8438#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8439#[cfg_eval::cfg_eval]
8440#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8441#[cfg_attr(
8442    all(feature = "serde", feature = "alloc"),
8443    serde_with::serde_as,
8444    derive(serde::Serialize, serde::Deserialize),
8445    serde(rename_all = "snake_case")
8446)]
8447#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8448pub struct ScSpecUdtStructFieldV0 {
8449    pub doc: StringM<1024>,
8450    pub name: StringM<30>,
8451    pub type_: ScSpecTypeDef,
8452}
8453
8454impl ReadXdr for ScSpecUdtStructFieldV0 {
8455    #[cfg(feature = "std")]
8456    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
8457        r.with_limited_depth(|r| {
8458            Ok(Self {
8459                doc: StringM::<1024>::read_xdr(r)?,
8460                name: StringM::<30>::read_xdr(r)?,
8461                type_: ScSpecTypeDef::read_xdr(r)?,
8462            })
8463        })
8464    }
8465}
8466
8467impl WriteXdr for ScSpecUdtStructFieldV0 {
8468    #[cfg(feature = "std")]
8469    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8470        w.with_limited_depth(|w| {
8471            self.doc.write_xdr(w)?;
8472            self.name.write_xdr(w)?;
8473            self.type_.write_xdr(w)?;
8474            Ok(())
8475        })
8476    }
8477}
8478
8479/// ScSpecUdtStructV0 is an XDR Struct defines as:
8480///
8481/// ```text
8482/// struct SCSpecUDTStructV0
8483/// {
8484///     string doc<SC_SPEC_DOC_LIMIT>;
8485///     string lib<80>;
8486///     string name<60>;
8487///     SCSpecUDTStructFieldV0 fields<40>;
8488/// };
8489/// ```
8490///
8491#[cfg_attr(feature = "alloc", derive(Default))]
8492#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8493#[cfg_eval::cfg_eval]
8494#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8495#[cfg_attr(
8496    all(feature = "serde", feature = "alloc"),
8497    serde_with::serde_as,
8498    derive(serde::Serialize, serde::Deserialize),
8499    serde(rename_all = "snake_case")
8500)]
8501#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8502pub struct ScSpecUdtStructV0 {
8503    pub doc: StringM<1024>,
8504    pub lib: StringM<80>,
8505    pub name: StringM<60>,
8506    pub fields: VecM<ScSpecUdtStructFieldV0, 40>,
8507}
8508
8509impl ReadXdr for ScSpecUdtStructV0 {
8510    #[cfg(feature = "std")]
8511    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
8512        r.with_limited_depth(|r| {
8513            Ok(Self {
8514                doc: StringM::<1024>::read_xdr(r)?,
8515                lib: StringM::<80>::read_xdr(r)?,
8516                name: StringM::<60>::read_xdr(r)?,
8517                fields: VecM::<ScSpecUdtStructFieldV0, 40>::read_xdr(r)?,
8518            })
8519        })
8520    }
8521}
8522
8523impl WriteXdr for ScSpecUdtStructV0 {
8524    #[cfg(feature = "std")]
8525    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8526        w.with_limited_depth(|w| {
8527            self.doc.write_xdr(w)?;
8528            self.lib.write_xdr(w)?;
8529            self.name.write_xdr(w)?;
8530            self.fields.write_xdr(w)?;
8531            Ok(())
8532        })
8533    }
8534}
8535
8536/// ScSpecUdtUnionCaseVoidV0 is an XDR Struct defines as:
8537///
8538/// ```text
8539/// struct SCSpecUDTUnionCaseVoidV0
8540/// {
8541///     string doc<SC_SPEC_DOC_LIMIT>;
8542///     string name<60>;
8543/// };
8544/// ```
8545///
8546#[cfg_attr(feature = "alloc", derive(Default))]
8547#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8548#[cfg_eval::cfg_eval]
8549#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8550#[cfg_attr(
8551    all(feature = "serde", feature = "alloc"),
8552    serde_with::serde_as,
8553    derive(serde::Serialize, serde::Deserialize),
8554    serde(rename_all = "snake_case")
8555)]
8556#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8557pub struct ScSpecUdtUnionCaseVoidV0 {
8558    pub doc: StringM<1024>,
8559    pub name: StringM<60>,
8560}
8561
8562impl ReadXdr for ScSpecUdtUnionCaseVoidV0 {
8563    #[cfg(feature = "std")]
8564    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
8565        r.with_limited_depth(|r| {
8566            Ok(Self {
8567                doc: StringM::<1024>::read_xdr(r)?,
8568                name: StringM::<60>::read_xdr(r)?,
8569            })
8570        })
8571    }
8572}
8573
8574impl WriteXdr for ScSpecUdtUnionCaseVoidV0 {
8575    #[cfg(feature = "std")]
8576    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8577        w.with_limited_depth(|w| {
8578            self.doc.write_xdr(w)?;
8579            self.name.write_xdr(w)?;
8580            Ok(())
8581        })
8582    }
8583}
8584
8585/// ScSpecUdtUnionCaseTupleV0 is an XDR Struct defines as:
8586///
8587/// ```text
8588/// struct SCSpecUDTUnionCaseTupleV0
8589/// {
8590///     string doc<SC_SPEC_DOC_LIMIT>;
8591///     string name<60>;
8592///     SCSpecTypeDef type<12>;
8593/// };
8594/// ```
8595///
8596#[cfg_attr(feature = "alloc", derive(Default))]
8597#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8598#[cfg_eval::cfg_eval]
8599#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8600#[cfg_attr(
8601    all(feature = "serde", feature = "alloc"),
8602    serde_with::serde_as,
8603    derive(serde::Serialize, serde::Deserialize),
8604    serde(rename_all = "snake_case")
8605)]
8606#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8607pub struct ScSpecUdtUnionCaseTupleV0 {
8608    pub doc: StringM<1024>,
8609    pub name: StringM<60>,
8610    pub type_: VecM<ScSpecTypeDef, 12>,
8611}
8612
8613impl ReadXdr for ScSpecUdtUnionCaseTupleV0 {
8614    #[cfg(feature = "std")]
8615    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
8616        r.with_limited_depth(|r| {
8617            Ok(Self {
8618                doc: StringM::<1024>::read_xdr(r)?,
8619                name: StringM::<60>::read_xdr(r)?,
8620                type_: VecM::<ScSpecTypeDef, 12>::read_xdr(r)?,
8621            })
8622        })
8623    }
8624}
8625
8626impl WriteXdr for ScSpecUdtUnionCaseTupleV0 {
8627    #[cfg(feature = "std")]
8628    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8629        w.with_limited_depth(|w| {
8630            self.doc.write_xdr(w)?;
8631            self.name.write_xdr(w)?;
8632            self.type_.write_xdr(w)?;
8633            Ok(())
8634        })
8635    }
8636}
8637
8638/// ScSpecUdtUnionCaseV0Kind is an XDR Enum defines as:
8639///
8640/// ```text
8641/// enum SCSpecUDTUnionCaseV0Kind
8642/// {
8643///     SC_SPEC_UDT_UNION_CASE_VOID_V0 = 0,
8644///     SC_SPEC_UDT_UNION_CASE_TUPLE_V0 = 1
8645/// };
8646/// ```
8647///
8648// enum
8649#[cfg_attr(feature = "alloc", derive(Default))]
8650#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8651#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8652#[cfg_attr(
8653    all(feature = "serde", feature = "alloc"),
8654    derive(serde::Serialize, serde::Deserialize),
8655    serde(rename_all = "snake_case")
8656)]
8657#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8658#[repr(i32)]
8659pub enum ScSpecUdtUnionCaseV0Kind {
8660    #[cfg_attr(feature = "alloc", default)]
8661    VoidV0 = 0,
8662    TupleV0 = 1,
8663}
8664
8665impl ScSpecUdtUnionCaseV0Kind {
8666    pub const VARIANTS: [ScSpecUdtUnionCaseV0Kind; 2] = [
8667        ScSpecUdtUnionCaseV0Kind::VoidV0,
8668        ScSpecUdtUnionCaseV0Kind::TupleV0,
8669    ];
8670    pub const VARIANTS_STR: [&'static str; 2] = ["VoidV0", "TupleV0"];
8671
8672    #[must_use]
8673    pub const fn name(&self) -> &'static str {
8674        match self {
8675            Self::VoidV0 => "VoidV0",
8676            Self::TupleV0 => "TupleV0",
8677        }
8678    }
8679
8680    #[must_use]
8681    pub const fn variants() -> [ScSpecUdtUnionCaseV0Kind; 2] {
8682        Self::VARIANTS
8683    }
8684}
8685
8686impl Name for ScSpecUdtUnionCaseV0Kind {
8687    #[must_use]
8688    fn name(&self) -> &'static str {
8689        Self::name(self)
8690    }
8691}
8692
8693impl Variants<ScSpecUdtUnionCaseV0Kind> for ScSpecUdtUnionCaseV0Kind {
8694    fn variants() -> slice::Iter<'static, ScSpecUdtUnionCaseV0Kind> {
8695        Self::VARIANTS.iter()
8696    }
8697}
8698
8699impl Enum for ScSpecUdtUnionCaseV0Kind {}
8700
8701impl fmt::Display for ScSpecUdtUnionCaseV0Kind {
8702    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
8703        f.write_str(self.name())
8704    }
8705}
8706
8707impl TryFrom<i32> for ScSpecUdtUnionCaseV0Kind {
8708    type Error = Error;
8709
8710    fn try_from(i: i32) -> Result<Self, Error> {
8711        let e = match i {
8712            0 => ScSpecUdtUnionCaseV0Kind::VoidV0,
8713            1 => ScSpecUdtUnionCaseV0Kind::TupleV0,
8714            #[allow(unreachable_patterns)]
8715            _ => return Err(Error::Invalid),
8716        };
8717        Ok(e)
8718    }
8719}
8720
8721impl From<ScSpecUdtUnionCaseV0Kind> for i32 {
8722    #[must_use]
8723    fn from(e: ScSpecUdtUnionCaseV0Kind) -> Self {
8724        e as Self
8725    }
8726}
8727
8728impl ReadXdr for ScSpecUdtUnionCaseV0Kind {
8729    #[cfg(feature = "std")]
8730    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
8731        r.with_limited_depth(|r| {
8732            let e = i32::read_xdr(r)?;
8733            let v: Self = e.try_into()?;
8734            Ok(v)
8735        })
8736    }
8737}
8738
8739impl WriteXdr for ScSpecUdtUnionCaseV0Kind {
8740    #[cfg(feature = "std")]
8741    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8742        w.with_limited_depth(|w| {
8743            let i: i32 = (*self).into();
8744            i.write_xdr(w)
8745        })
8746    }
8747}
8748
8749/// ScSpecUdtUnionCaseV0 is an XDR Union defines as:
8750///
8751/// ```text
8752/// union SCSpecUDTUnionCaseV0 switch (SCSpecUDTUnionCaseV0Kind kind)
8753/// {
8754/// case SC_SPEC_UDT_UNION_CASE_VOID_V0:
8755///     SCSpecUDTUnionCaseVoidV0 voidCase;
8756/// case SC_SPEC_UDT_UNION_CASE_TUPLE_V0:
8757///     SCSpecUDTUnionCaseTupleV0 tupleCase;
8758/// };
8759/// ```
8760///
8761// union with discriminant ScSpecUdtUnionCaseV0Kind
8762#[cfg_eval::cfg_eval]
8763#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8764#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8765#[cfg_attr(
8766    all(feature = "serde", feature = "alloc"),
8767    serde_with::serde_as,
8768    derive(serde::Serialize, serde::Deserialize),
8769    serde(rename_all = "snake_case")
8770)]
8771#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8772#[allow(clippy::large_enum_variant)]
8773pub enum ScSpecUdtUnionCaseV0 {
8774    VoidV0(ScSpecUdtUnionCaseVoidV0),
8775    TupleV0(ScSpecUdtUnionCaseTupleV0),
8776}
8777
8778#[cfg(feature = "alloc")]
8779impl Default for ScSpecUdtUnionCaseV0 {
8780    fn default() -> Self {
8781        Self::VoidV0(ScSpecUdtUnionCaseVoidV0::default())
8782    }
8783}
8784
8785impl ScSpecUdtUnionCaseV0 {
8786    pub const VARIANTS: [ScSpecUdtUnionCaseV0Kind; 2] = [
8787        ScSpecUdtUnionCaseV0Kind::VoidV0,
8788        ScSpecUdtUnionCaseV0Kind::TupleV0,
8789    ];
8790    pub const VARIANTS_STR: [&'static str; 2] = ["VoidV0", "TupleV0"];
8791
8792    #[must_use]
8793    pub const fn name(&self) -> &'static str {
8794        match self {
8795            Self::VoidV0(_) => "VoidV0",
8796            Self::TupleV0(_) => "TupleV0",
8797        }
8798    }
8799
8800    #[must_use]
8801    pub const fn discriminant(&self) -> ScSpecUdtUnionCaseV0Kind {
8802        #[allow(clippy::match_same_arms)]
8803        match self {
8804            Self::VoidV0(_) => ScSpecUdtUnionCaseV0Kind::VoidV0,
8805            Self::TupleV0(_) => ScSpecUdtUnionCaseV0Kind::TupleV0,
8806        }
8807    }
8808
8809    #[must_use]
8810    pub const fn variants() -> [ScSpecUdtUnionCaseV0Kind; 2] {
8811        Self::VARIANTS
8812    }
8813}
8814
8815impl Name for ScSpecUdtUnionCaseV0 {
8816    #[must_use]
8817    fn name(&self) -> &'static str {
8818        Self::name(self)
8819    }
8820}
8821
8822impl Discriminant<ScSpecUdtUnionCaseV0Kind> for ScSpecUdtUnionCaseV0 {
8823    #[must_use]
8824    fn discriminant(&self) -> ScSpecUdtUnionCaseV0Kind {
8825        Self::discriminant(self)
8826    }
8827}
8828
8829impl Variants<ScSpecUdtUnionCaseV0Kind> for ScSpecUdtUnionCaseV0 {
8830    fn variants() -> slice::Iter<'static, ScSpecUdtUnionCaseV0Kind> {
8831        Self::VARIANTS.iter()
8832    }
8833}
8834
8835impl Union<ScSpecUdtUnionCaseV0Kind> for ScSpecUdtUnionCaseV0 {}
8836
8837impl ReadXdr for ScSpecUdtUnionCaseV0 {
8838    #[cfg(feature = "std")]
8839    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
8840        r.with_limited_depth(|r| {
8841            let dv: ScSpecUdtUnionCaseV0Kind = <ScSpecUdtUnionCaseV0Kind as ReadXdr>::read_xdr(r)?;
8842            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
8843            let v = match dv {
8844                ScSpecUdtUnionCaseV0Kind::VoidV0 => {
8845                    Self::VoidV0(ScSpecUdtUnionCaseVoidV0::read_xdr(r)?)
8846                }
8847                ScSpecUdtUnionCaseV0Kind::TupleV0 => {
8848                    Self::TupleV0(ScSpecUdtUnionCaseTupleV0::read_xdr(r)?)
8849                }
8850                #[allow(unreachable_patterns)]
8851                _ => return Err(Error::Invalid),
8852            };
8853            Ok(v)
8854        })
8855    }
8856}
8857
8858impl WriteXdr for ScSpecUdtUnionCaseV0 {
8859    #[cfg(feature = "std")]
8860    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8861        w.with_limited_depth(|w| {
8862            self.discriminant().write_xdr(w)?;
8863            #[allow(clippy::match_same_arms)]
8864            match self {
8865                Self::VoidV0(v) => v.write_xdr(w)?,
8866                Self::TupleV0(v) => v.write_xdr(w)?,
8867            };
8868            Ok(())
8869        })
8870    }
8871}
8872
8873/// ScSpecUdtUnionV0 is an XDR Struct defines as:
8874///
8875/// ```text
8876/// struct SCSpecUDTUnionV0
8877/// {
8878///     string doc<SC_SPEC_DOC_LIMIT>;
8879///     string lib<80>;
8880///     string name<60>;
8881///     SCSpecUDTUnionCaseV0 cases<50>;
8882/// };
8883/// ```
8884///
8885#[cfg_attr(feature = "alloc", derive(Default))]
8886#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8887#[cfg_eval::cfg_eval]
8888#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8889#[cfg_attr(
8890    all(feature = "serde", feature = "alloc"),
8891    serde_with::serde_as,
8892    derive(serde::Serialize, serde::Deserialize),
8893    serde(rename_all = "snake_case")
8894)]
8895#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8896pub struct ScSpecUdtUnionV0 {
8897    pub doc: StringM<1024>,
8898    pub lib: StringM<80>,
8899    pub name: StringM<60>,
8900    pub cases: VecM<ScSpecUdtUnionCaseV0, 50>,
8901}
8902
8903impl ReadXdr for ScSpecUdtUnionV0 {
8904    #[cfg(feature = "std")]
8905    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
8906        r.with_limited_depth(|r| {
8907            Ok(Self {
8908                doc: StringM::<1024>::read_xdr(r)?,
8909                lib: StringM::<80>::read_xdr(r)?,
8910                name: StringM::<60>::read_xdr(r)?,
8911                cases: VecM::<ScSpecUdtUnionCaseV0, 50>::read_xdr(r)?,
8912            })
8913        })
8914    }
8915}
8916
8917impl WriteXdr for ScSpecUdtUnionV0 {
8918    #[cfg(feature = "std")]
8919    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8920        w.with_limited_depth(|w| {
8921            self.doc.write_xdr(w)?;
8922            self.lib.write_xdr(w)?;
8923            self.name.write_xdr(w)?;
8924            self.cases.write_xdr(w)?;
8925            Ok(())
8926        })
8927    }
8928}
8929
8930/// ScSpecUdtEnumCaseV0 is an XDR Struct defines as:
8931///
8932/// ```text
8933/// struct SCSpecUDTEnumCaseV0
8934/// {
8935///     string doc<SC_SPEC_DOC_LIMIT>;
8936///     string name<60>;
8937///     uint32 value;
8938/// };
8939/// ```
8940///
8941#[cfg_attr(feature = "alloc", derive(Default))]
8942#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8943#[cfg_eval::cfg_eval]
8944#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8945#[cfg_attr(
8946    all(feature = "serde", feature = "alloc"),
8947    serde_with::serde_as,
8948    derive(serde::Serialize, serde::Deserialize),
8949    serde(rename_all = "snake_case")
8950)]
8951#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8952pub struct ScSpecUdtEnumCaseV0 {
8953    pub doc: StringM<1024>,
8954    pub name: StringM<60>,
8955    pub value: u32,
8956}
8957
8958impl ReadXdr for ScSpecUdtEnumCaseV0 {
8959    #[cfg(feature = "std")]
8960    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
8961        r.with_limited_depth(|r| {
8962            Ok(Self {
8963                doc: StringM::<1024>::read_xdr(r)?,
8964                name: StringM::<60>::read_xdr(r)?,
8965                value: u32::read_xdr(r)?,
8966            })
8967        })
8968    }
8969}
8970
8971impl WriteXdr for ScSpecUdtEnumCaseV0 {
8972    #[cfg(feature = "std")]
8973    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
8974        w.with_limited_depth(|w| {
8975            self.doc.write_xdr(w)?;
8976            self.name.write_xdr(w)?;
8977            self.value.write_xdr(w)?;
8978            Ok(())
8979        })
8980    }
8981}
8982
8983/// ScSpecUdtEnumV0 is an XDR Struct defines as:
8984///
8985/// ```text
8986/// struct SCSpecUDTEnumV0
8987/// {
8988///     string doc<SC_SPEC_DOC_LIMIT>;
8989///     string lib<80>;
8990///     string name<60>;
8991///     SCSpecUDTEnumCaseV0 cases<50>;
8992/// };
8993/// ```
8994///
8995#[cfg_attr(feature = "alloc", derive(Default))]
8996#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8997#[cfg_eval::cfg_eval]
8998#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
8999#[cfg_attr(
9000    all(feature = "serde", feature = "alloc"),
9001    serde_with::serde_as,
9002    derive(serde::Serialize, serde::Deserialize),
9003    serde(rename_all = "snake_case")
9004)]
9005#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9006pub struct ScSpecUdtEnumV0 {
9007    pub doc: StringM<1024>,
9008    pub lib: StringM<80>,
9009    pub name: StringM<60>,
9010    pub cases: VecM<ScSpecUdtEnumCaseV0, 50>,
9011}
9012
9013impl ReadXdr for ScSpecUdtEnumV0 {
9014    #[cfg(feature = "std")]
9015    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
9016        r.with_limited_depth(|r| {
9017            Ok(Self {
9018                doc: StringM::<1024>::read_xdr(r)?,
9019                lib: StringM::<80>::read_xdr(r)?,
9020                name: StringM::<60>::read_xdr(r)?,
9021                cases: VecM::<ScSpecUdtEnumCaseV0, 50>::read_xdr(r)?,
9022            })
9023        })
9024    }
9025}
9026
9027impl WriteXdr for ScSpecUdtEnumV0 {
9028    #[cfg(feature = "std")]
9029    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
9030        w.with_limited_depth(|w| {
9031            self.doc.write_xdr(w)?;
9032            self.lib.write_xdr(w)?;
9033            self.name.write_xdr(w)?;
9034            self.cases.write_xdr(w)?;
9035            Ok(())
9036        })
9037    }
9038}
9039
9040/// ScSpecUdtErrorEnumCaseV0 is an XDR Struct defines as:
9041///
9042/// ```text
9043/// struct SCSpecUDTErrorEnumCaseV0
9044/// {
9045///     string doc<SC_SPEC_DOC_LIMIT>;
9046///     string name<60>;
9047///     uint32 value;
9048/// };
9049/// ```
9050///
9051#[cfg_attr(feature = "alloc", derive(Default))]
9052#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
9053#[cfg_eval::cfg_eval]
9054#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9055#[cfg_attr(
9056    all(feature = "serde", feature = "alloc"),
9057    serde_with::serde_as,
9058    derive(serde::Serialize, serde::Deserialize),
9059    serde(rename_all = "snake_case")
9060)]
9061#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9062pub struct ScSpecUdtErrorEnumCaseV0 {
9063    pub doc: StringM<1024>,
9064    pub name: StringM<60>,
9065    pub value: u32,
9066}
9067
9068impl ReadXdr for ScSpecUdtErrorEnumCaseV0 {
9069    #[cfg(feature = "std")]
9070    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
9071        r.with_limited_depth(|r| {
9072            Ok(Self {
9073                doc: StringM::<1024>::read_xdr(r)?,
9074                name: StringM::<60>::read_xdr(r)?,
9075                value: u32::read_xdr(r)?,
9076            })
9077        })
9078    }
9079}
9080
9081impl WriteXdr for ScSpecUdtErrorEnumCaseV0 {
9082    #[cfg(feature = "std")]
9083    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
9084        w.with_limited_depth(|w| {
9085            self.doc.write_xdr(w)?;
9086            self.name.write_xdr(w)?;
9087            self.value.write_xdr(w)?;
9088            Ok(())
9089        })
9090    }
9091}
9092
9093/// ScSpecUdtErrorEnumV0 is an XDR Struct defines as:
9094///
9095/// ```text
9096/// struct SCSpecUDTErrorEnumV0
9097/// {
9098///     string doc<SC_SPEC_DOC_LIMIT>;
9099///     string lib<80>;
9100///     string name<60>;
9101///     SCSpecUDTErrorEnumCaseV0 cases<50>;
9102/// };
9103/// ```
9104///
9105#[cfg_attr(feature = "alloc", derive(Default))]
9106#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
9107#[cfg_eval::cfg_eval]
9108#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9109#[cfg_attr(
9110    all(feature = "serde", feature = "alloc"),
9111    serde_with::serde_as,
9112    derive(serde::Serialize, serde::Deserialize),
9113    serde(rename_all = "snake_case")
9114)]
9115#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9116pub struct ScSpecUdtErrorEnumV0 {
9117    pub doc: StringM<1024>,
9118    pub lib: StringM<80>,
9119    pub name: StringM<60>,
9120    pub cases: VecM<ScSpecUdtErrorEnumCaseV0, 50>,
9121}
9122
9123impl ReadXdr for ScSpecUdtErrorEnumV0 {
9124    #[cfg(feature = "std")]
9125    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
9126        r.with_limited_depth(|r| {
9127            Ok(Self {
9128                doc: StringM::<1024>::read_xdr(r)?,
9129                lib: StringM::<80>::read_xdr(r)?,
9130                name: StringM::<60>::read_xdr(r)?,
9131                cases: VecM::<ScSpecUdtErrorEnumCaseV0, 50>::read_xdr(r)?,
9132            })
9133        })
9134    }
9135}
9136
9137impl WriteXdr for ScSpecUdtErrorEnumV0 {
9138    #[cfg(feature = "std")]
9139    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
9140        w.with_limited_depth(|w| {
9141            self.doc.write_xdr(w)?;
9142            self.lib.write_xdr(w)?;
9143            self.name.write_xdr(w)?;
9144            self.cases.write_xdr(w)?;
9145            Ok(())
9146        })
9147    }
9148}
9149
9150/// ScSpecFunctionInputV0 is an XDR Struct defines as:
9151///
9152/// ```text
9153/// struct SCSpecFunctionInputV0
9154/// {
9155///     string doc<SC_SPEC_DOC_LIMIT>;
9156///     string name<30>;
9157///     SCSpecTypeDef type;
9158/// };
9159/// ```
9160///
9161#[cfg_attr(feature = "alloc", derive(Default))]
9162#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
9163#[cfg_eval::cfg_eval]
9164#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9165#[cfg_attr(
9166    all(feature = "serde", feature = "alloc"),
9167    serde_with::serde_as,
9168    derive(serde::Serialize, serde::Deserialize),
9169    serde(rename_all = "snake_case")
9170)]
9171#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9172pub struct ScSpecFunctionInputV0 {
9173    pub doc: StringM<1024>,
9174    pub name: StringM<30>,
9175    pub type_: ScSpecTypeDef,
9176}
9177
9178impl ReadXdr for ScSpecFunctionInputV0 {
9179    #[cfg(feature = "std")]
9180    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
9181        r.with_limited_depth(|r| {
9182            Ok(Self {
9183                doc: StringM::<1024>::read_xdr(r)?,
9184                name: StringM::<30>::read_xdr(r)?,
9185                type_: ScSpecTypeDef::read_xdr(r)?,
9186            })
9187        })
9188    }
9189}
9190
9191impl WriteXdr for ScSpecFunctionInputV0 {
9192    #[cfg(feature = "std")]
9193    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
9194        w.with_limited_depth(|w| {
9195            self.doc.write_xdr(w)?;
9196            self.name.write_xdr(w)?;
9197            self.type_.write_xdr(w)?;
9198            Ok(())
9199        })
9200    }
9201}
9202
9203/// ScSpecFunctionV0 is an XDR Struct defines as:
9204///
9205/// ```text
9206/// struct SCSpecFunctionV0
9207/// {
9208///     string doc<SC_SPEC_DOC_LIMIT>;
9209///     SCSymbol name;
9210///     SCSpecFunctionInputV0 inputs<10>;
9211///     SCSpecTypeDef outputs<1>;
9212/// };
9213/// ```
9214///
9215#[cfg_attr(feature = "alloc", derive(Default))]
9216#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
9217#[cfg_eval::cfg_eval]
9218#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9219#[cfg_attr(
9220    all(feature = "serde", feature = "alloc"),
9221    serde_with::serde_as,
9222    derive(serde::Serialize, serde::Deserialize),
9223    serde(rename_all = "snake_case")
9224)]
9225#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9226pub struct ScSpecFunctionV0 {
9227    pub doc: StringM<1024>,
9228    pub name: ScSymbol,
9229    pub inputs: VecM<ScSpecFunctionInputV0, 10>,
9230    pub outputs: VecM<ScSpecTypeDef, 1>,
9231}
9232
9233impl ReadXdr for ScSpecFunctionV0 {
9234    #[cfg(feature = "std")]
9235    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
9236        r.with_limited_depth(|r| {
9237            Ok(Self {
9238                doc: StringM::<1024>::read_xdr(r)?,
9239                name: ScSymbol::read_xdr(r)?,
9240                inputs: VecM::<ScSpecFunctionInputV0, 10>::read_xdr(r)?,
9241                outputs: VecM::<ScSpecTypeDef, 1>::read_xdr(r)?,
9242            })
9243        })
9244    }
9245}
9246
9247impl WriteXdr for ScSpecFunctionV0 {
9248    #[cfg(feature = "std")]
9249    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
9250        w.with_limited_depth(|w| {
9251            self.doc.write_xdr(w)?;
9252            self.name.write_xdr(w)?;
9253            self.inputs.write_xdr(w)?;
9254            self.outputs.write_xdr(w)?;
9255            Ok(())
9256        })
9257    }
9258}
9259
9260/// ScSpecEventParamLocationV0 is an XDR Enum defines as:
9261///
9262/// ```text
9263/// enum SCSpecEventParamLocationV0
9264/// {
9265///     SC_SPEC_EVENT_PARAM_LOCATION_DATA = 0,
9266///     SC_SPEC_EVENT_PARAM_LOCATION_TOPIC_LIST = 1
9267/// };
9268/// ```
9269///
9270// enum
9271#[cfg_attr(feature = "alloc", derive(Default))]
9272#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
9273#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9274#[cfg_attr(
9275    all(feature = "serde", feature = "alloc"),
9276    derive(serde::Serialize, serde::Deserialize),
9277    serde(rename_all = "snake_case")
9278)]
9279#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9280#[repr(i32)]
9281pub enum ScSpecEventParamLocationV0 {
9282    #[cfg_attr(feature = "alloc", default)]
9283    Data = 0,
9284    TopicList = 1,
9285}
9286
9287impl ScSpecEventParamLocationV0 {
9288    pub const VARIANTS: [ScSpecEventParamLocationV0; 2] = [
9289        ScSpecEventParamLocationV0::Data,
9290        ScSpecEventParamLocationV0::TopicList,
9291    ];
9292    pub const VARIANTS_STR: [&'static str; 2] = ["Data", "TopicList"];
9293
9294    #[must_use]
9295    pub const fn name(&self) -> &'static str {
9296        match self {
9297            Self::Data => "Data",
9298            Self::TopicList => "TopicList",
9299        }
9300    }
9301
9302    #[must_use]
9303    pub const fn variants() -> [ScSpecEventParamLocationV0; 2] {
9304        Self::VARIANTS
9305    }
9306}
9307
9308impl Name for ScSpecEventParamLocationV0 {
9309    #[must_use]
9310    fn name(&self) -> &'static str {
9311        Self::name(self)
9312    }
9313}
9314
9315impl Variants<ScSpecEventParamLocationV0> for ScSpecEventParamLocationV0 {
9316    fn variants() -> slice::Iter<'static, ScSpecEventParamLocationV0> {
9317        Self::VARIANTS.iter()
9318    }
9319}
9320
9321impl Enum for ScSpecEventParamLocationV0 {}
9322
9323impl fmt::Display for ScSpecEventParamLocationV0 {
9324    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
9325        f.write_str(self.name())
9326    }
9327}
9328
9329impl TryFrom<i32> for ScSpecEventParamLocationV0 {
9330    type Error = Error;
9331
9332    fn try_from(i: i32) -> Result<Self, Error> {
9333        let e = match i {
9334            0 => ScSpecEventParamLocationV0::Data,
9335            1 => ScSpecEventParamLocationV0::TopicList,
9336            #[allow(unreachable_patterns)]
9337            _ => return Err(Error::Invalid),
9338        };
9339        Ok(e)
9340    }
9341}
9342
9343impl From<ScSpecEventParamLocationV0> for i32 {
9344    #[must_use]
9345    fn from(e: ScSpecEventParamLocationV0) -> Self {
9346        e as Self
9347    }
9348}
9349
9350impl ReadXdr for ScSpecEventParamLocationV0 {
9351    #[cfg(feature = "std")]
9352    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
9353        r.with_limited_depth(|r| {
9354            let e = i32::read_xdr(r)?;
9355            let v: Self = e.try_into()?;
9356            Ok(v)
9357        })
9358    }
9359}
9360
9361impl WriteXdr for ScSpecEventParamLocationV0 {
9362    #[cfg(feature = "std")]
9363    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
9364        w.with_limited_depth(|w| {
9365            let i: i32 = (*self).into();
9366            i.write_xdr(w)
9367        })
9368    }
9369}
9370
9371/// ScSpecEventParamV0 is an XDR Struct defines as:
9372///
9373/// ```text
9374/// struct SCSpecEventParamV0
9375/// {
9376///     string doc<SC_SPEC_DOC_LIMIT>;
9377///     string name<30>;
9378///     SCSpecTypeDef type;
9379///     SCSpecEventParamLocationV0 location;
9380/// };
9381/// ```
9382///
9383#[cfg_attr(feature = "alloc", derive(Default))]
9384#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
9385#[cfg_eval::cfg_eval]
9386#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9387#[cfg_attr(
9388    all(feature = "serde", feature = "alloc"),
9389    serde_with::serde_as,
9390    derive(serde::Serialize, serde::Deserialize),
9391    serde(rename_all = "snake_case")
9392)]
9393#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9394pub struct ScSpecEventParamV0 {
9395    pub doc: StringM<1024>,
9396    pub name: StringM<30>,
9397    pub type_: ScSpecTypeDef,
9398    pub location: ScSpecEventParamLocationV0,
9399}
9400
9401impl ReadXdr for ScSpecEventParamV0 {
9402    #[cfg(feature = "std")]
9403    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
9404        r.with_limited_depth(|r| {
9405            Ok(Self {
9406                doc: StringM::<1024>::read_xdr(r)?,
9407                name: StringM::<30>::read_xdr(r)?,
9408                type_: ScSpecTypeDef::read_xdr(r)?,
9409                location: ScSpecEventParamLocationV0::read_xdr(r)?,
9410            })
9411        })
9412    }
9413}
9414
9415impl WriteXdr for ScSpecEventParamV0 {
9416    #[cfg(feature = "std")]
9417    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
9418        w.with_limited_depth(|w| {
9419            self.doc.write_xdr(w)?;
9420            self.name.write_xdr(w)?;
9421            self.type_.write_xdr(w)?;
9422            self.location.write_xdr(w)?;
9423            Ok(())
9424        })
9425    }
9426}
9427
9428/// ScSpecEventDataFormat is an XDR Enum defines as:
9429///
9430/// ```text
9431/// enum SCSpecEventDataFormat
9432/// {
9433///     SC_SPEC_EVENT_DATA_FORMAT_SINGLE_VALUE = 0,
9434///     SC_SPEC_EVENT_DATA_FORMAT_VEC = 1,
9435///     SC_SPEC_EVENT_DATA_FORMAT_MAP = 2
9436/// };
9437/// ```
9438///
9439// enum
9440#[cfg_attr(feature = "alloc", derive(Default))]
9441#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
9442#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9443#[cfg_attr(
9444    all(feature = "serde", feature = "alloc"),
9445    derive(serde::Serialize, serde::Deserialize),
9446    serde(rename_all = "snake_case")
9447)]
9448#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9449#[repr(i32)]
9450pub enum ScSpecEventDataFormat {
9451    #[cfg_attr(feature = "alloc", default)]
9452    SingleValue = 0,
9453    Vec = 1,
9454    Map = 2,
9455}
9456
9457impl ScSpecEventDataFormat {
9458    pub const VARIANTS: [ScSpecEventDataFormat; 3] = [
9459        ScSpecEventDataFormat::SingleValue,
9460        ScSpecEventDataFormat::Vec,
9461        ScSpecEventDataFormat::Map,
9462    ];
9463    pub const VARIANTS_STR: [&'static str; 3] = ["SingleValue", "Vec", "Map"];
9464
9465    #[must_use]
9466    pub const fn name(&self) -> &'static str {
9467        match self {
9468            Self::SingleValue => "SingleValue",
9469            Self::Vec => "Vec",
9470            Self::Map => "Map",
9471        }
9472    }
9473
9474    #[must_use]
9475    pub const fn variants() -> [ScSpecEventDataFormat; 3] {
9476        Self::VARIANTS
9477    }
9478}
9479
9480impl Name for ScSpecEventDataFormat {
9481    #[must_use]
9482    fn name(&self) -> &'static str {
9483        Self::name(self)
9484    }
9485}
9486
9487impl Variants<ScSpecEventDataFormat> for ScSpecEventDataFormat {
9488    fn variants() -> slice::Iter<'static, ScSpecEventDataFormat> {
9489        Self::VARIANTS.iter()
9490    }
9491}
9492
9493impl Enum for ScSpecEventDataFormat {}
9494
9495impl fmt::Display for ScSpecEventDataFormat {
9496    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
9497        f.write_str(self.name())
9498    }
9499}
9500
9501impl TryFrom<i32> for ScSpecEventDataFormat {
9502    type Error = Error;
9503
9504    fn try_from(i: i32) -> Result<Self, Error> {
9505        let e = match i {
9506            0 => ScSpecEventDataFormat::SingleValue,
9507            1 => ScSpecEventDataFormat::Vec,
9508            2 => ScSpecEventDataFormat::Map,
9509            #[allow(unreachable_patterns)]
9510            _ => return Err(Error::Invalid),
9511        };
9512        Ok(e)
9513    }
9514}
9515
9516impl From<ScSpecEventDataFormat> for i32 {
9517    #[must_use]
9518    fn from(e: ScSpecEventDataFormat) -> Self {
9519        e as Self
9520    }
9521}
9522
9523impl ReadXdr for ScSpecEventDataFormat {
9524    #[cfg(feature = "std")]
9525    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
9526        r.with_limited_depth(|r| {
9527            let e = i32::read_xdr(r)?;
9528            let v: Self = e.try_into()?;
9529            Ok(v)
9530        })
9531    }
9532}
9533
9534impl WriteXdr for ScSpecEventDataFormat {
9535    #[cfg(feature = "std")]
9536    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
9537        w.with_limited_depth(|w| {
9538            let i: i32 = (*self).into();
9539            i.write_xdr(w)
9540        })
9541    }
9542}
9543
9544/// ScSpecEventV0 is an XDR Struct defines as:
9545///
9546/// ```text
9547/// struct SCSpecEventV0
9548/// {
9549///     string doc<SC_SPEC_DOC_LIMIT>;
9550///     string lib<80>;
9551///     SCSymbol name;
9552///     SCSymbol prefixTopics<2>;
9553///     SCSpecEventParamV0 params<50>;
9554///     SCSpecEventDataFormat dataFormat;
9555/// };
9556/// ```
9557///
9558#[cfg_attr(feature = "alloc", derive(Default))]
9559#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
9560#[cfg_eval::cfg_eval]
9561#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9562#[cfg_attr(
9563    all(feature = "serde", feature = "alloc"),
9564    serde_with::serde_as,
9565    derive(serde::Serialize, serde::Deserialize),
9566    serde(rename_all = "snake_case")
9567)]
9568#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9569pub struct ScSpecEventV0 {
9570    pub doc: StringM<1024>,
9571    pub lib: StringM<80>,
9572    pub name: ScSymbol,
9573    pub prefix_topics: VecM<ScSymbol, 2>,
9574    pub params: VecM<ScSpecEventParamV0, 50>,
9575    pub data_format: ScSpecEventDataFormat,
9576}
9577
9578impl ReadXdr for ScSpecEventV0 {
9579    #[cfg(feature = "std")]
9580    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
9581        r.with_limited_depth(|r| {
9582            Ok(Self {
9583                doc: StringM::<1024>::read_xdr(r)?,
9584                lib: StringM::<80>::read_xdr(r)?,
9585                name: ScSymbol::read_xdr(r)?,
9586                prefix_topics: VecM::<ScSymbol, 2>::read_xdr(r)?,
9587                params: VecM::<ScSpecEventParamV0, 50>::read_xdr(r)?,
9588                data_format: ScSpecEventDataFormat::read_xdr(r)?,
9589            })
9590        })
9591    }
9592}
9593
9594impl WriteXdr for ScSpecEventV0 {
9595    #[cfg(feature = "std")]
9596    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
9597        w.with_limited_depth(|w| {
9598            self.doc.write_xdr(w)?;
9599            self.lib.write_xdr(w)?;
9600            self.name.write_xdr(w)?;
9601            self.prefix_topics.write_xdr(w)?;
9602            self.params.write_xdr(w)?;
9603            self.data_format.write_xdr(w)?;
9604            Ok(())
9605        })
9606    }
9607}
9608
9609/// ScSpecEntryKind is an XDR Enum defines as:
9610///
9611/// ```text
9612/// enum SCSpecEntryKind
9613/// {
9614///     SC_SPEC_ENTRY_FUNCTION_V0 = 0,
9615///     SC_SPEC_ENTRY_UDT_STRUCT_V0 = 1,
9616///     SC_SPEC_ENTRY_UDT_UNION_V0 = 2,
9617///     SC_SPEC_ENTRY_UDT_ENUM_V0 = 3,
9618///     SC_SPEC_ENTRY_UDT_ERROR_ENUM_V0 = 4,
9619///     SC_SPEC_ENTRY_EVENT_V0 = 5
9620/// };
9621/// ```
9622///
9623// enum
9624#[cfg_attr(feature = "alloc", derive(Default))]
9625#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
9626#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9627#[cfg_attr(
9628    all(feature = "serde", feature = "alloc"),
9629    derive(serde::Serialize, serde::Deserialize),
9630    serde(rename_all = "snake_case")
9631)]
9632#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9633#[repr(i32)]
9634pub enum ScSpecEntryKind {
9635    #[cfg_attr(feature = "alloc", default)]
9636    FunctionV0 = 0,
9637    UdtStructV0 = 1,
9638    UdtUnionV0 = 2,
9639    UdtEnumV0 = 3,
9640    UdtErrorEnumV0 = 4,
9641    EventV0 = 5,
9642}
9643
9644impl ScSpecEntryKind {
9645    pub const VARIANTS: [ScSpecEntryKind; 6] = [
9646        ScSpecEntryKind::FunctionV0,
9647        ScSpecEntryKind::UdtStructV0,
9648        ScSpecEntryKind::UdtUnionV0,
9649        ScSpecEntryKind::UdtEnumV0,
9650        ScSpecEntryKind::UdtErrorEnumV0,
9651        ScSpecEntryKind::EventV0,
9652    ];
9653    pub const VARIANTS_STR: [&'static str; 6] = [
9654        "FunctionV0",
9655        "UdtStructV0",
9656        "UdtUnionV0",
9657        "UdtEnumV0",
9658        "UdtErrorEnumV0",
9659        "EventV0",
9660    ];
9661
9662    #[must_use]
9663    pub const fn name(&self) -> &'static str {
9664        match self {
9665            Self::FunctionV0 => "FunctionV0",
9666            Self::UdtStructV0 => "UdtStructV0",
9667            Self::UdtUnionV0 => "UdtUnionV0",
9668            Self::UdtEnumV0 => "UdtEnumV0",
9669            Self::UdtErrorEnumV0 => "UdtErrorEnumV0",
9670            Self::EventV0 => "EventV0",
9671        }
9672    }
9673
9674    #[must_use]
9675    pub const fn variants() -> [ScSpecEntryKind; 6] {
9676        Self::VARIANTS
9677    }
9678}
9679
9680impl Name for ScSpecEntryKind {
9681    #[must_use]
9682    fn name(&self) -> &'static str {
9683        Self::name(self)
9684    }
9685}
9686
9687impl Variants<ScSpecEntryKind> for ScSpecEntryKind {
9688    fn variants() -> slice::Iter<'static, ScSpecEntryKind> {
9689        Self::VARIANTS.iter()
9690    }
9691}
9692
9693impl Enum for ScSpecEntryKind {}
9694
9695impl fmt::Display for ScSpecEntryKind {
9696    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
9697        f.write_str(self.name())
9698    }
9699}
9700
9701impl TryFrom<i32> for ScSpecEntryKind {
9702    type Error = Error;
9703
9704    fn try_from(i: i32) -> Result<Self, Error> {
9705        let e = match i {
9706            0 => ScSpecEntryKind::FunctionV0,
9707            1 => ScSpecEntryKind::UdtStructV0,
9708            2 => ScSpecEntryKind::UdtUnionV0,
9709            3 => ScSpecEntryKind::UdtEnumV0,
9710            4 => ScSpecEntryKind::UdtErrorEnumV0,
9711            5 => ScSpecEntryKind::EventV0,
9712            #[allow(unreachable_patterns)]
9713            _ => return Err(Error::Invalid),
9714        };
9715        Ok(e)
9716    }
9717}
9718
9719impl From<ScSpecEntryKind> for i32 {
9720    #[must_use]
9721    fn from(e: ScSpecEntryKind) -> Self {
9722        e as Self
9723    }
9724}
9725
9726impl ReadXdr for ScSpecEntryKind {
9727    #[cfg(feature = "std")]
9728    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
9729        r.with_limited_depth(|r| {
9730            let e = i32::read_xdr(r)?;
9731            let v: Self = e.try_into()?;
9732            Ok(v)
9733        })
9734    }
9735}
9736
9737impl WriteXdr for ScSpecEntryKind {
9738    #[cfg(feature = "std")]
9739    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
9740        w.with_limited_depth(|w| {
9741            let i: i32 = (*self).into();
9742            i.write_xdr(w)
9743        })
9744    }
9745}
9746
9747/// ScSpecEntry is an XDR Union defines as:
9748///
9749/// ```text
9750/// union SCSpecEntry switch (SCSpecEntryKind kind)
9751/// {
9752/// case SC_SPEC_ENTRY_FUNCTION_V0:
9753///     SCSpecFunctionV0 functionV0;
9754/// case SC_SPEC_ENTRY_UDT_STRUCT_V0:
9755///     SCSpecUDTStructV0 udtStructV0;
9756/// case SC_SPEC_ENTRY_UDT_UNION_V0:
9757///     SCSpecUDTUnionV0 udtUnionV0;
9758/// case SC_SPEC_ENTRY_UDT_ENUM_V0:
9759///     SCSpecUDTEnumV0 udtEnumV0;
9760/// case SC_SPEC_ENTRY_UDT_ERROR_ENUM_V0:
9761///     SCSpecUDTErrorEnumV0 udtErrorEnumV0;
9762/// case SC_SPEC_ENTRY_EVENT_V0:
9763///     SCSpecEventV0 eventV0;
9764/// };
9765/// ```
9766///
9767// union with discriminant ScSpecEntryKind
9768#[cfg_eval::cfg_eval]
9769#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
9770#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9771#[cfg_attr(
9772    all(feature = "serde", feature = "alloc"),
9773    serde_with::serde_as,
9774    derive(serde::Serialize, serde::Deserialize),
9775    serde(rename_all = "snake_case")
9776)]
9777#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9778#[allow(clippy::large_enum_variant)]
9779pub enum ScSpecEntry {
9780    FunctionV0(ScSpecFunctionV0),
9781    UdtStructV0(ScSpecUdtStructV0),
9782    UdtUnionV0(ScSpecUdtUnionV0),
9783    UdtEnumV0(ScSpecUdtEnumV0),
9784    UdtErrorEnumV0(ScSpecUdtErrorEnumV0),
9785    EventV0(ScSpecEventV0),
9786}
9787
9788#[cfg(feature = "alloc")]
9789impl Default for ScSpecEntry {
9790    fn default() -> Self {
9791        Self::FunctionV0(ScSpecFunctionV0::default())
9792    }
9793}
9794
9795impl ScSpecEntry {
9796    pub const VARIANTS: [ScSpecEntryKind; 6] = [
9797        ScSpecEntryKind::FunctionV0,
9798        ScSpecEntryKind::UdtStructV0,
9799        ScSpecEntryKind::UdtUnionV0,
9800        ScSpecEntryKind::UdtEnumV0,
9801        ScSpecEntryKind::UdtErrorEnumV0,
9802        ScSpecEntryKind::EventV0,
9803    ];
9804    pub const VARIANTS_STR: [&'static str; 6] = [
9805        "FunctionV0",
9806        "UdtStructV0",
9807        "UdtUnionV0",
9808        "UdtEnumV0",
9809        "UdtErrorEnumV0",
9810        "EventV0",
9811    ];
9812
9813    #[must_use]
9814    pub const fn name(&self) -> &'static str {
9815        match self {
9816            Self::FunctionV0(_) => "FunctionV0",
9817            Self::UdtStructV0(_) => "UdtStructV0",
9818            Self::UdtUnionV0(_) => "UdtUnionV0",
9819            Self::UdtEnumV0(_) => "UdtEnumV0",
9820            Self::UdtErrorEnumV0(_) => "UdtErrorEnumV0",
9821            Self::EventV0(_) => "EventV0",
9822        }
9823    }
9824
9825    #[must_use]
9826    pub const fn discriminant(&self) -> ScSpecEntryKind {
9827        #[allow(clippy::match_same_arms)]
9828        match self {
9829            Self::FunctionV0(_) => ScSpecEntryKind::FunctionV0,
9830            Self::UdtStructV0(_) => ScSpecEntryKind::UdtStructV0,
9831            Self::UdtUnionV0(_) => ScSpecEntryKind::UdtUnionV0,
9832            Self::UdtEnumV0(_) => ScSpecEntryKind::UdtEnumV0,
9833            Self::UdtErrorEnumV0(_) => ScSpecEntryKind::UdtErrorEnumV0,
9834            Self::EventV0(_) => ScSpecEntryKind::EventV0,
9835        }
9836    }
9837
9838    #[must_use]
9839    pub const fn variants() -> [ScSpecEntryKind; 6] {
9840        Self::VARIANTS
9841    }
9842}
9843
9844impl Name for ScSpecEntry {
9845    #[must_use]
9846    fn name(&self) -> &'static str {
9847        Self::name(self)
9848    }
9849}
9850
9851impl Discriminant<ScSpecEntryKind> for ScSpecEntry {
9852    #[must_use]
9853    fn discriminant(&self) -> ScSpecEntryKind {
9854        Self::discriminant(self)
9855    }
9856}
9857
9858impl Variants<ScSpecEntryKind> for ScSpecEntry {
9859    fn variants() -> slice::Iter<'static, ScSpecEntryKind> {
9860        Self::VARIANTS.iter()
9861    }
9862}
9863
9864impl Union<ScSpecEntryKind> for ScSpecEntry {}
9865
9866impl ReadXdr for ScSpecEntry {
9867    #[cfg(feature = "std")]
9868    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
9869        r.with_limited_depth(|r| {
9870            let dv: ScSpecEntryKind = <ScSpecEntryKind as ReadXdr>::read_xdr(r)?;
9871            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
9872            let v = match dv {
9873                ScSpecEntryKind::FunctionV0 => Self::FunctionV0(ScSpecFunctionV0::read_xdr(r)?),
9874                ScSpecEntryKind::UdtStructV0 => Self::UdtStructV0(ScSpecUdtStructV0::read_xdr(r)?),
9875                ScSpecEntryKind::UdtUnionV0 => Self::UdtUnionV0(ScSpecUdtUnionV0::read_xdr(r)?),
9876                ScSpecEntryKind::UdtEnumV0 => Self::UdtEnumV0(ScSpecUdtEnumV0::read_xdr(r)?),
9877                ScSpecEntryKind::UdtErrorEnumV0 => {
9878                    Self::UdtErrorEnumV0(ScSpecUdtErrorEnumV0::read_xdr(r)?)
9879                }
9880                ScSpecEntryKind::EventV0 => Self::EventV0(ScSpecEventV0::read_xdr(r)?),
9881                #[allow(unreachable_patterns)]
9882                _ => return Err(Error::Invalid),
9883            };
9884            Ok(v)
9885        })
9886    }
9887}
9888
9889impl WriteXdr for ScSpecEntry {
9890    #[cfg(feature = "std")]
9891    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
9892        w.with_limited_depth(|w| {
9893            self.discriminant().write_xdr(w)?;
9894            #[allow(clippy::match_same_arms)]
9895            match self {
9896                Self::FunctionV0(v) => v.write_xdr(w)?,
9897                Self::UdtStructV0(v) => v.write_xdr(w)?,
9898                Self::UdtUnionV0(v) => v.write_xdr(w)?,
9899                Self::UdtEnumV0(v) => v.write_xdr(w)?,
9900                Self::UdtErrorEnumV0(v) => v.write_xdr(w)?,
9901                Self::EventV0(v) => v.write_xdr(w)?,
9902            };
9903            Ok(())
9904        })
9905    }
9906}
9907
9908/// ScValType is an XDR Enum defines as:
9909///
9910/// ```text
9911/// enum SCValType
9912/// {
9913///     SCV_BOOL = 0,
9914///     SCV_VOID = 1,
9915///     SCV_ERROR = 2,
9916///
9917///     // 32 bits is the smallest type in WASM or XDR; no need for u8/u16.
9918///     SCV_U32 = 3,
9919///     SCV_I32 = 4,
9920///
9921///     // 64 bits is naturally supported by both WASM and XDR also.
9922///     SCV_U64 = 5,
9923///     SCV_I64 = 6,
9924///
9925///     // Time-related u64 subtypes with their own functions and formatting.
9926///     SCV_TIMEPOINT = 7,
9927///     SCV_DURATION = 8,
9928///
9929///     // 128 bits is naturally supported by Rust and we use it for Soroban
9930///     // fixed-point arithmetic prices / balances / similar "quantities". These
9931///     // are represented in XDR as a pair of 2 u64s.
9932///     SCV_U128 = 9,
9933///     SCV_I128 = 10,
9934///
9935///     // 256 bits is the size of sha256 output, ed25519 keys, and the EVM machine
9936///     // word, so for interop use we include this even though it requires a small
9937///     // amount of Rust guest and/or host library code.
9938///     SCV_U256 = 11,
9939///     SCV_I256 = 12,
9940///
9941///     // Bytes come in 3 flavors, 2 of which have meaningfully different
9942///     // formatting and validity-checking / domain-restriction.
9943///     SCV_BYTES = 13,
9944///     SCV_STRING = 14,
9945///     SCV_SYMBOL = 15,
9946///
9947///     // Vecs and maps are just polymorphic containers of other ScVals.
9948///     SCV_VEC = 16,
9949///     SCV_MAP = 17,
9950///
9951///     // Address is the universal identifier for contracts and classic
9952///     // accounts.
9953///     SCV_ADDRESS = 18,
9954///
9955///     // The following are the internal SCVal variants that are not
9956///     // exposed to the contracts.
9957///     SCV_CONTRACT_INSTANCE = 19,
9958///
9959///     // SCV_LEDGER_KEY_CONTRACT_INSTANCE and SCV_LEDGER_KEY_NONCE are unique
9960///     // symbolic SCVals used as the key for ledger entries for a contract's
9961///     // instance and an address' nonce, respectively.
9962///     SCV_LEDGER_KEY_CONTRACT_INSTANCE = 20,
9963///     SCV_LEDGER_KEY_NONCE = 21
9964/// };
9965/// ```
9966///
9967// enum
9968#[cfg_attr(feature = "alloc", derive(Default))]
9969#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
9970#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
9971#[cfg_attr(
9972    all(feature = "serde", feature = "alloc"),
9973    derive(serde::Serialize, serde::Deserialize),
9974    serde(rename_all = "snake_case")
9975)]
9976#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9977#[repr(i32)]
9978pub enum ScValType {
9979    #[cfg_attr(feature = "alloc", default)]
9980    Bool = 0,
9981    Void = 1,
9982    Error = 2,
9983    U32 = 3,
9984    I32 = 4,
9985    U64 = 5,
9986    I64 = 6,
9987    Timepoint = 7,
9988    Duration = 8,
9989    U128 = 9,
9990    I128 = 10,
9991    U256 = 11,
9992    I256 = 12,
9993    Bytes = 13,
9994    String = 14,
9995    Symbol = 15,
9996    Vec = 16,
9997    Map = 17,
9998    Address = 18,
9999    ContractInstance = 19,
10000    LedgerKeyContractInstance = 20,
10001    LedgerKeyNonce = 21,
10002}
10003
10004impl ScValType {
10005    pub const VARIANTS: [ScValType; 22] = [
10006        ScValType::Bool,
10007        ScValType::Void,
10008        ScValType::Error,
10009        ScValType::U32,
10010        ScValType::I32,
10011        ScValType::U64,
10012        ScValType::I64,
10013        ScValType::Timepoint,
10014        ScValType::Duration,
10015        ScValType::U128,
10016        ScValType::I128,
10017        ScValType::U256,
10018        ScValType::I256,
10019        ScValType::Bytes,
10020        ScValType::String,
10021        ScValType::Symbol,
10022        ScValType::Vec,
10023        ScValType::Map,
10024        ScValType::Address,
10025        ScValType::ContractInstance,
10026        ScValType::LedgerKeyContractInstance,
10027        ScValType::LedgerKeyNonce,
10028    ];
10029    pub const VARIANTS_STR: [&'static str; 22] = [
10030        "Bool",
10031        "Void",
10032        "Error",
10033        "U32",
10034        "I32",
10035        "U64",
10036        "I64",
10037        "Timepoint",
10038        "Duration",
10039        "U128",
10040        "I128",
10041        "U256",
10042        "I256",
10043        "Bytes",
10044        "String",
10045        "Symbol",
10046        "Vec",
10047        "Map",
10048        "Address",
10049        "ContractInstance",
10050        "LedgerKeyContractInstance",
10051        "LedgerKeyNonce",
10052    ];
10053
10054    #[must_use]
10055    pub const fn name(&self) -> &'static str {
10056        match self {
10057            Self::Bool => "Bool",
10058            Self::Void => "Void",
10059            Self::Error => "Error",
10060            Self::U32 => "U32",
10061            Self::I32 => "I32",
10062            Self::U64 => "U64",
10063            Self::I64 => "I64",
10064            Self::Timepoint => "Timepoint",
10065            Self::Duration => "Duration",
10066            Self::U128 => "U128",
10067            Self::I128 => "I128",
10068            Self::U256 => "U256",
10069            Self::I256 => "I256",
10070            Self::Bytes => "Bytes",
10071            Self::String => "String",
10072            Self::Symbol => "Symbol",
10073            Self::Vec => "Vec",
10074            Self::Map => "Map",
10075            Self::Address => "Address",
10076            Self::ContractInstance => "ContractInstance",
10077            Self::LedgerKeyContractInstance => "LedgerKeyContractInstance",
10078            Self::LedgerKeyNonce => "LedgerKeyNonce",
10079        }
10080    }
10081
10082    #[must_use]
10083    pub const fn variants() -> [ScValType; 22] {
10084        Self::VARIANTS
10085    }
10086}
10087
10088impl Name for ScValType {
10089    #[must_use]
10090    fn name(&self) -> &'static str {
10091        Self::name(self)
10092    }
10093}
10094
10095impl Variants<ScValType> for ScValType {
10096    fn variants() -> slice::Iter<'static, ScValType> {
10097        Self::VARIANTS.iter()
10098    }
10099}
10100
10101impl Enum for ScValType {}
10102
10103impl fmt::Display for ScValType {
10104    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
10105        f.write_str(self.name())
10106    }
10107}
10108
10109impl TryFrom<i32> for ScValType {
10110    type Error = Error;
10111
10112    fn try_from(i: i32) -> Result<Self, Error> {
10113        let e = match i {
10114            0 => ScValType::Bool,
10115            1 => ScValType::Void,
10116            2 => ScValType::Error,
10117            3 => ScValType::U32,
10118            4 => ScValType::I32,
10119            5 => ScValType::U64,
10120            6 => ScValType::I64,
10121            7 => ScValType::Timepoint,
10122            8 => ScValType::Duration,
10123            9 => ScValType::U128,
10124            10 => ScValType::I128,
10125            11 => ScValType::U256,
10126            12 => ScValType::I256,
10127            13 => ScValType::Bytes,
10128            14 => ScValType::String,
10129            15 => ScValType::Symbol,
10130            16 => ScValType::Vec,
10131            17 => ScValType::Map,
10132            18 => ScValType::Address,
10133            19 => ScValType::ContractInstance,
10134            20 => ScValType::LedgerKeyContractInstance,
10135            21 => ScValType::LedgerKeyNonce,
10136            #[allow(unreachable_patterns)]
10137            _ => return Err(Error::Invalid),
10138        };
10139        Ok(e)
10140    }
10141}
10142
10143impl From<ScValType> for i32 {
10144    #[must_use]
10145    fn from(e: ScValType) -> Self {
10146        e as Self
10147    }
10148}
10149
10150impl ReadXdr for ScValType {
10151    #[cfg(feature = "std")]
10152    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
10153        r.with_limited_depth(|r| {
10154            let e = i32::read_xdr(r)?;
10155            let v: Self = e.try_into()?;
10156            Ok(v)
10157        })
10158    }
10159}
10160
10161impl WriteXdr for ScValType {
10162    #[cfg(feature = "std")]
10163    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
10164        w.with_limited_depth(|w| {
10165            let i: i32 = (*self).into();
10166            i.write_xdr(w)
10167        })
10168    }
10169}
10170
10171/// ScErrorType is an XDR Enum defines as:
10172///
10173/// ```text
10174/// enum SCErrorType
10175/// {
10176///     SCE_CONTRACT = 0,          // Contract-specific, user-defined codes.
10177///     SCE_WASM_VM = 1,           // Errors while interpreting WASM bytecode.
10178///     SCE_CONTEXT = 2,           // Errors in the contract's host context.
10179///     SCE_STORAGE = 3,           // Errors accessing host storage.
10180///     SCE_OBJECT = 4,            // Errors working with host objects.
10181///     SCE_CRYPTO = 5,            // Errors in cryptographic operations.
10182///     SCE_EVENTS = 6,            // Errors while emitting events.
10183///     SCE_BUDGET = 7,            // Errors relating to budget limits.
10184///     SCE_VALUE = 8,             // Errors working with host values or SCVals.
10185///     SCE_AUTH = 9               // Errors from the authentication subsystem.
10186/// };
10187/// ```
10188///
10189// enum
10190#[cfg_attr(feature = "alloc", derive(Default))]
10191#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
10192#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10193#[cfg_attr(
10194    all(feature = "serde", feature = "alloc"),
10195    derive(serde::Serialize, serde::Deserialize),
10196    serde(rename_all = "snake_case")
10197)]
10198#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
10199#[repr(i32)]
10200pub enum ScErrorType {
10201    #[cfg_attr(feature = "alloc", default)]
10202    Contract = 0,
10203    WasmVm = 1,
10204    Context = 2,
10205    Storage = 3,
10206    Object = 4,
10207    Crypto = 5,
10208    Events = 6,
10209    Budget = 7,
10210    Value = 8,
10211    Auth = 9,
10212}
10213
10214impl ScErrorType {
10215    pub const VARIANTS: [ScErrorType; 10] = [
10216        ScErrorType::Contract,
10217        ScErrorType::WasmVm,
10218        ScErrorType::Context,
10219        ScErrorType::Storage,
10220        ScErrorType::Object,
10221        ScErrorType::Crypto,
10222        ScErrorType::Events,
10223        ScErrorType::Budget,
10224        ScErrorType::Value,
10225        ScErrorType::Auth,
10226    ];
10227    pub const VARIANTS_STR: [&'static str; 10] = [
10228        "Contract", "WasmVm", "Context", "Storage", "Object", "Crypto", "Events", "Budget",
10229        "Value", "Auth",
10230    ];
10231
10232    #[must_use]
10233    pub const fn name(&self) -> &'static str {
10234        match self {
10235            Self::Contract => "Contract",
10236            Self::WasmVm => "WasmVm",
10237            Self::Context => "Context",
10238            Self::Storage => "Storage",
10239            Self::Object => "Object",
10240            Self::Crypto => "Crypto",
10241            Self::Events => "Events",
10242            Self::Budget => "Budget",
10243            Self::Value => "Value",
10244            Self::Auth => "Auth",
10245        }
10246    }
10247
10248    #[must_use]
10249    pub const fn variants() -> [ScErrorType; 10] {
10250        Self::VARIANTS
10251    }
10252}
10253
10254impl Name for ScErrorType {
10255    #[must_use]
10256    fn name(&self) -> &'static str {
10257        Self::name(self)
10258    }
10259}
10260
10261impl Variants<ScErrorType> for ScErrorType {
10262    fn variants() -> slice::Iter<'static, ScErrorType> {
10263        Self::VARIANTS.iter()
10264    }
10265}
10266
10267impl Enum for ScErrorType {}
10268
10269impl fmt::Display for ScErrorType {
10270    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
10271        f.write_str(self.name())
10272    }
10273}
10274
10275impl TryFrom<i32> for ScErrorType {
10276    type Error = Error;
10277
10278    fn try_from(i: i32) -> Result<Self, Error> {
10279        let e = match i {
10280            0 => ScErrorType::Contract,
10281            1 => ScErrorType::WasmVm,
10282            2 => ScErrorType::Context,
10283            3 => ScErrorType::Storage,
10284            4 => ScErrorType::Object,
10285            5 => ScErrorType::Crypto,
10286            6 => ScErrorType::Events,
10287            7 => ScErrorType::Budget,
10288            8 => ScErrorType::Value,
10289            9 => ScErrorType::Auth,
10290            #[allow(unreachable_patterns)]
10291            _ => return Err(Error::Invalid),
10292        };
10293        Ok(e)
10294    }
10295}
10296
10297impl From<ScErrorType> for i32 {
10298    #[must_use]
10299    fn from(e: ScErrorType) -> Self {
10300        e as Self
10301    }
10302}
10303
10304impl ReadXdr for ScErrorType {
10305    #[cfg(feature = "std")]
10306    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
10307        r.with_limited_depth(|r| {
10308            let e = i32::read_xdr(r)?;
10309            let v: Self = e.try_into()?;
10310            Ok(v)
10311        })
10312    }
10313}
10314
10315impl WriteXdr for ScErrorType {
10316    #[cfg(feature = "std")]
10317    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
10318        w.with_limited_depth(|w| {
10319            let i: i32 = (*self).into();
10320            i.write_xdr(w)
10321        })
10322    }
10323}
10324
10325/// ScErrorCode is an XDR Enum defines as:
10326///
10327/// ```text
10328/// enum SCErrorCode
10329/// {
10330///     SCEC_ARITH_DOMAIN = 0,      // Some arithmetic was undefined (overflow, divide-by-zero).
10331///     SCEC_INDEX_BOUNDS = 1,      // Something was indexed beyond its bounds.
10332///     SCEC_INVALID_INPUT = 2,     // User provided some otherwise-bad data.
10333///     SCEC_MISSING_VALUE = 3,     // Some value was required but not provided.
10334///     SCEC_EXISTING_VALUE = 4,    // Some value was provided where not allowed.
10335///     SCEC_EXCEEDED_LIMIT = 5,    // Some arbitrary limit -- gas or otherwise -- was hit.
10336///     SCEC_INVALID_ACTION = 6,    // Data was valid but action requested was not.
10337///     SCEC_INTERNAL_ERROR = 7,    // The host detected an error in its own logic.
10338///     SCEC_UNEXPECTED_TYPE = 8,   // Some type wasn't as expected.
10339///     SCEC_UNEXPECTED_SIZE = 9    // Something's size wasn't as expected.
10340/// };
10341/// ```
10342///
10343// enum
10344#[cfg_attr(feature = "alloc", derive(Default))]
10345#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
10346#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10347#[cfg_attr(
10348    all(feature = "serde", feature = "alloc"),
10349    derive(serde::Serialize, serde::Deserialize),
10350    serde(rename_all = "snake_case")
10351)]
10352#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
10353#[repr(i32)]
10354pub enum ScErrorCode {
10355    #[cfg_attr(feature = "alloc", default)]
10356    ArithDomain = 0,
10357    IndexBounds = 1,
10358    InvalidInput = 2,
10359    MissingValue = 3,
10360    ExistingValue = 4,
10361    ExceededLimit = 5,
10362    InvalidAction = 6,
10363    InternalError = 7,
10364    UnexpectedType = 8,
10365    UnexpectedSize = 9,
10366}
10367
10368impl ScErrorCode {
10369    pub const VARIANTS: [ScErrorCode; 10] = [
10370        ScErrorCode::ArithDomain,
10371        ScErrorCode::IndexBounds,
10372        ScErrorCode::InvalidInput,
10373        ScErrorCode::MissingValue,
10374        ScErrorCode::ExistingValue,
10375        ScErrorCode::ExceededLimit,
10376        ScErrorCode::InvalidAction,
10377        ScErrorCode::InternalError,
10378        ScErrorCode::UnexpectedType,
10379        ScErrorCode::UnexpectedSize,
10380    ];
10381    pub const VARIANTS_STR: [&'static str; 10] = [
10382        "ArithDomain",
10383        "IndexBounds",
10384        "InvalidInput",
10385        "MissingValue",
10386        "ExistingValue",
10387        "ExceededLimit",
10388        "InvalidAction",
10389        "InternalError",
10390        "UnexpectedType",
10391        "UnexpectedSize",
10392    ];
10393
10394    #[must_use]
10395    pub const fn name(&self) -> &'static str {
10396        match self {
10397            Self::ArithDomain => "ArithDomain",
10398            Self::IndexBounds => "IndexBounds",
10399            Self::InvalidInput => "InvalidInput",
10400            Self::MissingValue => "MissingValue",
10401            Self::ExistingValue => "ExistingValue",
10402            Self::ExceededLimit => "ExceededLimit",
10403            Self::InvalidAction => "InvalidAction",
10404            Self::InternalError => "InternalError",
10405            Self::UnexpectedType => "UnexpectedType",
10406            Self::UnexpectedSize => "UnexpectedSize",
10407        }
10408    }
10409
10410    #[must_use]
10411    pub const fn variants() -> [ScErrorCode; 10] {
10412        Self::VARIANTS
10413    }
10414}
10415
10416impl Name for ScErrorCode {
10417    #[must_use]
10418    fn name(&self) -> &'static str {
10419        Self::name(self)
10420    }
10421}
10422
10423impl Variants<ScErrorCode> for ScErrorCode {
10424    fn variants() -> slice::Iter<'static, ScErrorCode> {
10425        Self::VARIANTS.iter()
10426    }
10427}
10428
10429impl Enum for ScErrorCode {}
10430
10431impl fmt::Display for ScErrorCode {
10432    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
10433        f.write_str(self.name())
10434    }
10435}
10436
10437impl TryFrom<i32> for ScErrorCode {
10438    type Error = Error;
10439
10440    fn try_from(i: i32) -> Result<Self, Error> {
10441        let e = match i {
10442            0 => ScErrorCode::ArithDomain,
10443            1 => ScErrorCode::IndexBounds,
10444            2 => ScErrorCode::InvalidInput,
10445            3 => ScErrorCode::MissingValue,
10446            4 => ScErrorCode::ExistingValue,
10447            5 => ScErrorCode::ExceededLimit,
10448            6 => ScErrorCode::InvalidAction,
10449            7 => ScErrorCode::InternalError,
10450            8 => ScErrorCode::UnexpectedType,
10451            9 => ScErrorCode::UnexpectedSize,
10452            #[allow(unreachable_patterns)]
10453            _ => return Err(Error::Invalid),
10454        };
10455        Ok(e)
10456    }
10457}
10458
10459impl From<ScErrorCode> for i32 {
10460    #[must_use]
10461    fn from(e: ScErrorCode) -> Self {
10462        e as Self
10463    }
10464}
10465
10466impl ReadXdr for ScErrorCode {
10467    #[cfg(feature = "std")]
10468    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
10469        r.with_limited_depth(|r| {
10470            let e = i32::read_xdr(r)?;
10471            let v: Self = e.try_into()?;
10472            Ok(v)
10473        })
10474    }
10475}
10476
10477impl WriteXdr for ScErrorCode {
10478    #[cfg(feature = "std")]
10479    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
10480        w.with_limited_depth(|w| {
10481            let i: i32 = (*self).into();
10482            i.write_xdr(w)
10483        })
10484    }
10485}
10486
10487/// ScError is an XDR Union defines as:
10488///
10489/// ```text
10490/// union SCError switch (SCErrorType type)
10491/// {
10492/// case SCE_CONTRACT:
10493///     uint32 contractCode;
10494/// case SCE_WASM_VM:
10495/// case SCE_CONTEXT:
10496/// case SCE_STORAGE:
10497/// case SCE_OBJECT:
10498/// case SCE_CRYPTO:
10499/// case SCE_EVENTS:
10500/// case SCE_BUDGET:
10501/// case SCE_VALUE:
10502/// case SCE_AUTH:
10503///     SCErrorCode code;
10504/// };
10505/// ```
10506///
10507// union with discriminant ScErrorType
10508#[cfg_eval::cfg_eval]
10509#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
10510#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10511#[cfg_attr(
10512    all(feature = "serde", feature = "alloc"),
10513    serde_with::serde_as,
10514    derive(serde::Serialize, serde::Deserialize),
10515    serde(rename_all = "snake_case")
10516)]
10517#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
10518#[allow(clippy::large_enum_variant)]
10519pub enum ScError {
10520    Contract(u32),
10521    WasmVm(ScErrorCode),
10522    Context(ScErrorCode),
10523    Storage(ScErrorCode),
10524    Object(ScErrorCode),
10525    Crypto(ScErrorCode),
10526    Events(ScErrorCode),
10527    Budget(ScErrorCode),
10528    Value(ScErrorCode),
10529    Auth(ScErrorCode),
10530}
10531
10532#[cfg(feature = "alloc")]
10533impl Default for ScError {
10534    fn default() -> Self {
10535        Self::Contract(u32::default())
10536    }
10537}
10538
10539impl ScError {
10540    pub const VARIANTS: [ScErrorType; 10] = [
10541        ScErrorType::Contract,
10542        ScErrorType::WasmVm,
10543        ScErrorType::Context,
10544        ScErrorType::Storage,
10545        ScErrorType::Object,
10546        ScErrorType::Crypto,
10547        ScErrorType::Events,
10548        ScErrorType::Budget,
10549        ScErrorType::Value,
10550        ScErrorType::Auth,
10551    ];
10552    pub const VARIANTS_STR: [&'static str; 10] = [
10553        "Contract", "WasmVm", "Context", "Storage", "Object", "Crypto", "Events", "Budget",
10554        "Value", "Auth",
10555    ];
10556
10557    #[must_use]
10558    pub const fn name(&self) -> &'static str {
10559        match self {
10560            Self::Contract(_) => "Contract",
10561            Self::WasmVm(_) => "WasmVm",
10562            Self::Context(_) => "Context",
10563            Self::Storage(_) => "Storage",
10564            Self::Object(_) => "Object",
10565            Self::Crypto(_) => "Crypto",
10566            Self::Events(_) => "Events",
10567            Self::Budget(_) => "Budget",
10568            Self::Value(_) => "Value",
10569            Self::Auth(_) => "Auth",
10570        }
10571    }
10572
10573    #[must_use]
10574    pub const fn discriminant(&self) -> ScErrorType {
10575        #[allow(clippy::match_same_arms)]
10576        match self {
10577            Self::Contract(_) => ScErrorType::Contract,
10578            Self::WasmVm(_) => ScErrorType::WasmVm,
10579            Self::Context(_) => ScErrorType::Context,
10580            Self::Storage(_) => ScErrorType::Storage,
10581            Self::Object(_) => ScErrorType::Object,
10582            Self::Crypto(_) => ScErrorType::Crypto,
10583            Self::Events(_) => ScErrorType::Events,
10584            Self::Budget(_) => ScErrorType::Budget,
10585            Self::Value(_) => ScErrorType::Value,
10586            Self::Auth(_) => ScErrorType::Auth,
10587        }
10588    }
10589
10590    #[must_use]
10591    pub const fn variants() -> [ScErrorType; 10] {
10592        Self::VARIANTS
10593    }
10594}
10595
10596impl Name for ScError {
10597    #[must_use]
10598    fn name(&self) -> &'static str {
10599        Self::name(self)
10600    }
10601}
10602
10603impl Discriminant<ScErrorType> for ScError {
10604    #[must_use]
10605    fn discriminant(&self) -> ScErrorType {
10606        Self::discriminant(self)
10607    }
10608}
10609
10610impl Variants<ScErrorType> for ScError {
10611    fn variants() -> slice::Iter<'static, ScErrorType> {
10612        Self::VARIANTS.iter()
10613    }
10614}
10615
10616impl Union<ScErrorType> for ScError {}
10617
10618impl ReadXdr for ScError {
10619    #[cfg(feature = "std")]
10620    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
10621        r.with_limited_depth(|r| {
10622            let dv: ScErrorType = <ScErrorType as ReadXdr>::read_xdr(r)?;
10623            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
10624            let v = match dv {
10625                ScErrorType::Contract => Self::Contract(u32::read_xdr(r)?),
10626                ScErrorType::WasmVm => Self::WasmVm(ScErrorCode::read_xdr(r)?),
10627                ScErrorType::Context => Self::Context(ScErrorCode::read_xdr(r)?),
10628                ScErrorType::Storage => Self::Storage(ScErrorCode::read_xdr(r)?),
10629                ScErrorType::Object => Self::Object(ScErrorCode::read_xdr(r)?),
10630                ScErrorType::Crypto => Self::Crypto(ScErrorCode::read_xdr(r)?),
10631                ScErrorType::Events => Self::Events(ScErrorCode::read_xdr(r)?),
10632                ScErrorType::Budget => Self::Budget(ScErrorCode::read_xdr(r)?),
10633                ScErrorType::Value => Self::Value(ScErrorCode::read_xdr(r)?),
10634                ScErrorType::Auth => Self::Auth(ScErrorCode::read_xdr(r)?),
10635                #[allow(unreachable_patterns)]
10636                _ => return Err(Error::Invalid),
10637            };
10638            Ok(v)
10639        })
10640    }
10641}
10642
10643impl WriteXdr for ScError {
10644    #[cfg(feature = "std")]
10645    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
10646        w.with_limited_depth(|w| {
10647            self.discriminant().write_xdr(w)?;
10648            #[allow(clippy::match_same_arms)]
10649            match self {
10650                Self::Contract(v) => v.write_xdr(w)?,
10651                Self::WasmVm(v) => v.write_xdr(w)?,
10652                Self::Context(v) => v.write_xdr(w)?,
10653                Self::Storage(v) => v.write_xdr(w)?,
10654                Self::Object(v) => v.write_xdr(w)?,
10655                Self::Crypto(v) => v.write_xdr(w)?,
10656                Self::Events(v) => v.write_xdr(w)?,
10657                Self::Budget(v) => v.write_xdr(w)?,
10658                Self::Value(v) => v.write_xdr(w)?,
10659                Self::Auth(v) => v.write_xdr(w)?,
10660            };
10661            Ok(())
10662        })
10663    }
10664}
10665
10666/// UInt128Parts is an XDR Struct defines as:
10667///
10668/// ```text
10669/// struct UInt128Parts {
10670///     uint64 hi;
10671///     uint64 lo;
10672/// };
10673/// ```
10674///
10675#[cfg_attr(feature = "alloc", derive(Default))]
10676#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
10677#[cfg_eval::cfg_eval]
10678#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10679#[cfg_attr(
10680    all(feature = "serde", feature = "alloc"),
10681    derive(serde_with::SerializeDisplay)
10682)]
10683pub struct UInt128Parts {
10684    pub hi: u64,
10685    pub lo: u64,
10686}
10687
10688impl ReadXdr for UInt128Parts {
10689    #[cfg(feature = "std")]
10690    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
10691        r.with_limited_depth(|r| {
10692            Ok(Self {
10693                hi: u64::read_xdr(r)?,
10694                lo: u64::read_xdr(r)?,
10695            })
10696        })
10697    }
10698}
10699
10700impl WriteXdr for UInt128Parts {
10701    #[cfg(feature = "std")]
10702    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
10703        w.with_limited_depth(|w| {
10704            self.hi.write_xdr(w)?;
10705            self.lo.write_xdr(w)?;
10706            Ok(())
10707        })
10708    }
10709}
10710#[cfg(all(feature = "serde", feature = "alloc"))]
10711impl<'de> serde::Deserialize<'de> for UInt128Parts {
10712    fn deserialize<D>(deserializer: D) -> core::result::Result<Self, D::Error>
10713    where
10714        D: serde::Deserializer<'de>,
10715    {
10716        use serde::Deserialize;
10717        #[derive(Deserialize)]
10718        struct UInt128Parts {
10719            hi: u64,
10720            lo: u64,
10721        }
10722        #[derive(Deserialize)]
10723        #[serde(untagged)]
10724        enum UInt128PartsOrString<'a> {
10725            Str(&'a str),
10726            String(String),
10727            UInt128Parts(UInt128Parts),
10728        }
10729        match UInt128PartsOrString::deserialize(deserializer)? {
10730            UInt128PartsOrString::Str(s) => s.parse().map_err(serde::de::Error::custom),
10731            UInt128PartsOrString::String(s) => s.parse().map_err(serde::de::Error::custom),
10732            UInt128PartsOrString::UInt128Parts(UInt128Parts { hi, lo }) => {
10733                Ok(self::UInt128Parts { hi, lo })
10734            }
10735        }
10736    }
10737}
10738
10739/// Int128Parts is an XDR Struct defines as:
10740///
10741/// ```text
10742/// struct Int128Parts {
10743///     int64 hi;
10744///     uint64 lo;
10745/// };
10746/// ```
10747///
10748#[cfg_attr(feature = "alloc", derive(Default))]
10749#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
10750#[cfg_eval::cfg_eval]
10751#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10752#[cfg_attr(
10753    all(feature = "serde", feature = "alloc"),
10754    derive(serde_with::SerializeDisplay)
10755)]
10756pub struct Int128Parts {
10757    pub hi: i64,
10758    pub lo: u64,
10759}
10760
10761impl ReadXdr for Int128Parts {
10762    #[cfg(feature = "std")]
10763    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
10764        r.with_limited_depth(|r| {
10765            Ok(Self {
10766                hi: i64::read_xdr(r)?,
10767                lo: u64::read_xdr(r)?,
10768            })
10769        })
10770    }
10771}
10772
10773impl WriteXdr for Int128Parts {
10774    #[cfg(feature = "std")]
10775    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
10776        w.with_limited_depth(|w| {
10777            self.hi.write_xdr(w)?;
10778            self.lo.write_xdr(w)?;
10779            Ok(())
10780        })
10781    }
10782}
10783#[cfg(all(feature = "serde", feature = "alloc"))]
10784impl<'de> serde::Deserialize<'de> for Int128Parts {
10785    fn deserialize<D>(deserializer: D) -> core::result::Result<Self, D::Error>
10786    where
10787        D: serde::Deserializer<'de>,
10788    {
10789        use serde::Deserialize;
10790        #[derive(Deserialize)]
10791        struct Int128Parts {
10792            hi: i64,
10793            lo: u64,
10794        }
10795        #[derive(Deserialize)]
10796        #[serde(untagged)]
10797        enum Int128PartsOrString<'a> {
10798            Str(&'a str),
10799            String(String),
10800            Int128Parts(Int128Parts),
10801        }
10802        match Int128PartsOrString::deserialize(deserializer)? {
10803            Int128PartsOrString::Str(s) => s.parse().map_err(serde::de::Error::custom),
10804            Int128PartsOrString::String(s) => s.parse().map_err(serde::de::Error::custom),
10805            Int128PartsOrString::Int128Parts(Int128Parts { hi, lo }) => {
10806                Ok(self::Int128Parts { hi, lo })
10807            }
10808        }
10809    }
10810}
10811
10812/// UInt256Parts is an XDR Struct defines as:
10813///
10814/// ```text
10815/// struct UInt256Parts {
10816///     uint64 hi_hi;
10817///     uint64 hi_lo;
10818///     uint64 lo_hi;
10819///     uint64 lo_lo;
10820/// };
10821/// ```
10822///
10823#[cfg_attr(feature = "alloc", derive(Default))]
10824#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
10825#[cfg_eval::cfg_eval]
10826#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10827#[cfg_attr(
10828    all(feature = "serde", feature = "alloc"),
10829    derive(serde_with::SerializeDisplay)
10830)]
10831pub struct UInt256Parts {
10832    pub hi_hi: u64,
10833    pub hi_lo: u64,
10834    pub lo_hi: u64,
10835    pub lo_lo: u64,
10836}
10837
10838impl ReadXdr for UInt256Parts {
10839    #[cfg(feature = "std")]
10840    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
10841        r.with_limited_depth(|r| {
10842            Ok(Self {
10843                hi_hi: u64::read_xdr(r)?,
10844                hi_lo: u64::read_xdr(r)?,
10845                lo_hi: u64::read_xdr(r)?,
10846                lo_lo: u64::read_xdr(r)?,
10847            })
10848        })
10849    }
10850}
10851
10852impl WriteXdr for UInt256Parts {
10853    #[cfg(feature = "std")]
10854    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
10855        w.with_limited_depth(|w| {
10856            self.hi_hi.write_xdr(w)?;
10857            self.hi_lo.write_xdr(w)?;
10858            self.lo_hi.write_xdr(w)?;
10859            self.lo_lo.write_xdr(w)?;
10860            Ok(())
10861        })
10862    }
10863}
10864#[cfg(all(feature = "serde", feature = "alloc"))]
10865impl<'de> serde::Deserialize<'de> for UInt256Parts {
10866    fn deserialize<D>(deserializer: D) -> core::result::Result<Self, D::Error>
10867    where
10868        D: serde::Deserializer<'de>,
10869    {
10870        use serde::Deserialize;
10871        #[derive(Deserialize)]
10872        struct UInt256Parts {
10873            hi_hi: u64,
10874            hi_lo: u64,
10875            lo_hi: u64,
10876            lo_lo: u64,
10877        }
10878        #[derive(Deserialize)]
10879        #[serde(untagged)]
10880        enum UInt256PartsOrString<'a> {
10881            Str(&'a str),
10882            String(String),
10883            UInt256Parts(UInt256Parts),
10884        }
10885        match UInt256PartsOrString::deserialize(deserializer)? {
10886            UInt256PartsOrString::Str(s) => s.parse().map_err(serde::de::Error::custom),
10887            UInt256PartsOrString::String(s) => s.parse().map_err(serde::de::Error::custom),
10888            UInt256PartsOrString::UInt256Parts(UInt256Parts {
10889                hi_hi,
10890                hi_lo,
10891                lo_hi,
10892                lo_lo,
10893            }) => Ok(self::UInt256Parts {
10894                hi_hi,
10895                hi_lo,
10896                lo_hi,
10897                lo_lo,
10898            }),
10899        }
10900    }
10901}
10902
10903/// Int256Parts is an XDR Struct defines as:
10904///
10905/// ```text
10906/// struct Int256Parts {
10907///     int64 hi_hi;
10908///     uint64 hi_lo;
10909///     uint64 lo_hi;
10910///     uint64 lo_lo;
10911/// };
10912/// ```
10913///
10914#[cfg_attr(feature = "alloc", derive(Default))]
10915#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
10916#[cfg_eval::cfg_eval]
10917#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
10918#[cfg_attr(
10919    all(feature = "serde", feature = "alloc"),
10920    derive(serde_with::SerializeDisplay)
10921)]
10922pub struct Int256Parts {
10923    pub hi_hi: i64,
10924    pub hi_lo: u64,
10925    pub lo_hi: u64,
10926    pub lo_lo: u64,
10927}
10928
10929impl ReadXdr for Int256Parts {
10930    #[cfg(feature = "std")]
10931    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
10932        r.with_limited_depth(|r| {
10933            Ok(Self {
10934                hi_hi: i64::read_xdr(r)?,
10935                hi_lo: u64::read_xdr(r)?,
10936                lo_hi: u64::read_xdr(r)?,
10937                lo_lo: u64::read_xdr(r)?,
10938            })
10939        })
10940    }
10941}
10942
10943impl WriteXdr for Int256Parts {
10944    #[cfg(feature = "std")]
10945    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
10946        w.with_limited_depth(|w| {
10947            self.hi_hi.write_xdr(w)?;
10948            self.hi_lo.write_xdr(w)?;
10949            self.lo_hi.write_xdr(w)?;
10950            self.lo_lo.write_xdr(w)?;
10951            Ok(())
10952        })
10953    }
10954}
10955#[cfg(all(feature = "serde", feature = "alloc"))]
10956impl<'de> serde::Deserialize<'de> for Int256Parts {
10957    fn deserialize<D>(deserializer: D) -> core::result::Result<Self, D::Error>
10958    where
10959        D: serde::Deserializer<'de>,
10960    {
10961        use serde::Deserialize;
10962        #[derive(Deserialize)]
10963        struct Int256Parts {
10964            hi_hi: i64,
10965            hi_lo: u64,
10966            lo_hi: u64,
10967            lo_lo: u64,
10968        }
10969        #[derive(Deserialize)]
10970        #[serde(untagged)]
10971        enum Int256PartsOrString<'a> {
10972            Str(&'a str),
10973            String(String),
10974            Int256Parts(Int256Parts),
10975        }
10976        match Int256PartsOrString::deserialize(deserializer)? {
10977            Int256PartsOrString::Str(s) => s.parse().map_err(serde::de::Error::custom),
10978            Int256PartsOrString::String(s) => s.parse().map_err(serde::de::Error::custom),
10979            Int256PartsOrString::Int256Parts(Int256Parts {
10980                hi_hi,
10981                hi_lo,
10982                lo_hi,
10983                lo_lo,
10984            }) => Ok(self::Int256Parts {
10985                hi_hi,
10986                hi_lo,
10987                lo_hi,
10988                lo_lo,
10989            }),
10990        }
10991    }
10992}
10993
10994/// ContractExecutableType is an XDR Enum defines as:
10995///
10996/// ```text
10997/// enum ContractExecutableType
10998/// {
10999///     CONTRACT_EXECUTABLE_WASM = 0,
11000///     CONTRACT_EXECUTABLE_STELLAR_ASSET = 1
11001/// };
11002/// ```
11003///
11004// enum
11005#[cfg_attr(feature = "alloc", derive(Default))]
11006#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
11007#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11008#[cfg_attr(
11009    all(feature = "serde", feature = "alloc"),
11010    derive(serde::Serialize, serde::Deserialize),
11011    serde(rename_all = "snake_case")
11012)]
11013#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
11014#[repr(i32)]
11015pub enum ContractExecutableType {
11016    #[cfg_attr(feature = "alloc", default)]
11017    Wasm = 0,
11018    StellarAsset = 1,
11019}
11020
11021impl ContractExecutableType {
11022    pub const VARIANTS: [ContractExecutableType; 2] = [
11023        ContractExecutableType::Wasm,
11024        ContractExecutableType::StellarAsset,
11025    ];
11026    pub const VARIANTS_STR: [&'static str; 2] = ["Wasm", "StellarAsset"];
11027
11028    #[must_use]
11029    pub const fn name(&self) -> &'static str {
11030        match self {
11031            Self::Wasm => "Wasm",
11032            Self::StellarAsset => "StellarAsset",
11033        }
11034    }
11035
11036    #[must_use]
11037    pub const fn variants() -> [ContractExecutableType; 2] {
11038        Self::VARIANTS
11039    }
11040}
11041
11042impl Name for ContractExecutableType {
11043    #[must_use]
11044    fn name(&self) -> &'static str {
11045        Self::name(self)
11046    }
11047}
11048
11049impl Variants<ContractExecutableType> for ContractExecutableType {
11050    fn variants() -> slice::Iter<'static, ContractExecutableType> {
11051        Self::VARIANTS.iter()
11052    }
11053}
11054
11055impl Enum for ContractExecutableType {}
11056
11057impl fmt::Display for ContractExecutableType {
11058    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
11059        f.write_str(self.name())
11060    }
11061}
11062
11063impl TryFrom<i32> for ContractExecutableType {
11064    type Error = Error;
11065
11066    fn try_from(i: i32) -> Result<Self, Error> {
11067        let e = match i {
11068            0 => ContractExecutableType::Wasm,
11069            1 => ContractExecutableType::StellarAsset,
11070            #[allow(unreachable_patterns)]
11071            _ => return Err(Error::Invalid),
11072        };
11073        Ok(e)
11074    }
11075}
11076
11077impl From<ContractExecutableType> for i32 {
11078    #[must_use]
11079    fn from(e: ContractExecutableType) -> Self {
11080        e as Self
11081    }
11082}
11083
11084impl ReadXdr for ContractExecutableType {
11085    #[cfg(feature = "std")]
11086    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
11087        r.with_limited_depth(|r| {
11088            let e = i32::read_xdr(r)?;
11089            let v: Self = e.try_into()?;
11090            Ok(v)
11091        })
11092    }
11093}
11094
11095impl WriteXdr for ContractExecutableType {
11096    #[cfg(feature = "std")]
11097    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
11098        w.with_limited_depth(|w| {
11099            let i: i32 = (*self).into();
11100            i.write_xdr(w)
11101        })
11102    }
11103}
11104
11105/// ContractExecutable is an XDR Union defines as:
11106///
11107/// ```text
11108/// union ContractExecutable switch (ContractExecutableType type)
11109/// {
11110/// case CONTRACT_EXECUTABLE_WASM:
11111///     Hash wasm_hash;
11112/// case CONTRACT_EXECUTABLE_STELLAR_ASSET:
11113///     void;
11114/// };
11115/// ```
11116///
11117// union with discriminant ContractExecutableType
11118#[cfg_eval::cfg_eval]
11119#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
11120#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11121#[cfg_attr(
11122    all(feature = "serde", feature = "alloc"),
11123    serde_with::serde_as,
11124    derive(serde::Serialize, serde::Deserialize),
11125    serde(rename_all = "snake_case")
11126)]
11127#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
11128#[allow(clippy::large_enum_variant)]
11129pub enum ContractExecutable {
11130    Wasm(Hash),
11131    StellarAsset,
11132}
11133
11134#[cfg(feature = "alloc")]
11135impl Default for ContractExecutable {
11136    fn default() -> Self {
11137        Self::Wasm(Hash::default())
11138    }
11139}
11140
11141impl ContractExecutable {
11142    pub const VARIANTS: [ContractExecutableType; 2] = [
11143        ContractExecutableType::Wasm,
11144        ContractExecutableType::StellarAsset,
11145    ];
11146    pub const VARIANTS_STR: [&'static str; 2] = ["Wasm", "StellarAsset"];
11147
11148    #[must_use]
11149    pub const fn name(&self) -> &'static str {
11150        match self {
11151            Self::Wasm(_) => "Wasm",
11152            Self::StellarAsset => "StellarAsset",
11153        }
11154    }
11155
11156    #[must_use]
11157    pub const fn discriminant(&self) -> ContractExecutableType {
11158        #[allow(clippy::match_same_arms)]
11159        match self {
11160            Self::Wasm(_) => ContractExecutableType::Wasm,
11161            Self::StellarAsset => ContractExecutableType::StellarAsset,
11162        }
11163    }
11164
11165    #[must_use]
11166    pub const fn variants() -> [ContractExecutableType; 2] {
11167        Self::VARIANTS
11168    }
11169}
11170
11171impl Name for ContractExecutable {
11172    #[must_use]
11173    fn name(&self) -> &'static str {
11174        Self::name(self)
11175    }
11176}
11177
11178impl Discriminant<ContractExecutableType> for ContractExecutable {
11179    #[must_use]
11180    fn discriminant(&self) -> ContractExecutableType {
11181        Self::discriminant(self)
11182    }
11183}
11184
11185impl Variants<ContractExecutableType> for ContractExecutable {
11186    fn variants() -> slice::Iter<'static, ContractExecutableType> {
11187        Self::VARIANTS.iter()
11188    }
11189}
11190
11191impl Union<ContractExecutableType> for ContractExecutable {}
11192
11193impl ReadXdr for ContractExecutable {
11194    #[cfg(feature = "std")]
11195    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
11196        r.with_limited_depth(|r| {
11197            let dv: ContractExecutableType = <ContractExecutableType as ReadXdr>::read_xdr(r)?;
11198            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
11199            let v = match dv {
11200                ContractExecutableType::Wasm => Self::Wasm(Hash::read_xdr(r)?),
11201                ContractExecutableType::StellarAsset => Self::StellarAsset,
11202                #[allow(unreachable_patterns)]
11203                _ => return Err(Error::Invalid),
11204            };
11205            Ok(v)
11206        })
11207    }
11208}
11209
11210impl WriteXdr for ContractExecutable {
11211    #[cfg(feature = "std")]
11212    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
11213        w.with_limited_depth(|w| {
11214            self.discriminant().write_xdr(w)?;
11215            #[allow(clippy::match_same_arms)]
11216            match self {
11217                Self::Wasm(v) => v.write_xdr(w)?,
11218                Self::StellarAsset => ().write_xdr(w)?,
11219            };
11220            Ok(())
11221        })
11222    }
11223}
11224
11225/// ScAddressType is an XDR Enum defines as:
11226///
11227/// ```text
11228/// enum SCAddressType
11229/// {
11230///     SC_ADDRESS_TYPE_ACCOUNT = 0,
11231///     SC_ADDRESS_TYPE_CONTRACT = 1,
11232///     SC_ADDRESS_TYPE_MUXED_ACCOUNT = 2,
11233///     SC_ADDRESS_TYPE_CLAIMABLE_BALANCE = 3,
11234///     SC_ADDRESS_TYPE_LIQUIDITY_POOL = 4
11235/// };
11236/// ```
11237///
11238// enum
11239#[cfg_attr(feature = "alloc", derive(Default))]
11240#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
11241#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11242#[cfg_attr(
11243    all(feature = "serde", feature = "alloc"),
11244    derive(serde::Serialize, serde::Deserialize),
11245    serde(rename_all = "snake_case")
11246)]
11247#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
11248#[repr(i32)]
11249pub enum ScAddressType {
11250    #[cfg_attr(feature = "alloc", default)]
11251    Account = 0,
11252    Contract = 1,
11253    MuxedAccount = 2,
11254    ClaimableBalance = 3,
11255    LiquidityPool = 4,
11256}
11257
11258impl ScAddressType {
11259    pub const VARIANTS: [ScAddressType; 5] = [
11260        ScAddressType::Account,
11261        ScAddressType::Contract,
11262        ScAddressType::MuxedAccount,
11263        ScAddressType::ClaimableBalance,
11264        ScAddressType::LiquidityPool,
11265    ];
11266    pub const VARIANTS_STR: [&'static str; 5] = [
11267        "Account",
11268        "Contract",
11269        "MuxedAccount",
11270        "ClaimableBalance",
11271        "LiquidityPool",
11272    ];
11273
11274    #[must_use]
11275    pub const fn name(&self) -> &'static str {
11276        match self {
11277            Self::Account => "Account",
11278            Self::Contract => "Contract",
11279            Self::MuxedAccount => "MuxedAccount",
11280            Self::ClaimableBalance => "ClaimableBalance",
11281            Self::LiquidityPool => "LiquidityPool",
11282        }
11283    }
11284
11285    #[must_use]
11286    pub const fn variants() -> [ScAddressType; 5] {
11287        Self::VARIANTS
11288    }
11289}
11290
11291impl Name for ScAddressType {
11292    #[must_use]
11293    fn name(&self) -> &'static str {
11294        Self::name(self)
11295    }
11296}
11297
11298impl Variants<ScAddressType> for ScAddressType {
11299    fn variants() -> slice::Iter<'static, ScAddressType> {
11300        Self::VARIANTS.iter()
11301    }
11302}
11303
11304impl Enum for ScAddressType {}
11305
11306impl fmt::Display for ScAddressType {
11307    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
11308        f.write_str(self.name())
11309    }
11310}
11311
11312impl TryFrom<i32> for ScAddressType {
11313    type Error = Error;
11314
11315    fn try_from(i: i32) -> Result<Self, Error> {
11316        let e = match i {
11317            0 => ScAddressType::Account,
11318            1 => ScAddressType::Contract,
11319            2 => ScAddressType::MuxedAccount,
11320            3 => ScAddressType::ClaimableBalance,
11321            4 => ScAddressType::LiquidityPool,
11322            #[allow(unreachable_patterns)]
11323            _ => return Err(Error::Invalid),
11324        };
11325        Ok(e)
11326    }
11327}
11328
11329impl From<ScAddressType> for i32 {
11330    #[must_use]
11331    fn from(e: ScAddressType) -> Self {
11332        e as Self
11333    }
11334}
11335
11336impl ReadXdr for ScAddressType {
11337    #[cfg(feature = "std")]
11338    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
11339        r.with_limited_depth(|r| {
11340            let e = i32::read_xdr(r)?;
11341            let v: Self = e.try_into()?;
11342            Ok(v)
11343        })
11344    }
11345}
11346
11347impl WriteXdr for ScAddressType {
11348    #[cfg(feature = "std")]
11349    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
11350        w.with_limited_depth(|w| {
11351            let i: i32 = (*self).into();
11352            i.write_xdr(w)
11353        })
11354    }
11355}
11356
11357/// MuxedEd25519Account is an XDR Struct defines as:
11358///
11359/// ```text
11360/// struct MuxedEd25519Account
11361/// {
11362///     uint64 id;
11363///     uint256 ed25519;
11364/// };
11365/// ```
11366///
11367#[cfg_attr(feature = "alloc", derive(Default))]
11368#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
11369#[cfg_eval::cfg_eval]
11370#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11371#[cfg_attr(
11372    all(feature = "serde", feature = "alloc"),
11373    derive(serde_with::SerializeDisplay)
11374)]
11375pub struct MuxedEd25519Account {
11376    pub id: u64,
11377    pub ed25519: Uint256,
11378}
11379
11380impl ReadXdr for MuxedEd25519Account {
11381    #[cfg(feature = "std")]
11382    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
11383        r.with_limited_depth(|r| {
11384            Ok(Self {
11385                id: u64::read_xdr(r)?,
11386                ed25519: Uint256::read_xdr(r)?,
11387            })
11388        })
11389    }
11390}
11391
11392impl WriteXdr for MuxedEd25519Account {
11393    #[cfg(feature = "std")]
11394    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
11395        w.with_limited_depth(|w| {
11396            self.id.write_xdr(w)?;
11397            self.ed25519.write_xdr(w)?;
11398            Ok(())
11399        })
11400    }
11401}
11402#[cfg(all(feature = "serde", feature = "alloc"))]
11403impl<'de> serde::Deserialize<'de> for MuxedEd25519Account {
11404    fn deserialize<D>(deserializer: D) -> core::result::Result<Self, D::Error>
11405    where
11406        D: serde::Deserializer<'de>,
11407    {
11408        use serde::Deserialize;
11409        #[derive(Deserialize)]
11410        struct MuxedEd25519Account {
11411            id: u64,
11412            ed25519: Uint256,
11413        }
11414        #[derive(Deserialize)]
11415        #[serde(untagged)]
11416        enum MuxedEd25519AccountOrString<'a> {
11417            Str(&'a str),
11418            String(String),
11419            MuxedEd25519Account(MuxedEd25519Account),
11420        }
11421        match MuxedEd25519AccountOrString::deserialize(deserializer)? {
11422            MuxedEd25519AccountOrString::Str(s) => s.parse().map_err(serde::de::Error::custom),
11423            MuxedEd25519AccountOrString::String(s) => s.parse().map_err(serde::de::Error::custom),
11424            MuxedEd25519AccountOrString::MuxedEd25519Account(MuxedEd25519Account {
11425                id,
11426                ed25519,
11427            }) => Ok(self::MuxedEd25519Account { id, ed25519 }),
11428        }
11429    }
11430}
11431
11432/// ScAddress is an XDR Union defines as:
11433///
11434/// ```text
11435/// union SCAddress switch (SCAddressType type)
11436/// {
11437/// case SC_ADDRESS_TYPE_ACCOUNT:
11438///     AccountID accountId;
11439/// case SC_ADDRESS_TYPE_CONTRACT:
11440///     ContractID contractId;
11441/// case SC_ADDRESS_TYPE_MUXED_ACCOUNT:
11442///     MuxedEd25519Account muxedAccount;
11443/// case SC_ADDRESS_TYPE_CLAIMABLE_BALANCE:
11444///     ClaimableBalanceID claimableBalanceId;
11445/// case SC_ADDRESS_TYPE_LIQUIDITY_POOL:
11446///     PoolID liquidityPoolId;
11447/// };
11448/// ```
11449///
11450// union with discriminant ScAddressType
11451#[cfg_eval::cfg_eval]
11452#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
11453#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11454#[cfg_attr(
11455    all(feature = "serde", feature = "alloc"),
11456    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
11457)]
11458#[allow(clippy::large_enum_variant)]
11459pub enum ScAddress {
11460    Account(AccountId),
11461    Contract(ContractId),
11462    MuxedAccount(MuxedEd25519Account),
11463    ClaimableBalance(ClaimableBalanceId),
11464    LiquidityPool(PoolId),
11465}
11466
11467#[cfg(feature = "alloc")]
11468impl Default for ScAddress {
11469    fn default() -> Self {
11470        Self::Account(AccountId::default())
11471    }
11472}
11473
11474impl ScAddress {
11475    pub const VARIANTS: [ScAddressType; 5] = [
11476        ScAddressType::Account,
11477        ScAddressType::Contract,
11478        ScAddressType::MuxedAccount,
11479        ScAddressType::ClaimableBalance,
11480        ScAddressType::LiquidityPool,
11481    ];
11482    pub const VARIANTS_STR: [&'static str; 5] = [
11483        "Account",
11484        "Contract",
11485        "MuxedAccount",
11486        "ClaimableBalance",
11487        "LiquidityPool",
11488    ];
11489
11490    #[must_use]
11491    pub const fn name(&self) -> &'static str {
11492        match self {
11493            Self::Account(_) => "Account",
11494            Self::Contract(_) => "Contract",
11495            Self::MuxedAccount(_) => "MuxedAccount",
11496            Self::ClaimableBalance(_) => "ClaimableBalance",
11497            Self::LiquidityPool(_) => "LiquidityPool",
11498        }
11499    }
11500
11501    #[must_use]
11502    pub const fn discriminant(&self) -> ScAddressType {
11503        #[allow(clippy::match_same_arms)]
11504        match self {
11505            Self::Account(_) => ScAddressType::Account,
11506            Self::Contract(_) => ScAddressType::Contract,
11507            Self::MuxedAccount(_) => ScAddressType::MuxedAccount,
11508            Self::ClaimableBalance(_) => ScAddressType::ClaimableBalance,
11509            Self::LiquidityPool(_) => ScAddressType::LiquidityPool,
11510        }
11511    }
11512
11513    #[must_use]
11514    pub const fn variants() -> [ScAddressType; 5] {
11515        Self::VARIANTS
11516    }
11517}
11518
11519impl Name for ScAddress {
11520    #[must_use]
11521    fn name(&self) -> &'static str {
11522        Self::name(self)
11523    }
11524}
11525
11526impl Discriminant<ScAddressType> for ScAddress {
11527    #[must_use]
11528    fn discriminant(&self) -> ScAddressType {
11529        Self::discriminant(self)
11530    }
11531}
11532
11533impl Variants<ScAddressType> for ScAddress {
11534    fn variants() -> slice::Iter<'static, ScAddressType> {
11535        Self::VARIANTS.iter()
11536    }
11537}
11538
11539impl Union<ScAddressType> for ScAddress {}
11540
11541impl ReadXdr for ScAddress {
11542    #[cfg(feature = "std")]
11543    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
11544        r.with_limited_depth(|r| {
11545            let dv: ScAddressType = <ScAddressType as ReadXdr>::read_xdr(r)?;
11546            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
11547            let v = match dv {
11548                ScAddressType::Account => Self::Account(AccountId::read_xdr(r)?),
11549                ScAddressType::Contract => Self::Contract(ContractId::read_xdr(r)?),
11550                ScAddressType::MuxedAccount => {
11551                    Self::MuxedAccount(MuxedEd25519Account::read_xdr(r)?)
11552                }
11553                ScAddressType::ClaimableBalance => {
11554                    Self::ClaimableBalance(ClaimableBalanceId::read_xdr(r)?)
11555                }
11556                ScAddressType::LiquidityPool => Self::LiquidityPool(PoolId::read_xdr(r)?),
11557                #[allow(unreachable_patterns)]
11558                _ => return Err(Error::Invalid),
11559            };
11560            Ok(v)
11561        })
11562    }
11563}
11564
11565impl WriteXdr for ScAddress {
11566    #[cfg(feature = "std")]
11567    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
11568        w.with_limited_depth(|w| {
11569            self.discriminant().write_xdr(w)?;
11570            #[allow(clippy::match_same_arms)]
11571            match self {
11572                Self::Account(v) => v.write_xdr(w)?,
11573                Self::Contract(v) => v.write_xdr(w)?,
11574                Self::MuxedAccount(v) => v.write_xdr(w)?,
11575                Self::ClaimableBalance(v) => v.write_xdr(w)?,
11576                Self::LiquidityPool(v) => v.write_xdr(w)?,
11577            };
11578            Ok(())
11579        })
11580    }
11581}
11582
11583/// ScsymbolLimit is an XDR Const defines as:
11584///
11585/// ```text
11586/// const SCSYMBOL_LIMIT = 32;
11587/// ```
11588///
11589pub const SCSYMBOL_LIMIT: u64 = 32;
11590
11591/// ScVec is an XDR Typedef defines as:
11592///
11593/// ```text
11594/// typedef SCVal SCVec<>;
11595/// ```
11596///
11597#[cfg_eval::cfg_eval]
11598#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
11599#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11600#[cfg_attr(
11601    all(feature = "serde", feature = "alloc"),
11602    serde_with::serde_as,
11603    derive(serde::Serialize, serde::Deserialize),
11604    serde(rename_all = "snake_case")
11605)]
11606#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
11607#[derive(Debug)]
11608pub struct ScVec(pub VecM<ScVal>);
11609
11610impl From<ScVec> for VecM<ScVal> {
11611    #[must_use]
11612    fn from(x: ScVec) -> Self {
11613        x.0
11614    }
11615}
11616
11617impl From<VecM<ScVal>> for ScVec {
11618    #[must_use]
11619    fn from(x: VecM<ScVal>) -> Self {
11620        ScVec(x)
11621    }
11622}
11623
11624impl AsRef<VecM<ScVal>> for ScVec {
11625    #[must_use]
11626    fn as_ref(&self) -> &VecM<ScVal> {
11627        &self.0
11628    }
11629}
11630
11631impl ReadXdr for ScVec {
11632    #[cfg(feature = "std")]
11633    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
11634        r.with_limited_depth(|r| {
11635            let i = VecM::<ScVal>::read_xdr(r)?;
11636            let v = ScVec(i);
11637            Ok(v)
11638        })
11639    }
11640}
11641
11642impl WriteXdr for ScVec {
11643    #[cfg(feature = "std")]
11644    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
11645        w.with_limited_depth(|w| self.0.write_xdr(w))
11646    }
11647}
11648
11649impl Deref for ScVec {
11650    type Target = VecM<ScVal>;
11651    fn deref(&self) -> &Self::Target {
11652        &self.0
11653    }
11654}
11655
11656impl From<ScVec> for Vec<ScVal> {
11657    #[must_use]
11658    fn from(x: ScVec) -> Self {
11659        x.0 .0
11660    }
11661}
11662
11663impl TryFrom<Vec<ScVal>> for ScVec {
11664    type Error = Error;
11665    fn try_from(x: Vec<ScVal>) -> Result<Self, Error> {
11666        Ok(ScVec(x.try_into()?))
11667    }
11668}
11669
11670#[cfg(feature = "alloc")]
11671impl TryFrom<&Vec<ScVal>> for ScVec {
11672    type Error = Error;
11673    fn try_from(x: &Vec<ScVal>) -> Result<Self, Error> {
11674        Ok(ScVec(x.try_into()?))
11675    }
11676}
11677
11678impl AsRef<Vec<ScVal>> for ScVec {
11679    #[must_use]
11680    fn as_ref(&self) -> &Vec<ScVal> {
11681        &self.0 .0
11682    }
11683}
11684
11685impl AsRef<[ScVal]> for ScVec {
11686    #[cfg(feature = "alloc")]
11687    #[must_use]
11688    fn as_ref(&self) -> &[ScVal] {
11689        &self.0 .0
11690    }
11691    #[cfg(not(feature = "alloc"))]
11692    #[must_use]
11693    fn as_ref(&self) -> &[ScVal] {
11694        self.0 .0
11695    }
11696}
11697
11698/// ScMap is an XDR Typedef defines as:
11699///
11700/// ```text
11701/// typedef SCMapEntry SCMap<>;
11702/// ```
11703///
11704#[cfg_eval::cfg_eval]
11705#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
11706#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11707#[cfg_attr(
11708    all(feature = "serde", feature = "alloc"),
11709    serde_with::serde_as,
11710    derive(serde::Serialize, serde::Deserialize),
11711    serde(rename_all = "snake_case")
11712)]
11713#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
11714#[derive(Debug)]
11715pub struct ScMap(pub VecM<ScMapEntry>);
11716
11717impl From<ScMap> for VecM<ScMapEntry> {
11718    #[must_use]
11719    fn from(x: ScMap) -> Self {
11720        x.0
11721    }
11722}
11723
11724impl From<VecM<ScMapEntry>> for ScMap {
11725    #[must_use]
11726    fn from(x: VecM<ScMapEntry>) -> Self {
11727        ScMap(x)
11728    }
11729}
11730
11731impl AsRef<VecM<ScMapEntry>> for ScMap {
11732    #[must_use]
11733    fn as_ref(&self) -> &VecM<ScMapEntry> {
11734        &self.0
11735    }
11736}
11737
11738impl ReadXdr for ScMap {
11739    #[cfg(feature = "std")]
11740    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
11741        r.with_limited_depth(|r| {
11742            let i = VecM::<ScMapEntry>::read_xdr(r)?;
11743            let v = ScMap(i);
11744            Ok(v)
11745        })
11746    }
11747}
11748
11749impl WriteXdr for ScMap {
11750    #[cfg(feature = "std")]
11751    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
11752        w.with_limited_depth(|w| self.0.write_xdr(w))
11753    }
11754}
11755
11756impl Deref for ScMap {
11757    type Target = VecM<ScMapEntry>;
11758    fn deref(&self) -> &Self::Target {
11759        &self.0
11760    }
11761}
11762
11763impl From<ScMap> for Vec<ScMapEntry> {
11764    #[must_use]
11765    fn from(x: ScMap) -> Self {
11766        x.0 .0
11767    }
11768}
11769
11770impl TryFrom<Vec<ScMapEntry>> for ScMap {
11771    type Error = Error;
11772    fn try_from(x: Vec<ScMapEntry>) -> Result<Self, Error> {
11773        Ok(ScMap(x.try_into()?))
11774    }
11775}
11776
11777#[cfg(feature = "alloc")]
11778impl TryFrom<&Vec<ScMapEntry>> for ScMap {
11779    type Error = Error;
11780    fn try_from(x: &Vec<ScMapEntry>) -> Result<Self, Error> {
11781        Ok(ScMap(x.try_into()?))
11782    }
11783}
11784
11785impl AsRef<Vec<ScMapEntry>> for ScMap {
11786    #[must_use]
11787    fn as_ref(&self) -> &Vec<ScMapEntry> {
11788        &self.0 .0
11789    }
11790}
11791
11792impl AsRef<[ScMapEntry]> for ScMap {
11793    #[cfg(feature = "alloc")]
11794    #[must_use]
11795    fn as_ref(&self) -> &[ScMapEntry] {
11796        &self.0 .0
11797    }
11798    #[cfg(not(feature = "alloc"))]
11799    #[must_use]
11800    fn as_ref(&self) -> &[ScMapEntry] {
11801        self.0 .0
11802    }
11803}
11804
11805/// ScBytes is an XDR Typedef defines as:
11806///
11807/// ```text
11808/// typedef opaque SCBytes<>;
11809/// ```
11810///
11811#[cfg_eval::cfg_eval]
11812#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
11813#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11814#[cfg_attr(
11815    all(feature = "serde", feature = "alloc"),
11816    serde_with::serde_as,
11817    derive(serde::Serialize, serde::Deserialize),
11818    serde(rename_all = "snake_case")
11819)]
11820#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
11821#[derive(Debug)]
11822pub struct ScBytes(pub BytesM);
11823
11824impl From<ScBytes> for BytesM {
11825    #[must_use]
11826    fn from(x: ScBytes) -> Self {
11827        x.0
11828    }
11829}
11830
11831impl From<BytesM> for ScBytes {
11832    #[must_use]
11833    fn from(x: BytesM) -> Self {
11834        ScBytes(x)
11835    }
11836}
11837
11838impl AsRef<BytesM> for ScBytes {
11839    #[must_use]
11840    fn as_ref(&self) -> &BytesM {
11841        &self.0
11842    }
11843}
11844
11845impl ReadXdr for ScBytes {
11846    #[cfg(feature = "std")]
11847    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
11848        r.with_limited_depth(|r| {
11849            let i = BytesM::read_xdr(r)?;
11850            let v = ScBytes(i);
11851            Ok(v)
11852        })
11853    }
11854}
11855
11856impl WriteXdr for ScBytes {
11857    #[cfg(feature = "std")]
11858    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
11859        w.with_limited_depth(|w| self.0.write_xdr(w))
11860    }
11861}
11862
11863impl Deref for ScBytes {
11864    type Target = BytesM;
11865    fn deref(&self) -> &Self::Target {
11866        &self.0
11867    }
11868}
11869
11870impl From<ScBytes> for Vec<u8> {
11871    #[must_use]
11872    fn from(x: ScBytes) -> Self {
11873        x.0 .0
11874    }
11875}
11876
11877impl TryFrom<Vec<u8>> for ScBytes {
11878    type Error = Error;
11879    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
11880        Ok(ScBytes(x.try_into()?))
11881    }
11882}
11883
11884#[cfg(feature = "alloc")]
11885impl TryFrom<&Vec<u8>> for ScBytes {
11886    type Error = Error;
11887    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
11888        Ok(ScBytes(x.try_into()?))
11889    }
11890}
11891
11892impl AsRef<Vec<u8>> for ScBytes {
11893    #[must_use]
11894    fn as_ref(&self) -> &Vec<u8> {
11895        &self.0 .0
11896    }
11897}
11898
11899impl AsRef<[u8]> for ScBytes {
11900    #[cfg(feature = "alloc")]
11901    #[must_use]
11902    fn as_ref(&self) -> &[u8] {
11903        &self.0 .0
11904    }
11905    #[cfg(not(feature = "alloc"))]
11906    #[must_use]
11907    fn as_ref(&self) -> &[u8] {
11908        self.0 .0
11909    }
11910}
11911
11912/// ScString is an XDR Typedef defines as:
11913///
11914/// ```text
11915/// typedef string SCString<>;
11916/// ```
11917///
11918#[cfg_eval::cfg_eval]
11919#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
11920#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
11921#[cfg_attr(
11922    all(feature = "serde", feature = "alloc"),
11923    serde_with::serde_as,
11924    derive(serde::Serialize, serde::Deserialize),
11925    serde(rename_all = "snake_case")
11926)]
11927#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
11928#[derive(Debug)]
11929pub struct ScString(pub StringM);
11930
11931impl From<ScString> for StringM {
11932    #[must_use]
11933    fn from(x: ScString) -> Self {
11934        x.0
11935    }
11936}
11937
11938impl From<StringM> for ScString {
11939    #[must_use]
11940    fn from(x: StringM) -> Self {
11941        ScString(x)
11942    }
11943}
11944
11945impl AsRef<StringM> for ScString {
11946    #[must_use]
11947    fn as_ref(&self) -> &StringM {
11948        &self.0
11949    }
11950}
11951
11952impl ReadXdr for ScString {
11953    #[cfg(feature = "std")]
11954    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
11955        r.with_limited_depth(|r| {
11956            let i = StringM::read_xdr(r)?;
11957            let v = ScString(i);
11958            Ok(v)
11959        })
11960    }
11961}
11962
11963impl WriteXdr for ScString {
11964    #[cfg(feature = "std")]
11965    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
11966        w.with_limited_depth(|w| self.0.write_xdr(w))
11967    }
11968}
11969
11970impl Deref for ScString {
11971    type Target = StringM;
11972    fn deref(&self) -> &Self::Target {
11973        &self.0
11974    }
11975}
11976
11977impl From<ScString> for Vec<u8> {
11978    #[must_use]
11979    fn from(x: ScString) -> Self {
11980        x.0 .0
11981    }
11982}
11983
11984impl TryFrom<Vec<u8>> for ScString {
11985    type Error = Error;
11986    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
11987        Ok(ScString(x.try_into()?))
11988    }
11989}
11990
11991#[cfg(feature = "alloc")]
11992impl TryFrom<&Vec<u8>> for ScString {
11993    type Error = Error;
11994    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
11995        Ok(ScString(x.try_into()?))
11996    }
11997}
11998
11999impl AsRef<Vec<u8>> for ScString {
12000    #[must_use]
12001    fn as_ref(&self) -> &Vec<u8> {
12002        &self.0 .0
12003    }
12004}
12005
12006impl AsRef<[u8]> for ScString {
12007    #[cfg(feature = "alloc")]
12008    #[must_use]
12009    fn as_ref(&self) -> &[u8] {
12010        &self.0 .0
12011    }
12012    #[cfg(not(feature = "alloc"))]
12013    #[must_use]
12014    fn as_ref(&self) -> &[u8] {
12015        self.0 .0
12016    }
12017}
12018
12019/// ScSymbol is an XDR Typedef defines as:
12020///
12021/// ```text
12022/// typedef string SCSymbol<SCSYMBOL_LIMIT>;
12023/// ```
12024///
12025#[cfg_eval::cfg_eval]
12026#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
12027#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12028#[cfg_attr(
12029    all(feature = "serde", feature = "alloc"),
12030    serde_with::serde_as,
12031    derive(serde::Serialize, serde::Deserialize),
12032    serde(rename_all = "snake_case")
12033)]
12034#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12035#[derive(Debug)]
12036pub struct ScSymbol(pub StringM<32>);
12037
12038impl From<ScSymbol> for StringM<32> {
12039    #[must_use]
12040    fn from(x: ScSymbol) -> Self {
12041        x.0
12042    }
12043}
12044
12045impl From<StringM<32>> for ScSymbol {
12046    #[must_use]
12047    fn from(x: StringM<32>) -> Self {
12048        ScSymbol(x)
12049    }
12050}
12051
12052impl AsRef<StringM<32>> for ScSymbol {
12053    #[must_use]
12054    fn as_ref(&self) -> &StringM<32> {
12055        &self.0
12056    }
12057}
12058
12059impl ReadXdr for ScSymbol {
12060    #[cfg(feature = "std")]
12061    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
12062        r.with_limited_depth(|r| {
12063            let i = StringM::<32>::read_xdr(r)?;
12064            let v = ScSymbol(i);
12065            Ok(v)
12066        })
12067    }
12068}
12069
12070impl WriteXdr for ScSymbol {
12071    #[cfg(feature = "std")]
12072    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
12073        w.with_limited_depth(|w| self.0.write_xdr(w))
12074    }
12075}
12076
12077impl Deref for ScSymbol {
12078    type Target = StringM<32>;
12079    fn deref(&self) -> &Self::Target {
12080        &self.0
12081    }
12082}
12083
12084impl From<ScSymbol> for Vec<u8> {
12085    #[must_use]
12086    fn from(x: ScSymbol) -> Self {
12087        x.0 .0
12088    }
12089}
12090
12091impl TryFrom<Vec<u8>> for ScSymbol {
12092    type Error = Error;
12093    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
12094        Ok(ScSymbol(x.try_into()?))
12095    }
12096}
12097
12098#[cfg(feature = "alloc")]
12099impl TryFrom<&Vec<u8>> for ScSymbol {
12100    type Error = Error;
12101    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
12102        Ok(ScSymbol(x.try_into()?))
12103    }
12104}
12105
12106impl AsRef<Vec<u8>> for ScSymbol {
12107    #[must_use]
12108    fn as_ref(&self) -> &Vec<u8> {
12109        &self.0 .0
12110    }
12111}
12112
12113impl AsRef<[u8]> for ScSymbol {
12114    #[cfg(feature = "alloc")]
12115    #[must_use]
12116    fn as_ref(&self) -> &[u8] {
12117        &self.0 .0
12118    }
12119    #[cfg(not(feature = "alloc"))]
12120    #[must_use]
12121    fn as_ref(&self) -> &[u8] {
12122        self.0 .0
12123    }
12124}
12125
12126/// ScNonceKey is an XDR Struct defines as:
12127///
12128/// ```text
12129/// struct SCNonceKey {
12130///     int64 nonce;
12131/// };
12132/// ```
12133///
12134#[cfg_attr(feature = "alloc", derive(Default))]
12135#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
12136#[cfg_eval::cfg_eval]
12137#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12138#[cfg_attr(
12139    all(feature = "serde", feature = "alloc"),
12140    serde_with::serde_as,
12141    derive(serde::Serialize, serde::Deserialize),
12142    serde(rename_all = "snake_case")
12143)]
12144#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12145pub struct ScNonceKey {
12146    #[cfg_attr(
12147        all(feature = "serde", feature = "alloc"),
12148        serde_as(as = "NumberOrString")
12149    )]
12150    pub nonce: i64,
12151}
12152
12153impl ReadXdr for ScNonceKey {
12154    #[cfg(feature = "std")]
12155    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
12156        r.with_limited_depth(|r| {
12157            Ok(Self {
12158                nonce: i64::read_xdr(r)?,
12159            })
12160        })
12161    }
12162}
12163
12164impl WriteXdr for ScNonceKey {
12165    #[cfg(feature = "std")]
12166    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
12167        w.with_limited_depth(|w| {
12168            self.nonce.write_xdr(w)?;
12169            Ok(())
12170        })
12171    }
12172}
12173
12174/// ScContractInstance is an XDR Struct defines as:
12175///
12176/// ```text
12177/// struct SCContractInstance {
12178///     ContractExecutable executable;
12179///     SCMap* storage;
12180/// };
12181/// ```
12182///
12183#[cfg_attr(feature = "alloc", derive(Default))]
12184#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
12185#[cfg_eval::cfg_eval]
12186#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12187#[cfg_attr(
12188    all(feature = "serde", feature = "alloc"),
12189    serde_with::serde_as,
12190    derive(serde::Serialize, serde::Deserialize),
12191    serde(rename_all = "snake_case")
12192)]
12193#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12194pub struct ScContractInstance {
12195    pub executable: ContractExecutable,
12196    pub storage: Option<ScMap>,
12197}
12198
12199impl ReadXdr for ScContractInstance {
12200    #[cfg(feature = "std")]
12201    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
12202        r.with_limited_depth(|r| {
12203            Ok(Self {
12204                executable: ContractExecutable::read_xdr(r)?,
12205                storage: Option::<ScMap>::read_xdr(r)?,
12206            })
12207        })
12208    }
12209}
12210
12211impl WriteXdr for ScContractInstance {
12212    #[cfg(feature = "std")]
12213    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
12214        w.with_limited_depth(|w| {
12215            self.executable.write_xdr(w)?;
12216            self.storage.write_xdr(w)?;
12217            Ok(())
12218        })
12219    }
12220}
12221
12222/// ScVal is an XDR Union defines as:
12223///
12224/// ```text
12225/// union SCVal switch (SCValType type)
12226/// {
12227///
12228/// case SCV_BOOL:
12229///     bool b;
12230/// case SCV_VOID:
12231///     void;
12232/// case SCV_ERROR:
12233///     SCError error;
12234///
12235/// case SCV_U32:
12236///     uint32 u32;
12237/// case SCV_I32:
12238///     int32 i32;
12239///
12240/// case SCV_U64:
12241///     uint64 u64;
12242/// case SCV_I64:
12243///     int64 i64;
12244/// case SCV_TIMEPOINT:
12245///     TimePoint timepoint;
12246/// case SCV_DURATION:
12247///     Duration duration;
12248///
12249/// case SCV_U128:
12250///     UInt128Parts u128;
12251/// case SCV_I128:
12252///     Int128Parts i128;
12253///
12254/// case SCV_U256:
12255///     UInt256Parts u256;
12256/// case SCV_I256:
12257///     Int256Parts i256;
12258///
12259/// case SCV_BYTES:
12260///     SCBytes bytes;
12261/// case SCV_STRING:
12262///     SCString str;
12263/// case SCV_SYMBOL:
12264///     SCSymbol sym;
12265///
12266/// // Vec and Map are recursive so need to live
12267/// // behind an option, due to xdrpp limitations.
12268/// case SCV_VEC:
12269///     SCVec *vec;
12270/// case SCV_MAP:
12271///     SCMap *map;
12272///
12273/// case SCV_ADDRESS:
12274///     SCAddress address;
12275///
12276/// // Special SCVals reserved for system-constructed contract-data
12277/// // ledger keys, not generally usable elsewhere.
12278/// case SCV_CONTRACT_INSTANCE:
12279///     SCContractInstance instance;
12280/// case SCV_LEDGER_KEY_CONTRACT_INSTANCE:
12281///     void;
12282/// case SCV_LEDGER_KEY_NONCE:
12283///     SCNonceKey nonce_key;
12284/// };
12285/// ```
12286///
12287// union with discriminant ScValType
12288#[cfg_eval::cfg_eval]
12289#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
12290#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12291#[cfg_attr(
12292    all(feature = "serde", feature = "alloc"),
12293    serde_with::serde_as,
12294    derive(serde::Serialize, serde::Deserialize),
12295    serde(rename_all = "snake_case")
12296)]
12297#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12298#[allow(clippy::large_enum_variant)]
12299pub enum ScVal {
12300    Bool(bool),
12301    Void,
12302    Error(ScError),
12303    U32(u32),
12304    I32(i32),
12305    U64(
12306        #[cfg_attr(
12307            all(feature = "serde", feature = "alloc"),
12308            serde_as(as = "NumberOrString")
12309        )]
12310        u64,
12311    ),
12312    I64(
12313        #[cfg_attr(
12314            all(feature = "serde", feature = "alloc"),
12315            serde_as(as = "NumberOrString")
12316        )]
12317        i64,
12318    ),
12319    Timepoint(TimePoint),
12320    Duration(Duration),
12321    U128(UInt128Parts),
12322    I128(Int128Parts),
12323    U256(UInt256Parts),
12324    I256(Int256Parts),
12325    Bytes(ScBytes),
12326    String(ScString),
12327    Symbol(ScSymbol),
12328    Vec(Option<ScVec>),
12329    Map(Option<ScMap>),
12330    Address(ScAddress),
12331    ContractInstance(ScContractInstance),
12332    LedgerKeyContractInstance,
12333    LedgerKeyNonce(ScNonceKey),
12334}
12335
12336#[cfg(feature = "alloc")]
12337impl Default for ScVal {
12338    fn default() -> Self {
12339        Self::Bool(bool::default())
12340    }
12341}
12342
12343impl ScVal {
12344    pub const VARIANTS: [ScValType; 22] = [
12345        ScValType::Bool,
12346        ScValType::Void,
12347        ScValType::Error,
12348        ScValType::U32,
12349        ScValType::I32,
12350        ScValType::U64,
12351        ScValType::I64,
12352        ScValType::Timepoint,
12353        ScValType::Duration,
12354        ScValType::U128,
12355        ScValType::I128,
12356        ScValType::U256,
12357        ScValType::I256,
12358        ScValType::Bytes,
12359        ScValType::String,
12360        ScValType::Symbol,
12361        ScValType::Vec,
12362        ScValType::Map,
12363        ScValType::Address,
12364        ScValType::ContractInstance,
12365        ScValType::LedgerKeyContractInstance,
12366        ScValType::LedgerKeyNonce,
12367    ];
12368    pub const VARIANTS_STR: [&'static str; 22] = [
12369        "Bool",
12370        "Void",
12371        "Error",
12372        "U32",
12373        "I32",
12374        "U64",
12375        "I64",
12376        "Timepoint",
12377        "Duration",
12378        "U128",
12379        "I128",
12380        "U256",
12381        "I256",
12382        "Bytes",
12383        "String",
12384        "Symbol",
12385        "Vec",
12386        "Map",
12387        "Address",
12388        "ContractInstance",
12389        "LedgerKeyContractInstance",
12390        "LedgerKeyNonce",
12391    ];
12392
12393    #[must_use]
12394    pub const fn name(&self) -> &'static str {
12395        match self {
12396            Self::Bool(_) => "Bool",
12397            Self::Void => "Void",
12398            Self::Error(_) => "Error",
12399            Self::U32(_) => "U32",
12400            Self::I32(_) => "I32",
12401            Self::U64(_) => "U64",
12402            Self::I64(_) => "I64",
12403            Self::Timepoint(_) => "Timepoint",
12404            Self::Duration(_) => "Duration",
12405            Self::U128(_) => "U128",
12406            Self::I128(_) => "I128",
12407            Self::U256(_) => "U256",
12408            Self::I256(_) => "I256",
12409            Self::Bytes(_) => "Bytes",
12410            Self::String(_) => "String",
12411            Self::Symbol(_) => "Symbol",
12412            Self::Vec(_) => "Vec",
12413            Self::Map(_) => "Map",
12414            Self::Address(_) => "Address",
12415            Self::ContractInstance(_) => "ContractInstance",
12416            Self::LedgerKeyContractInstance => "LedgerKeyContractInstance",
12417            Self::LedgerKeyNonce(_) => "LedgerKeyNonce",
12418        }
12419    }
12420
12421    #[must_use]
12422    pub const fn discriminant(&self) -> ScValType {
12423        #[allow(clippy::match_same_arms)]
12424        match self {
12425            Self::Bool(_) => ScValType::Bool,
12426            Self::Void => ScValType::Void,
12427            Self::Error(_) => ScValType::Error,
12428            Self::U32(_) => ScValType::U32,
12429            Self::I32(_) => ScValType::I32,
12430            Self::U64(_) => ScValType::U64,
12431            Self::I64(_) => ScValType::I64,
12432            Self::Timepoint(_) => ScValType::Timepoint,
12433            Self::Duration(_) => ScValType::Duration,
12434            Self::U128(_) => ScValType::U128,
12435            Self::I128(_) => ScValType::I128,
12436            Self::U256(_) => ScValType::U256,
12437            Self::I256(_) => ScValType::I256,
12438            Self::Bytes(_) => ScValType::Bytes,
12439            Self::String(_) => ScValType::String,
12440            Self::Symbol(_) => ScValType::Symbol,
12441            Self::Vec(_) => ScValType::Vec,
12442            Self::Map(_) => ScValType::Map,
12443            Self::Address(_) => ScValType::Address,
12444            Self::ContractInstance(_) => ScValType::ContractInstance,
12445            Self::LedgerKeyContractInstance => ScValType::LedgerKeyContractInstance,
12446            Self::LedgerKeyNonce(_) => ScValType::LedgerKeyNonce,
12447        }
12448    }
12449
12450    #[must_use]
12451    pub const fn variants() -> [ScValType; 22] {
12452        Self::VARIANTS
12453    }
12454}
12455
12456impl Name for ScVal {
12457    #[must_use]
12458    fn name(&self) -> &'static str {
12459        Self::name(self)
12460    }
12461}
12462
12463impl Discriminant<ScValType> for ScVal {
12464    #[must_use]
12465    fn discriminant(&self) -> ScValType {
12466        Self::discriminant(self)
12467    }
12468}
12469
12470impl Variants<ScValType> for ScVal {
12471    fn variants() -> slice::Iter<'static, ScValType> {
12472        Self::VARIANTS.iter()
12473    }
12474}
12475
12476impl Union<ScValType> for ScVal {}
12477
12478impl ReadXdr for ScVal {
12479    #[cfg(feature = "std")]
12480    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
12481        r.with_limited_depth(|r| {
12482            let dv: ScValType = <ScValType as ReadXdr>::read_xdr(r)?;
12483            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
12484            let v = match dv {
12485                ScValType::Bool => Self::Bool(bool::read_xdr(r)?),
12486                ScValType::Void => Self::Void,
12487                ScValType::Error => Self::Error(ScError::read_xdr(r)?),
12488                ScValType::U32 => Self::U32(u32::read_xdr(r)?),
12489                ScValType::I32 => Self::I32(i32::read_xdr(r)?),
12490                ScValType::U64 => Self::U64(u64::read_xdr(r)?),
12491                ScValType::I64 => Self::I64(i64::read_xdr(r)?),
12492                ScValType::Timepoint => Self::Timepoint(TimePoint::read_xdr(r)?),
12493                ScValType::Duration => Self::Duration(Duration::read_xdr(r)?),
12494                ScValType::U128 => Self::U128(UInt128Parts::read_xdr(r)?),
12495                ScValType::I128 => Self::I128(Int128Parts::read_xdr(r)?),
12496                ScValType::U256 => Self::U256(UInt256Parts::read_xdr(r)?),
12497                ScValType::I256 => Self::I256(Int256Parts::read_xdr(r)?),
12498                ScValType::Bytes => Self::Bytes(ScBytes::read_xdr(r)?),
12499                ScValType::String => Self::String(ScString::read_xdr(r)?),
12500                ScValType::Symbol => Self::Symbol(ScSymbol::read_xdr(r)?),
12501                ScValType::Vec => Self::Vec(Option::<ScVec>::read_xdr(r)?),
12502                ScValType::Map => Self::Map(Option::<ScMap>::read_xdr(r)?),
12503                ScValType::Address => Self::Address(ScAddress::read_xdr(r)?),
12504                ScValType::ContractInstance => {
12505                    Self::ContractInstance(ScContractInstance::read_xdr(r)?)
12506                }
12507                ScValType::LedgerKeyContractInstance => Self::LedgerKeyContractInstance,
12508                ScValType::LedgerKeyNonce => Self::LedgerKeyNonce(ScNonceKey::read_xdr(r)?),
12509                #[allow(unreachable_patterns)]
12510                _ => return Err(Error::Invalid),
12511            };
12512            Ok(v)
12513        })
12514    }
12515}
12516
12517impl WriteXdr for ScVal {
12518    #[cfg(feature = "std")]
12519    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
12520        w.with_limited_depth(|w| {
12521            self.discriminant().write_xdr(w)?;
12522            #[allow(clippy::match_same_arms)]
12523            match self {
12524                Self::Bool(v) => v.write_xdr(w)?,
12525                Self::Void => ().write_xdr(w)?,
12526                Self::Error(v) => v.write_xdr(w)?,
12527                Self::U32(v) => v.write_xdr(w)?,
12528                Self::I32(v) => v.write_xdr(w)?,
12529                Self::U64(v) => v.write_xdr(w)?,
12530                Self::I64(v) => v.write_xdr(w)?,
12531                Self::Timepoint(v) => v.write_xdr(w)?,
12532                Self::Duration(v) => v.write_xdr(w)?,
12533                Self::U128(v) => v.write_xdr(w)?,
12534                Self::I128(v) => v.write_xdr(w)?,
12535                Self::U256(v) => v.write_xdr(w)?,
12536                Self::I256(v) => v.write_xdr(w)?,
12537                Self::Bytes(v) => v.write_xdr(w)?,
12538                Self::String(v) => v.write_xdr(w)?,
12539                Self::Symbol(v) => v.write_xdr(w)?,
12540                Self::Vec(v) => v.write_xdr(w)?,
12541                Self::Map(v) => v.write_xdr(w)?,
12542                Self::Address(v) => v.write_xdr(w)?,
12543                Self::ContractInstance(v) => v.write_xdr(w)?,
12544                Self::LedgerKeyContractInstance => ().write_xdr(w)?,
12545                Self::LedgerKeyNonce(v) => v.write_xdr(w)?,
12546            };
12547            Ok(())
12548        })
12549    }
12550}
12551
12552/// ScMapEntry is an XDR Struct defines as:
12553///
12554/// ```text
12555/// struct SCMapEntry
12556/// {
12557///     SCVal key;
12558///     SCVal val;
12559/// };
12560/// ```
12561///
12562#[cfg_attr(feature = "alloc", derive(Default))]
12563#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
12564#[cfg_eval::cfg_eval]
12565#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12566#[cfg_attr(
12567    all(feature = "serde", feature = "alloc"),
12568    serde_with::serde_as,
12569    derive(serde::Serialize, serde::Deserialize),
12570    serde(rename_all = "snake_case")
12571)]
12572#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12573pub struct ScMapEntry {
12574    pub key: ScVal,
12575    pub val: ScVal,
12576}
12577
12578impl ReadXdr for ScMapEntry {
12579    #[cfg(feature = "std")]
12580    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
12581        r.with_limited_depth(|r| {
12582            Ok(Self {
12583                key: ScVal::read_xdr(r)?,
12584                val: ScVal::read_xdr(r)?,
12585            })
12586        })
12587    }
12588}
12589
12590impl WriteXdr for ScMapEntry {
12591    #[cfg(feature = "std")]
12592    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
12593        w.with_limited_depth(|w| {
12594            self.key.write_xdr(w)?;
12595            self.val.write_xdr(w)?;
12596            Ok(())
12597        })
12598    }
12599}
12600
12601/// LedgerCloseMetaBatch is an XDR Struct defines as:
12602///
12603/// ```text
12604/// struct LedgerCloseMetaBatch
12605/// {
12606///     // starting ledger sequence number in the batch
12607///     uint32 startSequence;
12608///
12609///     // ending ledger sequence number in the batch
12610///     uint32 endSequence;
12611///
12612///     // Ledger close meta for each ledger within the batch
12613///     LedgerCloseMeta ledgerCloseMetas<>;
12614/// };
12615/// ```
12616///
12617#[cfg_attr(feature = "alloc", derive(Default))]
12618#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
12619#[cfg_eval::cfg_eval]
12620#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12621#[cfg_attr(
12622    all(feature = "serde", feature = "alloc"),
12623    serde_with::serde_as,
12624    derive(serde::Serialize, serde::Deserialize),
12625    serde(rename_all = "snake_case")
12626)]
12627#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12628pub struct LedgerCloseMetaBatch {
12629    pub start_sequence: u32,
12630    pub end_sequence: u32,
12631    pub ledger_close_metas: VecM<LedgerCloseMeta>,
12632}
12633
12634impl ReadXdr for LedgerCloseMetaBatch {
12635    #[cfg(feature = "std")]
12636    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
12637        r.with_limited_depth(|r| {
12638            Ok(Self {
12639                start_sequence: u32::read_xdr(r)?,
12640                end_sequence: u32::read_xdr(r)?,
12641                ledger_close_metas: VecM::<LedgerCloseMeta>::read_xdr(r)?,
12642            })
12643        })
12644    }
12645}
12646
12647impl WriteXdr for LedgerCloseMetaBatch {
12648    #[cfg(feature = "std")]
12649    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
12650        w.with_limited_depth(|w| {
12651            self.start_sequence.write_xdr(w)?;
12652            self.end_sequence.write_xdr(w)?;
12653            self.ledger_close_metas.write_xdr(w)?;
12654            Ok(())
12655        })
12656    }
12657}
12658
12659/// StoredTransactionSet is an XDR Union defines as:
12660///
12661/// ```text
12662/// union StoredTransactionSet switch (int v)
12663/// {
12664/// case 0:
12665/// 	TransactionSet txSet;
12666/// case 1:
12667/// 	GeneralizedTransactionSet generalizedTxSet;
12668/// };
12669/// ```
12670///
12671// union with discriminant i32
12672#[cfg_eval::cfg_eval]
12673#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
12674#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12675#[cfg_attr(
12676    all(feature = "serde", feature = "alloc"),
12677    serde_with::serde_as,
12678    derive(serde::Serialize, serde::Deserialize),
12679    serde(rename_all = "snake_case")
12680)]
12681#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12682#[allow(clippy::large_enum_variant)]
12683pub enum StoredTransactionSet {
12684    V0(TransactionSet),
12685    V1(GeneralizedTransactionSet),
12686}
12687
12688#[cfg(feature = "alloc")]
12689impl Default for StoredTransactionSet {
12690    fn default() -> Self {
12691        Self::V0(TransactionSet::default())
12692    }
12693}
12694
12695impl StoredTransactionSet {
12696    pub const VARIANTS: [i32; 2] = [0, 1];
12697    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
12698
12699    #[must_use]
12700    pub const fn name(&self) -> &'static str {
12701        match self {
12702            Self::V0(_) => "V0",
12703            Self::V1(_) => "V1",
12704        }
12705    }
12706
12707    #[must_use]
12708    pub const fn discriminant(&self) -> i32 {
12709        #[allow(clippy::match_same_arms)]
12710        match self {
12711            Self::V0(_) => 0,
12712            Self::V1(_) => 1,
12713        }
12714    }
12715
12716    #[must_use]
12717    pub const fn variants() -> [i32; 2] {
12718        Self::VARIANTS
12719    }
12720}
12721
12722impl Name for StoredTransactionSet {
12723    #[must_use]
12724    fn name(&self) -> &'static str {
12725        Self::name(self)
12726    }
12727}
12728
12729impl Discriminant<i32> for StoredTransactionSet {
12730    #[must_use]
12731    fn discriminant(&self) -> i32 {
12732        Self::discriminant(self)
12733    }
12734}
12735
12736impl Variants<i32> for StoredTransactionSet {
12737    fn variants() -> slice::Iter<'static, i32> {
12738        Self::VARIANTS.iter()
12739    }
12740}
12741
12742impl Union<i32> for StoredTransactionSet {}
12743
12744impl ReadXdr for StoredTransactionSet {
12745    #[cfg(feature = "std")]
12746    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
12747        r.with_limited_depth(|r| {
12748            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
12749            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
12750            let v = match dv {
12751                0 => Self::V0(TransactionSet::read_xdr(r)?),
12752                1 => Self::V1(GeneralizedTransactionSet::read_xdr(r)?),
12753                #[allow(unreachable_patterns)]
12754                _ => return Err(Error::Invalid),
12755            };
12756            Ok(v)
12757        })
12758    }
12759}
12760
12761impl WriteXdr for StoredTransactionSet {
12762    #[cfg(feature = "std")]
12763    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
12764        w.with_limited_depth(|w| {
12765            self.discriminant().write_xdr(w)?;
12766            #[allow(clippy::match_same_arms)]
12767            match self {
12768                Self::V0(v) => v.write_xdr(w)?,
12769                Self::V1(v) => v.write_xdr(w)?,
12770            };
12771            Ok(())
12772        })
12773    }
12774}
12775
12776/// StoredDebugTransactionSet is an XDR Struct defines as:
12777///
12778/// ```text
12779/// struct StoredDebugTransactionSet
12780/// {
12781/// 	StoredTransactionSet txSet;
12782/// 	uint32 ledgerSeq;
12783/// 	StellarValue scpValue;
12784/// };
12785/// ```
12786///
12787#[cfg_attr(feature = "alloc", derive(Default))]
12788#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
12789#[cfg_eval::cfg_eval]
12790#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12791#[cfg_attr(
12792    all(feature = "serde", feature = "alloc"),
12793    serde_with::serde_as,
12794    derive(serde::Serialize, serde::Deserialize),
12795    serde(rename_all = "snake_case")
12796)]
12797#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12798pub struct StoredDebugTransactionSet {
12799    pub tx_set: StoredTransactionSet,
12800    pub ledger_seq: u32,
12801    pub scp_value: StellarValue,
12802}
12803
12804impl ReadXdr for StoredDebugTransactionSet {
12805    #[cfg(feature = "std")]
12806    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
12807        r.with_limited_depth(|r| {
12808            Ok(Self {
12809                tx_set: StoredTransactionSet::read_xdr(r)?,
12810                ledger_seq: u32::read_xdr(r)?,
12811                scp_value: StellarValue::read_xdr(r)?,
12812            })
12813        })
12814    }
12815}
12816
12817impl WriteXdr for StoredDebugTransactionSet {
12818    #[cfg(feature = "std")]
12819    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
12820        w.with_limited_depth(|w| {
12821            self.tx_set.write_xdr(w)?;
12822            self.ledger_seq.write_xdr(w)?;
12823            self.scp_value.write_xdr(w)?;
12824            Ok(())
12825        })
12826    }
12827}
12828
12829/// PersistedScpStateV0 is an XDR Struct defines as:
12830///
12831/// ```text
12832/// struct PersistedSCPStateV0
12833/// {
12834/// 	SCPEnvelope scpEnvelopes<>;
12835/// 	SCPQuorumSet quorumSets<>;
12836/// 	StoredTransactionSet txSets<>;
12837/// };
12838/// ```
12839///
12840#[cfg_attr(feature = "alloc", derive(Default))]
12841#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
12842#[cfg_eval::cfg_eval]
12843#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12844#[cfg_attr(
12845    all(feature = "serde", feature = "alloc"),
12846    serde_with::serde_as,
12847    derive(serde::Serialize, serde::Deserialize),
12848    serde(rename_all = "snake_case")
12849)]
12850#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12851pub struct PersistedScpStateV0 {
12852    pub scp_envelopes: VecM<ScpEnvelope>,
12853    pub quorum_sets: VecM<ScpQuorumSet>,
12854    pub tx_sets: VecM<StoredTransactionSet>,
12855}
12856
12857impl ReadXdr for PersistedScpStateV0 {
12858    #[cfg(feature = "std")]
12859    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
12860        r.with_limited_depth(|r| {
12861            Ok(Self {
12862                scp_envelopes: VecM::<ScpEnvelope>::read_xdr(r)?,
12863                quorum_sets: VecM::<ScpQuorumSet>::read_xdr(r)?,
12864                tx_sets: VecM::<StoredTransactionSet>::read_xdr(r)?,
12865            })
12866        })
12867    }
12868}
12869
12870impl WriteXdr for PersistedScpStateV0 {
12871    #[cfg(feature = "std")]
12872    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
12873        w.with_limited_depth(|w| {
12874            self.scp_envelopes.write_xdr(w)?;
12875            self.quorum_sets.write_xdr(w)?;
12876            self.tx_sets.write_xdr(w)?;
12877            Ok(())
12878        })
12879    }
12880}
12881
12882/// PersistedScpStateV1 is an XDR Struct defines as:
12883///
12884/// ```text
12885/// struct PersistedSCPStateV1
12886/// {
12887/// 	// Tx sets are saved separately
12888/// 	SCPEnvelope scpEnvelopes<>;
12889/// 	SCPQuorumSet quorumSets<>;
12890/// };
12891/// ```
12892///
12893#[cfg_attr(feature = "alloc", derive(Default))]
12894#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
12895#[cfg_eval::cfg_eval]
12896#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12897#[cfg_attr(
12898    all(feature = "serde", feature = "alloc"),
12899    serde_with::serde_as,
12900    derive(serde::Serialize, serde::Deserialize),
12901    serde(rename_all = "snake_case")
12902)]
12903#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12904pub struct PersistedScpStateV1 {
12905    pub scp_envelopes: VecM<ScpEnvelope>,
12906    pub quorum_sets: VecM<ScpQuorumSet>,
12907}
12908
12909impl ReadXdr for PersistedScpStateV1 {
12910    #[cfg(feature = "std")]
12911    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
12912        r.with_limited_depth(|r| {
12913            Ok(Self {
12914                scp_envelopes: VecM::<ScpEnvelope>::read_xdr(r)?,
12915                quorum_sets: VecM::<ScpQuorumSet>::read_xdr(r)?,
12916            })
12917        })
12918    }
12919}
12920
12921impl WriteXdr for PersistedScpStateV1 {
12922    #[cfg(feature = "std")]
12923    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
12924        w.with_limited_depth(|w| {
12925            self.scp_envelopes.write_xdr(w)?;
12926            self.quorum_sets.write_xdr(w)?;
12927            Ok(())
12928        })
12929    }
12930}
12931
12932/// PersistedScpState is an XDR Union defines as:
12933///
12934/// ```text
12935/// union PersistedSCPState switch (int v)
12936/// {
12937/// case 0:
12938/// 	PersistedSCPStateV0 v0;
12939/// case 1:
12940/// 	PersistedSCPStateV1 v1;
12941/// };
12942/// ```
12943///
12944// union with discriminant i32
12945#[cfg_eval::cfg_eval]
12946#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
12947#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
12948#[cfg_attr(
12949    all(feature = "serde", feature = "alloc"),
12950    serde_with::serde_as,
12951    derive(serde::Serialize, serde::Deserialize),
12952    serde(rename_all = "snake_case")
12953)]
12954#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12955#[allow(clippy::large_enum_variant)]
12956pub enum PersistedScpState {
12957    V0(PersistedScpStateV0),
12958    V1(PersistedScpStateV1),
12959}
12960
12961#[cfg(feature = "alloc")]
12962impl Default for PersistedScpState {
12963    fn default() -> Self {
12964        Self::V0(PersistedScpStateV0::default())
12965    }
12966}
12967
12968impl PersistedScpState {
12969    pub const VARIANTS: [i32; 2] = [0, 1];
12970    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
12971
12972    #[must_use]
12973    pub const fn name(&self) -> &'static str {
12974        match self {
12975            Self::V0(_) => "V0",
12976            Self::V1(_) => "V1",
12977        }
12978    }
12979
12980    #[must_use]
12981    pub const fn discriminant(&self) -> i32 {
12982        #[allow(clippy::match_same_arms)]
12983        match self {
12984            Self::V0(_) => 0,
12985            Self::V1(_) => 1,
12986        }
12987    }
12988
12989    #[must_use]
12990    pub const fn variants() -> [i32; 2] {
12991        Self::VARIANTS
12992    }
12993}
12994
12995impl Name for PersistedScpState {
12996    #[must_use]
12997    fn name(&self) -> &'static str {
12998        Self::name(self)
12999    }
13000}
13001
13002impl Discriminant<i32> for PersistedScpState {
13003    #[must_use]
13004    fn discriminant(&self) -> i32 {
13005        Self::discriminant(self)
13006    }
13007}
13008
13009impl Variants<i32> for PersistedScpState {
13010    fn variants() -> slice::Iter<'static, i32> {
13011        Self::VARIANTS.iter()
13012    }
13013}
13014
13015impl Union<i32> for PersistedScpState {}
13016
13017impl ReadXdr for PersistedScpState {
13018    #[cfg(feature = "std")]
13019    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
13020        r.with_limited_depth(|r| {
13021            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
13022            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
13023            let v = match dv {
13024                0 => Self::V0(PersistedScpStateV0::read_xdr(r)?),
13025                1 => Self::V1(PersistedScpStateV1::read_xdr(r)?),
13026                #[allow(unreachable_patterns)]
13027                _ => return Err(Error::Invalid),
13028            };
13029            Ok(v)
13030        })
13031    }
13032}
13033
13034impl WriteXdr for PersistedScpState {
13035    #[cfg(feature = "std")]
13036    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
13037        w.with_limited_depth(|w| {
13038            self.discriminant().write_xdr(w)?;
13039            #[allow(clippy::match_same_arms)]
13040            match self {
13041                Self::V0(v) => v.write_xdr(w)?,
13042                Self::V1(v) => v.write_xdr(w)?,
13043            };
13044            Ok(())
13045        })
13046    }
13047}
13048
13049/// Thresholds is an XDR Typedef defines as:
13050///
13051/// ```text
13052/// typedef opaque Thresholds[4];
13053/// ```
13054///
13055#[cfg_eval::cfg_eval]
13056#[cfg_attr(feature = "alloc", derive(Default))]
13057#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
13058#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13059#[cfg_attr(
13060    all(feature = "serde", feature = "alloc"),
13061    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
13062)]
13063pub struct Thresholds(pub [u8; 4]);
13064
13065impl core::fmt::Debug for Thresholds {
13066    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
13067        let v = &self.0;
13068        write!(f, "Thresholds(")?;
13069        for b in v {
13070            write!(f, "{b:02x}")?;
13071        }
13072        write!(f, ")")?;
13073        Ok(())
13074    }
13075}
13076impl core::fmt::Display for Thresholds {
13077    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
13078        let v = &self.0;
13079        for b in v {
13080            write!(f, "{b:02x}")?;
13081        }
13082        Ok(())
13083    }
13084}
13085
13086#[cfg(feature = "alloc")]
13087impl core::str::FromStr for Thresholds {
13088    type Err = Error;
13089    fn from_str(s: &str) -> core::result::Result<Self, Self::Err> {
13090        hex::decode(s).map_err(|_| Error::InvalidHex)?.try_into()
13091    }
13092}
13093#[cfg(feature = "schemars")]
13094impl schemars::JsonSchema for Thresholds {
13095    fn schema_name() -> String {
13096        "Thresholds".to_string()
13097    }
13098
13099    fn is_referenceable() -> bool {
13100        false
13101    }
13102
13103    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
13104        let schema = String::json_schema(gen);
13105        if let schemars::schema::Schema::Object(mut schema) = schema {
13106            schema.extensions.insert(
13107                "contentEncoding".to_owned(),
13108                serde_json::Value::String("hex".to_string()),
13109            );
13110            schema.extensions.insert(
13111                "contentMediaType".to_owned(),
13112                serde_json::Value::String("application/binary".to_string()),
13113            );
13114            let string = *schema.string.unwrap_or_default().clone();
13115            schema.string = Some(Box::new(schemars::schema::StringValidation {
13116                max_length: 4_u32.checked_mul(2).map(Some).unwrap_or_default(),
13117                min_length: 4_u32.checked_mul(2).map(Some).unwrap_or_default(),
13118                ..string
13119            }));
13120            schema.into()
13121        } else {
13122            schema
13123        }
13124    }
13125}
13126impl From<Thresholds> for [u8; 4] {
13127    #[must_use]
13128    fn from(x: Thresholds) -> Self {
13129        x.0
13130    }
13131}
13132
13133impl From<[u8; 4]> for Thresholds {
13134    #[must_use]
13135    fn from(x: [u8; 4]) -> Self {
13136        Thresholds(x)
13137    }
13138}
13139
13140impl AsRef<[u8; 4]> for Thresholds {
13141    #[must_use]
13142    fn as_ref(&self) -> &[u8; 4] {
13143        &self.0
13144    }
13145}
13146
13147impl ReadXdr for Thresholds {
13148    #[cfg(feature = "std")]
13149    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
13150        r.with_limited_depth(|r| {
13151            let i = <[u8; 4]>::read_xdr(r)?;
13152            let v = Thresholds(i);
13153            Ok(v)
13154        })
13155    }
13156}
13157
13158impl WriteXdr for Thresholds {
13159    #[cfg(feature = "std")]
13160    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
13161        w.with_limited_depth(|w| self.0.write_xdr(w))
13162    }
13163}
13164
13165impl Thresholds {
13166    #[must_use]
13167    pub fn as_slice(&self) -> &[u8] {
13168        &self.0
13169    }
13170}
13171
13172#[cfg(feature = "alloc")]
13173impl TryFrom<Vec<u8>> for Thresholds {
13174    type Error = Error;
13175    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
13176        x.as_slice().try_into()
13177    }
13178}
13179
13180#[cfg(feature = "alloc")]
13181impl TryFrom<&Vec<u8>> for Thresholds {
13182    type Error = Error;
13183    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
13184        x.as_slice().try_into()
13185    }
13186}
13187
13188impl TryFrom<&[u8]> for Thresholds {
13189    type Error = Error;
13190    fn try_from(x: &[u8]) -> Result<Self, Error> {
13191        Ok(Thresholds(x.try_into()?))
13192    }
13193}
13194
13195impl AsRef<[u8]> for Thresholds {
13196    #[must_use]
13197    fn as_ref(&self) -> &[u8] {
13198        &self.0
13199    }
13200}
13201
13202/// String32 is an XDR Typedef defines as:
13203///
13204/// ```text
13205/// typedef string string32<32>;
13206/// ```
13207///
13208#[cfg_eval::cfg_eval]
13209#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
13210#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13211#[cfg_attr(
13212    all(feature = "serde", feature = "alloc"),
13213    serde_with::serde_as,
13214    derive(serde::Serialize, serde::Deserialize),
13215    serde(rename_all = "snake_case")
13216)]
13217#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
13218#[derive(Debug)]
13219pub struct String32(pub StringM<32>);
13220
13221impl From<String32> for StringM<32> {
13222    #[must_use]
13223    fn from(x: String32) -> Self {
13224        x.0
13225    }
13226}
13227
13228impl From<StringM<32>> for String32 {
13229    #[must_use]
13230    fn from(x: StringM<32>) -> Self {
13231        String32(x)
13232    }
13233}
13234
13235impl AsRef<StringM<32>> for String32 {
13236    #[must_use]
13237    fn as_ref(&self) -> &StringM<32> {
13238        &self.0
13239    }
13240}
13241
13242impl ReadXdr for String32 {
13243    #[cfg(feature = "std")]
13244    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
13245        r.with_limited_depth(|r| {
13246            let i = StringM::<32>::read_xdr(r)?;
13247            let v = String32(i);
13248            Ok(v)
13249        })
13250    }
13251}
13252
13253impl WriteXdr for String32 {
13254    #[cfg(feature = "std")]
13255    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
13256        w.with_limited_depth(|w| self.0.write_xdr(w))
13257    }
13258}
13259
13260impl Deref for String32 {
13261    type Target = StringM<32>;
13262    fn deref(&self) -> &Self::Target {
13263        &self.0
13264    }
13265}
13266
13267impl From<String32> for Vec<u8> {
13268    #[must_use]
13269    fn from(x: String32) -> Self {
13270        x.0 .0
13271    }
13272}
13273
13274impl TryFrom<Vec<u8>> for String32 {
13275    type Error = Error;
13276    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
13277        Ok(String32(x.try_into()?))
13278    }
13279}
13280
13281#[cfg(feature = "alloc")]
13282impl TryFrom<&Vec<u8>> for String32 {
13283    type Error = Error;
13284    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
13285        Ok(String32(x.try_into()?))
13286    }
13287}
13288
13289impl AsRef<Vec<u8>> for String32 {
13290    #[must_use]
13291    fn as_ref(&self) -> &Vec<u8> {
13292        &self.0 .0
13293    }
13294}
13295
13296impl AsRef<[u8]> for String32 {
13297    #[cfg(feature = "alloc")]
13298    #[must_use]
13299    fn as_ref(&self) -> &[u8] {
13300        &self.0 .0
13301    }
13302    #[cfg(not(feature = "alloc"))]
13303    #[must_use]
13304    fn as_ref(&self) -> &[u8] {
13305        self.0 .0
13306    }
13307}
13308
13309/// String64 is an XDR Typedef defines as:
13310///
13311/// ```text
13312/// typedef string string64<64>;
13313/// ```
13314///
13315#[cfg_eval::cfg_eval]
13316#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
13317#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13318#[cfg_attr(
13319    all(feature = "serde", feature = "alloc"),
13320    serde_with::serde_as,
13321    derive(serde::Serialize, serde::Deserialize),
13322    serde(rename_all = "snake_case")
13323)]
13324#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
13325#[derive(Debug)]
13326pub struct String64(pub StringM<64>);
13327
13328impl From<String64> for StringM<64> {
13329    #[must_use]
13330    fn from(x: String64) -> Self {
13331        x.0
13332    }
13333}
13334
13335impl From<StringM<64>> for String64 {
13336    #[must_use]
13337    fn from(x: StringM<64>) -> Self {
13338        String64(x)
13339    }
13340}
13341
13342impl AsRef<StringM<64>> for String64 {
13343    #[must_use]
13344    fn as_ref(&self) -> &StringM<64> {
13345        &self.0
13346    }
13347}
13348
13349impl ReadXdr for String64 {
13350    #[cfg(feature = "std")]
13351    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
13352        r.with_limited_depth(|r| {
13353            let i = StringM::<64>::read_xdr(r)?;
13354            let v = String64(i);
13355            Ok(v)
13356        })
13357    }
13358}
13359
13360impl WriteXdr for String64 {
13361    #[cfg(feature = "std")]
13362    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
13363        w.with_limited_depth(|w| self.0.write_xdr(w))
13364    }
13365}
13366
13367impl Deref for String64 {
13368    type Target = StringM<64>;
13369    fn deref(&self) -> &Self::Target {
13370        &self.0
13371    }
13372}
13373
13374impl From<String64> for Vec<u8> {
13375    #[must_use]
13376    fn from(x: String64) -> Self {
13377        x.0 .0
13378    }
13379}
13380
13381impl TryFrom<Vec<u8>> for String64 {
13382    type Error = Error;
13383    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
13384        Ok(String64(x.try_into()?))
13385    }
13386}
13387
13388#[cfg(feature = "alloc")]
13389impl TryFrom<&Vec<u8>> for String64 {
13390    type Error = Error;
13391    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
13392        Ok(String64(x.try_into()?))
13393    }
13394}
13395
13396impl AsRef<Vec<u8>> for String64 {
13397    #[must_use]
13398    fn as_ref(&self) -> &Vec<u8> {
13399        &self.0 .0
13400    }
13401}
13402
13403impl AsRef<[u8]> for String64 {
13404    #[cfg(feature = "alloc")]
13405    #[must_use]
13406    fn as_ref(&self) -> &[u8] {
13407        &self.0 .0
13408    }
13409    #[cfg(not(feature = "alloc"))]
13410    #[must_use]
13411    fn as_ref(&self) -> &[u8] {
13412        self.0 .0
13413    }
13414}
13415
13416/// SequenceNumber is an XDR Typedef defines as:
13417///
13418/// ```text
13419/// typedef int64 SequenceNumber;
13420/// ```
13421///
13422#[cfg_eval::cfg_eval]
13423#[cfg_attr(feature = "alloc", derive(Default))]
13424#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
13425#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13426#[cfg_attr(
13427    all(feature = "serde", feature = "alloc"),
13428    serde_with::serde_as,
13429    derive(serde::Serialize, serde::Deserialize),
13430    serde(rename_all = "snake_case")
13431)]
13432#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
13433#[derive(Debug)]
13434pub struct SequenceNumber(
13435    #[cfg_attr(
13436        all(feature = "serde", feature = "alloc"),
13437        serde_as(as = "NumberOrString")
13438    )]
13439    pub i64,
13440);
13441
13442impl From<SequenceNumber> for i64 {
13443    #[must_use]
13444    fn from(x: SequenceNumber) -> Self {
13445        x.0
13446    }
13447}
13448
13449impl From<i64> for SequenceNumber {
13450    #[must_use]
13451    fn from(x: i64) -> Self {
13452        SequenceNumber(x)
13453    }
13454}
13455
13456impl AsRef<i64> for SequenceNumber {
13457    #[must_use]
13458    fn as_ref(&self) -> &i64 {
13459        &self.0
13460    }
13461}
13462
13463impl ReadXdr for SequenceNumber {
13464    #[cfg(feature = "std")]
13465    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
13466        r.with_limited_depth(|r| {
13467            let i = i64::read_xdr(r)?;
13468            let v = SequenceNumber(i);
13469            Ok(v)
13470        })
13471    }
13472}
13473
13474impl WriteXdr for SequenceNumber {
13475    #[cfg(feature = "std")]
13476    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
13477        w.with_limited_depth(|w| self.0.write_xdr(w))
13478    }
13479}
13480
13481/// DataValue is an XDR Typedef defines as:
13482///
13483/// ```text
13484/// typedef opaque DataValue<64>;
13485/// ```
13486///
13487#[cfg_eval::cfg_eval]
13488#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
13489#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13490#[cfg_attr(
13491    all(feature = "serde", feature = "alloc"),
13492    serde_with::serde_as,
13493    derive(serde::Serialize, serde::Deserialize),
13494    serde(rename_all = "snake_case")
13495)]
13496#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
13497#[derive(Debug)]
13498pub struct DataValue(pub BytesM<64>);
13499
13500impl From<DataValue> for BytesM<64> {
13501    #[must_use]
13502    fn from(x: DataValue) -> Self {
13503        x.0
13504    }
13505}
13506
13507impl From<BytesM<64>> for DataValue {
13508    #[must_use]
13509    fn from(x: BytesM<64>) -> Self {
13510        DataValue(x)
13511    }
13512}
13513
13514impl AsRef<BytesM<64>> for DataValue {
13515    #[must_use]
13516    fn as_ref(&self) -> &BytesM<64> {
13517        &self.0
13518    }
13519}
13520
13521impl ReadXdr for DataValue {
13522    #[cfg(feature = "std")]
13523    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
13524        r.with_limited_depth(|r| {
13525            let i = BytesM::<64>::read_xdr(r)?;
13526            let v = DataValue(i);
13527            Ok(v)
13528        })
13529    }
13530}
13531
13532impl WriteXdr for DataValue {
13533    #[cfg(feature = "std")]
13534    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
13535        w.with_limited_depth(|w| self.0.write_xdr(w))
13536    }
13537}
13538
13539impl Deref for DataValue {
13540    type Target = BytesM<64>;
13541    fn deref(&self) -> &Self::Target {
13542        &self.0
13543    }
13544}
13545
13546impl From<DataValue> for Vec<u8> {
13547    #[must_use]
13548    fn from(x: DataValue) -> Self {
13549        x.0 .0
13550    }
13551}
13552
13553impl TryFrom<Vec<u8>> for DataValue {
13554    type Error = Error;
13555    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
13556        Ok(DataValue(x.try_into()?))
13557    }
13558}
13559
13560#[cfg(feature = "alloc")]
13561impl TryFrom<&Vec<u8>> for DataValue {
13562    type Error = Error;
13563    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
13564        Ok(DataValue(x.try_into()?))
13565    }
13566}
13567
13568impl AsRef<Vec<u8>> for DataValue {
13569    #[must_use]
13570    fn as_ref(&self) -> &Vec<u8> {
13571        &self.0 .0
13572    }
13573}
13574
13575impl AsRef<[u8]> for DataValue {
13576    #[cfg(feature = "alloc")]
13577    #[must_use]
13578    fn as_ref(&self) -> &[u8] {
13579        &self.0 .0
13580    }
13581    #[cfg(not(feature = "alloc"))]
13582    #[must_use]
13583    fn as_ref(&self) -> &[u8] {
13584        self.0 .0
13585    }
13586}
13587
13588/// AssetCode4 is an XDR Typedef defines as:
13589///
13590/// ```text
13591/// typedef opaque AssetCode4[4];
13592/// ```
13593///
13594#[cfg_eval::cfg_eval]
13595#[cfg_attr(feature = "alloc", derive(Default))]
13596#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
13597#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13598#[cfg_attr(
13599    all(feature = "serde", feature = "alloc"),
13600    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
13601)]
13602pub struct AssetCode4(pub [u8; 4]);
13603
13604impl core::fmt::Debug for AssetCode4 {
13605    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
13606        let v = &self.0;
13607        write!(f, "AssetCode4(")?;
13608        for b in v {
13609            write!(f, "{b:02x}")?;
13610        }
13611        write!(f, ")")?;
13612        Ok(())
13613    }
13614}
13615impl From<AssetCode4> for [u8; 4] {
13616    #[must_use]
13617    fn from(x: AssetCode4) -> Self {
13618        x.0
13619    }
13620}
13621
13622impl From<[u8; 4]> for AssetCode4 {
13623    #[must_use]
13624    fn from(x: [u8; 4]) -> Self {
13625        AssetCode4(x)
13626    }
13627}
13628
13629impl AsRef<[u8; 4]> for AssetCode4 {
13630    #[must_use]
13631    fn as_ref(&self) -> &[u8; 4] {
13632        &self.0
13633    }
13634}
13635
13636impl ReadXdr for AssetCode4 {
13637    #[cfg(feature = "std")]
13638    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
13639        r.with_limited_depth(|r| {
13640            let i = <[u8; 4]>::read_xdr(r)?;
13641            let v = AssetCode4(i);
13642            Ok(v)
13643        })
13644    }
13645}
13646
13647impl WriteXdr for AssetCode4 {
13648    #[cfg(feature = "std")]
13649    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
13650        w.with_limited_depth(|w| self.0.write_xdr(w))
13651    }
13652}
13653
13654impl AssetCode4 {
13655    #[must_use]
13656    pub fn as_slice(&self) -> &[u8] {
13657        &self.0
13658    }
13659}
13660
13661#[cfg(feature = "alloc")]
13662impl TryFrom<Vec<u8>> for AssetCode4 {
13663    type Error = Error;
13664    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
13665        x.as_slice().try_into()
13666    }
13667}
13668
13669#[cfg(feature = "alloc")]
13670impl TryFrom<&Vec<u8>> for AssetCode4 {
13671    type Error = Error;
13672    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
13673        x.as_slice().try_into()
13674    }
13675}
13676
13677impl TryFrom<&[u8]> for AssetCode4 {
13678    type Error = Error;
13679    fn try_from(x: &[u8]) -> Result<Self, Error> {
13680        Ok(AssetCode4(x.try_into()?))
13681    }
13682}
13683
13684impl AsRef<[u8]> for AssetCode4 {
13685    #[must_use]
13686    fn as_ref(&self) -> &[u8] {
13687        &self.0
13688    }
13689}
13690
13691/// AssetCode12 is an XDR Typedef defines as:
13692///
13693/// ```text
13694/// typedef opaque AssetCode12[12];
13695/// ```
13696///
13697#[cfg_eval::cfg_eval]
13698#[cfg_attr(feature = "alloc", derive(Default))]
13699#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
13700#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13701#[cfg_attr(
13702    all(feature = "serde", feature = "alloc"),
13703    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
13704)]
13705pub struct AssetCode12(pub [u8; 12]);
13706
13707impl core::fmt::Debug for AssetCode12 {
13708    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
13709        let v = &self.0;
13710        write!(f, "AssetCode12(")?;
13711        for b in v {
13712            write!(f, "{b:02x}")?;
13713        }
13714        write!(f, ")")?;
13715        Ok(())
13716    }
13717}
13718impl From<AssetCode12> for [u8; 12] {
13719    #[must_use]
13720    fn from(x: AssetCode12) -> Self {
13721        x.0
13722    }
13723}
13724
13725impl From<[u8; 12]> for AssetCode12 {
13726    #[must_use]
13727    fn from(x: [u8; 12]) -> Self {
13728        AssetCode12(x)
13729    }
13730}
13731
13732impl AsRef<[u8; 12]> for AssetCode12 {
13733    #[must_use]
13734    fn as_ref(&self) -> &[u8; 12] {
13735        &self.0
13736    }
13737}
13738
13739impl ReadXdr for AssetCode12 {
13740    #[cfg(feature = "std")]
13741    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
13742        r.with_limited_depth(|r| {
13743            let i = <[u8; 12]>::read_xdr(r)?;
13744            let v = AssetCode12(i);
13745            Ok(v)
13746        })
13747    }
13748}
13749
13750impl WriteXdr for AssetCode12 {
13751    #[cfg(feature = "std")]
13752    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
13753        w.with_limited_depth(|w| self.0.write_xdr(w))
13754    }
13755}
13756
13757impl AssetCode12 {
13758    #[must_use]
13759    pub fn as_slice(&self) -> &[u8] {
13760        &self.0
13761    }
13762}
13763
13764#[cfg(feature = "alloc")]
13765impl TryFrom<Vec<u8>> for AssetCode12 {
13766    type Error = Error;
13767    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
13768        x.as_slice().try_into()
13769    }
13770}
13771
13772#[cfg(feature = "alloc")]
13773impl TryFrom<&Vec<u8>> for AssetCode12 {
13774    type Error = Error;
13775    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
13776        x.as_slice().try_into()
13777    }
13778}
13779
13780impl TryFrom<&[u8]> for AssetCode12 {
13781    type Error = Error;
13782    fn try_from(x: &[u8]) -> Result<Self, Error> {
13783        Ok(AssetCode12(x.try_into()?))
13784    }
13785}
13786
13787impl AsRef<[u8]> for AssetCode12 {
13788    #[must_use]
13789    fn as_ref(&self) -> &[u8] {
13790        &self.0
13791    }
13792}
13793
13794/// AssetType is an XDR Enum defines as:
13795///
13796/// ```text
13797/// enum AssetType
13798/// {
13799///     ASSET_TYPE_NATIVE = 0,
13800///     ASSET_TYPE_CREDIT_ALPHANUM4 = 1,
13801///     ASSET_TYPE_CREDIT_ALPHANUM12 = 2,
13802///     ASSET_TYPE_POOL_SHARE = 3
13803/// };
13804/// ```
13805///
13806// enum
13807#[cfg_attr(feature = "alloc", derive(Default))]
13808#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
13809#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13810#[cfg_attr(
13811    all(feature = "serde", feature = "alloc"),
13812    derive(serde::Serialize, serde::Deserialize),
13813    serde(rename_all = "snake_case")
13814)]
13815#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
13816#[repr(i32)]
13817pub enum AssetType {
13818    #[cfg_attr(feature = "alloc", default)]
13819    Native = 0,
13820    CreditAlphanum4 = 1,
13821    CreditAlphanum12 = 2,
13822    PoolShare = 3,
13823}
13824
13825impl AssetType {
13826    pub const VARIANTS: [AssetType; 4] = [
13827        AssetType::Native,
13828        AssetType::CreditAlphanum4,
13829        AssetType::CreditAlphanum12,
13830        AssetType::PoolShare,
13831    ];
13832    pub const VARIANTS_STR: [&'static str; 4] =
13833        ["Native", "CreditAlphanum4", "CreditAlphanum12", "PoolShare"];
13834
13835    #[must_use]
13836    pub const fn name(&self) -> &'static str {
13837        match self {
13838            Self::Native => "Native",
13839            Self::CreditAlphanum4 => "CreditAlphanum4",
13840            Self::CreditAlphanum12 => "CreditAlphanum12",
13841            Self::PoolShare => "PoolShare",
13842        }
13843    }
13844
13845    #[must_use]
13846    pub const fn variants() -> [AssetType; 4] {
13847        Self::VARIANTS
13848    }
13849}
13850
13851impl Name for AssetType {
13852    #[must_use]
13853    fn name(&self) -> &'static str {
13854        Self::name(self)
13855    }
13856}
13857
13858impl Variants<AssetType> for AssetType {
13859    fn variants() -> slice::Iter<'static, AssetType> {
13860        Self::VARIANTS.iter()
13861    }
13862}
13863
13864impl Enum for AssetType {}
13865
13866impl fmt::Display for AssetType {
13867    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
13868        f.write_str(self.name())
13869    }
13870}
13871
13872impl TryFrom<i32> for AssetType {
13873    type Error = Error;
13874
13875    fn try_from(i: i32) -> Result<Self, Error> {
13876        let e = match i {
13877            0 => AssetType::Native,
13878            1 => AssetType::CreditAlphanum4,
13879            2 => AssetType::CreditAlphanum12,
13880            3 => AssetType::PoolShare,
13881            #[allow(unreachable_patterns)]
13882            _ => return Err(Error::Invalid),
13883        };
13884        Ok(e)
13885    }
13886}
13887
13888impl From<AssetType> for i32 {
13889    #[must_use]
13890    fn from(e: AssetType) -> Self {
13891        e as Self
13892    }
13893}
13894
13895impl ReadXdr for AssetType {
13896    #[cfg(feature = "std")]
13897    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
13898        r.with_limited_depth(|r| {
13899            let e = i32::read_xdr(r)?;
13900            let v: Self = e.try_into()?;
13901            Ok(v)
13902        })
13903    }
13904}
13905
13906impl WriteXdr for AssetType {
13907    #[cfg(feature = "std")]
13908    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
13909        w.with_limited_depth(|w| {
13910            let i: i32 = (*self).into();
13911            i.write_xdr(w)
13912        })
13913    }
13914}
13915
13916/// AssetCode is an XDR Union defines as:
13917///
13918/// ```text
13919/// union AssetCode switch (AssetType type)
13920/// {
13921/// case ASSET_TYPE_CREDIT_ALPHANUM4:
13922///     AssetCode4 assetCode4;
13923///
13924/// case ASSET_TYPE_CREDIT_ALPHANUM12:
13925///     AssetCode12 assetCode12;
13926///
13927///     // add other asset types here in the future
13928/// };
13929/// ```
13930///
13931// union with discriminant AssetType
13932#[cfg_eval::cfg_eval]
13933#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
13934#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
13935#[cfg_attr(
13936    all(feature = "serde", feature = "alloc"),
13937    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
13938)]
13939#[allow(clippy::large_enum_variant)]
13940pub enum AssetCode {
13941    CreditAlphanum4(AssetCode4),
13942    CreditAlphanum12(AssetCode12),
13943}
13944
13945#[cfg(feature = "alloc")]
13946impl Default for AssetCode {
13947    fn default() -> Self {
13948        Self::CreditAlphanum4(AssetCode4::default())
13949    }
13950}
13951
13952impl AssetCode {
13953    pub const VARIANTS: [AssetType; 2] = [AssetType::CreditAlphanum4, AssetType::CreditAlphanum12];
13954    pub const VARIANTS_STR: [&'static str; 2] = ["CreditAlphanum4", "CreditAlphanum12"];
13955
13956    #[must_use]
13957    pub const fn name(&self) -> &'static str {
13958        match self {
13959            Self::CreditAlphanum4(_) => "CreditAlphanum4",
13960            Self::CreditAlphanum12(_) => "CreditAlphanum12",
13961        }
13962    }
13963
13964    #[must_use]
13965    pub const fn discriminant(&self) -> AssetType {
13966        #[allow(clippy::match_same_arms)]
13967        match self {
13968            Self::CreditAlphanum4(_) => AssetType::CreditAlphanum4,
13969            Self::CreditAlphanum12(_) => AssetType::CreditAlphanum12,
13970        }
13971    }
13972
13973    #[must_use]
13974    pub const fn variants() -> [AssetType; 2] {
13975        Self::VARIANTS
13976    }
13977}
13978
13979impl Name for AssetCode {
13980    #[must_use]
13981    fn name(&self) -> &'static str {
13982        Self::name(self)
13983    }
13984}
13985
13986impl Discriminant<AssetType> for AssetCode {
13987    #[must_use]
13988    fn discriminant(&self) -> AssetType {
13989        Self::discriminant(self)
13990    }
13991}
13992
13993impl Variants<AssetType> for AssetCode {
13994    fn variants() -> slice::Iter<'static, AssetType> {
13995        Self::VARIANTS.iter()
13996    }
13997}
13998
13999impl Union<AssetType> for AssetCode {}
14000
14001impl ReadXdr for AssetCode {
14002    #[cfg(feature = "std")]
14003    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14004        r.with_limited_depth(|r| {
14005            let dv: AssetType = <AssetType as ReadXdr>::read_xdr(r)?;
14006            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
14007            let v = match dv {
14008                AssetType::CreditAlphanum4 => Self::CreditAlphanum4(AssetCode4::read_xdr(r)?),
14009                AssetType::CreditAlphanum12 => Self::CreditAlphanum12(AssetCode12::read_xdr(r)?),
14010                #[allow(unreachable_patterns)]
14011                _ => return Err(Error::Invalid),
14012            };
14013            Ok(v)
14014        })
14015    }
14016}
14017
14018impl WriteXdr for AssetCode {
14019    #[cfg(feature = "std")]
14020    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14021        w.with_limited_depth(|w| {
14022            self.discriminant().write_xdr(w)?;
14023            #[allow(clippy::match_same_arms)]
14024            match self {
14025                Self::CreditAlphanum4(v) => v.write_xdr(w)?,
14026                Self::CreditAlphanum12(v) => v.write_xdr(w)?,
14027            };
14028            Ok(())
14029        })
14030    }
14031}
14032
14033/// AlphaNum4 is an XDR Struct defines as:
14034///
14035/// ```text
14036/// struct AlphaNum4
14037/// {
14038///     AssetCode4 assetCode;
14039///     AccountID issuer;
14040/// };
14041/// ```
14042///
14043#[cfg_attr(feature = "alloc", derive(Default))]
14044#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14045#[cfg_eval::cfg_eval]
14046#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14047#[cfg_attr(
14048    all(feature = "serde", feature = "alloc"),
14049    serde_with::serde_as,
14050    derive(serde::Serialize, serde::Deserialize),
14051    serde(rename_all = "snake_case")
14052)]
14053#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14054pub struct AlphaNum4 {
14055    pub asset_code: AssetCode4,
14056    pub issuer: AccountId,
14057}
14058
14059impl ReadXdr for AlphaNum4 {
14060    #[cfg(feature = "std")]
14061    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14062        r.with_limited_depth(|r| {
14063            Ok(Self {
14064                asset_code: AssetCode4::read_xdr(r)?,
14065                issuer: AccountId::read_xdr(r)?,
14066            })
14067        })
14068    }
14069}
14070
14071impl WriteXdr for AlphaNum4 {
14072    #[cfg(feature = "std")]
14073    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14074        w.with_limited_depth(|w| {
14075            self.asset_code.write_xdr(w)?;
14076            self.issuer.write_xdr(w)?;
14077            Ok(())
14078        })
14079    }
14080}
14081
14082/// AlphaNum12 is an XDR Struct defines as:
14083///
14084/// ```text
14085/// struct AlphaNum12
14086/// {
14087///     AssetCode12 assetCode;
14088///     AccountID issuer;
14089/// };
14090/// ```
14091///
14092#[cfg_attr(feature = "alloc", derive(Default))]
14093#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14094#[cfg_eval::cfg_eval]
14095#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14096#[cfg_attr(
14097    all(feature = "serde", feature = "alloc"),
14098    serde_with::serde_as,
14099    derive(serde::Serialize, serde::Deserialize),
14100    serde(rename_all = "snake_case")
14101)]
14102#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14103pub struct AlphaNum12 {
14104    pub asset_code: AssetCode12,
14105    pub issuer: AccountId,
14106}
14107
14108impl ReadXdr for AlphaNum12 {
14109    #[cfg(feature = "std")]
14110    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14111        r.with_limited_depth(|r| {
14112            Ok(Self {
14113                asset_code: AssetCode12::read_xdr(r)?,
14114                issuer: AccountId::read_xdr(r)?,
14115            })
14116        })
14117    }
14118}
14119
14120impl WriteXdr for AlphaNum12 {
14121    #[cfg(feature = "std")]
14122    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14123        w.with_limited_depth(|w| {
14124            self.asset_code.write_xdr(w)?;
14125            self.issuer.write_xdr(w)?;
14126            Ok(())
14127        })
14128    }
14129}
14130
14131/// Asset is an XDR Union defines as:
14132///
14133/// ```text
14134/// union Asset switch (AssetType type)
14135/// {
14136/// case ASSET_TYPE_NATIVE: // Not credit
14137///     void;
14138///
14139/// case ASSET_TYPE_CREDIT_ALPHANUM4:
14140///     AlphaNum4 alphaNum4;
14141///
14142/// case ASSET_TYPE_CREDIT_ALPHANUM12:
14143///     AlphaNum12 alphaNum12;
14144///
14145///     // add other asset types here in the future
14146/// };
14147/// ```
14148///
14149// union with discriminant AssetType
14150#[cfg_eval::cfg_eval]
14151#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14152#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14153#[cfg_attr(
14154    all(feature = "serde", feature = "alloc"),
14155    serde_with::serde_as,
14156    derive(serde::Serialize, serde::Deserialize),
14157    serde(rename_all = "snake_case")
14158)]
14159#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14160#[allow(clippy::large_enum_variant)]
14161pub enum Asset {
14162    Native,
14163    CreditAlphanum4(AlphaNum4),
14164    CreditAlphanum12(AlphaNum12),
14165}
14166
14167#[cfg(feature = "alloc")]
14168impl Default for Asset {
14169    fn default() -> Self {
14170        Self::Native
14171    }
14172}
14173
14174impl Asset {
14175    pub const VARIANTS: [AssetType; 3] = [
14176        AssetType::Native,
14177        AssetType::CreditAlphanum4,
14178        AssetType::CreditAlphanum12,
14179    ];
14180    pub const VARIANTS_STR: [&'static str; 3] = ["Native", "CreditAlphanum4", "CreditAlphanum12"];
14181
14182    #[must_use]
14183    pub const fn name(&self) -> &'static str {
14184        match self {
14185            Self::Native => "Native",
14186            Self::CreditAlphanum4(_) => "CreditAlphanum4",
14187            Self::CreditAlphanum12(_) => "CreditAlphanum12",
14188        }
14189    }
14190
14191    #[must_use]
14192    pub const fn discriminant(&self) -> AssetType {
14193        #[allow(clippy::match_same_arms)]
14194        match self {
14195            Self::Native => AssetType::Native,
14196            Self::CreditAlphanum4(_) => AssetType::CreditAlphanum4,
14197            Self::CreditAlphanum12(_) => AssetType::CreditAlphanum12,
14198        }
14199    }
14200
14201    #[must_use]
14202    pub const fn variants() -> [AssetType; 3] {
14203        Self::VARIANTS
14204    }
14205}
14206
14207impl Name for Asset {
14208    #[must_use]
14209    fn name(&self) -> &'static str {
14210        Self::name(self)
14211    }
14212}
14213
14214impl Discriminant<AssetType> for Asset {
14215    #[must_use]
14216    fn discriminant(&self) -> AssetType {
14217        Self::discriminant(self)
14218    }
14219}
14220
14221impl Variants<AssetType> for Asset {
14222    fn variants() -> slice::Iter<'static, AssetType> {
14223        Self::VARIANTS.iter()
14224    }
14225}
14226
14227impl Union<AssetType> for Asset {}
14228
14229impl ReadXdr for Asset {
14230    #[cfg(feature = "std")]
14231    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14232        r.with_limited_depth(|r| {
14233            let dv: AssetType = <AssetType as ReadXdr>::read_xdr(r)?;
14234            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
14235            let v = match dv {
14236                AssetType::Native => Self::Native,
14237                AssetType::CreditAlphanum4 => Self::CreditAlphanum4(AlphaNum4::read_xdr(r)?),
14238                AssetType::CreditAlphanum12 => Self::CreditAlphanum12(AlphaNum12::read_xdr(r)?),
14239                #[allow(unreachable_patterns)]
14240                _ => return Err(Error::Invalid),
14241            };
14242            Ok(v)
14243        })
14244    }
14245}
14246
14247impl WriteXdr for Asset {
14248    #[cfg(feature = "std")]
14249    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14250        w.with_limited_depth(|w| {
14251            self.discriminant().write_xdr(w)?;
14252            #[allow(clippy::match_same_arms)]
14253            match self {
14254                Self::Native => ().write_xdr(w)?,
14255                Self::CreditAlphanum4(v) => v.write_xdr(w)?,
14256                Self::CreditAlphanum12(v) => v.write_xdr(w)?,
14257            };
14258            Ok(())
14259        })
14260    }
14261}
14262
14263/// Price is an XDR Struct defines as:
14264///
14265/// ```text
14266/// struct Price
14267/// {
14268///     int32 n; // numerator
14269///     int32 d; // denominator
14270/// };
14271/// ```
14272///
14273#[cfg_attr(feature = "alloc", derive(Default))]
14274#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14275#[cfg_eval::cfg_eval]
14276#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14277#[cfg_attr(
14278    all(feature = "serde", feature = "alloc"),
14279    serde_with::serde_as,
14280    derive(serde::Serialize, serde::Deserialize),
14281    serde(rename_all = "snake_case")
14282)]
14283#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14284pub struct Price {
14285    pub n: i32,
14286    pub d: i32,
14287}
14288
14289impl ReadXdr for Price {
14290    #[cfg(feature = "std")]
14291    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14292        r.with_limited_depth(|r| {
14293            Ok(Self {
14294                n: i32::read_xdr(r)?,
14295                d: i32::read_xdr(r)?,
14296            })
14297        })
14298    }
14299}
14300
14301impl WriteXdr for Price {
14302    #[cfg(feature = "std")]
14303    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14304        w.with_limited_depth(|w| {
14305            self.n.write_xdr(w)?;
14306            self.d.write_xdr(w)?;
14307            Ok(())
14308        })
14309    }
14310}
14311
14312/// Liabilities is an XDR Struct defines as:
14313///
14314/// ```text
14315/// struct Liabilities
14316/// {
14317///     int64 buying;
14318///     int64 selling;
14319/// };
14320/// ```
14321///
14322#[cfg_attr(feature = "alloc", derive(Default))]
14323#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14324#[cfg_eval::cfg_eval]
14325#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14326#[cfg_attr(
14327    all(feature = "serde", feature = "alloc"),
14328    serde_with::serde_as,
14329    derive(serde::Serialize, serde::Deserialize),
14330    serde(rename_all = "snake_case")
14331)]
14332#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14333pub struct Liabilities {
14334    #[cfg_attr(
14335        all(feature = "serde", feature = "alloc"),
14336        serde_as(as = "NumberOrString")
14337    )]
14338    pub buying: i64,
14339    #[cfg_attr(
14340        all(feature = "serde", feature = "alloc"),
14341        serde_as(as = "NumberOrString")
14342    )]
14343    pub selling: i64,
14344}
14345
14346impl ReadXdr for Liabilities {
14347    #[cfg(feature = "std")]
14348    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14349        r.with_limited_depth(|r| {
14350            Ok(Self {
14351                buying: i64::read_xdr(r)?,
14352                selling: i64::read_xdr(r)?,
14353            })
14354        })
14355    }
14356}
14357
14358impl WriteXdr for Liabilities {
14359    #[cfg(feature = "std")]
14360    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14361        w.with_limited_depth(|w| {
14362            self.buying.write_xdr(w)?;
14363            self.selling.write_xdr(w)?;
14364            Ok(())
14365        })
14366    }
14367}
14368
14369/// ThresholdIndexes is an XDR Enum defines as:
14370///
14371/// ```text
14372/// enum ThresholdIndexes
14373/// {
14374///     THRESHOLD_MASTER_WEIGHT = 0,
14375///     THRESHOLD_LOW = 1,
14376///     THRESHOLD_MED = 2,
14377///     THRESHOLD_HIGH = 3
14378/// };
14379/// ```
14380///
14381// enum
14382#[cfg_attr(feature = "alloc", derive(Default))]
14383#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14384#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14385#[cfg_attr(
14386    all(feature = "serde", feature = "alloc"),
14387    derive(serde::Serialize, serde::Deserialize),
14388    serde(rename_all = "snake_case")
14389)]
14390#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14391#[repr(i32)]
14392pub enum ThresholdIndexes {
14393    #[cfg_attr(feature = "alloc", default)]
14394    MasterWeight = 0,
14395    Low = 1,
14396    Med = 2,
14397    High = 3,
14398}
14399
14400impl ThresholdIndexes {
14401    pub const VARIANTS: [ThresholdIndexes; 4] = [
14402        ThresholdIndexes::MasterWeight,
14403        ThresholdIndexes::Low,
14404        ThresholdIndexes::Med,
14405        ThresholdIndexes::High,
14406    ];
14407    pub const VARIANTS_STR: [&'static str; 4] = ["MasterWeight", "Low", "Med", "High"];
14408
14409    #[must_use]
14410    pub const fn name(&self) -> &'static str {
14411        match self {
14412            Self::MasterWeight => "MasterWeight",
14413            Self::Low => "Low",
14414            Self::Med => "Med",
14415            Self::High => "High",
14416        }
14417    }
14418
14419    #[must_use]
14420    pub const fn variants() -> [ThresholdIndexes; 4] {
14421        Self::VARIANTS
14422    }
14423}
14424
14425impl Name for ThresholdIndexes {
14426    #[must_use]
14427    fn name(&self) -> &'static str {
14428        Self::name(self)
14429    }
14430}
14431
14432impl Variants<ThresholdIndexes> for ThresholdIndexes {
14433    fn variants() -> slice::Iter<'static, ThresholdIndexes> {
14434        Self::VARIANTS.iter()
14435    }
14436}
14437
14438impl Enum for ThresholdIndexes {}
14439
14440impl fmt::Display for ThresholdIndexes {
14441    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
14442        f.write_str(self.name())
14443    }
14444}
14445
14446impl TryFrom<i32> for ThresholdIndexes {
14447    type Error = Error;
14448
14449    fn try_from(i: i32) -> Result<Self, Error> {
14450        let e = match i {
14451            0 => ThresholdIndexes::MasterWeight,
14452            1 => ThresholdIndexes::Low,
14453            2 => ThresholdIndexes::Med,
14454            3 => ThresholdIndexes::High,
14455            #[allow(unreachable_patterns)]
14456            _ => return Err(Error::Invalid),
14457        };
14458        Ok(e)
14459    }
14460}
14461
14462impl From<ThresholdIndexes> for i32 {
14463    #[must_use]
14464    fn from(e: ThresholdIndexes) -> Self {
14465        e as Self
14466    }
14467}
14468
14469impl ReadXdr for ThresholdIndexes {
14470    #[cfg(feature = "std")]
14471    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14472        r.with_limited_depth(|r| {
14473            let e = i32::read_xdr(r)?;
14474            let v: Self = e.try_into()?;
14475            Ok(v)
14476        })
14477    }
14478}
14479
14480impl WriteXdr for ThresholdIndexes {
14481    #[cfg(feature = "std")]
14482    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14483        w.with_limited_depth(|w| {
14484            let i: i32 = (*self).into();
14485            i.write_xdr(w)
14486        })
14487    }
14488}
14489
14490/// LedgerEntryType is an XDR Enum defines as:
14491///
14492/// ```text
14493/// enum LedgerEntryType
14494/// {
14495///     ACCOUNT = 0,
14496///     TRUSTLINE = 1,
14497///     OFFER = 2,
14498///     DATA = 3,
14499///     CLAIMABLE_BALANCE = 4,
14500///     LIQUIDITY_POOL = 5,
14501///     CONTRACT_DATA = 6,
14502///     CONTRACT_CODE = 7,
14503///     CONFIG_SETTING = 8,
14504///     TTL = 9
14505/// };
14506/// ```
14507///
14508// enum
14509#[cfg_attr(feature = "alloc", derive(Default))]
14510#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14511#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14512#[cfg_attr(
14513    all(feature = "serde", feature = "alloc"),
14514    derive(serde::Serialize, serde::Deserialize),
14515    serde(rename_all = "snake_case")
14516)]
14517#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14518#[repr(i32)]
14519pub enum LedgerEntryType {
14520    #[cfg_attr(feature = "alloc", default)]
14521    Account = 0,
14522    Trustline = 1,
14523    Offer = 2,
14524    Data = 3,
14525    ClaimableBalance = 4,
14526    LiquidityPool = 5,
14527    ContractData = 6,
14528    ContractCode = 7,
14529    ConfigSetting = 8,
14530    Ttl = 9,
14531}
14532
14533impl LedgerEntryType {
14534    pub const VARIANTS: [LedgerEntryType; 10] = [
14535        LedgerEntryType::Account,
14536        LedgerEntryType::Trustline,
14537        LedgerEntryType::Offer,
14538        LedgerEntryType::Data,
14539        LedgerEntryType::ClaimableBalance,
14540        LedgerEntryType::LiquidityPool,
14541        LedgerEntryType::ContractData,
14542        LedgerEntryType::ContractCode,
14543        LedgerEntryType::ConfigSetting,
14544        LedgerEntryType::Ttl,
14545    ];
14546    pub const VARIANTS_STR: [&'static str; 10] = [
14547        "Account",
14548        "Trustline",
14549        "Offer",
14550        "Data",
14551        "ClaimableBalance",
14552        "LiquidityPool",
14553        "ContractData",
14554        "ContractCode",
14555        "ConfigSetting",
14556        "Ttl",
14557    ];
14558
14559    #[must_use]
14560    pub const fn name(&self) -> &'static str {
14561        match self {
14562            Self::Account => "Account",
14563            Self::Trustline => "Trustline",
14564            Self::Offer => "Offer",
14565            Self::Data => "Data",
14566            Self::ClaimableBalance => "ClaimableBalance",
14567            Self::LiquidityPool => "LiquidityPool",
14568            Self::ContractData => "ContractData",
14569            Self::ContractCode => "ContractCode",
14570            Self::ConfigSetting => "ConfigSetting",
14571            Self::Ttl => "Ttl",
14572        }
14573    }
14574
14575    #[must_use]
14576    pub const fn variants() -> [LedgerEntryType; 10] {
14577        Self::VARIANTS
14578    }
14579}
14580
14581impl Name for LedgerEntryType {
14582    #[must_use]
14583    fn name(&self) -> &'static str {
14584        Self::name(self)
14585    }
14586}
14587
14588impl Variants<LedgerEntryType> for LedgerEntryType {
14589    fn variants() -> slice::Iter<'static, LedgerEntryType> {
14590        Self::VARIANTS.iter()
14591    }
14592}
14593
14594impl Enum for LedgerEntryType {}
14595
14596impl fmt::Display for LedgerEntryType {
14597    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
14598        f.write_str(self.name())
14599    }
14600}
14601
14602impl TryFrom<i32> for LedgerEntryType {
14603    type Error = Error;
14604
14605    fn try_from(i: i32) -> Result<Self, Error> {
14606        let e = match i {
14607            0 => LedgerEntryType::Account,
14608            1 => LedgerEntryType::Trustline,
14609            2 => LedgerEntryType::Offer,
14610            3 => LedgerEntryType::Data,
14611            4 => LedgerEntryType::ClaimableBalance,
14612            5 => LedgerEntryType::LiquidityPool,
14613            6 => LedgerEntryType::ContractData,
14614            7 => LedgerEntryType::ContractCode,
14615            8 => LedgerEntryType::ConfigSetting,
14616            9 => LedgerEntryType::Ttl,
14617            #[allow(unreachable_patterns)]
14618            _ => return Err(Error::Invalid),
14619        };
14620        Ok(e)
14621    }
14622}
14623
14624impl From<LedgerEntryType> for i32 {
14625    #[must_use]
14626    fn from(e: LedgerEntryType) -> Self {
14627        e as Self
14628    }
14629}
14630
14631impl ReadXdr for LedgerEntryType {
14632    #[cfg(feature = "std")]
14633    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14634        r.with_limited_depth(|r| {
14635            let e = i32::read_xdr(r)?;
14636            let v: Self = e.try_into()?;
14637            Ok(v)
14638        })
14639    }
14640}
14641
14642impl WriteXdr for LedgerEntryType {
14643    #[cfg(feature = "std")]
14644    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14645        w.with_limited_depth(|w| {
14646            let i: i32 = (*self).into();
14647            i.write_xdr(w)
14648        })
14649    }
14650}
14651
14652/// Signer is an XDR Struct defines as:
14653///
14654/// ```text
14655/// struct Signer
14656/// {
14657///     SignerKey key;
14658///     uint32 weight; // really only need 1 byte
14659/// };
14660/// ```
14661///
14662#[cfg_attr(feature = "alloc", derive(Default))]
14663#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14664#[cfg_eval::cfg_eval]
14665#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14666#[cfg_attr(
14667    all(feature = "serde", feature = "alloc"),
14668    serde_with::serde_as,
14669    derive(serde::Serialize, serde::Deserialize),
14670    serde(rename_all = "snake_case")
14671)]
14672#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14673pub struct Signer {
14674    pub key: SignerKey,
14675    pub weight: u32,
14676}
14677
14678impl ReadXdr for Signer {
14679    #[cfg(feature = "std")]
14680    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14681        r.with_limited_depth(|r| {
14682            Ok(Self {
14683                key: SignerKey::read_xdr(r)?,
14684                weight: u32::read_xdr(r)?,
14685            })
14686        })
14687    }
14688}
14689
14690impl WriteXdr for Signer {
14691    #[cfg(feature = "std")]
14692    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14693        w.with_limited_depth(|w| {
14694            self.key.write_xdr(w)?;
14695            self.weight.write_xdr(w)?;
14696            Ok(())
14697        })
14698    }
14699}
14700
14701/// AccountFlags is an XDR Enum defines as:
14702///
14703/// ```text
14704/// enum AccountFlags
14705/// { // masks for each flag
14706///
14707///     // Flags set on issuer accounts
14708///     // TrustLines are created with authorized set to "false" requiring
14709///     // the issuer to set it for each TrustLine
14710///     AUTH_REQUIRED_FLAG = 0x1,
14711///     // If set, the authorized flag in TrustLines can be cleared
14712///     // otherwise, authorization cannot be revoked
14713///     AUTH_REVOCABLE_FLAG = 0x2,
14714///     // Once set, causes all AUTH_* flags to be read-only
14715///     AUTH_IMMUTABLE_FLAG = 0x4,
14716///     // Trustlines are created with clawback enabled set to "true",
14717///     // and claimable balances created from those trustlines are created
14718///     // with clawback enabled set to "true"
14719///     AUTH_CLAWBACK_ENABLED_FLAG = 0x8
14720/// };
14721/// ```
14722///
14723// enum
14724#[cfg_attr(feature = "alloc", derive(Default))]
14725#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14726#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14727#[cfg_attr(
14728    all(feature = "serde", feature = "alloc"),
14729    derive(serde::Serialize, serde::Deserialize),
14730    serde(rename_all = "snake_case")
14731)]
14732#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14733#[repr(i32)]
14734pub enum AccountFlags {
14735    #[cfg_attr(feature = "alloc", default)]
14736    RequiredFlag = 1,
14737    RevocableFlag = 2,
14738    ImmutableFlag = 4,
14739    ClawbackEnabledFlag = 8,
14740}
14741
14742impl AccountFlags {
14743    pub const VARIANTS: [AccountFlags; 4] = [
14744        AccountFlags::RequiredFlag,
14745        AccountFlags::RevocableFlag,
14746        AccountFlags::ImmutableFlag,
14747        AccountFlags::ClawbackEnabledFlag,
14748    ];
14749    pub const VARIANTS_STR: [&'static str; 4] = [
14750        "RequiredFlag",
14751        "RevocableFlag",
14752        "ImmutableFlag",
14753        "ClawbackEnabledFlag",
14754    ];
14755
14756    #[must_use]
14757    pub const fn name(&self) -> &'static str {
14758        match self {
14759            Self::RequiredFlag => "RequiredFlag",
14760            Self::RevocableFlag => "RevocableFlag",
14761            Self::ImmutableFlag => "ImmutableFlag",
14762            Self::ClawbackEnabledFlag => "ClawbackEnabledFlag",
14763        }
14764    }
14765
14766    #[must_use]
14767    pub const fn variants() -> [AccountFlags; 4] {
14768        Self::VARIANTS
14769    }
14770}
14771
14772impl Name for AccountFlags {
14773    #[must_use]
14774    fn name(&self) -> &'static str {
14775        Self::name(self)
14776    }
14777}
14778
14779impl Variants<AccountFlags> for AccountFlags {
14780    fn variants() -> slice::Iter<'static, AccountFlags> {
14781        Self::VARIANTS.iter()
14782    }
14783}
14784
14785impl Enum for AccountFlags {}
14786
14787impl fmt::Display for AccountFlags {
14788    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
14789        f.write_str(self.name())
14790    }
14791}
14792
14793impl TryFrom<i32> for AccountFlags {
14794    type Error = Error;
14795
14796    fn try_from(i: i32) -> Result<Self, Error> {
14797        let e = match i {
14798            1 => AccountFlags::RequiredFlag,
14799            2 => AccountFlags::RevocableFlag,
14800            4 => AccountFlags::ImmutableFlag,
14801            8 => AccountFlags::ClawbackEnabledFlag,
14802            #[allow(unreachable_patterns)]
14803            _ => return Err(Error::Invalid),
14804        };
14805        Ok(e)
14806    }
14807}
14808
14809impl From<AccountFlags> for i32 {
14810    #[must_use]
14811    fn from(e: AccountFlags) -> Self {
14812        e as Self
14813    }
14814}
14815
14816impl ReadXdr for AccountFlags {
14817    #[cfg(feature = "std")]
14818    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14819        r.with_limited_depth(|r| {
14820            let e = i32::read_xdr(r)?;
14821            let v: Self = e.try_into()?;
14822            Ok(v)
14823        })
14824    }
14825}
14826
14827impl WriteXdr for AccountFlags {
14828    #[cfg(feature = "std")]
14829    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14830        w.with_limited_depth(|w| {
14831            let i: i32 = (*self).into();
14832            i.write_xdr(w)
14833        })
14834    }
14835}
14836
14837/// MaskAccountFlags is an XDR Const defines as:
14838///
14839/// ```text
14840/// const MASK_ACCOUNT_FLAGS = 0x7;
14841/// ```
14842///
14843pub const MASK_ACCOUNT_FLAGS: u64 = 0x7;
14844
14845/// MaskAccountFlagsV17 is an XDR Const defines as:
14846///
14847/// ```text
14848/// const MASK_ACCOUNT_FLAGS_V17 = 0xF;
14849/// ```
14850///
14851pub const MASK_ACCOUNT_FLAGS_V17: u64 = 0xF;
14852
14853/// MaxSigners is an XDR Const defines as:
14854///
14855/// ```text
14856/// const MAX_SIGNERS = 20;
14857/// ```
14858///
14859pub const MAX_SIGNERS: u64 = 20;
14860
14861/// SponsorshipDescriptor is an XDR Typedef defines as:
14862///
14863/// ```text
14864/// typedef AccountID* SponsorshipDescriptor;
14865/// ```
14866///
14867#[cfg_eval::cfg_eval]
14868#[cfg_attr(feature = "alloc", derive(Default))]
14869#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
14870#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14871#[cfg_attr(
14872    all(feature = "serde", feature = "alloc"),
14873    serde_with::serde_as,
14874    derive(serde::Serialize, serde::Deserialize),
14875    serde(rename_all = "snake_case")
14876)]
14877#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14878#[derive(Debug)]
14879pub struct SponsorshipDescriptor(pub Option<AccountId>);
14880
14881impl From<SponsorshipDescriptor> for Option<AccountId> {
14882    #[must_use]
14883    fn from(x: SponsorshipDescriptor) -> Self {
14884        x.0
14885    }
14886}
14887
14888impl From<Option<AccountId>> for SponsorshipDescriptor {
14889    #[must_use]
14890    fn from(x: Option<AccountId>) -> Self {
14891        SponsorshipDescriptor(x)
14892    }
14893}
14894
14895impl AsRef<Option<AccountId>> for SponsorshipDescriptor {
14896    #[must_use]
14897    fn as_ref(&self) -> &Option<AccountId> {
14898        &self.0
14899    }
14900}
14901
14902impl ReadXdr for SponsorshipDescriptor {
14903    #[cfg(feature = "std")]
14904    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14905        r.with_limited_depth(|r| {
14906            let i = Option::<AccountId>::read_xdr(r)?;
14907            let v = SponsorshipDescriptor(i);
14908            Ok(v)
14909        })
14910    }
14911}
14912
14913impl WriteXdr for SponsorshipDescriptor {
14914    #[cfg(feature = "std")]
14915    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14916        w.with_limited_depth(|w| self.0.write_xdr(w))
14917    }
14918}
14919
14920/// AccountEntryExtensionV3 is an XDR Struct defines as:
14921///
14922/// ```text
14923/// struct AccountEntryExtensionV3
14924/// {
14925///     // We can use this to add more fields, or because it is first, to
14926///     // change AccountEntryExtensionV3 into a union.
14927///     ExtensionPoint ext;
14928///
14929///     // Ledger number at which `seqNum` took on its present value.
14930///     uint32 seqLedger;
14931///
14932///     // Time at which `seqNum` took on its present value.
14933///     TimePoint seqTime;
14934/// };
14935/// ```
14936///
14937#[cfg_attr(feature = "alloc", derive(Default))]
14938#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14939#[cfg_eval::cfg_eval]
14940#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14941#[cfg_attr(
14942    all(feature = "serde", feature = "alloc"),
14943    serde_with::serde_as,
14944    derive(serde::Serialize, serde::Deserialize),
14945    serde(rename_all = "snake_case")
14946)]
14947#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14948pub struct AccountEntryExtensionV3 {
14949    pub ext: ExtensionPoint,
14950    pub seq_ledger: u32,
14951    pub seq_time: TimePoint,
14952}
14953
14954impl ReadXdr for AccountEntryExtensionV3 {
14955    #[cfg(feature = "std")]
14956    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
14957        r.with_limited_depth(|r| {
14958            Ok(Self {
14959                ext: ExtensionPoint::read_xdr(r)?,
14960                seq_ledger: u32::read_xdr(r)?,
14961                seq_time: TimePoint::read_xdr(r)?,
14962            })
14963        })
14964    }
14965}
14966
14967impl WriteXdr for AccountEntryExtensionV3 {
14968    #[cfg(feature = "std")]
14969    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
14970        w.with_limited_depth(|w| {
14971            self.ext.write_xdr(w)?;
14972            self.seq_ledger.write_xdr(w)?;
14973            self.seq_time.write_xdr(w)?;
14974            Ok(())
14975        })
14976    }
14977}
14978
14979/// AccountEntryExtensionV2Ext is an XDR NestedUnion defines as:
14980///
14981/// ```text
14982/// union switch (int v)
14983///     {
14984///     case 0:
14985///         void;
14986///     case 3:
14987///         AccountEntryExtensionV3 v3;
14988///     }
14989/// ```
14990///
14991// union with discriminant i32
14992#[cfg_eval::cfg_eval]
14993#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
14994#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
14995#[cfg_attr(
14996    all(feature = "serde", feature = "alloc"),
14997    serde_with::serde_as,
14998    derive(serde::Serialize, serde::Deserialize),
14999    serde(rename_all = "snake_case")
15000)]
15001#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
15002#[allow(clippy::large_enum_variant)]
15003pub enum AccountEntryExtensionV2Ext {
15004    V0,
15005    V3(AccountEntryExtensionV3),
15006}
15007
15008#[cfg(feature = "alloc")]
15009impl Default for AccountEntryExtensionV2Ext {
15010    fn default() -> Self {
15011        Self::V0
15012    }
15013}
15014
15015impl AccountEntryExtensionV2Ext {
15016    pub const VARIANTS: [i32; 2] = [0, 3];
15017    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V3"];
15018
15019    #[must_use]
15020    pub const fn name(&self) -> &'static str {
15021        match self {
15022            Self::V0 => "V0",
15023            Self::V3(_) => "V3",
15024        }
15025    }
15026
15027    #[must_use]
15028    pub const fn discriminant(&self) -> i32 {
15029        #[allow(clippy::match_same_arms)]
15030        match self {
15031            Self::V0 => 0,
15032            Self::V3(_) => 3,
15033        }
15034    }
15035
15036    #[must_use]
15037    pub const fn variants() -> [i32; 2] {
15038        Self::VARIANTS
15039    }
15040}
15041
15042impl Name for AccountEntryExtensionV2Ext {
15043    #[must_use]
15044    fn name(&self) -> &'static str {
15045        Self::name(self)
15046    }
15047}
15048
15049impl Discriminant<i32> for AccountEntryExtensionV2Ext {
15050    #[must_use]
15051    fn discriminant(&self) -> i32 {
15052        Self::discriminant(self)
15053    }
15054}
15055
15056impl Variants<i32> for AccountEntryExtensionV2Ext {
15057    fn variants() -> slice::Iter<'static, i32> {
15058        Self::VARIANTS.iter()
15059    }
15060}
15061
15062impl Union<i32> for AccountEntryExtensionV2Ext {}
15063
15064impl ReadXdr for AccountEntryExtensionV2Ext {
15065    #[cfg(feature = "std")]
15066    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
15067        r.with_limited_depth(|r| {
15068            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
15069            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
15070            let v = match dv {
15071                0 => Self::V0,
15072                3 => Self::V3(AccountEntryExtensionV3::read_xdr(r)?),
15073                #[allow(unreachable_patterns)]
15074                _ => return Err(Error::Invalid),
15075            };
15076            Ok(v)
15077        })
15078    }
15079}
15080
15081impl WriteXdr for AccountEntryExtensionV2Ext {
15082    #[cfg(feature = "std")]
15083    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
15084        w.with_limited_depth(|w| {
15085            self.discriminant().write_xdr(w)?;
15086            #[allow(clippy::match_same_arms)]
15087            match self {
15088                Self::V0 => ().write_xdr(w)?,
15089                Self::V3(v) => v.write_xdr(w)?,
15090            };
15091            Ok(())
15092        })
15093    }
15094}
15095
15096/// AccountEntryExtensionV2 is an XDR Struct defines as:
15097///
15098/// ```text
15099/// struct AccountEntryExtensionV2
15100/// {
15101///     uint32 numSponsored;
15102///     uint32 numSponsoring;
15103///     SponsorshipDescriptor signerSponsoringIDs<MAX_SIGNERS>;
15104///
15105///     union switch (int v)
15106///     {
15107///     case 0:
15108///         void;
15109///     case 3:
15110///         AccountEntryExtensionV3 v3;
15111///     }
15112///     ext;
15113/// };
15114/// ```
15115///
15116#[cfg_attr(feature = "alloc", derive(Default))]
15117#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
15118#[cfg_eval::cfg_eval]
15119#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15120#[cfg_attr(
15121    all(feature = "serde", feature = "alloc"),
15122    serde_with::serde_as,
15123    derive(serde::Serialize, serde::Deserialize),
15124    serde(rename_all = "snake_case")
15125)]
15126#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
15127pub struct AccountEntryExtensionV2 {
15128    pub num_sponsored: u32,
15129    pub num_sponsoring: u32,
15130    pub signer_sponsoring_i_ds: VecM<SponsorshipDescriptor, 20>,
15131    pub ext: AccountEntryExtensionV2Ext,
15132}
15133
15134impl ReadXdr for AccountEntryExtensionV2 {
15135    #[cfg(feature = "std")]
15136    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
15137        r.with_limited_depth(|r| {
15138            Ok(Self {
15139                num_sponsored: u32::read_xdr(r)?,
15140                num_sponsoring: u32::read_xdr(r)?,
15141                signer_sponsoring_i_ds: VecM::<SponsorshipDescriptor, 20>::read_xdr(r)?,
15142                ext: AccountEntryExtensionV2Ext::read_xdr(r)?,
15143            })
15144        })
15145    }
15146}
15147
15148impl WriteXdr for AccountEntryExtensionV2 {
15149    #[cfg(feature = "std")]
15150    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
15151        w.with_limited_depth(|w| {
15152            self.num_sponsored.write_xdr(w)?;
15153            self.num_sponsoring.write_xdr(w)?;
15154            self.signer_sponsoring_i_ds.write_xdr(w)?;
15155            self.ext.write_xdr(w)?;
15156            Ok(())
15157        })
15158    }
15159}
15160
15161/// AccountEntryExtensionV1Ext is an XDR NestedUnion defines as:
15162///
15163/// ```text
15164/// union switch (int v)
15165///     {
15166///     case 0:
15167///         void;
15168///     case 2:
15169///         AccountEntryExtensionV2 v2;
15170///     }
15171/// ```
15172///
15173// union with discriminant i32
15174#[cfg_eval::cfg_eval]
15175#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
15176#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15177#[cfg_attr(
15178    all(feature = "serde", feature = "alloc"),
15179    serde_with::serde_as,
15180    derive(serde::Serialize, serde::Deserialize),
15181    serde(rename_all = "snake_case")
15182)]
15183#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
15184#[allow(clippy::large_enum_variant)]
15185pub enum AccountEntryExtensionV1Ext {
15186    V0,
15187    V2(AccountEntryExtensionV2),
15188}
15189
15190#[cfg(feature = "alloc")]
15191impl Default for AccountEntryExtensionV1Ext {
15192    fn default() -> Self {
15193        Self::V0
15194    }
15195}
15196
15197impl AccountEntryExtensionV1Ext {
15198    pub const VARIANTS: [i32; 2] = [0, 2];
15199    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V2"];
15200
15201    #[must_use]
15202    pub const fn name(&self) -> &'static str {
15203        match self {
15204            Self::V0 => "V0",
15205            Self::V2(_) => "V2",
15206        }
15207    }
15208
15209    #[must_use]
15210    pub const fn discriminant(&self) -> i32 {
15211        #[allow(clippy::match_same_arms)]
15212        match self {
15213            Self::V0 => 0,
15214            Self::V2(_) => 2,
15215        }
15216    }
15217
15218    #[must_use]
15219    pub const fn variants() -> [i32; 2] {
15220        Self::VARIANTS
15221    }
15222}
15223
15224impl Name for AccountEntryExtensionV1Ext {
15225    #[must_use]
15226    fn name(&self) -> &'static str {
15227        Self::name(self)
15228    }
15229}
15230
15231impl Discriminant<i32> for AccountEntryExtensionV1Ext {
15232    #[must_use]
15233    fn discriminant(&self) -> i32 {
15234        Self::discriminant(self)
15235    }
15236}
15237
15238impl Variants<i32> for AccountEntryExtensionV1Ext {
15239    fn variants() -> slice::Iter<'static, i32> {
15240        Self::VARIANTS.iter()
15241    }
15242}
15243
15244impl Union<i32> for AccountEntryExtensionV1Ext {}
15245
15246impl ReadXdr for AccountEntryExtensionV1Ext {
15247    #[cfg(feature = "std")]
15248    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
15249        r.with_limited_depth(|r| {
15250            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
15251            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
15252            let v = match dv {
15253                0 => Self::V0,
15254                2 => Self::V2(AccountEntryExtensionV2::read_xdr(r)?),
15255                #[allow(unreachable_patterns)]
15256                _ => return Err(Error::Invalid),
15257            };
15258            Ok(v)
15259        })
15260    }
15261}
15262
15263impl WriteXdr for AccountEntryExtensionV1Ext {
15264    #[cfg(feature = "std")]
15265    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
15266        w.with_limited_depth(|w| {
15267            self.discriminant().write_xdr(w)?;
15268            #[allow(clippy::match_same_arms)]
15269            match self {
15270                Self::V0 => ().write_xdr(w)?,
15271                Self::V2(v) => v.write_xdr(w)?,
15272            };
15273            Ok(())
15274        })
15275    }
15276}
15277
15278/// AccountEntryExtensionV1 is an XDR Struct defines as:
15279///
15280/// ```text
15281/// struct AccountEntryExtensionV1
15282/// {
15283///     Liabilities liabilities;
15284///
15285///     union switch (int v)
15286///     {
15287///     case 0:
15288///         void;
15289///     case 2:
15290///         AccountEntryExtensionV2 v2;
15291///     }
15292///     ext;
15293/// };
15294/// ```
15295///
15296#[cfg_attr(feature = "alloc", derive(Default))]
15297#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
15298#[cfg_eval::cfg_eval]
15299#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15300#[cfg_attr(
15301    all(feature = "serde", feature = "alloc"),
15302    serde_with::serde_as,
15303    derive(serde::Serialize, serde::Deserialize),
15304    serde(rename_all = "snake_case")
15305)]
15306#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
15307pub struct AccountEntryExtensionV1 {
15308    pub liabilities: Liabilities,
15309    pub ext: AccountEntryExtensionV1Ext,
15310}
15311
15312impl ReadXdr for AccountEntryExtensionV1 {
15313    #[cfg(feature = "std")]
15314    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
15315        r.with_limited_depth(|r| {
15316            Ok(Self {
15317                liabilities: Liabilities::read_xdr(r)?,
15318                ext: AccountEntryExtensionV1Ext::read_xdr(r)?,
15319            })
15320        })
15321    }
15322}
15323
15324impl WriteXdr for AccountEntryExtensionV1 {
15325    #[cfg(feature = "std")]
15326    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
15327        w.with_limited_depth(|w| {
15328            self.liabilities.write_xdr(w)?;
15329            self.ext.write_xdr(w)?;
15330            Ok(())
15331        })
15332    }
15333}
15334
15335/// AccountEntryExt is an XDR NestedUnion defines as:
15336///
15337/// ```text
15338/// union switch (int v)
15339///     {
15340///     case 0:
15341///         void;
15342///     case 1:
15343///         AccountEntryExtensionV1 v1;
15344///     }
15345/// ```
15346///
15347// union with discriminant i32
15348#[cfg_eval::cfg_eval]
15349#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
15350#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15351#[cfg_attr(
15352    all(feature = "serde", feature = "alloc"),
15353    serde_with::serde_as,
15354    derive(serde::Serialize, serde::Deserialize),
15355    serde(rename_all = "snake_case")
15356)]
15357#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
15358#[allow(clippy::large_enum_variant)]
15359pub enum AccountEntryExt {
15360    V0,
15361    V1(AccountEntryExtensionV1),
15362}
15363
15364#[cfg(feature = "alloc")]
15365impl Default for AccountEntryExt {
15366    fn default() -> Self {
15367        Self::V0
15368    }
15369}
15370
15371impl AccountEntryExt {
15372    pub const VARIANTS: [i32; 2] = [0, 1];
15373    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
15374
15375    #[must_use]
15376    pub const fn name(&self) -> &'static str {
15377        match self {
15378            Self::V0 => "V0",
15379            Self::V1(_) => "V1",
15380        }
15381    }
15382
15383    #[must_use]
15384    pub const fn discriminant(&self) -> i32 {
15385        #[allow(clippy::match_same_arms)]
15386        match self {
15387            Self::V0 => 0,
15388            Self::V1(_) => 1,
15389        }
15390    }
15391
15392    #[must_use]
15393    pub const fn variants() -> [i32; 2] {
15394        Self::VARIANTS
15395    }
15396}
15397
15398impl Name for AccountEntryExt {
15399    #[must_use]
15400    fn name(&self) -> &'static str {
15401        Self::name(self)
15402    }
15403}
15404
15405impl Discriminant<i32> for AccountEntryExt {
15406    #[must_use]
15407    fn discriminant(&self) -> i32 {
15408        Self::discriminant(self)
15409    }
15410}
15411
15412impl Variants<i32> for AccountEntryExt {
15413    fn variants() -> slice::Iter<'static, i32> {
15414        Self::VARIANTS.iter()
15415    }
15416}
15417
15418impl Union<i32> for AccountEntryExt {}
15419
15420impl ReadXdr for AccountEntryExt {
15421    #[cfg(feature = "std")]
15422    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
15423        r.with_limited_depth(|r| {
15424            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
15425            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
15426            let v = match dv {
15427                0 => Self::V0,
15428                1 => Self::V1(AccountEntryExtensionV1::read_xdr(r)?),
15429                #[allow(unreachable_patterns)]
15430                _ => return Err(Error::Invalid),
15431            };
15432            Ok(v)
15433        })
15434    }
15435}
15436
15437impl WriteXdr for AccountEntryExt {
15438    #[cfg(feature = "std")]
15439    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
15440        w.with_limited_depth(|w| {
15441            self.discriminant().write_xdr(w)?;
15442            #[allow(clippy::match_same_arms)]
15443            match self {
15444                Self::V0 => ().write_xdr(w)?,
15445                Self::V1(v) => v.write_xdr(w)?,
15446            };
15447            Ok(())
15448        })
15449    }
15450}
15451
15452/// AccountEntry is an XDR Struct defines as:
15453///
15454/// ```text
15455/// struct AccountEntry
15456/// {
15457///     AccountID accountID;      // master public key for this account
15458///     int64 balance;            // in stroops
15459///     SequenceNumber seqNum;    // last sequence number used for this account
15460///     uint32 numSubEntries;     // number of sub-entries this account has
15461///                               // drives the reserve
15462///     AccountID* inflationDest; // Account to vote for during inflation
15463///     uint32 flags;             // see AccountFlags
15464///
15465///     string32 homeDomain; // can be used for reverse federation and memo lookup
15466///
15467///     // fields used for signatures
15468///     // thresholds stores unsigned bytes: [weight of master|low|medium|high]
15469///     Thresholds thresholds;
15470///
15471///     Signer signers<MAX_SIGNERS>; // possible signers for this account
15472///
15473///     // reserved for future use
15474///     union switch (int v)
15475///     {
15476///     case 0:
15477///         void;
15478///     case 1:
15479///         AccountEntryExtensionV1 v1;
15480///     }
15481///     ext;
15482/// };
15483/// ```
15484///
15485#[cfg_attr(feature = "alloc", derive(Default))]
15486#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
15487#[cfg_eval::cfg_eval]
15488#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15489#[cfg_attr(
15490    all(feature = "serde", feature = "alloc"),
15491    serde_with::serde_as,
15492    derive(serde::Serialize, serde::Deserialize),
15493    serde(rename_all = "snake_case")
15494)]
15495#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
15496pub struct AccountEntry {
15497    pub account_id: AccountId,
15498    #[cfg_attr(
15499        all(feature = "serde", feature = "alloc"),
15500        serde_as(as = "NumberOrString")
15501    )]
15502    pub balance: i64,
15503    pub seq_num: SequenceNumber,
15504    pub num_sub_entries: u32,
15505    pub inflation_dest: Option<AccountId>,
15506    pub flags: u32,
15507    pub home_domain: String32,
15508    pub thresholds: Thresholds,
15509    pub signers: VecM<Signer, 20>,
15510    pub ext: AccountEntryExt,
15511}
15512
15513impl ReadXdr for AccountEntry {
15514    #[cfg(feature = "std")]
15515    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
15516        r.with_limited_depth(|r| {
15517            Ok(Self {
15518                account_id: AccountId::read_xdr(r)?,
15519                balance: i64::read_xdr(r)?,
15520                seq_num: SequenceNumber::read_xdr(r)?,
15521                num_sub_entries: u32::read_xdr(r)?,
15522                inflation_dest: Option::<AccountId>::read_xdr(r)?,
15523                flags: u32::read_xdr(r)?,
15524                home_domain: String32::read_xdr(r)?,
15525                thresholds: Thresholds::read_xdr(r)?,
15526                signers: VecM::<Signer, 20>::read_xdr(r)?,
15527                ext: AccountEntryExt::read_xdr(r)?,
15528            })
15529        })
15530    }
15531}
15532
15533impl WriteXdr for AccountEntry {
15534    #[cfg(feature = "std")]
15535    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
15536        w.with_limited_depth(|w| {
15537            self.account_id.write_xdr(w)?;
15538            self.balance.write_xdr(w)?;
15539            self.seq_num.write_xdr(w)?;
15540            self.num_sub_entries.write_xdr(w)?;
15541            self.inflation_dest.write_xdr(w)?;
15542            self.flags.write_xdr(w)?;
15543            self.home_domain.write_xdr(w)?;
15544            self.thresholds.write_xdr(w)?;
15545            self.signers.write_xdr(w)?;
15546            self.ext.write_xdr(w)?;
15547            Ok(())
15548        })
15549    }
15550}
15551
15552/// TrustLineFlags is an XDR Enum defines as:
15553///
15554/// ```text
15555/// enum TrustLineFlags
15556/// {
15557///     // issuer has authorized account to perform transactions with its credit
15558///     AUTHORIZED_FLAG = 1,
15559///     // issuer has authorized account to maintain and reduce liabilities for its
15560///     // credit
15561///     AUTHORIZED_TO_MAINTAIN_LIABILITIES_FLAG = 2,
15562///     // issuer has specified that it may clawback its credit, and that claimable
15563///     // balances created with its credit may also be clawed back
15564///     TRUSTLINE_CLAWBACK_ENABLED_FLAG = 4
15565/// };
15566/// ```
15567///
15568// enum
15569#[cfg_attr(feature = "alloc", derive(Default))]
15570#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
15571#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15572#[cfg_attr(
15573    all(feature = "serde", feature = "alloc"),
15574    derive(serde::Serialize, serde::Deserialize),
15575    serde(rename_all = "snake_case")
15576)]
15577#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
15578#[repr(i32)]
15579pub enum TrustLineFlags {
15580    #[cfg_attr(feature = "alloc", default)]
15581    AuthorizedFlag = 1,
15582    AuthorizedToMaintainLiabilitiesFlag = 2,
15583    TrustlineClawbackEnabledFlag = 4,
15584}
15585
15586impl TrustLineFlags {
15587    pub const VARIANTS: [TrustLineFlags; 3] = [
15588        TrustLineFlags::AuthorizedFlag,
15589        TrustLineFlags::AuthorizedToMaintainLiabilitiesFlag,
15590        TrustLineFlags::TrustlineClawbackEnabledFlag,
15591    ];
15592    pub const VARIANTS_STR: [&'static str; 3] = [
15593        "AuthorizedFlag",
15594        "AuthorizedToMaintainLiabilitiesFlag",
15595        "TrustlineClawbackEnabledFlag",
15596    ];
15597
15598    #[must_use]
15599    pub const fn name(&self) -> &'static str {
15600        match self {
15601            Self::AuthorizedFlag => "AuthorizedFlag",
15602            Self::AuthorizedToMaintainLiabilitiesFlag => "AuthorizedToMaintainLiabilitiesFlag",
15603            Self::TrustlineClawbackEnabledFlag => "TrustlineClawbackEnabledFlag",
15604        }
15605    }
15606
15607    #[must_use]
15608    pub const fn variants() -> [TrustLineFlags; 3] {
15609        Self::VARIANTS
15610    }
15611}
15612
15613impl Name for TrustLineFlags {
15614    #[must_use]
15615    fn name(&self) -> &'static str {
15616        Self::name(self)
15617    }
15618}
15619
15620impl Variants<TrustLineFlags> for TrustLineFlags {
15621    fn variants() -> slice::Iter<'static, TrustLineFlags> {
15622        Self::VARIANTS.iter()
15623    }
15624}
15625
15626impl Enum for TrustLineFlags {}
15627
15628impl fmt::Display for TrustLineFlags {
15629    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
15630        f.write_str(self.name())
15631    }
15632}
15633
15634impl TryFrom<i32> for TrustLineFlags {
15635    type Error = Error;
15636
15637    fn try_from(i: i32) -> Result<Self, Error> {
15638        let e = match i {
15639            1 => TrustLineFlags::AuthorizedFlag,
15640            2 => TrustLineFlags::AuthorizedToMaintainLiabilitiesFlag,
15641            4 => TrustLineFlags::TrustlineClawbackEnabledFlag,
15642            #[allow(unreachable_patterns)]
15643            _ => return Err(Error::Invalid),
15644        };
15645        Ok(e)
15646    }
15647}
15648
15649impl From<TrustLineFlags> for i32 {
15650    #[must_use]
15651    fn from(e: TrustLineFlags) -> Self {
15652        e as Self
15653    }
15654}
15655
15656impl ReadXdr for TrustLineFlags {
15657    #[cfg(feature = "std")]
15658    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
15659        r.with_limited_depth(|r| {
15660            let e = i32::read_xdr(r)?;
15661            let v: Self = e.try_into()?;
15662            Ok(v)
15663        })
15664    }
15665}
15666
15667impl WriteXdr for TrustLineFlags {
15668    #[cfg(feature = "std")]
15669    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
15670        w.with_limited_depth(|w| {
15671            let i: i32 = (*self).into();
15672            i.write_xdr(w)
15673        })
15674    }
15675}
15676
15677/// MaskTrustlineFlags is an XDR Const defines as:
15678///
15679/// ```text
15680/// const MASK_TRUSTLINE_FLAGS = 1;
15681/// ```
15682///
15683pub const MASK_TRUSTLINE_FLAGS: u64 = 1;
15684
15685/// MaskTrustlineFlagsV13 is an XDR Const defines as:
15686///
15687/// ```text
15688/// const MASK_TRUSTLINE_FLAGS_V13 = 3;
15689/// ```
15690///
15691pub const MASK_TRUSTLINE_FLAGS_V13: u64 = 3;
15692
15693/// MaskTrustlineFlagsV17 is an XDR Const defines as:
15694///
15695/// ```text
15696/// const MASK_TRUSTLINE_FLAGS_V17 = 7;
15697/// ```
15698///
15699pub const MASK_TRUSTLINE_FLAGS_V17: u64 = 7;
15700
15701/// LiquidityPoolType is an XDR Enum defines as:
15702///
15703/// ```text
15704/// enum LiquidityPoolType
15705/// {
15706///     LIQUIDITY_POOL_CONSTANT_PRODUCT = 0
15707/// };
15708/// ```
15709///
15710// enum
15711#[cfg_attr(feature = "alloc", derive(Default))]
15712#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
15713#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15714#[cfg_attr(
15715    all(feature = "serde", feature = "alloc"),
15716    derive(serde::Serialize, serde::Deserialize),
15717    serde(rename_all = "snake_case")
15718)]
15719#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
15720#[repr(i32)]
15721pub enum LiquidityPoolType {
15722    #[cfg_attr(feature = "alloc", default)]
15723    LiquidityPoolConstantProduct = 0,
15724}
15725
15726impl LiquidityPoolType {
15727    pub const VARIANTS: [LiquidityPoolType; 1] = [LiquidityPoolType::LiquidityPoolConstantProduct];
15728    pub const VARIANTS_STR: [&'static str; 1] = ["LiquidityPoolConstantProduct"];
15729
15730    #[must_use]
15731    pub const fn name(&self) -> &'static str {
15732        match self {
15733            Self::LiquidityPoolConstantProduct => "LiquidityPoolConstantProduct",
15734        }
15735    }
15736
15737    #[must_use]
15738    pub const fn variants() -> [LiquidityPoolType; 1] {
15739        Self::VARIANTS
15740    }
15741}
15742
15743impl Name for LiquidityPoolType {
15744    #[must_use]
15745    fn name(&self) -> &'static str {
15746        Self::name(self)
15747    }
15748}
15749
15750impl Variants<LiquidityPoolType> for LiquidityPoolType {
15751    fn variants() -> slice::Iter<'static, LiquidityPoolType> {
15752        Self::VARIANTS.iter()
15753    }
15754}
15755
15756impl Enum for LiquidityPoolType {}
15757
15758impl fmt::Display for LiquidityPoolType {
15759    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
15760        f.write_str(self.name())
15761    }
15762}
15763
15764impl TryFrom<i32> for LiquidityPoolType {
15765    type Error = Error;
15766
15767    fn try_from(i: i32) -> Result<Self, Error> {
15768        let e = match i {
15769            0 => LiquidityPoolType::LiquidityPoolConstantProduct,
15770            #[allow(unreachable_patterns)]
15771            _ => return Err(Error::Invalid),
15772        };
15773        Ok(e)
15774    }
15775}
15776
15777impl From<LiquidityPoolType> for i32 {
15778    #[must_use]
15779    fn from(e: LiquidityPoolType) -> Self {
15780        e as Self
15781    }
15782}
15783
15784impl ReadXdr for LiquidityPoolType {
15785    #[cfg(feature = "std")]
15786    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
15787        r.with_limited_depth(|r| {
15788            let e = i32::read_xdr(r)?;
15789            let v: Self = e.try_into()?;
15790            Ok(v)
15791        })
15792    }
15793}
15794
15795impl WriteXdr for LiquidityPoolType {
15796    #[cfg(feature = "std")]
15797    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
15798        w.with_limited_depth(|w| {
15799            let i: i32 = (*self).into();
15800            i.write_xdr(w)
15801        })
15802    }
15803}
15804
15805/// TrustLineAsset is an XDR Union defines as:
15806///
15807/// ```text
15808/// union TrustLineAsset switch (AssetType type)
15809/// {
15810/// case ASSET_TYPE_NATIVE: // Not credit
15811///     void;
15812///
15813/// case ASSET_TYPE_CREDIT_ALPHANUM4:
15814///     AlphaNum4 alphaNum4;
15815///
15816/// case ASSET_TYPE_CREDIT_ALPHANUM12:
15817///     AlphaNum12 alphaNum12;
15818///
15819/// case ASSET_TYPE_POOL_SHARE:
15820///     PoolID liquidityPoolID;
15821///
15822///     // add other asset types here in the future
15823/// };
15824/// ```
15825///
15826// union with discriminant AssetType
15827#[cfg_eval::cfg_eval]
15828#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
15829#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15830#[cfg_attr(
15831    all(feature = "serde", feature = "alloc"),
15832    serde_with::serde_as,
15833    derive(serde::Serialize, serde::Deserialize),
15834    serde(rename_all = "snake_case")
15835)]
15836#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
15837#[allow(clippy::large_enum_variant)]
15838pub enum TrustLineAsset {
15839    Native,
15840    CreditAlphanum4(AlphaNum4),
15841    CreditAlphanum12(AlphaNum12),
15842    PoolShare(PoolId),
15843}
15844
15845#[cfg(feature = "alloc")]
15846impl Default for TrustLineAsset {
15847    fn default() -> Self {
15848        Self::Native
15849    }
15850}
15851
15852impl TrustLineAsset {
15853    pub const VARIANTS: [AssetType; 4] = [
15854        AssetType::Native,
15855        AssetType::CreditAlphanum4,
15856        AssetType::CreditAlphanum12,
15857        AssetType::PoolShare,
15858    ];
15859    pub const VARIANTS_STR: [&'static str; 4] =
15860        ["Native", "CreditAlphanum4", "CreditAlphanum12", "PoolShare"];
15861
15862    #[must_use]
15863    pub const fn name(&self) -> &'static str {
15864        match self {
15865            Self::Native => "Native",
15866            Self::CreditAlphanum4(_) => "CreditAlphanum4",
15867            Self::CreditAlphanum12(_) => "CreditAlphanum12",
15868            Self::PoolShare(_) => "PoolShare",
15869        }
15870    }
15871
15872    #[must_use]
15873    pub const fn discriminant(&self) -> AssetType {
15874        #[allow(clippy::match_same_arms)]
15875        match self {
15876            Self::Native => AssetType::Native,
15877            Self::CreditAlphanum4(_) => AssetType::CreditAlphanum4,
15878            Self::CreditAlphanum12(_) => AssetType::CreditAlphanum12,
15879            Self::PoolShare(_) => AssetType::PoolShare,
15880        }
15881    }
15882
15883    #[must_use]
15884    pub const fn variants() -> [AssetType; 4] {
15885        Self::VARIANTS
15886    }
15887}
15888
15889impl Name for TrustLineAsset {
15890    #[must_use]
15891    fn name(&self) -> &'static str {
15892        Self::name(self)
15893    }
15894}
15895
15896impl Discriminant<AssetType> for TrustLineAsset {
15897    #[must_use]
15898    fn discriminant(&self) -> AssetType {
15899        Self::discriminant(self)
15900    }
15901}
15902
15903impl Variants<AssetType> for TrustLineAsset {
15904    fn variants() -> slice::Iter<'static, AssetType> {
15905        Self::VARIANTS.iter()
15906    }
15907}
15908
15909impl Union<AssetType> for TrustLineAsset {}
15910
15911impl ReadXdr for TrustLineAsset {
15912    #[cfg(feature = "std")]
15913    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
15914        r.with_limited_depth(|r| {
15915            let dv: AssetType = <AssetType as ReadXdr>::read_xdr(r)?;
15916            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
15917            let v = match dv {
15918                AssetType::Native => Self::Native,
15919                AssetType::CreditAlphanum4 => Self::CreditAlphanum4(AlphaNum4::read_xdr(r)?),
15920                AssetType::CreditAlphanum12 => Self::CreditAlphanum12(AlphaNum12::read_xdr(r)?),
15921                AssetType::PoolShare => Self::PoolShare(PoolId::read_xdr(r)?),
15922                #[allow(unreachable_patterns)]
15923                _ => return Err(Error::Invalid),
15924            };
15925            Ok(v)
15926        })
15927    }
15928}
15929
15930impl WriteXdr for TrustLineAsset {
15931    #[cfg(feature = "std")]
15932    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
15933        w.with_limited_depth(|w| {
15934            self.discriminant().write_xdr(w)?;
15935            #[allow(clippy::match_same_arms)]
15936            match self {
15937                Self::Native => ().write_xdr(w)?,
15938                Self::CreditAlphanum4(v) => v.write_xdr(w)?,
15939                Self::CreditAlphanum12(v) => v.write_xdr(w)?,
15940                Self::PoolShare(v) => v.write_xdr(w)?,
15941            };
15942            Ok(())
15943        })
15944    }
15945}
15946
15947/// TrustLineEntryExtensionV2Ext is an XDR NestedUnion defines as:
15948///
15949/// ```text
15950/// union switch (int v)
15951///     {
15952///     case 0:
15953///         void;
15954///     }
15955/// ```
15956///
15957// union with discriminant i32
15958#[cfg_eval::cfg_eval]
15959#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
15960#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
15961#[cfg_attr(
15962    all(feature = "serde", feature = "alloc"),
15963    serde_with::serde_as,
15964    derive(serde::Serialize, serde::Deserialize),
15965    serde(rename_all = "snake_case")
15966)]
15967#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
15968#[allow(clippy::large_enum_variant)]
15969pub enum TrustLineEntryExtensionV2Ext {
15970    V0,
15971}
15972
15973#[cfg(feature = "alloc")]
15974impl Default for TrustLineEntryExtensionV2Ext {
15975    fn default() -> Self {
15976        Self::V0
15977    }
15978}
15979
15980impl TrustLineEntryExtensionV2Ext {
15981    pub const VARIANTS: [i32; 1] = [0];
15982    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
15983
15984    #[must_use]
15985    pub const fn name(&self) -> &'static str {
15986        match self {
15987            Self::V0 => "V0",
15988        }
15989    }
15990
15991    #[must_use]
15992    pub const fn discriminant(&self) -> i32 {
15993        #[allow(clippy::match_same_arms)]
15994        match self {
15995            Self::V0 => 0,
15996        }
15997    }
15998
15999    #[must_use]
16000    pub const fn variants() -> [i32; 1] {
16001        Self::VARIANTS
16002    }
16003}
16004
16005impl Name for TrustLineEntryExtensionV2Ext {
16006    #[must_use]
16007    fn name(&self) -> &'static str {
16008        Self::name(self)
16009    }
16010}
16011
16012impl Discriminant<i32> for TrustLineEntryExtensionV2Ext {
16013    #[must_use]
16014    fn discriminant(&self) -> i32 {
16015        Self::discriminant(self)
16016    }
16017}
16018
16019impl Variants<i32> for TrustLineEntryExtensionV2Ext {
16020    fn variants() -> slice::Iter<'static, i32> {
16021        Self::VARIANTS.iter()
16022    }
16023}
16024
16025impl Union<i32> for TrustLineEntryExtensionV2Ext {}
16026
16027impl ReadXdr for TrustLineEntryExtensionV2Ext {
16028    #[cfg(feature = "std")]
16029    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
16030        r.with_limited_depth(|r| {
16031            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
16032            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
16033            let v = match dv {
16034                0 => Self::V0,
16035                #[allow(unreachable_patterns)]
16036                _ => return Err(Error::Invalid),
16037            };
16038            Ok(v)
16039        })
16040    }
16041}
16042
16043impl WriteXdr for TrustLineEntryExtensionV2Ext {
16044    #[cfg(feature = "std")]
16045    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
16046        w.with_limited_depth(|w| {
16047            self.discriminant().write_xdr(w)?;
16048            #[allow(clippy::match_same_arms)]
16049            match self {
16050                Self::V0 => ().write_xdr(w)?,
16051            };
16052            Ok(())
16053        })
16054    }
16055}
16056
16057/// TrustLineEntryExtensionV2 is an XDR Struct defines as:
16058///
16059/// ```text
16060/// struct TrustLineEntryExtensionV2
16061/// {
16062///     int32 liquidityPoolUseCount;
16063///
16064///     union switch (int v)
16065///     {
16066///     case 0:
16067///         void;
16068///     }
16069///     ext;
16070/// };
16071/// ```
16072///
16073#[cfg_attr(feature = "alloc", derive(Default))]
16074#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
16075#[cfg_eval::cfg_eval]
16076#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16077#[cfg_attr(
16078    all(feature = "serde", feature = "alloc"),
16079    serde_with::serde_as,
16080    derive(serde::Serialize, serde::Deserialize),
16081    serde(rename_all = "snake_case")
16082)]
16083#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16084pub struct TrustLineEntryExtensionV2 {
16085    pub liquidity_pool_use_count: i32,
16086    pub ext: TrustLineEntryExtensionV2Ext,
16087}
16088
16089impl ReadXdr for TrustLineEntryExtensionV2 {
16090    #[cfg(feature = "std")]
16091    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
16092        r.with_limited_depth(|r| {
16093            Ok(Self {
16094                liquidity_pool_use_count: i32::read_xdr(r)?,
16095                ext: TrustLineEntryExtensionV2Ext::read_xdr(r)?,
16096            })
16097        })
16098    }
16099}
16100
16101impl WriteXdr for TrustLineEntryExtensionV2 {
16102    #[cfg(feature = "std")]
16103    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
16104        w.with_limited_depth(|w| {
16105            self.liquidity_pool_use_count.write_xdr(w)?;
16106            self.ext.write_xdr(w)?;
16107            Ok(())
16108        })
16109    }
16110}
16111
16112/// TrustLineEntryV1Ext is an XDR NestedUnion defines as:
16113///
16114/// ```text
16115/// union switch (int v)
16116///             {
16117///             case 0:
16118///                 void;
16119///             case 2:
16120///                 TrustLineEntryExtensionV2 v2;
16121///             }
16122/// ```
16123///
16124// union with discriminant i32
16125#[cfg_eval::cfg_eval]
16126#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
16127#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16128#[cfg_attr(
16129    all(feature = "serde", feature = "alloc"),
16130    serde_with::serde_as,
16131    derive(serde::Serialize, serde::Deserialize),
16132    serde(rename_all = "snake_case")
16133)]
16134#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16135#[allow(clippy::large_enum_variant)]
16136pub enum TrustLineEntryV1Ext {
16137    V0,
16138    V2(TrustLineEntryExtensionV2),
16139}
16140
16141#[cfg(feature = "alloc")]
16142impl Default for TrustLineEntryV1Ext {
16143    fn default() -> Self {
16144        Self::V0
16145    }
16146}
16147
16148impl TrustLineEntryV1Ext {
16149    pub const VARIANTS: [i32; 2] = [0, 2];
16150    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V2"];
16151
16152    #[must_use]
16153    pub const fn name(&self) -> &'static str {
16154        match self {
16155            Self::V0 => "V0",
16156            Self::V2(_) => "V2",
16157        }
16158    }
16159
16160    #[must_use]
16161    pub const fn discriminant(&self) -> i32 {
16162        #[allow(clippy::match_same_arms)]
16163        match self {
16164            Self::V0 => 0,
16165            Self::V2(_) => 2,
16166        }
16167    }
16168
16169    #[must_use]
16170    pub const fn variants() -> [i32; 2] {
16171        Self::VARIANTS
16172    }
16173}
16174
16175impl Name for TrustLineEntryV1Ext {
16176    #[must_use]
16177    fn name(&self) -> &'static str {
16178        Self::name(self)
16179    }
16180}
16181
16182impl Discriminant<i32> for TrustLineEntryV1Ext {
16183    #[must_use]
16184    fn discriminant(&self) -> i32 {
16185        Self::discriminant(self)
16186    }
16187}
16188
16189impl Variants<i32> for TrustLineEntryV1Ext {
16190    fn variants() -> slice::Iter<'static, i32> {
16191        Self::VARIANTS.iter()
16192    }
16193}
16194
16195impl Union<i32> for TrustLineEntryV1Ext {}
16196
16197impl ReadXdr for TrustLineEntryV1Ext {
16198    #[cfg(feature = "std")]
16199    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
16200        r.with_limited_depth(|r| {
16201            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
16202            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
16203            let v = match dv {
16204                0 => Self::V0,
16205                2 => Self::V2(TrustLineEntryExtensionV2::read_xdr(r)?),
16206                #[allow(unreachable_patterns)]
16207                _ => return Err(Error::Invalid),
16208            };
16209            Ok(v)
16210        })
16211    }
16212}
16213
16214impl WriteXdr for TrustLineEntryV1Ext {
16215    #[cfg(feature = "std")]
16216    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
16217        w.with_limited_depth(|w| {
16218            self.discriminant().write_xdr(w)?;
16219            #[allow(clippy::match_same_arms)]
16220            match self {
16221                Self::V0 => ().write_xdr(w)?,
16222                Self::V2(v) => v.write_xdr(w)?,
16223            };
16224            Ok(())
16225        })
16226    }
16227}
16228
16229/// TrustLineEntryV1 is an XDR NestedStruct defines as:
16230///
16231/// ```text
16232/// struct
16233///         {
16234///             Liabilities liabilities;
16235///
16236///             union switch (int v)
16237///             {
16238///             case 0:
16239///                 void;
16240///             case 2:
16241///                 TrustLineEntryExtensionV2 v2;
16242///             }
16243///             ext;
16244///         }
16245/// ```
16246///
16247#[cfg_attr(feature = "alloc", derive(Default))]
16248#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
16249#[cfg_eval::cfg_eval]
16250#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16251#[cfg_attr(
16252    all(feature = "serde", feature = "alloc"),
16253    serde_with::serde_as,
16254    derive(serde::Serialize, serde::Deserialize),
16255    serde(rename_all = "snake_case")
16256)]
16257#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16258pub struct TrustLineEntryV1 {
16259    pub liabilities: Liabilities,
16260    pub ext: TrustLineEntryV1Ext,
16261}
16262
16263impl ReadXdr for TrustLineEntryV1 {
16264    #[cfg(feature = "std")]
16265    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
16266        r.with_limited_depth(|r| {
16267            Ok(Self {
16268                liabilities: Liabilities::read_xdr(r)?,
16269                ext: TrustLineEntryV1Ext::read_xdr(r)?,
16270            })
16271        })
16272    }
16273}
16274
16275impl WriteXdr for TrustLineEntryV1 {
16276    #[cfg(feature = "std")]
16277    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
16278        w.with_limited_depth(|w| {
16279            self.liabilities.write_xdr(w)?;
16280            self.ext.write_xdr(w)?;
16281            Ok(())
16282        })
16283    }
16284}
16285
16286/// TrustLineEntryExt is an XDR NestedUnion defines as:
16287///
16288/// ```text
16289/// union switch (int v)
16290///     {
16291///     case 0:
16292///         void;
16293///     case 1:
16294///         struct
16295///         {
16296///             Liabilities liabilities;
16297///
16298///             union switch (int v)
16299///             {
16300///             case 0:
16301///                 void;
16302///             case 2:
16303///                 TrustLineEntryExtensionV2 v2;
16304///             }
16305///             ext;
16306///         } v1;
16307///     }
16308/// ```
16309///
16310// union with discriminant i32
16311#[cfg_eval::cfg_eval]
16312#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
16313#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16314#[cfg_attr(
16315    all(feature = "serde", feature = "alloc"),
16316    serde_with::serde_as,
16317    derive(serde::Serialize, serde::Deserialize),
16318    serde(rename_all = "snake_case")
16319)]
16320#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16321#[allow(clippy::large_enum_variant)]
16322pub enum TrustLineEntryExt {
16323    V0,
16324    V1(TrustLineEntryV1),
16325}
16326
16327#[cfg(feature = "alloc")]
16328impl Default for TrustLineEntryExt {
16329    fn default() -> Self {
16330        Self::V0
16331    }
16332}
16333
16334impl TrustLineEntryExt {
16335    pub const VARIANTS: [i32; 2] = [0, 1];
16336    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
16337
16338    #[must_use]
16339    pub const fn name(&self) -> &'static str {
16340        match self {
16341            Self::V0 => "V0",
16342            Self::V1(_) => "V1",
16343        }
16344    }
16345
16346    #[must_use]
16347    pub const fn discriminant(&self) -> i32 {
16348        #[allow(clippy::match_same_arms)]
16349        match self {
16350            Self::V0 => 0,
16351            Self::V1(_) => 1,
16352        }
16353    }
16354
16355    #[must_use]
16356    pub const fn variants() -> [i32; 2] {
16357        Self::VARIANTS
16358    }
16359}
16360
16361impl Name for TrustLineEntryExt {
16362    #[must_use]
16363    fn name(&self) -> &'static str {
16364        Self::name(self)
16365    }
16366}
16367
16368impl Discriminant<i32> for TrustLineEntryExt {
16369    #[must_use]
16370    fn discriminant(&self) -> i32 {
16371        Self::discriminant(self)
16372    }
16373}
16374
16375impl Variants<i32> for TrustLineEntryExt {
16376    fn variants() -> slice::Iter<'static, i32> {
16377        Self::VARIANTS.iter()
16378    }
16379}
16380
16381impl Union<i32> for TrustLineEntryExt {}
16382
16383impl ReadXdr for TrustLineEntryExt {
16384    #[cfg(feature = "std")]
16385    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
16386        r.with_limited_depth(|r| {
16387            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
16388            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
16389            let v = match dv {
16390                0 => Self::V0,
16391                1 => Self::V1(TrustLineEntryV1::read_xdr(r)?),
16392                #[allow(unreachable_patterns)]
16393                _ => return Err(Error::Invalid),
16394            };
16395            Ok(v)
16396        })
16397    }
16398}
16399
16400impl WriteXdr for TrustLineEntryExt {
16401    #[cfg(feature = "std")]
16402    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
16403        w.with_limited_depth(|w| {
16404            self.discriminant().write_xdr(w)?;
16405            #[allow(clippy::match_same_arms)]
16406            match self {
16407                Self::V0 => ().write_xdr(w)?,
16408                Self::V1(v) => v.write_xdr(w)?,
16409            };
16410            Ok(())
16411        })
16412    }
16413}
16414
16415/// TrustLineEntry is an XDR Struct defines as:
16416///
16417/// ```text
16418/// struct TrustLineEntry
16419/// {
16420///     AccountID accountID;  // account this trustline belongs to
16421///     TrustLineAsset asset; // type of asset (with issuer)
16422///     int64 balance;        // how much of this asset the user has.
16423///                           // Asset defines the unit for this;
16424///
16425///     int64 limit;  // balance cannot be above this
16426///     uint32 flags; // see TrustLineFlags
16427///
16428///     // reserved for future use
16429///     union switch (int v)
16430///     {
16431///     case 0:
16432///         void;
16433///     case 1:
16434///         struct
16435///         {
16436///             Liabilities liabilities;
16437///
16438///             union switch (int v)
16439///             {
16440///             case 0:
16441///                 void;
16442///             case 2:
16443///                 TrustLineEntryExtensionV2 v2;
16444///             }
16445///             ext;
16446///         } v1;
16447///     }
16448///     ext;
16449/// };
16450/// ```
16451///
16452#[cfg_attr(feature = "alloc", derive(Default))]
16453#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
16454#[cfg_eval::cfg_eval]
16455#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16456#[cfg_attr(
16457    all(feature = "serde", feature = "alloc"),
16458    serde_with::serde_as,
16459    derive(serde::Serialize, serde::Deserialize),
16460    serde(rename_all = "snake_case")
16461)]
16462#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16463pub struct TrustLineEntry {
16464    pub account_id: AccountId,
16465    pub asset: TrustLineAsset,
16466    #[cfg_attr(
16467        all(feature = "serde", feature = "alloc"),
16468        serde_as(as = "NumberOrString")
16469    )]
16470    pub balance: i64,
16471    #[cfg_attr(
16472        all(feature = "serde", feature = "alloc"),
16473        serde_as(as = "NumberOrString")
16474    )]
16475    pub limit: i64,
16476    pub flags: u32,
16477    pub ext: TrustLineEntryExt,
16478}
16479
16480impl ReadXdr for TrustLineEntry {
16481    #[cfg(feature = "std")]
16482    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
16483        r.with_limited_depth(|r| {
16484            Ok(Self {
16485                account_id: AccountId::read_xdr(r)?,
16486                asset: TrustLineAsset::read_xdr(r)?,
16487                balance: i64::read_xdr(r)?,
16488                limit: i64::read_xdr(r)?,
16489                flags: u32::read_xdr(r)?,
16490                ext: TrustLineEntryExt::read_xdr(r)?,
16491            })
16492        })
16493    }
16494}
16495
16496impl WriteXdr for TrustLineEntry {
16497    #[cfg(feature = "std")]
16498    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
16499        w.with_limited_depth(|w| {
16500            self.account_id.write_xdr(w)?;
16501            self.asset.write_xdr(w)?;
16502            self.balance.write_xdr(w)?;
16503            self.limit.write_xdr(w)?;
16504            self.flags.write_xdr(w)?;
16505            self.ext.write_xdr(w)?;
16506            Ok(())
16507        })
16508    }
16509}
16510
16511/// OfferEntryFlags is an XDR Enum defines as:
16512///
16513/// ```text
16514/// enum OfferEntryFlags
16515/// {
16516///     // an offer with this flag will not act on and take a reverse offer of equal
16517///     // price
16518///     PASSIVE_FLAG = 1
16519/// };
16520/// ```
16521///
16522// enum
16523#[cfg_attr(feature = "alloc", derive(Default))]
16524#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
16525#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16526#[cfg_attr(
16527    all(feature = "serde", feature = "alloc"),
16528    derive(serde::Serialize, serde::Deserialize),
16529    serde(rename_all = "snake_case")
16530)]
16531#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16532#[repr(i32)]
16533pub enum OfferEntryFlags {
16534    #[cfg_attr(feature = "alloc", default)]
16535    PassiveFlag = 1,
16536}
16537
16538impl OfferEntryFlags {
16539    pub const VARIANTS: [OfferEntryFlags; 1] = [OfferEntryFlags::PassiveFlag];
16540    pub const VARIANTS_STR: [&'static str; 1] = ["PassiveFlag"];
16541
16542    #[must_use]
16543    pub const fn name(&self) -> &'static str {
16544        match self {
16545            Self::PassiveFlag => "PassiveFlag",
16546        }
16547    }
16548
16549    #[must_use]
16550    pub const fn variants() -> [OfferEntryFlags; 1] {
16551        Self::VARIANTS
16552    }
16553}
16554
16555impl Name for OfferEntryFlags {
16556    #[must_use]
16557    fn name(&self) -> &'static str {
16558        Self::name(self)
16559    }
16560}
16561
16562impl Variants<OfferEntryFlags> for OfferEntryFlags {
16563    fn variants() -> slice::Iter<'static, OfferEntryFlags> {
16564        Self::VARIANTS.iter()
16565    }
16566}
16567
16568impl Enum for OfferEntryFlags {}
16569
16570impl fmt::Display for OfferEntryFlags {
16571    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16572        f.write_str(self.name())
16573    }
16574}
16575
16576impl TryFrom<i32> for OfferEntryFlags {
16577    type Error = Error;
16578
16579    fn try_from(i: i32) -> Result<Self, Error> {
16580        let e = match i {
16581            1 => OfferEntryFlags::PassiveFlag,
16582            #[allow(unreachable_patterns)]
16583            _ => return Err(Error::Invalid),
16584        };
16585        Ok(e)
16586    }
16587}
16588
16589impl From<OfferEntryFlags> for i32 {
16590    #[must_use]
16591    fn from(e: OfferEntryFlags) -> Self {
16592        e as Self
16593    }
16594}
16595
16596impl ReadXdr for OfferEntryFlags {
16597    #[cfg(feature = "std")]
16598    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
16599        r.with_limited_depth(|r| {
16600            let e = i32::read_xdr(r)?;
16601            let v: Self = e.try_into()?;
16602            Ok(v)
16603        })
16604    }
16605}
16606
16607impl WriteXdr for OfferEntryFlags {
16608    #[cfg(feature = "std")]
16609    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
16610        w.with_limited_depth(|w| {
16611            let i: i32 = (*self).into();
16612            i.write_xdr(w)
16613        })
16614    }
16615}
16616
16617/// MaskOfferentryFlags is an XDR Const defines as:
16618///
16619/// ```text
16620/// const MASK_OFFERENTRY_FLAGS = 1;
16621/// ```
16622///
16623pub const MASK_OFFERENTRY_FLAGS: u64 = 1;
16624
16625/// OfferEntryExt is an XDR NestedUnion defines as:
16626///
16627/// ```text
16628/// union switch (int v)
16629///     {
16630///     case 0:
16631///         void;
16632///     }
16633/// ```
16634///
16635// union with discriminant i32
16636#[cfg_eval::cfg_eval]
16637#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
16638#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16639#[cfg_attr(
16640    all(feature = "serde", feature = "alloc"),
16641    serde_with::serde_as,
16642    derive(serde::Serialize, serde::Deserialize),
16643    serde(rename_all = "snake_case")
16644)]
16645#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16646#[allow(clippy::large_enum_variant)]
16647pub enum OfferEntryExt {
16648    V0,
16649}
16650
16651#[cfg(feature = "alloc")]
16652impl Default for OfferEntryExt {
16653    fn default() -> Self {
16654        Self::V0
16655    }
16656}
16657
16658impl OfferEntryExt {
16659    pub const VARIANTS: [i32; 1] = [0];
16660    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
16661
16662    #[must_use]
16663    pub const fn name(&self) -> &'static str {
16664        match self {
16665            Self::V0 => "V0",
16666        }
16667    }
16668
16669    #[must_use]
16670    pub const fn discriminant(&self) -> i32 {
16671        #[allow(clippy::match_same_arms)]
16672        match self {
16673            Self::V0 => 0,
16674        }
16675    }
16676
16677    #[must_use]
16678    pub const fn variants() -> [i32; 1] {
16679        Self::VARIANTS
16680    }
16681}
16682
16683impl Name for OfferEntryExt {
16684    #[must_use]
16685    fn name(&self) -> &'static str {
16686        Self::name(self)
16687    }
16688}
16689
16690impl Discriminant<i32> for OfferEntryExt {
16691    #[must_use]
16692    fn discriminant(&self) -> i32 {
16693        Self::discriminant(self)
16694    }
16695}
16696
16697impl Variants<i32> for OfferEntryExt {
16698    fn variants() -> slice::Iter<'static, i32> {
16699        Self::VARIANTS.iter()
16700    }
16701}
16702
16703impl Union<i32> for OfferEntryExt {}
16704
16705impl ReadXdr for OfferEntryExt {
16706    #[cfg(feature = "std")]
16707    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
16708        r.with_limited_depth(|r| {
16709            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
16710            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
16711            let v = match dv {
16712                0 => Self::V0,
16713                #[allow(unreachable_patterns)]
16714                _ => return Err(Error::Invalid),
16715            };
16716            Ok(v)
16717        })
16718    }
16719}
16720
16721impl WriteXdr for OfferEntryExt {
16722    #[cfg(feature = "std")]
16723    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
16724        w.with_limited_depth(|w| {
16725            self.discriminant().write_xdr(w)?;
16726            #[allow(clippy::match_same_arms)]
16727            match self {
16728                Self::V0 => ().write_xdr(w)?,
16729            };
16730            Ok(())
16731        })
16732    }
16733}
16734
16735/// OfferEntry is an XDR Struct defines as:
16736///
16737/// ```text
16738/// struct OfferEntry
16739/// {
16740///     AccountID sellerID;
16741///     int64 offerID;
16742///     Asset selling; // A
16743///     Asset buying;  // B
16744///     int64 amount;  // amount of A
16745///
16746///     /* price for this offer:
16747///         price of A in terms of B
16748///         price=AmountB/AmountA=priceNumerator/priceDenominator
16749///         price is after fees
16750///     */
16751///     Price price;
16752///     uint32 flags; // see OfferEntryFlags
16753///
16754///     // reserved for future use
16755///     union switch (int v)
16756///     {
16757///     case 0:
16758///         void;
16759///     }
16760///     ext;
16761/// };
16762/// ```
16763///
16764#[cfg_attr(feature = "alloc", derive(Default))]
16765#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
16766#[cfg_eval::cfg_eval]
16767#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16768#[cfg_attr(
16769    all(feature = "serde", feature = "alloc"),
16770    serde_with::serde_as,
16771    derive(serde::Serialize, serde::Deserialize),
16772    serde(rename_all = "snake_case")
16773)]
16774#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16775pub struct OfferEntry {
16776    pub seller_id: AccountId,
16777    #[cfg_attr(
16778        all(feature = "serde", feature = "alloc"),
16779        serde_as(as = "NumberOrString")
16780    )]
16781    pub offer_id: i64,
16782    pub selling: Asset,
16783    pub buying: Asset,
16784    #[cfg_attr(
16785        all(feature = "serde", feature = "alloc"),
16786        serde_as(as = "NumberOrString")
16787    )]
16788    pub amount: i64,
16789    pub price: Price,
16790    pub flags: u32,
16791    pub ext: OfferEntryExt,
16792}
16793
16794impl ReadXdr for OfferEntry {
16795    #[cfg(feature = "std")]
16796    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
16797        r.with_limited_depth(|r| {
16798            Ok(Self {
16799                seller_id: AccountId::read_xdr(r)?,
16800                offer_id: i64::read_xdr(r)?,
16801                selling: Asset::read_xdr(r)?,
16802                buying: Asset::read_xdr(r)?,
16803                amount: i64::read_xdr(r)?,
16804                price: Price::read_xdr(r)?,
16805                flags: u32::read_xdr(r)?,
16806                ext: OfferEntryExt::read_xdr(r)?,
16807            })
16808        })
16809    }
16810}
16811
16812impl WriteXdr for OfferEntry {
16813    #[cfg(feature = "std")]
16814    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
16815        w.with_limited_depth(|w| {
16816            self.seller_id.write_xdr(w)?;
16817            self.offer_id.write_xdr(w)?;
16818            self.selling.write_xdr(w)?;
16819            self.buying.write_xdr(w)?;
16820            self.amount.write_xdr(w)?;
16821            self.price.write_xdr(w)?;
16822            self.flags.write_xdr(w)?;
16823            self.ext.write_xdr(w)?;
16824            Ok(())
16825        })
16826    }
16827}
16828
16829/// DataEntryExt is an XDR NestedUnion defines as:
16830///
16831/// ```text
16832/// union switch (int v)
16833///     {
16834///     case 0:
16835///         void;
16836///     }
16837/// ```
16838///
16839// union with discriminant i32
16840#[cfg_eval::cfg_eval]
16841#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
16842#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16843#[cfg_attr(
16844    all(feature = "serde", feature = "alloc"),
16845    serde_with::serde_as,
16846    derive(serde::Serialize, serde::Deserialize),
16847    serde(rename_all = "snake_case")
16848)]
16849#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16850#[allow(clippy::large_enum_variant)]
16851pub enum DataEntryExt {
16852    V0,
16853}
16854
16855#[cfg(feature = "alloc")]
16856impl Default for DataEntryExt {
16857    fn default() -> Self {
16858        Self::V0
16859    }
16860}
16861
16862impl DataEntryExt {
16863    pub const VARIANTS: [i32; 1] = [0];
16864    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
16865
16866    #[must_use]
16867    pub const fn name(&self) -> &'static str {
16868        match self {
16869            Self::V0 => "V0",
16870        }
16871    }
16872
16873    #[must_use]
16874    pub const fn discriminant(&self) -> i32 {
16875        #[allow(clippy::match_same_arms)]
16876        match self {
16877            Self::V0 => 0,
16878        }
16879    }
16880
16881    #[must_use]
16882    pub const fn variants() -> [i32; 1] {
16883        Self::VARIANTS
16884    }
16885}
16886
16887impl Name for DataEntryExt {
16888    #[must_use]
16889    fn name(&self) -> &'static str {
16890        Self::name(self)
16891    }
16892}
16893
16894impl Discriminant<i32> for DataEntryExt {
16895    #[must_use]
16896    fn discriminant(&self) -> i32 {
16897        Self::discriminant(self)
16898    }
16899}
16900
16901impl Variants<i32> for DataEntryExt {
16902    fn variants() -> slice::Iter<'static, i32> {
16903        Self::VARIANTS.iter()
16904    }
16905}
16906
16907impl Union<i32> for DataEntryExt {}
16908
16909impl ReadXdr for DataEntryExt {
16910    #[cfg(feature = "std")]
16911    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
16912        r.with_limited_depth(|r| {
16913            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
16914            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
16915            let v = match dv {
16916                0 => Self::V0,
16917                #[allow(unreachable_patterns)]
16918                _ => return Err(Error::Invalid),
16919            };
16920            Ok(v)
16921        })
16922    }
16923}
16924
16925impl WriteXdr for DataEntryExt {
16926    #[cfg(feature = "std")]
16927    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
16928        w.with_limited_depth(|w| {
16929            self.discriminant().write_xdr(w)?;
16930            #[allow(clippy::match_same_arms)]
16931            match self {
16932                Self::V0 => ().write_xdr(w)?,
16933            };
16934            Ok(())
16935        })
16936    }
16937}
16938
16939/// DataEntry is an XDR Struct defines as:
16940///
16941/// ```text
16942/// struct DataEntry
16943/// {
16944///     AccountID accountID; // account this data belongs to
16945///     string64 dataName;
16946///     DataValue dataValue;
16947///
16948///     // reserved for future use
16949///     union switch (int v)
16950///     {
16951///     case 0:
16952///         void;
16953///     }
16954///     ext;
16955/// };
16956/// ```
16957///
16958#[cfg_attr(feature = "alloc", derive(Default))]
16959#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
16960#[cfg_eval::cfg_eval]
16961#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
16962#[cfg_attr(
16963    all(feature = "serde", feature = "alloc"),
16964    serde_with::serde_as,
16965    derive(serde::Serialize, serde::Deserialize),
16966    serde(rename_all = "snake_case")
16967)]
16968#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
16969pub struct DataEntry {
16970    pub account_id: AccountId,
16971    pub data_name: String64,
16972    pub data_value: DataValue,
16973    pub ext: DataEntryExt,
16974}
16975
16976impl ReadXdr for DataEntry {
16977    #[cfg(feature = "std")]
16978    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
16979        r.with_limited_depth(|r| {
16980            Ok(Self {
16981                account_id: AccountId::read_xdr(r)?,
16982                data_name: String64::read_xdr(r)?,
16983                data_value: DataValue::read_xdr(r)?,
16984                ext: DataEntryExt::read_xdr(r)?,
16985            })
16986        })
16987    }
16988}
16989
16990impl WriteXdr for DataEntry {
16991    #[cfg(feature = "std")]
16992    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
16993        w.with_limited_depth(|w| {
16994            self.account_id.write_xdr(w)?;
16995            self.data_name.write_xdr(w)?;
16996            self.data_value.write_xdr(w)?;
16997            self.ext.write_xdr(w)?;
16998            Ok(())
16999        })
17000    }
17001}
17002
17003/// ClaimPredicateType is an XDR Enum defines as:
17004///
17005/// ```text
17006/// enum ClaimPredicateType
17007/// {
17008///     CLAIM_PREDICATE_UNCONDITIONAL = 0,
17009///     CLAIM_PREDICATE_AND = 1,
17010///     CLAIM_PREDICATE_OR = 2,
17011///     CLAIM_PREDICATE_NOT = 3,
17012///     CLAIM_PREDICATE_BEFORE_ABSOLUTE_TIME = 4,
17013///     CLAIM_PREDICATE_BEFORE_RELATIVE_TIME = 5
17014/// };
17015/// ```
17016///
17017// enum
17018#[cfg_attr(feature = "alloc", derive(Default))]
17019#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
17020#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17021#[cfg_attr(
17022    all(feature = "serde", feature = "alloc"),
17023    derive(serde::Serialize, serde::Deserialize),
17024    serde(rename_all = "snake_case")
17025)]
17026#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
17027#[repr(i32)]
17028pub enum ClaimPredicateType {
17029    #[cfg_attr(feature = "alloc", default)]
17030    Unconditional = 0,
17031    And = 1,
17032    Or = 2,
17033    Not = 3,
17034    BeforeAbsoluteTime = 4,
17035    BeforeRelativeTime = 5,
17036}
17037
17038impl ClaimPredicateType {
17039    pub const VARIANTS: [ClaimPredicateType; 6] = [
17040        ClaimPredicateType::Unconditional,
17041        ClaimPredicateType::And,
17042        ClaimPredicateType::Or,
17043        ClaimPredicateType::Not,
17044        ClaimPredicateType::BeforeAbsoluteTime,
17045        ClaimPredicateType::BeforeRelativeTime,
17046    ];
17047    pub const VARIANTS_STR: [&'static str; 6] = [
17048        "Unconditional",
17049        "And",
17050        "Or",
17051        "Not",
17052        "BeforeAbsoluteTime",
17053        "BeforeRelativeTime",
17054    ];
17055
17056    #[must_use]
17057    pub const fn name(&self) -> &'static str {
17058        match self {
17059            Self::Unconditional => "Unconditional",
17060            Self::And => "And",
17061            Self::Or => "Or",
17062            Self::Not => "Not",
17063            Self::BeforeAbsoluteTime => "BeforeAbsoluteTime",
17064            Self::BeforeRelativeTime => "BeforeRelativeTime",
17065        }
17066    }
17067
17068    #[must_use]
17069    pub const fn variants() -> [ClaimPredicateType; 6] {
17070        Self::VARIANTS
17071    }
17072}
17073
17074impl Name for ClaimPredicateType {
17075    #[must_use]
17076    fn name(&self) -> &'static str {
17077        Self::name(self)
17078    }
17079}
17080
17081impl Variants<ClaimPredicateType> for ClaimPredicateType {
17082    fn variants() -> slice::Iter<'static, ClaimPredicateType> {
17083        Self::VARIANTS.iter()
17084    }
17085}
17086
17087impl Enum for ClaimPredicateType {}
17088
17089impl fmt::Display for ClaimPredicateType {
17090    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17091        f.write_str(self.name())
17092    }
17093}
17094
17095impl TryFrom<i32> for ClaimPredicateType {
17096    type Error = Error;
17097
17098    fn try_from(i: i32) -> Result<Self, Error> {
17099        let e = match i {
17100            0 => ClaimPredicateType::Unconditional,
17101            1 => ClaimPredicateType::And,
17102            2 => ClaimPredicateType::Or,
17103            3 => ClaimPredicateType::Not,
17104            4 => ClaimPredicateType::BeforeAbsoluteTime,
17105            5 => ClaimPredicateType::BeforeRelativeTime,
17106            #[allow(unreachable_patterns)]
17107            _ => return Err(Error::Invalid),
17108        };
17109        Ok(e)
17110    }
17111}
17112
17113impl From<ClaimPredicateType> for i32 {
17114    #[must_use]
17115    fn from(e: ClaimPredicateType) -> Self {
17116        e as Self
17117    }
17118}
17119
17120impl ReadXdr for ClaimPredicateType {
17121    #[cfg(feature = "std")]
17122    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
17123        r.with_limited_depth(|r| {
17124            let e = i32::read_xdr(r)?;
17125            let v: Self = e.try_into()?;
17126            Ok(v)
17127        })
17128    }
17129}
17130
17131impl WriteXdr for ClaimPredicateType {
17132    #[cfg(feature = "std")]
17133    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
17134        w.with_limited_depth(|w| {
17135            let i: i32 = (*self).into();
17136            i.write_xdr(w)
17137        })
17138    }
17139}
17140
17141/// ClaimPredicate is an XDR Union defines as:
17142///
17143/// ```text
17144/// union ClaimPredicate switch (ClaimPredicateType type)
17145/// {
17146/// case CLAIM_PREDICATE_UNCONDITIONAL:
17147///     void;
17148/// case CLAIM_PREDICATE_AND:
17149///     ClaimPredicate andPredicates<2>;
17150/// case CLAIM_PREDICATE_OR:
17151///     ClaimPredicate orPredicates<2>;
17152/// case CLAIM_PREDICATE_NOT:
17153///     ClaimPredicate* notPredicate;
17154/// case CLAIM_PREDICATE_BEFORE_ABSOLUTE_TIME:
17155///     int64 absBefore; // Predicate will be true if closeTime < absBefore
17156/// case CLAIM_PREDICATE_BEFORE_RELATIVE_TIME:
17157///     int64 relBefore; // Seconds since closeTime of the ledger in which the
17158///                      // ClaimableBalanceEntry was created
17159/// };
17160/// ```
17161///
17162// union with discriminant ClaimPredicateType
17163#[cfg_eval::cfg_eval]
17164#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
17165#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17166#[cfg_attr(
17167    all(feature = "serde", feature = "alloc"),
17168    serde_with::serde_as,
17169    derive(serde::Serialize, serde::Deserialize),
17170    serde(rename_all = "snake_case")
17171)]
17172#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
17173#[allow(clippy::large_enum_variant)]
17174pub enum ClaimPredicate {
17175    Unconditional,
17176    And(VecM<ClaimPredicate, 2>),
17177    Or(VecM<ClaimPredicate, 2>),
17178    Not(Option<Box<ClaimPredicate>>),
17179    BeforeAbsoluteTime(
17180        #[cfg_attr(
17181            all(feature = "serde", feature = "alloc"),
17182            serde_as(as = "NumberOrString")
17183        )]
17184        i64,
17185    ),
17186    BeforeRelativeTime(
17187        #[cfg_attr(
17188            all(feature = "serde", feature = "alloc"),
17189            serde_as(as = "NumberOrString")
17190        )]
17191        i64,
17192    ),
17193}
17194
17195#[cfg(feature = "alloc")]
17196impl Default for ClaimPredicate {
17197    fn default() -> Self {
17198        Self::Unconditional
17199    }
17200}
17201
17202impl ClaimPredicate {
17203    pub const VARIANTS: [ClaimPredicateType; 6] = [
17204        ClaimPredicateType::Unconditional,
17205        ClaimPredicateType::And,
17206        ClaimPredicateType::Or,
17207        ClaimPredicateType::Not,
17208        ClaimPredicateType::BeforeAbsoluteTime,
17209        ClaimPredicateType::BeforeRelativeTime,
17210    ];
17211    pub const VARIANTS_STR: [&'static str; 6] = [
17212        "Unconditional",
17213        "And",
17214        "Or",
17215        "Not",
17216        "BeforeAbsoluteTime",
17217        "BeforeRelativeTime",
17218    ];
17219
17220    #[must_use]
17221    pub const fn name(&self) -> &'static str {
17222        match self {
17223            Self::Unconditional => "Unconditional",
17224            Self::And(_) => "And",
17225            Self::Or(_) => "Or",
17226            Self::Not(_) => "Not",
17227            Self::BeforeAbsoluteTime(_) => "BeforeAbsoluteTime",
17228            Self::BeforeRelativeTime(_) => "BeforeRelativeTime",
17229        }
17230    }
17231
17232    #[must_use]
17233    pub const fn discriminant(&self) -> ClaimPredicateType {
17234        #[allow(clippy::match_same_arms)]
17235        match self {
17236            Self::Unconditional => ClaimPredicateType::Unconditional,
17237            Self::And(_) => ClaimPredicateType::And,
17238            Self::Or(_) => ClaimPredicateType::Or,
17239            Self::Not(_) => ClaimPredicateType::Not,
17240            Self::BeforeAbsoluteTime(_) => ClaimPredicateType::BeforeAbsoluteTime,
17241            Self::BeforeRelativeTime(_) => ClaimPredicateType::BeforeRelativeTime,
17242        }
17243    }
17244
17245    #[must_use]
17246    pub const fn variants() -> [ClaimPredicateType; 6] {
17247        Self::VARIANTS
17248    }
17249}
17250
17251impl Name for ClaimPredicate {
17252    #[must_use]
17253    fn name(&self) -> &'static str {
17254        Self::name(self)
17255    }
17256}
17257
17258impl Discriminant<ClaimPredicateType> for ClaimPredicate {
17259    #[must_use]
17260    fn discriminant(&self) -> ClaimPredicateType {
17261        Self::discriminant(self)
17262    }
17263}
17264
17265impl Variants<ClaimPredicateType> for ClaimPredicate {
17266    fn variants() -> slice::Iter<'static, ClaimPredicateType> {
17267        Self::VARIANTS.iter()
17268    }
17269}
17270
17271impl Union<ClaimPredicateType> for ClaimPredicate {}
17272
17273impl ReadXdr for ClaimPredicate {
17274    #[cfg(feature = "std")]
17275    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
17276        r.with_limited_depth(|r| {
17277            let dv: ClaimPredicateType = <ClaimPredicateType as ReadXdr>::read_xdr(r)?;
17278            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
17279            let v = match dv {
17280                ClaimPredicateType::Unconditional => Self::Unconditional,
17281                ClaimPredicateType::And => Self::And(VecM::<ClaimPredicate, 2>::read_xdr(r)?),
17282                ClaimPredicateType::Or => Self::Or(VecM::<ClaimPredicate, 2>::read_xdr(r)?),
17283                ClaimPredicateType::Not => Self::Not(Option::<Box<ClaimPredicate>>::read_xdr(r)?),
17284                ClaimPredicateType::BeforeAbsoluteTime => {
17285                    Self::BeforeAbsoluteTime(i64::read_xdr(r)?)
17286                }
17287                ClaimPredicateType::BeforeRelativeTime => {
17288                    Self::BeforeRelativeTime(i64::read_xdr(r)?)
17289                }
17290                #[allow(unreachable_patterns)]
17291                _ => return Err(Error::Invalid),
17292            };
17293            Ok(v)
17294        })
17295    }
17296}
17297
17298impl WriteXdr for ClaimPredicate {
17299    #[cfg(feature = "std")]
17300    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
17301        w.with_limited_depth(|w| {
17302            self.discriminant().write_xdr(w)?;
17303            #[allow(clippy::match_same_arms)]
17304            match self {
17305                Self::Unconditional => ().write_xdr(w)?,
17306                Self::And(v) => v.write_xdr(w)?,
17307                Self::Or(v) => v.write_xdr(w)?,
17308                Self::Not(v) => v.write_xdr(w)?,
17309                Self::BeforeAbsoluteTime(v) => v.write_xdr(w)?,
17310                Self::BeforeRelativeTime(v) => v.write_xdr(w)?,
17311            };
17312            Ok(())
17313        })
17314    }
17315}
17316
17317/// ClaimantType is an XDR Enum defines as:
17318///
17319/// ```text
17320/// enum ClaimantType
17321/// {
17322///     CLAIMANT_TYPE_V0 = 0
17323/// };
17324/// ```
17325///
17326// enum
17327#[cfg_attr(feature = "alloc", derive(Default))]
17328#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
17329#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17330#[cfg_attr(
17331    all(feature = "serde", feature = "alloc"),
17332    derive(serde::Serialize, serde::Deserialize),
17333    serde(rename_all = "snake_case")
17334)]
17335#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
17336#[repr(i32)]
17337pub enum ClaimantType {
17338    #[cfg_attr(feature = "alloc", default)]
17339    ClaimantTypeV0 = 0,
17340}
17341
17342impl ClaimantType {
17343    pub const VARIANTS: [ClaimantType; 1] = [ClaimantType::ClaimantTypeV0];
17344    pub const VARIANTS_STR: [&'static str; 1] = ["ClaimantTypeV0"];
17345
17346    #[must_use]
17347    pub const fn name(&self) -> &'static str {
17348        match self {
17349            Self::ClaimantTypeV0 => "ClaimantTypeV0",
17350        }
17351    }
17352
17353    #[must_use]
17354    pub const fn variants() -> [ClaimantType; 1] {
17355        Self::VARIANTS
17356    }
17357}
17358
17359impl Name for ClaimantType {
17360    #[must_use]
17361    fn name(&self) -> &'static str {
17362        Self::name(self)
17363    }
17364}
17365
17366impl Variants<ClaimantType> for ClaimantType {
17367    fn variants() -> slice::Iter<'static, ClaimantType> {
17368        Self::VARIANTS.iter()
17369    }
17370}
17371
17372impl Enum for ClaimantType {}
17373
17374impl fmt::Display for ClaimantType {
17375    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17376        f.write_str(self.name())
17377    }
17378}
17379
17380impl TryFrom<i32> for ClaimantType {
17381    type Error = Error;
17382
17383    fn try_from(i: i32) -> Result<Self, Error> {
17384        let e = match i {
17385            0 => ClaimantType::ClaimantTypeV0,
17386            #[allow(unreachable_patterns)]
17387            _ => return Err(Error::Invalid),
17388        };
17389        Ok(e)
17390    }
17391}
17392
17393impl From<ClaimantType> for i32 {
17394    #[must_use]
17395    fn from(e: ClaimantType) -> Self {
17396        e as Self
17397    }
17398}
17399
17400impl ReadXdr for ClaimantType {
17401    #[cfg(feature = "std")]
17402    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
17403        r.with_limited_depth(|r| {
17404            let e = i32::read_xdr(r)?;
17405            let v: Self = e.try_into()?;
17406            Ok(v)
17407        })
17408    }
17409}
17410
17411impl WriteXdr for ClaimantType {
17412    #[cfg(feature = "std")]
17413    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
17414        w.with_limited_depth(|w| {
17415            let i: i32 = (*self).into();
17416            i.write_xdr(w)
17417        })
17418    }
17419}
17420
17421/// ClaimantV0 is an XDR NestedStruct defines as:
17422///
17423/// ```text
17424/// struct
17425///     {
17426///         AccountID destination;    // The account that can use this condition
17427///         ClaimPredicate predicate; // Claimable if predicate is true
17428///     }
17429/// ```
17430///
17431#[cfg_attr(feature = "alloc", derive(Default))]
17432#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
17433#[cfg_eval::cfg_eval]
17434#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17435#[cfg_attr(
17436    all(feature = "serde", feature = "alloc"),
17437    serde_with::serde_as,
17438    derive(serde::Serialize, serde::Deserialize),
17439    serde(rename_all = "snake_case")
17440)]
17441#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
17442pub struct ClaimantV0 {
17443    pub destination: AccountId,
17444    pub predicate: ClaimPredicate,
17445}
17446
17447impl ReadXdr for ClaimantV0 {
17448    #[cfg(feature = "std")]
17449    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
17450        r.with_limited_depth(|r| {
17451            Ok(Self {
17452                destination: AccountId::read_xdr(r)?,
17453                predicate: ClaimPredicate::read_xdr(r)?,
17454            })
17455        })
17456    }
17457}
17458
17459impl WriteXdr for ClaimantV0 {
17460    #[cfg(feature = "std")]
17461    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
17462        w.with_limited_depth(|w| {
17463            self.destination.write_xdr(w)?;
17464            self.predicate.write_xdr(w)?;
17465            Ok(())
17466        })
17467    }
17468}
17469
17470/// Claimant is an XDR Union defines as:
17471///
17472/// ```text
17473/// union Claimant switch (ClaimantType type)
17474/// {
17475/// case CLAIMANT_TYPE_V0:
17476///     struct
17477///     {
17478///         AccountID destination;    // The account that can use this condition
17479///         ClaimPredicate predicate; // Claimable if predicate is true
17480///     } v0;
17481/// };
17482/// ```
17483///
17484// union with discriminant ClaimantType
17485#[cfg_eval::cfg_eval]
17486#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
17487#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17488#[cfg_attr(
17489    all(feature = "serde", feature = "alloc"),
17490    serde_with::serde_as,
17491    derive(serde::Serialize, serde::Deserialize),
17492    serde(rename_all = "snake_case")
17493)]
17494#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
17495#[allow(clippy::large_enum_variant)]
17496pub enum Claimant {
17497    ClaimantTypeV0(ClaimantV0),
17498}
17499
17500#[cfg(feature = "alloc")]
17501impl Default for Claimant {
17502    fn default() -> Self {
17503        Self::ClaimantTypeV0(ClaimantV0::default())
17504    }
17505}
17506
17507impl Claimant {
17508    pub const VARIANTS: [ClaimantType; 1] = [ClaimantType::ClaimantTypeV0];
17509    pub const VARIANTS_STR: [&'static str; 1] = ["ClaimantTypeV0"];
17510
17511    #[must_use]
17512    pub const fn name(&self) -> &'static str {
17513        match self {
17514            Self::ClaimantTypeV0(_) => "ClaimantTypeV0",
17515        }
17516    }
17517
17518    #[must_use]
17519    pub const fn discriminant(&self) -> ClaimantType {
17520        #[allow(clippy::match_same_arms)]
17521        match self {
17522            Self::ClaimantTypeV0(_) => ClaimantType::ClaimantTypeV0,
17523        }
17524    }
17525
17526    #[must_use]
17527    pub const fn variants() -> [ClaimantType; 1] {
17528        Self::VARIANTS
17529    }
17530}
17531
17532impl Name for Claimant {
17533    #[must_use]
17534    fn name(&self) -> &'static str {
17535        Self::name(self)
17536    }
17537}
17538
17539impl Discriminant<ClaimantType> for Claimant {
17540    #[must_use]
17541    fn discriminant(&self) -> ClaimantType {
17542        Self::discriminant(self)
17543    }
17544}
17545
17546impl Variants<ClaimantType> for Claimant {
17547    fn variants() -> slice::Iter<'static, ClaimantType> {
17548        Self::VARIANTS.iter()
17549    }
17550}
17551
17552impl Union<ClaimantType> for Claimant {}
17553
17554impl ReadXdr for Claimant {
17555    #[cfg(feature = "std")]
17556    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
17557        r.with_limited_depth(|r| {
17558            let dv: ClaimantType = <ClaimantType as ReadXdr>::read_xdr(r)?;
17559            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
17560            let v = match dv {
17561                ClaimantType::ClaimantTypeV0 => Self::ClaimantTypeV0(ClaimantV0::read_xdr(r)?),
17562                #[allow(unreachable_patterns)]
17563                _ => return Err(Error::Invalid),
17564            };
17565            Ok(v)
17566        })
17567    }
17568}
17569
17570impl WriteXdr for Claimant {
17571    #[cfg(feature = "std")]
17572    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
17573        w.with_limited_depth(|w| {
17574            self.discriminant().write_xdr(w)?;
17575            #[allow(clippy::match_same_arms)]
17576            match self {
17577                Self::ClaimantTypeV0(v) => v.write_xdr(w)?,
17578            };
17579            Ok(())
17580        })
17581    }
17582}
17583
17584/// ClaimableBalanceFlags is an XDR Enum defines as:
17585///
17586/// ```text
17587/// enum ClaimableBalanceFlags
17588/// {
17589///     // If set, the issuer account of the asset held by the claimable balance may
17590///     // clawback the claimable balance
17591///     CLAIMABLE_BALANCE_CLAWBACK_ENABLED_FLAG = 0x1
17592/// };
17593/// ```
17594///
17595// enum
17596#[cfg_attr(feature = "alloc", derive(Default))]
17597#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
17598#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17599#[cfg_attr(
17600    all(feature = "serde", feature = "alloc"),
17601    derive(serde::Serialize, serde::Deserialize),
17602    serde(rename_all = "snake_case")
17603)]
17604#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
17605#[repr(i32)]
17606pub enum ClaimableBalanceFlags {
17607    #[cfg_attr(feature = "alloc", default)]
17608    ClaimableBalanceClawbackEnabledFlag = 1,
17609}
17610
17611impl ClaimableBalanceFlags {
17612    pub const VARIANTS: [ClaimableBalanceFlags; 1] =
17613        [ClaimableBalanceFlags::ClaimableBalanceClawbackEnabledFlag];
17614    pub const VARIANTS_STR: [&'static str; 1] = ["ClaimableBalanceClawbackEnabledFlag"];
17615
17616    #[must_use]
17617    pub const fn name(&self) -> &'static str {
17618        match self {
17619            Self::ClaimableBalanceClawbackEnabledFlag => "ClaimableBalanceClawbackEnabledFlag",
17620        }
17621    }
17622
17623    #[must_use]
17624    pub const fn variants() -> [ClaimableBalanceFlags; 1] {
17625        Self::VARIANTS
17626    }
17627}
17628
17629impl Name for ClaimableBalanceFlags {
17630    #[must_use]
17631    fn name(&self) -> &'static str {
17632        Self::name(self)
17633    }
17634}
17635
17636impl Variants<ClaimableBalanceFlags> for ClaimableBalanceFlags {
17637    fn variants() -> slice::Iter<'static, ClaimableBalanceFlags> {
17638        Self::VARIANTS.iter()
17639    }
17640}
17641
17642impl Enum for ClaimableBalanceFlags {}
17643
17644impl fmt::Display for ClaimableBalanceFlags {
17645    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17646        f.write_str(self.name())
17647    }
17648}
17649
17650impl TryFrom<i32> for ClaimableBalanceFlags {
17651    type Error = Error;
17652
17653    fn try_from(i: i32) -> Result<Self, Error> {
17654        let e = match i {
17655            1 => ClaimableBalanceFlags::ClaimableBalanceClawbackEnabledFlag,
17656            #[allow(unreachable_patterns)]
17657            _ => return Err(Error::Invalid),
17658        };
17659        Ok(e)
17660    }
17661}
17662
17663impl From<ClaimableBalanceFlags> for i32 {
17664    #[must_use]
17665    fn from(e: ClaimableBalanceFlags) -> Self {
17666        e as Self
17667    }
17668}
17669
17670impl ReadXdr for ClaimableBalanceFlags {
17671    #[cfg(feature = "std")]
17672    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
17673        r.with_limited_depth(|r| {
17674            let e = i32::read_xdr(r)?;
17675            let v: Self = e.try_into()?;
17676            Ok(v)
17677        })
17678    }
17679}
17680
17681impl WriteXdr for ClaimableBalanceFlags {
17682    #[cfg(feature = "std")]
17683    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
17684        w.with_limited_depth(|w| {
17685            let i: i32 = (*self).into();
17686            i.write_xdr(w)
17687        })
17688    }
17689}
17690
17691/// MaskClaimableBalanceFlags is an XDR Const defines as:
17692///
17693/// ```text
17694/// const MASK_CLAIMABLE_BALANCE_FLAGS = 0x1;
17695/// ```
17696///
17697pub const MASK_CLAIMABLE_BALANCE_FLAGS: u64 = 0x1;
17698
17699/// ClaimableBalanceEntryExtensionV1Ext is an XDR NestedUnion defines as:
17700///
17701/// ```text
17702/// union switch (int v)
17703///     {
17704///     case 0:
17705///         void;
17706///     }
17707/// ```
17708///
17709// union with discriminant i32
17710#[cfg_eval::cfg_eval]
17711#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
17712#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17713#[cfg_attr(
17714    all(feature = "serde", feature = "alloc"),
17715    serde_with::serde_as,
17716    derive(serde::Serialize, serde::Deserialize),
17717    serde(rename_all = "snake_case")
17718)]
17719#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
17720#[allow(clippy::large_enum_variant)]
17721pub enum ClaimableBalanceEntryExtensionV1Ext {
17722    V0,
17723}
17724
17725#[cfg(feature = "alloc")]
17726impl Default for ClaimableBalanceEntryExtensionV1Ext {
17727    fn default() -> Self {
17728        Self::V0
17729    }
17730}
17731
17732impl ClaimableBalanceEntryExtensionV1Ext {
17733    pub const VARIANTS: [i32; 1] = [0];
17734    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
17735
17736    #[must_use]
17737    pub const fn name(&self) -> &'static str {
17738        match self {
17739            Self::V0 => "V0",
17740        }
17741    }
17742
17743    #[must_use]
17744    pub const fn discriminant(&self) -> i32 {
17745        #[allow(clippy::match_same_arms)]
17746        match self {
17747            Self::V0 => 0,
17748        }
17749    }
17750
17751    #[must_use]
17752    pub const fn variants() -> [i32; 1] {
17753        Self::VARIANTS
17754    }
17755}
17756
17757impl Name for ClaimableBalanceEntryExtensionV1Ext {
17758    #[must_use]
17759    fn name(&self) -> &'static str {
17760        Self::name(self)
17761    }
17762}
17763
17764impl Discriminant<i32> for ClaimableBalanceEntryExtensionV1Ext {
17765    #[must_use]
17766    fn discriminant(&self) -> i32 {
17767        Self::discriminant(self)
17768    }
17769}
17770
17771impl Variants<i32> for ClaimableBalanceEntryExtensionV1Ext {
17772    fn variants() -> slice::Iter<'static, i32> {
17773        Self::VARIANTS.iter()
17774    }
17775}
17776
17777impl Union<i32> for ClaimableBalanceEntryExtensionV1Ext {}
17778
17779impl ReadXdr for ClaimableBalanceEntryExtensionV1Ext {
17780    #[cfg(feature = "std")]
17781    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
17782        r.with_limited_depth(|r| {
17783            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
17784            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
17785            let v = match dv {
17786                0 => Self::V0,
17787                #[allow(unreachable_patterns)]
17788                _ => return Err(Error::Invalid),
17789            };
17790            Ok(v)
17791        })
17792    }
17793}
17794
17795impl WriteXdr for ClaimableBalanceEntryExtensionV1Ext {
17796    #[cfg(feature = "std")]
17797    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
17798        w.with_limited_depth(|w| {
17799            self.discriminant().write_xdr(w)?;
17800            #[allow(clippy::match_same_arms)]
17801            match self {
17802                Self::V0 => ().write_xdr(w)?,
17803            };
17804            Ok(())
17805        })
17806    }
17807}
17808
17809/// ClaimableBalanceEntryExtensionV1 is an XDR Struct defines as:
17810///
17811/// ```text
17812/// struct ClaimableBalanceEntryExtensionV1
17813/// {
17814///     union switch (int v)
17815///     {
17816///     case 0:
17817///         void;
17818///     }
17819///     ext;
17820///
17821///     uint32 flags; // see ClaimableBalanceFlags
17822/// };
17823/// ```
17824///
17825#[cfg_attr(feature = "alloc", derive(Default))]
17826#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
17827#[cfg_eval::cfg_eval]
17828#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17829#[cfg_attr(
17830    all(feature = "serde", feature = "alloc"),
17831    serde_with::serde_as,
17832    derive(serde::Serialize, serde::Deserialize),
17833    serde(rename_all = "snake_case")
17834)]
17835#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
17836pub struct ClaimableBalanceEntryExtensionV1 {
17837    pub ext: ClaimableBalanceEntryExtensionV1Ext,
17838    pub flags: u32,
17839}
17840
17841impl ReadXdr for ClaimableBalanceEntryExtensionV1 {
17842    #[cfg(feature = "std")]
17843    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
17844        r.with_limited_depth(|r| {
17845            Ok(Self {
17846                ext: ClaimableBalanceEntryExtensionV1Ext::read_xdr(r)?,
17847                flags: u32::read_xdr(r)?,
17848            })
17849        })
17850    }
17851}
17852
17853impl WriteXdr for ClaimableBalanceEntryExtensionV1 {
17854    #[cfg(feature = "std")]
17855    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
17856        w.with_limited_depth(|w| {
17857            self.ext.write_xdr(w)?;
17858            self.flags.write_xdr(w)?;
17859            Ok(())
17860        })
17861    }
17862}
17863
17864/// ClaimableBalanceEntryExt is an XDR NestedUnion defines as:
17865///
17866/// ```text
17867/// union switch (int v)
17868///     {
17869///     case 0:
17870///         void;
17871///     case 1:
17872///         ClaimableBalanceEntryExtensionV1 v1;
17873///     }
17874/// ```
17875///
17876// union with discriminant i32
17877#[cfg_eval::cfg_eval]
17878#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
17879#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
17880#[cfg_attr(
17881    all(feature = "serde", feature = "alloc"),
17882    serde_with::serde_as,
17883    derive(serde::Serialize, serde::Deserialize),
17884    serde(rename_all = "snake_case")
17885)]
17886#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
17887#[allow(clippy::large_enum_variant)]
17888pub enum ClaimableBalanceEntryExt {
17889    V0,
17890    V1(ClaimableBalanceEntryExtensionV1),
17891}
17892
17893#[cfg(feature = "alloc")]
17894impl Default for ClaimableBalanceEntryExt {
17895    fn default() -> Self {
17896        Self::V0
17897    }
17898}
17899
17900impl ClaimableBalanceEntryExt {
17901    pub const VARIANTS: [i32; 2] = [0, 1];
17902    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
17903
17904    #[must_use]
17905    pub const fn name(&self) -> &'static str {
17906        match self {
17907            Self::V0 => "V0",
17908            Self::V1(_) => "V1",
17909        }
17910    }
17911
17912    #[must_use]
17913    pub const fn discriminant(&self) -> i32 {
17914        #[allow(clippy::match_same_arms)]
17915        match self {
17916            Self::V0 => 0,
17917            Self::V1(_) => 1,
17918        }
17919    }
17920
17921    #[must_use]
17922    pub const fn variants() -> [i32; 2] {
17923        Self::VARIANTS
17924    }
17925}
17926
17927impl Name for ClaimableBalanceEntryExt {
17928    #[must_use]
17929    fn name(&self) -> &'static str {
17930        Self::name(self)
17931    }
17932}
17933
17934impl Discriminant<i32> for ClaimableBalanceEntryExt {
17935    #[must_use]
17936    fn discriminant(&self) -> i32 {
17937        Self::discriminant(self)
17938    }
17939}
17940
17941impl Variants<i32> for ClaimableBalanceEntryExt {
17942    fn variants() -> slice::Iter<'static, i32> {
17943        Self::VARIANTS.iter()
17944    }
17945}
17946
17947impl Union<i32> for ClaimableBalanceEntryExt {}
17948
17949impl ReadXdr for ClaimableBalanceEntryExt {
17950    #[cfg(feature = "std")]
17951    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
17952        r.with_limited_depth(|r| {
17953            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
17954            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
17955            let v = match dv {
17956                0 => Self::V0,
17957                1 => Self::V1(ClaimableBalanceEntryExtensionV1::read_xdr(r)?),
17958                #[allow(unreachable_patterns)]
17959                _ => return Err(Error::Invalid),
17960            };
17961            Ok(v)
17962        })
17963    }
17964}
17965
17966impl WriteXdr for ClaimableBalanceEntryExt {
17967    #[cfg(feature = "std")]
17968    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
17969        w.with_limited_depth(|w| {
17970            self.discriminant().write_xdr(w)?;
17971            #[allow(clippy::match_same_arms)]
17972            match self {
17973                Self::V0 => ().write_xdr(w)?,
17974                Self::V1(v) => v.write_xdr(w)?,
17975            };
17976            Ok(())
17977        })
17978    }
17979}
17980
17981/// ClaimableBalanceEntry is an XDR Struct defines as:
17982///
17983/// ```text
17984/// struct ClaimableBalanceEntry
17985/// {
17986///     // Unique identifier for this ClaimableBalanceEntry
17987///     ClaimableBalanceID balanceID;
17988///
17989///     // List of claimants with associated predicate
17990///     Claimant claimants<10>;
17991///
17992///     // Any asset including native
17993///     Asset asset;
17994///
17995///     // Amount of asset
17996///     int64 amount;
17997///
17998///     // reserved for future use
17999///     union switch (int v)
18000///     {
18001///     case 0:
18002///         void;
18003///     case 1:
18004///         ClaimableBalanceEntryExtensionV1 v1;
18005///     }
18006///     ext;
18007/// };
18008/// ```
18009///
18010#[cfg_attr(feature = "alloc", derive(Default))]
18011#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18012#[cfg_eval::cfg_eval]
18013#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18014#[cfg_attr(
18015    all(feature = "serde", feature = "alloc"),
18016    serde_with::serde_as,
18017    derive(serde::Serialize, serde::Deserialize),
18018    serde(rename_all = "snake_case")
18019)]
18020#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18021pub struct ClaimableBalanceEntry {
18022    pub balance_id: ClaimableBalanceId,
18023    pub claimants: VecM<Claimant, 10>,
18024    pub asset: Asset,
18025    #[cfg_attr(
18026        all(feature = "serde", feature = "alloc"),
18027        serde_as(as = "NumberOrString")
18028    )]
18029    pub amount: i64,
18030    pub ext: ClaimableBalanceEntryExt,
18031}
18032
18033impl ReadXdr for ClaimableBalanceEntry {
18034    #[cfg(feature = "std")]
18035    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18036        r.with_limited_depth(|r| {
18037            Ok(Self {
18038                balance_id: ClaimableBalanceId::read_xdr(r)?,
18039                claimants: VecM::<Claimant, 10>::read_xdr(r)?,
18040                asset: Asset::read_xdr(r)?,
18041                amount: i64::read_xdr(r)?,
18042                ext: ClaimableBalanceEntryExt::read_xdr(r)?,
18043            })
18044        })
18045    }
18046}
18047
18048impl WriteXdr for ClaimableBalanceEntry {
18049    #[cfg(feature = "std")]
18050    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18051        w.with_limited_depth(|w| {
18052            self.balance_id.write_xdr(w)?;
18053            self.claimants.write_xdr(w)?;
18054            self.asset.write_xdr(w)?;
18055            self.amount.write_xdr(w)?;
18056            self.ext.write_xdr(w)?;
18057            Ok(())
18058        })
18059    }
18060}
18061
18062/// LiquidityPoolConstantProductParameters is an XDR Struct defines as:
18063///
18064/// ```text
18065/// struct LiquidityPoolConstantProductParameters
18066/// {
18067///     Asset assetA; // assetA < assetB
18068///     Asset assetB;
18069///     int32 fee; // Fee is in basis points, so the actual rate is (fee/100)%
18070/// };
18071/// ```
18072///
18073#[cfg_attr(feature = "alloc", derive(Default))]
18074#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18075#[cfg_eval::cfg_eval]
18076#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18077#[cfg_attr(
18078    all(feature = "serde", feature = "alloc"),
18079    serde_with::serde_as,
18080    derive(serde::Serialize, serde::Deserialize),
18081    serde(rename_all = "snake_case")
18082)]
18083#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18084pub struct LiquidityPoolConstantProductParameters {
18085    pub asset_a: Asset,
18086    pub asset_b: Asset,
18087    pub fee: i32,
18088}
18089
18090impl ReadXdr for LiquidityPoolConstantProductParameters {
18091    #[cfg(feature = "std")]
18092    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18093        r.with_limited_depth(|r| {
18094            Ok(Self {
18095                asset_a: Asset::read_xdr(r)?,
18096                asset_b: Asset::read_xdr(r)?,
18097                fee: i32::read_xdr(r)?,
18098            })
18099        })
18100    }
18101}
18102
18103impl WriteXdr for LiquidityPoolConstantProductParameters {
18104    #[cfg(feature = "std")]
18105    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18106        w.with_limited_depth(|w| {
18107            self.asset_a.write_xdr(w)?;
18108            self.asset_b.write_xdr(w)?;
18109            self.fee.write_xdr(w)?;
18110            Ok(())
18111        })
18112    }
18113}
18114
18115/// LiquidityPoolEntryConstantProduct is an XDR NestedStruct defines as:
18116///
18117/// ```text
18118/// struct
18119///         {
18120///             LiquidityPoolConstantProductParameters params;
18121///
18122///             int64 reserveA;        // amount of A in the pool
18123///             int64 reserveB;        // amount of B in the pool
18124///             int64 totalPoolShares; // total number of pool shares issued
18125///             int64 poolSharesTrustLineCount; // number of trust lines for the
18126///                                             // associated pool shares
18127///         }
18128/// ```
18129///
18130#[cfg_attr(feature = "alloc", derive(Default))]
18131#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18132#[cfg_eval::cfg_eval]
18133#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18134#[cfg_attr(
18135    all(feature = "serde", feature = "alloc"),
18136    serde_with::serde_as,
18137    derive(serde::Serialize, serde::Deserialize),
18138    serde(rename_all = "snake_case")
18139)]
18140#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18141pub struct LiquidityPoolEntryConstantProduct {
18142    pub params: LiquidityPoolConstantProductParameters,
18143    #[cfg_attr(
18144        all(feature = "serde", feature = "alloc"),
18145        serde_as(as = "NumberOrString")
18146    )]
18147    pub reserve_a: i64,
18148    #[cfg_attr(
18149        all(feature = "serde", feature = "alloc"),
18150        serde_as(as = "NumberOrString")
18151    )]
18152    pub reserve_b: i64,
18153    #[cfg_attr(
18154        all(feature = "serde", feature = "alloc"),
18155        serde_as(as = "NumberOrString")
18156    )]
18157    pub total_pool_shares: i64,
18158    #[cfg_attr(
18159        all(feature = "serde", feature = "alloc"),
18160        serde_as(as = "NumberOrString")
18161    )]
18162    pub pool_shares_trust_line_count: i64,
18163}
18164
18165impl ReadXdr for LiquidityPoolEntryConstantProduct {
18166    #[cfg(feature = "std")]
18167    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18168        r.with_limited_depth(|r| {
18169            Ok(Self {
18170                params: LiquidityPoolConstantProductParameters::read_xdr(r)?,
18171                reserve_a: i64::read_xdr(r)?,
18172                reserve_b: i64::read_xdr(r)?,
18173                total_pool_shares: i64::read_xdr(r)?,
18174                pool_shares_trust_line_count: i64::read_xdr(r)?,
18175            })
18176        })
18177    }
18178}
18179
18180impl WriteXdr for LiquidityPoolEntryConstantProduct {
18181    #[cfg(feature = "std")]
18182    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18183        w.with_limited_depth(|w| {
18184            self.params.write_xdr(w)?;
18185            self.reserve_a.write_xdr(w)?;
18186            self.reserve_b.write_xdr(w)?;
18187            self.total_pool_shares.write_xdr(w)?;
18188            self.pool_shares_trust_line_count.write_xdr(w)?;
18189            Ok(())
18190        })
18191    }
18192}
18193
18194/// LiquidityPoolEntryBody is an XDR NestedUnion defines as:
18195///
18196/// ```text
18197/// union switch (LiquidityPoolType type)
18198///     {
18199///     case LIQUIDITY_POOL_CONSTANT_PRODUCT:
18200///         struct
18201///         {
18202///             LiquidityPoolConstantProductParameters params;
18203///
18204///             int64 reserveA;        // amount of A in the pool
18205///             int64 reserveB;        // amount of B in the pool
18206///             int64 totalPoolShares; // total number of pool shares issued
18207///             int64 poolSharesTrustLineCount; // number of trust lines for the
18208///                                             // associated pool shares
18209///         } constantProduct;
18210///     }
18211/// ```
18212///
18213// union with discriminant LiquidityPoolType
18214#[cfg_eval::cfg_eval]
18215#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18216#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18217#[cfg_attr(
18218    all(feature = "serde", feature = "alloc"),
18219    serde_with::serde_as,
18220    derive(serde::Serialize, serde::Deserialize),
18221    serde(rename_all = "snake_case")
18222)]
18223#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18224#[allow(clippy::large_enum_variant)]
18225pub enum LiquidityPoolEntryBody {
18226    LiquidityPoolConstantProduct(LiquidityPoolEntryConstantProduct),
18227}
18228
18229#[cfg(feature = "alloc")]
18230impl Default for LiquidityPoolEntryBody {
18231    fn default() -> Self {
18232        Self::LiquidityPoolConstantProduct(LiquidityPoolEntryConstantProduct::default())
18233    }
18234}
18235
18236impl LiquidityPoolEntryBody {
18237    pub const VARIANTS: [LiquidityPoolType; 1] = [LiquidityPoolType::LiquidityPoolConstantProduct];
18238    pub const VARIANTS_STR: [&'static str; 1] = ["LiquidityPoolConstantProduct"];
18239
18240    #[must_use]
18241    pub const fn name(&self) -> &'static str {
18242        match self {
18243            Self::LiquidityPoolConstantProduct(_) => "LiquidityPoolConstantProduct",
18244        }
18245    }
18246
18247    #[must_use]
18248    pub const fn discriminant(&self) -> LiquidityPoolType {
18249        #[allow(clippy::match_same_arms)]
18250        match self {
18251            Self::LiquidityPoolConstantProduct(_) => {
18252                LiquidityPoolType::LiquidityPoolConstantProduct
18253            }
18254        }
18255    }
18256
18257    #[must_use]
18258    pub const fn variants() -> [LiquidityPoolType; 1] {
18259        Self::VARIANTS
18260    }
18261}
18262
18263impl Name for LiquidityPoolEntryBody {
18264    #[must_use]
18265    fn name(&self) -> &'static str {
18266        Self::name(self)
18267    }
18268}
18269
18270impl Discriminant<LiquidityPoolType> for LiquidityPoolEntryBody {
18271    #[must_use]
18272    fn discriminant(&self) -> LiquidityPoolType {
18273        Self::discriminant(self)
18274    }
18275}
18276
18277impl Variants<LiquidityPoolType> for LiquidityPoolEntryBody {
18278    fn variants() -> slice::Iter<'static, LiquidityPoolType> {
18279        Self::VARIANTS.iter()
18280    }
18281}
18282
18283impl Union<LiquidityPoolType> for LiquidityPoolEntryBody {}
18284
18285impl ReadXdr for LiquidityPoolEntryBody {
18286    #[cfg(feature = "std")]
18287    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18288        r.with_limited_depth(|r| {
18289            let dv: LiquidityPoolType = <LiquidityPoolType as ReadXdr>::read_xdr(r)?;
18290            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
18291            let v = match dv {
18292                LiquidityPoolType::LiquidityPoolConstantProduct => {
18293                    Self::LiquidityPoolConstantProduct(LiquidityPoolEntryConstantProduct::read_xdr(
18294                        r,
18295                    )?)
18296                }
18297                #[allow(unreachable_patterns)]
18298                _ => return Err(Error::Invalid),
18299            };
18300            Ok(v)
18301        })
18302    }
18303}
18304
18305impl WriteXdr for LiquidityPoolEntryBody {
18306    #[cfg(feature = "std")]
18307    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18308        w.with_limited_depth(|w| {
18309            self.discriminant().write_xdr(w)?;
18310            #[allow(clippy::match_same_arms)]
18311            match self {
18312                Self::LiquidityPoolConstantProduct(v) => v.write_xdr(w)?,
18313            };
18314            Ok(())
18315        })
18316    }
18317}
18318
18319/// LiquidityPoolEntry is an XDR Struct defines as:
18320///
18321/// ```text
18322/// struct LiquidityPoolEntry
18323/// {
18324///     PoolID liquidityPoolID;
18325///
18326///     union switch (LiquidityPoolType type)
18327///     {
18328///     case LIQUIDITY_POOL_CONSTANT_PRODUCT:
18329///         struct
18330///         {
18331///             LiquidityPoolConstantProductParameters params;
18332///
18333///             int64 reserveA;        // amount of A in the pool
18334///             int64 reserveB;        // amount of B in the pool
18335///             int64 totalPoolShares; // total number of pool shares issued
18336///             int64 poolSharesTrustLineCount; // number of trust lines for the
18337///                                             // associated pool shares
18338///         } constantProduct;
18339///     }
18340///     body;
18341/// };
18342/// ```
18343///
18344#[cfg_attr(feature = "alloc", derive(Default))]
18345#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18346#[cfg_eval::cfg_eval]
18347#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18348#[cfg_attr(
18349    all(feature = "serde", feature = "alloc"),
18350    serde_with::serde_as,
18351    derive(serde::Serialize, serde::Deserialize),
18352    serde(rename_all = "snake_case")
18353)]
18354#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18355pub struct LiquidityPoolEntry {
18356    pub liquidity_pool_id: PoolId,
18357    pub body: LiquidityPoolEntryBody,
18358}
18359
18360impl ReadXdr for LiquidityPoolEntry {
18361    #[cfg(feature = "std")]
18362    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18363        r.with_limited_depth(|r| {
18364            Ok(Self {
18365                liquidity_pool_id: PoolId::read_xdr(r)?,
18366                body: LiquidityPoolEntryBody::read_xdr(r)?,
18367            })
18368        })
18369    }
18370}
18371
18372impl WriteXdr for LiquidityPoolEntry {
18373    #[cfg(feature = "std")]
18374    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18375        w.with_limited_depth(|w| {
18376            self.liquidity_pool_id.write_xdr(w)?;
18377            self.body.write_xdr(w)?;
18378            Ok(())
18379        })
18380    }
18381}
18382
18383/// ContractDataDurability is an XDR Enum defines as:
18384///
18385/// ```text
18386/// enum ContractDataDurability {
18387///     TEMPORARY = 0,
18388///     PERSISTENT = 1
18389/// };
18390/// ```
18391///
18392// enum
18393#[cfg_attr(feature = "alloc", derive(Default))]
18394#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18395#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18396#[cfg_attr(
18397    all(feature = "serde", feature = "alloc"),
18398    derive(serde::Serialize, serde::Deserialize),
18399    serde(rename_all = "snake_case")
18400)]
18401#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18402#[repr(i32)]
18403pub enum ContractDataDurability {
18404    #[cfg_attr(feature = "alloc", default)]
18405    Temporary = 0,
18406    Persistent = 1,
18407}
18408
18409impl ContractDataDurability {
18410    pub const VARIANTS: [ContractDataDurability; 2] = [
18411        ContractDataDurability::Temporary,
18412        ContractDataDurability::Persistent,
18413    ];
18414    pub const VARIANTS_STR: [&'static str; 2] = ["Temporary", "Persistent"];
18415
18416    #[must_use]
18417    pub const fn name(&self) -> &'static str {
18418        match self {
18419            Self::Temporary => "Temporary",
18420            Self::Persistent => "Persistent",
18421        }
18422    }
18423
18424    #[must_use]
18425    pub const fn variants() -> [ContractDataDurability; 2] {
18426        Self::VARIANTS
18427    }
18428}
18429
18430impl Name for ContractDataDurability {
18431    #[must_use]
18432    fn name(&self) -> &'static str {
18433        Self::name(self)
18434    }
18435}
18436
18437impl Variants<ContractDataDurability> for ContractDataDurability {
18438    fn variants() -> slice::Iter<'static, ContractDataDurability> {
18439        Self::VARIANTS.iter()
18440    }
18441}
18442
18443impl Enum for ContractDataDurability {}
18444
18445impl fmt::Display for ContractDataDurability {
18446    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18447        f.write_str(self.name())
18448    }
18449}
18450
18451impl TryFrom<i32> for ContractDataDurability {
18452    type Error = Error;
18453
18454    fn try_from(i: i32) -> Result<Self, Error> {
18455        let e = match i {
18456            0 => ContractDataDurability::Temporary,
18457            1 => ContractDataDurability::Persistent,
18458            #[allow(unreachable_patterns)]
18459            _ => return Err(Error::Invalid),
18460        };
18461        Ok(e)
18462    }
18463}
18464
18465impl From<ContractDataDurability> for i32 {
18466    #[must_use]
18467    fn from(e: ContractDataDurability) -> Self {
18468        e as Self
18469    }
18470}
18471
18472impl ReadXdr for ContractDataDurability {
18473    #[cfg(feature = "std")]
18474    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18475        r.with_limited_depth(|r| {
18476            let e = i32::read_xdr(r)?;
18477            let v: Self = e.try_into()?;
18478            Ok(v)
18479        })
18480    }
18481}
18482
18483impl WriteXdr for ContractDataDurability {
18484    #[cfg(feature = "std")]
18485    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18486        w.with_limited_depth(|w| {
18487            let i: i32 = (*self).into();
18488            i.write_xdr(w)
18489        })
18490    }
18491}
18492
18493/// ContractDataEntry is an XDR Struct defines as:
18494///
18495/// ```text
18496/// struct ContractDataEntry {
18497///     ExtensionPoint ext;
18498///
18499///     SCAddress contract;
18500///     SCVal key;
18501///     ContractDataDurability durability;
18502///     SCVal val;
18503/// };
18504/// ```
18505///
18506#[cfg_attr(feature = "alloc", derive(Default))]
18507#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18508#[cfg_eval::cfg_eval]
18509#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18510#[cfg_attr(
18511    all(feature = "serde", feature = "alloc"),
18512    serde_with::serde_as,
18513    derive(serde::Serialize, serde::Deserialize),
18514    serde(rename_all = "snake_case")
18515)]
18516#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18517pub struct ContractDataEntry {
18518    pub ext: ExtensionPoint,
18519    pub contract: ScAddress,
18520    pub key: ScVal,
18521    pub durability: ContractDataDurability,
18522    pub val: ScVal,
18523}
18524
18525impl ReadXdr for ContractDataEntry {
18526    #[cfg(feature = "std")]
18527    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18528        r.with_limited_depth(|r| {
18529            Ok(Self {
18530                ext: ExtensionPoint::read_xdr(r)?,
18531                contract: ScAddress::read_xdr(r)?,
18532                key: ScVal::read_xdr(r)?,
18533                durability: ContractDataDurability::read_xdr(r)?,
18534                val: ScVal::read_xdr(r)?,
18535            })
18536        })
18537    }
18538}
18539
18540impl WriteXdr for ContractDataEntry {
18541    #[cfg(feature = "std")]
18542    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18543        w.with_limited_depth(|w| {
18544            self.ext.write_xdr(w)?;
18545            self.contract.write_xdr(w)?;
18546            self.key.write_xdr(w)?;
18547            self.durability.write_xdr(w)?;
18548            self.val.write_xdr(w)?;
18549            Ok(())
18550        })
18551    }
18552}
18553
18554/// ContractCodeCostInputs is an XDR Struct defines as:
18555///
18556/// ```text
18557/// struct ContractCodeCostInputs {
18558///     ExtensionPoint ext;
18559///     uint32 nInstructions;
18560///     uint32 nFunctions;
18561///     uint32 nGlobals;
18562///     uint32 nTableEntries;
18563///     uint32 nTypes;
18564///     uint32 nDataSegments;
18565///     uint32 nElemSegments;
18566///     uint32 nImports;
18567///     uint32 nExports;
18568///     uint32 nDataSegmentBytes;
18569/// };
18570/// ```
18571///
18572#[cfg_attr(feature = "alloc", derive(Default))]
18573#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18574#[cfg_eval::cfg_eval]
18575#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18576#[cfg_attr(
18577    all(feature = "serde", feature = "alloc"),
18578    serde_with::serde_as,
18579    derive(serde::Serialize, serde::Deserialize),
18580    serde(rename_all = "snake_case")
18581)]
18582#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18583pub struct ContractCodeCostInputs {
18584    pub ext: ExtensionPoint,
18585    pub n_instructions: u32,
18586    pub n_functions: u32,
18587    pub n_globals: u32,
18588    pub n_table_entries: u32,
18589    pub n_types: u32,
18590    pub n_data_segments: u32,
18591    pub n_elem_segments: u32,
18592    pub n_imports: u32,
18593    pub n_exports: u32,
18594    pub n_data_segment_bytes: u32,
18595}
18596
18597impl ReadXdr for ContractCodeCostInputs {
18598    #[cfg(feature = "std")]
18599    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18600        r.with_limited_depth(|r| {
18601            Ok(Self {
18602                ext: ExtensionPoint::read_xdr(r)?,
18603                n_instructions: u32::read_xdr(r)?,
18604                n_functions: u32::read_xdr(r)?,
18605                n_globals: u32::read_xdr(r)?,
18606                n_table_entries: u32::read_xdr(r)?,
18607                n_types: u32::read_xdr(r)?,
18608                n_data_segments: u32::read_xdr(r)?,
18609                n_elem_segments: u32::read_xdr(r)?,
18610                n_imports: u32::read_xdr(r)?,
18611                n_exports: u32::read_xdr(r)?,
18612                n_data_segment_bytes: u32::read_xdr(r)?,
18613            })
18614        })
18615    }
18616}
18617
18618impl WriteXdr for ContractCodeCostInputs {
18619    #[cfg(feature = "std")]
18620    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18621        w.with_limited_depth(|w| {
18622            self.ext.write_xdr(w)?;
18623            self.n_instructions.write_xdr(w)?;
18624            self.n_functions.write_xdr(w)?;
18625            self.n_globals.write_xdr(w)?;
18626            self.n_table_entries.write_xdr(w)?;
18627            self.n_types.write_xdr(w)?;
18628            self.n_data_segments.write_xdr(w)?;
18629            self.n_elem_segments.write_xdr(w)?;
18630            self.n_imports.write_xdr(w)?;
18631            self.n_exports.write_xdr(w)?;
18632            self.n_data_segment_bytes.write_xdr(w)?;
18633            Ok(())
18634        })
18635    }
18636}
18637
18638/// ContractCodeEntryV1 is an XDR NestedStruct defines as:
18639///
18640/// ```text
18641/// struct
18642///             {
18643///                 ExtensionPoint ext;
18644///                 ContractCodeCostInputs costInputs;
18645///             }
18646/// ```
18647///
18648#[cfg_attr(feature = "alloc", derive(Default))]
18649#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18650#[cfg_eval::cfg_eval]
18651#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18652#[cfg_attr(
18653    all(feature = "serde", feature = "alloc"),
18654    serde_with::serde_as,
18655    derive(serde::Serialize, serde::Deserialize),
18656    serde(rename_all = "snake_case")
18657)]
18658#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18659pub struct ContractCodeEntryV1 {
18660    pub ext: ExtensionPoint,
18661    pub cost_inputs: ContractCodeCostInputs,
18662}
18663
18664impl ReadXdr for ContractCodeEntryV1 {
18665    #[cfg(feature = "std")]
18666    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18667        r.with_limited_depth(|r| {
18668            Ok(Self {
18669                ext: ExtensionPoint::read_xdr(r)?,
18670                cost_inputs: ContractCodeCostInputs::read_xdr(r)?,
18671            })
18672        })
18673    }
18674}
18675
18676impl WriteXdr for ContractCodeEntryV1 {
18677    #[cfg(feature = "std")]
18678    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18679        w.with_limited_depth(|w| {
18680            self.ext.write_xdr(w)?;
18681            self.cost_inputs.write_xdr(w)?;
18682            Ok(())
18683        })
18684    }
18685}
18686
18687/// ContractCodeEntryExt is an XDR NestedUnion defines as:
18688///
18689/// ```text
18690/// union switch (int v)
18691///     {
18692///         case 0:
18693///             void;
18694///         case 1:
18695///             struct
18696///             {
18697///                 ExtensionPoint ext;
18698///                 ContractCodeCostInputs costInputs;
18699///             } v1;
18700///     }
18701/// ```
18702///
18703// union with discriminant i32
18704#[cfg_eval::cfg_eval]
18705#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18706#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18707#[cfg_attr(
18708    all(feature = "serde", feature = "alloc"),
18709    serde_with::serde_as,
18710    derive(serde::Serialize, serde::Deserialize),
18711    serde(rename_all = "snake_case")
18712)]
18713#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18714#[allow(clippy::large_enum_variant)]
18715pub enum ContractCodeEntryExt {
18716    V0,
18717    V1(ContractCodeEntryV1),
18718}
18719
18720#[cfg(feature = "alloc")]
18721impl Default for ContractCodeEntryExt {
18722    fn default() -> Self {
18723        Self::V0
18724    }
18725}
18726
18727impl ContractCodeEntryExt {
18728    pub const VARIANTS: [i32; 2] = [0, 1];
18729    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
18730
18731    #[must_use]
18732    pub const fn name(&self) -> &'static str {
18733        match self {
18734            Self::V0 => "V0",
18735            Self::V1(_) => "V1",
18736        }
18737    }
18738
18739    #[must_use]
18740    pub const fn discriminant(&self) -> i32 {
18741        #[allow(clippy::match_same_arms)]
18742        match self {
18743            Self::V0 => 0,
18744            Self::V1(_) => 1,
18745        }
18746    }
18747
18748    #[must_use]
18749    pub const fn variants() -> [i32; 2] {
18750        Self::VARIANTS
18751    }
18752}
18753
18754impl Name for ContractCodeEntryExt {
18755    #[must_use]
18756    fn name(&self) -> &'static str {
18757        Self::name(self)
18758    }
18759}
18760
18761impl Discriminant<i32> for ContractCodeEntryExt {
18762    #[must_use]
18763    fn discriminant(&self) -> i32 {
18764        Self::discriminant(self)
18765    }
18766}
18767
18768impl Variants<i32> for ContractCodeEntryExt {
18769    fn variants() -> slice::Iter<'static, i32> {
18770        Self::VARIANTS.iter()
18771    }
18772}
18773
18774impl Union<i32> for ContractCodeEntryExt {}
18775
18776impl ReadXdr for ContractCodeEntryExt {
18777    #[cfg(feature = "std")]
18778    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18779        r.with_limited_depth(|r| {
18780            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
18781            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
18782            let v = match dv {
18783                0 => Self::V0,
18784                1 => Self::V1(ContractCodeEntryV1::read_xdr(r)?),
18785                #[allow(unreachable_patterns)]
18786                _ => return Err(Error::Invalid),
18787            };
18788            Ok(v)
18789        })
18790    }
18791}
18792
18793impl WriteXdr for ContractCodeEntryExt {
18794    #[cfg(feature = "std")]
18795    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18796        w.with_limited_depth(|w| {
18797            self.discriminant().write_xdr(w)?;
18798            #[allow(clippy::match_same_arms)]
18799            match self {
18800                Self::V0 => ().write_xdr(w)?,
18801                Self::V1(v) => v.write_xdr(w)?,
18802            };
18803            Ok(())
18804        })
18805    }
18806}
18807
18808/// ContractCodeEntry is an XDR Struct defines as:
18809///
18810/// ```text
18811/// struct ContractCodeEntry {
18812///     union switch (int v)
18813///     {
18814///         case 0:
18815///             void;
18816///         case 1:
18817///             struct
18818///             {
18819///                 ExtensionPoint ext;
18820///                 ContractCodeCostInputs costInputs;
18821///             } v1;
18822///     } ext;
18823///
18824///     Hash hash;
18825///     opaque code<>;
18826/// };
18827/// ```
18828///
18829#[cfg_attr(feature = "alloc", derive(Default))]
18830#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18831#[cfg_eval::cfg_eval]
18832#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18833#[cfg_attr(
18834    all(feature = "serde", feature = "alloc"),
18835    serde_with::serde_as,
18836    derive(serde::Serialize, serde::Deserialize),
18837    serde(rename_all = "snake_case")
18838)]
18839#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18840pub struct ContractCodeEntry {
18841    pub ext: ContractCodeEntryExt,
18842    pub hash: Hash,
18843    pub code: BytesM,
18844}
18845
18846impl ReadXdr for ContractCodeEntry {
18847    #[cfg(feature = "std")]
18848    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18849        r.with_limited_depth(|r| {
18850            Ok(Self {
18851                ext: ContractCodeEntryExt::read_xdr(r)?,
18852                hash: Hash::read_xdr(r)?,
18853                code: BytesM::read_xdr(r)?,
18854            })
18855        })
18856    }
18857}
18858
18859impl WriteXdr for ContractCodeEntry {
18860    #[cfg(feature = "std")]
18861    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18862        w.with_limited_depth(|w| {
18863            self.ext.write_xdr(w)?;
18864            self.hash.write_xdr(w)?;
18865            self.code.write_xdr(w)?;
18866            Ok(())
18867        })
18868    }
18869}
18870
18871/// TtlEntry is an XDR Struct defines as:
18872///
18873/// ```text
18874/// struct TTLEntry {
18875///     // Hash of the LedgerKey that is associated with this TTLEntry
18876///     Hash keyHash;
18877///     uint32 liveUntilLedgerSeq;
18878/// };
18879/// ```
18880///
18881#[cfg_attr(feature = "alloc", derive(Default))]
18882#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18883#[cfg_eval::cfg_eval]
18884#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18885#[cfg_attr(
18886    all(feature = "serde", feature = "alloc"),
18887    serde_with::serde_as,
18888    derive(serde::Serialize, serde::Deserialize),
18889    serde(rename_all = "snake_case")
18890)]
18891#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18892pub struct TtlEntry {
18893    pub key_hash: Hash,
18894    pub live_until_ledger_seq: u32,
18895}
18896
18897impl ReadXdr for TtlEntry {
18898    #[cfg(feature = "std")]
18899    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
18900        r.with_limited_depth(|r| {
18901            Ok(Self {
18902                key_hash: Hash::read_xdr(r)?,
18903                live_until_ledger_seq: u32::read_xdr(r)?,
18904            })
18905        })
18906    }
18907}
18908
18909impl WriteXdr for TtlEntry {
18910    #[cfg(feature = "std")]
18911    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
18912        w.with_limited_depth(|w| {
18913            self.key_hash.write_xdr(w)?;
18914            self.live_until_ledger_seq.write_xdr(w)?;
18915            Ok(())
18916        })
18917    }
18918}
18919
18920/// LedgerEntryExtensionV1Ext is an XDR NestedUnion defines as:
18921///
18922/// ```text
18923/// union switch (int v)
18924///     {
18925///     case 0:
18926///         void;
18927///     }
18928/// ```
18929///
18930// union with discriminant i32
18931#[cfg_eval::cfg_eval]
18932#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
18933#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
18934#[cfg_attr(
18935    all(feature = "serde", feature = "alloc"),
18936    serde_with::serde_as,
18937    derive(serde::Serialize, serde::Deserialize),
18938    serde(rename_all = "snake_case")
18939)]
18940#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
18941#[allow(clippy::large_enum_variant)]
18942pub enum LedgerEntryExtensionV1Ext {
18943    V0,
18944}
18945
18946#[cfg(feature = "alloc")]
18947impl Default for LedgerEntryExtensionV1Ext {
18948    fn default() -> Self {
18949        Self::V0
18950    }
18951}
18952
18953impl LedgerEntryExtensionV1Ext {
18954    pub const VARIANTS: [i32; 1] = [0];
18955    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
18956
18957    #[must_use]
18958    pub const fn name(&self) -> &'static str {
18959        match self {
18960            Self::V0 => "V0",
18961        }
18962    }
18963
18964    #[must_use]
18965    pub const fn discriminant(&self) -> i32 {
18966        #[allow(clippy::match_same_arms)]
18967        match self {
18968            Self::V0 => 0,
18969        }
18970    }
18971
18972    #[must_use]
18973    pub const fn variants() -> [i32; 1] {
18974        Self::VARIANTS
18975    }
18976}
18977
18978impl Name for LedgerEntryExtensionV1Ext {
18979    #[must_use]
18980    fn name(&self) -> &'static str {
18981        Self::name(self)
18982    }
18983}
18984
18985impl Discriminant<i32> for LedgerEntryExtensionV1Ext {
18986    #[must_use]
18987    fn discriminant(&self) -> i32 {
18988        Self::discriminant(self)
18989    }
18990}
18991
18992impl Variants<i32> for LedgerEntryExtensionV1Ext {
18993    fn variants() -> slice::Iter<'static, i32> {
18994        Self::VARIANTS.iter()
18995    }
18996}
18997
18998impl Union<i32> for LedgerEntryExtensionV1Ext {}
18999
19000impl ReadXdr for LedgerEntryExtensionV1Ext {
19001    #[cfg(feature = "std")]
19002    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19003        r.with_limited_depth(|r| {
19004            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
19005            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
19006            let v = match dv {
19007                0 => Self::V0,
19008                #[allow(unreachable_patterns)]
19009                _ => return Err(Error::Invalid),
19010            };
19011            Ok(v)
19012        })
19013    }
19014}
19015
19016impl WriteXdr for LedgerEntryExtensionV1Ext {
19017    #[cfg(feature = "std")]
19018    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19019        w.with_limited_depth(|w| {
19020            self.discriminant().write_xdr(w)?;
19021            #[allow(clippy::match_same_arms)]
19022            match self {
19023                Self::V0 => ().write_xdr(w)?,
19024            };
19025            Ok(())
19026        })
19027    }
19028}
19029
19030/// LedgerEntryExtensionV1 is an XDR Struct defines as:
19031///
19032/// ```text
19033/// struct LedgerEntryExtensionV1
19034/// {
19035///     SponsorshipDescriptor sponsoringID;
19036///
19037///     union switch (int v)
19038///     {
19039///     case 0:
19040///         void;
19041///     }
19042///     ext;
19043/// };
19044/// ```
19045///
19046#[cfg_attr(feature = "alloc", derive(Default))]
19047#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19048#[cfg_eval::cfg_eval]
19049#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19050#[cfg_attr(
19051    all(feature = "serde", feature = "alloc"),
19052    serde_with::serde_as,
19053    derive(serde::Serialize, serde::Deserialize),
19054    serde(rename_all = "snake_case")
19055)]
19056#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19057pub struct LedgerEntryExtensionV1 {
19058    pub sponsoring_id: SponsorshipDescriptor,
19059    pub ext: LedgerEntryExtensionV1Ext,
19060}
19061
19062impl ReadXdr for LedgerEntryExtensionV1 {
19063    #[cfg(feature = "std")]
19064    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19065        r.with_limited_depth(|r| {
19066            Ok(Self {
19067                sponsoring_id: SponsorshipDescriptor::read_xdr(r)?,
19068                ext: LedgerEntryExtensionV1Ext::read_xdr(r)?,
19069            })
19070        })
19071    }
19072}
19073
19074impl WriteXdr for LedgerEntryExtensionV1 {
19075    #[cfg(feature = "std")]
19076    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19077        w.with_limited_depth(|w| {
19078            self.sponsoring_id.write_xdr(w)?;
19079            self.ext.write_xdr(w)?;
19080            Ok(())
19081        })
19082    }
19083}
19084
19085/// LedgerEntryData is an XDR NestedUnion defines as:
19086///
19087/// ```text
19088/// union switch (LedgerEntryType type)
19089///     {
19090///     case ACCOUNT:
19091///         AccountEntry account;
19092///     case TRUSTLINE:
19093///         TrustLineEntry trustLine;
19094///     case OFFER:
19095///         OfferEntry offer;
19096///     case DATA:
19097///         DataEntry data;
19098///     case CLAIMABLE_BALANCE:
19099///         ClaimableBalanceEntry claimableBalance;
19100///     case LIQUIDITY_POOL:
19101///         LiquidityPoolEntry liquidityPool;
19102///     case CONTRACT_DATA:
19103///         ContractDataEntry contractData;
19104///     case CONTRACT_CODE:
19105///         ContractCodeEntry contractCode;
19106///     case CONFIG_SETTING:
19107///         ConfigSettingEntry configSetting;
19108///     case TTL:
19109///         TTLEntry ttl;
19110///     }
19111/// ```
19112///
19113// union with discriminant LedgerEntryType
19114#[cfg_eval::cfg_eval]
19115#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19116#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19117#[cfg_attr(
19118    all(feature = "serde", feature = "alloc"),
19119    serde_with::serde_as,
19120    derive(serde::Serialize, serde::Deserialize),
19121    serde(rename_all = "snake_case")
19122)]
19123#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19124#[allow(clippy::large_enum_variant)]
19125pub enum LedgerEntryData {
19126    Account(AccountEntry),
19127    Trustline(TrustLineEntry),
19128    Offer(OfferEntry),
19129    Data(DataEntry),
19130    ClaimableBalance(ClaimableBalanceEntry),
19131    LiquidityPool(LiquidityPoolEntry),
19132    ContractData(ContractDataEntry),
19133    ContractCode(ContractCodeEntry),
19134    ConfigSetting(ConfigSettingEntry),
19135    Ttl(TtlEntry),
19136}
19137
19138#[cfg(feature = "alloc")]
19139impl Default for LedgerEntryData {
19140    fn default() -> Self {
19141        Self::Account(AccountEntry::default())
19142    }
19143}
19144
19145impl LedgerEntryData {
19146    pub const VARIANTS: [LedgerEntryType; 10] = [
19147        LedgerEntryType::Account,
19148        LedgerEntryType::Trustline,
19149        LedgerEntryType::Offer,
19150        LedgerEntryType::Data,
19151        LedgerEntryType::ClaimableBalance,
19152        LedgerEntryType::LiquidityPool,
19153        LedgerEntryType::ContractData,
19154        LedgerEntryType::ContractCode,
19155        LedgerEntryType::ConfigSetting,
19156        LedgerEntryType::Ttl,
19157    ];
19158    pub const VARIANTS_STR: [&'static str; 10] = [
19159        "Account",
19160        "Trustline",
19161        "Offer",
19162        "Data",
19163        "ClaimableBalance",
19164        "LiquidityPool",
19165        "ContractData",
19166        "ContractCode",
19167        "ConfigSetting",
19168        "Ttl",
19169    ];
19170
19171    #[must_use]
19172    pub const fn name(&self) -> &'static str {
19173        match self {
19174            Self::Account(_) => "Account",
19175            Self::Trustline(_) => "Trustline",
19176            Self::Offer(_) => "Offer",
19177            Self::Data(_) => "Data",
19178            Self::ClaimableBalance(_) => "ClaimableBalance",
19179            Self::LiquidityPool(_) => "LiquidityPool",
19180            Self::ContractData(_) => "ContractData",
19181            Self::ContractCode(_) => "ContractCode",
19182            Self::ConfigSetting(_) => "ConfigSetting",
19183            Self::Ttl(_) => "Ttl",
19184        }
19185    }
19186
19187    #[must_use]
19188    pub const fn discriminant(&self) -> LedgerEntryType {
19189        #[allow(clippy::match_same_arms)]
19190        match self {
19191            Self::Account(_) => LedgerEntryType::Account,
19192            Self::Trustline(_) => LedgerEntryType::Trustline,
19193            Self::Offer(_) => LedgerEntryType::Offer,
19194            Self::Data(_) => LedgerEntryType::Data,
19195            Self::ClaimableBalance(_) => LedgerEntryType::ClaimableBalance,
19196            Self::LiquidityPool(_) => LedgerEntryType::LiquidityPool,
19197            Self::ContractData(_) => LedgerEntryType::ContractData,
19198            Self::ContractCode(_) => LedgerEntryType::ContractCode,
19199            Self::ConfigSetting(_) => LedgerEntryType::ConfigSetting,
19200            Self::Ttl(_) => LedgerEntryType::Ttl,
19201        }
19202    }
19203
19204    #[must_use]
19205    pub const fn variants() -> [LedgerEntryType; 10] {
19206        Self::VARIANTS
19207    }
19208}
19209
19210impl Name for LedgerEntryData {
19211    #[must_use]
19212    fn name(&self) -> &'static str {
19213        Self::name(self)
19214    }
19215}
19216
19217impl Discriminant<LedgerEntryType> for LedgerEntryData {
19218    #[must_use]
19219    fn discriminant(&self) -> LedgerEntryType {
19220        Self::discriminant(self)
19221    }
19222}
19223
19224impl Variants<LedgerEntryType> for LedgerEntryData {
19225    fn variants() -> slice::Iter<'static, LedgerEntryType> {
19226        Self::VARIANTS.iter()
19227    }
19228}
19229
19230impl Union<LedgerEntryType> for LedgerEntryData {}
19231
19232impl ReadXdr for LedgerEntryData {
19233    #[cfg(feature = "std")]
19234    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19235        r.with_limited_depth(|r| {
19236            let dv: LedgerEntryType = <LedgerEntryType as ReadXdr>::read_xdr(r)?;
19237            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
19238            let v = match dv {
19239                LedgerEntryType::Account => Self::Account(AccountEntry::read_xdr(r)?),
19240                LedgerEntryType::Trustline => Self::Trustline(TrustLineEntry::read_xdr(r)?),
19241                LedgerEntryType::Offer => Self::Offer(OfferEntry::read_xdr(r)?),
19242                LedgerEntryType::Data => Self::Data(DataEntry::read_xdr(r)?),
19243                LedgerEntryType::ClaimableBalance => {
19244                    Self::ClaimableBalance(ClaimableBalanceEntry::read_xdr(r)?)
19245                }
19246                LedgerEntryType::LiquidityPool => {
19247                    Self::LiquidityPool(LiquidityPoolEntry::read_xdr(r)?)
19248                }
19249                LedgerEntryType::ContractData => {
19250                    Self::ContractData(ContractDataEntry::read_xdr(r)?)
19251                }
19252                LedgerEntryType::ContractCode => {
19253                    Self::ContractCode(ContractCodeEntry::read_xdr(r)?)
19254                }
19255                LedgerEntryType::ConfigSetting => {
19256                    Self::ConfigSetting(ConfigSettingEntry::read_xdr(r)?)
19257                }
19258                LedgerEntryType::Ttl => Self::Ttl(TtlEntry::read_xdr(r)?),
19259                #[allow(unreachable_patterns)]
19260                _ => return Err(Error::Invalid),
19261            };
19262            Ok(v)
19263        })
19264    }
19265}
19266
19267impl WriteXdr for LedgerEntryData {
19268    #[cfg(feature = "std")]
19269    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19270        w.with_limited_depth(|w| {
19271            self.discriminant().write_xdr(w)?;
19272            #[allow(clippy::match_same_arms)]
19273            match self {
19274                Self::Account(v) => v.write_xdr(w)?,
19275                Self::Trustline(v) => v.write_xdr(w)?,
19276                Self::Offer(v) => v.write_xdr(w)?,
19277                Self::Data(v) => v.write_xdr(w)?,
19278                Self::ClaimableBalance(v) => v.write_xdr(w)?,
19279                Self::LiquidityPool(v) => v.write_xdr(w)?,
19280                Self::ContractData(v) => v.write_xdr(w)?,
19281                Self::ContractCode(v) => v.write_xdr(w)?,
19282                Self::ConfigSetting(v) => v.write_xdr(w)?,
19283                Self::Ttl(v) => v.write_xdr(w)?,
19284            };
19285            Ok(())
19286        })
19287    }
19288}
19289
19290/// LedgerEntryExt is an XDR NestedUnion defines as:
19291///
19292/// ```text
19293/// union switch (int v)
19294///     {
19295///     case 0:
19296///         void;
19297///     case 1:
19298///         LedgerEntryExtensionV1 v1;
19299///     }
19300/// ```
19301///
19302// union with discriminant i32
19303#[cfg_eval::cfg_eval]
19304#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19305#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19306#[cfg_attr(
19307    all(feature = "serde", feature = "alloc"),
19308    serde_with::serde_as,
19309    derive(serde::Serialize, serde::Deserialize),
19310    serde(rename_all = "snake_case")
19311)]
19312#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19313#[allow(clippy::large_enum_variant)]
19314pub enum LedgerEntryExt {
19315    V0,
19316    V1(LedgerEntryExtensionV1),
19317}
19318
19319#[cfg(feature = "alloc")]
19320impl Default for LedgerEntryExt {
19321    fn default() -> Self {
19322        Self::V0
19323    }
19324}
19325
19326impl LedgerEntryExt {
19327    pub const VARIANTS: [i32; 2] = [0, 1];
19328    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
19329
19330    #[must_use]
19331    pub const fn name(&self) -> &'static str {
19332        match self {
19333            Self::V0 => "V0",
19334            Self::V1(_) => "V1",
19335        }
19336    }
19337
19338    #[must_use]
19339    pub const fn discriminant(&self) -> i32 {
19340        #[allow(clippy::match_same_arms)]
19341        match self {
19342            Self::V0 => 0,
19343            Self::V1(_) => 1,
19344        }
19345    }
19346
19347    #[must_use]
19348    pub const fn variants() -> [i32; 2] {
19349        Self::VARIANTS
19350    }
19351}
19352
19353impl Name for LedgerEntryExt {
19354    #[must_use]
19355    fn name(&self) -> &'static str {
19356        Self::name(self)
19357    }
19358}
19359
19360impl Discriminant<i32> for LedgerEntryExt {
19361    #[must_use]
19362    fn discriminant(&self) -> i32 {
19363        Self::discriminant(self)
19364    }
19365}
19366
19367impl Variants<i32> for LedgerEntryExt {
19368    fn variants() -> slice::Iter<'static, i32> {
19369        Self::VARIANTS.iter()
19370    }
19371}
19372
19373impl Union<i32> for LedgerEntryExt {}
19374
19375impl ReadXdr for LedgerEntryExt {
19376    #[cfg(feature = "std")]
19377    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19378        r.with_limited_depth(|r| {
19379            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
19380            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
19381            let v = match dv {
19382                0 => Self::V0,
19383                1 => Self::V1(LedgerEntryExtensionV1::read_xdr(r)?),
19384                #[allow(unreachable_patterns)]
19385                _ => return Err(Error::Invalid),
19386            };
19387            Ok(v)
19388        })
19389    }
19390}
19391
19392impl WriteXdr for LedgerEntryExt {
19393    #[cfg(feature = "std")]
19394    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19395        w.with_limited_depth(|w| {
19396            self.discriminant().write_xdr(w)?;
19397            #[allow(clippy::match_same_arms)]
19398            match self {
19399                Self::V0 => ().write_xdr(w)?,
19400                Self::V1(v) => v.write_xdr(w)?,
19401            };
19402            Ok(())
19403        })
19404    }
19405}
19406
19407/// LedgerEntry is an XDR Struct defines as:
19408///
19409/// ```text
19410/// struct LedgerEntry
19411/// {
19412///     uint32 lastModifiedLedgerSeq; // ledger the LedgerEntry was last changed
19413///
19414///     union switch (LedgerEntryType type)
19415///     {
19416///     case ACCOUNT:
19417///         AccountEntry account;
19418///     case TRUSTLINE:
19419///         TrustLineEntry trustLine;
19420///     case OFFER:
19421///         OfferEntry offer;
19422///     case DATA:
19423///         DataEntry data;
19424///     case CLAIMABLE_BALANCE:
19425///         ClaimableBalanceEntry claimableBalance;
19426///     case LIQUIDITY_POOL:
19427///         LiquidityPoolEntry liquidityPool;
19428///     case CONTRACT_DATA:
19429///         ContractDataEntry contractData;
19430///     case CONTRACT_CODE:
19431///         ContractCodeEntry contractCode;
19432///     case CONFIG_SETTING:
19433///         ConfigSettingEntry configSetting;
19434///     case TTL:
19435///         TTLEntry ttl;
19436///     }
19437///     data;
19438///
19439///     // reserved for future use
19440///     union switch (int v)
19441///     {
19442///     case 0:
19443///         void;
19444///     case 1:
19445///         LedgerEntryExtensionV1 v1;
19446///     }
19447///     ext;
19448/// };
19449/// ```
19450///
19451#[cfg_attr(feature = "alloc", derive(Default))]
19452#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19453#[cfg_eval::cfg_eval]
19454#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19455#[cfg_attr(
19456    all(feature = "serde", feature = "alloc"),
19457    serde_with::serde_as,
19458    derive(serde::Serialize, serde::Deserialize),
19459    serde(rename_all = "snake_case")
19460)]
19461#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19462pub struct LedgerEntry {
19463    pub last_modified_ledger_seq: u32,
19464    pub data: LedgerEntryData,
19465    pub ext: LedgerEntryExt,
19466}
19467
19468impl ReadXdr for LedgerEntry {
19469    #[cfg(feature = "std")]
19470    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19471        r.with_limited_depth(|r| {
19472            Ok(Self {
19473                last_modified_ledger_seq: u32::read_xdr(r)?,
19474                data: LedgerEntryData::read_xdr(r)?,
19475                ext: LedgerEntryExt::read_xdr(r)?,
19476            })
19477        })
19478    }
19479}
19480
19481impl WriteXdr for LedgerEntry {
19482    #[cfg(feature = "std")]
19483    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19484        w.with_limited_depth(|w| {
19485            self.last_modified_ledger_seq.write_xdr(w)?;
19486            self.data.write_xdr(w)?;
19487            self.ext.write_xdr(w)?;
19488            Ok(())
19489        })
19490    }
19491}
19492
19493/// LedgerKeyAccount is an XDR NestedStruct defines as:
19494///
19495/// ```text
19496/// struct
19497///     {
19498///         AccountID accountID;
19499///     }
19500/// ```
19501///
19502#[cfg_attr(feature = "alloc", derive(Default))]
19503#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19504#[cfg_eval::cfg_eval]
19505#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19506#[cfg_attr(
19507    all(feature = "serde", feature = "alloc"),
19508    serde_with::serde_as,
19509    derive(serde::Serialize, serde::Deserialize),
19510    serde(rename_all = "snake_case")
19511)]
19512#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19513pub struct LedgerKeyAccount {
19514    pub account_id: AccountId,
19515}
19516
19517impl ReadXdr for LedgerKeyAccount {
19518    #[cfg(feature = "std")]
19519    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19520        r.with_limited_depth(|r| {
19521            Ok(Self {
19522                account_id: AccountId::read_xdr(r)?,
19523            })
19524        })
19525    }
19526}
19527
19528impl WriteXdr for LedgerKeyAccount {
19529    #[cfg(feature = "std")]
19530    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19531        w.with_limited_depth(|w| {
19532            self.account_id.write_xdr(w)?;
19533            Ok(())
19534        })
19535    }
19536}
19537
19538/// LedgerKeyTrustLine is an XDR NestedStruct defines as:
19539///
19540/// ```text
19541/// struct
19542///     {
19543///         AccountID accountID;
19544///         TrustLineAsset asset;
19545///     }
19546/// ```
19547///
19548#[cfg_attr(feature = "alloc", derive(Default))]
19549#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19550#[cfg_eval::cfg_eval]
19551#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19552#[cfg_attr(
19553    all(feature = "serde", feature = "alloc"),
19554    serde_with::serde_as,
19555    derive(serde::Serialize, serde::Deserialize),
19556    serde(rename_all = "snake_case")
19557)]
19558#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19559pub struct LedgerKeyTrustLine {
19560    pub account_id: AccountId,
19561    pub asset: TrustLineAsset,
19562}
19563
19564impl ReadXdr for LedgerKeyTrustLine {
19565    #[cfg(feature = "std")]
19566    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19567        r.with_limited_depth(|r| {
19568            Ok(Self {
19569                account_id: AccountId::read_xdr(r)?,
19570                asset: TrustLineAsset::read_xdr(r)?,
19571            })
19572        })
19573    }
19574}
19575
19576impl WriteXdr for LedgerKeyTrustLine {
19577    #[cfg(feature = "std")]
19578    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19579        w.with_limited_depth(|w| {
19580            self.account_id.write_xdr(w)?;
19581            self.asset.write_xdr(w)?;
19582            Ok(())
19583        })
19584    }
19585}
19586
19587/// LedgerKeyOffer is an XDR NestedStruct defines as:
19588///
19589/// ```text
19590/// struct
19591///     {
19592///         AccountID sellerID;
19593///         int64 offerID;
19594///     }
19595/// ```
19596///
19597#[cfg_attr(feature = "alloc", derive(Default))]
19598#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19599#[cfg_eval::cfg_eval]
19600#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19601#[cfg_attr(
19602    all(feature = "serde", feature = "alloc"),
19603    serde_with::serde_as,
19604    derive(serde::Serialize, serde::Deserialize),
19605    serde(rename_all = "snake_case")
19606)]
19607#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19608pub struct LedgerKeyOffer {
19609    pub seller_id: AccountId,
19610    #[cfg_attr(
19611        all(feature = "serde", feature = "alloc"),
19612        serde_as(as = "NumberOrString")
19613    )]
19614    pub offer_id: i64,
19615}
19616
19617impl ReadXdr for LedgerKeyOffer {
19618    #[cfg(feature = "std")]
19619    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19620        r.with_limited_depth(|r| {
19621            Ok(Self {
19622                seller_id: AccountId::read_xdr(r)?,
19623                offer_id: i64::read_xdr(r)?,
19624            })
19625        })
19626    }
19627}
19628
19629impl WriteXdr for LedgerKeyOffer {
19630    #[cfg(feature = "std")]
19631    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19632        w.with_limited_depth(|w| {
19633            self.seller_id.write_xdr(w)?;
19634            self.offer_id.write_xdr(w)?;
19635            Ok(())
19636        })
19637    }
19638}
19639
19640/// LedgerKeyData is an XDR NestedStruct defines as:
19641///
19642/// ```text
19643/// struct
19644///     {
19645///         AccountID accountID;
19646///         string64 dataName;
19647///     }
19648/// ```
19649///
19650#[cfg_attr(feature = "alloc", derive(Default))]
19651#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19652#[cfg_eval::cfg_eval]
19653#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19654#[cfg_attr(
19655    all(feature = "serde", feature = "alloc"),
19656    serde_with::serde_as,
19657    derive(serde::Serialize, serde::Deserialize),
19658    serde(rename_all = "snake_case")
19659)]
19660#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19661pub struct LedgerKeyData {
19662    pub account_id: AccountId,
19663    pub data_name: String64,
19664}
19665
19666impl ReadXdr for LedgerKeyData {
19667    #[cfg(feature = "std")]
19668    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19669        r.with_limited_depth(|r| {
19670            Ok(Self {
19671                account_id: AccountId::read_xdr(r)?,
19672                data_name: String64::read_xdr(r)?,
19673            })
19674        })
19675    }
19676}
19677
19678impl WriteXdr for LedgerKeyData {
19679    #[cfg(feature = "std")]
19680    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19681        w.with_limited_depth(|w| {
19682            self.account_id.write_xdr(w)?;
19683            self.data_name.write_xdr(w)?;
19684            Ok(())
19685        })
19686    }
19687}
19688
19689/// LedgerKeyClaimableBalance is an XDR NestedStruct defines as:
19690///
19691/// ```text
19692/// struct
19693///     {
19694///         ClaimableBalanceID balanceID;
19695///     }
19696/// ```
19697///
19698#[cfg_attr(feature = "alloc", derive(Default))]
19699#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19700#[cfg_eval::cfg_eval]
19701#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19702#[cfg_attr(
19703    all(feature = "serde", feature = "alloc"),
19704    serde_with::serde_as,
19705    derive(serde::Serialize, serde::Deserialize),
19706    serde(rename_all = "snake_case")
19707)]
19708#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19709pub struct LedgerKeyClaimableBalance {
19710    pub balance_id: ClaimableBalanceId,
19711}
19712
19713impl ReadXdr for LedgerKeyClaimableBalance {
19714    #[cfg(feature = "std")]
19715    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19716        r.with_limited_depth(|r| {
19717            Ok(Self {
19718                balance_id: ClaimableBalanceId::read_xdr(r)?,
19719            })
19720        })
19721    }
19722}
19723
19724impl WriteXdr for LedgerKeyClaimableBalance {
19725    #[cfg(feature = "std")]
19726    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19727        w.with_limited_depth(|w| {
19728            self.balance_id.write_xdr(w)?;
19729            Ok(())
19730        })
19731    }
19732}
19733
19734/// LedgerKeyLiquidityPool is an XDR NestedStruct defines as:
19735///
19736/// ```text
19737/// struct
19738///     {
19739///         PoolID liquidityPoolID;
19740///     }
19741/// ```
19742///
19743#[cfg_attr(feature = "alloc", derive(Default))]
19744#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19745#[cfg_eval::cfg_eval]
19746#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19747#[cfg_attr(
19748    all(feature = "serde", feature = "alloc"),
19749    serde_with::serde_as,
19750    derive(serde::Serialize, serde::Deserialize),
19751    serde(rename_all = "snake_case")
19752)]
19753#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19754pub struct LedgerKeyLiquidityPool {
19755    pub liquidity_pool_id: PoolId,
19756}
19757
19758impl ReadXdr for LedgerKeyLiquidityPool {
19759    #[cfg(feature = "std")]
19760    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19761        r.with_limited_depth(|r| {
19762            Ok(Self {
19763                liquidity_pool_id: PoolId::read_xdr(r)?,
19764            })
19765        })
19766    }
19767}
19768
19769impl WriteXdr for LedgerKeyLiquidityPool {
19770    #[cfg(feature = "std")]
19771    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19772        w.with_limited_depth(|w| {
19773            self.liquidity_pool_id.write_xdr(w)?;
19774            Ok(())
19775        })
19776    }
19777}
19778
19779/// LedgerKeyContractData is an XDR NestedStruct defines as:
19780///
19781/// ```text
19782/// struct
19783///     {
19784///         SCAddress contract;
19785///         SCVal key;
19786///         ContractDataDurability durability;
19787///     }
19788/// ```
19789///
19790#[cfg_attr(feature = "alloc", derive(Default))]
19791#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19792#[cfg_eval::cfg_eval]
19793#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19794#[cfg_attr(
19795    all(feature = "serde", feature = "alloc"),
19796    serde_with::serde_as,
19797    derive(serde::Serialize, serde::Deserialize),
19798    serde(rename_all = "snake_case")
19799)]
19800#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19801pub struct LedgerKeyContractData {
19802    pub contract: ScAddress,
19803    pub key: ScVal,
19804    pub durability: ContractDataDurability,
19805}
19806
19807impl ReadXdr for LedgerKeyContractData {
19808    #[cfg(feature = "std")]
19809    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19810        r.with_limited_depth(|r| {
19811            Ok(Self {
19812                contract: ScAddress::read_xdr(r)?,
19813                key: ScVal::read_xdr(r)?,
19814                durability: ContractDataDurability::read_xdr(r)?,
19815            })
19816        })
19817    }
19818}
19819
19820impl WriteXdr for LedgerKeyContractData {
19821    #[cfg(feature = "std")]
19822    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19823        w.with_limited_depth(|w| {
19824            self.contract.write_xdr(w)?;
19825            self.key.write_xdr(w)?;
19826            self.durability.write_xdr(w)?;
19827            Ok(())
19828        })
19829    }
19830}
19831
19832/// LedgerKeyContractCode is an XDR NestedStruct defines as:
19833///
19834/// ```text
19835/// struct
19836///     {
19837///         Hash hash;
19838///     }
19839/// ```
19840///
19841#[cfg_attr(feature = "alloc", derive(Default))]
19842#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19843#[cfg_eval::cfg_eval]
19844#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19845#[cfg_attr(
19846    all(feature = "serde", feature = "alloc"),
19847    serde_with::serde_as,
19848    derive(serde::Serialize, serde::Deserialize),
19849    serde(rename_all = "snake_case")
19850)]
19851#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19852pub struct LedgerKeyContractCode {
19853    pub hash: Hash,
19854}
19855
19856impl ReadXdr for LedgerKeyContractCode {
19857    #[cfg(feature = "std")]
19858    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19859        r.with_limited_depth(|r| {
19860            Ok(Self {
19861                hash: Hash::read_xdr(r)?,
19862            })
19863        })
19864    }
19865}
19866
19867impl WriteXdr for LedgerKeyContractCode {
19868    #[cfg(feature = "std")]
19869    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19870        w.with_limited_depth(|w| {
19871            self.hash.write_xdr(w)?;
19872            Ok(())
19873        })
19874    }
19875}
19876
19877/// LedgerKeyConfigSetting is an XDR NestedStruct defines as:
19878///
19879/// ```text
19880/// struct
19881///     {
19882///         ConfigSettingID configSettingID;
19883///     }
19884/// ```
19885///
19886#[cfg_attr(feature = "alloc", derive(Default))]
19887#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19888#[cfg_eval::cfg_eval]
19889#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19890#[cfg_attr(
19891    all(feature = "serde", feature = "alloc"),
19892    serde_with::serde_as,
19893    derive(serde::Serialize, serde::Deserialize),
19894    serde(rename_all = "snake_case")
19895)]
19896#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19897pub struct LedgerKeyConfigSetting {
19898    pub config_setting_id: ConfigSettingId,
19899}
19900
19901impl ReadXdr for LedgerKeyConfigSetting {
19902    #[cfg(feature = "std")]
19903    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19904        r.with_limited_depth(|r| {
19905            Ok(Self {
19906                config_setting_id: ConfigSettingId::read_xdr(r)?,
19907            })
19908        })
19909    }
19910}
19911
19912impl WriteXdr for LedgerKeyConfigSetting {
19913    #[cfg(feature = "std")]
19914    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19915        w.with_limited_depth(|w| {
19916            self.config_setting_id.write_xdr(w)?;
19917            Ok(())
19918        })
19919    }
19920}
19921
19922/// LedgerKeyTtl is an XDR NestedStruct defines as:
19923///
19924/// ```text
19925/// struct
19926///     {
19927///         // Hash of the LedgerKey that is associated with this TTLEntry
19928///         Hash keyHash;
19929///     }
19930/// ```
19931///
19932#[cfg_attr(feature = "alloc", derive(Default))]
19933#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
19934#[cfg_eval::cfg_eval]
19935#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
19936#[cfg_attr(
19937    all(feature = "serde", feature = "alloc"),
19938    serde_with::serde_as,
19939    derive(serde::Serialize, serde::Deserialize),
19940    serde(rename_all = "snake_case")
19941)]
19942#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19943pub struct LedgerKeyTtl {
19944    pub key_hash: Hash,
19945}
19946
19947impl ReadXdr for LedgerKeyTtl {
19948    #[cfg(feature = "std")]
19949    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
19950        r.with_limited_depth(|r| {
19951            Ok(Self {
19952                key_hash: Hash::read_xdr(r)?,
19953            })
19954        })
19955    }
19956}
19957
19958impl WriteXdr for LedgerKeyTtl {
19959    #[cfg(feature = "std")]
19960    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
19961        w.with_limited_depth(|w| {
19962            self.key_hash.write_xdr(w)?;
19963            Ok(())
19964        })
19965    }
19966}
19967
19968/// LedgerKey is an XDR Union defines as:
19969///
19970/// ```text
19971/// union LedgerKey switch (LedgerEntryType type)
19972/// {
19973/// case ACCOUNT:
19974///     struct
19975///     {
19976///         AccountID accountID;
19977///     } account;
19978///
19979/// case TRUSTLINE:
19980///     struct
19981///     {
19982///         AccountID accountID;
19983///         TrustLineAsset asset;
19984///     } trustLine;
19985///
19986/// case OFFER:
19987///     struct
19988///     {
19989///         AccountID sellerID;
19990///         int64 offerID;
19991///     } offer;
19992///
19993/// case DATA:
19994///     struct
19995///     {
19996///         AccountID accountID;
19997///         string64 dataName;
19998///     } data;
19999///
20000/// case CLAIMABLE_BALANCE:
20001///     struct
20002///     {
20003///         ClaimableBalanceID balanceID;
20004///     } claimableBalance;
20005///
20006/// case LIQUIDITY_POOL:
20007///     struct
20008///     {
20009///         PoolID liquidityPoolID;
20010///     } liquidityPool;
20011/// case CONTRACT_DATA:
20012///     struct
20013///     {
20014///         SCAddress contract;
20015///         SCVal key;
20016///         ContractDataDurability durability;
20017///     } contractData;
20018/// case CONTRACT_CODE:
20019///     struct
20020///     {
20021///         Hash hash;
20022///     } contractCode;
20023/// case CONFIG_SETTING:
20024///     struct
20025///     {
20026///         ConfigSettingID configSettingID;
20027///     } configSetting;
20028/// case TTL:
20029///     struct
20030///     {
20031///         // Hash of the LedgerKey that is associated with this TTLEntry
20032///         Hash keyHash;
20033///     } ttl;
20034/// };
20035/// ```
20036///
20037// union with discriminant LedgerEntryType
20038#[cfg_eval::cfg_eval]
20039#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
20040#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20041#[cfg_attr(
20042    all(feature = "serde", feature = "alloc"),
20043    serde_with::serde_as,
20044    derive(serde::Serialize, serde::Deserialize),
20045    serde(rename_all = "snake_case")
20046)]
20047#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
20048#[allow(clippy::large_enum_variant)]
20049pub enum LedgerKey {
20050    Account(LedgerKeyAccount),
20051    Trustline(LedgerKeyTrustLine),
20052    Offer(LedgerKeyOffer),
20053    Data(LedgerKeyData),
20054    ClaimableBalance(LedgerKeyClaimableBalance),
20055    LiquidityPool(LedgerKeyLiquidityPool),
20056    ContractData(LedgerKeyContractData),
20057    ContractCode(LedgerKeyContractCode),
20058    ConfigSetting(LedgerKeyConfigSetting),
20059    Ttl(LedgerKeyTtl),
20060}
20061
20062#[cfg(feature = "alloc")]
20063impl Default for LedgerKey {
20064    fn default() -> Self {
20065        Self::Account(LedgerKeyAccount::default())
20066    }
20067}
20068
20069impl LedgerKey {
20070    pub const VARIANTS: [LedgerEntryType; 10] = [
20071        LedgerEntryType::Account,
20072        LedgerEntryType::Trustline,
20073        LedgerEntryType::Offer,
20074        LedgerEntryType::Data,
20075        LedgerEntryType::ClaimableBalance,
20076        LedgerEntryType::LiquidityPool,
20077        LedgerEntryType::ContractData,
20078        LedgerEntryType::ContractCode,
20079        LedgerEntryType::ConfigSetting,
20080        LedgerEntryType::Ttl,
20081    ];
20082    pub const VARIANTS_STR: [&'static str; 10] = [
20083        "Account",
20084        "Trustline",
20085        "Offer",
20086        "Data",
20087        "ClaimableBalance",
20088        "LiquidityPool",
20089        "ContractData",
20090        "ContractCode",
20091        "ConfigSetting",
20092        "Ttl",
20093    ];
20094
20095    #[must_use]
20096    pub const fn name(&self) -> &'static str {
20097        match self {
20098            Self::Account(_) => "Account",
20099            Self::Trustline(_) => "Trustline",
20100            Self::Offer(_) => "Offer",
20101            Self::Data(_) => "Data",
20102            Self::ClaimableBalance(_) => "ClaimableBalance",
20103            Self::LiquidityPool(_) => "LiquidityPool",
20104            Self::ContractData(_) => "ContractData",
20105            Self::ContractCode(_) => "ContractCode",
20106            Self::ConfigSetting(_) => "ConfigSetting",
20107            Self::Ttl(_) => "Ttl",
20108        }
20109    }
20110
20111    #[must_use]
20112    pub const fn discriminant(&self) -> LedgerEntryType {
20113        #[allow(clippy::match_same_arms)]
20114        match self {
20115            Self::Account(_) => LedgerEntryType::Account,
20116            Self::Trustline(_) => LedgerEntryType::Trustline,
20117            Self::Offer(_) => LedgerEntryType::Offer,
20118            Self::Data(_) => LedgerEntryType::Data,
20119            Self::ClaimableBalance(_) => LedgerEntryType::ClaimableBalance,
20120            Self::LiquidityPool(_) => LedgerEntryType::LiquidityPool,
20121            Self::ContractData(_) => LedgerEntryType::ContractData,
20122            Self::ContractCode(_) => LedgerEntryType::ContractCode,
20123            Self::ConfigSetting(_) => LedgerEntryType::ConfigSetting,
20124            Self::Ttl(_) => LedgerEntryType::Ttl,
20125        }
20126    }
20127
20128    #[must_use]
20129    pub const fn variants() -> [LedgerEntryType; 10] {
20130        Self::VARIANTS
20131    }
20132}
20133
20134impl Name for LedgerKey {
20135    #[must_use]
20136    fn name(&self) -> &'static str {
20137        Self::name(self)
20138    }
20139}
20140
20141impl Discriminant<LedgerEntryType> for LedgerKey {
20142    #[must_use]
20143    fn discriminant(&self) -> LedgerEntryType {
20144        Self::discriminant(self)
20145    }
20146}
20147
20148impl Variants<LedgerEntryType> for LedgerKey {
20149    fn variants() -> slice::Iter<'static, LedgerEntryType> {
20150        Self::VARIANTS.iter()
20151    }
20152}
20153
20154impl Union<LedgerEntryType> for LedgerKey {}
20155
20156impl ReadXdr for LedgerKey {
20157    #[cfg(feature = "std")]
20158    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
20159        r.with_limited_depth(|r| {
20160            let dv: LedgerEntryType = <LedgerEntryType as ReadXdr>::read_xdr(r)?;
20161            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
20162            let v = match dv {
20163                LedgerEntryType::Account => Self::Account(LedgerKeyAccount::read_xdr(r)?),
20164                LedgerEntryType::Trustline => Self::Trustline(LedgerKeyTrustLine::read_xdr(r)?),
20165                LedgerEntryType::Offer => Self::Offer(LedgerKeyOffer::read_xdr(r)?),
20166                LedgerEntryType::Data => Self::Data(LedgerKeyData::read_xdr(r)?),
20167                LedgerEntryType::ClaimableBalance => {
20168                    Self::ClaimableBalance(LedgerKeyClaimableBalance::read_xdr(r)?)
20169                }
20170                LedgerEntryType::LiquidityPool => {
20171                    Self::LiquidityPool(LedgerKeyLiquidityPool::read_xdr(r)?)
20172                }
20173                LedgerEntryType::ContractData => {
20174                    Self::ContractData(LedgerKeyContractData::read_xdr(r)?)
20175                }
20176                LedgerEntryType::ContractCode => {
20177                    Self::ContractCode(LedgerKeyContractCode::read_xdr(r)?)
20178                }
20179                LedgerEntryType::ConfigSetting => {
20180                    Self::ConfigSetting(LedgerKeyConfigSetting::read_xdr(r)?)
20181                }
20182                LedgerEntryType::Ttl => Self::Ttl(LedgerKeyTtl::read_xdr(r)?),
20183                #[allow(unreachable_patterns)]
20184                _ => return Err(Error::Invalid),
20185            };
20186            Ok(v)
20187        })
20188    }
20189}
20190
20191impl WriteXdr for LedgerKey {
20192    #[cfg(feature = "std")]
20193    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
20194        w.with_limited_depth(|w| {
20195            self.discriminant().write_xdr(w)?;
20196            #[allow(clippy::match_same_arms)]
20197            match self {
20198                Self::Account(v) => v.write_xdr(w)?,
20199                Self::Trustline(v) => v.write_xdr(w)?,
20200                Self::Offer(v) => v.write_xdr(w)?,
20201                Self::Data(v) => v.write_xdr(w)?,
20202                Self::ClaimableBalance(v) => v.write_xdr(w)?,
20203                Self::LiquidityPool(v) => v.write_xdr(w)?,
20204                Self::ContractData(v) => v.write_xdr(w)?,
20205                Self::ContractCode(v) => v.write_xdr(w)?,
20206                Self::ConfigSetting(v) => v.write_xdr(w)?,
20207                Self::Ttl(v) => v.write_xdr(w)?,
20208            };
20209            Ok(())
20210        })
20211    }
20212}
20213
20214/// EnvelopeType is an XDR Enum defines as:
20215///
20216/// ```text
20217/// enum EnvelopeType
20218/// {
20219///     ENVELOPE_TYPE_TX_V0 = 0,
20220///     ENVELOPE_TYPE_SCP = 1,
20221///     ENVELOPE_TYPE_TX = 2,
20222///     ENVELOPE_TYPE_AUTH = 3,
20223///     ENVELOPE_TYPE_SCPVALUE = 4,
20224///     ENVELOPE_TYPE_TX_FEE_BUMP = 5,
20225///     ENVELOPE_TYPE_OP_ID = 6,
20226///     ENVELOPE_TYPE_POOL_REVOKE_OP_ID = 7,
20227///     ENVELOPE_TYPE_CONTRACT_ID = 8,
20228///     ENVELOPE_TYPE_SOROBAN_AUTHORIZATION = 9
20229/// };
20230/// ```
20231///
20232// enum
20233#[cfg_attr(feature = "alloc", derive(Default))]
20234#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
20235#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20236#[cfg_attr(
20237    all(feature = "serde", feature = "alloc"),
20238    derive(serde::Serialize, serde::Deserialize),
20239    serde(rename_all = "snake_case")
20240)]
20241#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
20242#[repr(i32)]
20243pub enum EnvelopeType {
20244    #[cfg_attr(feature = "alloc", default)]
20245    TxV0 = 0,
20246    Scp = 1,
20247    Tx = 2,
20248    Auth = 3,
20249    Scpvalue = 4,
20250    TxFeeBump = 5,
20251    OpId = 6,
20252    PoolRevokeOpId = 7,
20253    ContractId = 8,
20254    SorobanAuthorization = 9,
20255}
20256
20257impl EnvelopeType {
20258    pub const VARIANTS: [EnvelopeType; 10] = [
20259        EnvelopeType::TxV0,
20260        EnvelopeType::Scp,
20261        EnvelopeType::Tx,
20262        EnvelopeType::Auth,
20263        EnvelopeType::Scpvalue,
20264        EnvelopeType::TxFeeBump,
20265        EnvelopeType::OpId,
20266        EnvelopeType::PoolRevokeOpId,
20267        EnvelopeType::ContractId,
20268        EnvelopeType::SorobanAuthorization,
20269    ];
20270    pub const VARIANTS_STR: [&'static str; 10] = [
20271        "TxV0",
20272        "Scp",
20273        "Tx",
20274        "Auth",
20275        "Scpvalue",
20276        "TxFeeBump",
20277        "OpId",
20278        "PoolRevokeOpId",
20279        "ContractId",
20280        "SorobanAuthorization",
20281    ];
20282
20283    #[must_use]
20284    pub const fn name(&self) -> &'static str {
20285        match self {
20286            Self::TxV0 => "TxV0",
20287            Self::Scp => "Scp",
20288            Self::Tx => "Tx",
20289            Self::Auth => "Auth",
20290            Self::Scpvalue => "Scpvalue",
20291            Self::TxFeeBump => "TxFeeBump",
20292            Self::OpId => "OpId",
20293            Self::PoolRevokeOpId => "PoolRevokeOpId",
20294            Self::ContractId => "ContractId",
20295            Self::SorobanAuthorization => "SorobanAuthorization",
20296        }
20297    }
20298
20299    #[must_use]
20300    pub const fn variants() -> [EnvelopeType; 10] {
20301        Self::VARIANTS
20302    }
20303}
20304
20305impl Name for EnvelopeType {
20306    #[must_use]
20307    fn name(&self) -> &'static str {
20308        Self::name(self)
20309    }
20310}
20311
20312impl Variants<EnvelopeType> for EnvelopeType {
20313    fn variants() -> slice::Iter<'static, EnvelopeType> {
20314        Self::VARIANTS.iter()
20315    }
20316}
20317
20318impl Enum for EnvelopeType {}
20319
20320impl fmt::Display for EnvelopeType {
20321    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20322        f.write_str(self.name())
20323    }
20324}
20325
20326impl TryFrom<i32> for EnvelopeType {
20327    type Error = Error;
20328
20329    fn try_from(i: i32) -> Result<Self, Error> {
20330        let e = match i {
20331            0 => EnvelopeType::TxV0,
20332            1 => EnvelopeType::Scp,
20333            2 => EnvelopeType::Tx,
20334            3 => EnvelopeType::Auth,
20335            4 => EnvelopeType::Scpvalue,
20336            5 => EnvelopeType::TxFeeBump,
20337            6 => EnvelopeType::OpId,
20338            7 => EnvelopeType::PoolRevokeOpId,
20339            8 => EnvelopeType::ContractId,
20340            9 => EnvelopeType::SorobanAuthorization,
20341            #[allow(unreachable_patterns)]
20342            _ => return Err(Error::Invalid),
20343        };
20344        Ok(e)
20345    }
20346}
20347
20348impl From<EnvelopeType> for i32 {
20349    #[must_use]
20350    fn from(e: EnvelopeType) -> Self {
20351        e as Self
20352    }
20353}
20354
20355impl ReadXdr for EnvelopeType {
20356    #[cfg(feature = "std")]
20357    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
20358        r.with_limited_depth(|r| {
20359            let e = i32::read_xdr(r)?;
20360            let v: Self = e.try_into()?;
20361            Ok(v)
20362        })
20363    }
20364}
20365
20366impl WriteXdr for EnvelopeType {
20367    #[cfg(feature = "std")]
20368    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
20369        w.with_limited_depth(|w| {
20370            let i: i32 = (*self).into();
20371            i.write_xdr(w)
20372        })
20373    }
20374}
20375
20376/// BucketListType is an XDR Enum defines as:
20377///
20378/// ```text
20379/// enum BucketListType
20380/// {
20381///     LIVE = 0,
20382///     HOT_ARCHIVE = 1
20383/// };
20384/// ```
20385///
20386// enum
20387#[cfg_attr(feature = "alloc", derive(Default))]
20388#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
20389#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20390#[cfg_attr(
20391    all(feature = "serde", feature = "alloc"),
20392    derive(serde::Serialize, serde::Deserialize),
20393    serde(rename_all = "snake_case")
20394)]
20395#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
20396#[repr(i32)]
20397pub enum BucketListType {
20398    #[cfg_attr(feature = "alloc", default)]
20399    Live = 0,
20400    HotArchive = 1,
20401}
20402
20403impl BucketListType {
20404    pub const VARIANTS: [BucketListType; 2] = [BucketListType::Live, BucketListType::HotArchive];
20405    pub const VARIANTS_STR: [&'static str; 2] = ["Live", "HotArchive"];
20406
20407    #[must_use]
20408    pub const fn name(&self) -> &'static str {
20409        match self {
20410            Self::Live => "Live",
20411            Self::HotArchive => "HotArchive",
20412        }
20413    }
20414
20415    #[must_use]
20416    pub const fn variants() -> [BucketListType; 2] {
20417        Self::VARIANTS
20418    }
20419}
20420
20421impl Name for BucketListType {
20422    #[must_use]
20423    fn name(&self) -> &'static str {
20424        Self::name(self)
20425    }
20426}
20427
20428impl Variants<BucketListType> for BucketListType {
20429    fn variants() -> slice::Iter<'static, BucketListType> {
20430        Self::VARIANTS.iter()
20431    }
20432}
20433
20434impl Enum for BucketListType {}
20435
20436impl fmt::Display for BucketListType {
20437    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20438        f.write_str(self.name())
20439    }
20440}
20441
20442impl TryFrom<i32> for BucketListType {
20443    type Error = Error;
20444
20445    fn try_from(i: i32) -> Result<Self, Error> {
20446        let e = match i {
20447            0 => BucketListType::Live,
20448            1 => BucketListType::HotArchive,
20449            #[allow(unreachable_patterns)]
20450            _ => return Err(Error::Invalid),
20451        };
20452        Ok(e)
20453    }
20454}
20455
20456impl From<BucketListType> for i32 {
20457    #[must_use]
20458    fn from(e: BucketListType) -> Self {
20459        e as Self
20460    }
20461}
20462
20463impl ReadXdr for BucketListType {
20464    #[cfg(feature = "std")]
20465    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
20466        r.with_limited_depth(|r| {
20467            let e = i32::read_xdr(r)?;
20468            let v: Self = e.try_into()?;
20469            Ok(v)
20470        })
20471    }
20472}
20473
20474impl WriteXdr for BucketListType {
20475    #[cfg(feature = "std")]
20476    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
20477        w.with_limited_depth(|w| {
20478            let i: i32 = (*self).into();
20479            i.write_xdr(w)
20480        })
20481    }
20482}
20483
20484/// BucketEntryType is an XDR Enum defines as:
20485///
20486/// ```text
20487/// enum BucketEntryType
20488/// {
20489///     METAENTRY =
20490///         -1, // At-and-after protocol 11: bucket metadata, should come first.
20491///     LIVEENTRY = 0, // Before protocol 11: created-or-updated;
20492///                    // At-and-after protocol 11: only updated.
20493///     DEADENTRY = 1,
20494///     INITENTRY = 2 // At-and-after protocol 11: only created.
20495/// };
20496/// ```
20497///
20498// enum
20499#[cfg_attr(feature = "alloc", derive(Default))]
20500#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
20501#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20502#[cfg_attr(
20503    all(feature = "serde", feature = "alloc"),
20504    derive(serde::Serialize, serde::Deserialize),
20505    serde(rename_all = "snake_case")
20506)]
20507#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
20508#[repr(i32)]
20509pub enum BucketEntryType {
20510    #[cfg_attr(feature = "alloc", default)]
20511    Metaentry = -1,
20512    Liveentry = 0,
20513    Deadentry = 1,
20514    Initentry = 2,
20515}
20516
20517impl BucketEntryType {
20518    pub const VARIANTS: [BucketEntryType; 4] = [
20519        BucketEntryType::Metaentry,
20520        BucketEntryType::Liveentry,
20521        BucketEntryType::Deadentry,
20522        BucketEntryType::Initentry,
20523    ];
20524    pub const VARIANTS_STR: [&'static str; 4] =
20525        ["Metaentry", "Liveentry", "Deadentry", "Initentry"];
20526
20527    #[must_use]
20528    pub const fn name(&self) -> &'static str {
20529        match self {
20530            Self::Metaentry => "Metaentry",
20531            Self::Liveentry => "Liveentry",
20532            Self::Deadentry => "Deadentry",
20533            Self::Initentry => "Initentry",
20534        }
20535    }
20536
20537    #[must_use]
20538    pub const fn variants() -> [BucketEntryType; 4] {
20539        Self::VARIANTS
20540    }
20541}
20542
20543impl Name for BucketEntryType {
20544    #[must_use]
20545    fn name(&self) -> &'static str {
20546        Self::name(self)
20547    }
20548}
20549
20550impl Variants<BucketEntryType> for BucketEntryType {
20551    fn variants() -> slice::Iter<'static, BucketEntryType> {
20552        Self::VARIANTS.iter()
20553    }
20554}
20555
20556impl Enum for BucketEntryType {}
20557
20558impl fmt::Display for BucketEntryType {
20559    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20560        f.write_str(self.name())
20561    }
20562}
20563
20564impl TryFrom<i32> for BucketEntryType {
20565    type Error = Error;
20566
20567    fn try_from(i: i32) -> Result<Self, Error> {
20568        let e = match i {
20569            -1 => BucketEntryType::Metaentry,
20570            0 => BucketEntryType::Liveentry,
20571            1 => BucketEntryType::Deadentry,
20572            2 => BucketEntryType::Initentry,
20573            #[allow(unreachable_patterns)]
20574            _ => return Err(Error::Invalid),
20575        };
20576        Ok(e)
20577    }
20578}
20579
20580impl From<BucketEntryType> for i32 {
20581    #[must_use]
20582    fn from(e: BucketEntryType) -> Self {
20583        e as Self
20584    }
20585}
20586
20587impl ReadXdr for BucketEntryType {
20588    #[cfg(feature = "std")]
20589    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
20590        r.with_limited_depth(|r| {
20591            let e = i32::read_xdr(r)?;
20592            let v: Self = e.try_into()?;
20593            Ok(v)
20594        })
20595    }
20596}
20597
20598impl WriteXdr for BucketEntryType {
20599    #[cfg(feature = "std")]
20600    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
20601        w.with_limited_depth(|w| {
20602            let i: i32 = (*self).into();
20603            i.write_xdr(w)
20604        })
20605    }
20606}
20607
20608/// HotArchiveBucketEntryType is an XDR Enum defines as:
20609///
20610/// ```text
20611/// enum HotArchiveBucketEntryType
20612/// {
20613///     HOT_ARCHIVE_METAENTRY = -1, // Bucket metadata, should come first.
20614///     HOT_ARCHIVE_ARCHIVED = 0,   // Entry is Archived
20615///     HOT_ARCHIVE_LIVE = 1        // Entry was previously HOT_ARCHIVE_ARCHIVED, but
20616///                                 // has been added back to the live BucketList.
20617///                                 // Does not need to be persisted.
20618/// };
20619/// ```
20620///
20621// enum
20622#[cfg_attr(feature = "alloc", derive(Default))]
20623#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
20624#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20625#[cfg_attr(
20626    all(feature = "serde", feature = "alloc"),
20627    derive(serde::Serialize, serde::Deserialize),
20628    serde(rename_all = "snake_case")
20629)]
20630#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
20631#[repr(i32)]
20632pub enum HotArchiveBucketEntryType {
20633    #[cfg_attr(feature = "alloc", default)]
20634    Metaentry = -1,
20635    Archived = 0,
20636    Live = 1,
20637}
20638
20639impl HotArchiveBucketEntryType {
20640    pub const VARIANTS: [HotArchiveBucketEntryType; 3] = [
20641        HotArchiveBucketEntryType::Metaentry,
20642        HotArchiveBucketEntryType::Archived,
20643        HotArchiveBucketEntryType::Live,
20644    ];
20645    pub const VARIANTS_STR: [&'static str; 3] = ["Metaentry", "Archived", "Live"];
20646
20647    #[must_use]
20648    pub const fn name(&self) -> &'static str {
20649        match self {
20650            Self::Metaentry => "Metaentry",
20651            Self::Archived => "Archived",
20652            Self::Live => "Live",
20653        }
20654    }
20655
20656    #[must_use]
20657    pub const fn variants() -> [HotArchiveBucketEntryType; 3] {
20658        Self::VARIANTS
20659    }
20660}
20661
20662impl Name for HotArchiveBucketEntryType {
20663    #[must_use]
20664    fn name(&self) -> &'static str {
20665        Self::name(self)
20666    }
20667}
20668
20669impl Variants<HotArchiveBucketEntryType> for HotArchiveBucketEntryType {
20670    fn variants() -> slice::Iter<'static, HotArchiveBucketEntryType> {
20671        Self::VARIANTS.iter()
20672    }
20673}
20674
20675impl Enum for HotArchiveBucketEntryType {}
20676
20677impl fmt::Display for HotArchiveBucketEntryType {
20678    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20679        f.write_str(self.name())
20680    }
20681}
20682
20683impl TryFrom<i32> for HotArchiveBucketEntryType {
20684    type Error = Error;
20685
20686    fn try_from(i: i32) -> Result<Self, Error> {
20687        let e = match i {
20688            -1 => HotArchiveBucketEntryType::Metaentry,
20689            0 => HotArchiveBucketEntryType::Archived,
20690            1 => HotArchiveBucketEntryType::Live,
20691            #[allow(unreachable_patterns)]
20692            _ => return Err(Error::Invalid),
20693        };
20694        Ok(e)
20695    }
20696}
20697
20698impl From<HotArchiveBucketEntryType> for i32 {
20699    #[must_use]
20700    fn from(e: HotArchiveBucketEntryType) -> Self {
20701        e as Self
20702    }
20703}
20704
20705impl ReadXdr for HotArchiveBucketEntryType {
20706    #[cfg(feature = "std")]
20707    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
20708        r.with_limited_depth(|r| {
20709            let e = i32::read_xdr(r)?;
20710            let v: Self = e.try_into()?;
20711            Ok(v)
20712        })
20713    }
20714}
20715
20716impl WriteXdr for HotArchiveBucketEntryType {
20717    #[cfg(feature = "std")]
20718    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
20719        w.with_limited_depth(|w| {
20720            let i: i32 = (*self).into();
20721            i.write_xdr(w)
20722        })
20723    }
20724}
20725
20726/// BucketMetadataExt is an XDR NestedUnion defines as:
20727///
20728/// ```text
20729/// union switch (int v)
20730///     {
20731///     case 0:
20732///         void;
20733///     case 1:
20734///         BucketListType bucketListType;
20735///     }
20736/// ```
20737///
20738// union with discriminant i32
20739#[cfg_eval::cfg_eval]
20740#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
20741#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20742#[cfg_attr(
20743    all(feature = "serde", feature = "alloc"),
20744    serde_with::serde_as,
20745    derive(serde::Serialize, serde::Deserialize),
20746    serde(rename_all = "snake_case")
20747)]
20748#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
20749#[allow(clippy::large_enum_variant)]
20750pub enum BucketMetadataExt {
20751    V0,
20752    V1(BucketListType),
20753}
20754
20755#[cfg(feature = "alloc")]
20756impl Default for BucketMetadataExt {
20757    fn default() -> Self {
20758        Self::V0
20759    }
20760}
20761
20762impl BucketMetadataExt {
20763    pub const VARIANTS: [i32; 2] = [0, 1];
20764    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
20765
20766    #[must_use]
20767    pub const fn name(&self) -> &'static str {
20768        match self {
20769            Self::V0 => "V0",
20770            Self::V1(_) => "V1",
20771        }
20772    }
20773
20774    #[must_use]
20775    pub const fn discriminant(&self) -> i32 {
20776        #[allow(clippy::match_same_arms)]
20777        match self {
20778            Self::V0 => 0,
20779            Self::V1(_) => 1,
20780        }
20781    }
20782
20783    #[must_use]
20784    pub const fn variants() -> [i32; 2] {
20785        Self::VARIANTS
20786    }
20787}
20788
20789impl Name for BucketMetadataExt {
20790    #[must_use]
20791    fn name(&self) -> &'static str {
20792        Self::name(self)
20793    }
20794}
20795
20796impl Discriminant<i32> for BucketMetadataExt {
20797    #[must_use]
20798    fn discriminant(&self) -> i32 {
20799        Self::discriminant(self)
20800    }
20801}
20802
20803impl Variants<i32> for BucketMetadataExt {
20804    fn variants() -> slice::Iter<'static, i32> {
20805        Self::VARIANTS.iter()
20806    }
20807}
20808
20809impl Union<i32> for BucketMetadataExt {}
20810
20811impl ReadXdr for BucketMetadataExt {
20812    #[cfg(feature = "std")]
20813    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
20814        r.with_limited_depth(|r| {
20815            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
20816            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
20817            let v = match dv {
20818                0 => Self::V0,
20819                1 => Self::V1(BucketListType::read_xdr(r)?),
20820                #[allow(unreachable_patterns)]
20821                _ => return Err(Error::Invalid),
20822            };
20823            Ok(v)
20824        })
20825    }
20826}
20827
20828impl WriteXdr for BucketMetadataExt {
20829    #[cfg(feature = "std")]
20830    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
20831        w.with_limited_depth(|w| {
20832            self.discriminant().write_xdr(w)?;
20833            #[allow(clippy::match_same_arms)]
20834            match self {
20835                Self::V0 => ().write_xdr(w)?,
20836                Self::V1(v) => v.write_xdr(w)?,
20837            };
20838            Ok(())
20839        })
20840    }
20841}
20842
20843/// BucketMetadata is an XDR Struct defines as:
20844///
20845/// ```text
20846/// struct BucketMetadata
20847/// {
20848///     // Indicates the protocol version used to create / merge this bucket.
20849///     uint32 ledgerVersion;
20850///
20851///     // reserved for future use
20852///     union switch (int v)
20853///     {
20854///     case 0:
20855///         void;
20856///     case 1:
20857///         BucketListType bucketListType;
20858///     }
20859///     ext;
20860/// };
20861/// ```
20862///
20863#[cfg_attr(feature = "alloc", derive(Default))]
20864#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
20865#[cfg_eval::cfg_eval]
20866#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20867#[cfg_attr(
20868    all(feature = "serde", feature = "alloc"),
20869    serde_with::serde_as,
20870    derive(serde::Serialize, serde::Deserialize),
20871    serde(rename_all = "snake_case")
20872)]
20873#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
20874pub struct BucketMetadata {
20875    pub ledger_version: u32,
20876    pub ext: BucketMetadataExt,
20877}
20878
20879impl ReadXdr for BucketMetadata {
20880    #[cfg(feature = "std")]
20881    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
20882        r.with_limited_depth(|r| {
20883            Ok(Self {
20884                ledger_version: u32::read_xdr(r)?,
20885                ext: BucketMetadataExt::read_xdr(r)?,
20886            })
20887        })
20888    }
20889}
20890
20891impl WriteXdr for BucketMetadata {
20892    #[cfg(feature = "std")]
20893    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
20894        w.with_limited_depth(|w| {
20895            self.ledger_version.write_xdr(w)?;
20896            self.ext.write_xdr(w)?;
20897            Ok(())
20898        })
20899    }
20900}
20901
20902/// BucketEntry is an XDR Union defines as:
20903///
20904/// ```text
20905/// union BucketEntry switch (BucketEntryType type)
20906/// {
20907/// case LIVEENTRY:
20908/// case INITENTRY:
20909///     LedgerEntry liveEntry;
20910///
20911/// case DEADENTRY:
20912///     LedgerKey deadEntry;
20913/// case METAENTRY:
20914///     BucketMetadata metaEntry;
20915/// };
20916/// ```
20917///
20918// union with discriminant BucketEntryType
20919#[cfg_eval::cfg_eval]
20920#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
20921#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
20922#[cfg_attr(
20923    all(feature = "serde", feature = "alloc"),
20924    serde_with::serde_as,
20925    derive(serde::Serialize, serde::Deserialize),
20926    serde(rename_all = "snake_case")
20927)]
20928#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
20929#[allow(clippy::large_enum_variant)]
20930pub enum BucketEntry {
20931    Liveentry(LedgerEntry),
20932    Initentry(LedgerEntry),
20933    Deadentry(LedgerKey),
20934    Metaentry(BucketMetadata),
20935}
20936
20937#[cfg(feature = "alloc")]
20938impl Default for BucketEntry {
20939    fn default() -> Self {
20940        Self::Liveentry(LedgerEntry::default())
20941    }
20942}
20943
20944impl BucketEntry {
20945    pub const VARIANTS: [BucketEntryType; 4] = [
20946        BucketEntryType::Liveentry,
20947        BucketEntryType::Initentry,
20948        BucketEntryType::Deadentry,
20949        BucketEntryType::Metaentry,
20950    ];
20951    pub const VARIANTS_STR: [&'static str; 4] =
20952        ["Liveentry", "Initentry", "Deadentry", "Metaentry"];
20953
20954    #[must_use]
20955    pub const fn name(&self) -> &'static str {
20956        match self {
20957            Self::Liveentry(_) => "Liveentry",
20958            Self::Initentry(_) => "Initentry",
20959            Self::Deadentry(_) => "Deadentry",
20960            Self::Metaentry(_) => "Metaentry",
20961        }
20962    }
20963
20964    #[must_use]
20965    pub const fn discriminant(&self) -> BucketEntryType {
20966        #[allow(clippy::match_same_arms)]
20967        match self {
20968            Self::Liveentry(_) => BucketEntryType::Liveentry,
20969            Self::Initentry(_) => BucketEntryType::Initentry,
20970            Self::Deadentry(_) => BucketEntryType::Deadentry,
20971            Self::Metaentry(_) => BucketEntryType::Metaentry,
20972        }
20973    }
20974
20975    #[must_use]
20976    pub const fn variants() -> [BucketEntryType; 4] {
20977        Self::VARIANTS
20978    }
20979}
20980
20981impl Name for BucketEntry {
20982    #[must_use]
20983    fn name(&self) -> &'static str {
20984        Self::name(self)
20985    }
20986}
20987
20988impl Discriminant<BucketEntryType> for BucketEntry {
20989    #[must_use]
20990    fn discriminant(&self) -> BucketEntryType {
20991        Self::discriminant(self)
20992    }
20993}
20994
20995impl Variants<BucketEntryType> for BucketEntry {
20996    fn variants() -> slice::Iter<'static, BucketEntryType> {
20997        Self::VARIANTS.iter()
20998    }
20999}
21000
21001impl Union<BucketEntryType> for BucketEntry {}
21002
21003impl ReadXdr for BucketEntry {
21004    #[cfg(feature = "std")]
21005    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
21006        r.with_limited_depth(|r| {
21007            let dv: BucketEntryType = <BucketEntryType as ReadXdr>::read_xdr(r)?;
21008            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
21009            let v = match dv {
21010                BucketEntryType::Liveentry => Self::Liveentry(LedgerEntry::read_xdr(r)?),
21011                BucketEntryType::Initentry => Self::Initentry(LedgerEntry::read_xdr(r)?),
21012                BucketEntryType::Deadentry => Self::Deadentry(LedgerKey::read_xdr(r)?),
21013                BucketEntryType::Metaentry => Self::Metaentry(BucketMetadata::read_xdr(r)?),
21014                #[allow(unreachable_patterns)]
21015                _ => return Err(Error::Invalid),
21016            };
21017            Ok(v)
21018        })
21019    }
21020}
21021
21022impl WriteXdr for BucketEntry {
21023    #[cfg(feature = "std")]
21024    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
21025        w.with_limited_depth(|w| {
21026            self.discriminant().write_xdr(w)?;
21027            #[allow(clippy::match_same_arms)]
21028            match self {
21029                Self::Liveentry(v) => v.write_xdr(w)?,
21030                Self::Initentry(v) => v.write_xdr(w)?,
21031                Self::Deadentry(v) => v.write_xdr(w)?,
21032                Self::Metaentry(v) => v.write_xdr(w)?,
21033            };
21034            Ok(())
21035        })
21036    }
21037}
21038
21039/// HotArchiveBucketEntry is an XDR Union defines as:
21040///
21041/// ```text
21042/// union HotArchiveBucketEntry switch (HotArchiveBucketEntryType type)
21043/// {
21044/// case HOT_ARCHIVE_ARCHIVED:
21045///     LedgerEntry archivedEntry;
21046///
21047/// case HOT_ARCHIVE_LIVE:
21048///     LedgerKey key;
21049/// case HOT_ARCHIVE_METAENTRY:
21050///     BucketMetadata metaEntry;
21051/// };
21052/// ```
21053///
21054// union with discriminant HotArchiveBucketEntryType
21055#[cfg_eval::cfg_eval]
21056#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
21057#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21058#[cfg_attr(
21059    all(feature = "serde", feature = "alloc"),
21060    serde_with::serde_as,
21061    derive(serde::Serialize, serde::Deserialize),
21062    serde(rename_all = "snake_case")
21063)]
21064#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
21065#[allow(clippy::large_enum_variant)]
21066pub enum HotArchiveBucketEntry {
21067    Archived(LedgerEntry),
21068    Live(LedgerKey),
21069    Metaentry(BucketMetadata),
21070}
21071
21072#[cfg(feature = "alloc")]
21073impl Default for HotArchiveBucketEntry {
21074    fn default() -> Self {
21075        Self::Archived(LedgerEntry::default())
21076    }
21077}
21078
21079impl HotArchiveBucketEntry {
21080    pub const VARIANTS: [HotArchiveBucketEntryType; 3] = [
21081        HotArchiveBucketEntryType::Archived,
21082        HotArchiveBucketEntryType::Live,
21083        HotArchiveBucketEntryType::Metaentry,
21084    ];
21085    pub const VARIANTS_STR: [&'static str; 3] = ["Archived", "Live", "Metaentry"];
21086
21087    #[must_use]
21088    pub const fn name(&self) -> &'static str {
21089        match self {
21090            Self::Archived(_) => "Archived",
21091            Self::Live(_) => "Live",
21092            Self::Metaentry(_) => "Metaentry",
21093        }
21094    }
21095
21096    #[must_use]
21097    pub const fn discriminant(&self) -> HotArchiveBucketEntryType {
21098        #[allow(clippy::match_same_arms)]
21099        match self {
21100            Self::Archived(_) => HotArchiveBucketEntryType::Archived,
21101            Self::Live(_) => HotArchiveBucketEntryType::Live,
21102            Self::Metaentry(_) => HotArchiveBucketEntryType::Metaentry,
21103        }
21104    }
21105
21106    #[must_use]
21107    pub const fn variants() -> [HotArchiveBucketEntryType; 3] {
21108        Self::VARIANTS
21109    }
21110}
21111
21112impl Name for HotArchiveBucketEntry {
21113    #[must_use]
21114    fn name(&self) -> &'static str {
21115        Self::name(self)
21116    }
21117}
21118
21119impl Discriminant<HotArchiveBucketEntryType> for HotArchiveBucketEntry {
21120    #[must_use]
21121    fn discriminant(&self) -> HotArchiveBucketEntryType {
21122        Self::discriminant(self)
21123    }
21124}
21125
21126impl Variants<HotArchiveBucketEntryType> for HotArchiveBucketEntry {
21127    fn variants() -> slice::Iter<'static, HotArchiveBucketEntryType> {
21128        Self::VARIANTS.iter()
21129    }
21130}
21131
21132impl Union<HotArchiveBucketEntryType> for HotArchiveBucketEntry {}
21133
21134impl ReadXdr for HotArchiveBucketEntry {
21135    #[cfg(feature = "std")]
21136    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
21137        r.with_limited_depth(|r| {
21138            let dv: HotArchiveBucketEntryType =
21139                <HotArchiveBucketEntryType as ReadXdr>::read_xdr(r)?;
21140            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
21141            let v = match dv {
21142                HotArchiveBucketEntryType::Archived => Self::Archived(LedgerEntry::read_xdr(r)?),
21143                HotArchiveBucketEntryType::Live => Self::Live(LedgerKey::read_xdr(r)?),
21144                HotArchiveBucketEntryType::Metaentry => {
21145                    Self::Metaentry(BucketMetadata::read_xdr(r)?)
21146                }
21147                #[allow(unreachable_patterns)]
21148                _ => return Err(Error::Invalid),
21149            };
21150            Ok(v)
21151        })
21152    }
21153}
21154
21155impl WriteXdr for HotArchiveBucketEntry {
21156    #[cfg(feature = "std")]
21157    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
21158        w.with_limited_depth(|w| {
21159            self.discriminant().write_xdr(w)?;
21160            #[allow(clippy::match_same_arms)]
21161            match self {
21162                Self::Archived(v) => v.write_xdr(w)?,
21163                Self::Live(v) => v.write_xdr(w)?,
21164                Self::Metaentry(v) => v.write_xdr(w)?,
21165            };
21166            Ok(())
21167        })
21168    }
21169}
21170
21171/// UpgradeType is an XDR Typedef defines as:
21172///
21173/// ```text
21174/// typedef opaque UpgradeType<128>;
21175/// ```
21176///
21177#[cfg_eval::cfg_eval]
21178#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
21179#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21180#[cfg_attr(
21181    all(feature = "serde", feature = "alloc"),
21182    serde_with::serde_as,
21183    derive(serde::Serialize, serde::Deserialize),
21184    serde(rename_all = "snake_case")
21185)]
21186#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
21187#[derive(Debug)]
21188pub struct UpgradeType(pub BytesM<128>);
21189
21190impl From<UpgradeType> for BytesM<128> {
21191    #[must_use]
21192    fn from(x: UpgradeType) -> Self {
21193        x.0
21194    }
21195}
21196
21197impl From<BytesM<128>> for UpgradeType {
21198    #[must_use]
21199    fn from(x: BytesM<128>) -> Self {
21200        UpgradeType(x)
21201    }
21202}
21203
21204impl AsRef<BytesM<128>> for UpgradeType {
21205    #[must_use]
21206    fn as_ref(&self) -> &BytesM<128> {
21207        &self.0
21208    }
21209}
21210
21211impl ReadXdr for UpgradeType {
21212    #[cfg(feature = "std")]
21213    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
21214        r.with_limited_depth(|r| {
21215            let i = BytesM::<128>::read_xdr(r)?;
21216            let v = UpgradeType(i);
21217            Ok(v)
21218        })
21219    }
21220}
21221
21222impl WriteXdr for UpgradeType {
21223    #[cfg(feature = "std")]
21224    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
21225        w.with_limited_depth(|w| self.0.write_xdr(w))
21226    }
21227}
21228
21229impl Deref for UpgradeType {
21230    type Target = BytesM<128>;
21231    fn deref(&self) -> &Self::Target {
21232        &self.0
21233    }
21234}
21235
21236impl From<UpgradeType> for Vec<u8> {
21237    #[must_use]
21238    fn from(x: UpgradeType) -> Self {
21239        x.0 .0
21240    }
21241}
21242
21243impl TryFrom<Vec<u8>> for UpgradeType {
21244    type Error = Error;
21245    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
21246        Ok(UpgradeType(x.try_into()?))
21247    }
21248}
21249
21250#[cfg(feature = "alloc")]
21251impl TryFrom<&Vec<u8>> for UpgradeType {
21252    type Error = Error;
21253    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
21254        Ok(UpgradeType(x.try_into()?))
21255    }
21256}
21257
21258impl AsRef<Vec<u8>> for UpgradeType {
21259    #[must_use]
21260    fn as_ref(&self) -> &Vec<u8> {
21261        &self.0 .0
21262    }
21263}
21264
21265impl AsRef<[u8]> for UpgradeType {
21266    #[cfg(feature = "alloc")]
21267    #[must_use]
21268    fn as_ref(&self) -> &[u8] {
21269        &self.0 .0
21270    }
21271    #[cfg(not(feature = "alloc"))]
21272    #[must_use]
21273    fn as_ref(&self) -> &[u8] {
21274        self.0 .0
21275    }
21276}
21277
21278/// StellarValueType is an XDR Enum defines as:
21279///
21280/// ```text
21281/// enum StellarValueType
21282/// {
21283///     STELLAR_VALUE_BASIC = 0,
21284///     STELLAR_VALUE_SIGNED = 1
21285/// };
21286/// ```
21287///
21288// enum
21289#[cfg_attr(feature = "alloc", derive(Default))]
21290#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
21291#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21292#[cfg_attr(
21293    all(feature = "serde", feature = "alloc"),
21294    derive(serde::Serialize, serde::Deserialize),
21295    serde(rename_all = "snake_case")
21296)]
21297#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
21298#[repr(i32)]
21299pub enum StellarValueType {
21300    #[cfg_attr(feature = "alloc", default)]
21301    Basic = 0,
21302    Signed = 1,
21303}
21304
21305impl StellarValueType {
21306    pub const VARIANTS: [StellarValueType; 2] = [StellarValueType::Basic, StellarValueType::Signed];
21307    pub const VARIANTS_STR: [&'static str; 2] = ["Basic", "Signed"];
21308
21309    #[must_use]
21310    pub const fn name(&self) -> &'static str {
21311        match self {
21312            Self::Basic => "Basic",
21313            Self::Signed => "Signed",
21314        }
21315    }
21316
21317    #[must_use]
21318    pub const fn variants() -> [StellarValueType; 2] {
21319        Self::VARIANTS
21320    }
21321}
21322
21323impl Name for StellarValueType {
21324    #[must_use]
21325    fn name(&self) -> &'static str {
21326        Self::name(self)
21327    }
21328}
21329
21330impl Variants<StellarValueType> for StellarValueType {
21331    fn variants() -> slice::Iter<'static, StellarValueType> {
21332        Self::VARIANTS.iter()
21333    }
21334}
21335
21336impl Enum for StellarValueType {}
21337
21338impl fmt::Display for StellarValueType {
21339    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21340        f.write_str(self.name())
21341    }
21342}
21343
21344impl TryFrom<i32> for StellarValueType {
21345    type Error = Error;
21346
21347    fn try_from(i: i32) -> Result<Self, Error> {
21348        let e = match i {
21349            0 => StellarValueType::Basic,
21350            1 => StellarValueType::Signed,
21351            #[allow(unreachable_patterns)]
21352            _ => return Err(Error::Invalid),
21353        };
21354        Ok(e)
21355    }
21356}
21357
21358impl From<StellarValueType> for i32 {
21359    #[must_use]
21360    fn from(e: StellarValueType) -> Self {
21361        e as Self
21362    }
21363}
21364
21365impl ReadXdr for StellarValueType {
21366    #[cfg(feature = "std")]
21367    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
21368        r.with_limited_depth(|r| {
21369            let e = i32::read_xdr(r)?;
21370            let v: Self = e.try_into()?;
21371            Ok(v)
21372        })
21373    }
21374}
21375
21376impl WriteXdr for StellarValueType {
21377    #[cfg(feature = "std")]
21378    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
21379        w.with_limited_depth(|w| {
21380            let i: i32 = (*self).into();
21381            i.write_xdr(w)
21382        })
21383    }
21384}
21385
21386/// LedgerCloseValueSignature is an XDR Struct defines as:
21387///
21388/// ```text
21389/// struct LedgerCloseValueSignature
21390/// {
21391///     NodeID nodeID;       // which node introduced the value
21392///     Signature signature; // nodeID's signature
21393/// };
21394/// ```
21395///
21396#[cfg_attr(feature = "alloc", derive(Default))]
21397#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
21398#[cfg_eval::cfg_eval]
21399#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21400#[cfg_attr(
21401    all(feature = "serde", feature = "alloc"),
21402    serde_with::serde_as,
21403    derive(serde::Serialize, serde::Deserialize),
21404    serde(rename_all = "snake_case")
21405)]
21406#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
21407pub struct LedgerCloseValueSignature {
21408    pub node_id: NodeId,
21409    pub signature: Signature,
21410}
21411
21412impl ReadXdr for LedgerCloseValueSignature {
21413    #[cfg(feature = "std")]
21414    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
21415        r.with_limited_depth(|r| {
21416            Ok(Self {
21417                node_id: NodeId::read_xdr(r)?,
21418                signature: Signature::read_xdr(r)?,
21419            })
21420        })
21421    }
21422}
21423
21424impl WriteXdr for LedgerCloseValueSignature {
21425    #[cfg(feature = "std")]
21426    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
21427        w.with_limited_depth(|w| {
21428            self.node_id.write_xdr(w)?;
21429            self.signature.write_xdr(w)?;
21430            Ok(())
21431        })
21432    }
21433}
21434
21435/// StellarValueExt is an XDR NestedUnion defines as:
21436///
21437/// ```text
21438/// union switch (StellarValueType v)
21439///     {
21440///     case STELLAR_VALUE_BASIC:
21441///         void;
21442///     case STELLAR_VALUE_SIGNED:
21443///         LedgerCloseValueSignature lcValueSignature;
21444///     }
21445/// ```
21446///
21447// union with discriminant StellarValueType
21448#[cfg_eval::cfg_eval]
21449#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
21450#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21451#[cfg_attr(
21452    all(feature = "serde", feature = "alloc"),
21453    serde_with::serde_as,
21454    derive(serde::Serialize, serde::Deserialize),
21455    serde(rename_all = "snake_case")
21456)]
21457#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
21458#[allow(clippy::large_enum_variant)]
21459pub enum StellarValueExt {
21460    Basic,
21461    Signed(LedgerCloseValueSignature),
21462}
21463
21464#[cfg(feature = "alloc")]
21465impl Default for StellarValueExt {
21466    fn default() -> Self {
21467        Self::Basic
21468    }
21469}
21470
21471impl StellarValueExt {
21472    pub const VARIANTS: [StellarValueType; 2] = [StellarValueType::Basic, StellarValueType::Signed];
21473    pub const VARIANTS_STR: [&'static str; 2] = ["Basic", "Signed"];
21474
21475    #[must_use]
21476    pub const fn name(&self) -> &'static str {
21477        match self {
21478            Self::Basic => "Basic",
21479            Self::Signed(_) => "Signed",
21480        }
21481    }
21482
21483    #[must_use]
21484    pub const fn discriminant(&self) -> StellarValueType {
21485        #[allow(clippy::match_same_arms)]
21486        match self {
21487            Self::Basic => StellarValueType::Basic,
21488            Self::Signed(_) => StellarValueType::Signed,
21489        }
21490    }
21491
21492    #[must_use]
21493    pub const fn variants() -> [StellarValueType; 2] {
21494        Self::VARIANTS
21495    }
21496}
21497
21498impl Name for StellarValueExt {
21499    #[must_use]
21500    fn name(&self) -> &'static str {
21501        Self::name(self)
21502    }
21503}
21504
21505impl Discriminant<StellarValueType> for StellarValueExt {
21506    #[must_use]
21507    fn discriminant(&self) -> StellarValueType {
21508        Self::discriminant(self)
21509    }
21510}
21511
21512impl Variants<StellarValueType> for StellarValueExt {
21513    fn variants() -> slice::Iter<'static, StellarValueType> {
21514        Self::VARIANTS.iter()
21515    }
21516}
21517
21518impl Union<StellarValueType> for StellarValueExt {}
21519
21520impl ReadXdr for StellarValueExt {
21521    #[cfg(feature = "std")]
21522    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
21523        r.with_limited_depth(|r| {
21524            let dv: StellarValueType = <StellarValueType as ReadXdr>::read_xdr(r)?;
21525            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
21526            let v = match dv {
21527                StellarValueType::Basic => Self::Basic,
21528                StellarValueType::Signed => Self::Signed(LedgerCloseValueSignature::read_xdr(r)?),
21529                #[allow(unreachable_patterns)]
21530                _ => return Err(Error::Invalid),
21531            };
21532            Ok(v)
21533        })
21534    }
21535}
21536
21537impl WriteXdr for StellarValueExt {
21538    #[cfg(feature = "std")]
21539    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
21540        w.with_limited_depth(|w| {
21541            self.discriminant().write_xdr(w)?;
21542            #[allow(clippy::match_same_arms)]
21543            match self {
21544                Self::Basic => ().write_xdr(w)?,
21545                Self::Signed(v) => v.write_xdr(w)?,
21546            };
21547            Ok(())
21548        })
21549    }
21550}
21551
21552/// StellarValue is an XDR Struct defines as:
21553///
21554/// ```text
21555/// struct StellarValue
21556/// {
21557///     Hash txSetHash;      // transaction set to apply to previous ledger
21558///     TimePoint closeTime; // network close time
21559///
21560///     // upgrades to apply to the previous ledger (usually empty)
21561///     // this is a vector of encoded 'LedgerUpgrade' so that nodes can drop
21562///     // unknown steps during consensus if needed.
21563///     // see notes below on 'LedgerUpgrade' for more detail
21564///     // max size is dictated by number of upgrade types (+ room for future)
21565///     UpgradeType upgrades<6>;
21566///
21567///     // reserved for future use
21568///     union switch (StellarValueType v)
21569///     {
21570///     case STELLAR_VALUE_BASIC:
21571///         void;
21572///     case STELLAR_VALUE_SIGNED:
21573///         LedgerCloseValueSignature lcValueSignature;
21574///     }
21575///     ext;
21576/// };
21577/// ```
21578///
21579#[cfg_attr(feature = "alloc", derive(Default))]
21580#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
21581#[cfg_eval::cfg_eval]
21582#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21583#[cfg_attr(
21584    all(feature = "serde", feature = "alloc"),
21585    serde_with::serde_as,
21586    derive(serde::Serialize, serde::Deserialize),
21587    serde(rename_all = "snake_case")
21588)]
21589#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
21590pub struct StellarValue {
21591    pub tx_set_hash: Hash,
21592    pub close_time: TimePoint,
21593    pub upgrades: VecM<UpgradeType, 6>,
21594    pub ext: StellarValueExt,
21595}
21596
21597impl ReadXdr for StellarValue {
21598    #[cfg(feature = "std")]
21599    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
21600        r.with_limited_depth(|r| {
21601            Ok(Self {
21602                tx_set_hash: Hash::read_xdr(r)?,
21603                close_time: TimePoint::read_xdr(r)?,
21604                upgrades: VecM::<UpgradeType, 6>::read_xdr(r)?,
21605                ext: StellarValueExt::read_xdr(r)?,
21606            })
21607        })
21608    }
21609}
21610
21611impl WriteXdr for StellarValue {
21612    #[cfg(feature = "std")]
21613    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
21614        w.with_limited_depth(|w| {
21615            self.tx_set_hash.write_xdr(w)?;
21616            self.close_time.write_xdr(w)?;
21617            self.upgrades.write_xdr(w)?;
21618            self.ext.write_xdr(w)?;
21619            Ok(())
21620        })
21621    }
21622}
21623
21624/// MaskLedgerHeaderFlags is an XDR Const defines as:
21625///
21626/// ```text
21627/// const MASK_LEDGER_HEADER_FLAGS = 0x7;
21628/// ```
21629///
21630pub const MASK_LEDGER_HEADER_FLAGS: u64 = 0x7;
21631
21632/// LedgerHeaderFlags is an XDR Enum defines as:
21633///
21634/// ```text
21635/// enum LedgerHeaderFlags
21636/// {
21637///     DISABLE_LIQUIDITY_POOL_TRADING_FLAG = 0x1,
21638///     DISABLE_LIQUIDITY_POOL_DEPOSIT_FLAG = 0x2,
21639///     DISABLE_LIQUIDITY_POOL_WITHDRAWAL_FLAG = 0x4
21640/// };
21641/// ```
21642///
21643// enum
21644#[cfg_attr(feature = "alloc", derive(Default))]
21645#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
21646#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21647#[cfg_attr(
21648    all(feature = "serde", feature = "alloc"),
21649    derive(serde::Serialize, serde::Deserialize),
21650    serde(rename_all = "snake_case")
21651)]
21652#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
21653#[repr(i32)]
21654pub enum LedgerHeaderFlags {
21655    #[cfg_attr(feature = "alloc", default)]
21656    TradingFlag = 1,
21657    DepositFlag = 2,
21658    WithdrawalFlag = 4,
21659}
21660
21661impl LedgerHeaderFlags {
21662    pub const VARIANTS: [LedgerHeaderFlags; 3] = [
21663        LedgerHeaderFlags::TradingFlag,
21664        LedgerHeaderFlags::DepositFlag,
21665        LedgerHeaderFlags::WithdrawalFlag,
21666    ];
21667    pub const VARIANTS_STR: [&'static str; 3] = ["TradingFlag", "DepositFlag", "WithdrawalFlag"];
21668
21669    #[must_use]
21670    pub const fn name(&self) -> &'static str {
21671        match self {
21672            Self::TradingFlag => "TradingFlag",
21673            Self::DepositFlag => "DepositFlag",
21674            Self::WithdrawalFlag => "WithdrawalFlag",
21675        }
21676    }
21677
21678    #[must_use]
21679    pub const fn variants() -> [LedgerHeaderFlags; 3] {
21680        Self::VARIANTS
21681    }
21682}
21683
21684impl Name for LedgerHeaderFlags {
21685    #[must_use]
21686    fn name(&self) -> &'static str {
21687        Self::name(self)
21688    }
21689}
21690
21691impl Variants<LedgerHeaderFlags> for LedgerHeaderFlags {
21692    fn variants() -> slice::Iter<'static, LedgerHeaderFlags> {
21693        Self::VARIANTS.iter()
21694    }
21695}
21696
21697impl Enum for LedgerHeaderFlags {}
21698
21699impl fmt::Display for LedgerHeaderFlags {
21700    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21701        f.write_str(self.name())
21702    }
21703}
21704
21705impl TryFrom<i32> for LedgerHeaderFlags {
21706    type Error = Error;
21707
21708    fn try_from(i: i32) -> Result<Self, Error> {
21709        let e = match i {
21710            1 => LedgerHeaderFlags::TradingFlag,
21711            2 => LedgerHeaderFlags::DepositFlag,
21712            4 => LedgerHeaderFlags::WithdrawalFlag,
21713            #[allow(unreachable_patterns)]
21714            _ => return Err(Error::Invalid),
21715        };
21716        Ok(e)
21717    }
21718}
21719
21720impl From<LedgerHeaderFlags> for i32 {
21721    #[must_use]
21722    fn from(e: LedgerHeaderFlags) -> Self {
21723        e as Self
21724    }
21725}
21726
21727impl ReadXdr for LedgerHeaderFlags {
21728    #[cfg(feature = "std")]
21729    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
21730        r.with_limited_depth(|r| {
21731            let e = i32::read_xdr(r)?;
21732            let v: Self = e.try_into()?;
21733            Ok(v)
21734        })
21735    }
21736}
21737
21738impl WriteXdr for LedgerHeaderFlags {
21739    #[cfg(feature = "std")]
21740    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
21741        w.with_limited_depth(|w| {
21742            let i: i32 = (*self).into();
21743            i.write_xdr(w)
21744        })
21745    }
21746}
21747
21748/// LedgerHeaderExtensionV1Ext is an XDR NestedUnion defines as:
21749///
21750/// ```text
21751/// union switch (int v)
21752///     {
21753///     case 0:
21754///         void;
21755///     }
21756/// ```
21757///
21758// union with discriminant i32
21759#[cfg_eval::cfg_eval]
21760#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
21761#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21762#[cfg_attr(
21763    all(feature = "serde", feature = "alloc"),
21764    serde_with::serde_as,
21765    derive(serde::Serialize, serde::Deserialize),
21766    serde(rename_all = "snake_case")
21767)]
21768#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
21769#[allow(clippy::large_enum_variant)]
21770pub enum LedgerHeaderExtensionV1Ext {
21771    V0,
21772}
21773
21774#[cfg(feature = "alloc")]
21775impl Default for LedgerHeaderExtensionV1Ext {
21776    fn default() -> Self {
21777        Self::V0
21778    }
21779}
21780
21781impl LedgerHeaderExtensionV1Ext {
21782    pub const VARIANTS: [i32; 1] = [0];
21783    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
21784
21785    #[must_use]
21786    pub const fn name(&self) -> &'static str {
21787        match self {
21788            Self::V0 => "V0",
21789        }
21790    }
21791
21792    #[must_use]
21793    pub const fn discriminant(&self) -> i32 {
21794        #[allow(clippy::match_same_arms)]
21795        match self {
21796            Self::V0 => 0,
21797        }
21798    }
21799
21800    #[must_use]
21801    pub const fn variants() -> [i32; 1] {
21802        Self::VARIANTS
21803    }
21804}
21805
21806impl Name for LedgerHeaderExtensionV1Ext {
21807    #[must_use]
21808    fn name(&self) -> &'static str {
21809        Self::name(self)
21810    }
21811}
21812
21813impl Discriminant<i32> for LedgerHeaderExtensionV1Ext {
21814    #[must_use]
21815    fn discriminant(&self) -> i32 {
21816        Self::discriminant(self)
21817    }
21818}
21819
21820impl Variants<i32> for LedgerHeaderExtensionV1Ext {
21821    fn variants() -> slice::Iter<'static, i32> {
21822        Self::VARIANTS.iter()
21823    }
21824}
21825
21826impl Union<i32> for LedgerHeaderExtensionV1Ext {}
21827
21828impl ReadXdr for LedgerHeaderExtensionV1Ext {
21829    #[cfg(feature = "std")]
21830    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
21831        r.with_limited_depth(|r| {
21832            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
21833            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
21834            let v = match dv {
21835                0 => Self::V0,
21836                #[allow(unreachable_patterns)]
21837                _ => return Err(Error::Invalid),
21838            };
21839            Ok(v)
21840        })
21841    }
21842}
21843
21844impl WriteXdr for LedgerHeaderExtensionV1Ext {
21845    #[cfg(feature = "std")]
21846    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
21847        w.with_limited_depth(|w| {
21848            self.discriminant().write_xdr(w)?;
21849            #[allow(clippy::match_same_arms)]
21850            match self {
21851                Self::V0 => ().write_xdr(w)?,
21852            };
21853            Ok(())
21854        })
21855    }
21856}
21857
21858/// LedgerHeaderExtensionV1 is an XDR Struct defines as:
21859///
21860/// ```text
21861/// struct LedgerHeaderExtensionV1
21862/// {
21863///     uint32 flags; // LedgerHeaderFlags
21864///
21865///     union switch (int v)
21866///     {
21867///     case 0:
21868///         void;
21869///     }
21870///     ext;
21871/// };
21872/// ```
21873///
21874#[cfg_attr(feature = "alloc", derive(Default))]
21875#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
21876#[cfg_eval::cfg_eval]
21877#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21878#[cfg_attr(
21879    all(feature = "serde", feature = "alloc"),
21880    serde_with::serde_as,
21881    derive(serde::Serialize, serde::Deserialize),
21882    serde(rename_all = "snake_case")
21883)]
21884#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
21885pub struct LedgerHeaderExtensionV1 {
21886    pub flags: u32,
21887    pub ext: LedgerHeaderExtensionV1Ext,
21888}
21889
21890impl ReadXdr for LedgerHeaderExtensionV1 {
21891    #[cfg(feature = "std")]
21892    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
21893        r.with_limited_depth(|r| {
21894            Ok(Self {
21895                flags: u32::read_xdr(r)?,
21896                ext: LedgerHeaderExtensionV1Ext::read_xdr(r)?,
21897            })
21898        })
21899    }
21900}
21901
21902impl WriteXdr for LedgerHeaderExtensionV1 {
21903    #[cfg(feature = "std")]
21904    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
21905        w.with_limited_depth(|w| {
21906            self.flags.write_xdr(w)?;
21907            self.ext.write_xdr(w)?;
21908            Ok(())
21909        })
21910    }
21911}
21912
21913/// LedgerHeaderExt is an XDR NestedUnion defines as:
21914///
21915/// ```text
21916/// union switch (int v)
21917///     {
21918///     case 0:
21919///         void;
21920///     case 1:
21921///         LedgerHeaderExtensionV1 v1;
21922///     }
21923/// ```
21924///
21925// union with discriminant i32
21926#[cfg_eval::cfg_eval]
21927#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
21928#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
21929#[cfg_attr(
21930    all(feature = "serde", feature = "alloc"),
21931    serde_with::serde_as,
21932    derive(serde::Serialize, serde::Deserialize),
21933    serde(rename_all = "snake_case")
21934)]
21935#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
21936#[allow(clippy::large_enum_variant)]
21937pub enum LedgerHeaderExt {
21938    V0,
21939    V1(LedgerHeaderExtensionV1),
21940}
21941
21942#[cfg(feature = "alloc")]
21943impl Default for LedgerHeaderExt {
21944    fn default() -> Self {
21945        Self::V0
21946    }
21947}
21948
21949impl LedgerHeaderExt {
21950    pub const VARIANTS: [i32; 2] = [0, 1];
21951    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
21952
21953    #[must_use]
21954    pub const fn name(&self) -> &'static str {
21955        match self {
21956            Self::V0 => "V0",
21957            Self::V1(_) => "V1",
21958        }
21959    }
21960
21961    #[must_use]
21962    pub const fn discriminant(&self) -> i32 {
21963        #[allow(clippy::match_same_arms)]
21964        match self {
21965            Self::V0 => 0,
21966            Self::V1(_) => 1,
21967        }
21968    }
21969
21970    #[must_use]
21971    pub const fn variants() -> [i32; 2] {
21972        Self::VARIANTS
21973    }
21974}
21975
21976impl Name for LedgerHeaderExt {
21977    #[must_use]
21978    fn name(&self) -> &'static str {
21979        Self::name(self)
21980    }
21981}
21982
21983impl Discriminant<i32> for LedgerHeaderExt {
21984    #[must_use]
21985    fn discriminant(&self) -> i32 {
21986        Self::discriminant(self)
21987    }
21988}
21989
21990impl Variants<i32> for LedgerHeaderExt {
21991    fn variants() -> slice::Iter<'static, i32> {
21992        Self::VARIANTS.iter()
21993    }
21994}
21995
21996impl Union<i32> for LedgerHeaderExt {}
21997
21998impl ReadXdr for LedgerHeaderExt {
21999    #[cfg(feature = "std")]
22000    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
22001        r.with_limited_depth(|r| {
22002            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
22003            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
22004            let v = match dv {
22005                0 => Self::V0,
22006                1 => Self::V1(LedgerHeaderExtensionV1::read_xdr(r)?),
22007                #[allow(unreachable_patterns)]
22008                _ => return Err(Error::Invalid),
22009            };
22010            Ok(v)
22011        })
22012    }
22013}
22014
22015impl WriteXdr for LedgerHeaderExt {
22016    #[cfg(feature = "std")]
22017    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
22018        w.with_limited_depth(|w| {
22019            self.discriminant().write_xdr(w)?;
22020            #[allow(clippy::match_same_arms)]
22021            match self {
22022                Self::V0 => ().write_xdr(w)?,
22023                Self::V1(v) => v.write_xdr(w)?,
22024            };
22025            Ok(())
22026        })
22027    }
22028}
22029
22030/// LedgerHeader is an XDR Struct defines as:
22031///
22032/// ```text
22033/// struct LedgerHeader
22034/// {
22035///     uint32 ledgerVersion;    // the protocol version of the ledger
22036///     Hash previousLedgerHash; // hash of the previous ledger header
22037///     StellarValue scpValue;   // what consensus agreed to
22038///     Hash txSetResultHash;    // the TransactionResultSet that led to this ledger
22039///     Hash bucketListHash;     // hash of the ledger state
22040///
22041///     uint32 ledgerSeq; // sequence number of this ledger
22042///
22043///     int64 totalCoins; // total number of stroops in existence.
22044///                       // 10,000,000 stroops in 1 XLM
22045///
22046///     int64 feePool;       // fees burned since last inflation run
22047///     uint32 inflationSeq; // inflation sequence number
22048///
22049///     uint64 idPool; // last used global ID, used for generating objects
22050///
22051///     uint32 baseFee;     // base fee per operation in stroops
22052///     uint32 baseReserve; // account base reserve in stroops
22053///
22054///     uint32 maxTxSetSize; // maximum size a transaction set can be
22055///
22056///     Hash skipList[4]; // hashes of ledgers in the past. allows you to jump back
22057///                       // in time without walking the chain back ledger by ledger
22058///                       // each slot contains the oldest ledger that is mod of
22059///                       // either 50  5000  50000 or 500000 depending on index
22060///                       // skipList[0] mod(50), skipList[1] mod(5000), etc
22061///
22062///     // reserved for future use
22063///     union switch (int v)
22064///     {
22065///     case 0:
22066///         void;
22067///     case 1:
22068///         LedgerHeaderExtensionV1 v1;
22069///     }
22070///     ext;
22071/// };
22072/// ```
22073///
22074#[cfg_attr(feature = "alloc", derive(Default))]
22075#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
22076#[cfg_eval::cfg_eval]
22077#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22078#[cfg_attr(
22079    all(feature = "serde", feature = "alloc"),
22080    serde_with::serde_as,
22081    derive(serde::Serialize, serde::Deserialize),
22082    serde(rename_all = "snake_case")
22083)]
22084#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
22085pub struct LedgerHeader {
22086    pub ledger_version: u32,
22087    pub previous_ledger_hash: Hash,
22088    pub scp_value: StellarValue,
22089    pub tx_set_result_hash: Hash,
22090    pub bucket_list_hash: Hash,
22091    pub ledger_seq: u32,
22092    #[cfg_attr(
22093        all(feature = "serde", feature = "alloc"),
22094        serde_as(as = "NumberOrString")
22095    )]
22096    pub total_coins: i64,
22097    #[cfg_attr(
22098        all(feature = "serde", feature = "alloc"),
22099        serde_as(as = "NumberOrString")
22100    )]
22101    pub fee_pool: i64,
22102    pub inflation_seq: u32,
22103    #[cfg_attr(
22104        all(feature = "serde", feature = "alloc"),
22105        serde_as(as = "NumberOrString")
22106    )]
22107    pub id_pool: u64,
22108    pub base_fee: u32,
22109    pub base_reserve: u32,
22110    pub max_tx_set_size: u32,
22111    pub skip_list: [Hash; 4],
22112    pub ext: LedgerHeaderExt,
22113}
22114
22115impl ReadXdr for LedgerHeader {
22116    #[cfg(feature = "std")]
22117    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
22118        r.with_limited_depth(|r| {
22119            Ok(Self {
22120                ledger_version: u32::read_xdr(r)?,
22121                previous_ledger_hash: Hash::read_xdr(r)?,
22122                scp_value: StellarValue::read_xdr(r)?,
22123                tx_set_result_hash: Hash::read_xdr(r)?,
22124                bucket_list_hash: Hash::read_xdr(r)?,
22125                ledger_seq: u32::read_xdr(r)?,
22126                total_coins: i64::read_xdr(r)?,
22127                fee_pool: i64::read_xdr(r)?,
22128                inflation_seq: u32::read_xdr(r)?,
22129                id_pool: u64::read_xdr(r)?,
22130                base_fee: u32::read_xdr(r)?,
22131                base_reserve: u32::read_xdr(r)?,
22132                max_tx_set_size: u32::read_xdr(r)?,
22133                skip_list: <[Hash; 4]>::read_xdr(r)?,
22134                ext: LedgerHeaderExt::read_xdr(r)?,
22135            })
22136        })
22137    }
22138}
22139
22140impl WriteXdr for LedgerHeader {
22141    #[cfg(feature = "std")]
22142    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
22143        w.with_limited_depth(|w| {
22144            self.ledger_version.write_xdr(w)?;
22145            self.previous_ledger_hash.write_xdr(w)?;
22146            self.scp_value.write_xdr(w)?;
22147            self.tx_set_result_hash.write_xdr(w)?;
22148            self.bucket_list_hash.write_xdr(w)?;
22149            self.ledger_seq.write_xdr(w)?;
22150            self.total_coins.write_xdr(w)?;
22151            self.fee_pool.write_xdr(w)?;
22152            self.inflation_seq.write_xdr(w)?;
22153            self.id_pool.write_xdr(w)?;
22154            self.base_fee.write_xdr(w)?;
22155            self.base_reserve.write_xdr(w)?;
22156            self.max_tx_set_size.write_xdr(w)?;
22157            self.skip_list.write_xdr(w)?;
22158            self.ext.write_xdr(w)?;
22159            Ok(())
22160        })
22161    }
22162}
22163
22164/// LedgerUpgradeType is an XDR Enum defines as:
22165///
22166/// ```text
22167/// enum LedgerUpgradeType
22168/// {
22169///     LEDGER_UPGRADE_VERSION = 1,
22170///     LEDGER_UPGRADE_BASE_FEE = 2,
22171///     LEDGER_UPGRADE_MAX_TX_SET_SIZE = 3,
22172///     LEDGER_UPGRADE_BASE_RESERVE = 4,
22173///     LEDGER_UPGRADE_FLAGS = 5,
22174///     LEDGER_UPGRADE_CONFIG = 6,
22175///     LEDGER_UPGRADE_MAX_SOROBAN_TX_SET_SIZE = 7
22176/// };
22177/// ```
22178///
22179// enum
22180#[cfg_attr(feature = "alloc", derive(Default))]
22181#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
22182#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22183#[cfg_attr(
22184    all(feature = "serde", feature = "alloc"),
22185    derive(serde::Serialize, serde::Deserialize),
22186    serde(rename_all = "snake_case")
22187)]
22188#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
22189#[repr(i32)]
22190pub enum LedgerUpgradeType {
22191    #[cfg_attr(feature = "alloc", default)]
22192    Version = 1,
22193    BaseFee = 2,
22194    MaxTxSetSize = 3,
22195    BaseReserve = 4,
22196    Flags = 5,
22197    Config = 6,
22198    MaxSorobanTxSetSize = 7,
22199}
22200
22201impl LedgerUpgradeType {
22202    pub const VARIANTS: [LedgerUpgradeType; 7] = [
22203        LedgerUpgradeType::Version,
22204        LedgerUpgradeType::BaseFee,
22205        LedgerUpgradeType::MaxTxSetSize,
22206        LedgerUpgradeType::BaseReserve,
22207        LedgerUpgradeType::Flags,
22208        LedgerUpgradeType::Config,
22209        LedgerUpgradeType::MaxSorobanTxSetSize,
22210    ];
22211    pub const VARIANTS_STR: [&'static str; 7] = [
22212        "Version",
22213        "BaseFee",
22214        "MaxTxSetSize",
22215        "BaseReserve",
22216        "Flags",
22217        "Config",
22218        "MaxSorobanTxSetSize",
22219    ];
22220
22221    #[must_use]
22222    pub const fn name(&self) -> &'static str {
22223        match self {
22224            Self::Version => "Version",
22225            Self::BaseFee => "BaseFee",
22226            Self::MaxTxSetSize => "MaxTxSetSize",
22227            Self::BaseReserve => "BaseReserve",
22228            Self::Flags => "Flags",
22229            Self::Config => "Config",
22230            Self::MaxSorobanTxSetSize => "MaxSorobanTxSetSize",
22231        }
22232    }
22233
22234    #[must_use]
22235    pub const fn variants() -> [LedgerUpgradeType; 7] {
22236        Self::VARIANTS
22237    }
22238}
22239
22240impl Name for LedgerUpgradeType {
22241    #[must_use]
22242    fn name(&self) -> &'static str {
22243        Self::name(self)
22244    }
22245}
22246
22247impl Variants<LedgerUpgradeType> for LedgerUpgradeType {
22248    fn variants() -> slice::Iter<'static, LedgerUpgradeType> {
22249        Self::VARIANTS.iter()
22250    }
22251}
22252
22253impl Enum for LedgerUpgradeType {}
22254
22255impl fmt::Display for LedgerUpgradeType {
22256    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22257        f.write_str(self.name())
22258    }
22259}
22260
22261impl TryFrom<i32> for LedgerUpgradeType {
22262    type Error = Error;
22263
22264    fn try_from(i: i32) -> Result<Self, Error> {
22265        let e = match i {
22266            1 => LedgerUpgradeType::Version,
22267            2 => LedgerUpgradeType::BaseFee,
22268            3 => LedgerUpgradeType::MaxTxSetSize,
22269            4 => LedgerUpgradeType::BaseReserve,
22270            5 => LedgerUpgradeType::Flags,
22271            6 => LedgerUpgradeType::Config,
22272            7 => LedgerUpgradeType::MaxSorobanTxSetSize,
22273            #[allow(unreachable_patterns)]
22274            _ => return Err(Error::Invalid),
22275        };
22276        Ok(e)
22277    }
22278}
22279
22280impl From<LedgerUpgradeType> for i32 {
22281    #[must_use]
22282    fn from(e: LedgerUpgradeType) -> Self {
22283        e as Self
22284    }
22285}
22286
22287impl ReadXdr for LedgerUpgradeType {
22288    #[cfg(feature = "std")]
22289    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
22290        r.with_limited_depth(|r| {
22291            let e = i32::read_xdr(r)?;
22292            let v: Self = e.try_into()?;
22293            Ok(v)
22294        })
22295    }
22296}
22297
22298impl WriteXdr for LedgerUpgradeType {
22299    #[cfg(feature = "std")]
22300    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
22301        w.with_limited_depth(|w| {
22302            let i: i32 = (*self).into();
22303            i.write_xdr(w)
22304        })
22305    }
22306}
22307
22308/// ConfigUpgradeSetKey is an XDR Struct defines as:
22309///
22310/// ```text
22311/// struct ConfigUpgradeSetKey {
22312///     ContractID contractID;
22313///     Hash contentHash;
22314/// };
22315/// ```
22316///
22317#[cfg_attr(feature = "alloc", derive(Default))]
22318#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
22319#[cfg_eval::cfg_eval]
22320#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22321#[cfg_attr(
22322    all(feature = "serde", feature = "alloc"),
22323    serde_with::serde_as,
22324    derive(serde::Serialize, serde::Deserialize),
22325    serde(rename_all = "snake_case")
22326)]
22327#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
22328pub struct ConfigUpgradeSetKey {
22329    pub contract_id: ContractId,
22330    pub content_hash: Hash,
22331}
22332
22333impl ReadXdr for ConfigUpgradeSetKey {
22334    #[cfg(feature = "std")]
22335    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
22336        r.with_limited_depth(|r| {
22337            Ok(Self {
22338                contract_id: ContractId::read_xdr(r)?,
22339                content_hash: Hash::read_xdr(r)?,
22340            })
22341        })
22342    }
22343}
22344
22345impl WriteXdr for ConfigUpgradeSetKey {
22346    #[cfg(feature = "std")]
22347    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
22348        w.with_limited_depth(|w| {
22349            self.contract_id.write_xdr(w)?;
22350            self.content_hash.write_xdr(w)?;
22351            Ok(())
22352        })
22353    }
22354}
22355
22356/// LedgerUpgrade is an XDR Union defines as:
22357///
22358/// ```text
22359/// union LedgerUpgrade switch (LedgerUpgradeType type)
22360/// {
22361/// case LEDGER_UPGRADE_VERSION:
22362///     uint32 newLedgerVersion; // update ledgerVersion
22363/// case LEDGER_UPGRADE_BASE_FEE:
22364///     uint32 newBaseFee; // update baseFee
22365/// case LEDGER_UPGRADE_MAX_TX_SET_SIZE:
22366///     uint32 newMaxTxSetSize; // update maxTxSetSize
22367/// case LEDGER_UPGRADE_BASE_RESERVE:
22368///     uint32 newBaseReserve; // update baseReserve
22369/// case LEDGER_UPGRADE_FLAGS:
22370///     uint32 newFlags; // update flags
22371/// case LEDGER_UPGRADE_CONFIG:
22372///     // Update arbitrary `ConfigSetting` entries identified by the key.
22373///     ConfigUpgradeSetKey newConfig;
22374/// case LEDGER_UPGRADE_MAX_SOROBAN_TX_SET_SIZE:
22375///     // Update ConfigSettingContractExecutionLanesV0.ledgerMaxTxCount without
22376///     // using `LEDGER_UPGRADE_CONFIG`.
22377///     uint32 newMaxSorobanTxSetSize;
22378/// };
22379/// ```
22380///
22381// union with discriminant LedgerUpgradeType
22382#[cfg_eval::cfg_eval]
22383#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
22384#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22385#[cfg_attr(
22386    all(feature = "serde", feature = "alloc"),
22387    serde_with::serde_as,
22388    derive(serde::Serialize, serde::Deserialize),
22389    serde(rename_all = "snake_case")
22390)]
22391#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
22392#[allow(clippy::large_enum_variant)]
22393pub enum LedgerUpgrade {
22394    Version(u32),
22395    BaseFee(u32),
22396    MaxTxSetSize(u32),
22397    BaseReserve(u32),
22398    Flags(u32),
22399    Config(ConfigUpgradeSetKey),
22400    MaxSorobanTxSetSize(u32),
22401}
22402
22403#[cfg(feature = "alloc")]
22404impl Default for LedgerUpgrade {
22405    fn default() -> Self {
22406        Self::Version(u32::default())
22407    }
22408}
22409
22410impl LedgerUpgrade {
22411    pub const VARIANTS: [LedgerUpgradeType; 7] = [
22412        LedgerUpgradeType::Version,
22413        LedgerUpgradeType::BaseFee,
22414        LedgerUpgradeType::MaxTxSetSize,
22415        LedgerUpgradeType::BaseReserve,
22416        LedgerUpgradeType::Flags,
22417        LedgerUpgradeType::Config,
22418        LedgerUpgradeType::MaxSorobanTxSetSize,
22419    ];
22420    pub const VARIANTS_STR: [&'static str; 7] = [
22421        "Version",
22422        "BaseFee",
22423        "MaxTxSetSize",
22424        "BaseReserve",
22425        "Flags",
22426        "Config",
22427        "MaxSorobanTxSetSize",
22428    ];
22429
22430    #[must_use]
22431    pub const fn name(&self) -> &'static str {
22432        match self {
22433            Self::Version(_) => "Version",
22434            Self::BaseFee(_) => "BaseFee",
22435            Self::MaxTxSetSize(_) => "MaxTxSetSize",
22436            Self::BaseReserve(_) => "BaseReserve",
22437            Self::Flags(_) => "Flags",
22438            Self::Config(_) => "Config",
22439            Self::MaxSorobanTxSetSize(_) => "MaxSorobanTxSetSize",
22440        }
22441    }
22442
22443    #[must_use]
22444    pub const fn discriminant(&self) -> LedgerUpgradeType {
22445        #[allow(clippy::match_same_arms)]
22446        match self {
22447            Self::Version(_) => LedgerUpgradeType::Version,
22448            Self::BaseFee(_) => LedgerUpgradeType::BaseFee,
22449            Self::MaxTxSetSize(_) => LedgerUpgradeType::MaxTxSetSize,
22450            Self::BaseReserve(_) => LedgerUpgradeType::BaseReserve,
22451            Self::Flags(_) => LedgerUpgradeType::Flags,
22452            Self::Config(_) => LedgerUpgradeType::Config,
22453            Self::MaxSorobanTxSetSize(_) => LedgerUpgradeType::MaxSorobanTxSetSize,
22454        }
22455    }
22456
22457    #[must_use]
22458    pub const fn variants() -> [LedgerUpgradeType; 7] {
22459        Self::VARIANTS
22460    }
22461}
22462
22463impl Name for LedgerUpgrade {
22464    #[must_use]
22465    fn name(&self) -> &'static str {
22466        Self::name(self)
22467    }
22468}
22469
22470impl Discriminant<LedgerUpgradeType> for LedgerUpgrade {
22471    #[must_use]
22472    fn discriminant(&self) -> LedgerUpgradeType {
22473        Self::discriminant(self)
22474    }
22475}
22476
22477impl Variants<LedgerUpgradeType> for LedgerUpgrade {
22478    fn variants() -> slice::Iter<'static, LedgerUpgradeType> {
22479        Self::VARIANTS.iter()
22480    }
22481}
22482
22483impl Union<LedgerUpgradeType> for LedgerUpgrade {}
22484
22485impl ReadXdr for LedgerUpgrade {
22486    #[cfg(feature = "std")]
22487    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
22488        r.with_limited_depth(|r| {
22489            let dv: LedgerUpgradeType = <LedgerUpgradeType as ReadXdr>::read_xdr(r)?;
22490            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
22491            let v = match dv {
22492                LedgerUpgradeType::Version => Self::Version(u32::read_xdr(r)?),
22493                LedgerUpgradeType::BaseFee => Self::BaseFee(u32::read_xdr(r)?),
22494                LedgerUpgradeType::MaxTxSetSize => Self::MaxTxSetSize(u32::read_xdr(r)?),
22495                LedgerUpgradeType::BaseReserve => Self::BaseReserve(u32::read_xdr(r)?),
22496                LedgerUpgradeType::Flags => Self::Flags(u32::read_xdr(r)?),
22497                LedgerUpgradeType::Config => Self::Config(ConfigUpgradeSetKey::read_xdr(r)?),
22498                LedgerUpgradeType::MaxSorobanTxSetSize => {
22499                    Self::MaxSorobanTxSetSize(u32::read_xdr(r)?)
22500                }
22501                #[allow(unreachable_patterns)]
22502                _ => return Err(Error::Invalid),
22503            };
22504            Ok(v)
22505        })
22506    }
22507}
22508
22509impl WriteXdr for LedgerUpgrade {
22510    #[cfg(feature = "std")]
22511    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
22512        w.with_limited_depth(|w| {
22513            self.discriminant().write_xdr(w)?;
22514            #[allow(clippy::match_same_arms)]
22515            match self {
22516                Self::Version(v) => v.write_xdr(w)?,
22517                Self::BaseFee(v) => v.write_xdr(w)?,
22518                Self::MaxTxSetSize(v) => v.write_xdr(w)?,
22519                Self::BaseReserve(v) => v.write_xdr(w)?,
22520                Self::Flags(v) => v.write_xdr(w)?,
22521                Self::Config(v) => v.write_xdr(w)?,
22522                Self::MaxSorobanTxSetSize(v) => v.write_xdr(w)?,
22523            };
22524            Ok(())
22525        })
22526    }
22527}
22528
22529/// ConfigUpgradeSet is an XDR Struct defines as:
22530///
22531/// ```text
22532/// struct ConfigUpgradeSet {
22533///     ConfigSettingEntry updatedEntry<>;
22534/// };
22535/// ```
22536///
22537#[cfg_attr(feature = "alloc", derive(Default))]
22538#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
22539#[cfg_eval::cfg_eval]
22540#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22541#[cfg_attr(
22542    all(feature = "serde", feature = "alloc"),
22543    serde_with::serde_as,
22544    derive(serde::Serialize, serde::Deserialize),
22545    serde(rename_all = "snake_case")
22546)]
22547#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
22548pub struct ConfigUpgradeSet {
22549    pub updated_entry: VecM<ConfigSettingEntry>,
22550}
22551
22552impl ReadXdr for ConfigUpgradeSet {
22553    #[cfg(feature = "std")]
22554    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
22555        r.with_limited_depth(|r| {
22556            Ok(Self {
22557                updated_entry: VecM::<ConfigSettingEntry>::read_xdr(r)?,
22558            })
22559        })
22560    }
22561}
22562
22563impl WriteXdr for ConfigUpgradeSet {
22564    #[cfg(feature = "std")]
22565    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
22566        w.with_limited_depth(|w| {
22567            self.updated_entry.write_xdr(w)?;
22568            Ok(())
22569        })
22570    }
22571}
22572
22573/// TxSetComponentType is an XDR Enum defines as:
22574///
22575/// ```text
22576/// enum TxSetComponentType
22577/// {
22578///   // txs with effective fee <= bid derived from a base fee (if any).
22579///   // If base fee is not specified, no discount is applied.
22580///   TXSET_COMP_TXS_MAYBE_DISCOUNTED_FEE = 0
22581/// };
22582/// ```
22583///
22584// enum
22585#[cfg_attr(feature = "alloc", derive(Default))]
22586#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
22587#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22588#[cfg_attr(
22589    all(feature = "serde", feature = "alloc"),
22590    derive(serde::Serialize, serde::Deserialize),
22591    serde(rename_all = "snake_case")
22592)]
22593#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
22594#[repr(i32)]
22595pub enum TxSetComponentType {
22596    #[cfg_attr(feature = "alloc", default)]
22597    TxsetCompTxsMaybeDiscountedFee = 0,
22598}
22599
22600impl TxSetComponentType {
22601    pub const VARIANTS: [TxSetComponentType; 1] =
22602        [TxSetComponentType::TxsetCompTxsMaybeDiscountedFee];
22603    pub const VARIANTS_STR: [&'static str; 1] = ["TxsetCompTxsMaybeDiscountedFee"];
22604
22605    #[must_use]
22606    pub const fn name(&self) -> &'static str {
22607        match self {
22608            Self::TxsetCompTxsMaybeDiscountedFee => "TxsetCompTxsMaybeDiscountedFee",
22609        }
22610    }
22611
22612    #[must_use]
22613    pub const fn variants() -> [TxSetComponentType; 1] {
22614        Self::VARIANTS
22615    }
22616}
22617
22618impl Name for TxSetComponentType {
22619    #[must_use]
22620    fn name(&self) -> &'static str {
22621        Self::name(self)
22622    }
22623}
22624
22625impl Variants<TxSetComponentType> for TxSetComponentType {
22626    fn variants() -> slice::Iter<'static, TxSetComponentType> {
22627        Self::VARIANTS.iter()
22628    }
22629}
22630
22631impl Enum for TxSetComponentType {}
22632
22633impl fmt::Display for TxSetComponentType {
22634    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22635        f.write_str(self.name())
22636    }
22637}
22638
22639impl TryFrom<i32> for TxSetComponentType {
22640    type Error = Error;
22641
22642    fn try_from(i: i32) -> Result<Self, Error> {
22643        let e = match i {
22644            0 => TxSetComponentType::TxsetCompTxsMaybeDiscountedFee,
22645            #[allow(unreachable_patterns)]
22646            _ => return Err(Error::Invalid),
22647        };
22648        Ok(e)
22649    }
22650}
22651
22652impl From<TxSetComponentType> for i32 {
22653    #[must_use]
22654    fn from(e: TxSetComponentType) -> Self {
22655        e as Self
22656    }
22657}
22658
22659impl ReadXdr for TxSetComponentType {
22660    #[cfg(feature = "std")]
22661    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
22662        r.with_limited_depth(|r| {
22663            let e = i32::read_xdr(r)?;
22664            let v: Self = e.try_into()?;
22665            Ok(v)
22666        })
22667    }
22668}
22669
22670impl WriteXdr for TxSetComponentType {
22671    #[cfg(feature = "std")]
22672    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
22673        w.with_limited_depth(|w| {
22674            let i: i32 = (*self).into();
22675            i.write_xdr(w)
22676        })
22677    }
22678}
22679
22680/// DependentTxCluster is an XDR Typedef defines as:
22681///
22682/// ```text
22683/// typedef TransactionEnvelope DependentTxCluster<>;
22684/// ```
22685///
22686#[cfg_eval::cfg_eval]
22687#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
22688#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22689#[cfg_attr(
22690    all(feature = "serde", feature = "alloc"),
22691    serde_with::serde_as,
22692    derive(serde::Serialize, serde::Deserialize),
22693    serde(rename_all = "snake_case")
22694)]
22695#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
22696#[derive(Debug)]
22697pub struct DependentTxCluster(pub VecM<TransactionEnvelope>);
22698
22699impl From<DependentTxCluster> for VecM<TransactionEnvelope> {
22700    #[must_use]
22701    fn from(x: DependentTxCluster) -> Self {
22702        x.0
22703    }
22704}
22705
22706impl From<VecM<TransactionEnvelope>> for DependentTxCluster {
22707    #[must_use]
22708    fn from(x: VecM<TransactionEnvelope>) -> Self {
22709        DependentTxCluster(x)
22710    }
22711}
22712
22713impl AsRef<VecM<TransactionEnvelope>> for DependentTxCluster {
22714    #[must_use]
22715    fn as_ref(&self) -> &VecM<TransactionEnvelope> {
22716        &self.0
22717    }
22718}
22719
22720impl ReadXdr for DependentTxCluster {
22721    #[cfg(feature = "std")]
22722    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
22723        r.with_limited_depth(|r| {
22724            let i = VecM::<TransactionEnvelope>::read_xdr(r)?;
22725            let v = DependentTxCluster(i);
22726            Ok(v)
22727        })
22728    }
22729}
22730
22731impl WriteXdr for DependentTxCluster {
22732    #[cfg(feature = "std")]
22733    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
22734        w.with_limited_depth(|w| self.0.write_xdr(w))
22735    }
22736}
22737
22738impl Deref for DependentTxCluster {
22739    type Target = VecM<TransactionEnvelope>;
22740    fn deref(&self) -> &Self::Target {
22741        &self.0
22742    }
22743}
22744
22745impl From<DependentTxCluster> for Vec<TransactionEnvelope> {
22746    #[must_use]
22747    fn from(x: DependentTxCluster) -> Self {
22748        x.0 .0
22749    }
22750}
22751
22752impl TryFrom<Vec<TransactionEnvelope>> for DependentTxCluster {
22753    type Error = Error;
22754    fn try_from(x: Vec<TransactionEnvelope>) -> Result<Self, Error> {
22755        Ok(DependentTxCluster(x.try_into()?))
22756    }
22757}
22758
22759#[cfg(feature = "alloc")]
22760impl TryFrom<&Vec<TransactionEnvelope>> for DependentTxCluster {
22761    type Error = Error;
22762    fn try_from(x: &Vec<TransactionEnvelope>) -> Result<Self, Error> {
22763        Ok(DependentTxCluster(x.try_into()?))
22764    }
22765}
22766
22767impl AsRef<Vec<TransactionEnvelope>> for DependentTxCluster {
22768    #[must_use]
22769    fn as_ref(&self) -> &Vec<TransactionEnvelope> {
22770        &self.0 .0
22771    }
22772}
22773
22774impl AsRef<[TransactionEnvelope]> for DependentTxCluster {
22775    #[cfg(feature = "alloc")]
22776    #[must_use]
22777    fn as_ref(&self) -> &[TransactionEnvelope] {
22778        &self.0 .0
22779    }
22780    #[cfg(not(feature = "alloc"))]
22781    #[must_use]
22782    fn as_ref(&self) -> &[TransactionEnvelope] {
22783        self.0 .0
22784    }
22785}
22786
22787/// ParallelTxExecutionStage is an XDR Typedef defines as:
22788///
22789/// ```text
22790/// typedef DependentTxCluster ParallelTxExecutionStage<>;
22791/// ```
22792///
22793#[cfg_eval::cfg_eval]
22794#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
22795#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22796#[cfg_attr(
22797    all(feature = "serde", feature = "alloc"),
22798    serde_with::serde_as,
22799    derive(serde::Serialize, serde::Deserialize),
22800    serde(rename_all = "snake_case")
22801)]
22802#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
22803#[derive(Debug)]
22804pub struct ParallelTxExecutionStage(pub VecM<DependentTxCluster>);
22805
22806impl From<ParallelTxExecutionStage> for VecM<DependentTxCluster> {
22807    #[must_use]
22808    fn from(x: ParallelTxExecutionStage) -> Self {
22809        x.0
22810    }
22811}
22812
22813impl From<VecM<DependentTxCluster>> for ParallelTxExecutionStage {
22814    #[must_use]
22815    fn from(x: VecM<DependentTxCluster>) -> Self {
22816        ParallelTxExecutionStage(x)
22817    }
22818}
22819
22820impl AsRef<VecM<DependentTxCluster>> for ParallelTxExecutionStage {
22821    #[must_use]
22822    fn as_ref(&self) -> &VecM<DependentTxCluster> {
22823        &self.0
22824    }
22825}
22826
22827impl ReadXdr for ParallelTxExecutionStage {
22828    #[cfg(feature = "std")]
22829    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
22830        r.with_limited_depth(|r| {
22831            let i = VecM::<DependentTxCluster>::read_xdr(r)?;
22832            let v = ParallelTxExecutionStage(i);
22833            Ok(v)
22834        })
22835    }
22836}
22837
22838impl WriteXdr for ParallelTxExecutionStage {
22839    #[cfg(feature = "std")]
22840    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
22841        w.with_limited_depth(|w| self.0.write_xdr(w))
22842    }
22843}
22844
22845impl Deref for ParallelTxExecutionStage {
22846    type Target = VecM<DependentTxCluster>;
22847    fn deref(&self) -> &Self::Target {
22848        &self.0
22849    }
22850}
22851
22852impl From<ParallelTxExecutionStage> for Vec<DependentTxCluster> {
22853    #[must_use]
22854    fn from(x: ParallelTxExecutionStage) -> Self {
22855        x.0 .0
22856    }
22857}
22858
22859impl TryFrom<Vec<DependentTxCluster>> for ParallelTxExecutionStage {
22860    type Error = Error;
22861    fn try_from(x: Vec<DependentTxCluster>) -> Result<Self, Error> {
22862        Ok(ParallelTxExecutionStage(x.try_into()?))
22863    }
22864}
22865
22866#[cfg(feature = "alloc")]
22867impl TryFrom<&Vec<DependentTxCluster>> for ParallelTxExecutionStage {
22868    type Error = Error;
22869    fn try_from(x: &Vec<DependentTxCluster>) -> Result<Self, Error> {
22870        Ok(ParallelTxExecutionStage(x.try_into()?))
22871    }
22872}
22873
22874impl AsRef<Vec<DependentTxCluster>> for ParallelTxExecutionStage {
22875    #[must_use]
22876    fn as_ref(&self) -> &Vec<DependentTxCluster> {
22877        &self.0 .0
22878    }
22879}
22880
22881impl AsRef<[DependentTxCluster]> for ParallelTxExecutionStage {
22882    #[cfg(feature = "alloc")]
22883    #[must_use]
22884    fn as_ref(&self) -> &[DependentTxCluster] {
22885        &self.0 .0
22886    }
22887    #[cfg(not(feature = "alloc"))]
22888    #[must_use]
22889    fn as_ref(&self) -> &[DependentTxCluster] {
22890        self.0 .0
22891    }
22892}
22893
22894/// ParallelTxsComponent is an XDR Struct defines as:
22895///
22896/// ```text
22897/// struct ParallelTxsComponent
22898/// {
22899///   int64* baseFee;
22900///   // A sequence of stages that *may* have arbitrary data dependencies between
22901///   // each other, i.e. in a general case the stage execution order may not be
22902///   // arbitrarily shuffled without affecting the end result.
22903///   ParallelTxExecutionStage executionStages<>;
22904/// };
22905/// ```
22906///
22907#[cfg_attr(feature = "alloc", derive(Default))]
22908#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
22909#[cfg_eval::cfg_eval]
22910#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22911#[cfg_attr(
22912    all(feature = "serde", feature = "alloc"),
22913    serde_with::serde_as,
22914    derive(serde::Serialize, serde::Deserialize),
22915    serde(rename_all = "snake_case")
22916)]
22917#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
22918pub struct ParallelTxsComponent {
22919    #[cfg_attr(
22920        all(feature = "serde", feature = "alloc"),
22921        serde_as(as = "Option<NumberOrString>")
22922    )]
22923    pub base_fee: Option<i64>,
22924    pub execution_stages: VecM<ParallelTxExecutionStage>,
22925}
22926
22927impl ReadXdr for ParallelTxsComponent {
22928    #[cfg(feature = "std")]
22929    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
22930        r.with_limited_depth(|r| {
22931            Ok(Self {
22932                base_fee: Option::<i64>::read_xdr(r)?,
22933                execution_stages: VecM::<ParallelTxExecutionStage>::read_xdr(r)?,
22934            })
22935        })
22936    }
22937}
22938
22939impl WriteXdr for ParallelTxsComponent {
22940    #[cfg(feature = "std")]
22941    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
22942        w.with_limited_depth(|w| {
22943            self.base_fee.write_xdr(w)?;
22944            self.execution_stages.write_xdr(w)?;
22945            Ok(())
22946        })
22947    }
22948}
22949
22950/// TxSetComponentTxsMaybeDiscountedFee is an XDR NestedStruct defines as:
22951///
22952/// ```text
22953/// struct
22954///   {
22955///     int64* baseFee;
22956///     TransactionEnvelope txs<>;
22957///   }
22958/// ```
22959///
22960#[cfg_attr(feature = "alloc", derive(Default))]
22961#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
22962#[cfg_eval::cfg_eval]
22963#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
22964#[cfg_attr(
22965    all(feature = "serde", feature = "alloc"),
22966    serde_with::serde_as,
22967    derive(serde::Serialize, serde::Deserialize),
22968    serde(rename_all = "snake_case")
22969)]
22970#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
22971pub struct TxSetComponentTxsMaybeDiscountedFee {
22972    #[cfg_attr(
22973        all(feature = "serde", feature = "alloc"),
22974        serde_as(as = "Option<NumberOrString>")
22975    )]
22976    pub base_fee: Option<i64>,
22977    pub txs: VecM<TransactionEnvelope>,
22978}
22979
22980impl ReadXdr for TxSetComponentTxsMaybeDiscountedFee {
22981    #[cfg(feature = "std")]
22982    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
22983        r.with_limited_depth(|r| {
22984            Ok(Self {
22985                base_fee: Option::<i64>::read_xdr(r)?,
22986                txs: VecM::<TransactionEnvelope>::read_xdr(r)?,
22987            })
22988        })
22989    }
22990}
22991
22992impl WriteXdr for TxSetComponentTxsMaybeDiscountedFee {
22993    #[cfg(feature = "std")]
22994    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
22995        w.with_limited_depth(|w| {
22996            self.base_fee.write_xdr(w)?;
22997            self.txs.write_xdr(w)?;
22998            Ok(())
22999        })
23000    }
23001}
23002
23003/// TxSetComponent is an XDR Union defines as:
23004///
23005/// ```text
23006/// union TxSetComponent switch (TxSetComponentType type)
23007/// {
23008/// case TXSET_COMP_TXS_MAYBE_DISCOUNTED_FEE:
23009///   struct
23010///   {
23011///     int64* baseFee;
23012///     TransactionEnvelope txs<>;
23013///   } txsMaybeDiscountedFee;
23014/// };
23015/// ```
23016///
23017// union with discriminant TxSetComponentType
23018#[cfg_eval::cfg_eval]
23019#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23020#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23021#[cfg_attr(
23022    all(feature = "serde", feature = "alloc"),
23023    serde_with::serde_as,
23024    derive(serde::Serialize, serde::Deserialize),
23025    serde(rename_all = "snake_case")
23026)]
23027#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23028#[allow(clippy::large_enum_variant)]
23029pub enum TxSetComponent {
23030    TxsetCompTxsMaybeDiscountedFee(TxSetComponentTxsMaybeDiscountedFee),
23031}
23032
23033#[cfg(feature = "alloc")]
23034impl Default for TxSetComponent {
23035    fn default() -> Self {
23036        Self::TxsetCompTxsMaybeDiscountedFee(TxSetComponentTxsMaybeDiscountedFee::default())
23037    }
23038}
23039
23040impl TxSetComponent {
23041    pub const VARIANTS: [TxSetComponentType; 1] =
23042        [TxSetComponentType::TxsetCompTxsMaybeDiscountedFee];
23043    pub const VARIANTS_STR: [&'static str; 1] = ["TxsetCompTxsMaybeDiscountedFee"];
23044
23045    #[must_use]
23046    pub const fn name(&self) -> &'static str {
23047        match self {
23048            Self::TxsetCompTxsMaybeDiscountedFee(_) => "TxsetCompTxsMaybeDiscountedFee",
23049        }
23050    }
23051
23052    #[must_use]
23053    pub const fn discriminant(&self) -> TxSetComponentType {
23054        #[allow(clippy::match_same_arms)]
23055        match self {
23056            Self::TxsetCompTxsMaybeDiscountedFee(_) => {
23057                TxSetComponentType::TxsetCompTxsMaybeDiscountedFee
23058            }
23059        }
23060    }
23061
23062    #[must_use]
23063    pub const fn variants() -> [TxSetComponentType; 1] {
23064        Self::VARIANTS
23065    }
23066}
23067
23068impl Name for TxSetComponent {
23069    #[must_use]
23070    fn name(&self) -> &'static str {
23071        Self::name(self)
23072    }
23073}
23074
23075impl Discriminant<TxSetComponentType> for TxSetComponent {
23076    #[must_use]
23077    fn discriminant(&self) -> TxSetComponentType {
23078        Self::discriminant(self)
23079    }
23080}
23081
23082impl Variants<TxSetComponentType> for TxSetComponent {
23083    fn variants() -> slice::Iter<'static, TxSetComponentType> {
23084        Self::VARIANTS.iter()
23085    }
23086}
23087
23088impl Union<TxSetComponentType> for TxSetComponent {}
23089
23090impl ReadXdr for TxSetComponent {
23091    #[cfg(feature = "std")]
23092    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23093        r.with_limited_depth(|r| {
23094            let dv: TxSetComponentType = <TxSetComponentType as ReadXdr>::read_xdr(r)?;
23095            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
23096            let v = match dv {
23097                TxSetComponentType::TxsetCompTxsMaybeDiscountedFee => {
23098                    Self::TxsetCompTxsMaybeDiscountedFee(
23099                        TxSetComponentTxsMaybeDiscountedFee::read_xdr(r)?,
23100                    )
23101                }
23102                #[allow(unreachable_patterns)]
23103                _ => return Err(Error::Invalid),
23104            };
23105            Ok(v)
23106        })
23107    }
23108}
23109
23110impl WriteXdr for TxSetComponent {
23111    #[cfg(feature = "std")]
23112    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23113        w.with_limited_depth(|w| {
23114            self.discriminant().write_xdr(w)?;
23115            #[allow(clippy::match_same_arms)]
23116            match self {
23117                Self::TxsetCompTxsMaybeDiscountedFee(v) => v.write_xdr(w)?,
23118            };
23119            Ok(())
23120        })
23121    }
23122}
23123
23124/// TransactionPhase is an XDR Union defines as:
23125///
23126/// ```text
23127/// union TransactionPhase switch (int v)
23128/// {
23129/// case 0:
23130///     TxSetComponent v0Components<>;
23131/// case 1:
23132///     ParallelTxsComponent parallelTxsComponent;
23133/// };
23134/// ```
23135///
23136// union with discriminant i32
23137#[cfg_eval::cfg_eval]
23138#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23139#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23140#[cfg_attr(
23141    all(feature = "serde", feature = "alloc"),
23142    serde_with::serde_as,
23143    derive(serde::Serialize, serde::Deserialize),
23144    serde(rename_all = "snake_case")
23145)]
23146#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23147#[allow(clippy::large_enum_variant)]
23148pub enum TransactionPhase {
23149    V0(VecM<TxSetComponent>),
23150    V1(ParallelTxsComponent),
23151}
23152
23153#[cfg(feature = "alloc")]
23154impl Default for TransactionPhase {
23155    fn default() -> Self {
23156        Self::V0(VecM::<TxSetComponent>::default())
23157    }
23158}
23159
23160impl TransactionPhase {
23161    pub const VARIANTS: [i32; 2] = [0, 1];
23162    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
23163
23164    #[must_use]
23165    pub const fn name(&self) -> &'static str {
23166        match self {
23167            Self::V0(_) => "V0",
23168            Self::V1(_) => "V1",
23169        }
23170    }
23171
23172    #[must_use]
23173    pub const fn discriminant(&self) -> i32 {
23174        #[allow(clippy::match_same_arms)]
23175        match self {
23176            Self::V0(_) => 0,
23177            Self::V1(_) => 1,
23178        }
23179    }
23180
23181    #[must_use]
23182    pub const fn variants() -> [i32; 2] {
23183        Self::VARIANTS
23184    }
23185}
23186
23187impl Name for TransactionPhase {
23188    #[must_use]
23189    fn name(&self) -> &'static str {
23190        Self::name(self)
23191    }
23192}
23193
23194impl Discriminant<i32> for TransactionPhase {
23195    #[must_use]
23196    fn discriminant(&self) -> i32 {
23197        Self::discriminant(self)
23198    }
23199}
23200
23201impl Variants<i32> for TransactionPhase {
23202    fn variants() -> slice::Iter<'static, i32> {
23203        Self::VARIANTS.iter()
23204    }
23205}
23206
23207impl Union<i32> for TransactionPhase {}
23208
23209impl ReadXdr for TransactionPhase {
23210    #[cfg(feature = "std")]
23211    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23212        r.with_limited_depth(|r| {
23213            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
23214            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
23215            let v = match dv {
23216                0 => Self::V0(VecM::<TxSetComponent>::read_xdr(r)?),
23217                1 => Self::V1(ParallelTxsComponent::read_xdr(r)?),
23218                #[allow(unreachable_patterns)]
23219                _ => return Err(Error::Invalid),
23220            };
23221            Ok(v)
23222        })
23223    }
23224}
23225
23226impl WriteXdr for TransactionPhase {
23227    #[cfg(feature = "std")]
23228    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23229        w.with_limited_depth(|w| {
23230            self.discriminant().write_xdr(w)?;
23231            #[allow(clippy::match_same_arms)]
23232            match self {
23233                Self::V0(v) => v.write_xdr(w)?,
23234                Self::V1(v) => v.write_xdr(w)?,
23235            };
23236            Ok(())
23237        })
23238    }
23239}
23240
23241/// TransactionSet is an XDR Struct defines as:
23242///
23243/// ```text
23244/// struct TransactionSet
23245/// {
23246///     Hash previousLedgerHash;
23247///     TransactionEnvelope txs<>;
23248/// };
23249/// ```
23250///
23251#[cfg_attr(feature = "alloc", derive(Default))]
23252#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23253#[cfg_eval::cfg_eval]
23254#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23255#[cfg_attr(
23256    all(feature = "serde", feature = "alloc"),
23257    serde_with::serde_as,
23258    derive(serde::Serialize, serde::Deserialize),
23259    serde(rename_all = "snake_case")
23260)]
23261#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23262pub struct TransactionSet {
23263    pub previous_ledger_hash: Hash,
23264    pub txs: VecM<TransactionEnvelope>,
23265}
23266
23267impl ReadXdr for TransactionSet {
23268    #[cfg(feature = "std")]
23269    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23270        r.with_limited_depth(|r| {
23271            Ok(Self {
23272                previous_ledger_hash: Hash::read_xdr(r)?,
23273                txs: VecM::<TransactionEnvelope>::read_xdr(r)?,
23274            })
23275        })
23276    }
23277}
23278
23279impl WriteXdr for TransactionSet {
23280    #[cfg(feature = "std")]
23281    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23282        w.with_limited_depth(|w| {
23283            self.previous_ledger_hash.write_xdr(w)?;
23284            self.txs.write_xdr(w)?;
23285            Ok(())
23286        })
23287    }
23288}
23289
23290/// TransactionSetV1 is an XDR Struct defines as:
23291///
23292/// ```text
23293/// struct TransactionSetV1
23294/// {
23295///     Hash previousLedgerHash;
23296///     TransactionPhase phases<>;
23297/// };
23298/// ```
23299///
23300#[cfg_attr(feature = "alloc", derive(Default))]
23301#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23302#[cfg_eval::cfg_eval]
23303#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23304#[cfg_attr(
23305    all(feature = "serde", feature = "alloc"),
23306    serde_with::serde_as,
23307    derive(serde::Serialize, serde::Deserialize),
23308    serde(rename_all = "snake_case")
23309)]
23310#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23311pub struct TransactionSetV1 {
23312    pub previous_ledger_hash: Hash,
23313    pub phases: VecM<TransactionPhase>,
23314}
23315
23316impl ReadXdr for TransactionSetV1 {
23317    #[cfg(feature = "std")]
23318    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23319        r.with_limited_depth(|r| {
23320            Ok(Self {
23321                previous_ledger_hash: Hash::read_xdr(r)?,
23322                phases: VecM::<TransactionPhase>::read_xdr(r)?,
23323            })
23324        })
23325    }
23326}
23327
23328impl WriteXdr for TransactionSetV1 {
23329    #[cfg(feature = "std")]
23330    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23331        w.with_limited_depth(|w| {
23332            self.previous_ledger_hash.write_xdr(w)?;
23333            self.phases.write_xdr(w)?;
23334            Ok(())
23335        })
23336    }
23337}
23338
23339/// GeneralizedTransactionSet is an XDR Union defines as:
23340///
23341/// ```text
23342/// union GeneralizedTransactionSet switch (int v)
23343/// {
23344/// // We consider the legacy TransactionSet to be v0.
23345/// case 1:
23346///     TransactionSetV1 v1TxSet;
23347/// };
23348/// ```
23349///
23350// union with discriminant i32
23351#[cfg_eval::cfg_eval]
23352#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23353#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23354#[cfg_attr(
23355    all(feature = "serde", feature = "alloc"),
23356    serde_with::serde_as,
23357    derive(serde::Serialize, serde::Deserialize),
23358    serde(rename_all = "snake_case")
23359)]
23360#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23361#[allow(clippy::large_enum_variant)]
23362pub enum GeneralizedTransactionSet {
23363    V1(TransactionSetV1),
23364}
23365
23366#[cfg(feature = "alloc")]
23367impl Default for GeneralizedTransactionSet {
23368    fn default() -> Self {
23369        Self::V1(TransactionSetV1::default())
23370    }
23371}
23372
23373impl GeneralizedTransactionSet {
23374    pub const VARIANTS: [i32; 1] = [1];
23375    pub const VARIANTS_STR: [&'static str; 1] = ["V1"];
23376
23377    #[must_use]
23378    pub const fn name(&self) -> &'static str {
23379        match self {
23380            Self::V1(_) => "V1",
23381        }
23382    }
23383
23384    #[must_use]
23385    pub const fn discriminant(&self) -> i32 {
23386        #[allow(clippy::match_same_arms)]
23387        match self {
23388            Self::V1(_) => 1,
23389        }
23390    }
23391
23392    #[must_use]
23393    pub const fn variants() -> [i32; 1] {
23394        Self::VARIANTS
23395    }
23396}
23397
23398impl Name for GeneralizedTransactionSet {
23399    #[must_use]
23400    fn name(&self) -> &'static str {
23401        Self::name(self)
23402    }
23403}
23404
23405impl Discriminant<i32> for GeneralizedTransactionSet {
23406    #[must_use]
23407    fn discriminant(&self) -> i32 {
23408        Self::discriminant(self)
23409    }
23410}
23411
23412impl Variants<i32> for GeneralizedTransactionSet {
23413    fn variants() -> slice::Iter<'static, i32> {
23414        Self::VARIANTS.iter()
23415    }
23416}
23417
23418impl Union<i32> for GeneralizedTransactionSet {}
23419
23420impl ReadXdr for GeneralizedTransactionSet {
23421    #[cfg(feature = "std")]
23422    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23423        r.with_limited_depth(|r| {
23424            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
23425            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
23426            let v = match dv {
23427                1 => Self::V1(TransactionSetV1::read_xdr(r)?),
23428                #[allow(unreachable_patterns)]
23429                _ => return Err(Error::Invalid),
23430            };
23431            Ok(v)
23432        })
23433    }
23434}
23435
23436impl WriteXdr for GeneralizedTransactionSet {
23437    #[cfg(feature = "std")]
23438    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23439        w.with_limited_depth(|w| {
23440            self.discriminant().write_xdr(w)?;
23441            #[allow(clippy::match_same_arms)]
23442            match self {
23443                Self::V1(v) => v.write_xdr(w)?,
23444            };
23445            Ok(())
23446        })
23447    }
23448}
23449
23450/// TransactionResultPair is an XDR Struct defines as:
23451///
23452/// ```text
23453/// struct TransactionResultPair
23454/// {
23455///     Hash transactionHash;
23456///     TransactionResult result; // result for the transaction
23457/// };
23458/// ```
23459///
23460#[cfg_attr(feature = "alloc", derive(Default))]
23461#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23462#[cfg_eval::cfg_eval]
23463#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23464#[cfg_attr(
23465    all(feature = "serde", feature = "alloc"),
23466    serde_with::serde_as,
23467    derive(serde::Serialize, serde::Deserialize),
23468    serde(rename_all = "snake_case")
23469)]
23470#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23471pub struct TransactionResultPair {
23472    pub transaction_hash: Hash,
23473    pub result: TransactionResult,
23474}
23475
23476impl ReadXdr for TransactionResultPair {
23477    #[cfg(feature = "std")]
23478    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23479        r.with_limited_depth(|r| {
23480            Ok(Self {
23481                transaction_hash: Hash::read_xdr(r)?,
23482                result: TransactionResult::read_xdr(r)?,
23483            })
23484        })
23485    }
23486}
23487
23488impl WriteXdr for TransactionResultPair {
23489    #[cfg(feature = "std")]
23490    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23491        w.with_limited_depth(|w| {
23492            self.transaction_hash.write_xdr(w)?;
23493            self.result.write_xdr(w)?;
23494            Ok(())
23495        })
23496    }
23497}
23498
23499/// TransactionResultSet is an XDR Struct defines as:
23500///
23501/// ```text
23502/// struct TransactionResultSet
23503/// {
23504///     TransactionResultPair results<>;
23505/// };
23506/// ```
23507///
23508#[cfg_attr(feature = "alloc", derive(Default))]
23509#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23510#[cfg_eval::cfg_eval]
23511#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23512#[cfg_attr(
23513    all(feature = "serde", feature = "alloc"),
23514    serde_with::serde_as,
23515    derive(serde::Serialize, serde::Deserialize),
23516    serde(rename_all = "snake_case")
23517)]
23518#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23519pub struct TransactionResultSet {
23520    pub results: VecM<TransactionResultPair>,
23521}
23522
23523impl ReadXdr for TransactionResultSet {
23524    #[cfg(feature = "std")]
23525    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23526        r.with_limited_depth(|r| {
23527            Ok(Self {
23528                results: VecM::<TransactionResultPair>::read_xdr(r)?,
23529            })
23530        })
23531    }
23532}
23533
23534impl WriteXdr for TransactionResultSet {
23535    #[cfg(feature = "std")]
23536    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23537        w.with_limited_depth(|w| {
23538            self.results.write_xdr(w)?;
23539            Ok(())
23540        })
23541    }
23542}
23543
23544/// TransactionHistoryEntryExt is an XDR NestedUnion defines as:
23545///
23546/// ```text
23547/// union switch (int v)
23548///     {
23549///     case 0:
23550///         void;
23551///     case 1:
23552///         GeneralizedTransactionSet generalizedTxSet;
23553///     }
23554/// ```
23555///
23556// union with discriminant i32
23557#[cfg_eval::cfg_eval]
23558#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23559#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23560#[cfg_attr(
23561    all(feature = "serde", feature = "alloc"),
23562    serde_with::serde_as,
23563    derive(serde::Serialize, serde::Deserialize),
23564    serde(rename_all = "snake_case")
23565)]
23566#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23567#[allow(clippy::large_enum_variant)]
23568pub enum TransactionHistoryEntryExt {
23569    V0,
23570    V1(GeneralizedTransactionSet),
23571}
23572
23573#[cfg(feature = "alloc")]
23574impl Default for TransactionHistoryEntryExt {
23575    fn default() -> Self {
23576        Self::V0
23577    }
23578}
23579
23580impl TransactionHistoryEntryExt {
23581    pub const VARIANTS: [i32; 2] = [0, 1];
23582    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
23583
23584    #[must_use]
23585    pub const fn name(&self) -> &'static str {
23586        match self {
23587            Self::V0 => "V0",
23588            Self::V1(_) => "V1",
23589        }
23590    }
23591
23592    #[must_use]
23593    pub const fn discriminant(&self) -> i32 {
23594        #[allow(clippy::match_same_arms)]
23595        match self {
23596            Self::V0 => 0,
23597            Self::V1(_) => 1,
23598        }
23599    }
23600
23601    #[must_use]
23602    pub const fn variants() -> [i32; 2] {
23603        Self::VARIANTS
23604    }
23605}
23606
23607impl Name for TransactionHistoryEntryExt {
23608    #[must_use]
23609    fn name(&self) -> &'static str {
23610        Self::name(self)
23611    }
23612}
23613
23614impl Discriminant<i32> for TransactionHistoryEntryExt {
23615    #[must_use]
23616    fn discriminant(&self) -> i32 {
23617        Self::discriminant(self)
23618    }
23619}
23620
23621impl Variants<i32> for TransactionHistoryEntryExt {
23622    fn variants() -> slice::Iter<'static, i32> {
23623        Self::VARIANTS.iter()
23624    }
23625}
23626
23627impl Union<i32> for TransactionHistoryEntryExt {}
23628
23629impl ReadXdr for TransactionHistoryEntryExt {
23630    #[cfg(feature = "std")]
23631    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23632        r.with_limited_depth(|r| {
23633            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
23634            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
23635            let v = match dv {
23636                0 => Self::V0,
23637                1 => Self::V1(GeneralizedTransactionSet::read_xdr(r)?),
23638                #[allow(unreachable_patterns)]
23639                _ => return Err(Error::Invalid),
23640            };
23641            Ok(v)
23642        })
23643    }
23644}
23645
23646impl WriteXdr for TransactionHistoryEntryExt {
23647    #[cfg(feature = "std")]
23648    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23649        w.with_limited_depth(|w| {
23650            self.discriminant().write_xdr(w)?;
23651            #[allow(clippy::match_same_arms)]
23652            match self {
23653                Self::V0 => ().write_xdr(w)?,
23654                Self::V1(v) => v.write_xdr(w)?,
23655            };
23656            Ok(())
23657        })
23658    }
23659}
23660
23661/// TransactionHistoryEntry is an XDR Struct defines as:
23662///
23663/// ```text
23664/// struct TransactionHistoryEntry
23665/// {
23666///     uint32 ledgerSeq;
23667///     TransactionSet txSet;
23668///
23669///     // when v != 0, txSet must be empty
23670///     union switch (int v)
23671///     {
23672///     case 0:
23673///         void;
23674///     case 1:
23675///         GeneralizedTransactionSet generalizedTxSet;
23676///     }
23677///     ext;
23678/// };
23679/// ```
23680///
23681#[cfg_attr(feature = "alloc", derive(Default))]
23682#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23683#[cfg_eval::cfg_eval]
23684#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23685#[cfg_attr(
23686    all(feature = "serde", feature = "alloc"),
23687    serde_with::serde_as,
23688    derive(serde::Serialize, serde::Deserialize),
23689    serde(rename_all = "snake_case")
23690)]
23691#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23692pub struct TransactionHistoryEntry {
23693    pub ledger_seq: u32,
23694    pub tx_set: TransactionSet,
23695    pub ext: TransactionHistoryEntryExt,
23696}
23697
23698impl ReadXdr for TransactionHistoryEntry {
23699    #[cfg(feature = "std")]
23700    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23701        r.with_limited_depth(|r| {
23702            Ok(Self {
23703                ledger_seq: u32::read_xdr(r)?,
23704                tx_set: TransactionSet::read_xdr(r)?,
23705                ext: TransactionHistoryEntryExt::read_xdr(r)?,
23706            })
23707        })
23708    }
23709}
23710
23711impl WriteXdr for TransactionHistoryEntry {
23712    #[cfg(feature = "std")]
23713    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23714        w.with_limited_depth(|w| {
23715            self.ledger_seq.write_xdr(w)?;
23716            self.tx_set.write_xdr(w)?;
23717            self.ext.write_xdr(w)?;
23718            Ok(())
23719        })
23720    }
23721}
23722
23723/// TransactionHistoryResultEntryExt is an XDR NestedUnion defines as:
23724///
23725/// ```text
23726/// union switch (int v)
23727///     {
23728///     case 0:
23729///         void;
23730///     }
23731/// ```
23732///
23733// union with discriminant i32
23734#[cfg_eval::cfg_eval]
23735#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23736#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23737#[cfg_attr(
23738    all(feature = "serde", feature = "alloc"),
23739    serde_with::serde_as,
23740    derive(serde::Serialize, serde::Deserialize),
23741    serde(rename_all = "snake_case")
23742)]
23743#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23744#[allow(clippy::large_enum_variant)]
23745pub enum TransactionHistoryResultEntryExt {
23746    V0,
23747}
23748
23749#[cfg(feature = "alloc")]
23750impl Default for TransactionHistoryResultEntryExt {
23751    fn default() -> Self {
23752        Self::V0
23753    }
23754}
23755
23756impl TransactionHistoryResultEntryExt {
23757    pub const VARIANTS: [i32; 1] = [0];
23758    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
23759
23760    #[must_use]
23761    pub const fn name(&self) -> &'static str {
23762        match self {
23763            Self::V0 => "V0",
23764        }
23765    }
23766
23767    #[must_use]
23768    pub const fn discriminant(&self) -> i32 {
23769        #[allow(clippy::match_same_arms)]
23770        match self {
23771            Self::V0 => 0,
23772        }
23773    }
23774
23775    #[must_use]
23776    pub const fn variants() -> [i32; 1] {
23777        Self::VARIANTS
23778    }
23779}
23780
23781impl Name for TransactionHistoryResultEntryExt {
23782    #[must_use]
23783    fn name(&self) -> &'static str {
23784        Self::name(self)
23785    }
23786}
23787
23788impl Discriminant<i32> for TransactionHistoryResultEntryExt {
23789    #[must_use]
23790    fn discriminant(&self) -> i32 {
23791        Self::discriminant(self)
23792    }
23793}
23794
23795impl Variants<i32> for TransactionHistoryResultEntryExt {
23796    fn variants() -> slice::Iter<'static, i32> {
23797        Self::VARIANTS.iter()
23798    }
23799}
23800
23801impl Union<i32> for TransactionHistoryResultEntryExt {}
23802
23803impl ReadXdr for TransactionHistoryResultEntryExt {
23804    #[cfg(feature = "std")]
23805    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23806        r.with_limited_depth(|r| {
23807            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
23808            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
23809            let v = match dv {
23810                0 => Self::V0,
23811                #[allow(unreachable_patterns)]
23812                _ => return Err(Error::Invalid),
23813            };
23814            Ok(v)
23815        })
23816    }
23817}
23818
23819impl WriteXdr for TransactionHistoryResultEntryExt {
23820    #[cfg(feature = "std")]
23821    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23822        w.with_limited_depth(|w| {
23823            self.discriminant().write_xdr(w)?;
23824            #[allow(clippy::match_same_arms)]
23825            match self {
23826                Self::V0 => ().write_xdr(w)?,
23827            };
23828            Ok(())
23829        })
23830    }
23831}
23832
23833/// TransactionHistoryResultEntry is an XDR Struct defines as:
23834///
23835/// ```text
23836/// struct TransactionHistoryResultEntry
23837/// {
23838///     uint32 ledgerSeq;
23839///     TransactionResultSet txResultSet;
23840///
23841///     // reserved for future use
23842///     union switch (int v)
23843///     {
23844///     case 0:
23845///         void;
23846///     }
23847///     ext;
23848/// };
23849/// ```
23850///
23851#[cfg_attr(feature = "alloc", derive(Default))]
23852#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23853#[cfg_eval::cfg_eval]
23854#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23855#[cfg_attr(
23856    all(feature = "serde", feature = "alloc"),
23857    serde_with::serde_as,
23858    derive(serde::Serialize, serde::Deserialize),
23859    serde(rename_all = "snake_case")
23860)]
23861#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23862pub struct TransactionHistoryResultEntry {
23863    pub ledger_seq: u32,
23864    pub tx_result_set: TransactionResultSet,
23865    pub ext: TransactionHistoryResultEntryExt,
23866}
23867
23868impl ReadXdr for TransactionHistoryResultEntry {
23869    #[cfg(feature = "std")]
23870    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23871        r.with_limited_depth(|r| {
23872            Ok(Self {
23873                ledger_seq: u32::read_xdr(r)?,
23874                tx_result_set: TransactionResultSet::read_xdr(r)?,
23875                ext: TransactionHistoryResultEntryExt::read_xdr(r)?,
23876            })
23877        })
23878    }
23879}
23880
23881impl WriteXdr for TransactionHistoryResultEntry {
23882    #[cfg(feature = "std")]
23883    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23884        w.with_limited_depth(|w| {
23885            self.ledger_seq.write_xdr(w)?;
23886            self.tx_result_set.write_xdr(w)?;
23887            self.ext.write_xdr(w)?;
23888            Ok(())
23889        })
23890    }
23891}
23892
23893/// LedgerHeaderHistoryEntryExt is an XDR NestedUnion defines as:
23894///
23895/// ```text
23896/// union switch (int v)
23897///     {
23898///     case 0:
23899///         void;
23900///     }
23901/// ```
23902///
23903// union with discriminant i32
23904#[cfg_eval::cfg_eval]
23905#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23906#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
23907#[cfg_attr(
23908    all(feature = "serde", feature = "alloc"),
23909    serde_with::serde_as,
23910    derive(serde::Serialize, serde::Deserialize),
23911    serde(rename_all = "snake_case")
23912)]
23913#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
23914#[allow(clippy::large_enum_variant)]
23915pub enum LedgerHeaderHistoryEntryExt {
23916    V0,
23917}
23918
23919#[cfg(feature = "alloc")]
23920impl Default for LedgerHeaderHistoryEntryExt {
23921    fn default() -> Self {
23922        Self::V0
23923    }
23924}
23925
23926impl LedgerHeaderHistoryEntryExt {
23927    pub const VARIANTS: [i32; 1] = [0];
23928    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
23929
23930    #[must_use]
23931    pub const fn name(&self) -> &'static str {
23932        match self {
23933            Self::V0 => "V0",
23934        }
23935    }
23936
23937    #[must_use]
23938    pub const fn discriminant(&self) -> i32 {
23939        #[allow(clippy::match_same_arms)]
23940        match self {
23941            Self::V0 => 0,
23942        }
23943    }
23944
23945    #[must_use]
23946    pub const fn variants() -> [i32; 1] {
23947        Self::VARIANTS
23948    }
23949}
23950
23951impl Name for LedgerHeaderHistoryEntryExt {
23952    #[must_use]
23953    fn name(&self) -> &'static str {
23954        Self::name(self)
23955    }
23956}
23957
23958impl Discriminant<i32> for LedgerHeaderHistoryEntryExt {
23959    #[must_use]
23960    fn discriminant(&self) -> i32 {
23961        Self::discriminant(self)
23962    }
23963}
23964
23965impl Variants<i32> for LedgerHeaderHistoryEntryExt {
23966    fn variants() -> slice::Iter<'static, i32> {
23967        Self::VARIANTS.iter()
23968    }
23969}
23970
23971impl Union<i32> for LedgerHeaderHistoryEntryExt {}
23972
23973impl ReadXdr for LedgerHeaderHistoryEntryExt {
23974    #[cfg(feature = "std")]
23975    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
23976        r.with_limited_depth(|r| {
23977            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
23978            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
23979            let v = match dv {
23980                0 => Self::V0,
23981                #[allow(unreachable_patterns)]
23982                _ => return Err(Error::Invalid),
23983            };
23984            Ok(v)
23985        })
23986    }
23987}
23988
23989impl WriteXdr for LedgerHeaderHistoryEntryExt {
23990    #[cfg(feature = "std")]
23991    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
23992        w.with_limited_depth(|w| {
23993            self.discriminant().write_xdr(w)?;
23994            #[allow(clippy::match_same_arms)]
23995            match self {
23996                Self::V0 => ().write_xdr(w)?,
23997            };
23998            Ok(())
23999        })
24000    }
24001}
24002
24003/// LedgerHeaderHistoryEntry is an XDR Struct defines as:
24004///
24005/// ```text
24006/// struct LedgerHeaderHistoryEntry
24007/// {
24008///     Hash hash;
24009///     LedgerHeader header;
24010///
24011///     // reserved for future use
24012///     union switch (int v)
24013///     {
24014///     case 0:
24015///         void;
24016///     }
24017///     ext;
24018/// };
24019/// ```
24020///
24021#[cfg_attr(feature = "alloc", derive(Default))]
24022#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24023#[cfg_eval::cfg_eval]
24024#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24025#[cfg_attr(
24026    all(feature = "serde", feature = "alloc"),
24027    serde_with::serde_as,
24028    derive(serde::Serialize, serde::Deserialize),
24029    serde(rename_all = "snake_case")
24030)]
24031#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24032pub struct LedgerHeaderHistoryEntry {
24033    pub hash: Hash,
24034    pub header: LedgerHeader,
24035    pub ext: LedgerHeaderHistoryEntryExt,
24036}
24037
24038impl ReadXdr for LedgerHeaderHistoryEntry {
24039    #[cfg(feature = "std")]
24040    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24041        r.with_limited_depth(|r| {
24042            Ok(Self {
24043                hash: Hash::read_xdr(r)?,
24044                header: LedgerHeader::read_xdr(r)?,
24045                ext: LedgerHeaderHistoryEntryExt::read_xdr(r)?,
24046            })
24047        })
24048    }
24049}
24050
24051impl WriteXdr for LedgerHeaderHistoryEntry {
24052    #[cfg(feature = "std")]
24053    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24054        w.with_limited_depth(|w| {
24055            self.hash.write_xdr(w)?;
24056            self.header.write_xdr(w)?;
24057            self.ext.write_xdr(w)?;
24058            Ok(())
24059        })
24060    }
24061}
24062
24063/// LedgerScpMessages is an XDR Struct defines as:
24064///
24065/// ```text
24066/// struct LedgerSCPMessages
24067/// {
24068///     uint32 ledgerSeq;
24069///     SCPEnvelope messages<>;
24070/// };
24071/// ```
24072///
24073#[cfg_attr(feature = "alloc", derive(Default))]
24074#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24075#[cfg_eval::cfg_eval]
24076#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24077#[cfg_attr(
24078    all(feature = "serde", feature = "alloc"),
24079    serde_with::serde_as,
24080    derive(serde::Serialize, serde::Deserialize),
24081    serde(rename_all = "snake_case")
24082)]
24083#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24084pub struct LedgerScpMessages {
24085    pub ledger_seq: u32,
24086    pub messages: VecM<ScpEnvelope>,
24087}
24088
24089impl ReadXdr for LedgerScpMessages {
24090    #[cfg(feature = "std")]
24091    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24092        r.with_limited_depth(|r| {
24093            Ok(Self {
24094                ledger_seq: u32::read_xdr(r)?,
24095                messages: VecM::<ScpEnvelope>::read_xdr(r)?,
24096            })
24097        })
24098    }
24099}
24100
24101impl WriteXdr for LedgerScpMessages {
24102    #[cfg(feature = "std")]
24103    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24104        w.with_limited_depth(|w| {
24105            self.ledger_seq.write_xdr(w)?;
24106            self.messages.write_xdr(w)?;
24107            Ok(())
24108        })
24109    }
24110}
24111
24112/// ScpHistoryEntryV0 is an XDR Struct defines as:
24113///
24114/// ```text
24115/// struct SCPHistoryEntryV0
24116/// {
24117///     SCPQuorumSet quorumSets<>; // additional quorum sets used by ledgerMessages
24118///     LedgerSCPMessages ledgerMessages;
24119/// };
24120/// ```
24121///
24122#[cfg_attr(feature = "alloc", derive(Default))]
24123#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24124#[cfg_eval::cfg_eval]
24125#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24126#[cfg_attr(
24127    all(feature = "serde", feature = "alloc"),
24128    serde_with::serde_as,
24129    derive(serde::Serialize, serde::Deserialize),
24130    serde(rename_all = "snake_case")
24131)]
24132#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24133pub struct ScpHistoryEntryV0 {
24134    pub quorum_sets: VecM<ScpQuorumSet>,
24135    pub ledger_messages: LedgerScpMessages,
24136}
24137
24138impl ReadXdr for ScpHistoryEntryV0 {
24139    #[cfg(feature = "std")]
24140    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24141        r.with_limited_depth(|r| {
24142            Ok(Self {
24143                quorum_sets: VecM::<ScpQuorumSet>::read_xdr(r)?,
24144                ledger_messages: LedgerScpMessages::read_xdr(r)?,
24145            })
24146        })
24147    }
24148}
24149
24150impl WriteXdr for ScpHistoryEntryV0 {
24151    #[cfg(feature = "std")]
24152    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24153        w.with_limited_depth(|w| {
24154            self.quorum_sets.write_xdr(w)?;
24155            self.ledger_messages.write_xdr(w)?;
24156            Ok(())
24157        })
24158    }
24159}
24160
24161/// ScpHistoryEntry is an XDR Union defines as:
24162///
24163/// ```text
24164/// union SCPHistoryEntry switch (int v)
24165/// {
24166/// case 0:
24167///     SCPHistoryEntryV0 v0;
24168/// };
24169/// ```
24170///
24171// union with discriminant i32
24172#[cfg_eval::cfg_eval]
24173#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24174#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24175#[cfg_attr(
24176    all(feature = "serde", feature = "alloc"),
24177    serde_with::serde_as,
24178    derive(serde::Serialize, serde::Deserialize),
24179    serde(rename_all = "snake_case")
24180)]
24181#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24182#[allow(clippy::large_enum_variant)]
24183pub enum ScpHistoryEntry {
24184    V0(ScpHistoryEntryV0),
24185}
24186
24187#[cfg(feature = "alloc")]
24188impl Default for ScpHistoryEntry {
24189    fn default() -> Self {
24190        Self::V0(ScpHistoryEntryV0::default())
24191    }
24192}
24193
24194impl ScpHistoryEntry {
24195    pub const VARIANTS: [i32; 1] = [0];
24196    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
24197
24198    #[must_use]
24199    pub const fn name(&self) -> &'static str {
24200        match self {
24201            Self::V0(_) => "V0",
24202        }
24203    }
24204
24205    #[must_use]
24206    pub const fn discriminant(&self) -> i32 {
24207        #[allow(clippy::match_same_arms)]
24208        match self {
24209            Self::V0(_) => 0,
24210        }
24211    }
24212
24213    #[must_use]
24214    pub const fn variants() -> [i32; 1] {
24215        Self::VARIANTS
24216    }
24217}
24218
24219impl Name for ScpHistoryEntry {
24220    #[must_use]
24221    fn name(&self) -> &'static str {
24222        Self::name(self)
24223    }
24224}
24225
24226impl Discriminant<i32> for ScpHistoryEntry {
24227    #[must_use]
24228    fn discriminant(&self) -> i32 {
24229        Self::discriminant(self)
24230    }
24231}
24232
24233impl Variants<i32> for ScpHistoryEntry {
24234    fn variants() -> slice::Iter<'static, i32> {
24235        Self::VARIANTS.iter()
24236    }
24237}
24238
24239impl Union<i32> for ScpHistoryEntry {}
24240
24241impl ReadXdr for ScpHistoryEntry {
24242    #[cfg(feature = "std")]
24243    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24244        r.with_limited_depth(|r| {
24245            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
24246            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
24247            let v = match dv {
24248                0 => Self::V0(ScpHistoryEntryV0::read_xdr(r)?),
24249                #[allow(unreachable_patterns)]
24250                _ => return Err(Error::Invalid),
24251            };
24252            Ok(v)
24253        })
24254    }
24255}
24256
24257impl WriteXdr for ScpHistoryEntry {
24258    #[cfg(feature = "std")]
24259    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24260        w.with_limited_depth(|w| {
24261            self.discriminant().write_xdr(w)?;
24262            #[allow(clippy::match_same_arms)]
24263            match self {
24264                Self::V0(v) => v.write_xdr(w)?,
24265            };
24266            Ok(())
24267        })
24268    }
24269}
24270
24271/// LedgerEntryChangeType is an XDR Enum defines as:
24272///
24273/// ```text
24274/// enum LedgerEntryChangeType
24275/// {
24276///     LEDGER_ENTRY_CREATED = 0, // entry was added to the ledger
24277///     LEDGER_ENTRY_UPDATED = 1, // entry was modified in the ledger
24278///     LEDGER_ENTRY_REMOVED = 2, // entry was removed from the ledger
24279///     LEDGER_ENTRY_STATE    = 3, // value of the entry
24280///     LEDGER_ENTRY_RESTORED = 4  // archived entry was restored in the ledger
24281/// };
24282/// ```
24283///
24284// enum
24285#[cfg_attr(feature = "alloc", derive(Default))]
24286#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24287#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24288#[cfg_attr(
24289    all(feature = "serde", feature = "alloc"),
24290    derive(serde::Serialize, serde::Deserialize),
24291    serde(rename_all = "snake_case")
24292)]
24293#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24294#[repr(i32)]
24295pub enum LedgerEntryChangeType {
24296    #[cfg_attr(feature = "alloc", default)]
24297    Created = 0,
24298    Updated = 1,
24299    Removed = 2,
24300    State = 3,
24301    Restored = 4,
24302}
24303
24304impl LedgerEntryChangeType {
24305    pub const VARIANTS: [LedgerEntryChangeType; 5] = [
24306        LedgerEntryChangeType::Created,
24307        LedgerEntryChangeType::Updated,
24308        LedgerEntryChangeType::Removed,
24309        LedgerEntryChangeType::State,
24310        LedgerEntryChangeType::Restored,
24311    ];
24312    pub const VARIANTS_STR: [&'static str; 5] =
24313        ["Created", "Updated", "Removed", "State", "Restored"];
24314
24315    #[must_use]
24316    pub const fn name(&self) -> &'static str {
24317        match self {
24318            Self::Created => "Created",
24319            Self::Updated => "Updated",
24320            Self::Removed => "Removed",
24321            Self::State => "State",
24322            Self::Restored => "Restored",
24323        }
24324    }
24325
24326    #[must_use]
24327    pub const fn variants() -> [LedgerEntryChangeType; 5] {
24328        Self::VARIANTS
24329    }
24330}
24331
24332impl Name for LedgerEntryChangeType {
24333    #[must_use]
24334    fn name(&self) -> &'static str {
24335        Self::name(self)
24336    }
24337}
24338
24339impl Variants<LedgerEntryChangeType> for LedgerEntryChangeType {
24340    fn variants() -> slice::Iter<'static, LedgerEntryChangeType> {
24341        Self::VARIANTS.iter()
24342    }
24343}
24344
24345impl Enum for LedgerEntryChangeType {}
24346
24347impl fmt::Display for LedgerEntryChangeType {
24348    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24349        f.write_str(self.name())
24350    }
24351}
24352
24353impl TryFrom<i32> for LedgerEntryChangeType {
24354    type Error = Error;
24355
24356    fn try_from(i: i32) -> Result<Self, Error> {
24357        let e = match i {
24358            0 => LedgerEntryChangeType::Created,
24359            1 => LedgerEntryChangeType::Updated,
24360            2 => LedgerEntryChangeType::Removed,
24361            3 => LedgerEntryChangeType::State,
24362            4 => LedgerEntryChangeType::Restored,
24363            #[allow(unreachable_patterns)]
24364            _ => return Err(Error::Invalid),
24365        };
24366        Ok(e)
24367    }
24368}
24369
24370impl From<LedgerEntryChangeType> for i32 {
24371    #[must_use]
24372    fn from(e: LedgerEntryChangeType) -> Self {
24373        e as Self
24374    }
24375}
24376
24377impl ReadXdr for LedgerEntryChangeType {
24378    #[cfg(feature = "std")]
24379    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24380        r.with_limited_depth(|r| {
24381            let e = i32::read_xdr(r)?;
24382            let v: Self = e.try_into()?;
24383            Ok(v)
24384        })
24385    }
24386}
24387
24388impl WriteXdr for LedgerEntryChangeType {
24389    #[cfg(feature = "std")]
24390    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24391        w.with_limited_depth(|w| {
24392            let i: i32 = (*self).into();
24393            i.write_xdr(w)
24394        })
24395    }
24396}
24397
24398/// LedgerEntryChange is an XDR Union defines as:
24399///
24400/// ```text
24401/// union LedgerEntryChange switch (LedgerEntryChangeType type)
24402/// {
24403/// case LEDGER_ENTRY_CREATED:
24404///     LedgerEntry created;
24405/// case LEDGER_ENTRY_UPDATED:
24406///     LedgerEntry updated;
24407/// case LEDGER_ENTRY_REMOVED:
24408///     LedgerKey removed;
24409/// case LEDGER_ENTRY_STATE:
24410///     LedgerEntry state;
24411/// case LEDGER_ENTRY_RESTORED:
24412///     LedgerEntry restored;
24413/// };
24414/// ```
24415///
24416// union with discriminant LedgerEntryChangeType
24417#[cfg_eval::cfg_eval]
24418#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24419#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24420#[cfg_attr(
24421    all(feature = "serde", feature = "alloc"),
24422    serde_with::serde_as,
24423    derive(serde::Serialize, serde::Deserialize),
24424    serde(rename_all = "snake_case")
24425)]
24426#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24427#[allow(clippy::large_enum_variant)]
24428pub enum LedgerEntryChange {
24429    Created(LedgerEntry),
24430    Updated(LedgerEntry),
24431    Removed(LedgerKey),
24432    State(LedgerEntry),
24433    Restored(LedgerEntry),
24434}
24435
24436#[cfg(feature = "alloc")]
24437impl Default for LedgerEntryChange {
24438    fn default() -> Self {
24439        Self::Created(LedgerEntry::default())
24440    }
24441}
24442
24443impl LedgerEntryChange {
24444    pub const VARIANTS: [LedgerEntryChangeType; 5] = [
24445        LedgerEntryChangeType::Created,
24446        LedgerEntryChangeType::Updated,
24447        LedgerEntryChangeType::Removed,
24448        LedgerEntryChangeType::State,
24449        LedgerEntryChangeType::Restored,
24450    ];
24451    pub const VARIANTS_STR: [&'static str; 5] =
24452        ["Created", "Updated", "Removed", "State", "Restored"];
24453
24454    #[must_use]
24455    pub const fn name(&self) -> &'static str {
24456        match self {
24457            Self::Created(_) => "Created",
24458            Self::Updated(_) => "Updated",
24459            Self::Removed(_) => "Removed",
24460            Self::State(_) => "State",
24461            Self::Restored(_) => "Restored",
24462        }
24463    }
24464
24465    #[must_use]
24466    pub const fn discriminant(&self) -> LedgerEntryChangeType {
24467        #[allow(clippy::match_same_arms)]
24468        match self {
24469            Self::Created(_) => LedgerEntryChangeType::Created,
24470            Self::Updated(_) => LedgerEntryChangeType::Updated,
24471            Self::Removed(_) => LedgerEntryChangeType::Removed,
24472            Self::State(_) => LedgerEntryChangeType::State,
24473            Self::Restored(_) => LedgerEntryChangeType::Restored,
24474        }
24475    }
24476
24477    #[must_use]
24478    pub const fn variants() -> [LedgerEntryChangeType; 5] {
24479        Self::VARIANTS
24480    }
24481}
24482
24483impl Name for LedgerEntryChange {
24484    #[must_use]
24485    fn name(&self) -> &'static str {
24486        Self::name(self)
24487    }
24488}
24489
24490impl Discriminant<LedgerEntryChangeType> for LedgerEntryChange {
24491    #[must_use]
24492    fn discriminant(&self) -> LedgerEntryChangeType {
24493        Self::discriminant(self)
24494    }
24495}
24496
24497impl Variants<LedgerEntryChangeType> for LedgerEntryChange {
24498    fn variants() -> slice::Iter<'static, LedgerEntryChangeType> {
24499        Self::VARIANTS.iter()
24500    }
24501}
24502
24503impl Union<LedgerEntryChangeType> for LedgerEntryChange {}
24504
24505impl ReadXdr for LedgerEntryChange {
24506    #[cfg(feature = "std")]
24507    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24508        r.with_limited_depth(|r| {
24509            let dv: LedgerEntryChangeType = <LedgerEntryChangeType as ReadXdr>::read_xdr(r)?;
24510            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
24511            let v = match dv {
24512                LedgerEntryChangeType::Created => Self::Created(LedgerEntry::read_xdr(r)?),
24513                LedgerEntryChangeType::Updated => Self::Updated(LedgerEntry::read_xdr(r)?),
24514                LedgerEntryChangeType::Removed => Self::Removed(LedgerKey::read_xdr(r)?),
24515                LedgerEntryChangeType::State => Self::State(LedgerEntry::read_xdr(r)?),
24516                LedgerEntryChangeType::Restored => Self::Restored(LedgerEntry::read_xdr(r)?),
24517                #[allow(unreachable_patterns)]
24518                _ => return Err(Error::Invalid),
24519            };
24520            Ok(v)
24521        })
24522    }
24523}
24524
24525impl WriteXdr for LedgerEntryChange {
24526    #[cfg(feature = "std")]
24527    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24528        w.with_limited_depth(|w| {
24529            self.discriminant().write_xdr(w)?;
24530            #[allow(clippy::match_same_arms)]
24531            match self {
24532                Self::Created(v) => v.write_xdr(w)?,
24533                Self::Updated(v) => v.write_xdr(w)?,
24534                Self::Removed(v) => v.write_xdr(w)?,
24535                Self::State(v) => v.write_xdr(w)?,
24536                Self::Restored(v) => v.write_xdr(w)?,
24537            };
24538            Ok(())
24539        })
24540    }
24541}
24542
24543/// LedgerEntryChanges is an XDR Typedef defines as:
24544///
24545/// ```text
24546/// typedef LedgerEntryChange LedgerEntryChanges<>;
24547/// ```
24548///
24549#[cfg_eval::cfg_eval]
24550#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
24551#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24552#[cfg_attr(
24553    all(feature = "serde", feature = "alloc"),
24554    serde_with::serde_as,
24555    derive(serde::Serialize, serde::Deserialize),
24556    serde(rename_all = "snake_case")
24557)]
24558#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24559#[derive(Debug)]
24560pub struct LedgerEntryChanges(pub VecM<LedgerEntryChange>);
24561
24562impl From<LedgerEntryChanges> for VecM<LedgerEntryChange> {
24563    #[must_use]
24564    fn from(x: LedgerEntryChanges) -> Self {
24565        x.0
24566    }
24567}
24568
24569impl From<VecM<LedgerEntryChange>> for LedgerEntryChanges {
24570    #[must_use]
24571    fn from(x: VecM<LedgerEntryChange>) -> Self {
24572        LedgerEntryChanges(x)
24573    }
24574}
24575
24576impl AsRef<VecM<LedgerEntryChange>> for LedgerEntryChanges {
24577    #[must_use]
24578    fn as_ref(&self) -> &VecM<LedgerEntryChange> {
24579        &self.0
24580    }
24581}
24582
24583impl ReadXdr for LedgerEntryChanges {
24584    #[cfg(feature = "std")]
24585    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24586        r.with_limited_depth(|r| {
24587            let i = VecM::<LedgerEntryChange>::read_xdr(r)?;
24588            let v = LedgerEntryChanges(i);
24589            Ok(v)
24590        })
24591    }
24592}
24593
24594impl WriteXdr for LedgerEntryChanges {
24595    #[cfg(feature = "std")]
24596    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24597        w.with_limited_depth(|w| self.0.write_xdr(w))
24598    }
24599}
24600
24601impl Deref for LedgerEntryChanges {
24602    type Target = VecM<LedgerEntryChange>;
24603    fn deref(&self) -> &Self::Target {
24604        &self.0
24605    }
24606}
24607
24608impl From<LedgerEntryChanges> for Vec<LedgerEntryChange> {
24609    #[must_use]
24610    fn from(x: LedgerEntryChanges) -> Self {
24611        x.0 .0
24612    }
24613}
24614
24615impl TryFrom<Vec<LedgerEntryChange>> for LedgerEntryChanges {
24616    type Error = Error;
24617    fn try_from(x: Vec<LedgerEntryChange>) -> Result<Self, Error> {
24618        Ok(LedgerEntryChanges(x.try_into()?))
24619    }
24620}
24621
24622#[cfg(feature = "alloc")]
24623impl TryFrom<&Vec<LedgerEntryChange>> for LedgerEntryChanges {
24624    type Error = Error;
24625    fn try_from(x: &Vec<LedgerEntryChange>) -> Result<Self, Error> {
24626        Ok(LedgerEntryChanges(x.try_into()?))
24627    }
24628}
24629
24630impl AsRef<Vec<LedgerEntryChange>> for LedgerEntryChanges {
24631    #[must_use]
24632    fn as_ref(&self) -> &Vec<LedgerEntryChange> {
24633        &self.0 .0
24634    }
24635}
24636
24637impl AsRef<[LedgerEntryChange]> for LedgerEntryChanges {
24638    #[cfg(feature = "alloc")]
24639    #[must_use]
24640    fn as_ref(&self) -> &[LedgerEntryChange] {
24641        &self.0 .0
24642    }
24643    #[cfg(not(feature = "alloc"))]
24644    #[must_use]
24645    fn as_ref(&self) -> &[LedgerEntryChange] {
24646        self.0 .0
24647    }
24648}
24649
24650/// OperationMeta is an XDR Struct defines as:
24651///
24652/// ```text
24653/// struct OperationMeta
24654/// {
24655///     LedgerEntryChanges changes;
24656/// };
24657/// ```
24658///
24659#[cfg_attr(feature = "alloc", derive(Default))]
24660#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24661#[cfg_eval::cfg_eval]
24662#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24663#[cfg_attr(
24664    all(feature = "serde", feature = "alloc"),
24665    serde_with::serde_as,
24666    derive(serde::Serialize, serde::Deserialize),
24667    serde(rename_all = "snake_case")
24668)]
24669#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24670pub struct OperationMeta {
24671    pub changes: LedgerEntryChanges,
24672}
24673
24674impl ReadXdr for OperationMeta {
24675    #[cfg(feature = "std")]
24676    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24677        r.with_limited_depth(|r| {
24678            Ok(Self {
24679                changes: LedgerEntryChanges::read_xdr(r)?,
24680            })
24681        })
24682    }
24683}
24684
24685impl WriteXdr for OperationMeta {
24686    #[cfg(feature = "std")]
24687    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24688        w.with_limited_depth(|w| {
24689            self.changes.write_xdr(w)?;
24690            Ok(())
24691        })
24692    }
24693}
24694
24695/// TransactionMetaV1 is an XDR Struct defines as:
24696///
24697/// ```text
24698/// struct TransactionMetaV1
24699/// {
24700///     LedgerEntryChanges txChanges; // tx level changes if any
24701///     OperationMeta operations<>;   // meta for each operation
24702/// };
24703/// ```
24704///
24705#[cfg_attr(feature = "alloc", derive(Default))]
24706#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24707#[cfg_eval::cfg_eval]
24708#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24709#[cfg_attr(
24710    all(feature = "serde", feature = "alloc"),
24711    serde_with::serde_as,
24712    derive(serde::Serialize, serde::Deserialize),
24713    serde(rename_all = "snake_case")
24714)]
24715#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24716pub struct TransactionMetaV1 {
24717    pub tx_changes: LedgerEntryChanges,
24718    pub operations: VecM<OperationMeta>,
24719}
24720
24721impl ReadXdr for TransactionMetaV1 {
24722    #[cfg(feature = "std")]
24723    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24724        r.with_limited_depth(|r| {
24725            Ok(Self {
24726                tx_changes: LedgerEntryChanges::read_xdr(r)?,
24727                operations: VecM::<OperationMeta>::read_xdr(r)?,
24728            })
24729        })
24730    }
24731}
24732
24733impl WriteXdr for TransactionMetaV1 {
24734    #[cfg(feature = "std")]
24735    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24736        w.with_limited_depth(|w| {
24737            self.tx_changes.write_xdr(w)?;
24738            self.operations.write_xdr(w)?;
24739            Ok(())
24740        })
24741    }
24742}
24743
24744/// TransactionMetaV2 is an XDR Struct defines as:
24745///
24746/// ```text
24747/// struct TransactionMetaV2
24748/// {
24749///     LedgerEntryChanges txChangesBefore; // tx level changes before operations
24750///                                         // are applied if any
24751///     OperationMeta operations<>;         // meta for each operation
24752///     LedgerEntryChanges txChangesAfter;  // tx level changes after operations are
24753///                                         // applied if any
24754/// };
24755/// ```
24756///
24757#[cfg_attr(feature = "alloc", derive(Default))]
24758#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24759#[cfg_eval::cfg_eval]
24760#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24761#[cfg_attr(
24762    all(feature = "serde", feature = "alloc"),
24763    serde_with::serde_as,
24764    derive(serde::Serialize, serde::Deserialize),
24765    serde(rename_all = "snake_case")
24766)]
24767#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24768pub struct TransactionMetaV2 {
24769    pub tx_changes_before: LedgerEntryChanges,
24770    pub operations: VecM<OperationMeta>,
24771    pub tx_changes_after: LedgerEntryChanges,
24772}
24773
24774impl ReadXdr for TransactionMetaV2 {
24775    #[cfg(feature = "std")]
24776    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24777        r.with_limited_depth(|r| {
24778            Ok(Self {
24779                tx_changes_before: LedgerEntryChanges::read_xdr(r)?,
24780                operations: VecM::<OperationMeta>::read_xdr(r)?,
24781                tx_changes_after: LedgerEntryChanges::read_xdr(r)?,
24782            })
24783        })
24784    }
24785}
24786
24787impl WriteXdr for TransactionMetaV2 {
24788    #[cfg(feature = "std")]
24789    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24790        w.with_limited_depth(|w| {
24791            self.tx_changes_before.write_xdr(w)?;
24792            self.operations.write_xdr(w)?;
24793            self.tx_changes_after.write_xdr(w)?;
24794            Ok(())
24795        })
24796    }
24797}
24798
24799/// ContractEventType is an XDR Enum defines as:
24800///
24801/// ```text
24802/// enum ContractEventType
24803/// {
24804///     SYSTEM = 0,
24805///     CONTRACT = 1,
24806///     DIAGNOSTIC = 2
24807/// };
24808/// ```
24809///
24810// enum
24811#[cfg_attr(feature = "alloc", derive(Default))]
24812#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24813#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24814#[cfg_attr(
24815    all(feature = "serde", feature = "alloc"),
24816    derive(serde::Serialize, serde::Deserialize),
24817    serde(rename_all = "snake_case")
24818)]
24819#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24820#[repr(i32)]
24821pub enum ContractEventType {
24822    #[cfg_attr(feature = "alloc", default)]
24823    System = 0,
24824    Contract = 1,
24825    Diagnostic = 2,
24826}
24827
24828impl ContractEventType {
24829    pub const VARIANTS: [ContractEventType; 3] = [
24830        ContractEventType::System,
24831        ContractEventType::Contract,
24832        ContractEventType::Diagnostic,
24833    ];
24834    pub const VARIANTS_STR: [&'static str; 3] = ["System", "Contract", "Diagnostic"];
24835
24836    #[must_use]
24837    pub const fn name(&self) -> &'static str {
24838        match self {
24839            Self::System => "System",
24840            Self::Contract => "Contract",
24841            Self::Diagnostic => "Diagnostic",
24842        }
24843    }
24844
24845    #[must_use]
24846    pub const fn variants() -> [ContractEventType; 3] {
24847        Self::VARIANTS
24848    }
24849}
24850
24851impl Name for ContractEventType {
24852    #[must_use]
24853    fn name(&self) -> &'static str {
24854        Self::name(self)
24855    }
24856}
24857
24858impl Variants<ContractEventType> for ContractEventType {
24859    fn variants() -> slice::Iter<'static, ContractEventType> {
24860        Self::VARIANTS.iter()
24861    }
24862}
24863
24864impl Enum for ContractEventType {}
24865
24866impl fmt::Display for ContractEventType {
24867    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24868        f.write_str(self.name())
24869    }
24870}
24871
24872impl TryFrom<i32> for ContractEventType {
24873    type Error = Error;
24874
24875    fn try_from(i: i32) -> Result<Self, Error> {
24876        let e = match i {
24877            0 => ContractEventType::System,
24878            1 => ContractEventType::Contract,
24879            2 => ContractEventType::Diagnostic,
24880            #[allow(unreachable_patterns)]
24881            _ => return Err(Error::Invalid),
24882        };
24883        Ok(e)
24884    }
24885}
24886
24887impl From<ContractEventType> for i32 {
24888    #[must_use]
24889    fn from(e: ContractEventType) -> Self {
24890        e as Self
24891    }
24892}
24893
24894impl ReadXdr for ContractEventType {
24895    #[cfg(feature = "std")]
24896    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24897        r.with_limited_depth(|r| {
24898            let e = i32::read_xdr(r)?;
24899            let v: Self = e.try_into()?;
24900            Ok(v)
24901        })
24902    }
24903}
24904
24905impl WriteXdr for ContractEventType {
24906    #[cfg(feature = "std")]
24907    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24908        w.with_limited_depth(|w| {
24909            let i: i32 = (*self).into();
24910            i.write_xdr(w)
24911        })
24912    }
24913}
24914
24915/// ContractEventV0 is an XDR NestedStruct defines as:
24916///
24917/// ```text
24918/// struct
24919///         {
24920///             SCVal topics<>;
24921///             SCVal data;
24922///         }
24923/// ```
24924///
24925#[cfg_attr(feature = "alloc", derive(Default))]
24926#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24927#[cfg_eval::cfg_eval]
24928#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24929#[cfg_attr(
24930    all(feature = "serde", feature = "alloc"),
24931    serde_with::serde_as,
24932    derive(serde::Serialize, serde::Deserialize),
24933    serde(rename_all = "snake_case")
24934)]
24935#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24936pub struct ContractEventV0 {
24937    pub topics: VecM<ScVal>,
24938    pub data: ScVal,
24939}
24940
24941impl ReadXdr for ContractEventV0 {
24942    #[cfg(feature = "std")]
24943    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
24944        r.with_limited_depth(|r| {
24945            Ok(Self {
24946                topics: VecM::<ScVal>::read_xdr(r)?,
24947                data: ScVal::read_xdr(r)?,
24948            })
24949        })
24950    }
24951}
24952
24953impl WriteXdr for ContractEventV0 {
24954    #[cfg(feature = "std")]
24955    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
24956        w.with_limited_depth(|w| {
24957            self.topics.write_xdr(w)?;
24958            self.data.write_xdr(w)?;
24959            Ok(())
24960        })
24961    }
24962}
24963
24964/// ContractEventBody is an XDR NestedUnion defines as:
24965///
24966/// ```text
24967/// union switch (int v)
24968///     {
24969///     case 0:
24970///         struct
24971///         {
24972///             SCVal topics<>;
24973///             SCVal data;
24974///         } v0;
24975///     }
24976/// ```
24977///
24978// union with discriminant i32
24979#[cfg_eval::cfg_eval]
24980#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
24981#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24982#[cfg_attr(
24983    all(feature = "serde", feature = "alloc"),
24984    serde_with::serde_as,
24985    derive(serde::Serialize, serde::Deserialize),
24986    serde(rename_all = "snake_case")
24987)]
24988#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
24989#[allow(clippy::large_enum_variant)]
24990pub enum ContractEventBody {
24991    V0(ContractEventV0),
24992}
24993
24994#[cfg(feature = "alloc")]
24995impl Default for ContractEventBody {
24996    fn default() -> Self {
24997        Self::V0(ContractEventV0::default())
24998    }
24999}
25000
25001impl ContractEventBody {
25002    pub const VARIANTS: [i32; 1] = [0];
25003    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
25004
25005    #[must_use]
25006    pub const fn name(&self) -> &'static str {
25007        match self {
25008            Self::V0(_) => "V0",
25009        }
25010    }
25011
25012    #[must_use]
25013    pub const fn discriminant(&self) -> i32 {
25014        #[allow(clippy::match_same_arms)]
25015        match self {
25016            Self::V0(_) => 0,
25017        }
25018    }
25019
25020    #[must_use]
25021    pub const fn variants() -> [i32; 1] {
25022        Self::VARIANTS
25023    }
25024}
25025
25026impl Name for ContractEventBody {
25027    #[must_use]
25028    fn name(&self) -> &'static str {
25029        Self::name(self)
25030    }
25031}
25032
25033impl Discriminant<i32> for ContractEventBody {
25034    #[must_use]
25035    fn discriminant(&self) -> i32 {
25036        Self::discriminant(self)
25037    }
25038}
25039
25040impl Variants<i32> for ContractEventBody {
25041    fn variants() -> slice::Iter<'static, i32> {
25042        Self::VARIANTS.iter()
25043    }
25044}
25045
25046impl Union<i32> for ContractEventBody {}
25047
25048impl ReadXdr for ContractEventBody {
25049    #[cfg(feature = "std")]
25050    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25051        r.with_limited_depth(|r| {
25052            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
25053            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
25054            let v = match dv {
25055                0 => Self::V0(ContractEventV0::read_xdr(r)?),
25056                #[allow(unreachable_patterns)]
25057                _ => return Err(Error::Invalid),
25058            };
25059            Ok(v)
25060        })
25061    }
25062}
25063
25064impl WriteXdr for ContractEventBody {
25065    #[cfg(feature = "std")]
25066    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25067        w.with_limited_depth(|w| {
25068            self.discriminant().write_xdr(w)?;
25069            #[allow(clippy::match_same_arms)]
25070            match self {
25071                Self::V0(v) => v.write_xdr(w)?,
25072            };
25073            Ok(())
25074        })
25075    }
25076}
25077
25078/// ContractEvent is an XDR Struct defines as:
25079///
25080/// ```text
25081/// struct ContractEvent
25082/// {
25083///     // We can use this to add more fields, or because it
25084///     // is first, to change ContractEvent into a union.
25085///     ExtensionPoint ext;
25086///
25087///     ContractID* contractID;
25088///     ContractEventType type;
25089///
25090///     union switch (int v)
25091///     {
25092///     case 0:
25093///         struct
25094///         {
25095///             SCVal topics<>;
25096///             SCVal data;
25097///         } v0;
25098///     }
25099///     body;
25100/// };
25101/// ```
25102///
25103#[cfg_attr(feature = "alloc", derive(Default))]
25104#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25105#[cfg_eval::cfg_eval]
25106#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25107#[cfg_attr(
25108    all(feature = "serde", feature = "alloc"),
25109    serde_with::serde_as,
25110    derive(serde::Serialize, serde::Deserialize),
25111    serde(rename_all = "snake_case")
25112)]
25113#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25114pub struct ContractEvent {
25115    pub ext: ExtensionPoint,
25116    pub contract_id: Option<ContractId>,
25117    pub type_: ContractEventType,
25118    pub body: ContractEventBody,
25119}
25120
25121impl ReadXdr for ContractEvent {
25122    #[cfg(feature = "std")]
25123    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25124        r.with_limited_depth(|r| {
25125            Ok(Self {
25126                ext: ExtensionPoint::read_xdr(r)?,
25127                contract_id: Option::<ContractId>::read_xdr(r)?,
25128                type_: ContractEventType::read_xdr(r)?,
25129                body: ContractEventBody::read_xdr(r)?,
25130            })
25131        })
25132    }
25133}
25134
25135impl WriteXdr for ContractEvent {
25136    #[cfg(feature = "std")]
25137    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25138        w.with_limited_depth(|w| {
25139            self.ext.write_xdr(w)?;
25140            self.contract_id.write_xdr(w)?;
25141            self.type_.write_xdr(w)?;
25142            self.body.write_xdr(w)?;
25143            Ok(())
25144        })
25145    }
25146}
25147
25148/// DiagnosticEvent is an XDR Struct defines as:
25149///
25150/// ```text
25151/// struct DiagnosticEvent
25152/// {
25153///     bool inSuccessfulContractCall;
25154///     ContractEvent event;
25155/// };
25156/// ```
25157///
25158#[cfg_attr(feature = "alloc", derive(Default))]
25159#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25160#[cfg_eval::cfg_eval]
25161#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25162#[cfg_attr(
25163    all(feature = "serde", feature = "alloc"),
25164    serde_with::serde_as,
25165    derive(serde::Serialize, serde::Deserialize),
25166    serde(rename_all = "snake_case")
25167)]
25168#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25169pub struct DiagnosticEvent {
25170    pub in_successful_contract_call: bool,
25171    pub event: ContractEvent,
25172}
25173
25174impl ReadXdr for DiagnosticEvent {
25175    #[cfg(feature = "std")]
25176    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25177        r.with_limited_depth(|r| {
25178            Ok(Self {
25179                in_successful_contract_call: bool::read_xdr(r)?,
25180                event: ContractEvent::read_xdr(r)?,
25181            })
25182        })
25183    }
25184}
25185
25186impl WriteXdr for DiagnosticEvent {
25187    #[cfg(feature = "std")]
25188    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25189        w.with_limited_depth(|w| {
25190            self.in_successful_contract_call.write_xdr(w)?;
25191            self.event.write_xdr(w)?;
25192            Ok(())
25193        })
25194    }
25195}
25196
25197/// SorobanTransactionMetaExtV1 is an XDR Struct defines as:
25198///
25199/// ```text
25200/// struct SorobanTransactionMetaExtV1
25201/// {
25202///     ExtensionPoint ext;
25203///
25204///     // The following are the components of the overall Soroban resource fee
25205///     // charged for the transaction.
25206///     // The following relation holds:
25207///     // `resourceFeeCharged = totalNonRefundableResourceFeeCharged + totalRefundableResourceFeeCharged`
25208///     // where `resourceFeeCharged` is the overall fee charged for the
25209///     // transaction. Also, `resourceFeeCharged` <= `sorobanData.resourceFee`
25210///     // i.e.we never charge more than the declared resource fee.
25211///     // The inclusion fee for charged the Soroban transaction can be found using
25212///     // the following equation:
25213///     // `result.feeCharged = resourceFeeCharged + inclusionFeeCharged`.
25214///
25215///     // Total amount (in stroops) that has been charged for non-refundable
25216///     // Soroban resources.
25217///     // Non-refundable resources are charged based on the usage declared in
25218///     // the transaction envelope (such as `instructions`, `readBytes` etc.) and
25219///     // is charged regardless of the success of the transaction.
25220///     int64 totalNonRefundableResourceFeeCharged;
25221///     // Total amount (in stroops) that has been charged for refundable
25222///     // Soroban resource fees.
25223///     // Currently this comprises the rent fee (`rentFeeCharged`) and the
25224///     // fee for the events and return value.
25225///     // Refundable resources are charged based on the actual resources usage.
25226///     // Since currently refundable resources are only used for the successful
25227///     // transactions, this will be `0` for failed transactions.
25228///     int64 totalRefundableResourceFeeCharged;
25229///     // Amount (in stroops) that has been charged for rent.
25230///     // This is a part of `totalNonRefundableResourceFeeCharged`.
25231///     int64 rentFeeCharged;
25232/// };
25233/// ```
25234///
25235#[cfg_attr(feature = "alloc", derive(Default))]
25236#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25237#[cfg_eval::cfg_eval]
25238#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25239#[cfg_attr(
25240    all(feature = "serde", feature = "alloc"),
25241    serde_with::serde_as,
25242    derive(serde::Serialize, serde::Deserialize),
25243    serde(rename_all = "snake_case")
25244)]
25245#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25246pub struct SorobanTransactionMetaExtV1 {
25247    pub ext: ExtensionPoint,
25248    #[cfg_attr(
25249        all(feature = "serde", feature = "alloc"),
25250        serde_as(as = "NumberOrString")
25251    )]
25252    pub total_non_refundable_resource_fee_charged: i64,
25253    #[cfg_attr(
25254        all(feature = "serde", feature = "alloc"),
25255        serde_as(as = "NumberOrString")
25256    )]
25257    pub total_refundable_resource_fee_charged: i64,
25258    #[cfg_attr(
25259        all(feature = "serde", feature = "alloc"),
25260        serde_as(as = "NumberOrString")
25261    )]
25262    pub rent_fee_charged: i64,
25263}
25264
25265impl ReadXdr for SorobanTransactionMetaExtV1 {
25266    #[cfg(feature = "std")]
25267    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25268        r.with_limited_depth(|r| {
25269            Ok(Self {
25270                ext: ExtensionPoint::read_xdr(r)?,
25271                total_non_refundable_resource_fee_charged: i64::read_xdr(r)?,
25272                total_refundable_resource_fee_charged: i64::read_xdr(r)?,
25273                rent_fee_charged: i64::read_xdr(r)?,
25274            })
25275        })
25276    }
25277}
25278
25279impl WriteXdr for SorobanTransactionMetaExtV1 {
25280    #[cfg(feature = "std")]
25281    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25282        w.with_limited_depth(|w| {
25283            self.ext.write_xdr(w)?;
25284            self.total_non_refundable_resource_fee_charged
25285                .write_xdr(w)?;
25286            self.total_refundable_resource_fee_charged.write_xdr(w)?;
25287            self.rent_fee_charged.write_xdr(w)?;
25288            Ok(())
25289        })
25290    }
25291}
25292
25293/// SorobanTransactionMetaExt is an XDR Union defines as:
25294///
25295/// ```text
25296/// union SorobanTransactionMetaExt switch (int v)
25297/// {
25298/// case 0:
25299///     void;
25300/// case 1:
25301///     SorobanTransactionMetaExtV1 v1;
25302/// };
25303/// ```
25304///
25305// union with discriminant i32
25306#[cfg_eval::cfg_eval]
25307#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25308#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25309#[cfg_attr(
25310    all(feature = "serde", feature = "alloc"),
25311    serde_with::serde_as,
25312    derive(serde::Serialize, serde::Deserialize),
25313    serde(rename_all = "snake_case")
25314)]
25315#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25316#[allow(clippy::large_enum_variant)]
25317pub enum SorobanTransactionMetaExt {
25318    V0,
25319    V1(SorobanTransactionMetaExtV1),
25320}
25321
25322#[cfg(feature = "alloc")]
25323impl Default for SorobanTransactionMetaExt {
25324    fn default() -> Self {
25325        Self::V0
25326    }
25327}
25328
25329impl SorobanTransactionMetaExt {
25330    pub const VARIANTS: [i32; 2] = [0, 1];
25331    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
25332
25333    #[must_use]
25334    pub const fn name(&self) -> &'static str {
25335        match self {
25336            Self::V0 => "V0",
25337            Self::V1(_) => "V1",
25338        }
25339    }
25340
25341    #[must_use]
25342    pub const fn discriminant(&self) -> i32 {
25343        #[allow(clippy::match_same_arms)]
25344        match self {
25345            Self::V0 => 0,
25346            Self::V1(_) => 1,
25347        }
25348    }
25349
25350    #[must_use]
25351    pub const fn variants() -> [i32; 2] {
25352        Self::VARIANTS
25353    }
25354}
25355
25356impl Name for SorobanTransactionMetaExt {
25357    #[must_use]
25358    fn name(&self) -> &'static str {
25359        Self::name(self)
25360    }
25361}
25362
25363impl Discriminant<i32> for SorobanTransactionMetaExt {
25364    #[must_use]
25365    fn discriminant(&self) -> i32 {
25366        Self::discriminant(self)
25367    }
25368}
25369
25370impl Variants<i32> for SorobanTransactionMetaExt {
25371    fn variants() -> slice::Iter<'static, i32> {
25372        Self::VARIANTS.iter()
25373    }
25374}
25375
25376impl Union<i32> for SorobanTransactionMetaExt {}
25377
25378impl ReadXdr for SorobanTransactionMetaExt {
25379    #[cfg(feature = "std")]
25380    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25381        r.with_limited_depth(|r| {
25382            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
25383            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
25384            let v = match dv {
25385                0 => Self::V0,
25386                1 => Self::V1(SorobanTransactionMetaExtV1::read_xdr(r)?),
25387                #[allow(unreachable_patterns)]
25388                _ => return Err(Error::Invalid),
25389            };
25390            Ok(v)
25391        })
25392    }
25393}
25394
25395impl WriteXdr for SorobanTransactionMetaExt {
25396    #[cfg(feature = "std")]
25397    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25398        w.with_limited_depth(|w| {
25399            self.discriminant().write_xdr(w)?;
25400            #[allow(clippy::match_same_arms)]
25401            match self {
25402                Self::V0 => ().write_xdr(w)?,
25403                Self::V1(v) => v.write_xdr(w)?,
25404            };
25405            Ok(())
25406        })
25407    }
25408}
25409
25410/// SorobanTransactionMeta is an XDR Struct defines as:
25411///
25412/// ```text
25413/// struct SorobanTransactionMeta
25414/// {
25415///     SorobanTransactionMetaExt ext;
25416///
25417///     ContractEvent events<>;             // custom events populated by the
25418///                                         // contracts themselves.
25419///     SCVal returnValue;                  // return value of the host fn invocation
25420///
25421///     // Diagnostics events that are not hashed.
25422///     // This will contain all contract and diagnostic events. Even ones
25423///     // that were emitted in a failed contract call.
25424///     DiagnosticEvent diagnosticEvents<>;
25425/// };
25426/// ```
25427///
25428#[cfg_attr(feature = "alloc", derive(Default))]
25429#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25430#[cfg_eval::cfg_eval]
25431#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25432#[cfg_attr(
25433    all(feature = "serde", feature = "alloc"),
25434    serde_with::serde_as,
25435    derive(serde::Serialize, serde::Deserialize),
25436    serde(rename_all = "snake_case")
25437)]
25438#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25439pub struct SorobanTransactionMeta {
25440    pub ext: SorobanTransactionMetaExt,
25441    pub events: VecM<ContractEvent>,
25442    pub return_value: ScVal,
25443    pub diagnostic_events: VecM<DiagnosticEvent>,
25444}
25445
25446impl ReadXdr for SorobanTransactionMeta {
25447    #[cfg(feature = "std")]
25448    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25449        r.with_limited_depth(|r| {
25450            Ok(Self {
25451                ext: SorobanTransactionMetaExt::read_xdr(r)?,
25452                events: VecM::<ContractEvent>::read_xdr(r)?,
25453                return_value: ScVal::read_xdr(r)?,
25454                diagnostic_events: VecM::<DiagnosticEvent>::read_xdr(r)?,
25455            })
25456        })
25457    }
25458}
25459
25460impl WriteXdr for SorobanTransactionMeta {
25461    #[cfg(feature = "std")]
25462    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25463        w.with_limited_depth(|w| {
25464            self.ext.write_xdr(w)?;
25465            self.events.write_xdr(w)?;
25466            self.return_value.write_xdr(w)?;
25467            self.diagnostic_events.write_xdr(w)?;
25468            Ok(())
25469        })
25470    }
25471}
25472
25473/// TransactionMetaV3 is an XDR Struct defines as:
25474///
25475/// ```text
25476/// struct TransactionMetaV3
25477/// {
25478///     ExtensionPoint ext;
25479///
25480///     LedgerEntryChanges txChangesBefore;  // tx level changes before operations
25481///                                          // are applied if any
25482///     OperationMeta operations<>;          // meta for each operation
25483///     LedgerEntryChanges txChangesAfter;   // tx level changes after operations are
25484///                                          // applied if any
25485///     SorobanTransactionMeta* sorobanMeta; // Soroban-specific meta (only for
25486///                                          // Soroban transactions).
25487/// };
25488/// ```
25489///
25490#[cfg_attr(feature = "alloc", derive(Default))]
25491#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25492#[cfg_eval::cfg_eval]
25493#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25494#[cfg_attr(
25495    all(feature = "serde", feature = "alloc"),
25496    serde_with::serde_as,
25497    derive(serde::Serialize, serde::Deserialize),
25498    serde(rename_all = "snake_case")
25499)]
25500#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25501pub struct TransactionMetaV3 {
25502    pub ext: ExtensionPoint,
25503    pub tx_changes_before: LedgerEntryChanges,
25504    pub operations: VecM<OperationMeta>,
25505    pub tx_changes_after: LedgerEntryChanges,
25506    pub soroban_meta: Option<SorobanTransactionMeta>,
25507}
25508
25509impl ReadXdr for TransactionMetaV3 {
25510    #[cfg(feature = "std")]
25511    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25512        r.with_limited_depth(|r| {
25513            Ok(Self {
25514                ext: ExtensionPoint::read_xdr(r)?,
25515                tx_changes_before: LedgerEntryChanges::read_xdr(r)?,
25516                operations: VecM::<OperationMeta>::read_xdr(r)?,
25517                tx_changes_after: LedgerEntryChanges::read_xdr(r)?,
25518                soroban_meta: Option::<SorobanTransactionMeta>::read_xdr(r)?,
25519            })
25520        })
25521    }
25522}
25523
25524impl WriteXdr for TransactionMetaV3 {
25525    #[cfg(feature = "std")]
25526    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25527        w.with_limited_depth(|w| {
25528            self.ext.write_xdr(w)?;
25529            self.tx_changes_before.write_xdr(w)?;
25530            self.operations.write_xdr(w)?;
25531            self.tx_changes_after.write_xdr(w)?;
25532            self.soroban_meta.write_xdr(w)?;
25533            Ok(())
25534        })
25535    }
25536}
25537
25538/// OperationMetaV2 is an XDR Struct defines as:
25539///
25540/// ```text
25541/// struct OperationMetaV2
25542/// {
25543///     ExtensionPoint ext;
25544///
25545///     LedgerEntryChanges changes;
25546///
25547///     ContractEvent events<>;
25548/// };
25549/// ```
25550///
25551#[cfg_attr(feature = "alloc", derive(Default))]
25552#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25553#[cfg_eval::cfg_eval]
25554#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25555#[cfg_attr(
25556    all(feature = "serde", feature = "alloc"),
25557    serde_with::serde_as,
25558    derive(serde::Serialize, serde::Deserialize),
25559    serde(rename_all = "snake_case")
25560)]
25561#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25562pub struct OperationMetaV2 {
25563    pub ext: ExtensionPoint,
25564    pub changes: LedgerEntryChanges,
25565    pub events: VecM<ContractEvent>,
25566}
25567
25568impl ReadXdr for OperationMetaV2 {
25569    #[cfg(feature = "std")]
25570    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25571        r.with_limited_depth(|r| {
25572            Ok(Self {
25573                ext: ExtensionPoint::read_xdr(r)?,
25574                changes: LedgerEntryChanges::read_xdr(r)?,
25575                events: VecM::<ContractEvent>::read_xdr(r)?,
25576            })
25577        })
25578    }
25579}
25580
25581impl WriteXdr for OperationMetaV2 {
25582    #[cfg(feature = "std")]
25583    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25584        w.with_limited_depth(|w| {
25585            self.ext.write_xdr(w)?;
25586            self.changes.write_xdr(w)?;
25587            self.events.write_xdr(w)?;
25588            Ok(())
25589        })
25590    }
25591}
25592
25593/// SorobanTransactionMetaV2 is an XDR Struct defines as:
25594///
25595/// ```text
25596/// struct SorobanTransactionMetaV2
25597/// {
25598///     SorobanTransactionMetaExt ext;
25599///
25600///     SCVal* returnValue;
25601/// };
25602/// ```
25603///
25604#[cfg_attr(feature = "alloc", derive(Default))]
25605#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25606#[cfg_eval::cfg_eval]
25607#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25608#[cfg_attr(
25609    all(feature = "serde", feature = "alloc"),
25610    serde_with::serde_as,
25611    derive(serde::Serialize, serde::Deserialize),
25612    serde(rename_all = "snake_case")
25613)]
25614#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25615pub struct SorobanTransactionMetaV2 {
25616    pub ext: SorobanTransactionMetaExt,
25617    pub return_value: Option<ScVal>,
25618}
25619
25620impl ReadXdr for SorobanTransactionMetaV2 {
25621    #[cfg(feature = "std")]
25622    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25623        r.with_limited_depth(|r| {
25624            Ok(Self {
25625                ext: SorobanTransactionMetaExt::read_xdr(r)?,
25626                return_value: Option::<ScVal>::read_xdr(r)?,
25627            })
25628        })
25629    }
25630}
25631
25632impl WriteXdr for SorobanTransactionMetaV2 {
25633    #[cfg(feature = "std")]
25634    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25635        w.with_limited_depth(|w| {
25636            self.ext.write_xdr(w)?;
25637            self.return_value.write_xdr(w)?;
25638            Ok(())
25639        })
25640    }
25641}
25642
25643/// TransactionEventStage is an XDR Enum defines as:
25644///
25645/// ```text
25646/// enum TransactionEventStage {
25647///     // The event has happened before any one of the transactions has its
25648///     // operations applied.
25649///     TRANSACTION_EVENT_STAGE_BEFORE_ALL_TXS = 0,
25650///     // The event has happened immediately after operations of the transaction
25651///     // have been applied.
25652///     TRANSACTION_EVENT_STAGE_AFTER_TX = 1,
25653///     // The event has happened after every transaction had its operations
25654///     // applied.
25655///     TRANSACTION_EVENT_STAGE_AFTER_ALL_TXS = 2
25656/// };
25657/// ```
25658///
25659// enum
25660#[cfg_attr(feature = "alloc", derive(Default))]
25661#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25662#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25663#[cfg_attr(
25664    all(feature = "serde", feature = "alloc"),
25665    derive(serde::Serialize, serde::Deserialize),
25666    serde(rename_all = "snake_case")
25667)]
25668#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25669#[repr(i32)]
25670pub enum TransactionEventStage {
25671    #[cfg_attr(feature = "alloc", default)]
25672    BeforeAllTxs = 0,
25673    AfterTx = 1,
25674    AfterAllTxs = 2,
25675}
25676
25677impl TransactionEventStage {
25678    pub const VARIANTS: [TransactionEventStage; 3] = [
25679        TransactionEventStage::BeforeAllTxs,
25680        TransactionEventStage::AfterTx,
25681        TransactionEventStage::AfterAllTxs,
25682    ];
25683    pub const VARIANTS_STR: [&'static str; 3] = ["BeforeAllTxs", "AfterTx", "AfterAllTxs"];
25684
25685    #[must_use]
25686    pub const fn name(&self) -> &'static str {
25687        match self {
25688            Self::BeforeAllTxs => "BeforeAllTxs",
25689            Self::AfterTx => "AfterTx",
25690            Self::AfterAllTxs => "AfterAllTxs",
25691        }
25692    }
25693
25694    #[must_use]
25695    pub const fn variants() -> [TransactionEventStage; 3] {
25696        Self::VARIANTS
25697    }
25698}
25699
25700impl Name for TransactionEventStage {
25701    #[must_use]
25702    fn name(&self) -> &'static str {
25703        Self::name(self)
25704    }
25705}
25706
25707impl Variants<TransactionEventStage> for TransactionEventStage {
25708    fn variants() -> slice::Iter<'static, TransactionEventStage> {
25709        Self::VARIANTS.iter()
25710    }
25711}
25712
25713impl Enum for TransactionEventStage {}
25714
25715impl fmt::Display for TransactionEventStage {
25716    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25717        f.write_str(self.name())
25718    }
25719}
25720
25721impl TryFrom<i32> for TransactionEventStage {
25722    type Error = Error;
25723
25724    fn try_from(i: i32) -> Result<Self, Error> {
25725        let e = match i {
25726            0 => TransactionEventStage::BeforeAllTxs,
25727            1 => TransactionEventStage::AfterTx,
25728            2 => TransactionEventStage::AfterAllTxs,
25729            #[allow(unreachable_patterns)]
25730            _ => return Err(Error::Invalid),
25731        };
25732        Ok(e)
25733    }
25734}
25735
25736impl From<TransactionEventStage> for i32 {
25737    #[must_use]
25738    fn from(e: TransactionEventStage) -> Self {
25739        e as Self
25740    }
25741}
25742
25743impl ReadXdr for TransactionEventStage {
25744    #[cfg(feature = "std")]
25745    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25746        r.with_limited_depth(|r| {
25747            let e = i32::read_xdr(r)?;
25748            let v: Self = e.try_into()?;
25749            Ok(v)
25750        })
25751    }
25752}
25753
25754impl WriteXdr for TransactionEventStage {
25755    #[cfg(feature = "std")]
25756    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25757        w.with_limited_depth(|w| {
25758            let i: i32 = (*self).into();
25759            i.write_xdr(w)
25760        })
25761    }
25762}
25763
25764/// TransactionEvent is an XDR Struct defines as:
25765///
25766/// ```text
25767/// struct TransactionEvent {    
25768///     TransactionEventStage stage;  // Stage at which an event has occurred.
25769///     ContractEvent event;  // The contract event that has occurred.
25770/// };
25771/// ```
25772///
25773#[cfg_attr(feature = "alloc", derive(Default))]
25774#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25775#[cfg_eval::cfg_eval]
25776#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25777#[cfg_attr(
25778    all(feature = "serde", feature = "alloc"),
25779    serde_with::serde_as,
25780    derive(serde::Serialize, serde::Deserialize),
25781    serde(rename_all = "snake_case")
25782)]
25783#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25784pub struct TransactionEvent {
25785    pub stage: TransactionEventStage,
25786    pub event: ContractEvent,
25787}
25788
25789impl ReadXdr for TransactionEvent {
25790    #[cfg(feature = "std")]
25791    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25792        r.with_limited_depth(|r| {
25793            Ok(Self {
25794                stage: TransactionEventStage::read_xdr(r)?,
25795                event: ContractEvent::read_xdr(r)?,
25796            })
25797        })
25798    }
25799}
25800
25801impl WriteXdr for TransactionEvent {
25802    #[cfg(feature = "std")]
25803    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25804        w.with_limited_depth(|w| {
25805            self.stage.write_xdr(w)?;
25806            self.event.write_xdr(w)?;
25807            Ok(())
25808        })
25809    }
25810}
25811
25812/// TransactionMetaV4 is an XDR Struct defines as:
25813///
25814/// ```text
25815/// struct TransactionMetaV4
25816/// {
25817///     ExtensionPoint ext;
25818///
25819///     LedgerEntryChanges txChangesBefore;  // tx level changes before operations
25820///                                          // are applied if any
25821///     OperationMetaV2 operations<>;        // meta for each operation
25822///     LedgerEntryChanges txChangesAfter;   // tx level changes after operations are
25823///                                          // applied if any
25824///     SorobanTransactionMetaV2* sorobanMeta; // Soroban-specific meta (only for
25825///                                            // Soroban transactions).
25826///
25827///     TransactionEvent events<>; // Used for transaction-level events (like fee payment)
25828///     DiagnosticEvent diagnosticEvents<>; // Used for all diagnostic information
25829/// };
25830/// ```
25831///
25832#[cfg_attr(feature = "alloc", derive(Default))]
25833#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25834#[cfg_eval::cfg_eval]
25835#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25836#[cfg_attr(
25837    all(feature = "serde", feature = "alloc"),
25838    serde_with::serde_as,
25839    derive(serde::Serialize, serde::Deserialize),
25840    serde(rename_all = "snake_case")
25841)]
25842#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25843pub struct TransactionMetaV4 {
25844    pub ext: ExtensionPoint,
25845    pub tx_changes_before: LedgerEntryChanges,
25846    pub operations: VecM<OperationMetaV2>,
25847    pub tx_changes_after: LedgerEntryChanges,
25848    pub soroban_meta: Option<SorobanTransactionMetaV2>,
25849    pub events: VecM<TransactionEvent>,
25850    pub diagnostic_events: VecM<DiagnosticEvent>,
25851}
25852
25853impl ReadXdr for TransactionMetaV4 {
25854    #[cfg(feature = "std")]
25855    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25856        r.with_limited_depth(|r| {
25857            Ok(Self {
25858                ext: ExtensionPoint::read_xdr(r)?,
25859                tx_changes_before: LedgerEntryChanges::read_xdr(r)?,
25860                operations: VecM::<OperationMetaV2>::read_xdr(r)?,
25861                tx_changes_after: LedgerEntryChanges::read_xdr(r)?,
25862                soroban_meta: Option::<SorobanTransactionMetaV2>::read_xdr(r)?,
25863                events: VecM::<TransactionEvent>::read_xdr(r)?,
25864                diagnostic_events: VecM::<DiagnosticEvent>::read_xdr(r)?,
25865            })
25866        })
25867    }
25868}
25869
25870impl WriteXdr for TransactionMetaV4 {
25871    #[cfg(feature = "std")]
25872    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25873        w.with_limited_depth(|w| {
25874            self.ext.write_xdr(w)?;
25875            self.tx_changes_before.write_xdr(w)?;
25876            self.operations.write_xdr(w)?;
25877            self.tx_changes_after.write_xdr(w)?;
25878            self.soroban_meta.write_xdr(w)?;
25879            self.events.write_xdr(w)?;
25880            self.diagnostic_events.write_xdr(w)?;
25881            Ok(())
25882        })
25883    }
25884}
25885
25886/// InvokeHostFunctionSuccessPreImage is an XDR Struct defines as:
25887///
25888/// ```text
25889/// struct InvokeHostFunctionSuccessPreImage
25890/// {
25891///     SCVal returnValue;
25892///     ContractEvent events<>;
25893/// };
25894/// ```
25895///
25896#[cfg_attr(feature = "alloc", derive(Default))]
25897#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25898#[cfg_eval::cfg_eval]
25899#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25900#[cfg_attr(
25901    all(feature = "serde", feature = "alloc"),
25902    serde_with::serde_as,
25903    derive(serde::Serialize, serde::Deserialize),
25904    serde(rename_all = "snake_case")
25905)]
25906#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25907pub struct InvokeHostFunctionSuccessPreImage {
25908    pub return_value: ScVal,
25909    pub events: VecM<ContractEvent>,
25910}
25911
25912impl ReadXdr for InvokeHostFunctionSuccessPreImage {
25913    #[cfg(feature = "std")]
25914    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
25915        r.with_limited_depth(|r| {
25916            Ok(Self {
25917                return_value: ScVal::read_xdr(r)?,
25918                events: VecM::<ContractEvent>::read_xdr(r)?,
25919            })
25920        })
25921    }
25922}
25923
25924impl WriteXdr for InvokeHostFunctionSuccessPreImage {
25925    #[cfg(feature = "std")]
25926    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
25927        w.with_limited_depth(|w| {
25928            self.return_value.write_xdr(w)?;
25929            self.events.write_xdr(w)?;
25930            Ok(())
25931        })
25932    }
25933}
25934
25935/// TransactionMeta is an XDR Union defines as:
25936///
25937/// ```text
25938/// union TransactionMeta switch (int v)
25939/// {
25940/// case 0:
25941///     OperationMeta operations<>;
25942/// case 1:
25943///     TransactionMetaV1 v1;
25944/// case 2:
25945///     TransactionMetaV2 v2;
25946/// case 3:
25947///     TransactionMetaV3 v3;
25948/// case 4:
25949///     TransactionMetaV4 v4;
25950/// };
25951/// ```
25952///
25953// union with discriminant i32
25954#[cfg_eval::cfg_eval]
25955#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
25956#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
25957#[cfg_attr(
25958    all(feature = "serde", feature = "alloc"),
25959    serde_with::serde_as,
25960    derive(serde::Serialize, serde::Deserialize),
25961    serde(rename_all = "snake_case")
25962)]
25963#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
25964#[allow(clippy::large_enum_variant)]
25965pub enum TransactionMeta {
25966    V0(VecM<OperationMeta>),
25967    V1(TransactionMetaV1),
25968    V2(TransactionMetaV2),
25969    V3(TransactionMetaV3),
25970    V4(TransactionMetaV4),
25971}
25972
25973#[cfg(feature = "alloc")]
25974impl Default for TransactionMeta {
25975    fn default() -> Self {
25976        Self::V0(VecM::<OperationMeta>::default())
25977    }
25978}
25979
25980impl TransactionMeta {
25981    pub const VARIANTS: [i32; 5] = [0, 1, 2, 3, 4];
25982    pub const VARIANTS_STR: [&'static str; 5] = ["V0", "V1", "V2", "V3", "V4"];
25983
25984    #[must_use]
25985    pub const fn name(&self) -> &'static str {
25986        match self {
25987            Self::V0(_) => "V0",
25988            Self::V1(_) => "V1",
25989            Self::V2(_) => "V2",
25990            Self::V3(_) => "V3",
25991            Self::V4(_) => "V4",
25992        }
25993    }
25994
25995    #[must_use]
25996    pub const fn discriminant(&self) -> i32 {
25997        #[allow(clippy::match_same_arms)]
25998        match self {
25999            Self::V0(_) => 0,
26000            Self::V1(_) => 1,
26001            Self::V2(_) => 2,
26002            Self::V3(_) => 3,
26003            Self::V4(_) => 4,
26004        }
26005    }
26006
26007    #[must_use]
26008    pub const fn variants() -> [i32; 5] {
26009        Self::VARIANTS
26010    }
26011}
26012
26013impl Name for TransactionMeta {
26014    #[must_use]
26015    fn name(&self) -> &'static str {
26016        Self::name(self)
26017    }
26018}
26019
26020impl Discriminant<i32> for TransactionMeta {
26021    #[must_use]
26022    fn discriminant(&self) -> i32 {
26023        Self::discriminant(self)
26024    }
26025}
26026
26027impl Variants<i32> for TransactionMeta {
26028    fn variants() -> slice::Iter<'static, i32> {
26029        Self::VARIANTS.iter()
26030    }
26031}
26032
26033impl Union<i32> for TransactionMeta {}
26034
26035impl ReadXdr for TransactionMeta {
26036    #[cfg(feature = "std")]
26037    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26038        r.with_limited_depth(|r| {
26039            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
26040            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
26041            let v = match dv {
26042                0 => Self::V0(VecM::<OperationMeta>::read_xdr(r)?),
26043                1 => Self::V1(TransactionMetaV1::read_xdr(r)?),
26044                2 => Self::V2(TransactionMetaV2::read_xdr(r)?),
26045                3 => Self::V3(TransactionMetaV3::read_xdr(r)?),
26046                4 => Self::V4(TransactionMetaV4::read_xdr(r)?),
26047                #[allow(unreachable_patterns)]
26048                _ => return Err(Error::Invalid),
26049            };
26050            Ok(v)
26051        })
26052    }
26053}
26054
26055impl WriteXdr for TransactionMeta {
26056    #[cfg(feature = "std")]
26057    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26058        w.with_limited_depth(|w| {
26059            self.discriminant().write_xdr(w)?;
26060            #[allow(clippy::match_same_arms)]
26061            match self {
26062                Self::V0(v) => v.write_xdr(w)?,
26063                Self::V1(v) => v.write_xdr(w)?,
26064                Self::V2(v) => v.write_xdr(w)?,
26065                Self::V3(v) => v.write_xdr(w)?,
26066                Self::V4(v) => v.write_xdr(w)?,
26067            };
26068            Ok(())
26069        })
26070    }
26071}
26072
26073/// TransactionResultMeta is an XDR Struct defines as:
26074///
26075/// ```text
26076/// struct TransactionResultMeta
26077/// {
26078///     TransactionResultPair result;
26079///     LedgerEntryChanges feeProcessing;
26080///     TransactionMeta txApplyProcessing;
26081/// };
26082/// ```
26083///
26084#[cfg_attr(feature = "alloc", derive(Default))]
26085#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26086#[cfg_eval::cfg_eval]
26087#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26088#[cfg_attr(
26089    all(feature = "serde", feature = "alloc"),
26090    serde_with::serde_as,
26091    derive(serde::Serialize, serde::Deserialize),
26092    serde(rename_all = "snake_case")
26093)]
26094#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26095pub struct TransactionResultMeta {
26096    pub result: TransactionResultPair,
26097    pub fee_processing: LedgerEntryChanges,
26098    pub tx_apply_processing: TransactionMeta,
26099}
26100
26101impl ReadXdr for TransactionResultMeta {
26102    #[cfg(feature = "std")]
26103    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26104        r.with_limited_depth(|r| {
26105            Ok(Self {
26106                result: TransactionResultPair::read_xdr(r)?,
26107                fee_processing: LedgerEntryChanges::read_xdr(r)?,
26108                tx_apply_processing: TransactionMeta::read_xdr(r)?,
26109            })
26110        })
26111    }
26112}
26113
26114impl WriteXdr for TransactionResultMeta {
26115    #[cfg(feature = "std")]
26116    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26117        w.with_limited_depth(|w| {
26118            self.result.write_xdr(w)?;
26119            self.fee_processing.write_xdr(w)?;
26120            self.tx_apply_processing.write_xdr(w)?;
26121            Ok(())
26122        })
26123    }
26124}
26125
26126/// TransactionResultMetaV1 is an XDR Struct defines as:
26127///
26128/// ```text
26129/// struct TransactionResultMetaV1
26130/// {
26131///     ExtensionPoint ext;
26132///
26133///     TransactionResultPair result;
26134///     LedgerEntryChanges feeProcessing;
26135///     TransactionMeta txApplyProcessing;
26136///
26137///     LedgerEntryChanges postTxApplyFeeProcessing;
26138/// };
26139/// ```
26140///
26141#[cfg_attr(feature = "alloc", derive(Default))]
26142#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26143#[cfg_eval::cfg_eval]
26144#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26145#[cfg_attr(
26146    all(feature = "serde", feature = "alloc"),
26147    serde_with::serde_as,
26148    derive(serde::Serialize, serde::Deserialize),
26149    serde(rename_all = "snake_case")
26150)]
26151#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26152pub struct TransactionResultMetaV1 {
26153    pub ext: ExtensionPoint,
26154    pub result: TransactionResultPair,
26155    pub fee_processing: LedgerEntryChanges,
26156    pub tx_apply_processing: TransactionMeta,
26157    pub post_tx_apply_fee_processing: LedgerEntryChanges,
26158}
26159
26160impl ReadXdr for TransactionResultMetaV1 {
26161    #[cfg(feature = "std")]
26162    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26163        r.with_limited_depth(|r| {
26164            Ok(Self {
26165                ext: ExtensionPoint::read_xdr(r)?,
26166                result: TransactionResultPair::read_xdr(r)?,
26167                fee_processing: LedgerEntryChanges::read_xdr(r)?,
26168                tx_apply_processing: TransactionMeta::read_xdr(r)?,
26169                post_tx_apply_fee_processing: LedgerEntryChanges::read_xdr(r)?,
26170            })
26171        })
26172    }
26173}
26174
26175impl WriteXdr for TransactionResultMetaV1 {
26176    #[cfg(feature = "std")]
26177    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26178        w.with_limited_depth(|w| {
26179            self.ext.write_xdr(w)?;
26180            self.result.write_xdr(w)?;
26181            self.fee_processing.write_xdr(w)?;
26182            self.tx_apply_processing.write_xdr(w)?;
26183            self.post_tx_apply_fee_processing.write_xdr(w)?;
26184            Ok(())
26185        })
26186    }
26187}
26188
26189/// UpgradeEntryMeta is an XDR Struct defines as:
26190///
26191/// ```text
26192/// struct UpgradeEntryMeta
26193/// {
26194///     LedgerUpgrade upgrade;
26195///     LedgerEntryChanges changes;
26196/// };
26197/// ```
26198///
26199#[cfg_attr(feature = "alloc", derive(Default))]
26200#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26201#[cfg_eval::cfg_eval]
26202#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26203#[cfg_attr(
26204    all(feature = "serde", feature = "alloc"),
26205    serde_with::serde_as,
26206    derive(serde::Serialize, serde::Deserialize),
26207    serde(rename_all = "snake_case")
26208)]
26209#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26210pub struct UpgradeEntryMeta {
26211    pub upgrade: LedgerUpgrade,
26212    pub changes: LedgerEntryChanges,
26213}
26214
26215impl ReadXdr for UpgradeEntryMeta {
26216    #[cfg(feature = "std")]
26217    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26218        r.with_limited_depth(|r| {
26219            Ok(Self {
26220                upgrade: LedgerUpgrade::read_xdr(r)?,
26221                changes: LedgerEntryChanges::read_xdr(r)?,
26222            })
26223        })
26224    }
26225}
26226
26227impl WriteXdr for UpgradeEntryMeta {
26228    #[cfg(feature = "std")]
26229    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26230        w.with_limited_depth(|w| {
26231            self.upgrade.write_xdr(w)?;
26232            self.changes.write_xdr(w)?;
26233            Ok(())
26234        })
26235    }
26236}
26237
26238/// LedgerCloseMetaV0 is an XDR Struct defines as:
26239///
26240/// ```text
26241/// struct LedgerCloseMetaV0
26242/// {
26243///     LedgerHeaderHistoryEntry ledgerHeader;
26244///     // NB: txSet is sorted in "Hash order"
26245///     TransactionSet txSet;
26246///
26247///     // NB: transactions are sorted in apply order here
26248///     // fees for all transactions are processed first
26249///     // followed by applying transactions
26250///     TransactionResultMeta txProcessing<>;
26251///
26252///     // upgrades are applied last
26253///     UpgradeEntryMeta upgradesProcessing<>;
26254///
26255///     // other misc information attached to the ledger close
26256///     SCPHistoryEntry scpInfo<>;
26257/// };
26258/// ```
26259///
26260#[cfg_attr(feature = "alloc", derive(Default))]
26261#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26262#[cfg_eval::cfg_eval]
26263#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26264#[cfg_attr(
26265    all(feature = "serde", feature = "alloc"),
26266    serde_with::serde_as,
26267    derive(serde::Serialize, serde::Deserialize),
26268    serde(rename_all = "snake_case")
26269)]
26270#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26271pub struct LedgerCloseMetaV0 {
26272    pub ledger_header: LedgerHeaderHistoryEntry,
26273    pub tx_set: TransactionSet,
26274    pub tx_processing: VecM<TransactionResultMeta>,
26275    pub upgrades_processing: VecM<UpgradeEntryMeta>,
26276    pub scp_info: VecM<ScpHistoryEntry>,
26277}
26278
26279impl ReadXdr for LedgerCloseMetaV0 {
26280    #[cfg(feature = "std")]
26281    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26282        r.with_limited_depth(|r| {
26283            Ok(Self {
26284                ledger_header: LedgerHeaderHistoryEntry::read_xdr(r)?,
26285                tx_set: TransactionSet::read_xdr(r)?,
26286                tx_processing: VecM::<TransactionResultMeta>::read_xdr(r)?,
26287                upgrades_processing: VecM::<UpgradeEntryMeta>::read_xdr(r)?,
26288                scp_info: VecM::<ScpHistoryEntry>::read_xdr(r)?,
26289            })
26290        })
26291    }
26292}
26293
26294impl WriteXdr for LedgerCloseMetaV0 {
26295    #[cfg(feature = "std")]
26296    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26297        w.with_limited_depth(|w| {
26298            self.ledger_header.write_xdr(w)?;
26299            self.tx_set.write_xdr(w)?;
26300            self.tx_processing.write_xdr(w)?;
26301            self.upgrades_processing.write_xdr(w)?;
26302            self.scp_info.write_xdr(w)?;
26303            Ok(())
26304        })
26305    }
26306}
26307
26308/// LedgerCloseMetaExtV1 is an XDR Struct defines as:
26309///
26310/// ```text
26311/// struct LedgerCloseMetaExtV1
26312/// {
26313///     ExtensionPoint ext;
26314///     int64 sorobanFeeWrite1KB;
26315/// };
26316/// ```
26317///
26318#[cfg_attr(feature = "alloc", derive(Default))]
26319#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26320#[cfg_eval::cfg_eval]
26321#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26322#[cfg_attr(
26323    all(feature = "serde", feature = "alloc"),
26324    serde_with::serde_as,
26325    derive(serde::Serialize, serde::Deserialize),
26326    serde(rename_all = "snake_case")
26327)]
26328#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26329pub struct LedgerCloseMetaExtV1 {
26330    pub ext: ExtensionPoint,
26331    #[cfg_attr(
26332        all(feature = "serde", feature = "alloc"),
26333        serde_as(as = "NumberOrString")
26334    )]
26335    pub soroban_fee_write1_kb: i64,
26336}
26337
26338impl ReadXdr for LedgerCloseMetaExtV1 {
26339    #[cfg(feature = "std")]
26340    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26341        r.with_limited_depth(|r| {
26342            Ok(Self {
26343                ext: ExtensionPoint::read_xdr(r)?,
26344                soroban_fee_write1_kb: i64::read_xdr(r)?,
26345            })
26346        })
26347    }
26348}
26349
26350impl WriteXdr for LedgerCloseMetaExtV1 {
26351    #[cfg(feature = "std")]
26352    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26353        w.with_limited_depth(|w| {
26354            self.ext.write_xdr(w)?;
26355            self.soroban_fee_write1_kb.write_xdr(w)?;
26356            Ok(())
26357        })
26358    }
26359}
26360
26361/// LedgerCloseMetaExt is an XDR Union defines as:
26362///
26363/// ```text
26364/// union LedgerCloseMetaExt switch (int v)
26365/// {
26366/// case 0:
26367///     void;
26368/// case 1:
26369///     LedgerCloseMetaExtV1 v1;
26370/// };
26371/// ```
26372///
26373// union with discriminant i32
26374#[cfg_eval::cfg_eval]
26375#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26376#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26377#[cfg_attr(
26378    all(feature = "serde", feature = "alloc"),
26379    serde_with::serde_as,
26380    derive(serde::Serialize, serde::Deserialize),
26381    serde(rename_all = "snake_case")
26382)]
26383#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26384#[allow(clippy::large_enum_variant)]
26385pub enum LedgerCloseMetaExt {
26386    V0,
26387    V1(LedgerCloseMetaExtV1),
26388}
26389
26390#[cfg(feature = "alloc")]
26391impl Default for LedgerCloseMetaExt {
26392    fn default() -> Self {
26393        Self::V0
26394    }
26395}
26396
26397impl LedgerCloseMetaExt {
26398    pub const VARIANTS: [i32; 2] = [0, 1];
26399    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
26400
26401    #[must_use]
26402    pub const fn name(&self) -> &'static str {
26403        match self {
26404            Self::V0 => "V0",
26405            Self::V1(_) => "V1",
26406        }
26407    }
26408
26409    #[must_use]
26410    pub const fn discriminant(&self) -> i32 {
26411        #[allow(clippy::match_same_arms)]
26412        match self {
26413            Self::V0 => 0,
26414            Self::V1(_) => 1,
26415        }
26416    }
26417
26418    #[must_use]
26419    pub const fn variants() -> [i32; 2] {
26420        Self::VARIANTS
26421    }
26422}
26423
26424impl Name for LedgerCloseMetaExt {
26425    #[must_use]
26426    fn name(&self) -> &'static str {
26427        Self::name(self)
26428    }
26429}
26430
26431impl Discriminant<i32> for LedgerCloseMetaExt {
26432    #[must_use]
26433    fn discriminant(&self) -> i32 {
26434        Self::discriminant(self)
26435    }
26436}
26437
26438impl Variants<i32> for LedgerCloseMetaExt {
26439    fn variants() -> slice::Iter<'static, i32> {
26440        Self::VARIANTS.iter()
26441    }
26442}
26443
26444impl Union<i32> for LedgerCloseMetaExt {}
26445
26446impl ReadXdr for LedgerCloseMetaExt {
26447    #[cfg(feature = "std")]
26448    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26449        r.with_limited_depth(|r| {
26450            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
26451            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
26452            let v = match dv {
26453                0 => Self::V0,
26454                1 => Self::V1(LedgerCloseMetaExtV1::read_xdr(r)?),
26455                #[allow(unreachable_patterns)]
26456                _ => return Err(Error::Invalid),
26457            };
26458            Ok(v)
26459        })
26460    }
26461}
26462
26463impl WriteXdr for LedgerCloseMetaExt {
26464    #[cfg(feature = "std")]
26465    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26466        w.with_limited_depth(|w| {
26467            self.discriminant().write_xdr(w)?;
26468            #[allow(clippy::match_same_arms)]
26469            match self {
26470                Self::V0 => ().write_xdr(w)?,
26471                Self::V1(v) => v.write_xdr(w)?,
26472            };
26473            Ok(())
26474        })
26475    }
26476}
26477
26478/// LedgerCloseMetaV1 is an XDR Struct defines as:
26479///
26480/// ```text
26481/// struct LedgerCloseMetaV1
26482/// {
26483///     LedgerCloseMetaExt ext;
26484///
26485///     LedgerHeaderHistoryEntry ledgerHeader;
26486///
26487///     GeneralizedTransactionSet txSet;
26488///
26489///     // NB: transactions are sorted in apply order here
26490///     // fees for all transactions are processed first
26491///     // followed by applying transactions
26492///     TransactionResultMeta txProcessing<>;
26493///
26494///     // upgrades are applied last
26495///     UpgradeEntryMeta upgradesProcessing<>;
26496///
26497///     // other misc information attached to the ledger close
26498///     SCPHistoryEntry scpInfo<>;
26499///
26500///     // Size in bytes of live Soroban state, to support downstream
26501///     // systems calculating storage fees correctly.
26502///     uint64 totalByteSizeOfLiveSorobanState;
26503///
26504///     // TTL and data/code keys that have been evicted at this ledger.
26505///     LedgerKey evictedKeys<>;
26506///
26507///     // Maintained for backwards compatibility, should never be populated.
26508///     LedgerEntry unused<>;
26509/// };
26510/// ```
26511///
26512#[cfg_attr(feature = "alloc", derive(Default))]
26513#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26514#[cfg_eval::cfg_eval]
26515#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26516#[cfg_attr(
26517    all(feature = "serde", feature = "alloc"),
26518    serde_with::serde_as,
26519    derive(serde::Serialize, serde::Deserialize),
26520    serde(rename_all = "snake_case")
26521)]
26522#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26523pub struct LedgerCloseMetaV1 {
26524    pub ext: LedgerCloseMetaExt,
26525    pub ledger_header: LedgerHeaderHistoryEntry,
26526    pub tx_set: GeneralizedTransactionSet,
26527    pub tx_processing: VecM<TransactionResultMeta>,
26528    pub upgrades_processing: VecM<UpgradeEntryMeta>,
26529    pub scp_info: VecM<ScpHistoryEntry>,
26530    #[cfg_attr(
26531        all(feature = "serde", feature = "alloc"),
26532        serde_as(as = "NumberOrString")
26533    )]
26534    pub total_byte_size_of_live_soroban_state: u64,
26535    pub evicted_keys: VecM<LedgerKey>,
26536    pub unused: VecM<LedgerEntry>,
26537}
26538
26539impl ReadXdr for LedgerCloseMetaV1 {
26540    #[cfg(feature = "std")]
26541    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26542        r.with_limited_depth(|r| {
26543            Ok(Self {
26544                ext: LedgerCloseMetaExt::read_xdr(r)?,
26545                ledger_header: LedgerHeaderHistoryEntry::read_xdr(r)?,
26546                tx_set: GeneralizedTransactionSet::read_xdr(r)?,
26547                tx_processing: VecM::<TransactionResultMeta>::read_xdr(r)?,
26548                upgrades_processing: VecM::<UpgradeEntryMeta>::read_xdr(r)?,
26549                scp_info: VecM::<ScpHistoryEntry>::read_xdr(r)?,
26550                total_byte_size_of_live_soroban_state: u64::read_xdr(r)?,
26551                evicted_keys: VecM::<LedgerKey>::read_xdr(r)?,
26552                unused: VecM::<LedgerEntry>::read_xdr(r)?,
26553            })
26554        })
26555    }
26556}
26557
26558impl WriteXdr for LedgerCloseMetaV1 {
26559    #[cfg(feature = "std")]
26560    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26561        w.with_limited_depth(|w| {
26562            self.ext.write_xdr(w)?;
26563            self.ledger_header.write_xdr(w)?;
26564            self.tx_set.write_xdr(w)?;
26565            self.tx_processing.write_xdr(w)?;
26566            self.upgrades_processing.write_xdr(w)?;
26567            self.scp_info.write_xdr(w)?;
26568            self.total_byte_size_of_live_soroban_state.write_xdr(w)?;
26569            self.evicted_keys.write_xdr(w)?;
26570            self.unused.write_xdr(w)?;
26571            Ok(())
26572        })
26573    }
26574}
26575
26576/// LedgerCloseMetaV2 is an XDR Struct defines as:
26577///
26578/// ```text
26579/// struct LedgerCloseMetaV2
26580/// {
26581///     LedgerCloseMetaExt ext;
26582///
26583///     LedgerHeaderHistoryEntry ledgerHeader;
26584///
26585///     GeneralizedTransactionSet txSet;
26586///
26587///     // NB: transactions are sorted in apply order here
26588///     // fees for all transactions are processed first
26589///     // followed by applying transactions
26590///     TransactionResultMetaV1 txProcessing<>;
26591///
26592///     // upgrades are applied last
26593///     UpgradeEntryMeta upgradesProcessing<>;
26594///
26595///     // other misc information attached to the ledger close
26596///     SCPHistoryEntry scpInfo<>;
26597///
26598///     // Size in bytes of live Soroban state, to support downstream
26599///     // systems calculating storage fees correctly.
26600///     uint64 totalByteSizeOfLiveSorobanState;
26601///
26602///     // TTL and data/code keys that have been evicted at this ledger.
26603///     LedgerKey evictedKeys<>;
26604/// };
26605/// ```
26606///
26607#[cfg_attr(feature = "alloc", derive(Default))]
26608#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26609#[cfg_eval::cfg_eval]
26610#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26611#[cfg_attr(
26612    all(feature = "serde", feature = "alloc"),
26613    serde_with::serde_as,
26614    derive(serde::Serialize, serde::Deserialize),
26615    serde(rename_all = "snake_case")
26616)]
26617#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26618pub struct LedgerCloseMetaV2 {
26619    pub ext: LedgerCloseMetaExt,
26620    pub ledger_header: LedgerHeaderHistoryEntry,
26621    pub tx_set: GeneralizedTransactionSet,
26622    pub tx_processing: VecM<TransactionResultMetaV1>,
26623    pub upgrades_processing: VecM<UpgradeEntryMeta>,
26624    pub scp_info: VecM<ScpHistoryEntry>,
26625    #[cfg_attr(
26626        all(feature = "serde", feature = "alloc"),
26627        serde_as(as = "NumberOrString")
26628    )]
26629    pub total_byte_size_of_live_soroban_state: u64,
26630    pub evicted_keys: VecM<LedgerKey>,
26631}
26632
26633impl ReadXdr for LedgerCloseMetaV2 {
26634    #[cfg(feature = "std")]
26635    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26636        r.with_limited_depth(|r| {
26637            Ok(Self {
26638                ext: LedgerCloseMetaExt::read_xdr(r)?,
26639                ledger_header: LedgerHeaderHistoryEntry::read_xdr(r)?,
26640                tx_set: GeneralizedTransactionSet::read_xdr(r)?,
26641                tx_processing: VecM::<TransactionResultMetaV1>::read_xdr(r)?,
26642                upgrades_processing: VecM::<UpgradeEntryMeta>::read_xdr(r)?,
26643                scp_info: VecM::<ScpHistoryEntry>::read_xdr(r)?,
26644                total_byte_size_of_live_soroban_state: u64::read_xdr(r)?,
26645                evicted_keys: VecM::<LedgerKey>::read_xdr(r)?,
26646            })
26647        })
26648    }
26649}
26650
26651impl WriteXdr for LedgerCloseMetaV2 {
26652    #[cfg(feature = "std")]
26653    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26654        w.with_limited_depth(|w| {
26655            self.ext.write_xdr(w)?;
26656            self.ledger_header.write_xdr(w)?;
26657            self.tx_set.write_xdr(w)?;
26658            self.tx_processing.write_xdr(w)?;
26659            self.upgrades_processing.write_xdr(w)?;
26660            self.scp_info.write_xdr(w)?;
26661            self.total_byte_size_of_live_soroban_state.write_xdr(w)?;
26662            self.evicted_keys.write_xdr(w)?;
26663            Ok(())
26664        })
26665    }
26666}
26667
26668/// LedgerCloseMeta is an XDR Union defines as:
26669///
26670/// ```text
26671/// union LedgerCloseMeta switch (int v)
26672/// {
26673/// case 0:
26674///     LedgerCloseMetaV0 v0;
26675/// case 1:
26676///     LedgerCloseMetaV1 v1;
26677/// case 2:
26678///     LedgerCloseMetaV2 v2;
26679/// };
26680/// ```
26681///
26682// union with discriminant i32
26683#[cfg_eval::cfg_eval]
26684#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26685#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26686#[cfg_attr(
26687    all(feature = "serde", feature = "alloc"),
26688    serde_with::serde_as,
26689    derive(serde::Serialize, serde::Deserialize),
26690    serde(rename_all = "snake_case")
26691)]
26692#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26693#[allow(clippy::large_enum_variant)]
26694pub enum LedgerCloseMeta {
26695    V0(LedgerCloseMetaV0),
26696    V1(LedgerCloseMetaV1),
26697    V2(LedgerCloseMetaV2),
26698}
26699
26700#[cfg(feature = "alloc")]
26701impl Default for LedgerCloseMeta {
26702    fn default() -> Self {
26703        Self::V0(LedgerCloseMetaV0::default())
26704    }
26705}
26706
26707impl LedgerCloseMeta {
26708    pub const VARIANTS: [i32; 3] = [0, 1, 2];
26709    pub const VARIANTS_STR: [&'static str; 3] = ["V0", "V1", "V2"];
26710
26711    #[must_use]
26712    pub const fn name(&self) -> &'static str {
26713        match self {
26714            Self::V0(_) => "V0",
26715            Self::V1(_) => "V1",
26716            Self::V2(_) => "V2",
26717        }
26718    }
26719
26720    #[must_use]
26721    pub const fn discriminant(&self) -> i32 {
26722        #[allow(clippy::match_same_arms)]
26723        match self {
26724            Self::V0(_) => 0,
26725            Self::V1(_) => 1,
26726            Self::V2(_) => 2,
26727        }
26728    }
26729
26730    #[must_use]
26731    pub const fn variants() -> [i32; 3] {
26732        Self::VARIANTS
26733    }
26734}
26735
26736impl Name for LedgerCloseMeta {
26737    #[must_use]
26738    fn name(&self) -> &'static str {
26739        Self::name(self)
26740    }
26741}
26742
26743impl Discriminant<i32> for LedgerCloseMeta {
26744    #[must_use]
26745    fn discriminant(&self) -> i32 {
26746        Self::discriminant(self)
26747    }
26748}
26749
26750impl Variants<i32> for LedgerCloseMeta {
26751    fn variants() -> slice::Iter<'static, i32> {
26752        Self::VARIANTS.iter()
26753    }
26754}
26755
26756impl Union<i32> for LedgerCloseMeta {}
26757
26758impl ReadXdr for LedgerCloseMeta {
26759    #[cfg(feature = "std")]
26760    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26761        r.with_limited_depth(|r| {
26762            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
26763            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
26764            let v = match dv {
26765                0 => Self::V0(LedgerCloseMetaV0::read_xdr(r)?),
26766                1 => Self::V1(LedgerCloseMetaV1::read_xdr(r)?),
26767                2 => Self::V2(LedgerCloseMetaV2::read_xdr(r)?),
26768                #[allow(unreachable_patterns)]
26769                _ => return Err(Error::Invalid),
26770            };
26771            Ok(v)
26772        })
26773    }
26774}
26775
26776impl WriteXdr for LedgerCloseMeta {
26777    #[cfg(feature = "std")]
26778    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26779        w.with_limited_depth(|w| {
26780            self.discriminant().write_xdr(w)?;
26781            #[allow(clippy::match_same_arms)]
26782            match self {
26783                Self::V0(v) => v.write_xdr(w)?,
26784                Self::V1(v) => v.write_xdr(w)?,
26785                Self::V2(v) => v.write_xdr(w)?,
26786            };
26787            Ok(())
26788        })
26789    }
26790}
26791
26792/// ErrorCode is an XDR Enum defines as:
26793///
26794/// ```text
26795/// enum ErrorCode
26796/// {
26797///     ERR_MISC = 0, // Unspecific error
26798///     ERR_DATA = 1, // Malformed data
26799///     ERR_CONF = 2, // Misconfiguration error
26800///     ERR_AUTH = 3, // Authentication failure
26801///     ERR_LOAD = 4  // System overloaded
26802/// };
26803/// ```
26804///
26805// enum
26806#[cfg_attr(feature = "alloc", derive(Default))]
26807#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26808#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26809#[cfg_attr(
26810    all(feature = "serde", feature = "alloc"),
26811    derive(serde::Serialize, serde::Deserialize),
26812    serde(rename_all = "snake_case")
26813)]
26814#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26815#[repr(i32)]
26816pub enum ErrorCode {
26817    #[cfg_attr(feature = "alloc", default)]
26818    Misc = 0,
26819    Data = 1,
26820    Conf = 2,
26821    Auth = 3,
26822    Load = 4,
26823}
26824
26825impl ErrorCode {
26826    pub const VARIANTS: [ErrorCode; 5] = [
26827        ErrorCode::Misc,
26828        ErrorCode::Data,
26829        ErrorCode::Conf,
26830        ErrorCode::Auth,
26831        ErrorCode::Load,
26832    ];
26833    pub const VARIANTS_STR: [&'static str; 5] = ["Misc", "Data", "Conf", "Auth", "Load"];
26834
26835    #[must_use]
26836    pub const fn name(&self) -> &'static str {
26837        match self {
26838            Self::Misc => "Misc",
26839            Self::Data => "Data",
26840            Self::Conf => "Conf",
26841            Self::Auth => "Auth",
26842            Self::Load => "Load",
26843        }
26844    }
26845
26846    #[must_use]
26847    pub const fn variants() -> [ErrorCode; 5] {
26848        Self::VARIANTS
26849    }
26850}
26851
26852impl Name for ErrorCode {
26853    #[must_use]
26854    fn name(&self) -> &'static str {
26855        Self::name(self)
26856    }
26857}
26858
26859impl Variants<ErrorCode> for ErrorCode {
26860    fn variants() -> slice::Iter<'static, ErrorCode> {
26861        Self::VARIANTS.iter()
26862    }
26863}
26864
26865impl Enum for ErrorCode {}
26866
26867impl fmt::Display for ErrorCode {
26868    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26869        f.write_str(self.name())
26870    }
26871}
26872
26873impl TryFrom<i32> for ErrorCode {
26874    type Error = Error;
26875
26876    fn try_from(i: i32) -> Result<Self, Error> {
26877        let e = match i {
26878            0 => ErrorCode::Misc,
26879            1 => ErrorCode::Data,
26880            2 => ErrorCode::Conf,
26881            3 => ErrorCode::Auth,
26882            4 => ErrorCode::Load,
26883            #[allow(unreachable_patterns)]
26884            _ => return Err(Error::Invalid),
26885        };
26886        Ok(e)
26887    }
26888}
26889
26890impl From<ErrorCode> for i32 {
26891    #[must_use]
26892    fn from(e: ErrorCode) -> Self {
26893        e as Self
26894    }
26895}
26896
26897impl ReadXdr for ErrorCode {
26898    #[cfg(feature = "std")]
26899    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26900        r.with_limited_depth(|r| {
26901            let e = i32::read_xdr(r)?;
26902            let v: Self = e.try_into()?;
26903            Ok(v)
26904        })
26905    }
26906}
26907
26908impl WriteXdr for ErrorCode {
26909    #[cfg(feature = "std")]
26910    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26911        w.with_limited_depth(|w| {
26912            let i: i32 = (*self).into();
26913            i.write_xdr(w)
26914        })
26915    }
26916}
26917
26918/// SError is an XDR Struct defines as:
26919///
26920/// ```text
26921/// struct Error
26922/// {
26923///     ErrorCode code;
26924///     string msg<100>;
26925/// };
26926/// ```
26927///
26928#[cfg_attr(feature = "alloc", derive(Default))]
26929#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26930#[cfg_eval::cfg_eval]
26931#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26932#[cfg_attr(
26933    all(feature = "serde", feature = "alloc"),
26934    serde_with::serde_as,
26935    derive(serde::Serialize, serde::Deserialize),
26936    serde(rename_all = "snake_case")
26937)]
26938#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26939pub struct SError {
26940    pub code: ErrorCode,
26941    pub msg: StringM<100>,
26942}
26943
26944impl ReadXdr for SError {
26945    #[cfg(feature = "std")]
26946    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26947        r.with_limited_depth(|r| {
26948            Ok(Self {
26949                code: ErrorCode::read_xdr(r)?,
26950                msg: StringM::<100>::read_xdr(r)?,
26951            })
26952        })
26953    }
26954}
26955
26956impl WriteXdr for SError {
26957    #[cfg(feature = "std")]
26958    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
26959        w.with_limited_depth(|w| {
26960            self.code.write_xdr(w)?;
26961            self.msg.write_xdr(w)?;
26962            Ok(())
26963        })
26964    }
26965}
26966
26967/// SendMore is an XDR Struct defines as:
26968///
26969/// ```text
26970/// struct SendMore
26971/// {
26972///     uint32 numMessages;
26973/// };
26974/// ```
26975///
26976#[cfg_attr(feature = "alloc", derive(Default))]
26977#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26978#[cfg_eval::cfg_eval]
26979#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
26980#[cfg_attr(
26981    all(feature = "serde", feature = "alloc"),
26982    serde_with::serde_as,
26983    derive(serde::Serialize, serde::Deserialize),
26984    serde(rename_all = "snake_case")
26985)]
26986#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
26987pub struct SendMore {
26988    pub num_messages: u32,
26989}
26990
26991impl ReadXdr for SendMore {
26992    #[cfg(feature = "std")]
26993    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
26994        r.with_limited_depth(|r| {
26995            Ok(Self {
26996                num_messages: u32::read_xdr(r)?,
26997            })
26998        })
26999    }
27000}
27001
27002impl WriteXdr for SendMore {
27003    #[cfg(feature = "std")]
27004    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
27005        w.with_limited_depth(|w| {
27006            self.num_messages.write_xdr(w)?;
27007            Ok(())
27008        })
27009    }
27010}
27011
27012/// SendMoreExtended is an XDR Struct defines as:
27013///
27014/// ```text
27015/// struct SendMoreExtended
27016/// {
27017///     uint32 numMessages;
27018///     uint32 numBytes;
27019/// };
27020/// ```
27021///
27022#[cfg_attr(feature = "alloc", derive(Default))]
27023#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
27024#[cfg_eval::cfg_eval]
27025#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27026#[cfg_attr(
27027    all(feature = "serde", feature = "alloc"),
27028    serde_with::serde_as,
27029    derive(serde::Serialize, serde::Deserialize),
27030    serde(rename_all = "snake_case")
27031)]
27032#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27033pub struct SendMoreExtended {
27034    pub num_messages: u32,
27035    pub num_bytes: u32,
27036}
27037
27038impl ReadXdr for SendMoreExtended {
27039    #[cfg(feature = "std")]
27040    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
27041        r.with_limited_depth(|r| {
27042            Ok(Self {
27043                num_messages: u32::read_xdr(r)?,
27044                num_bytes: u32::read_xdr(r)?,
27045            })
27046        })
27047    }
27048}
27049
27050impl WriteXdr for SendMoreExtended {
27051    #[cfg(feature = "std")]
27052    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
27053        w.with_limited_depth(|w| {
27054            self.num_messages.write_xdr(w)?;
27055            self.num_bytes.write_xdr(w)?;
27056            Ok(())
27057        })
27058    }
27059}
27060
27061/// AuthCert is an XDR Struct defines as:
27062///
27063/// ```text
27064/// struct AuthCert
27065/// {
27066///     Curve25519Public pubkey;
27067///     uint64 expiration;
27068///     Signature sig;
27069/// };
27070/// ```
27071///
27072#[cfg_attr(feature = "alloc", derive(Default))]
27073#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
27074#[cfg_eval::cfg_eval]
27075#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27076#[cfg_attr(
27077    all(feature = "serde", feature = "alloc"),
27078    serde_with::serde_as,
27079    derive(serde::Serialize, serde::Deserialize),
27080    serde(rename_all = "snake_case")
27081)]
27082#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27083pub struct AuthCert {
27084    pub pubkey: Curve25519Public,
27085    #[cfg_attr(
27086        all(feature = "serde", feature = "alloc"),
27087        serde_as(as = "NumberOrString")
27088    )]
27089    pub expiration: u64,
27090    pub sig: Signature,
27091}
27092
27093impl ReadXdr for AuthCert {
27094    #[cfg(feature = "std")]
27095    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
27096        r.with_limited_depth(|r| {
27097            Ok(Self {
27098                pubkey: Curve25519Public::read_xdr(r)?,
27099                expiration: u64::read_xdr(r)?,
27100                sig: Signature::read_xdr(r)?,
27101            })
27102        })
27103    }
27104}
27105
27106impl WriteXdr for AuthCert {
27107    #[cfg(feature = "std")]
27108    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
27109        w.with_limited_depth(|w| {
27110            self.pubkey.write_xdr(w)?;
27111            self.expiration.write_xdr(w)?;
27112            self.sig.write_xdr(w)?;
27113            Ok(())
27114        })
27115    }
27116}
27117
27118/// Hello is an XDR Struct defines as:
27119///
27120/// ```text
27121/// struct Hello
27122/// {
27123///     uint32 ledgerVersion;
27124///     uint32 overlayVersion;
27125///     uint32 overlayMinVersion;
27126///     Hash networkID;
27127///     string versionStr<100>;
27128///     int listeningPort;
27129///     NodeID peerID;
27130///     AuthCert cert;
27131///     uint256 nonce;
27132/// };
27133/// ```
27134///
27135#[cfg_attr(feature = "alloc", derive(Default))]
27136#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
27137#[cfg_eval::cfg_eval]
27138#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27139#[cfg_attr(
27140    all(feature = "serde", feature = "alloc"),
27141    serde_with::serde_as,
27142    derive(serde::Serialize, serde::Deserialize),
27143    serde(rename_all = "snake_case")
27144)]
27145#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27146pub struct Hello {
27147    pub ledger_version: u32,
27148    pub overlay_version: u32,
27149    pub overlay_min_version: u32,
27150    pub network_id: Hash,
27151    pub version_str: StringM<100>,
27152    pub listening_port: i32,
27153    pub peer_id: NodeId,
27154    pub cert: AuthCert,
27155    pub nonce: Uint256,
27156}
27157
27158impl ReadXdr for Hello {
27159    #[cfg(feature = "std")]
27160    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
27161        r.with_limited_depth(|r| {
27162            Ok(Self {
27163                ledger_version: u32::read_xdr(r)?,
27164                overlay_version: u32::read_xdr(r)?,
27165                overlay_min_version: u32::read_xdr(r)?,
27166                network_id: Hash::read_xdr(r)?,
27167                version_str: StringM::<100>::read_xdr(r)?,
27168                listening_port: i32::read_xdr(r)?,
27169                peer_id: NodeId::read_xdr(r)?,
27170                cert: AuthCert::read_xdr(r)?,
27171                nonce: Uint256::read_xdr(r)?,
27172            })
27173        })
27174    }
27175}
27176
27177impl WriteXdr for Hello {
27178    #[cfg(feature = "std")]
27179    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
27180        w.with_limited_depth(|w| {
27181            self.ledger_version.write_xdr(w)?;
27182            self.overlay_version.write_xdr(w)?;
27183            self.overlay_min_version.write_xdr(w)?;
27184            self.network_id.write_xdr(w)?;
27185            self.version_str.write_xdr(w)?;
27186            self.listening_port.write_xdr(w)?;
27187            self.peer_id.write_xdr(w)?;
27188            self.cert.write_xdr(w)?;
27189            self.nonce.write_xdr(w)?;
27190            Ok(())
27191        })
27192    }
27193}
27194
27195/// AuthMsgFlagFlowControlBytesRequested is an XDR Const defines as:
27196///
27197/// ```text
27198/// const AUTH_MSG_FLAG_FLOW_CONTROL_BYTES_REQUESTED = 200;
27199/// ```
27200///
27201pub const AUTH_MSG_FLAG_FLOW_CONTROL_BYTES_REQUESTED: u64 = 200;
27202
27203/// Auth is an XDR Struct defines as:
27204///
27205/// ```text
27206/// struct Auth
27207/// {
27208///     int flags;
27209/// };
27210/// ```
27211///
27212#[cfg_attr(feature = "alloc", derive(Default))]
27213#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
27214#[cfg_eval::cfg_eval]
27215#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27216#[cfg_attr(
27217    all(feature = "serde", feature = "alloc"),
27218    serde_with::serde_as,
27219    derive(serde::Serialize, serde::Deserialize),
27220    serde(rename_all = "snake_case")
27221)]
27222#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27223pub struct Auth {
27224    pub flags: i32,
27225}
27226
27227impl ReadXdr for Auth {
27228    #[cfg(feature = "std")]
27229    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
27230        r.with_limited_depth(|r| {
27231            Ok(Self {
27232                flags: i32::read_xdr(r)?,
27233            })
27234        })
27235    }
27236}
27237
27238impl WriteXdr for Auth {
27239    #[cfg(feature = "std")]
27240    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
27241        w.with_limited_depth(|w| {
27242            self.flags.write_xdr(w)?;
27243            Ok(())
27244        })
27245    }
27246}
27247
27248/// IpAddrType is an XDR Enum defines as:
27249///
27250/// ```text
27251/// enum IPAddrType
27252/// {
27253///     IPv4 = 0,
27254///     IPv6 = 1
27255/// };
27256/// ```
27257///
27258// enum
27259#[cfg_attr(feature = "alloc", derive(Default))]
27260#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
27261#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27262#[cfg_attr(
27263    all(feature = "serde", feature = "alloc"),
27264    derive(serde::Serialize, serde::Deserialize),
27265    serde(rename_all = "snake_case")
27266)]
27267#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27268#[repr(i32)]
27269pub enum IpAddrType {
27270    #[cfg_attr(feature = "alloc", default)]
27271    IPv4 = 0,
27272    IPv6 = 1,
27273}
27274
27275impl IpAddrType {
27276    pub const VARIANTS: [IpAddrType; 2] = [IpAddrType::IPv4, IpAddrType::IPv6];
27277    pub const VARIANTS_STR: [&'static str; 2] = ["IPv4", "IPv6"];
27278
27279    #[must_use]
27280    pub const fn name(&self) -> &'static str {
27281        match self {
27282            Self::IPv4 => "IPv4",
27283            Self::IPv6 => "IPv6",
27284        }
27285    }
27286
27287    #[must_use]
27288    pub const fn variants() -> [IpAddrType; 2] {
27289        Self::VARIANTS
27290    }
27291}
27292
27293impl Name for IpAddrType {
27294    #[must_use]
27295    fn name(&self) -> &'static str {
27296        Self::name(self)
27297    }
27298}
27299
27300impl Variants<IpAddrType> for IpAddrType {
27301    fn variants() -> slice::Iter<'static, IpAddrType> {
27302        Self::VARIANTS.iter()
27303    }
27304}
27305
27306impl Enum for IpAddrType {}
27307
27308impl fmt::Display for IpAddrType {
27309    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
27310        f.write_str(self.name())
27311    }
27312}
27313
27314impl TryFrom<i32> for IpAddrType {
27315    type Error = Error;
27316
27317    fn try_from(i: i32) -> Result<Self, Error> {
27318        let e = match i {
27319            0 => IpAddrType::IPv4,
27320            1 => IpAddrType::IPv6,
27321            #[allow(unreachable_patterns)]
27322            _ => return Err(Error::Invalid),
27323        };
27324        Ok(e)
27325    }
27326}
27327
27328impl From<IpAddrType> for i32 {
27329    #[must_use]
27330    fn from(e: IpAddrType) -> Self {
27331        e as Self
27332    }
27333}
27334
27335impl ReadXdr for IpAddrType {
27336    #[cfg(feature = "std")]
27337    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
27338        r.with_limited_depth(|r| {
27339            let e = i32::read_xdr(r)?;
27340            let v: Self = e.try_into()?;
27341            Ok(v)
27342        })
27343    }
27344}
27345
27346impl WriteXdr for IpAddrType {
27347    #[cfg(feature = "std")]
27348    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
27349        w.with_limited_depth(|w| {
27350            let i: i32 = (*self).into();
27351            i.write_xdr(w)
27352        })
27353    }
27354}
27355
27356/// PeerAddressIp is an XDR NestedUnion defines as:
27357///
27358/// ```text
27359/// union switch (IPAddrType type)
27360///     {
27361///     case IPv4:
27362///         opaque ipv4[4];
27363///     case IPv6:
27364///         opaque ipv6[16];
27365///     }
27366/// ```
27367///
27368// union with discriminant IpAddrType
27369#[cfg_eval::cfg_eval]
27370#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
27371#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27372#[cfg_attr(
27373    all(feature = "serde", feature = "alloc"),
27374    serde_with::serde_as,
27375    derive(serde::Serialize, serde::Deserialize),
27376    serde(rename_all = "snake_case")
27377)]
27378#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27379#[allow(clippy::large_enum_variant)]
27380pub enum PeerAddressIp {
27381    IPv4([u8; 4]),
27382    IPv6([u8; 16]),
27383}
27384
27385#[cfg(feature = "alloc")]
27386impl Default for PeerAddressIp {
27387    fn default() -> Self {
27388        Self::IPv4(<[u8; 4]>::default())
27389    }
27390}
27391
27392impl PeerAddressIp {
27393    pub const VARIANTS: [IpAddrType; 2] = [IpAddrType::IPv4, IpAddrType::IPv6];
27394    pub const VARIANTS_STR: [&'static str; 2] = ["IPv4", "IPv6"];
27395
27396    #[must_use]
27397    pub const fn name(&self) -> &'static str {
27398        match self {
27399            Self::IPv4(_) => "IPv4",
27400            Self::IPv6(_) => "IPv6",
27401        }
27402    }
27403
27404    #[must_use]
27405    pub const fn discriminant(&self) -> IpAddrType {
27406        #[allow(clippy::match_same_arms)]
27407        match self {
27408            Self::IPv4(_) => IpAddrType::IPv4,
27409            Self::IPv6(_) => IpAddrType::IPv6,
27410        }
27411    }
27412
27413    #[must_use]
27414    pub const fn variants() -> [IpAddrType; 2] {
27415        Self::VARIANTS
27416    }
27417}
27418
27419impl Name for PeerAddressIp {
27420    #[must_use]
27421    fn name(&self) -> &'static str {
27422        Self::name(self)
27423    }
27424}
27425
27426impl Discriminant<IpAddrType> for PeerAddressIp {
27427    #[must_use]
27428    fn discriminant(&self) -> IpAddrType {
27429        Self::discriminant(self)
27430    }
27431}
27432
27433impl Variants<IpAddrType> for PeerAddressIp {
27434    fn variants() -> slice::Iter<'static, IpAddrType> {
27435        Self::VARIANTS.iter()
27436    }
27437}
27438
27439impl Union<IpAddrType> for PeerAddressIp {}
27440
27441impl ReadXdr for PeerAddressIp {
27442    #[cfg(feature = "std")]
27443    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
27444        r.with_limited_depth(|r| {
27445            let dv: IpAddrType = <IpAddrType as ReadXdr>::read_xdr(r)?;
27446            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
27447            let v = match dv {
27448                IpAddrType::IPv4 => Self::IPv4(<[u8; 4]>::read_xdr(r)?),
27449                IpAddrType::IPv6 => Self::IPv6(<[u8; 16]>::read_xdr(r)?),
27450                #[allow(unreachable_patterns)]
27451                _ => return Err(Error::Invalid),
27452            };
27453            Ok(v)
27454        })
27455    }
27456}
27457
27458impl WriteXdr for PeerAddressIp {
27459    #[cfg(feature = "std")]
27460    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
27461        w.with_limited_depth(|w| {
27462            self.discriminant().write_xdr(w)?;
27463            #[allow(clippy::match_same_arms)]
27464            match self {
27465                Self::IPv4(v) => v.write_xdr(w)?,
27466                Self::IPv6(v) => v.write_xdr(w)?,
27467            };
27468            Ok(())
27469        })
27470    }
27471}
27472
27473/// PeerAddress is an XDR Struct defines as:
27474///
27475/// ```text
27476/// struct PeerAddress
27477/// {
27478///     union switch (IPAddrType type)
27479///     {
27480///     case IPv4:
27481///         opaque ipv4[4];
27482///     case IPv6:
27483///         opaque ipv6[16];
27484///     }
27485///     ip;
27486///     uint32 port;
27487///     uint32 numFailures;
27488/// };
27489/// ```
27490///
27491#[cfg_attr(feature = "alloc", derive(Default))]
27492#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
27493#[cfg_eval::cfg_eval]
27494#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27495#[cfg_attr(
27496    all(feature = "serde", feature = "alloc"),
27497    serde_with::serde_as,
27498    derive(serde::Serialize, serde::Deserialize),
27499    serde(rename_all = "snake_case")
27500)]
27501#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27502pub struct PeerAddress {
27503    pub ip: PeerAddressIp,
27504    pub port: u32,
27505    pub num_failures: u32,
27506}
27507
27508impl ReadXdr for PeerAddress {
27509    #[cfg(feature = "std")]
27510    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
27511        r.with_limited_depth(|r| {
27512            Ok(Self {
27513                ip: PeerAddressIp::read_xdr(r)?,
27514                port: u32::read_xdr(r)?,
27515                num_failures: u32::read_xdr(r)?,
27516            })
27517        })
27518    }
27519}
27520
27521impl WriteXdr for PeerAddress {
27522    #[cfg(feature = "std")]
27523    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
27524        w.with_limited_depth(|w| {
27525            self.ip.write_xdr(w)?;
27526            self.port.write_xdr(w)?;
27527            self.num_failures.write_xdr(w)?;
27528            Ok(())
27529        })
27530    }
27531}
27532
27533/// MessageType is an XDR Enum defines as:
27534///
27535/// ```text
27536/// enum MessageType
27537/// {
27538///     ERROR_MSG = 0,
27539///     AUTH = 2,
27540///     DONT_HAVE = 3,
27541///     // GET_PEERS (4) is deprecated
27542///
27543///     PEERS = 5,
27544///
27545///     GET_TX_SET = 6, // gets a particular txset by hash
27546///     TX_SET = 7,
27547///     GENERALIZED_TX_SET = 17,
27548///
27549///     TRANSACTION = 8, // pass on a tx you have heard about
27550///
27551///     // SCP
27552///     GET_SCP_QUORUMSET = 9,
27553///     SCP_QUORUMSET = 10,
27554///     SCP_MESSAGE = 11,
27555///     GET_SCP_STATE = 12,
27556///
27557///     // new messages
27558///     HELLO = 13,
27559///
27560///     // SURVEY_REQUEST (14) removed and replaced by TIME_SLICED_SURVEY_REQUEST
27561///     // SURVEY_RESPONSE (15) removed and replaced by TIME_SLICED_SURVEY_RESPONSE
27562///
27563///     SEND_MORE = 16,
27564///     SEND_MORE_EXTENDED = 20,
27565///
27566///     FLOOD_ADVERT = 18,
27567///     FLOOD_DEMAND = 19,
27568///
27569///     TIME_SLICED_SURVEY_REQUEST = 21,
27570///     TIME_SLICED_SURVEY_RESPONSE = 22,
27571///     TIME_SLICED_SURVEY_START_COLLECTING = 23,
27572///     TIME_SLICED_SURVEY_STOP_COLLECTING = 24
27573/// };
27574/// ```
27575///
27576// enum
27577#[cfg_attr(feature = "alloc", derive(Default))]
27578#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
27579#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27580#[cfg_attr(
27581    all(feature = "serde", feature = "alloc"),
27582    derive(serde::Serialize, serde::Deserialize),
27583    serde(rename_all = "snake_case")
27584)]
27585#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27586#[repr(i32)]
27587pub enum MessageType {
27588    #[cfg_attr(feature = "alloc", default)]
27589    ErrorMsg = 0,
27590    Auth = 2,
27591    DontHave = 3,
27592    Peers = 5,
27593    GetTxSet = 6,
27594    TxSet = 7,
27595    GeneralizedTxSet = 17,
27596    Transaction = 8,
27597    GetScpQuorumset = 9,
27598    ScpQuorumset = 10,
27599    ScpMessage = 11,
27600    GetScpState = 12,
27601    Hello = 13,
27602    SendMore = 16,
27603    SendMoreExtended = 20,
27604    FloodAdvert = 18,
27605    FloodDemand = 19,
27606    TimeSlicedSurveyRequest = 21,
27607    TimeSlicedSurveyResponse = 22,
27608    TimeSlicedSurveyStartCollecting = 23,
27609    TimeSlicedSurveyStopCollecting = 24,
27610}
27611
27612impl MessageType {
27613    pub const VARIANTS: [MessageType; 21] = [
27614        MessageType::ErrorMsg,
27615        MessageType::Auth,
27616        MessageType::DontHave,
27617        MessageType::Peers,
27618        MessageType::GetTxSet,
27619        MessageType::TxSet,
27620        MessageType::GeneralizedTxSet,
27621        MessageType::Transaction,
27622        MessageType::GetScpQuorumset,
27623        MessageType::ScpQuorumset,
27624        MessageType::ScpMessage,
27625        MessageType::GetScpState,
27626        MessageType::Hello,
27627        MessageType::SendMore,
27628        MessageType::SendMoreExtended,
27629        MessageType::FloodAdvert,
27630        MessageType::FloodDemand,
27631        MessageType::TimeSlicedSurveyRequest,
27632        MessageType::TimeSlicedSurveyResponse,
27633        MessageType::TimeSlicedSurveyStartCollecting,
27634        MessageType::TimeSlicedSurveyStopCollecting,
27635    ];
27636    pub const VARIANTS_STR: [&'static str; 21] = [
27637        "ErrorMsg",
27638        "Auth",
27639        "DontHave",
27640        "Peers",
27641        "GetTxSet",
27642        "TxSet",
27643        "GeneralizedTxSet",
27644        "Transaction",
27645        "GetScpQuorumset",
27646        "ScpQuorumset",
27647        "ScpMessage",
27648        "GetScpState",
27649        "Hello",
27650        "SendMore",
27651        "SendMoreExtended",
27652        "FloodAdvert",
27653        "FloodDemand",
27654        "TimeSlicedSurveyRequest",
27655        "TimeSlicedSurveyResponse",
27656        "TimeSlicedSurveyStartCollecting",
27657        "TimeSlicedSurveyStopCollecting",
27658    ];
27659
27660    #[must_use]
27661    pub const fn name(&self) -> &'static str {
27662        match self {
27663            Self::ErrorMsg => "ErrorMsg",
27664            Self::Auth => "Auth",
27665            Self::DontHave => "DontHave",
27666            Self::Peers => "Peers",
27667            Self::GetTxSet => "GetTxSet",
27668            Self::TxSet => "TxSet",
27669            Self::GeneralizedTxSet => "GeneralizedTxSet",
27670            Self::Transaction => "Transaction",
27671            Self::GetScpQuorumset => "GetScpQuorumset",
27672            Self::ScpQuorumset => "ScpQuorumset",
27673            Self::ScpMessage => "ScpMessage",
27674            Self::GetScpState => "GetScpState",
27675            Self::Hello => "Hello",
27676            Self::SendMore => "SendMore",
27677            Self::SendMoreExtended => "SendMoreExtended",
27678            Self::FloodAdvert => "FloodAdvert",
27679            Self::FloodDemand => "FloodDemand",
27680            Self::TimeSlicedSurveyRequest => "TimeSlicedSurveyRequest",
27681            Self::TimeSlicedSurveyResponse => "TimeSlicedSurveyResponse",
27682            Self::TimeSlicedSurveyStartCollecting => "TimeSlicedSurveyStartCollecting",
27683            Self::TimeSlicedSurveyStopCollecting => "TimeSlicedSurveyStopCollecting",
27684        }
27685    }
27686
27687    #[must_use]
27688    pub const fn variants() -> [MessageType; 21] {
27689        Self::VARIANTS
27690    }
27691}
27692
27693impl Name for MessageType {
27694    #[must_use]
27695    fn name(&self) -> &'static str {
27696        Self::name(self)
27697    }
27698}
27699
27700impl Variants<MessageType> for MessageType {
27701    fn variants() -> slice::Iter<'static, MessageType> {
27702        Self::VARIANTS.iter()
27703    }
27704}
27705
27706impl Enum for MessageType {}
27707
27708impl fmt::Display for MessageType {
27709    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
27710        f.write_str(self.name())
27711    }
27712}
27713
27714impl TryFrom<i32> for MessageType {
27715    type Error = Error;
27716
27717    fn try_from(i: i32) -> Result<Self, Error> {
27718        let e = match i {
27719            0 => MessageType::ErrorMsg,
27720            2 => MessageType::Auth,
27721            3 => MessageType::DontHave,
27722            5 => MessageType::Peers,
27723            6 => MessageType::GetTxSet,
27724            7 => MessageType::TxSet,
27725            17 => MessageType::GeneralizedTxSet,
27726            8 => MessageType::Transaction,
27727            9 => MessageType::GetScpQuorumset,
27728            10 => MessageType::ScpQuorumset,
27729            11 => MessageType::ScpMessage,
27730            12 => MessageType::GetScpState,
27731            13 => MessageType::Hello,
27732            16 => MessageType::SendMore,
27733            20 => MessageType::SendMoreExtended,
27734            18 => MessageType::FloodAdvert,
27735            19 => MessageType::FloodDemand,
27736            21 => MessageType::TimeSlicedSurveyRequest,
27737            22 => MessageType::TimeSlicedSurveyResponse,
27738            23 => MessageType::TimeSlicedSurveyStartCollecting,
27739            24 => MessageType::TimeSlicedSurveyStopCollecting,
27740            #[allow(unreachable_patterns)]
27741            _ => return Err(Error::Invalid),
27742        };
27743        Ok(e)
27744    }
27745}
27746
27747impl From<MessageType> for i32 {
27748    #[must_use]
27749    fn from(e: MessageType) -> Self {
27750        e as Self
27751    }
27752}
27753
27754impl ReadXdr for MessageType {
27755    #[cfg(feature = "std")]
27756    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
27757        r.with_limited_depth(|r| {
27758            let e = i32::read_xdr(r)?;
27759            let v: Self = e.try_into()?;
27760            Ok(v)
27761        })
27762    }
27763}
27764
27765impl WriteXdr for MessageType {
27766    #[cfg(feature = "std")]
27767    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
27768        w.with_limited_depth(|w| {
27769            let i: i32 = (*self).into();
27770            i.write_xdr(w)
27771        })
27772    }
27773}
27774
27775/// DontHave is an XDR Struct defines as:
27776///
27777/// ```text
27778/// struct DontHave
27779/// {
27780///     MessageType type;
27781///     uint256 reqHash;
27782/// };
27783/// ```
27784///
27785#[cfg_attr(feature = "alloc", derive(Default))]
27786#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
27787#[cfg_eval::cfg_eval]
27788#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27789#[cfg_attr(
27790    all(feature = "serde", feature = "alloc"),
27791    serde_with::serde_as,
27792    derive(serde::Serialize, serde::Deserialize),
27793    serde(rename_all = "snake_case")
27794)]
27795#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27796pub struct DontHave {
27797    pub type_: MessageType,
27798    pub req_hash: Uint256,
27799}
27800
27801impl ReadXdr for DontHave {
27802    #[cfg(feature = "std")]
27803    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
27804        r.with_limited_depth(|r| {
27805            Ok(Self {
27806                type_: MessageType::read_xdr(r)?,
27807                req_hash: Uint256::read_xdr(r)?,
27808            })
27809        })
27810    }
27811}
27812
27813impl WriteXdr for DontHave {
27814    #[cfg(feature = "std")]
27815    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
27816        w.with_limited_depth(|w| {
27817            self.type_.write_xdr(w)?;
27818            self.req_hash.write_xdr(w)?;
27819            Ok(())
27820        })
27821    }
27822}
27823
27824/// SurveyMessageCommandType is an XDR Enum defines as:
27825///
27826/// ```text
27827/// enum SurveyMessageCommandType
27828/// {
27829///     TIME_SLICED_SURVEY_TOPOLOGY = 1
27830/// };
27831/// ```
27832///
27833// enum
27834#[cfg_attr(feature = "alloc", derive(Default))]
27835#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
27836#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27837#[cfg_attr(
27838    all(feature = "serde", feature = "alloc"),
27839    derive(serde::Serialize, serde::Deserialize),
27840    serde(rename_all = "snake_case")
27841)]
27842#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27843#[repr(i32)]
27844pub enum SurveyMessageCommandType {
27845    #[cfg_attr(feature = "alloc", default)]
27846    TimeSlicedSurveyTopology = 1,
27847}
27848
27849impl SurveyMessageCommandType {
27850    pub const VARIANTS: [SurveyMessageCommandType; 1] =
27851        [SurveyMessageCommandType::TimeSlicedSurveyTopology];
27852    pub const VARIANTS_STR: [&'static str; 1] = ["TimeSlicedSurveyTopology"];
27853
27854    #[must_use]
27855    pub const fn name(&self) -> &'static str {
27856        match self {
27857            Self::TimeSlicedSurveyTopology => "TimeSlicedSurveyTopology",
27858        }
27859    }
27860
27861    #[must_use]
27862    pub const fn variants() -> [SurveyMessageCommandType; 1] {
27863        Self::VARIANTS
27864    }
27865}
27866
27867impl Name for SurveyMessageCommandType {
27868    #[must_use]
27869    fn name(&self) -> &'static str {
27870        Self::name(self)
27871    }
27872}
27873
27874impl Variants<SurveyMessageCommandType> for SurveyMessageCommandType {
27875    fn variants() -> slice::Iter<'static, SurveyMessageCommandType> {
27876        Self::VARIANTS.iter()
27877    }
27878}
27879
27880impl Enum for SurveyMessageCommandType {}
27881
27882impl fmt::Display for SurveyMessageCommandType {
27883    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
27884        f.write_str(self.name())
27885    }
27886}
27887
27888impl TryFrom<i32> for SurveyMessageCommandType {
27889    type Error = Error;
27890
27891    fn try_from(i: i32) -> Result<Self, Error> {
27892        let e = match i {
27893            1 => SurveyMessageCommandType::TimeSlicedSurveyTopology,
27894            #[allow(unreachable_patterns)]
27895            _ => return Err(Error::Invalid),
27896        };
27897        Ok(e)
27898    }
27899}
27900
27901impl From<SurveyMessageCommandType> for i32 {
27902    #[must_use]
27903    fn from(e: SurveyMessageCommandType) -> Self {
27904        e as Self
27905    }
27906}
27907
27908impl ReadXdr for SurveyMessageCommandType {
27909    #[cfg(feature = "std")]
27910    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
27911        r.with_limited_depth(|r| {
27912            let e = i32::read_xdr(r)?;
27913            let v: Self = e.try_into()?;
27914            Ok(v)
27915        })
27916    }
27917}
27918
27919impl WriteXdr for SurveyMessageCommandType {
27920    #[cfg(feature = "std")]
27921    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
27922        w.with_limited_depth(|w| {
27923            let i: i32 = (*self).into();
27924            i.write_xdr(w)
27925        })
27926    }
27927}
27928
27929/// SurveyMessageResponseType is an XDR Enum defines as:
27930///
27931/// ```text
27932/// enum SurveyMessageResponseType
27933/// {
27934///     SURVEY_TOPOLOGY_RESPONSE_V2 = 2
27935/// };
27936/// ```
27937///
27938// enum
27939#[cfg_attr(feature = "alloc", derive(Default))]
27940#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
27941#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27942#[cfg_attr(
27943    all(feature = "serde", feature = "alloc"),
27944    derive(serde::Serialize, serde::Deserialize),
27945    serde(rename_all = "snake_case")
27946)]
27947#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
27948#[repr(i32)]
27949pub enum SurveyMessageResponseType {
27950    #[cfg_attr(feature = "alloc", default)]
27951    SurveyTopologyResponseV2 = 2,
27952}
27953
27954impl SurveyMessageResponseType {
27955    pub const VARIANTS: [SurveyMessageResponseType; 1] =
27956        [SurveyMessageResponseType::SurveyTopologyResponseV2];
27957    pub const VARIANTS_STR: [&'static str; 1] = ["SurveyTopologyResponseV2"];
27958
27959    #[must_use]
27960    pub const fn name(&self) -> &'static str {
27961        match self {
27962            Self::SurveyTopologyResponseV2 => "SurveyTopologyResponseV2",
27963        }
27964    }
27965
27966    #[must_use]
27967    pub const fn variants() -> [SurveyMessageResponseType; 1] {
27968        Self::VARIANTS
27969    }
27970}
27971
27972impl Name for SurveyMessageResponseType {
27973    #[must_use]
27974    fn name(&self) -> &'static str {
27975        Self::name(self)
27976    }
27977}
27978
27979impl Variants<SurveyMessageResponseType> for SurveyMessageResponseType {
27980    fn variants() -> slice::Iter<'static, SurveyMessageResponseType> {
27981        Self::VARIANTS.iter()
27982    }
27983}
27984
27985impl Enum for SurveyMessageResponseType {}
27986
27987impl fmt::Display for SurveyMessageResponseType {
27988    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
27989        f.write_str(self.name())
27990    }
27991}
27992
27993impl TryFrom<i32> for SurveyMessageResponseType {
27994    type Error = Error;
27995
27996    fn try_from(i: i32) -> Result<Self, Error> {
27997        let e = match i {
27998            2 => SurveyMessageResponseType::SurveyTopologyResponseV2,
27999            #[allow(unreachable_patterns)]
28000            _ => return Err(Error::Invalid),
28001        };
28002        Ok(e)
28003    }
28004}
28005
28006impl From<SurveyMessageResponseType> for i32 {
28007    #[must_use]
28008    fn from(e: SurveyMessageResponseType) -> Self {
28009        e as Self
28010    }
28011}
28012
28013impl ReadXdr for SurveyMessageResponseType {
28014    #[cfg(feature = "std")]
28015    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28016        r.with_limited_depth(|r| {
28017            let e = i32::read_xdr(r)?;
28018            let v: Self = e.try_into()?;
28019            Ok(v)
28020        })
28021    }
28022}
28023
28024impl WriteXdr for SurveyMessageResponseType {
28025    #[cfg(feature = "std")]
28026    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28027        w.with_limited_depth(|w| {
28028            let i: i32 = (*self).into();
28029            i.write_xdr(w)
28030        })
28031    }
28032}
28033
28034/// TimeSlicedSurveyStartCollectingMessage is an XDR Struct defines as:
28035///
28036/// ```text
28037/// struct TimeSlicedSurveyStartCollectingMessage
28038/// {
28039///     NodeID surveyorID;
28040///     uint32 nonce;
28041///     uint32 ledgerNum;
28042/// };
28043/// ```
28044///
28045#[cfg_attr(feature = "alloc", derive(Default))]
28046#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28047#[cfg_eval::cfg_eval]
28048#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28049#[cfg_attr(
28050    all(feature = "serde", feature = "alloc"),
28051    serde_with::serde_as,
28052    derive(serde::Serialize, serde::Deserialize),
28053    serde(rename_all = "snake_case")
28054)]
28055#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28056pub struct TimeSlicedSurveyStartCollectingMessage {
28057    pub surveyor_id: NodeId,
28058    pub nonce: u32,
28059    pub ledger_num: u32,
28060}
28061
28062impl ReadXdr for TimeSlicedSurveyStartCollectingMessage {
28063    #[cfg(feature = "std")]
28064    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28065        r.with_limited_depth(|r| {
28066            Ok(Self {
28067                surveyor_id: NodeId::read_xdr(r)?,
28068                nonce: u32::read_xdr(r)?,
28069                ledger_num: u32::read_xdr(r)?,
28070            })
28071        })
28072    }
28073}
28074
28075impl WriteXdr for TimeSlicedSurveyStartCollectingMessage {
28076    #[cfg(feature = "std")]
28077    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28078        w.with_limited_depth(|w| {
28079            self.surveyor_id.write_xdr(w)?;
28080            self.nonce.write_xdr(w)?;
28081            self.ledger_num.write_xdr(w)?;
28082            Ok(())
28083        })
28084    }
28085}
28086
28087/// SignedTimeSlicedSurveyStartCollectingMessage is an XDR Struct defines as:
28088///
28089/// ```text
28090/// struct SignedTimeSlicedSurveyStartCollectingMessage
28091/// {
28092///     Signature signature;
28093///     TimeSlicedSurveyStartCollectingMessage startCollecting;
28094/// };
28095/// ```
28096///
28097#[cfg_attr(feature = "alloc", derive(Default))]
28098#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28099#[cfg_eval::cfg_eval]
28100#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28101#[cfg_attr(
28102    all(feature = "serde", feature = "alloc"),
28103    serde_with::serde_as,
28104    derive(serde::Serialize, serde::Deserialize),
28105    serde(rename_all = "snake_case")
28106)]
28107#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28108pub struct SignedTimeSlicedSurveyStartCollectingMessage {
28109    pub signature: Signature,
28110    pub start_collecting: TimeSlicedSurveyStartCollectingMessage,
28111}
28112
28113impl ReadXdr for SignedTimeSlicedSurveyStartCollectingMessage {
28114    #[cfg(feature = "std")]
28115    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28116        r.with_limited_depth(|r| {
28117            Ok(Self {
28118                signature: Signature::read_xdr(r)?,
28119                start_collecting: TimeSlicedSurveyStartCollectingMessage::read_xdr(r)?,
28120            })
28121        })
28122    }
28123}
28124
28125impl WriteXdr for SignedTimeSlicedSurveyStartCollectingMessage {
28126    #[cfg(feature = "std")]
28127    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28128        w.with_limited_depth(|w| {
28129            self.signature.write_xdr(w)?;
28130            self.start_collecting.write_xdr(w)?;
28131            Ok(())
28132        })
28133    }
28134}
28135
28136/// TimeSlicedSurveyStopCollectingMessage is an XDR Struct defines as:
28137///
28138/// ```text
28139/// struct TimeSlicedSurveyStopCollectingMessage
28140/// {
28141///     NodeID surveyorID;
28142///     uint32 nonce;
28143///     uint32 ledgerNum;
28144/// };
28145/// ```
28146///
28147#[cfg_attr(feature = "alloc", derive(Default))]
28148#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28149#[cfg_eval::cfg_eval]
28150#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28151#[cfg_attr(
28152    all(feature = "serde", feature = "alloc"),
28153    serde_with::serde_as,
28154    derive(serde::Serialize, serde::Deserialize),
28155    serde(rename_all = "snake_case")
28156)]
28157#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28158pub struct TimeSlicedSurveyStopCollectingMessage {
28159    pub surveyor_id: NodeId,
28160    pub nonce: u32,
28161    pub ledger_num: u32,
28162}
28163
28164impl ReadXdr for TimeSlicedSurveyStopCollectingMessage {
28165    #[cfg(feature = "std")]
28166    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28167        r.with_limited_depth(|r| {
28168            Ok(Self {
28169                surveyor_id: NodeId::read_xdr(r)?,
28170                nonce: u32::read_xdr(r)?,
28171                ledger_num: u32::read_xdr(r)?,
28172            })
28173        })
28174    }
28175}
28176
28177impl WriteXdr for TimeSlicedSurveyStopCollectingMessage {
28178    #[cfg(feature = "std")]
28179    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28180        w.with_limited_depth(|w| {
28181            self.surveyor_id.write_xdr(w)?;
28182            self.nonce.write_xdr(w)?;
28183            self.ledger_num.write_xdr(w)?;
28184            Ok(())
28185        })
28186    }
28187}
28188
28189/// SignedTimeSlicedSurveyStopCollectingMessage is an XDR Struct defines as:
28190///
28191/// ```text
28192/// struct SignedTimeSlicedSurveyStopCollectingMessage
28193/// {
28194///     Signature signature;
28195///     TimeSlicedSurveyStopCollectingMessage stopCollecting;
28196/// };
28197/// ```
28198///
28199#[cfg_attr(feature = "alloc", derive(Default))]
28200#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28201#[cfg_eval::cfg_eval]
28202#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28203#[cfg_attr(
28204    all(feature = "serde", feature = "alloc"),
28205    serde_with::serde_as,
28206    derive(serde::Serialize, serde::Deserialize),
28207    serde(rename_all = "snake_case")
28208)]
28209#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28210pub struct SignedTimeSlicedSurveyStopCollectingMessage {
28211    pub signature: Signature,
28212    pub stop_collecting: TimeSlicedSurveyStopCollectingMessage,
28213}
28214
28215impl ReadXdr for SignedTimeSlicedSurveyStopCollectingMessage {
28216    #[cfg(feature = "std")]
28217    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28218        r.with_limited_depth(|r| {
28219            Ok(Self {
28220                signature: Signature::read_xdr(r)?,
28221                stop_collecting: TimeSlicedSurveyStopCollectingMessage::read_xdr(r)?,
28222            })
28223        })
28224    }
28225}
28226
28227impl WriteXdr for SignedTimeSlicedSurveyStopCollectingMessage {
28228    #[cfg(feature = "std")]
28229    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28230        w.with_limited_depth(|w| {
28231            self.signature.write_xdr(w)?;
28232            self.stop_collecting.write_xdr(w)?;
28233            Ok(())
28234        })
28235    }
28236}
28237
28238/// SurveyRequestMessage is an XDR Struct defines as:
28239///
28240/// ```text
28241/// struct SurveyRequestMessage
28242/// {
28243///     NodeID surveyorPeerID;
28244///     NodeID surveyedPeerID;
28245///     uint32 ledgerNum;
28246///     Curve25519Public encryptionKey;
28247///     SurveyMessageCommandType commandType;
28248/// };
28249/// ```
28250///
28251#[cfg_attr(feature = "alloc", derive(Default))]
28252#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28253#[cfg_eval::cfg_eval]
28254#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28255#[cfg_attr(
28256    all(feature = "serde", feature = "alloc"),
28257    serde_with::serde_as,
28258    derive(serde::Serialize, serde::Deserialize),
28259    serde(rename_all = "snake_case")
28260)]
28261#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28262pub struct SurveyRequestMessage {
28263    pub surveyor_peer_id: NodeId,
28264    pub surveyed_peer_id: NodeId,
28265    pub ledger_num: u32,
28266    pub encryption_key: Curve25519Public,
28267    pub command_type: SurveyMessageCommandType,
28268}
28269
28270impl ReadXdr for SurveyRequestMessage {
28271    #[cfg(feature = "std")]
28272    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28273        r.with_limited_depth(|r| {
28274            Ok(Self {
28275                surveyor_peer_id: NodeId::read_xdr(r)?,
28276                surveyed_peer_id: NodeId::read_xdr(r)?,
28277                ledger_num: u32::read_xdr(r)?,
28278                encryption_key: Curve25519Public::read_xdr(r)?,
28279                command_type: SurveyMessageCommandType::read_xdr(r)?,
28280            })
28281        })
28282    }
28283}
28284
28285impl WriteXdr for SurveyRequestMessage {
28286    #[cfg(feature = "std")]
28287    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28288        w.with_limited_depth(|w| {
28289            self.surveyor_peer_id.write_xdr(w)?;
28290            self.surveyed_peer_id.write_xdr(w)?;
28291            self.ledger_num.write_xdr(w)?;
28292            self.encryption_key.write_xdr(w)?;
28293            self.command_type.write_xdr(w)?;
28294            Ok(())
28295        })
28296    }
28297}
28298
28299/// TimeSlicedSurveyRequestMessage is an XDR Struct defines as:
28300///
28301/// ```text
28302/// struct TimeSlicedSurveyRequestMessage
28303/// {
28304///     SurveyRequestMessage request;
28305///     uint32 nonce;
28306///     uint32 inboundPeersIndex;
28307///     uint32 outboundPeersIndex;
28308/// };
28309/// ```
28310///
28311#[cfg_attr(feature = "alloc", derive(Default))]
28312#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28313#[cfg_eval::cfg_eval]
28314#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28315#[cfg_attr(
28316    all(feature = "serde", feature = "alloc"),
28317    serde_with::serde_as,
28318    derive(serde::Serialize, serde::Deserialize),
28319    serde(rename_all = "snake_case")
28320)]
28321#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28322pub struct TimeSlicedSurveyRequestMessage {
28323    pub request: SurveyRequestMessage,
28324    pub nonce: u32,
28325    pub inbound_peers_index: u32,
28326    pub outbound_peers_index: u32,
28327}
28328
28329impl ReadXdr for TimeSlicedSurveyRequestMessage {
28330    #[cfg(feature = "std")]
28331    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28332        r.with_limited_depth(|r| {
28333            Ok(Self {
28334                request: SurveyRequestMessage::read_xdr(r)?,
28335                nonce: u32::read_xdr(r)?,
28336                inbound_peers_index: u32::read_xdr(r)?,
28337                outbound_peers_index: u32::read_xdr(r)?,
28338            })
28339        })
28340    }
28341}
28342
28343impl WriteXdr for TimeSlicedSurveyRequestMessage {
28344    #[cfg(feature = "std")]
28345    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28346        w.with_limited_depth(|w| {
28347            self.request.write_xdr(w)?;
28348            self.nonce.write_xdr(w)?;
28349            self.inbound_peers_index.write_xdr(w)?;
28350            self.outbound_peers_index.write_xdr(w)?;
28351            Ok(())
28352        })
28353    }
28354}
28355
28356/// SignedTimeSlicedSurveyRequestMessage is an XDR Struct defines as:
28357///
28358/// ```text
28359/// struct SignedTimeSlicedSurveyRequestMessage
28360/// {
28361///     Signature requestSignature;
28362///     TimeSlicedSurveyRequestMessage request;
28363/// };
28364/// ```
28365///
28366#[cfg_attr(feature = "alloc", derive(Default))]
28367#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28368#[cfg_eval::cfg_eval]
28369#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28370#[cfg_attr(
28371    all(feature = "serde", feature = "alloc"),
28372    serde_with::serde_as,
28373    derive(serde::Serialize, serde::Deserialize),
28374    serde(rename_all = "snake_case")
28375)]
28376#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28377pub struct SignedTimeSlicedSurveyRequestMessage {
28378    pub request_signature: Signature,
28379    pub request: TimeSlicedSurveyRequestMessage,
28380}
28381
28382impl ReadXdr for SignedTimeSlicedSurveyRequestMessage {
28383    #[cfg(feature = "std")]
28384    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28385        r.with_limited_depth(|r| {
28386            Ok(Self {
28387                request_signature: Signature::read_xdr(r)?,
28388                request: TimeSlicedSurveyRequestMessage::read_xdr(r)?,
28389            })
28390        })
28391    }
28392}
28393
28394impl WriteXdr for SignedTimeSlicedSurveyRequestMessage {
28395    #[cfg(feature = "std")]
28396    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28397        w.with_limited_depth(|w| {
28398            self.request_signature.write_xdr(w)?;
28399            self.request.write_xdr(w)?;
28400            Ok(())
28401        })
28402    }
28403}
28404
28405/// EncryptedBody is an XDR Typedef defines as:
28406///
28407/// ```text
28408/// typedef opaque EncryptedBody<64000>;
28409/// ```
28410///
28411#[cfg_eval::cfg_eval]
28412#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
28413#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28414#[cfg_attr(
28415    all(feature = "serde", feature = "alloc"),
28416    serde_with::serde_as,
28417    derive(serde::Serialize, serde::Deserialize),
28418    serde(rename_all = "snake_case")
28419)]
28420#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28421#[derive(Debug)]
28422pub struct EncryptedBody(pub BytesM<64000>);
28423
28424impl From<EncryptedBody> for BytesM<64000> {
28425    #[must_use]
28426    fn from(x: EncryptedBody) -> Self {
28427        x.0
28428    }
28429}
28430
28431impl From<BytesM<64000>> for EncryptedBody {
28432    #[must_use]
28433    fn from(x: BytesM<64000>) -> Self {
28434        EncryptedBody(x)
28435    }
28436}
28437
28438impl AsRef<BytesM<64000>> for EncryptedBody {
28439    #[must_use]
28440    fn as_ref(&self) -> &BytesM<64000> {
28441        &self.0
28442    }
28443}
28444
28445impl ReadXdr for EncryptedBody {
28446    #[cfg(feature = "std")]
28447    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28448        r.with_limited_depth(|r| {
28449            let i = BytesM::<64000>::read_xdr(r)?;
28450            let v = EncryptedBody(i);
28451            Ok(v)
28452        })
28453    }
28454}
28455
28456impl WriteXdr for EncryptedBody {
28457    #[cfg(feature = "std")]
28458    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28459        w.with_limited_depth(|w| self.0.write_xdr(w))
28460    }
28461}
28462
28463impl Deref for EncryptedBody {
28464    type Target = BytesM<64000>;
28465    fn deref(&self) -> &Self::Target {
28466        &self.0
28467    }
28468}
28469
28470impl From<EncryptedBody> for Vec<u8> {
28471    #[must_use]
28472    fn from(x: EncryptedBody) -> Self {
28473        x.0 .0
28474    }
28475}
28476
28477impl TryFrom<Vec<u8>> for EncryptedBody {
28478    type Error = Error;
28479    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
28480        Ok(EncryptedBody(x.try_into()?))
28481    }
28482}
28483
28484#[cfg(feature = "alloc")]
28485impl TryFrom<&Vec<u8>> for EncryptedBody {
28486    type Error = Error;
28487    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
28488        Ok(EncryptedBody(x.try_into()?))
28489    }
28490}
28491
28492impl AsRef<Vec<u8>> for EncryptedBody {
28493    #[must_use]
28494    fn as_ref(&self) -> &Vec<u8> {
28495        &self.0 .0
28496    }
28497}
28498
28499impl AsRef<[u8]> for EncryptedBody {
28500    #[cfg(feature = "alloc")]
28501    #[must_use]
28502    fn as_ref(&self) -> &[u8] {
28503        &self.0 .0
28504    }
28505    #[cfg(not(feature = "alloc"))]
28506    #[must_use]
28507    fn as_ref(&self) -> &[u8] {
28508        self.0 .0
28509    }
28510}
28511
28512/// SurveyResponseMessage is an XDR Struct defines as:
28513///
28514/// ```text
28515/// struct SurveyResponseMessage
28516/// {
28517///     NodeID surveyorPeerID;
28518///     NodeID surveyedPeerID;
28519///     uint32 ledgerNum;
28520///     SurveyMessageCommandType commandType;
28521///     EncryptedBody encryptedBody;
28522/// };
28523/// ```
28524///
28525#[cfg_attr(feature = "alloc", derive(Default))]
28526#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28527#[cfg_eval::cfg_eval]
28528#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28529#[cfg_attr(
28530    all(feature = "serde", feature = "alloc"),
28531    serde_with::serde_as,
28532    derive(serde::Serialize, serde::Deserialize),
28533    serde(rename_all = "snake_case")
28534)]
28535#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28536pub struct SurveyResponseMessage {
28537    pub surveyor_peer_id: NodeId,
28538    pub surveyed_peer_id: NodeId,
28539    pub ledger_num: u32,
28540    pub command_type: SurveyMessageCommandType,
28541    pub encrypted_body: EncryptedBody,
28542}
28543
28544impl ReadXdr for SurveyResponseMessage {
28545    #[cfg(feature = "std")]
28546    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28547        r.with_limited_depth(|r| {
28548            Ok(Self {
28549                surveyor_peer_id: NodeId::read_xdr(r)?,
28550                surveyed_peer_id: NodeId::read_xdr(r)?,
28551                ledger_num: u32::read_xdr(r)?,
28552                command_type: SurveyMessageCommandType::read_xdr(r)?,
28553                encrypted_body: EncryptedBody::read_xdr(r)?,
28554            })
28555        })
28556    }
28557}
28558
28559impl WriteXdr for SurveyResponseMessage {
28560    #[cfg(feature = "std")]
28561    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28562        w.with_limited_depth(|w| {
28563            self.surveyor_peer_id.write_xdr(w)?;
28564            self.surveyed_peer_id.write_xdr(w)?;
28565            self.ledger_num.write_xdr(w)?;
28566            self.command_type.write_xdr(w)?;
28567            self.encrypted_body.write_xdr(w)?;
28568            Ok(())
28569        })
28570    }
28571}
28572
28573/// TimeSlicedSurveyResponseMessage is an XDR Struct defines as:
28574///
28575/// ```text
28576/// struct TimeSlicedSurveyResponseMessage
28577/// {
28578///     SurveyResponseMessage response;
28579///     uint32 nonce;
28580/// };
28581/// ```
28582///
28583#[cfg_attr(feature = "alloc", derive(Default))]
28584#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28585#[cfg_eval::cfg_eval]
28586#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28587#[cfg_attr(
28588    all(feature = "serde", feature = "alloc"),
28589    serde_with::serde_as,
28590    derive(serde::Serialize, serde::Deserialize),
28591    serde(rename_all = "snake_case")
28592)]
28593#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28594pub struct TimeSlicedSurveyResponseMessage {
28595    pub response: SurveyResponseMessage,
28596    pub nonce: u32,
28597}
28598
28599impl ReadXdr for TimeSlicedSurveyResponseMessage {
28600    #[cfg(feature = "std")]
28601    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28602        r.with_limited_depth(|r| {
28603            Ok(Self {
28604                response: SurveyResponseMessage::read_xdr(r)?,
28605                nonce: u32::read_xdr(r)?,
28606            })
28607        })
28608    }
28609}
28610
28611impl WriteXdr for TimeSlicedSurveyResponseMessage {
28612    #[cfg(feature = "std")]
28613    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28614        w.with_limited_depth(|w| {
28615            self.response.write_xdr(w)?;
28616            self.nonce.write_xdr(w)?;
28617            Ok(())
28618        })
28619    }
28620}
28621
28622/// SignedTimeSlicedSurveyResponseMessage is an XDR Struct defines as:
28623///
28624/// ```text
28625/// struct SignedTimeSlicedSurveyResponseMessage
28626/// {
28627///     Signature responseSignature;
28628///     TimeSlicedSurveyResponseMessage response;
28629/// };
28630/// ```
28631///
28632#[cfg_attr(feature = "alloc", derive(Default))]
28633#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28634#[cfg_eval::cfg_eval]
28635#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28636#[cfg_attr(
28637    all(feature = "serde", feature = "alloc"),
28638    serde_with::serde_as,
28639    derive(serde::Serialize, serde::Deserialize),
28640    serde(rename_all = "snake_case")
28641)]
28642#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28643pub struct SignedTimeSlicedSurveyResponseMessage {
28644    pub response_signature: Signature,
28645    pub response: TimeSlicedSurveyResponseMessage,
28646}
28647
28648impl ReadXdr for SignedTimeSlicedSurveyResponseMessage {
28649    #[cfg(feature = "std")]
28650    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28651        r.with_limited_depth(|r| {
28652            Ok(Self {
28653                response_signature: Signature::read_xdr(r)?,
28654                response: TimeSlicedSurveyResponseMessage::read_xdr(r)?,
28655            })
28656        })
28657    }
28658}
28659
28660impl WriteXdr for SignedTimeSlicedSurveyResponseMessage {
28661    #[cfg(feature = "std")]
28662    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28663        w.with_limited_depth(|w| {
28664            self.response_signature.write_xdr(w)?;
28665            self.response.write_xdr(w)?;
28666            Ok(())
28667        })
28668    }
28669}
28670
28671/// PeerStats is an XDR Struct defines as:
28672///
28673/// ```text
28674/// struct PeerStats
28675/// {
28676///     NodeID id;
28677///     string versionStr<100>;
28678///     uint64 messagesRead;
28679///     uint64 messagesWritten;
28680///     uint64 bytesRead;
28681///     uint64 bytesWritten;
28682///     uint64 secondsConnected;
28683///
28684///     uint64 uniqueFloodBytesRecv;
28685///     uint64 duplicateFloodBytesRecv;
28686///     uint64 uniqueFetchBytesRecv;
28687///     uint64 duplicateFetchBytesRecv;
28688///
28689///     uint64 uniqueFloodMessageRecv;
28690///     uint64 duplicateFloodMessageRecv;
28691///     uint64 uniqueFetchMessageRecv;
28692///     uint64 duplicateFetchMessageRecv;
28693/// };
28694/// ```
28695///
28696#[cfg_attr(feature = "alloc", derive(Default))]
28697#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28698#[cfg_eval::cfg_eval]
28699#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28700#[cfg_attr(
28701    all(feature = "serde", feature = "alloc"),
28702    serde_with::serde_as,
28703    derive(serde::Serialize, serde::Deserialize),
28704    serde(rename_all = "snake_case")
28705)]
28706#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28707pub struct PeerStats {
28708    pub id: NodeId,
28709    pub version_str: StringM<100>,
28710    #[cfg_attr(
28711        all(feature = "serde", feature = "alloc"),
28712        serde_as(as = "NumberOrString")
28713    )]
28714    pub messages_read: u64,
28715    #[cfg_attr(
28716        all(feature = "serde", feature = "alloc"),
28717        serde_as(as = "NumberOrString")
28718    )]
28719    pub messages_written: u64,
28720    #[cfg_attr(
28721        all(feature = "serde", feature = "alloc"),
28722        serde_as(as = "NumberOrString")
28723    )]
28724    pub bytes_read: u64,
28725    #[cfg_attr(
28726        all(feature = "serde", feature = "alloc"),
28727        serde_as(as = "NumberOrString")
28728    )]
28729    pub bytes_written: u64,
28730    #[cfg_attr(
28731        all(feature = "serde", feature = "alloc"),
28732        serde_as(as = "NumberOrString")
28733    )]
28734    pub seconds_connected: u64,
28735    #[cfg_attr(
28736        all(feature = "serde", feature = "alloc"),
28737        serde_as(as = "NumberOrString")
28738    )]
28739    pub unique_flood_bytes_recv: u64,
28740    #[cfg_attr(
28741        all(feature = "serde", feature = "alloc"),
28742        serde_as(as = "NumberOrString")
28743    )]
28744    pub duplicate_flood_bytes_recv: u64,
28745    #[cfg_attr(
28746        all(feature = "serde", feature = "alloc"),
28747        serde_as(as = "NumberOrString")
28748    )]
28749    pub unique_fetch_bytes_recv: u64,
28750    #[cfg_attr(
28751        all(feature = "serde", feature = "alloc"),
28752        serde_as(as = "NumberOrString")
28753    )]
28754    pub duplicate_fetch_bytes_recv: u64,
28755    #[cfg_attr(
28756        all(feature = "serde", feature = "alloc"),
28757        serde_as(as = "NumberOrString")
28758    )]
28759    pub unique_flood_message_recv: u64,
28760    #[cfg_attr(
28761        all(feature = "serde", feature = "alloc"),
28762        serde_as(as = "NumberOrString")
28763    )]
28764    pub duplicate_flood_message_recv: u64,
28765    #[cfg_attr(
28766        all(feature = "serde", feature = "alloc"),
28767        serde_as(as = "NumberOrString")
28768    )]
28769    pub unique_fetch_message_recv: u64,
28770    #[cfg_attr(
28771        all(feature = "serde", feature = "alloc"),
28772        serde_as(as = "NumberOrString")
28773    )]
28774    pub duplicate_fetch_message_recv: u64,
28775}
28776
28777impl ReadXdr for PeerStats {
28778    #[cfg(feature = "std")]
28779    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28780        r.with_limited_depth(|r| {
28781            Ok(Self {
28782                id: NodeId::read_xdr(r)?,
28783                version_str: StringM::<100>::read_xdr(r)?,
28784                messages_read: u64::read_xdr(r)?,
28785                messages_written: u64::read_xdr(r)?,
28786                bytes_read: u64::read_xdr(r)?,
28787                bytes_written: u64::read_xdr(r)?,
28788                seconds_connected: u64::read_xdr(r)?,
28789                unique_flood_bytes_recv: u64::read_xdr(r)?,
28790                duplicate_flood_bytes_recv: u64::read_xdr(r)?,
28791                unique_fetch_bytes_recv: u64::read_xdr(r)?,
28792                duplicate_fetch_bytes_recv: u64::read_xdr(r)?,
28793                unique_flood_message_recv: u64::read_xdr(r)?,
28794                duplicate_flood_message_recv: u64::read_xdr(r)?,
28795                unique_fetch_message_recv: u64::read_xdr(r)?,
28796                duplicate_fetch_message_recv: u64::read_xdr(r)?,
28797            })
28798        })
28799    }
28800}
28801
28802impl WriteXdr for PeerStats {
28803    #[cfg(feature = "std")]
28804    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28805        w.with_limited_depth(|w| {
28806            self.id.write_xdr(w)?;
28807            self.version_str.write_xdr(w)?;
28808            self.messages_read.write_xdr(w)?;
28809            self.messages_written.write_xdr(w)?;
28810            self.bytes_read.write_xdr(w)?;
28811            self.bytes_written.write_xdr(w)?;
28812            self.seconds_connected.write_xdr(w)?;
28813            self.unique_flood_bytes_recv.write_xdr(w)?;
28814            self.duplicate_flood_bytes_recv.write_xdr(w)?;
28815            self.unique_fetch_bytes_recv.write_xdr(w)?;
28816            self.duplicate_fetch_bytes_recv.write_xdr(w)?;
28817            self.unique_flood_message_recv.write_xdr(w)?;
28818            self.duplicate_flood_message_recv.write_xdr(w)?;
28819            self.unique_fetch_message_recv.write_xdr(w)?;
28820            self.duplicate_fetch_message_recv.write_xdr(w)?;
28821            Ok(())
28822        })
28823    }
28824}
28825
28826/// TimeSlicedNodeData is an XDR Struct defines as:
28827///
28828/// ```text
28829/// struct TimeSlicedNodeData
28830/// {
28831///     uint32 addedAuthenticatedPeers;
28832///     uint32 droppedAuthenticatedPeers;
28833///     uint32 totalInboundPeerCount;
28834///     uint32 totalOutboundPeerCount;
28835///
28836///     // SCP stats
28837///     uint32 p75SCPFirstToSelfLatencyMs;
28838///     uint32 p75SCPSelfToOtherLatencyMs;
28839///
28840///     // How many times the node lost sync in the time slice
28841///     uint32 lostSyncCount;
28842///
28843///     // Config data
28844///     bool isValidator;
28845///     uint32 maxInboundPeerCount;
28846///     uint32 maxOutboundPeerCount;
28847/// };
28848/// ```
28849///
28850#[cfg_attr(feature = "alloc", derive(Default))]
28851#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28852#[cfg_eval::cfg_eval]
28853#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28854#[cfg_attr(
28855    all(feature = "serde", feature = "alloc"),
28856    serde_with::serde_as,
28857    derive(serde::Serialize, serde::Deserialize),
28858    serde(rename_all = "snake_case")
28859)]
28860#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28861pub struct TimeSlicedNodeData {
28862    pub added_authenticated_peers: u32,
28863    pub dropped_authenticated_peers: u32,
28864    pub total_inbound_peer_count: u32,
28865    pub total_outbound_peer_count: u32,
28866    pub p75_scp_first_to_self_latency_ms: u32,
28867    pub p75_scp_self_to_other_latency_ms: u32,
28868    pub lost_sync_count: u32,
28869    pub is_validator: bool,
28870    pub max_inbound_peer_count: u32,
28871    pub max_outbound_peer_count: u32,
28872}
28873
28874impl ReadXdr for TimeSlicedNodeData {
28875    #[cfg(feature = "std")]
28876    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28877        r.with_limited_depth(|r| {
28878            Ok(Self {
28879                added_authenticated_peers: u32::read_xdr(r)?,
28880                dropped_authenticated_peers: u32::read_xdr(r)?,
28881                total_inbound_peer_count: u32::read_xdr(r)?,
28882                total_outbound_peer_count: u32::read_xdr(r)?,
28883                p75_scp_first_to_self_latency_ms: u32::read_xdr(r)?,
28884                p75_scp_self_to_other_latency_ms: u32::read_xdr(r)?,
28885                lost_sync_count: u32::read_xdr(r)?,
28886                is_validator: bool::read_xdr(r)?,
28887                max_inbound_peer_count: u32::read_xdr(r)?,
28888                max_outbound_peer_count: u32::read_xdr(r)?,
28889            })
28890        })
28891    }
28892}
28893
28894impl WriteXdr for TimeSlicedNodeData {
28895    #[cfg(feature = "std")]
28896    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28897        w.with_limited_depth(|w| {
28898            self.added_authenticated_peers.write_xdr(w)?;
28899            self.dropped_authenticated_peers.write_xdr(w)?;
28900            self.total_inbound_peer_count.write_xdr(w)?;
28901            self.total_outbound_peer_count.write_xdr(w)?;
28902            self.p75_scp_first_to_self_latency_ms.write_xdr(w)?;
28903            self.p75_scp_self_to_other_latency_ms.write_xdr(w)?;
28904            self.lost_sync_count.write_xdr(w)?;
28905            self.is_validator.write_xdr(w)?;
28906            self.max_inbound_peer_count.write_xdr(w)?;
28907            self.max_outbound_peer_count.write_xdr(w)?;
28908            Ok(())
28909        })
28910    }
28911}
28912
28913/// TimeSlicedPeerData is an XDR Struct defines as:
28914///
28915/// ```text
28916/// struct TimeSlicedPeerData
28917/// {
28918///     PeerStats peerStats;
28919///     uint32 averageLatencyMs;
28920/// };
28921/// ```
28922///
28923#[cfg_attr(feature = "alloc", derive(Default))]
28924#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
28925#[cfg_eval::cfg_eval]
28926#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28927#[cfg_attr(
28928    all(feature = "serde", feature = "alloc"),
28929    serde_with::serde_as,
28930    derive(serde::Serialize, serde::Deserialize),
28931    serde(rename_all = "snake_case")
28932)]
28933#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28934pub struct TimeSlicedPeerData {
28935    pub peer_stats: PeerStats,
28936    pub average_latency_ms: u32,
28937}
28938
28939impl ReadXdr for TimeSlicedPeerData {
28940    #[cfg(feature = "std")]
28941    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
28942        r.with_limited_depth(|r| {
28943            Ok(Self {
28944                peer_stats: PeerStats::read_xdr(r)?,
28945                average_latency_ms: u32::read_xdr(r)?,
28946            })
28947        })
28948    }
28949}
28950
28951impl WriteXdr for TimeSlicedPeerData {
28952    #[cfg(feature = "std")]
28953    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
28954        w.with_limited_depth(|w| {
28955            self.peer_stats.write_xdr(w)?;
28956            self.average_latency_ms.write_xdr(w)?;
28957            Ok(())
28958        })
28959    }
28960}
28961
28962/// TimeSlicedPeerDataList is an XDR Typedef defines as:
28963///
28964/// ```text
28965/// typedef TimeSlicedPeerData TimeSlicedPeerDataList<25>;
28966/// ```
28967///
28968#[cfg_eval::cfg_eval]
28969#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
28970#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
28971#[cfg_attr(
28972    all(feature = "serde", feature = "alloc"),
28973    serde_with::serde_as,
28974    derive(serde::Serialize, serde::Deserialize),
28975    serde(rename_all = "snake_case")
28976)]
28977#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
28978#[derive(Debug)]
28979pub struct TimeSlicedPeerDataList(pub VecM<TimeSlicedPeerData, 25>);
28980
28981impl From<TimeSlicedPeerDataList> for VecM<TimeSlicedPeerData, 25> {
28982    #[must_use]
28983    fn from(x: TimeSlicedPeerDataList) -> Self {
28984        x.0
28985    }
28986}
28987
28988impl From<VecM<TimeSlicedPeerData, 25>> for TimeSlicedPeerDataList {
28989    #[must_use]
28990    fn from(x: VecM<TimeSlicedPeerData, 25>) -> Self {
28991        TimeSlicedPeerDataList(x)
28992    }
28993}
28994
28995impl AsRef<VecM<TimeSlicedPeerData, 25>> for TimeSlicedPeerDataList {
28996    #[must_use]
28997    fn as_ref(&self) -> &VecM<TimeSlicedPeerData, 25> {
28998        &self.0
28999    }
29000}
29001
29002impl ReadXdr for TimeSlicedPeerDataList {
29003    #[cfg(feature = "std")]
29004    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
29005        r.with_limited_depth(|r| {
29006            let i = VecM::<TimeSlicedPeerData, 25>::read_xdr(r)?;
29007            let v = TimeSlicedPeerDataList(i);
29008            Ok(v)
29009        })
29010    }
29011}
29012
29013impl WriteXdr for TimeSlicedPeerDataList {
29014    #[cfg(feature = "std")]
29015    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
29016        w.with_limited_depth(|w| self.0.write_xdr(w))
29017    }
29018}
29019
29020impl Deref for TimeSlicedPeerDataList {
29021    type Target = VecM<TimeSlicedPeerData, 25>;
29022    fn deref(&self) -> &Self::Target {
29023        &self.0
29024    }
29025}
29026
29027impl From<TimeSlicedPeerDataList> for Vec<TimeSlicedPeerData> {
29028    #[must_use]
29029    fn from(x: TimeSlicedPeerDataList) -> Self {
29030        x.0 .0
29031    }
29032}
29033
29034impl TryFrom<Vec<TimeSlicedPeerData>> for TimeSlicedPeerDataList {
29035    type Error = Error;
29036    fn try_from(x: Vec<TimeSlicedPeerData>) -> Result<Self, Error> {
29037        Ok(TimeSlicedPeerDataList(x.try_into()?))
29038    }
29039}
29040
29041#[cfg(feature = "alloc")]
29042impl TryFrom<&Vec<TimeSlicedPeerData>> for TimeSlicedPeerDataList {
29043    type Error = Error;
29044    fn try_from(x: &Vec<TimeSlicedPeerData>) -> Result<Self, Error> {
29045        Ok(TimeSlicedPeerDataList(x.try_into()?))
29046    }
29047}
29048
29049impl AsRef<Vec<TimeSlicedPeerData>> for TimeSlicedPeerDataList {
29050    #[must_use]
29051    fn as_ref(&self) -> &Vec<TimeSlicedPeerData> {
29052        &self.0 .0
29053    }
29054}
29055
29056impl AsRef<[TimeSlicedPeerData]> for TimeSlicedPeerDataList {
29057    #[cfg(feature = "alloc")]
29058    #[must_use]
29059    fn as_ref(&self) -> &[TimeSlicedPeerData] {
29060        &self.0 .0
29061    }
29062    #[cfg(not(feature = "alloc"))]
29063    #[must_use]
29064    fn as_ref(&self) -> &[TimeSlicedPeerData] {
29065        self.0 .0
29066    }
29067}
29068
29069/// TopologyResponseBodyV2 is an XDR Struct defines as:
29070///
29071/// ```text
29072/// struct TopologyResponseBodyV2
29073/// {
29074///     TimeSlicedPeerDataList inboundPeers;
29075///     TimeSlicedPeerDataList outboundPeers;
29076///     TimeSlicedNodeData nodeData;
29077/// };
29078/// ```
29079///
29080#[cfg_attr(feature = "alloc", derive(Default))]
29081#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
29082#[cfg_eval::cfg_eval]
29083#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29084#[cfg_attr(
29085    all(feature = "serde", feature = "alloc"),
29086    serde_with::serde_as,
29087    derive(serde::Serialize, serde::Deserialize),
29088    serde(rename_all = "snake_case")
29089)]
29090#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
29091pub struct TopologyResponseBodyV2 {
29092    pub inbound_peers: TimeSlicedPeerDataList,
29093    pub outbound_peers: TimeSlicedPeerDataList,
29094    pub node_data: TimeSlicedNodeData,
29095}
29096
29097impl ReadXdr for TopologyResponseBodyV2 {
29098    #[cfg(feature = "std")]
29099    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
29100        r.with_limited_depth(|r| {
29101            Ok(Self {
29102                inbound_peers: TimeSlicedPeerDataList::read_xdr(r)?,
29103                outbound_peers: TimeSlicedPeerDataList::read_xdr(r)?,
29104                node_data: TimeSlicedNodeData::read_xdr(r)?,
29105            })
29106        })
29107    }
29108}
29109
29110impl WriteXdr for TopologyResponseBodyV2 {
29111    #[cfg(feature = "std")]
29112    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
29113        w.with_limited_depth(|w| {
29114            self.inbound_peers.write_xdr(w)?;
29115            self.outbound_peers.write_xdr(w)?;
29116            self.node_data.write_xdr(w)?;
29117            Ok(())
29118        })
29119    }
29120}
29121
29122/// SurveyResponseBody is an XDR Union defines as:
29123///
29124/// ```text
29125/// union SurveyResponseBody switch (SurveyMessageResponseType type)
29126/// {
29127/// case SURVEY_TOPOLOGY_RESPONSE_V2:
29128///     TopologyResponseBodyV2 topologyResponseBodyV2;
29129/// };
29130/// ```
29131///
29132// union with discriminant SurveyMessageResponseType
29133#[cfg_eval::cfg_eval]
29134#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
29135#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29136#[cfg_attr(
29137    all(feature = "serde", feature = "alloc"),
29138    serde_with::serde_as,
29139    derive(serde::Serialize, serde::Deserialize),
29140    serde(rename_all = "snake_case")
29141)]
29142#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
29143#[allow(clippy::large_enum_variant)]
29144pub enum SurveyResponseBody {
29145    SurveyTopologyResponseV2(TopologyResponseBodyV2),
29146}
29147
29148#[cfg(feature = "alloc")]
29149impl Default for SurveyResponseBody {
29150    fn default() -> Self {
29151        Self::SurveyTopologyResponseV2(TopologyResponseBodyV2::default())
29152    }
29153}
29154
29155impl SurveyResponseBody {
29156    pub const VARIANTS: [SurveyMessageResponseType; 1] =
29157        [SurveyMessageResponseType::SurveyTopologyResponseV2];
29158    pub const VARIANTS_STR: [&'static str; 1] = ["SurveyTopologyResponseV2"];
29159
29160    #[must_use]
29161    pub const fn name(&self) -> &'static str {
29162        match self {
29163            Self::SurveyTopologyResponseV2(_) => "SurveyTopologyResponseV2",
29164        }
29165    }
29166
29167    #[must_use]
29168    pub const fn discriminant(&self) -> SurveyMessageResponseType {
29169        #[allow(clippy::match_same_arms)]
29170        match self {
29171            Self::SurveyTopologyResponseV2(_) => {
29172                SurveyMessageResponseType::SurveyTopologyResponseV2
29173            }
29174        }
29175    }
29176
29177    #[must_use]
29178    pub const fn variants() -> [SurveyMessageResponseType; 1] {
29179        Self::VARIANTS
29180    }
29181}
29182
29183impl Name for SurveyResponseBody {
29184    #[must_use]
29185    fn name(&self) -> &'static str {
29186        Self::name(self)
29187    }
29188}
29189
29190impl Discriminant<SurveyMessageResponseType> for SurveyResponseBody {
29191    #[must_use]
29192    fn discriminant(&self) -> SurveyMessageResponseType {
29193        Self::discriminant(self)
29194    }
29195}
29196
29197impl Variants<SurveyMessageResponseType> for SurveyResponseBody {
29198    fn variants() -> slice::Iter<'static, SurveyMessageResponseType> {
29199        Self::VARIANTS.iter()
29200    }
29201}
29202
29203impl Union<SurveyMessageResponseType> for SurveyResponseBody {}
29204
29205impl ReadXdr for SurveyResponseBody {
29206    #[cfg(feature = "std")]
29207    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
29208        r.with_limited_depth(|r| {
29209            let dv: SurveyMessageResponseType =
29210                <SurveyMessageResponseType as ReadXdr>::read_xdr(r)?;
29211            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
29212            let v = match dv {
29213                SurveyMessageResponseType::SurveyTopologyResponseV2 => {
29214                    Self::SurveyTopologyResponseV2(TopologyResponseBodyV2::read_xdr(r)?)
29215                }
29216                #[allow(unreachable_patterns)]
29217                _ => return Err(Error::Invalid),
29218            };
29219            Ok(v)
29220        })
29221    }
29222}
29223
29224impl WriteXdr for SurveyResponseBody {
29225    #[cfg(feature = "std")]
29226    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
29227        w.with_limited_depth(|w| {
29228            self.discriminant().write_xdr(w)?;
29229            #[allow(clippy::match_same_arms)]
29230            match self {
29231                Self::SurveyTopologyResponseV2(v) => v.write_xdr(w)?,
29232            };
29233            Ok(())
29234        })
29235    }
29236}
29237
29238/// TxAdvertVectorMaxSize is an XDR Const defines as:
29239///
29240/// ```text
29241/// const TX_ADVERT_VECTOR_MAX_SIZE = 1000;
29242/// ```
29243///
29244pub const TX_ADVERT_VECTOR_MAX_SIZE: u64 = 1000;
29245
29246/// TxAdvertVector is an XDR Typedef defines as:
29247///
29248/// ```text
29249/// typedef Hash TxAdvertVector<TX_ADVERT_VECTOR_MAX_SIZE>;
29250/// ```
29251///
29252#[cfg_eval::cfg_eval]
29253#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
29254#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29255#[cfg_attr(
29256    all(feature = "serde", feature = "alloc"),
29257    serde_with::serde_as,
29258    derive(serde::Serialize, serde::Deserialize),
29259    serde(rename_all = "snake_case")
29260)]
29261#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
29262#[derive(Debug)]
29263pub struct TxAdvertVector(pub VecM<Hash, 1000>);
29264
29265impl From<TxAdvertVector> for VecM<Hash, 1000> {
29266    #[must_use]
29267    fn from(x: TxAdvertVector) -> Self {
29268        x.0
29269    }
29270}
29271
29272impl From<VecM<Hash, 1000>> for TxAdvertVector {
29273    #[must_use]
29274    fn from(x: VecM<Hash, 1000>) -> Self {
29275        TxAdvertVector(x)
29276    }
29277}
29278
29279impl AsRef<VecM<Hash, 1000>> for TxAdvertVector {
29280    #[must_use]
29281    fn as_ref(&self) -> &VecM<Hash, 1000> {
29282        &self.0
29283    }
29284}
29285
29286impl ReadXdr for TxAdvertVector {
29287    #[cfg(feature = "std")]
29288    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
29289        r.with_limited_depth(|r| {
29290            let i = VecM::<Hash, 1000>::read_xdr(r)?;
29291            let v = TxAdvertVector(i);
29292            Ok(v)
29293        })
29294    }
29295}
29296
29297impl WriteXdr for TxAdvertVector {
29298    #[cfg(feature = "std")]
29299    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
29300        w.with_limited_depth(|w| self.0.write_xdr(w))
29301    }
29302}
29303
29304impl Deref for TxAdvertVector {
29305    type Target = VecM<Hash, 1000>;
29306    fn deref(&self) -> &Self::Target {
29307        &self.0
29308    }
29309}
29310
29311impl From<TxAdvertVector> for Vec<Hash> {
29312    #[must_use]
29313    fn from(x: TxAdvertVector) -> Self {
29314        x.0 .0
29315    }
29316}
29317
29318impl TryFrom<Vec<Hash>> for TxAdvertVector {
29319    type Error = Error;
29320    fn try_from(x: Vec<Hash>) -> Result<Self, Error> {
29321        Ok(TxAdvertVector(x.try_into()?))
29322    }
29323}
29324
29325#[cfg(feature = "alloc")]
29326impl TryFrom<&Vec<Hash>> for TxAdvertVector {
29327    type Error = Error;
29328    fn try_from(x: &Vec<Hash>) -> Result<Self, Error> {
29329        Ok(TxAdvertVector(x.try_into()?))
29330    }
29331}
29332
29333impl AsRef<Vec<Hash>> for TxAdvertVector {
29334    #[must_use]
29335    fn as_ref(&self) -> &Vec<Hash> {
29336        &self.0 .0
29337    }
29338}
29339
29340impl AsRef<[Hash]> for TxAdvertVector {
29341    #[cfg(feature = "alloc")]
29342    #[must_use]
29343    fn as_ref(&self) -> &[Hash] {
29344        &self.0 .0
29345    }
29346    #[cfg(not(feature = "alloc"))]
29347    #[must_use]
29348    fn as_ref(&self) -> &[Hash] {
29349        self.0 .0
29350    }
29351}
29352
29353/// FloodAdvert is an XDR Struct defines as:
29354///
29355/// ```text
29356/// struct FloodAdvert
29357/// {
29358///     TxAdvertVector txHashes;
29359/// };
29360/// ```
29361///
29362#[cfg_attr(feature = "alloc", derive(Default))]
29363#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
29364#[cfg_eval::cfg_eval]
29365#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29366#[cfg_attr(
29367    all(feature = "serde", feature = "alloc"),
29368    serde_with::serde_as,
29369    derive(serde::Serialize, serde::Deserialize),
29370    serde(rename_all = "snake_case")
29371)]
29372#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
29373pub struct FloodAdvert {
29374    pub tx_hashes: TxAdvertVector,
29375}
29376
29377impl ReadXdr for FloodAdvert {
29378    #[cfg(feature = "std")]
29379    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
29380        r.with_limited_depth(|r| {
29381            Ok(Self {
29382                tx_hashes: TxAdvertVector::read_xdr(r)?,
29383            })
29384        })
29385    }
29386}
29387
29388impl WriteXdr for FloodAdvert {
29389    #[cfg(feature = "std")]
29390    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
29391        w.with_limited_depth(|w| {
29392            self.tx_hashes.write_xdr(w)?;
29393            Ok(())
29394        })
29395    }
29396}
29397
29398/// TxDemandVectorMaxSize is an XDR Const defines as:
29399///
29400/// ```text
29401/// const TX_DEMAND_VECTOR_MAX_SIZE = 1000;
29402/// ```
29403///
29404pub const TX_DEMAND_VECTOR_MAX_SIZE: u64 = 1000;
29405
29406/// TxDemandVector is an XDR Typedef defines as:
29407///
29408/// ```text
29409/// typedef Hash TxDemandVector<TX_DEMAND_VECTOR_MAX_SIZE>;
29410/// ```
29411///
29412#[cfg_eval::cfg_eval]
29413#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
29414#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29415#[cfg_attr(
29416    all(feature = "serde", feature = "alloc"),
29417    serde_with::serde_as,
29418    derive(serde::Serialize, serde::Deserialize),
29419    serde(rename_all = "snake_case")
29420)]
29421#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
29422#[derive(Debug)]
29423pub struct TxDemandVector(pub VecM<Hash, 1000>);
29424
29425impl From<TxDemandVector> for VecM<Hash, 1000> {
29426    #[must_use]
29427    fn from(x: TxDemandVector) -> Self {
29428        x.0
29429    }
29430}
29431
29432impl From<VecM<Hash, 1000>> for TxDemandVector {
29433    #[must_use]
29434    fn from(x: VecM<Hash, 1000>) -> Self {
29435        TxDemandVector(x)
29436    }
29437}
29438
29439impl AsRef<VecM<Hash, 1000>> for TxDemandVector {
29440    #[must_use]
29441    fn as_ref(&self) -> &VecM<Hash, 1000> {
29442        &self.0
29443    }
29444}
29445
29446impl ReadXdr for TxDemandVector {
29447    #[cfg(feature = "std")]
29448    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
29449        r.with_limited_depth(|r| {
29450            let i = VecM::<Hash, 1000>::read_xdr(r)?;
29451            let v = TxDemandVector(i);
29452            Ok(v)
29453        })
29454    }
29455}
29456
29457impl WriteXdr for TxDemandVector {
29458    #[cfg(feature = "std")]
29459    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
29460        w.with_limited_depth(|w| self.0.write_xdr(w))
29461    }
29462}
29463
29464impl Deref for TxDemandVector {
29465    type Target = VecM<Hash, 1000>;
29466    fn deref(&self) -> &Self::Target {
29467        &self.0
29468    }
29469}
29470
29471impl From<TxDemandVector> for Vec<Hash> {
29472    #[must_use]
29473    fn from(x: TxDemandVector) -> Self {
29474        x.0 .0
29475    }
29476}
29477
29478impl TryFrom<Vec<Hash>> for TxDemandVector {
29479    type Error = Error;
29480    fn try_from(x: Vec<Hash>) -> Result<Self, Error> {
29481        Ok(TxDemandVector(x.try_into()?))
29482    }
29483}
29484
29485#[cfg(feature = "alloc")]
29486impl TryFrom<&Vec<Hash>> for TxDemandVector {
29487    type Error = Error;
29488    fn try_from(x: &Vec<Hash>) -> Result<Self, Error> {
29489        Ok(TxDemandVector(x.try_into()?))
29490    }
29491}
29492
29493impl AsRef<Vec<Hash>> for TxDemandVector {
29494    #[must_use]
29495    fn as_ref(&self) -> &Vec<Hash> {
29496        &self.0 .0
29497    }
29498}
29499
29500impl AsRef<[Hash]> for TxDemandVector {
29501    #[cfg(feature = "alloc")]
29502    #[must_use]
29503    fn as_ref(&self) -> &[Hash] {
29504        &self.0 .0
29505    }
29506    #[cfg(not(feature = "alloc"))]
29507    #[must_use]
29508    fn as_ref(&self) -> &[Hash] {
29509        self.0 .0
29510    }
29511}
29512
29513/// FloodDemand is an XDR Struct defines as:
29514///
29515/// ```text
29516/// struct FloodDemand
29517/// {
29518///     TxDemandVector txHashes;
29519/// };
29520/// ```
29521///
29522#[cfg_attr(feature = "alloc", derive(Default))]
29523#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
29524#[cfg_eval::cfg_eval]
29525#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29526#[cfg_attr(
29527    all(feature = "serde", feature = "alloc"),
29528    serde_with::serde_as,
29529    derive(serde::Serialize, serde::Deserialize),
29530    serde(rename_all = "snake_case")
29531)]
29532#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
29533pub struct FloodDemand {
29534    pub tx_hashes: TxDemandVector,
29535}
29536
29537impl ReadXdr for FloodDemand {
29538    #[cfg(feature = "std")]
29539    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
29540        r.with_limited_depth(|r| {
29541            Ok(Self {
29542                tx_hashes: TxDemandVector::read_xdr(r)?,
29543            })
29544        })
29545    }
29546}
29547
29548impl WriteXdr for FloodDemand {
29549    #[cfg(feature = "std")]
29550    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
29551        w.with_limited_depth(|w| {
29552            self.tx_hashes.write_xdr(w)?;
29553            Ok(())
29554        })
29555    }
29556}
29557
29558/// StellarMessage is an XDR Union defines as:
29559///
29560/// ```text
29561/// union StellarMessage switch (MessageType type)
29562/// {
29563/// case ERROR_MSG:
29564///     Error error;
29565/// case HELLO:
29566///     Hello hello;
29567/// case AUTH:
29568///     Auth auth;
29569/// case DONT_HAVE:
29570///     DontHave dontHave;
29571/// case PEERS:
29572///     PeerAddress peers<100>;
29573///
29574/// case GET_TX_SET:
29575///     uint256 txSetHash;
29576/// case TX_SET:
29577///     TransactionSet txSet;
29578/// case GENERALIZED_TX_SET:
29579///     GeneralizedTransactionSet generalizedTxSet;
29580///
29581/// case TRANSACTION:
29582///     TransactionEnvelope transaction;
29583///
29584/// case TIME_SLICED_SURVEY_REQUEST:
29585///     SignedTimeSlicedSurveyRequestMessage signedTimeSlicedSurveyRequestMessage;
29586///
29587/// case TIME_SLICED_SURVEY_RESPONSE:
29588///     SignedTimeSlicedSurveyResponseMessage signedTimeSlicedSurveyResponseMessage;
29589///
29590/// case TIME_SLICED_SURVEY_START_COLLECTING:
29591///     SignedTimeSlicedSurveyStartCollectingMessage
29592///         signedTimeSlicedSurveyStartCollectingMessage;
29593///
29594/// case TIME_SLICED_SURVEY_STOP_COLLECTING:
29595///     SignedTimeSlicedSurveyStopCollectingMessage
29596///         signedTimeSlicedSurveyStopCollectingMessage;
29597///
29598/// // SCP
29599/// case GET_SCP_QUORUMSET:
29600///     uint256 qSetHash;
29601/// case SCP_QUORUMSET:
29602///     SCPQuorumSet qSet;
29603/// case SCP_MESSAGE:
29604///     SCPEnvelope envelope;
29605/// case GET_SCP_STATE:
29606///     uint32 getSCPLedgerSeq; // ledger seq requested ; if 0, requests the latest
29607/// case SEND_MORE:
29608///     SendMore sendMoreMessage;
29609/// case SEND_MORE_EXTENDED:
29610///     SendMoreExtended sendMoreExtendedMessage;
29611/// // Pull mode
29612/// case FLOOD_ADVERT:
29613///      FloodAdvert floodAdvert;
29614/// case FLOOD_DEMAND:
29615///      FloodDemand floodDemand;
29616/// };
29617/// ```
29618///
29619// union with discriminant MessageType
29620#[cfg_eval::cfg_eval]
29621#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
29622#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29623#[cfg_attr(
29624    all(feature = "serde", feature = "alloc"),
29625    serde_with::serde_as,
29626    derive(serde::Serialize, serde::Deserialize),
29627    serde(rename_all = "snake_case")
29628)]
29629#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
29630#[allow(clippy::large_enum_variant)]
29631pub enum StellarMessage {
29632    ErrorMsg(SError),
29633    Hello(Hello),
29634    Auth(Auth),
29635    DontHave(DontHave),
29636    Peers(VecM<PeerAddress, 100>),
29637    GetTxSet(Uint256),
29638    TxSet(TransactionSet),
29639    GeneralizedTxSet(GeneralizedTransactionSet),
29640    Transaction(TransactionEnvelope),
29641    TimeSlicedSurveyRequest(SignedTimeSlicedSurveyRequestMessage),
29642    TimeSlicedSurveyResponse(SignedTimeSlicedSurveyResponseMessage),
29643    TimeSlicedSurveyStartCollecting(SignedTimeSlicedSurveyStartCollectingMessage),
29644    TimeSlicedSurveyStopCollecting(SignedTimeSlicedSurveyStopCollectingMessage),
29645    GetScpQuorumset(Uint256),
29646    ScpQuorumset(ScpQuorumSet),
29647    ScpMessage(ScpEnvelope),
29648    GetScpState(u32),
29649    SendMore(SendMore),
29650    SendMoreExtended(SendMoreExtended),
29651    FloodAdvert(FloodAdvert),
29652    FloodDemand(FloodDemand),
29653}
29654
29655#[cfg(feature = "alloc")]
29656impl Default for StellarMessage {
29657    fn default() -> Self {
29658        Self::ErrorMsg(SError::default())
29659    }
29660}
29661
29662impl StellarMessage {
29663    pub const VARIANTS: [MessageType; 21] = [
29664        MessageType::ErrorMsg,
29665        MessageType::Hello,
29666        MessageType::Auth,
29667        MessageType::DontHave,
29668        MessageType::Peers,
29669        MessageType::GetTxSet,
29670        MessageType::TxSet,
29671        MessageType::GeneralizedTxSet,
29672        MessageType::Transaction,
29673        MessageType::TimeSlicedSurveyRequest,
29674        MessageType::TimeSlicedSurveyResponse,
29675        MessageType::TimeSlicedSurveyStartCollecting,
29676        MessageType::TimeSlicedSurveyStopCollecting,
29677        MessageType::GetScpQuorumset,
29678        MessageType::ScpQuorumset,
29679        MessageType::ScpMessage,
29680        MessageType::GetScpState,
29681        MessageType::SendMore,
29682        MessageType::SendMoreExtended,
29683        MessageType::FloodAdvert,
29684        MessageType::FloodDemand,
29685    ];
29686    pub const VARIANTS_STR: [&'static str; 21] = [
29687        "ErrorMsg",
29688        "Hello",
29689        "Auth",
29690        "DontHave",
29691        "Peers",
29692        "GetTxSet",
29693        "TxSet",
29694        "GeneralizedTxSet",
29695        "Transaction",
29696        "TimeSlicedSurveyRequest",
29697        "TimeSlicedSurveyResponse",
29698        "TimeSlicedSurveyStartCollecting",
29699        "TimeSlicedSurveyStopCollecting",
29700        "GetScpQuorumset",
29701        "ScpQuorumset",
29702        "ScpMessage",
29703        "GetScpState",
29704        "SendMore",
29705        "SendMoreExtended",
29706        "FloodAdvert",
29707        "FloodDemand",
29708    ];
29709
29710    #[must_use]
29711    pub const fn name(&self) -> &'static str {
29712        match self {
29713            Self::ErrorMsg(_) => "ErrorMsg",
29714            Self::Hello(_) => "Hello",
29715            Self::Auth(_) => "Auth",
29716            Self::DontHave(_) => "DontHave",
29717            Self::Peers(_) => "Peers",
29718            Self::GetTxSet(_) => "GetTxSet",
29719            Self::TxSet(_) => "TxSet",
29720            Self::GeneralizedTxSet(_) => "GeneralizedTxSet",
29721            Self::Transaction(_) => "Transaction",
29722            Self::TimeSlicedSurveyRequest(_) => "TimeSlicedSurveyRequest",
29723            Self::TimeSlicedSurveyResponse(_) => "TimeSlicedSurveyResponse",
29724            Self::TimeSlicedSurveyStartCollecting(_) => "TimeSlicedSurveyStartCollecting",
29725            Self::TimeSlicedSurveyStopCollecting(_) => "TimeSlicedSurveyStopCollecting",
29726            Self::GetScpQuorumset(_) => "GetScpQuorumset",
29727            Self::ScpQuorumset(_) => "ScpQuorumset",
29728            Self::ScpMessage(_) => "ScpMessage",
29729            Self::GetScpState(_) => "GetScpState",
29730            Self::SendMore(_) => "SendMore",
29731            Self::SendMoreExtended(_) => "SendMoreExtended",
29732            Self::FloodAdvert(_) => "FloodAdvert",
29733            Self::FloodDemand(_) => "FloodDemand",
29734        }
29735    }
29736
29737    #[must_use]
29738    pub const fn discriminant(&self) -> MessageType {
29739        #[allow(clippy::match_same_arms)]
29740        match self {
29741            Self::ErrorMsg(_) => MessageType::ErrorMsg,
29742            Self::Hello(_) => MessageType::Hello,
29743            Self::Auth(_) => MessageType::Auth,
29744            Self::DontHave(_) => MessageType::DontHave,
29745            Self::Peers(_) => MessageType::Peers,
29746            Self::GetTxSet(_) => MessageType::GetTxSet,
29747            Self::TxSet(_) => MessageType::TxSet,
29748            Self::GeneralizedTxSet(_) => MessageType::GeneralizedTxSet,
29749            Self::Transaction(_) => MessageType::Transaction,
29750            Self::TimeSlicedSurveyRequest(_) => MessageType::TimeSlicedSurveyRequest,
29751            Self::TimeSlicedSurveyResponse(_) => MessageType::TimeSlicedSurveyResponse,
29752            Self::TimeSlicedSurveyStartCollecting(_) => {
29753                MessageType::TimeSlicedSurveyStartCollecting
29754            }
29755            Self::TimeSlicedSurveyStopCollecting(_) => MessageType::TimeSlicedSurveyStopCollecting,
29756            Self::GetScpQuorumset(_) => MessageType::GetScpQuorumset,
29757            Self::ScpQuorumset(_) => MessageType::ScpQuorumset,
29758            Self::ScpMessage(_) => MessageType::ScpMessage,
29759            Self::GetScpState(_) => MessageType::GetScpState,
29760            Self::SendMore(_) => MessageType::SendMore,
29761            Self::SendMoreExtended(_) => MessageType::SendMoreExtended,
29762            Self::FloodAdvert(_) => MessageType::FloodAdvert,
29763            Self::FloodDemand(_) => MessageType::FloodDemand,
29764        }
29765    }
29766
29767    #[must_use]
29768    pub const fn variants() -> [MessageType; 21] {
29769        Self::VARIANTS
29770    }
29771}
29772
29773impl Name for StellarMessage {
29774    #[must_use]
29775    fn name(&self) -> &'static str {
29776        Self::name(self)
29777    }
29778}
29779
29780impl Discriminant<MessageType> for StellarMessage {
29781    #[must_use]
29782    fn discriminant(&self) -> MessageType {
29783        Self::discriminant(self)
29784    }
29785}
29786
29787impl Variants<MessageType> for StellarMessage {
29788    fn variants() -> slice::Iter<'static, MessageType> {
29789        Self::VARIANTS.iter()
29790    }
29791}
29792
29793impl Union<MessageType> for StellarMessage {}
29794
29795impl ReadXdr for StellarMessage {
29796    #[cfg(feature = "std")]
29797    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
29798        r.with_limited_depth(|r| {
29799            let dv: MessageType = <MessageType as ReadXdr>::read_xdr(r)?;
29800            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
29801            let v = match dv {
29802                MessageType::ErrorMsg => Self::ErrorMsg(SError::read_xdr(r)?),
29803                MessageType::Hello => Self::Hello(Hello::read_xdr(r)?),
29804                MessageType::Auth => Self::Auth(Auth::read_xdr(r)?),
29805                MessageType::DontHave => Self::DontHave(DontHave::read_xdr(r)?),
29806                MessageType::Peers => Self::Peers(VecM::<PeerAddress, 100>::read_xdr(r)?),
29807                MessageType::GetTxSet => Self::GetTxSet(Uint256::read_xdr(r)?),
29808                MessageType::TxSet => Self::TxSet(TransactionSet::read_xdr(r)?),
29809                MessageType::GeneralizedTxSet => {
29810                    Self::GeneralizedTxSet(GeneralizedTransactionSet::read_xdr(r)?)
29811                }
29812                MessageType::Transaction => Self::Transaction(TransactionEnvelope::read_xdr(r)?),
29813                MessageType::TimeSlicedSurveyRequest => Self::TimeSlicedSurveyRequest(
29814                    SignedTimeSlicedSurveyRequestMessage::read_xdr(r)?,
29815                ),
29816                MessageType::TimeSlicedSurveyResponse => Self::TimeSlicedSurveyResponse(
29817                    SignedTimeSlicedSurveyResponseMessage::read_xdr(r)?,
29818                ),
29819                MessageType::TimeSlicedSurveyStartCollecting => {
29820                    Self::TimeSlicedSurveyStartCollecting(
29821                        SignedTimeSlicedSurveyStartCollectingMessage::read_xdr(r)?,
29822                    )
29823                }
29824                MessageType::TimeSlicedSurveyStopCollecting => {
29825                    Self::TimeSlicedSurveyStopCollecting(
29826                        SignedTimeSlicedSurveyStopCollectingMessage::read_xdr(r)?,
29827                    )
29828                }
29829                MessageType::GetScpQuorumset => Self::GetScpQuorumset(Uint256::read_xdr(r)?),
29830                MessageType::ScpQuorumset => Self::ScpQuorumset(ScpQuorumSet::read_xdr(r)?),
29831                MessageType::ScpMessage => Self::ScpMessage(ScpEnvelope::read_xdr(r)?),
29832                MessageType::GetScpState => Self::GetScpState(u32::read_xdr(r)?),
29833                MessageType::SendMore => Self::SendMore(SendMore::read_xdr(r)?),
29834                MessageType::SendMoreExtended => {
29835                    Self::SendMoreExtended(SendMoreExtended::read_xdr(r)?)
29836                }
29837                MessageType::FloodAdvert => Self::FloodAdvert(FloodAdvert::read_xdr(r)?),
29838                MessageType::FloodDemand => Self::FloodDemand(FloodDemand::read_xdr(r)?),
29839                #[allow(unreachable_patterns)]
29840                _ => return Err(Error::Invalid),
29841            };
29842            Ok(v)
29843        })
29844    }
29845}
29846
29847impl WriteXdr for StellarMessage {
29848    #[cfg(feature = "std")]
29849    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
29850        w.with_limited_depth(|w| {
29851            self.discriminant().write_xdr(w)?;
29852            #[allow(clippy::match_same_arms)]
29853            match self {
29854                Self::ErrorMsg(v) => v.write_xdr(w)?,
29855                Self::Hello(v) => v.write_xdr(w)?,
29856                Self::Auth(v) => v.write_xdr(w)?,
29857                Self::DontHave(v) => v.write_xdr(w)?,
29858                Self::Peers(v) => v.write_xdr(w)?,
29859                Self::GetTxSet(v) => v.write_xdr(w)?,
29860                Self::TxSet(v) => v.write_xdr(w)?,
29861                Self::GeneralizedTxSet(v) => v.write_xdr(w)?,
29862                Self::Transaction(v) => v.write_xdr(w)?,
29863                Self::TimeSlicedSurveyRequest(v) => v.write_xdr(w)?,
29864                Self::TimeSlicedSurveyResponse(v) => v.write_xdr(w)?,
29865                Self::TimeSlicedSurveyStartCollecting(v) => v.write_xdr(w)?,
29866                Self::TimeSlicedSurveyStopCollecting(v) => v.write_xdr(w)?,
29867                Self::GetScpQuorumset(v) => v.write_xdr(w)?,
29868                Self::ScpQuorumset(v) => v.write_xdr(w)?,
29869                Self::ScpMessage(v) => v.write_xdr(w)?,
29870                Self::GetScpState(v) => v.write_xdr(w)?,
29871                Self::SendMore(v) => v.write_xdr(w)?,
29872                Self::SendMoreExtended(v) => v.write_xdr(w)?,
29873                Self::FloodAdvert(v) => v.write_xdr(w)?,
29874                Self::FloodDemand(v) => v.write_xdr(w)?,
29875            };
29876            Ok(())
29877        })
29878    }
29879}
29880
29881/// AuthenticatedMessageV0 is an XDR NestedStruct defines as:
29882///
29883/// ```text
29884/// struct
29885///     {
29886///         uint64 sequence;
29887///         StellarMessage message;
29888///         HmacSha256Mac mac;
29889///     }
29890/// ```
29891///
29892#[cfg_attr(feature = "alloc", derive(Default))]
29893#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
29894#[cfg_eval::cfg_eval]
29895#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29896#[cfg_attr(
29897    all(feature = "serde", feature = "alloc"),
29898    serde_with::serde_as,
29899    derive(serde::Serialize, serde::Deserialize),
29900    serde(rename_all = "snake_case")
29901)]
29902#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
29903pub struct AuthenticatedMessageV0 {
29904    #[cfg_attr(
29905        all(feature = "serde", feature = "alloc"),
29906        serde_as(as = "NumberOrString")
29907    )]
29908    pub sequence: u64,
29909    pub message: StellarMessage,
29910    pub mac: HmacSha256Mac,
29911}
29912
29913impl ReadXdr for AuthenticatedMessageV0 {
29914    #[cfg(feature = "std")]
29915    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
29916        r.with_limited_depth(|r| {
29917            Ok(Self {
29918                sequence: u64::read_xdr(r)?,
29919                message: StellarMessage::read_xdr(r)?,
29920                mac: HmacSha256Mac::read_xdr(r)?,
29921            })
29922        })
29923    }
29924}
29925
29926impl WriteXdr for AuthenticatedMessageV0 {
29927    #[cfg(feature = "std")]
29928    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
29929        w.with_limited_depth(|w| {
29930            self.sequence.write_xdr(w)?;
29931            self.message.write_xdr(w)?;
29932            self.mac.write_xdr(w)?;
29933            Ok(())
29934        })
29935    }
29936}
29937
29938/// AuthenticatedMessage is an XDR Union defines as:
29939///
29940/// ```text
29941/// union AuthenticatedMessage switch (uint32 v)
29942/// {
29943/// case 0:
29944///     struct
29945///     {
29946///         uint64 sequence;
29947///         StellarMessage message;
29948///         HmacSha256Mac mac;
29949///     } v0;
29950/// };
29951/// ```
29952///
29953// union with discriminant u32
29954#[cfg_eval::cfg_eval]
29955#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
29956#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
29957#[cfg_attr(
29958    all(feature = "serde", feature = "alloc"),
29959    serde_with::serde_as,
29960    derive(serde::Serialize, serde::Deserialize),
29961    serde(rename_all = "snake_case")
29962)]
29963#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
29964#[allow(clippy::large_enum_variant)]
29965pub enum AuthenticatedMessage {
29966    V0(AuthenticatedMessageV0),
29967}
29968
29969#[cfg(feature = "alloc")]
29970impl Default for AuthenticatedMessage {
29971    fn default() -> Self {
29972        Self::V0(AuthenticatedMessageV0::default())
29973    }
29974}
29975
29976impl AuthenticatedMessage {
29977    pub const VARIANTS: [u32; 1] = [0];
29978    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
29979
29980    #[must_use]
29981    pub const fn name(&self) -> &'static str {
29982        match self {
29983            Self::V0(_) => "V0",
29984        }
29985    }
29986
29987    #[must_use]
29988    pub const fn discriminant(&self) -> u32 {
29989        #[allow(clippy::match_same_arms)]
29990        match self {
29991            Self::V0(_) => 0,
29992        }
29993    }
29994
29995    #[must_use]
29996    pub const fn variants() -> [u32; 1] {
29997        Self::VARIANTS
29998    }
29999}
30000
30001impl Name for AuthenticatedMessage {
30002    #[must_use]
30003    fn name(&self) -> &'static str {
30004        Self::name(self)
30005    }
30006}
30007
30008impl Discriminant<u32> for AuthenticatedMessage {
30009    #[must_use]
30010    fn discriminant(&self) -> u32 {
30011        Self::discriminant(self)
30012    }
30013}
30014
30015impl Variants<u32> for AuthenticatedMessage {
30016    fn variants() -> slice::Iter<'static, u32> {
30017        Self::VARIANTS.iter()
30018    }
30019}
30020
30021impl Union<u32> for AuthenticatedMessage {}
30022
30023impl ReadXdr for AuthenticatedMessage {
30024    #[cfg(feature = "std")]
30025    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
30026        r.with_limited_depth(|r| {
30027            let dv: u32 = <u32 as ReadXdr>::read_xdr(r)?;
30028            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
30029            let v = match dv {
30030                0 => Self::V0(AuthenticatedMessageV0::read_xdr(r)?),
30031                #[allow(unreachable_patterns)]
30032                _ => return Err(Error::Invalid),
30033            };
30034            Ok(v)
30035        })
30036    }
30037}
30038
30039impl WriteXdr for AuthenticatedMessage {
30040    #[cfg(feature = "std")]
30041    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
30042        w.with_limited_depth(|w| {
30043            self.discriminant().write_xdr(w)?;
30044            #[allow(clippy::match_same_arms)]
30045            match self {
30046                Self::V0(v) => v.write_xdr(w)?,
30047            };
30048            Ok(())
30049        })
30050    }
30051}
30052
30053/// MaxOpsPerTx is an XDR Const defines as:
30054///
30055/// ```text
30056/// const MAX_OPS_PER_TX = 100;
30057/// ```
30058///
30059pub const MAX_OPS_PER_TX: u64 = 100;
30060
30061/// LiquidityPoolParameters is an XDR Union defines as:
30062///
30063/// ```text
30064/// union LiquidityPoolParameters switch (LiquidityPoolType type)
30065/// {
30066/// case LIQUIDITY_POOL_CONSTANT_PRODUCT:
30067///     LiquidityPoolConstantProductParameters constantProduct;
30068/// };
30069/// ```
30070///
30071// union with discriminant LiquidityPoolType
30072#[cfg_eval::cfg_eval]
30073#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
30074#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30075#[cfg_attr(
30076    all(feature = "serde", feature = "alloc"),
30077    serde_with::serde_as,
30078    derive(serde::Serialize, serde::Deserialize),
30079    serde(rename_all = "snake_case")
30080)]
30081#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
30082#[allow(clippy::large_enum_variant)]
30083pub enum LiquidityPoolParameters {
30084    LiquidityPoolConstantProduct(LiquidityPoolConstantProductParameters),
30085}
30086
30087#[cfg(feature = "alloc")]
30088impl Default for LiquidityPoolParameters {
30089    fn default() -> Self {
30090        Self::LiquidityPoolConstantProduct(LiquidityPoolConstantProductParameters::default())
30091    }
30092}
30093
30094impl LiquidityPoolParameters {
30095    pub const VARIANTS: [LiquidityPoolType; 1] = [LiquidityPoolType::LiquidityPoolConstantProduct];
30096    pub const VARIANTS_STR: [&'static str; 1] = ["LiquidityPoolConstantProduct"];
30097
30098    #[must_use]
30099    pub const fn name(&self) -> &'static str {
30100        match self {
30101            Self::LiquidityPoolConstantProduct(_) => "LiquidityPoolConstantProduct",
30102        }
30103    }
30104
30105    #[must_use]
30106    pub const fn discriminant(&self) -> LiquidityPoolType {
30107        #[allow(clippy::match_same_arms)]
30108        match self {
30109            Self::LiquidityPoolConstantProduct(_) => {
30110                LiquidityPoolType::LiquidityPoolConstantProduct
30111            }
30112        }
30113    }
30114
30115    #[must_use]
30116    pub const fn variants() -> [LiquidityPoolType; 1] {
30117        Self::VARIANTS
30118    }
30119}
30120
30121impl Name for LiquidityPoolParameters {
30122    #[must_use]
30123    fn name(&self) -> &'static str {
30124        Self::name(self)
30125    }
30126}
30127
30128impl Discriminant<LiquidityPoolType> for LiquidityPoolParameters {
30129    #[must_use]
30130    fn discriminant(&self) -> LiquidityPoolType {
30131        Self::discriminant(self)
30132    }
30133}
30134
30135impl Variants<LiquidityPoolType> for LiquidityPoolParameters {
30136    fn variants() -> slice::Iter<'static, LiquidityPoolType> {
30137        Self::VARIANTS.iter()
30138    }
30139}
30140
30141impl Union<LiquidityPoolType> for LiquidityPoolParameters {}
30142
30143impl ReadXdr for LiquidityPoolParameters {
30144    #[cfg(feature = "std")]
30145    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
30146        r.with_limited_depth(|r| {
30147            let dv: LiquidityPoolType = <LiquidityPoolType as ReadXdr>::read_xdr(r)?;
30148            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
30149            let v = match dv {
30150                LiquidityPoolType::LiquidityPoolConstantProduct => {
30151                    Self::LiquidityPoolConstantProduct(
30152                        LiquidityPoolConstantProductParameters::read_xdr(r)?,
30153                    )
30154                }
30155                #[allow(unreachable_patterns)]
30156                _ => return Err(Error::Invalid),
30157            };
30158            Ok(v)
30159        })
30160    }
30161}
30162
30163impl WriteXdr for LiquidityPoolParameters {
30164    #[cfg(feature = "std")]
30165    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
30166        w.with_limited_depth(|w| {
30167            self.discriminant().write_xdr(w)?;
30168            #[allow(clippy::match_same_arms)]
30169            match self {
30170                Self::LiquidityPoolConstantProduct(v) => v.write_xdr(w)?,
30171            };
30172            Ok(())
30173        })
30174    }
30175}
30176
30177/// MuxedAccountMed25519 is an XDR NestedStruct defines as:
30178///
30179/// ```text
30180/// struct
30181///     {
30182///         uint64 id;
30183///         uint256 ed25519;
30184///     }
30185/// ```
30186///
30187#[cfg_attr(feature = "alloc", derive(Default))]
30188#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
30189#[cfg_eval::cfg_eval]
30190#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30191#[cfg_attr(
30192    all(feature = "serde", feature = "alloc"),
30193    derive(serde_with::SerializeDisplay)
30194)]
30195pub struct MuxedAccountMed25519 {
30196    pub id: u64,
30197    pub ed25519: Uint256,
30198}
30199
30200impl ReadXdr for MuxedAccountMed25519 {
30201    #[cfg(feature = "std")]
30202    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
30203        r.with_limited_depth(|r| {
30204            Ok(Self {
30205                id: u64::read_xdr(r)?,
30206                ed25519: Uint256::read_xdr(r)?,
30207            })
30208        })
30209    }
30210}
30211
30212impl WriteXdr for MuxedAccountMed25519 {
30213    #[cfg(feature = "std")]
30214    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
30215        w.with_limited_depth(|w| {
30216            self.id.write_xdr(w)?;
30217            self.ed25519.write_xdr(w)?;
30218            Ok(())
30219        })
30220    }
30221}
30222#[cfg(all(feature = "serde", feature = "alloc"))]
30223impl<'de> serde::Deserialize<'de> for MuxedAccountMed25519 {
30224    fn deserialize<D>(deserializer: D) -> core::result::Result<Self, D::Error>
30225    where
30226        D: serde::Deserializer<'de>,
30227    {
30228        use serde::Deserialize;
30229        #[derive(Deserialize)]
30230        struct MuxedAccountMed25519 {
30231            id: u64,
30232            ed25519: Uint256,
30233        }
30234        #[derive(Deserialize)]
30235        #[serde(untagged)]
30236        enum MuxedAccountMed25519OrString<'a> {
30237            Str(&'a str),
30238            String(String),
30239            MuxedAccountMed25519(MuxedAccountMed25519),
30240        }
30241        match MuxedAccountMed25519OrString::deserialize(deserializer)? {
30242            MuxedAccountMed25519OrString::Str(s) => s.parse().map_err(serde::de::Error::custom),
30243            MuxedAccountMed25519OrString::String(s) => s.parse().map_err(serde::de::Error::custom),
30244            MuxedAccountMed25519OrString::MuxedAccountMed25519(MuxedAccountMed25519 {
30245                id,
30246                ed25519,
30247            }) => Ok(self::MuxedAccountMed25519 { id, ed25519 }),
30248        }
30249    }
30250}
30251
30252/// MuxedAccount is an XDR Union defines as:
30253///
30254/// ```text
30255/// union MuxedAccount switch (CryptoKeyType type)
30256/// {
30257/// case KEY_TYPE_ED25519:
30258///     uint256 ed25519;
30259/// case KEY_TYPE_MUXED_ED25519:
30260///     struct
30261///     {
30262///         uint64 id;
30263///         uint256 ed25519;
30264///     } med25519;
30265/// };
30266/// ```
30267///
30268// union with discriminant CryptoKeyType
30269#[cfg_eval::cfg_eval]
30270#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
30271#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30272#[cfg_attr(
30273    all(feature = "serde", feature = "alloc"),
30274    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
30275)]
30276#[allow(clippy::large_enum_variant)]
30277pub enum MuxedAccount {
30278    Ed25519(Uint256),
30279    MuxedEd25519(MuxedAccountMed25519),
30280}
30281
30282#[cfg(feature = "alloc")]
30283impl Default for MuxedAccount {
30284    fn default() -> Self {
30285        Self::Ed25519(Uint256::default())
30286    }
30287}
30288
30289impl MuxedAccount {
30290    pub const VARIANTS: [CryptoKeyType; 2] = [CryptoKeyType::Ed25519, CryptoKeyType::MuxedEd25519];
30291    pub const VARIANTS_STR: [&'static str; 2] = ["Ed25519", "MuxedEd25519"];
30292
30293    #[must_use]
30294    pub const fn name(&self) -> &'static str {
30295        match self {
30296            Self::Ed25519(_) => "Ed25519",
30297            Self::MuxedEd25519(_) => "MuxedEd25519",
30298        }
30299    }
30300
30301    #[must_use]
30302    pub const fn discriminant(&self) -> CryptoKeyType {
30303        #[allow(clippy::match_same_arms)]
30304        match self {
30305            Self::Ed25519(_) => CryptoKeyType::Ed25519,
30306            Self::MuxedEd25519(_) => CryptoKeyType::MuxedEd25519,
30307        }
30308    }
30309
30310    #[must_use]
30311    pub const fn variants() -> [CryptoKeyType; 2] {
30312        Self::VARIANTS
30313    }
30314}
30315
30316impl Name for MuxedAccount {
30317    #[must_use]
30318    fn name(&self) -> &'static str {
30319        Self::name(self)
30320    }
30321}
30322
30323impl Discriminant<CryptoKeyType> for MuxedAccount {
30324    #[must_use]
30325    fn discriminant(&self) -> CryptoKeyType {
30326        Self::discriminant(self)
30327    }
30328}
30329
30330impl Variants<CryptoKeyType> for MuxedAccount {
30331    fn variants() -> slice::Iter<'static, CryptoKeyType> {
30332        Self::VARIANTS.iter()
30333    }
30334}
30335
30336impl Union<CryptoKeyType> for MuxedAccount {}
30337
30338impl ReadXdr for MuxedAccount {
30339    #[cfg(feature = "std")]
30340    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
30341        r.with_limited_depth(|r| {
30342            let dv: CryptoKeyType = <CryptoKeyType as ReadXdr>::read_xdr(r)?;
30343            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
30344            let v = match dv {
30345                CryptoKeyType::Ed25519 => Self::Ed25519(Uint256::read_xdr(r)?),
30346                CryptoKeyType::MuxedEd25519 => {
30347                    Self::MuxedEd25519(MuxedAccountMed25519::read_xdr(r)?)
30348                }
30349                #[allow(unreachable_patterns)]
30350                _ => return Err(Error::Invalid),
30351            };
30352            Ok(v)
30353        })
30354    }
30355}
30356
30357impl WriteXdr for MuxedAccount {
30358    #[cfg(feature = "std")]
30359    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
30360        w.with_limited_depth(|w| {
30361            self.discriminant().write_xdr(w)?;
30362            #[allow(clippy::match_same_arms)]
30363            match self {
30364                Self::Ed25519(v) => v.write_xdr(w)?,
30365                Self::MuxedEd25519(v) => v.write_xdr(w)?,
30366            };
30367            Ok(())
30368        })
30369    }
30370}
30371
30372/// DecoratedSignature is an XDR Struct defines as:
30373///
30374/// ```text
30375/// struct DecoratedSignature
30376/// {
30377///     SignatureHint hint;  // last 4 bytes of the public key, used as a hint
30378///     Signature signature; // actual signature
30379/// };
30380/// ```
30381///
30382#[cfg_attr(feature = "alloc", derive(Default))]
30383#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
30384#[cfg_eval::cfg_eval]
30385#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30386#[cfg_attr(
30387    all(feature = "serde", feature = "alloc"),
30388    serde_with::serde_as,
30389    derive(serde::Serialize, serde::Deserialize),
30390    serde(rename_all = "snake_case")
30391)]
30392#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
30393pub struct DecoratedSignature {
30394    pub hint: SignatureHint,
30395    pub signature: Signature,
30396}
30397
30398impl ReadXdr for DecoratedSignature {
30399    #[cfg(feature = "std")]
30400    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
30401        r.with_limited_depth(|r| {
30402            Ok(Self {
30403                hint: SignatureHint::read_xdr(r)?,
30404                signature: Signature::read_xdr(r)?,
30405            })
30406        })
30407    }
30408}
30409
30410impl WriteXdr for DecoratedSignature {
30411    #[cfg(feature = "std")]
30412    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
30413        w.with_limited_depth(|w| {
30414            self.hint.write_xdr(w)?;
30415            self.signature.write_xdr(w)?;
30416            Ok(())
30417        })
30418    }
30419}
30420
30421/// OperationType is an XDR Enum defines as:
30422///
30423/// ```text
30424/// enum OperationType
30425/// {
30426///     CREATE_ACCOUNT = 0,
30427///     PAYMENT = 1,
30428///     PATH_PAYMENT_STRICT_RECEIVE = 2,
30429///     MANAGE_SELL_OFFER = 3,
30430///     CREATE_PASSIVE_SELL_OFFER = 4,
30431///     SET_OPTIONS = 5,
30432///     CHANGE_TRUST = 6,
30433///     ALLOW_TRUST = 7,
30434///     ACCOUNT_MERGE = 8,
30435///     INFLATION = 9,
30436///     MANAGE_DATA = 10,
30437///     BUMP_SEQUENCE = 11,
30438///     MANAGE_BUY_OFFER = 12,
30439///     PATH_PAYMENT_STRICT_SEND = 13,
30440///     CREATE_CLAIMABLE_BALANCE = 14,
30441///     CLAIM_CLAIMABLE_BALANCE = 15,
30442///     BEGIN_SPONSORING_FUTURE_RESERVES = 16,
30443///     END_SPONSORING_FUTURE_RESERVES = 17,
30444///     REVOKE_SPONSORSHIP = 18,
30445///     CLAWBACK = 19,
30446///     CLAWBACK_CLAIMABLE_BALANCE = 20,
30447///     SET_TRUST_LINE_FLAGS = 21,
30448///     LIQUIDITY_POOL_DEPOSIT = 22,
30449///     LIQUIDITY_POOL_WITHDRAW = 23,
30450///     INVOKE_HOST_FUNCTION = 24,
30451///     EXTEND_FOOTPRINT_TTL = 25,
30452///     RESTORE_FOOTPRINT = 26
30453/// };
30454/// ```
30455///
30456// enum
30457#[cfg_attr(feature = "alloc", derive(Default))]
30458#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
30459#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30460#[cfg_attr(
30461    all(feature = "serde", feature = "alloc"),
30462    derive(serde::Serialize, serde::Deserialize),
30463    serde(rename_all = "snake_case")
30464)]
30465#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
30466#[repr(i32)]
30467pub enum OperationType {
30468    #[cfg_attr(feature = "alloc", default)]
30469    CreateAccount = 0,
30470    Payment = 1,
30471    PathPaymentStrictReceive = 2,
30472    ManageSellOffer = 3,
30473    CreatePassiveSellOffer = 4,
30474    SetOptions = 5,
30475    ChangeTrust = 6,
30476    AllowTrust = 7,
30477    AccountMerge = 8,
30478    Inflation = 9,
30479    ManageData = 10,
30480    BumpSequence = 11,
30481    ManageBuyOffer = 12,
30482    PathPaymentStrictSend = 13,
30483    CreateClaimableBalance = 14,
30484    ClaimClaimableBalance = 15,
30485    BeginSponsoringFutureReserves = 16,
30486    EndSponsoringFutureReserves = 17,
30487    RevokeSponsorship = 18,
30488    Clawback = 19,
30489    ClawbackClaimableBalance = 20,
30490    SetTrustLineFlags = 21,
30491    LiquidityPoolDeposit = 22,
30492    LiquidityPoolWithdraw = 23,
30493    InvokeHostFunction = 24,
30494    ExtendFootprintTtl = 25,
30495    RestoreFootprint = 26,
30496}
30497
30498impl OperationType {
30499    pub const VARIANTS: [OperationType; 27] = [
30500        OperationType::CreateAccount,
30501        OperationType::Payment,
30502        OperationType::PathPaymentStrictReceive,
30503        OperationType::ManageSellOffer,
30504        OperationType::CreatePassiveSellOffer,
30505        OperationType::SetOptions,
30506        OperationType::ChangeTrust,
30507        OperationType::AllowTrust,
30508        OperationType::AccountMerge,
30509        OperationType::Inflation,
30510        OperationType::ManageData,
30511        OperationType::BumpSequence,
30512        OperationType::ManageBuyOffer,
30513        OperationType::PathPaymentStrictSend,
30514        OperationType::CreateClaimableBalance,
30515        OperationType::ClaimClaimableBalance,
30516        OperationType::BeginSponsoringFutureReserves,
30517        OperationType::EndSponsoringFutureReserves,
30518        OperationType::RevokeSponsorship,
30519        OperationType::Clawback,
30520        OperationType::ClawbackClaimableBalance,
30521        OperationType::SetTrustLineFlags,
30522        OperationType::LiquidityPoolDeposit,
30523        OperationType::LiquidityPoolWithdraw,
30524        OperationType::InvokeHostFunction,
30525        OperationType::ExtendFootprintTtl,
30526        OperationType::RestoreFootprint,
30527    ];
30528    pub const VARIANTS_STR: [&'static str; 27] = [
30529        "CreateAccount",
30530        "Payment",
30531        "PathPaymentStrictReceive",
30532        "ManageSellOffer",
30533        "CreatePassiveSellOffer",
30534        "SetOptions",
30535        "ChangeTrust",
30536        "AllowTrust",
30537        "AccountMerge",
30538        "Inflation",
30539        "ManageData",
30540        "BumpSequence",
30541        "ManageBuyOffer",
30542        "PathPaymentStrictSend",
30543        "CreateClaimableBalance",
30544        "ClaimClaimableBalance",
30545        "BeginSponsoringFutureReserves",
30546        "EndSponsoringFutureReserves",
30547        "RevokeSponsorship",
30548        "Clawback",
30549        "ClawbackClaimableBalance",
30550        "SetTrustLineFlags",
30551        "LiquidityPoolDeposit",
30552        "LiquidityPoolWithdraw",
30553        "InvokeHostFunction",
30554        "ExtendFootprintTtl",
30555        "RestoreFootprint",
30556    ];
30557
30558    #[must_use]
30559    pub const fn name(&self) -> &'static str {
30560        match self {
30561            Self::CreateAccount => "CreateAccount",
30562            Self::Payment => "Payment",
30563            Self::PathPaymentStrictReceive => "PathPaymentStrictReceive",
30564            Self::ManageSellOffer => "ManageSellOffer",
30565            Self::CreatePassiveSellOffer => "CreatePassiveSellOffer",
30566            Self::SetOptions => "SetOptions",
30567            Self::ChangeTrust => "ChangeTrust",
30568            Self::AllowTrust => "AllowTrust",
30569            Self::AccountMerge => "AccountMerge",
30570            Self::Inflation => "Inflation",
30571            Self::ManageData => "ManageData",
30572            Self::BumpSequence => "BumpSequence",
30573            Self::ManageBuyOffer => "ManageBuyOffer",
30574            Self::PathPaymentStrictSend => "PathPaymentStrictSend",
30575            Self::CreateClaimableBalance => "CreateClaimableBalance",
30576            Self::ClaimClaimableBalance => "ClaimClaimableBalance",
30577            Self::BeginSponsoringFutureReserves => "BeginSponsoringFutureReserves",
30578            Self::EndSponsoringFutureReserves => "EndSponsoringFutureReserves",
30579            Self::RevokeSponsorship => "RevokeSponsorship",
30580            Self::Clawback => "Clawback",
30581            Self::ClawbackClaimableBalance => "ClawbackClaimableBalance",
30582            Self::SetTrustLineFlags => "SetTrustLineFlags",
30583            Self::LiquidityPoolDeposit => "LiquidityPoolDeposit",
30584            Self::LiquidityPoolWithdraw => "LiquidityPoolWithdraw",
30585            Self::InvokeHostFunction => "InvokeHostFunction",
30586            Self::ExtendFootprintTtl => "ExtendFootprintTtl",
30587            Self::RestoreFootprint => "RestoreFootprint",
30588        }
30589    }
30590
30591    #[must_use]
30592    pub const fn variants() -> [OperationType; 27] {
30593        Self::VARIANTS
30594    }
30595}
30596
30597impl Name for OperationType {
30598    #[must_use]
30599    fn name(&self) -> &'static str {
30600        Self::name(self)
30601    }
30602}
30603
30604impl Variants<OperationType> for OperationType {
30605    fn variants() -> slice::Iter<'static, OperationType> {
30606        Self::VARIANTS.iter()
30607    }
30608}
30609
30610impl Enum for OperationType {}
30611
30612impl fmt::Display for OperationType {
30613    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30614        f.write_str(self.name())
30615    }
30616}
30617
30618impl TryFrom<i32> for OperationType {
30619    type Error = Error;
30620
30621    fn try_from(i: i32) -> Result<Self, Error> {
30622        let e = match i {
30623            0 => OperationType::CreateAccount,
30624            1 => OperationType::Payment,
30625            2 => OperationType::PathPaymentStrictReceive,
30626            3 => OperationType::ManageSellOffer,
30627            4 => OperationType::CreatePassiveSellOffer,
30628            5 => OperationType::SetOptions,
30629            6 => OperationType::ChangeTrust,
30630            7 => OperationType::AllowTrust,
30631            8 => OperationType::AccountMerge,
30632            9 => OperationType::Inflation,
30633            10 => OperationType::ManageData,
30634            11 => OperationType::BumpSequence,
30635            12 => OperationType::ManageBuyOffer,
30636            13 => OperationType::PathPaymentStrictSend,
30637            14 => OperationType::CreateClaimableBalance,
30638            15 => OperationType::ClaimClaimableBalance,
30639            16 => OperationType::BeginSponsoringFutureReserves,
30640            17 => OperationType::EndSponsoringFutureReserves,
30641            18 => OperationType::RevokeSponsorship,
30642            19 => OperationType::Clawback,
30643            20 => OperationType::ClawbackClaimableBalance,
30644            21 => OperationType::SetTrustLineFlags,
30645            22 => OperationType::LiquidityPoolDeposit,
30646            23 => OperationType::LiquidityPoolWithdraw,
30647            24 => OperationType::InvokeHostFunction,
30648            25 => OperationType::ExtendFootprintTtl,
30649            26 => OperationType::RestoreFootprint,
30650            #[allow(unreachable_patterns)]
30651            _ => return Err(Error::Invalid),
30652        };
30653        Ok(e)
30654    }
30655}
30656
30657impl From<OperationType> for i32 {
30658    #[must_use]
30659    fn from(e: OperationType) -> Self {
30660        e as Self
30661    }
30662}
30663
30664impl ReadXdr for OperationType {
30665    #[cfg(feature = "std")]
30666    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
30667        r.with_limited_depth(|r| {
30668            let e = i32::read_xdr(r)?;
30669            let v: Self = e.try_into()?;
30670            Ok(v)
30671        })
30672    }
30673}
30674
30675impl WriteXdr for OperationType {
30676    #[cfg(feature = "std")]
30677    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
30678        w.with_limited_depth(|w| {
30679            let i: i32 = (*self).into();
30680            i.write_xdr(w)
30681        })
30682    }
30683}
30684
30685/// CreateAccountOp is an XDR Struct defines as:
30686///
30687/// ```text
30688/// struct CreateAccountOp
30689/// {
30690///     AccountID destination; // account to create
30691///     int64 startingBalance; // amount they end up with
30692/// };
30693/// ```
30694///
30695#[cfg_attr(feature = "alloc", derive(Default))]
30696#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
30697#[cfg_eval::cfg_eval]
30698#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30699#[cfg_attr(
30700    all(feature = "serde", feature = "alloc"),
30701    serde_with::serde_as,
30702    derive(serde::Serialize, serde::Deserialize),
30703    serde(rename_all = "snake_case")
30704)]
30705#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
30706pub struct CreateAccountOp {
30707    pub destination: AccountId,
30708    #[cfg_attr(
30709        all(feature = "serde", feature = "alloc"),
30710        serde_as(as = "NumberOrString")
30711    )]
30712    pub starting_balance: i64,
30713}
30714
30715impl ReadXdr for CreateAccountOp {
30716    #[cfg(feature = "std")]
30717    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
30718        r.with_limited_depth(|r| {
30719            Ok(Self {
30720                destination: AccountId::read_xdr(r)?,
30721                starting_balance: i64::read_xdr(r)?,
30722            })
30723        })
30724    }
30725}
30726
30727impl WriteXdr for CreateAccountOp {
30728    #[cfg(feature = "std")]
30729    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
30730        w.with_limited_depth(|w| {
30731            self.destination.write_xdr(w)?;
30732            self.starting_balance.write_xdr(w)?;
30733            Ok(())
30734        })
30735    }
30736}
30737
30738/// PaymentOp is an XDR Struct defines as:
30739///
30740/// ```text
30741/// struct PaymentOp
30742/// {
30743///     MuxedAccount destination; // recipient of the payment
30744///     Asset asset;              // what they end up with
30745///     int64 amount;             // amount they end up with
30746/// };
30747/// ```
30748///
30749#[cfg_attr(feature = "alloc", derive(Default))]
30750#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
30751#[cfg_eval::cfg_eval]
30752#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30753#[cfg_attr(
30754    all(feature = "serde", feature = "alloc"),
30755    serde_with::serde_as,
30756    derive(serde::Serialize, serde::Deserialize),
30757    serde(rename_all = "snake_case")
30758)]
30759#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
30760pub struct PaymentOp {
30761    pub destination: MuxedAccount,
30762    pub asset: Asset,
30763    #[cfg_attr(
30764        all(feature = "serde", feature = "alloc"),
30765        serde_as(as = "NumberOrString")
30766    )]
30767    pub amount: i64,
30768}
30769
30770impl ReadXdr for PaymentOp {
30771    #[cfg(feature = "std")]
30772    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
30773        r.with_limited_depth(|r| {
30774            Ok(Self {
30775                destination: MuxedAccount::read_xdr(r)?,
30776                asset: Asset::read_xdr(r)?,
30777                amount: i64::read_xdr(r)?,
30778            })
30779        })
30780    }
30781}
30782
30783impl WriteXdr for PaymentOp {
30784    #[cfg(feature = "std")]
30785    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
30786        w.with_limited_depth(|w| {
30787            self.destination.write_xdr(w)?;
30788            self.asset.write_xdr(w)?;
30789            self.amount.write_xdr(w)?;
30790            Ok(())
30791        })
30792    }
30793}
30794
30795/// PathPaymentStrictReceiveOp is an XDR Struct defines as:
30796///
30797/// ```text
30798/// struct PathPaymentStrictReceiveOp
30799/// {
30800///     Asset sendAsset; // asset we pay with
30801///     int64 sendMax;   // the maximum amount of sendAsset to
30802///                      // send (excluding fees).
30803///                      // The operation will fail if can't be met
30804///
30805///     MuxedAccount destination; // recipient of the payment
30806///     Asset destAsset;          // what they end up with
30807///     int64 destAmount;         // amount they end up with
30808///
30809///     Asset path<5>; // additional hops it must go through to get there
30810/// };
30811/// ```
30812///
30813#[cfg_attr(feature = "alloc", derive(Default))]
30814#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
30815#[cfg_eval::cfg_eval]
30816#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30817#[cfg_attr(
30818    all(feature = "serde", feature = "alloc"),
30819    serde_with::serde_as,
30820    derive(serde::Serialize, serde::Deserialize),
30821    serde(rename_all = "snake_case")
30822)]
30823#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
30824pub struct PathPaymentStrictReceiveOp {
30825    pub send_asset: Asset,
30826    #[cfg_attr(
30827        all(feature = "serde", feature = "alloc"),
30828        serde_as(as = "NumberOrString")
30829    )]
30830    pub send_max: i64,
30831    pub destination: MuxedAccount,
30832    pub dest_asset: Asset,
30833    #[cfg_attr(
30834        all(feature = "serde", feature = "alloc"),
30835        serde_as(as = "NumberOrString")
30836    )]
30837    pub dest_amount: i64,
30838    pub path: VecM<Asset, 5>,
30839}
30840
30841impl ReadXdr for PathPaymentStrictReceiveOp {
30842    #[cfg(feature = "std")]
30843    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
30844        r.with_limited_depth(|r| {
30845            Ok(Self {
30846                send_asset: Asset::read_xdr(r)?,
30847                send_max: i64::read_xdr(r)?,
30848                destination: MuxedAccount::read_xdr(r)?,
30849                dest_asset: Asset::read_xdr(r)?,
30850                dest_amount: i64::read_xdr(r)?,
30851                path: VecM::<Asset, 5>::read_xdr(r)?,
30852            })
30853        })
30854    }
30855}
30856
30857impl WriteXdr for PathPaymentStrictReceiveOp {
30858    #[cfg(feature = "std")]
30859    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
30860        w.with_limited_depth(|w| {
30861            self.send_asset.write_xdr(w)?;
30862            self.send_max.write_xdr(w)?;
30863            self.destination.write_xdr(w)?;
30864            self.dest_asset.write_xdr(w)?;
30865            self.dest_amount.write_xdr(w)?;
30866            self.path.write_xdr(w)?;
30867            Ok(())
30868        })
30869    }
30870}
30871
30872/// PathPaymentStrictSendOp is an XDR Struct defines as:
30873///
30874/// ```text
30875/// struct PathPaymentStrictSendOp
30876/// {
30877///     Asset sendAsset;  // asset we pay with
30878///     int64 sendAmount; // amount of sendAsset to send (excluding fees)
30879///
30880///     MuxedAccount destination; // recipient of the payment
30881///     Asset destAsset;          // what they end up with
30882///     int64 destMin;            // the minimum amount of dest asset to
30883///                               // be received
30884///                               // The operation will fail if it can't be met
30885///
30886///     Asset path<5>; // additional hops it must go through to get there
30887/// };
30888/// ```
30889///
30890#[cfg_attr(feature = "alloc", derive(Default))]
30891#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
30892#[cfg_eval::cfg_eval]
30893#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30894#[cfg_attr(
30895    all(feature = "serde", feature = "alloc"),
30896    serde_with::serde_as,
30897    derive(serde::Serialize, serde::Deserialize),
30898    serde(rename_all = "snake_case")
30899)]
30900#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
30901pub struct PathPaymentStrictSendOp {
30902    pub send_asset: Asset,
30903    #[cfg_attr(
30904        all(feature = "serde", feature = "alloc"),
30905        serde_as(as = "NumberOrString")
30906    )]
30907    pub send_amount: i64,
30908    pub destination: MuxedAccount,
30909    pub dest_asset: Asset,
30910    #[cfg_attr(
30911        all(feature = "serde", feature = "alloc"),
30912        serde_as(as = "NumberOrString")
30913    )]
30914    pub dest_min: i64,
30915    pub path: VecM<Asset, 5>,
30916}
30917
30918impl ReadXdr for PathPaymentStrictSendOp {
30919    #[cfg(feature = "std")]
30920    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
30921        r.with_limited_depth(|r| {
30922            Ok(Self {
30923                send_asset: Asset::read_xdr(r)?,
30924                send_amount: i64::read_xdr(r)?,
30925                destination: MuxedAccount::read_xdr(r)?,
30926                dest_asset: Asset::read_xdr(r)?,
30927                dest_min: i64::read_xdr(r)?,
30928                path: VecM::<Asset, 5>::read_xdr(r)?,
30929            })
30930        })
30931    }
30932}
30933
30934impl WriteXdr for PathPaymentStrictSendOp {
30935    #[cfg(feature = "std")]
30936    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
30937        w.with_limited_depth(|w| {
30938            self.send_asset.write_xdr(w)?;
30939            self.send_amount.write_xdr(w)?;
30940            self.destination.write_xdr(w)?;
30941            self.dest_asset.write_xdr(w)?;
30942            self.dest_min.write_xdr(w)?;
30943            self.path.write_xdr(w)?;
30944            Ok(())
30945        })
30946    }
30947}
30948
30949/// ManageSellOfferOp is an XDR Struct defines as:
30950///
30951/// ```text
30952/// struct ManageSellOfferOp
30953/// {
30954///     Asset selling;
30955///     Asset buying;
30956///     int64 amount; // amount being sold. if set to 0, delete the offer
30957///     Price price;  // price of thing being sold in terms of what you are buying
30958///
30959///     // 0=create a new offer, otherwise edit an existing offer
30960///     int64 offerID;
30961/// };
30962/// ```
30963///
30964#[cfg_attr(feature = "alloc", derive(Default))]
30965#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
30966#[cfg_eval::cfg_eval]
30967#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
30968#[cfg_attr(
30969    all(feature = "serde", feature = "alloc"),
30970    serde_with::serde_as,
30971    derive(serde::Serialize, serde::Deserialize),
30972    serde(rename_all = "snake_case")
30973)]
30974#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
30975pub struct ManageSellOfferOp {
30976    pub selling: Asset,
30977    pub buying: Asset,
30978    #[cfg_attr(
30979        all(feature = "serde", feature = "alloc"),
30980        serde_as(as = "NumberOrString")
30981    )]
30982    pub amount: i64,
30983    pub price: Price,
30984    #[cfg_attr(
30985        all(feature = "serde", feature = "alloc"),
30986        serde_as(as = "NumberOrString")
30987    )]
30988    pub offer_id: i64,
30989}
30990
30991impl ReadXdr for ManageSellOfferOp {
30992    #[cfg(feature = "std")]
30993    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
30994        r.with_limited_depth(|r| {
30995            Ok(Self {
30996                selling: Asset::read_xdr(r)?,
30997                buying: Asset::read_xdr(r)?,
30998                amount: i64::read_xdr(r)?,
30999                price: Price::read_xdr(r)?,
31000                offer_id: i64::read_xdr(r)?,
31001            })
31002        })
31003    }
31004}
31005
31006impl WriteXdr for ManageSellOfferOp {
31007    #[cfg(feature = "std")]
31008    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31009        w.with_limited_depth(|w| {
31010            self.selling.write_xdr(w)?;
31011            self.buying.write_xdr(w)?;
31012            self.amount.write_xdr(w)?;
31013            self.price.write_xdr(w)?;
31014            self.offer_id.write_xdr(w)?;
31015            Ok(())
31016        })
31017    }
31018}
31019
31020/// ManageBuyOfferOp is an XDR Struct defines as:
31021///
31022/// ```text
31023/// struct ManageBuyOfferOp
31024/// {
31025///     Asset selling;
31026///     Asset buying;
31027///     int64 buyAmount; // amount being bought. if set to 0, delete the offer
31028///     Price price;     // price of thing being bought in terms of what you are
31029///                      // selling
31030///
31031///     // 0=create a new offer, otherwise edit an existing offer
31032///     int64 offerID;
31033/// };
31034/// ```
31035///
31036#[cfg_attr(feature = "alloc", derive(Default))]
31037#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31038#[cfg_eval::cfg_eval]
31039#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31040#[cfg_attr(
31041    all(feature = "serde", feature = "alloc"),
31042    serde_with::serde_as,
31043    derive(serde::Serialize, serde::Deserialize),
31044    serde(rename_all = "snake_case")
31045)]
31046#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31047pub struct ManageBuyOfferOp {
31048    pub selling: Asset,
31049    pub buying: Asset,
31050    #[cfg_attr(
31051        all(feature = "serde", feature = "alloc"),
31052        serde_as(as = "NumberOrString")
31053    )]
31054    pub buy_amount: i64,
31055    pub price: Price,
31056    #[cfg_attr(
31057        all(feature = "serde", feature = "alloc"),
31058        serde_as(as = "NumberOrString")
31059    )]
31060    pub offer_id: i64,
31061}
31062
31063impl ReadXdr for ManageBuyOfferOp {
31064    #[cfg(feature = "std")]
31065    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31066        r.with_limited_depth(|r| {
31067            Ok(Self {
31068                selling: Asset::read_xdr(r)?,
31069                buying: Asset::read_xdr(r)?,
31070                buy_amount: i64::read_xdr(r)?,
31071                price: Price::read_xdr(r)?,
31072                offer_id: i64::read_xdr(r)?,
31073            })
31074        })
31075    }
31076}
31077
31078impl WriteXdr for ManageBuyOfferOp {
31079    #[cfg(feature = "std")]
31080    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31081        w.with_limited_depth(|w| {
31082            self.selling.write_xdr(w)?;
31083            self.buying.write_xdr(w)?;
31084            self.buy_amount.write_xdr(w)?;
31085            self.price.write_xdr(w)?;
31086            self.offer_id.write_xdr(w)?;
31087            Ok(())
31088        })
31089    }
31090}
31091
31092/// CreatePassiveSellOfferOp is an XDR Struct defines as:
31093///
31094/// ```text
31095/// struct CreatePassiveSellOfferOp
31096/// {
31097///     Asset selling; // A
31098///     Asset buying;  // B
31099///     int64 amount;  // amount taker gets
31100///     Price price;   // cost of A in terms of B
31101/// };
31102/// ```
31103///
31104#[cfg_attr(feature = "alloc", derive(Default))]
31105#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31106#[cfg_eval::cfg_eval]
31107#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31108#[cfg_attr(
31109    all(feature = "serde", feature = "alloc"),
31110    serde_with::serde_as,
31111    derive(serde::Serialize, serde::Deserialize),
31112    serde(rename_all = "snake_case")
31113)]
31114#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31115pub struct CreatePassiveSellOfferOp {
31116    pub selling: Asset,
31117    pub buying: Asset,
31118    #[cfg_attr(
31119        all(feature = "serde", feature = "alloc"),
31120        serde_as(as = "NumberOrString")
31121    )]
31122    pub amount: i64,
31123    pub price: Price,
31124}
31125
31126impl ReadXdr for CreatePassiveSellOfferOp {
31127    #[cfg(feature = "std")]
31128    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31129        r.with_limited_depth(|r| {
31130            Ok(Self {
31131                selling: Asset::read_xdr(r)?,
31132                buying: Asset::read_xdr(r)?,
31133                amount: i64::read_xdr(r)?,
31134                price: Price::read_xdr(r)?,
31135            })
31136        })
31137    }
31138}
31139
31140impl WriteXdr for CreatePassiveSellOfferOp {
31141    #[cfg(feature = "std")]
31142    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31143        w.with_limited_depth(|w| {
31144            self.selling.write_xdr(w)?;
31145            self.buying.write_xdr(w)?;
31146            self.amount.write_xdr(w)?;
31147            self.price.write_xdr(w)?;
31148            Ok(())
31149        })
31150    }
31151}
31152
31153/// SetOptionsOp is an XDR Struct defines as:
31154///
31155/// ```text
31156/// struct SetOptionsOp
31157/// {
31158///     AccountID* inflationDest; // sets the inflation destination
31159///
31160///     uint32* clearFlags; // which flags to clear
31161///     uint32* setFlags;   // which flags to set
31162///
31163///     // account threshold manipulation
31164///     uint32* masterWeight; // weight of the master account
31165///     uint32* lowThreshold;
31166///     uint32* medThreshold;
31167///     uint32* highThreshold;
31168///
31169///     string32* homeDomain; // sets the home domain
31170///
31171///     // Add, update or remove a signer for the account
31172///     // signer is deleted if the weight is 0
31173///     Signer* signer;
31174/// };
31175/// ```
31176///
31177#[cfg_attr(feature = "alloc", derive(Default))]
31178#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31179#[cfg_eval::cfg_eval]
31180#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31181#[cfg_attr(
31182    all(feature = "serde", feature = "alloc"),
31183    serde_with::serde_as,
31184    derive(serde::Serialize, serde::Deserialize),
31185    serde(rename_all = "snake_case")
31186)]
31187#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31188pub struct SetOptionsOp {
31189    pub inflation_dest: Option<AccountId>,
31190    pub clear_flags: Option<u32>,
31191    pub set_flags: Option<u32>,
31192    pub master_weight: Option<u32>,
31193    pub low_threshold: Option<u32>,
31194    pub med_threshold: Option<u32>,
31195    pub high_threshold: Option<u32>,
31196    pub home_domain: Option<String32>,
31197    pub signer: Option<Signer>,
31198}
31199
31200impl ReadXdr for SetOptionsOp {
31201    #[cfg(feature = "std")]
31202    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31203        r.with_limited_depth(|r| {
31204            Ok(Self {
31205                inflation_dest: Option::<AccountId>::read_xdr(r)?,
31206                clear_flags: Option::<u32>::read_xdr(r)?,
31207                set_flags: Option::<u32>::read_xdr(r)?,
31208                master_weight: Option::<u32>::read_xdr(r)?,
31209                low_threshold: Option::<u32>::read_xdr(r)?,
31210                med_threshold: Option::<u32>::read_xdr(r)?,
31211                high_threshold: Option::<u32>::read_xdr(r)?,
31212                home_domain: Option::<String32>::read_xdr(r)?,
31213                signer: Option::<Signer>::read_xdr(r)?,
31214            })
31215        })
31216    }
31217}
31218
31219impl WriteXdr for SetOptionsOp {
31220    #[cfg(feature = "std")]
31221    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31222        w.with_limited_depth(|w| {
31223            self.inflation_dest.write_xdr(w)?;
31224            self.clear_flags.write_xdr(w)?;
31225            self.set_flags.write_xdr(w)?;
31226            self.master_weight.write_xdr(w)?;
31227            self.low_threshold.write_xdr(w)?;
31228            self.med_threshold.write_xdr(w)?;
31229            self.high_threshold.write_xdr(w)?;
31230            self.home_domain.write_xdr(w)?;
31231            self.signer.write_xdr(w)?;
31232            Ok(())
31233        })
31234    }
31235}
31236
31237/// ChangeTrustAsset is an XDR Union defines as:
31238///
31239/// ```text
31240/// union ChangeTrustAsset switch (AssetType type)
31241/// {
31242/// case ASSET_TYPE_NATIVE: // Not credit
31243///     void;
31244///
31245/// case ASSET_TYPE_CREDIT_ALPHANUM4:
31246///     AlphaNum4 alphaNum4;
31247///
31248/// case ASSET_TYPE_CREDIT_ALPHANUM12:
31249///     AlphaNum12 alphaNum12;
31250///
31251/// case ASSET_TYPE_POOL_SHARE:
31252///     LiquidityPoolParameters liquidityPool;
31253///
31254///     // add other asset types here in the future
31255/// };
31256/// ```
31257///
31258// union with discriminant AssetType
31259#[cfg_eval::cfg_eval]
31260#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31261#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31262#[cfg_attr(
31263    all(feature = "serde", feature = "alloc"),
31264    serde_with::serde_as,
31265    derive(serde::Serialize, serde::Deserialize),
31266    serde(rename_all = "snake_case")
31267)]
31268#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31269#[allow(clippy::large_enum_variant)]
31270pub enum ChangeTrustAsset {
31271    Native,
31272    CreditAlphanum4(AlphaNum4),
31273    CreditAlphanum12(AlphaNum12),
31274    PoolShare(LiquidityPoolParameters),
31275}
31276
31277#[cfg(feature = "alloc")]
31278impl Default for ChangeTrustAsset {
31279    fn default() -> Self {
31280        Self::Native
31281    }
31282}
31283
31284impl ChangeTrustAsset {
31285    pub const VARIANTS: [AssetType; 4] = [
31286        AssetType::Native,
31287        AssetType::CreditAlphanum4,
31288        AssetType::CreditAlphanum12,
31289        AssetType::PoolShare,
31290    ];
31291    pub const VARIANTS_STR: [&'static str; 4] =
31292        ["Native", "CreditAlphanum4", "CreditAlphanum12", "PoolShare"];
31293
31294    #[must_use]
31295    pub const fn name(&self) -> &'static str {
31296        match self {
31297            Self::Native => "Native",
31298            Self::CreditAlphanum4(_) => "CreditAlphanum4",
31299            Self::CreditAlphanum12(_) => "CreditAlphanum12",
31300            Self::PoolShare(_) => "PoolShare",
31301        }
31302    }
31303
31304    #[must_use]
31305    pub const fn discriminant(&self) -> AssetType {
31306        #[allow(clippy::match_same_arms)]
31307        match self {
31308            Self::Native => AssetType::Native,
31309            Self::CreditAlphanum4(_) => AssetType::CreditAlphanum4,
31310            Self::CreditAlphanum12(_) => AssetType::CreditAlphanum12,
31311            Self::PoolShare(_) => AssetType::PoolShare,
31312        }
31313    }
31314
31315    #[must_use]
31316    pub const fn variants() -> [AssetType; 4] {
31317        Self::VARIANTS
31318    }
31319}
31320
31321impl Name for ChangeTrustAsset {
31322    #[must_use]
31323    fn name(&self) -> &'static str {
31324        Self::name(self)
31325    }
31326}
31327
31328impl Discriminant<AssetType> for ChangeTrustAsset {
31329    #[must_use]
31330    fn discriminant(&self) -> AssetType {
31331        Self::discriminant(self)
31332    }
31333}
31334
31335impl Variants<AssetType> for ChangeTrustAsset {
31336    fn variants() -> slice::Iter<'static, AssetType> {
31337        Self::VARIANTS.iter()
31338    }
31339}
31340
31341impl Union<AssetType> for ChangeTrustAsset {}
31342
31343impl ReadXdr for ChangeTrustAsset {
31344    #[cfg(feature = "std")]
31345    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31346        r.with_limited_depth(|r| {
31347            let dv: AssetType = <AssetType as ReadXdr>::read_xdr(r)?;
31348            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
31349            let v = match dv {
31350                AssetType::Native => Self::Native,
31351                AssetType::CreditAlphanum4 => Self::CreditAlphanum4(AlphaNum4::read_xdr(r)?),
31352                AssetType::CreditAlphanum12 => Self::CreditAlphanum12(AlphaNum12::read_xdr(r)?),
31353                AssetType::PoolShare => Self::PoolShare(LiquidityPoolParameters::read_xdr(r)?),
31354                #[allow(unreachable_patterns)]
31355                _ => return Err(Error::Invalid),
31356            };
31357            Ok(v)
31358        })
31359    }
31360}
31361
31362impl WriteXdr for ChangeTrustAsset {
31363    #[cfg(feature = "std")]
31364    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31365        w.with_limited_depth(|w| {
31366            self.discriminant().write_xdr(w)?;
31367            #[allow(clippy::match_same_arms)]
31368            match self {
31369                Self::Native => ().write_xdr(w)?,
31370                Self::CreditAlphanum4(v) => v.write_xdr(w)?,
31371                Self::CreditAlphanum12(v) => v.write_xdr(w)?,
31372                Self::PoolShare(v) => v.write_xdr(w)?,
31373            };
31374            Ok(())
31375        })
31376    }
31377}
31378
31379/// ChangeTrustOp is an XDR Struct defines as:
31380///
31381/// ```text
31382/// struct ChangeTrustOp
31383/// {
31384///     ChangeTrustAsset line;
31385///
31386///     // if limit is set to 0, deletes the trust line
31387///     int64 limit;
31388/// };
31389/// ```
31390///
31391#[cfg_attr(feature = "alloc", derive(Default))]
31392#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31393#[cfg_eval::cfg_eval]
31394#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31395#[cfg_attr(
31396    all(feature = "serde", feature = "alloc"),
31397    serde_with::serde_as,
31398    derive(serde::Serialize, serde::Deserialize),
31399    serde(rename_all = "snake_case")
31400)]
31401#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31402pub struct ChangeTrustOp {
31403    pub line: ChangeTrustAsset,
31404    #[cfg_attr(
31405        all(feature = "serde", feature = "alloc"),
31406        serde_as(as = "NumberOrString")
31407    )]
31408    pub limit: i64,
31409}
31410
31411impl ReadXdr for ChangeTrustOp {
31412    #[cfg(feature = "std")]
31413    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31414        r.with_limited_depth(|r| {
31415            Ok(Self {
31416                line: ChangeTrustAsset::read_xdr(r)?,
31417                limit: i64::read_xdr(r)?,
31418            })
31419        })
31420    }
31421}
31422
31423impl WriteXdr for ChangeTrustOp {
31424    #[cfg(feature = "std")]
31425    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31426        w.with_limited_depth(|w| {
31427            self.line.write_xdr(w)?;
31428            self.limit.write_xdr(w)?;
31429            Ok(())
31430        })
31431    }
31432}
31433
31434/// AllowTrustOp is an XDR Struct defines as:
31435///
31436/// ```text
31437/// struct AllowTrustOp
31438/// {
31439///     AccountID trustor;
31440///     AssetCode asset;
31441///
31442///     // One of 0, AUTHORIZED_FLAG, or AUTHORIZED_TO_MAINTAIN_LIABILITIES_FLAG
31443///     uint32 authorize;
31444/// };
31445/// ```
31446///
31447#[cfg_attr(feature = "alloc", derive(Default))]
31448#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31449#[cfg_eval::cfg_eval]
31450#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31451#[cfg_attr(
31452    all(feature = "serde", feature = "alloc"),
31453    serde_with::serde_as,
31454    derive(serde::Serialize, serde::Deserialize),
31455    serde(rename_all = "snake_case")
31456)]
31457#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31458pub struct AllowTrustOp {
31459    pub trustor: AccountId,
31460    pub asset: AssetCode,
31461    pub authorize: u32,
31462}
31463
31464impl ReadXdr for AllowTrustOp {
31465    #[cfg(feature = "std")]
31466    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31467        r.with_limited_depth(|r| {
31468            Ok(Self {
31469                trustor: AccountId::read_xdr(r)?,
31470                asset: AssetCode::read_xdr(r)?,
31471                authorize: u32::read_xdr(r)?,
31472            })
31473        })
31474    }
31475}
31476
31477impl WriteXdr for AllowTrustOp {
31478    #[cfg(feature = "std")]
31479    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31480        w.with_limited_depth(|w| {
31481            self.trustor.write_xdr(w)?;
31482            self.asset.write_xdr(w)?;
31483            self.authorize.write_xdr(w)?;
31484            Ok(())
31485        })
31486    }
31487}
31488
31489/// ManageDataOp is an XDR Struct defines as:
31490///
31491/// ```text
31492/// struct ManageDataOp
31493/// {
31494///     string64 dataName;
31495///     DataValue* dataValue; // set to null to clear
31496/// };
31497/// ```
31498///
31499#[cfg_attr(feature = "alloc", derive(Default))]
31500#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31501#[cfg_eval::cfg_eval]
31502#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31503#[cfg_attr(
31504    all(feature = "serde", feature = "alloc"),
31505    serde_with::serde_as,
31506    derive(serde::Serialize, serde::Deserialize),
31507    serde(rename_all = "snake_case")
31508)]
31509#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31510pub struct ManageDataOp {
31511    pub data_name: String64,
31512    pub data_value: Option<DataValue>,
31513}
31514
31515impl ReadXdr for ManageDataOp {
31516    #[cfg(feature = "std")]
31517    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31518        r.with_limited_depth(|r| {
31519            Ok(Self {
31520                data_name: String64::read_xdr(r)?,
31521                data_value: Option::<DataValue>::read_xdr(r)?,
31522            })
31523        })
31524    }
31525}
31526
31527impl WriteXdr for ManageDataOp {
31528    #[cfg(feature = "std")]
31529    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31530        w.with_limited_depth(|w| {
31531            self.data_name.write_xdr(w)?;
31532            self.data_value.write_xdr(w)?;
31533            Ok(())
31534        })
31535    }
31536}
31537
31538/// BumpSequenceOp is an XDR Struct defines as:
31539///
31540/// ```text
31541/// struct BumpSequenceOp
31542/// {
31543///     SequenceNumber bumpTo;
31544/// };
31545/// ```
31546///
31547#[cfg_attr(feature = "alloc", derive(Default))]
31548#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31549#[cfg_eval::cfg_eval]
31550#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31551#[cfg_attr(
31552    all(feature = "serde", feature = "alloc"),
31553    serde_with::serde_as,
31554    derive(serde::Serialize, serde::Deserialize),
31555    serde(rename_all = "snake_case")
31556)]
31557#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31558pub struct BumpSequenceOp {
31559    pub bump_to: SequenceNumber,
31560}
31561
31562impl ReadXdr for BumpSequenceOp {
31563    #[cfg(feature = "std")]
31564    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31565        r.with_limited_depth(|r| {
31566            Ok(Self {
31567                bump_to: SequenceNumber::read_xdr(r)?,
31568            })
31569        })
31570    }
31571}
31572
31573impl WriteXdr for BumpSequenceOp {
31574    #[cfg(feature = "std")]
31575    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31576        w.with_limited_depth(|w| {
31577            self.bump_to.write_xdr(w)?;
31578            Ok(())
31579        })
31580    }
31581}
31582
31583/// CreateClaimableBalanceOp is an XDR Struct defines as:
31584///
31585/// ```text
31586/// struct CreateClaimableBalanceOp
31587/// {
31588///     Asset asset;
31589///     int64 amount;
31590///     Claimant claimants<10>;
31591/// };
31592/// ```
31593///
31594#[cfg_attr(feature = "alloc", derive(Default))]
31595#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31596#[cfg_eval::cfg_eval]
31597#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31598#[cfg_attr(
31599    all(feature = "serde", feature = "alloc"),
31600    serde_with::serde_as,
31601    derive(serde::Serialize, serde::Deserialize),
31602    serde(rename_all = "snake_case")
31603)]
31604#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31605pub struct CreateClaimableBalanceOp {
31606    pub asset: Asset,
31607    #[cfg_attr(
31608        all(feature = "serde", feature = "alloc"),
31609        serde_as(as = "NumberOrString")
31610    )]
31611    pub amount: i64,
31612    pub claimants: VecM<Claimant, 10>,
31613}
31614
31615impl ReadXdr for CreateClaimableBalanceOp {
31616    #[cfg(feature = "std")]
31617    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31618        r.with_limited_depth(|r| {
31619            Ok(Self {
31620                asset: Asset::read_xdr(r)?,
31621                amount: i64::read_xdr(r)?,
31622                claimants: VecM::<Claimant, 10>::read_xdr(r)?,
31623            })
31624        })
31625    }
31626}
31627
31628impl WriteXdr for CreateClaimableBalanceOp {
31629    #[cfg(feature = "std")]
31630    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31631        w.with_limited_depth(|w| {
31632            self.asset.write_xdr(w)?;
31633            self.amount.write_xdr(w)?;
31634            self.claimants.write_xdr(w)?;
31635            Ok(())
31636        })
31637    }
31638}
31639
31640/// ClaimClaimableBalanceOp is an XDR Struct defines as:
31641///
31642/// ```text
31643/// struct ClaimClaimableBalanceOp
31644/// {
31645///     ClaimableBalanceID balanceID;
31646/// };
31647/// ```
31648///
31649#[cfg_attr(feature = "alloc", derive(Default))]
31650#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31651#[cfg_eval::cfg_eval]
31652#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31653#[cfg_attr(
31654    all(feature = "serde", feature = "alloc"),
31655    serde_with::serde_as,
31656    derive(serde::Serialize, serde::Deserialize),
31657    serde(rename_all = "snake_case")
31658)]
31659#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31660pub struct ClaimClaimableBalanceOp {
31661    pub balance_id: ClaimableBalanceId,
31662}
31663
31664impl ReadXdr for ClaimClaimableBalanceOp {
31665    #[cfg(feature = "std")]
31666    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31667        r.with_limited_depth(|r| {
31668            Ok(Self {
31669                balance_id: ClaimableBalanceId::read_xdr(r)?,
31670            })
31671        })
31672    }
31673}
31674
31675impl WriteXdr for ClaimClaimableBalanceOp {
31676    #[cfg(feature = "std")]
31677    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31678        w.with_limited_depth(|w| {
31679            self.balance_id.write_xdr(w)?;
31680            Ok(())
31681        })
31682    }
31683}
31684
31685/// BeginSponsoringFutureReservesOp is an XDR Struct defines as:
31686///
31687/// ```text
31688/// struct BeginSponsoringFutureReservesOp
31689/// {
31690///     AccountID sponsoredID;
31691/// };
31692/// ```
31693///
31694#[cfg_attr(feature = "alloc", derive(Default))]
31695#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31696#[cfg_eval::cfg_eval]
31697#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31698#[cfg_attr(
31699    all(feature = "serde", feature = "alloc"),
31700    serde_with::serde_as,
31701    derive(serde::Serialize, serde::Deserialize),
31702    serde(rename_all = "snake_case")
31703)]
31704#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31705pub struct BeginSponsoringFutureReservesOp {
31706    pub sponsored_id: AccountId,
31707}
31708
31709impl ReadXdr for BeginSponsoringFutureReservesOp {
31710    #[cfg(feature = "std")]
31711    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31712        r.with_limited_depth(|r| {
31713            Ok(Self {
31714                sponsored_id: AccountId::read_xdr(r)?,
31715            })
31716        })
31717    }
31718}
31719
31720impl WriteXdr for BeginSponsoringFutureReservesOp {
31721    #[cfg(feature = "std")]
31722    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31723        w.with_limited_depth(|w| {
31724            self.sponsored_id.write_xdr(w)?;
31725            Ok(())
31726        })
31727    }
31728}
31729
31730/// RevokeSponsorshipType is an XDR Enum defines as:
31731///
31732/// ```text
31733/// enum RevokeSponsorshipType
31734/// {
31735///     REVOKE_SPONSORSHIP_LEDGER_ENTRY = 0,
31736///     REVOKE_SPONSORSHIP_SIGNER = 1
31737/// };
31738/// ```
31739///
31740// enum
31741#[cfg_attr(feature = "alloc", derive(Default))]
31742#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31743#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31744#[cfg_attr(
31745    all(feature = "serde", feature = "alloc"),
31746    derive(serde::Serialize, serde::Deserialize),
31747    serde(rename_all = "snake_case")
31748)]
31749#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31750#[repr(i32)]
31751pub enum RevokeSponsorshipType {
31752    #[cfg_attr(feature = "alloc", default)]
31753    LedgerEntry = 0,
31754    Signer = 1,
31755}
31756
31757impl RevokeSponsorshipType {
31758    pub const VARIANTS: [RevokeSponsorshipType; 2] = [
31759        RevokeSponsorshipType::LedgerEntry,
31760        RevokeSponsorshipType::Signer,
31761    ];
31762    pub const VARIANTS_STR: [&'static str; 2] = ["LedgerEntry", "Signer"];
31763
31764    #[must_use]
31765    pub const fn name(&self) -> &'static str {
31766        match self {
31767            Self::LedgerEntry => "LedgerEntry",
31768            Self::Signer => "Signer",
31769        }
31770    }
31771
31772    #[must_use]
31773    pub const fn variants() -> [RevokeSponsorshipType; 2] {
31774        Self::VARIANTS
31775    }
31776}
31777
31778impl Name for RevokeSponsorshipType {
31779    #[must_use]
31780    fn name(&self) -> &'static str {
31781        Self::name(self)
31782    }
31783}
31784
31785impl Variants<RevokeSponsorshipType> for RevokeSponsorshipType {
31786    fn variants() -> slice::Iter<'static, RevokeSponsorshipType> {
31787        Self::VARIANTS.iter()
31788    }
31789}
31790
31791impl Enum for RevokeSponsorshipType {}
31792
31793impl fmt::Display for RevokeSponsorshipType {
31794    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
31795        f.write_str(self.name())
31796    }
31797}
31798
31799impl TryFrom<i32> for RevokeSponsorshipType {
31800    type Error = Error;
31801
31802    fn try_from(i: i32) -> Result<Self, Error> {
31803        let e = match i {
31804            0 => RevokeSponsorshipType::LedgerEntry,
31805            1 => RevokeSponsorshipType::Signer,
31806            #[allow(unreachable_patterns)]
31807            _ => return Err(Error::Invalid),
31808        };
31809        Ok(e)
31810    }
31811}
31812
31813impl From<RevokeSponsorshipType> for i32 {
31814    #[must_use]
31815    fn from(e: RevokeSponsorshipType) -> Self {
31816        e as Self
31817    }
31818}
31819
31820impl ReadXdr for RevokeSponsorshipType {
31821    #[cfg(feature = "std")]
31822    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31823        r.with_limited_depth(|r| {
31824            let e = i32::read_xdr(r)?;
31825            let v: Self = e.try_into()?;
31826            Ok(v)
31827        })
31828    }
31829}
31830
31831impl WriteXdr for RevokeSponsorshipType {
31832    #[cfg(feature = "std")]
31833    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31834        w.with_limited_depth(|w| {
31835            let i: i32 = (*self).into();
31836            i.write_xdr(w)
31837        })
31838    }
31839}
31840
31841/// RevokeSponsorshipOpSigner is an XDR NestedStruct defines as:
31842///
31843/// ```text
31844/// struct
31845///     {
31846///         AccountID accountID;
31847///         SignerKey signerKey;
31848///     }
31849/// ```
31850///
31851#[cfg_attr(feature = "alloc", derive(Default))]
31852#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31853#[cfg_eval::cfg_eval]
31854#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31855#[cfg_attr(
31856    all(feature = "serde", feature = "alloc"),
31857    serde_with::serde_as,
31858    derive(serde::Serialize, serde::Deserialize),
31859    serde(rename_all = "snake_case")
31860)]
31861#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31862pub struct RevokeSponsorshipOpSigner {
31863    pub account_id: AccountId,
31864    pub signer_key: SignerKey,
31865}
31866
31867impl ReadXdr for RevokeSponsorshipOpSigner {
31868    #[cfg(feature = "std")]
31869    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31870        r.with_limited_depth(|r| {
31871            Ok(Self {
31872                account_id: AccountId::read_xdr(r)?,
31873                signer_key: SignerKey::read_xdr(r)?,
31874            })
31875        })
31876    }
31877}
31878
31879impl WriteXdr for RevokeSponsorshipOpSigner {
31880    #[cfg(feature = "std")]
31881    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
31882        w.with_limited_depth(|w| {
31883            self.account_id.write_xdr(w)?;
31884            self.signer_key.write_xdr(w)?;
31885            Ok(())
31886        })
31887    }
31888}
31889
31890/// RevokeSponsorshipOp is an XDR Union defines as:
31891///
31892/// ```text
31893/// union RevokeSponsorshipOp switch (RevokeSponsorshipType type)
31894/// {
31895/// case REVOKE_SPONSORSHIP_LEDGER_ENTRY:
31896///     LedgerKey ledgerKey;
31897/// case REVOKE_SPONSORSHIP_SIGNER:
31898///     struct
31899///     {
31900///         AccountID accountID;
31901///         SignerKey signerKey;
31902///     } signer;
31903/// };
31904/// ```
31905///
31906// union with discriminant RevokeSponsorshipType
31907#[cfg_eval::cfg_eval]
31908#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
31909#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
31910#[cfg_attr(
31911    all(feature = "serde", feature = "alloc"),
31912    serde_with::serde_as,
31913    derive(serde::Serialize, serde::Deserialize),
31914    serde(rename_all = "snake_case")
31915)]
31916#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31917#[allow(clippy::large_enum_variant)]
31918pub enum RevokeSponsorshipOp {
31919    LedgerEntry(LedgerKey),
31920    Signer(RevokeSponsorshipOpSigner),
31921}
31922
31923#[cfg(feature = "alloc")]
31924impl Default for RevokeSponsorshipOp {
31925    fn default() -> Self {
31926        Self::LedgerEntry(LedgerKey::default())
31927    }
31928}
31929
31930impl RevokeSponsorshipOp {
31931    pub const VARIANTS: [RevokeSponsorshipType; 2] = [
31932        RevokeSponsorshipType::LedgerEntry,
31933        RevokeSponsorshipType::Signer,
31934    ];
31935    pub const VARIANTS_STR: [&'static str; 2] = ["LedgerEntry", "Signer"];
31936
31937    #[must_use]
31938    pub const fn name(&self) -> &'static str {
31939        match self {
31940            Self::LedgerEntry(_) => "LedgerEntry",
31941            Self::Signer(_) => "Signer",
31942        }
31943    }
31944
31945    #[must_use]
31946    pub const fn discriminant(&self) -> RevokeSponsorshipType {
31947        #[allow(clippy::match_same_arms)]
31948        match self {
31949            Self::LedgerEntry(_) => RevokeSponsorshipType::LedgerEntry,
31950            Self::Signer(_) => RevokeSponsorshipType::Signer,
31951        }
31952    }
31953
31954    #[must_use]
31955    pub const fn variants() -> [RevokeSponsorshipType; 2] {
31956        Self::VARIANTS
31957    }
31958}
31959
31960impl Name for RevokeSponsorshipOp {
31961    #[must_use]
31962    fn name(&self) -> &'static str {
31963        Self::name(self)
31964    }
31965}
31966
31967impl Discriminant<RevokeSponsorshipType> for RevokeSponsorshipOp {
31968    #[must_use]
31969    fn discriminant(&self) -> RevokeSponsorshipType {
31970        Self::discriminant(self)
31971    }
31972}
31973
31974impl Variants<RevokeSponsorshipType> for RevokeSponsorshipOp {
31975    fn variants() -> slice::Iter<'static, RevokeSponsorshipType> {
31976        Self::VARIANTS.iter()
31977    }
31978}
31979
31980impl Union<RevokeSponsorshipType> for RevokeSponsorshipOp {}
31981
31982impl ReadXdr for RevokeSponsorshipOp {
31983    #[cfg(feature = "std")]
31984    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
31985        r.with_limited_depth(|r| {
31986            let dv: RevokeSponsorshipType = <RevokeSponsorshipType as ReadXdr>::read_xdr(r)?;
31987            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
31988            let v = match dv {
31989                RevokeSponsorshipType::LedgerEntry => Self::LedgerEntry(LedgerKey::read_xdr(r)?),
31990                RevokeSponsorshipType::Signer => {
31991                    Self::Signer(RevokeSponsorshipOpSigner::read_xdr(r)?)
31992                }
31993                #[allow(unreachable_patterns)]
31994                _ => return Err(Error::Invalid),
31995            };
31996            Ok(v)
31997        })
31998    }
31999}
32000
32001impl WriteXdr for RevokeSponsorshipOp {
32002    #[cfg(feature = "std")]
32003    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32004        w.with_limited_depth(|w| {
32005            self.discriminant().write_xdr(w)?;
32006            #[allow(clippy::match_same_arms)]
32007            match self {
32008                Self::LedgerEntry(v) => v.write_xdr(w)?,
32009                Self::Signer(v) => v.write_xdr(w)?,
32010            };
32011            Ok(())
32012        })
32013    }
32014}
32015
32016/// ClawbackOp is an XDR Struct defines as:
32017///
32018/// ```text
32019/// struct ClawbackOp
32020/// {
32021///     Asset asset;
32022///     MuxedAccount from;
32023///     int64 amount;
32024/// };
32025/// ```
32026///
32027#[cfg_attr(feature = "alloc", derive(Default))]
32028#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32029#[cfg_eval::cfg_eval]
32030#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32031#[cfg_attr(
32032    all(feature = "serde", feature = "alloc"),
32033    serde_with::serde_as,
32034    derive(serde::Serialize, serde::Deserialize),
32035    serde(rename_all = "snake_case")
32036)]
32037#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32038pub struct ClawbackOp {
32039    pub asset: Asset,
32040    pub from: MuxedAccount,
32041    #[cfg_attr(
32042        all(feature = "serde", feature = "alloc"),
32043        serde_as(as = "NumberOrString")
32044    )]
32045    pub amount: i64,
32046}
32047
32048impl ReadXdr for ClawbackOp {
32049    #[cfg(feature = "std")]
32050    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32051        r.with_limited_depth(|r| {
32052            Ok(Self {
32053                asset: Asset::read_xdr(r)?,
32054                from: MuxedAccount::read_xdr(r)?,
32055                amount: i64::read_xdr(r)?,
32056            })
32057        })
32058    }
32059}
32060
32061impl WriteXdr for ClawbackOp {
32062    #[cfg(feature = "std")]
32063    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32064        w.with_limited_depth(|w| {
32065            self.asset.write_xdr(w)?;
32066            self.from.write_xdr(w)?;
32067            self.amount.write_xdr(w)?;
32068            Ok(())
32069        })
32070    }
32071}
32072
32073/// ClawbackClaimableBalanceOp is an XDR Struct defines as:
32074///
32075/// ```text
32076/// struct ClawbackClaimableBalanceOp
32077/// {
32078///     ClaimableBalanceID balanceID;
32079/// };
32080/// ```
32081///
32082#[cfg_attr(feature = "alloc", derive(Default))]
32083#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32084#[cfg_eval::cfg_eval]
32085#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32086#[cfg_attr(
32087    all(feature = "serde", feature = "alloc"),
32088    serde_with::serde_as,
32089    derive(serde::Serialize, serde::Deserialize),
32090    serde(rename_all = "snake_case")
32091)]
32092#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32093pub struct ClawbackClaimableBalanceOp {
32094    pub balance_id: ClaimableBalanceId,
32095}
32096
32097impl ReadXdr for ClawbackClaimableBalanceOp {
32098    #[cfg(feature = "std")]
32099    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32100        r.with_limited_depth(|r| {
32101            Ok(Self {
32102                balance_id: ClaimableBalanceId::read_xdr(r)?,
32103            })
32104        })
32105    }
32106}
32107
32108impl WriteXdr for ClawbackClaimableBalanceOp {
32109    #[cfg(feature = "std")]
32110    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32111        w.with_limited_depth(|w| {
32112            self.balance_id.write_xdr(w)?;
32113            Ok(())
32114        })
32115    }
32116}
32117
32118/// SetTrustLineFlagsOp is an XDR Struct defines as:
32119///
32120/// ```text
32121/// struct SetTrustLineFlagsOp
32122/// {
32123///     AccountID trustor;
32124///     Asset asset;
32125///
32126///     uint32 clearFlags; // which flags to clear
32127///     uint32 setFlags;   // which flags to set
32128/// };
32129/// ```
32130///
32131#[cfg_attr(feature = "alloc", derive(Default))]
32132#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32133#[cfg_eval::cfg_eval]
32134#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32135#[cfg_attr(
32136    all(feature = "serde", feature = "alloc"),
32137    serde_with::serde_as,
32138    derive(serde::Serialize, serde::Deserialize),
32139    serde(rename_all = "snake_case")
32140)]
32141#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32142pub struct SetTrustLineFlagsOp {
32143    pub trustor: AccountId,
32144    pub asset: Asset,
32145    pub clear_flags: u32,
32146    pub set_flags: u32,
32147}
32148
32149impl ReadXdr for SetTrustLineFlagsOp {
32150    #[cfg(feature = "std")]
32151    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32152        r.with_limited_depth(|r| {
32153            Ok(Self {
32154                trustor: AccountId::read_xdr(r)?,
32155                asset: Asset::read_xdr(r)?,
32156                clear_flags: u32::read_xdr(r)?,
32157                set_flags: u32::read_xdr(r)?,
32158            })
32159        })
32160    }
32161}
32162
32163impl WriteXdr for SetTrustLineFlagsOp {
32164    #[cfg(feature = "std")]
32165    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32166        w.with_limited_depth(|w| {
32167            self.trustor.write_xdr(w)?;
32168            self.asset.write_xdr(w)?;
32169            self.clear_flags.write_xdr(w)?;
32170            self.set_flags.write_xdr(w)?;
32171            Ok(())
32172        })
32173    }
32174}
32175
32176/// LiquidityPoolFeeV18 is an XDR Const defines as:
32177///
32178/// ```text
32179/// const LIQUIDITY_POOL_FEE_V18 = 30;
32180/// ```
32181///
32182pub const LIQUIDITY_POOL_FEE_V18: u64 = 30;
32183
32184/// LiquidityPoolDepositOp is an XDR Struct defines as:
32185///
32186/// ```text
32187/// struct LiquidityPoolDepositOp
32188/// {
32189///     PoolID liquidityPoolID;
32190///     int64 maxAmountA; // maximum amount of first asset to deposit
32191///     int64 maxAmountB; // maximum amount of second asset to deposit
32192///     Price minPrice;   // minimum depositA/depositB
32193///     Price maxPrice;   // maximum depositA/depositB
32194/// };
32195/// ```
32196///
32197#[cfg_attr(feature = "alloc", derive(Default))]
32198#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32199#[cfg_eval::cfg_eval]
32200#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32201#[cfg_attr(
32202    all(feature = "serde", feature = "alloc"),
32203    serde_with::serde_as,
32204    derive(serde::Serialize, serde::Deserialize),
32205    serde(rename_all = "snake_case")
32206)]
32207#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32208pub struct LiquidityPoolDepositOp {
32209    pub liquidity_pool_id: PoolId,
32210    #[cfg_attr(
32211        all(feature = "serde", feature = "alloc"),
32212        serde_as(as = "NumberOrString")
32213    )]
32214    pub max_amount_a: i64,
32215    #[cfg_attr(
32216        all(feature = "serde", feature = "alloc"),
32217        serde_as(as = "NumberOrString")
32218    )]
32219    pub max_amount_b: i64,
32220    pub min_price: Price,
32221    pub max_price: Price,
32222}
32223
32224impl ReadXdr for LiquidityPoolDepositOp {
32225    #[cfg(feature = "std")]
32226    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32227        r.with_limited_depth(|r| {
32228            Ok(Self {
32229                liquidity_pool_id: PoolId::read_xdr(r)?,
32230                max_amount_a: i64::read_xdr(r)?,
32231                max_amount_b: i64::read_xdr(r)?,
32232                min_price: Price::read_xdr(r)?,
32233                max_price: Price::read_xdr(r)?,
32234            })
32235        })
32236    }
32237}
32238
32239impl WriteXdr for LiquidityPoolDepositOp {
32240    #[cfg(feature = "std")]
32241    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32242        w.with_limited_depth(|w| {
32243            self.liquidity_pool_id.write_xdr(w)?;
32244            self.max_amount_a.write_xdr(w)?;
32245            self.max_amount_b.write_xdr(w)?;
32246            self.min_price.write_xdr(w)?;
32247            self.max_price.write_xdr(w)?;
32248            Ok(())
32249        })
32250    }
32251}
32252
32253/// LiquidityPoolWithdrawOp is an XDR Struct defines as:
32254///
32255/// ```text
32256/// struct LiquidityPoolWithdrawOp
32257/// {
32258///     PoolID liquidityPoolID;
32259///     int64 amount;     // amount of pool shares to withdraw
32260///     int64 minAmountA; // minimum amount of first asset to withdraw
32261///     int64 minAmountB; // minimum amount of second asset to withdraw
32262/// };
32263/// ```
32264///
32265#[cfg_attr(feature = "alloc", derive(Default))]
32266#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32267#[cfg_eval::cfg_eval]
32268#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32269#[cfg_attr(
32270    all(feature = "serde", feature = "alloc"),
32271    serde_with::serde_as,
32272    derive(serde::Serialize, serde::Deserialize),
32273    serde(rename_all = "snake_case")
32274)]
32275#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32276pub struct LiquidityPoolWithdrawOp {
32277    pub liquidity_pool_id: PoolId,
32278    #[cfg_attr(
32279        all(feature = "serde", feature = "alloc"),
32280        serde_as(as = "NumberOrString")
32281    )]
32282    pub amount: i64,
32283    #[cfg_attr(
32284        all(feature = "serde", feature = "alloc"),
32285        serde_as(as = "NumberOrString")
32286    )]
32287    pub min_amount_a: i64,
32288    #[cfg_attr(
32289        all(feature = "serde", feature = "alloc"),
32290        serde_as(as = "NumberOrString")
32291    )]
32292    pub min_amount_b: i64,
32293}
32294
32295impl ReadXdr for LiquidityPoolWithdrawOp {
32296    #[cfg(feature = "std")]
32297    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32298        r.with_limited_depth(|r| {
32299            Ok(Self {
32300                liquidity_pool_id: PoolId::read_xdr(r)?,
32301                amount: i64::read_xdr(r)?,
32302                min_amount_a: i64::read_xdr(r)?,
32303                min_amount_b: i64::read_xdr(r)?,
32304            })
32305        })
32306    }
32307}
32308
32309impl WriteXdr for LiquidityPoolWithdrawOp {
32310    #[cfg(feature = "std")]
32311    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32312        w.with_limited_depth(|w| {
32313            self.liquidity_pool_id.write_xdr(w)?;
32314            self.amount.write_xdr(w)?;
32315            self.min_amount_a.write_xdr(w)?;
32316            self.min_amount_b.write_xdr(w)?;
32317            Ok(())
32318        })
32319    }
32320}
32321
32322/// HostFunctionType is an XDR Enum defines as:
32323///
32324/// ```text
32325/// enum HostFunctionType
32326/// {
32327///     HOST_FUNCTION_TYPE_INVOKE_CONTRACT = 0,
32328///     HOST_FUNCTION_TYPE_CREATE_CONTRACT = 1,
32329///     HOST_FUNCTION_TYPE_UPLOAD_CONTRACT_WASM = 2,
32330///     HOST_FUNCTION_TYPE_CREATE_CONTRACT_V2 = 3
32331/// };
32332/// ```
32333///
32334// enum
32335#[cfg_attr(feature = "alloc", derive(Default))]
32336#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32337#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32338#[cfg_attr(
32339    all(feature = "serde", feature = "alloc"),
32340    derive(serde::Serialize, serde::Deserialize),
32341    serde(rename_all = "snake_case")
32342)]
32343#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32344#[repr(i32)]
32345pub enum HostFunctionType {
32346    #[cfg_attr(feature = "alloc", default)]
32347    InvokeContract = 0,
32348    CreateContract = 1,
32349    UploadContractWasm = 2,
32350    CreateContractV2 = 3,
32351}
32352
32353impl HostFunctionType {
32354    pub const VARIANTS: [HostFunctionType; 4] = [
32355        HostFunctionType::InvokeContract,
32356        HostFunctionType::CreateContract,
32357        HostFunctionType::UploadContractWasm,
32358        HostFunctionType::CreateContractV2,
32359    ];
32360    pub const VARIANTS_STR: [&'static str; 4] = [
32361        "InvokeContract",
32362        "CreateContract",
32363        "UploadContractWasm",
32364        "CreateContractV2",
32365    ];
32366
32367    #[must_use]
32368    pub const fn name(&self) -> &'static str {
32369        match self {
32370            Self::InvokeContract => "InvokeContract",
32371            Self::CreateContract => "CreateContract",
32372            Self::UploadContractWasm => "UploadContractWasm",
32373            Self::CreateContractV2 => "CreateContractV2",
32374        }
32375    }
32376
32377    #[must_use]
32378    pub const fn variants() -> [HostFunctionType; 4] {
32379        Self::VARIANTS
32380    }
32381}
32382
32383impl Name for HostFunctionType {
32384    #[must_use]
32385    fn name(&self) -> &'static str {
32386        Self::name(self)
32387    }
32388}
32389
32390impl Variants<HostFunctionType> for HostFunctionType {
32391    fn variants() -> slice::Iter<'static, HostFunctionType> {
32392        Self::VARIANTS.iter()
32393    }
32394}
32395
32396impl Enum for HostFunctionType {}
32397
32398impl fmt::Display for HostFunctionType {
32399    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
32400        f.write_str(self.name())
32401    }
32402}
32403
32404impl TryFrom<i32> for HostFunctionType {
32405    type Error = Error;
32406
32407    fn try_from(i: i32) -> Result<Self, Error> {
32408        let e = match i {
32409            0 => HostFunctionType::InvokeContract,
32410            1 => HostFunctionType::CreateContract,
32411            2 => HostFunctionType::UploadContractWasm,
32412            3 => HostFunctionType::CreateContractV2,
32413            #[allow(unreachable_patterns)]
32414            _ => return Err(Error::Invalid),
32415        };
32416        Ok(e)
32417    }
32418}
32419
32420impl From<HostFunctionType> for i32 {
32421    #[must_use]
32422    fn from(e: HostFunctionType) -> Self {
32423        e as Self
32424    }
32425}
32426
32427impl ReadXdr for HostFunctionType {
32428    #[cfg(feature = "std")]
32429    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32430        r.with_limited_depth(|r| {
32431            let e = i32::read_xdr(r)?;
32432            let v: Self = e.try_into()?;
32433            Ok(v)
32434        })
32435    }
32436}
32437
32438impl WriteXdr for HostFunctionType {
32439    #[cfg(feature = "std")]
32440    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32441        w.with_limited_depth(|w| {
32442            let i: i32 = (*self).into();
32443            i.write_xdr(w)
32444        })
32445    }
32446}
32447
32448/// ContractIdPreimageType is an XDR Enum defines as:
32449///
32450/// ```text
32451/// enum ContractIDPreimageType
32452/// {
32453///     CONTRACT_ID_PREIMAGE_FROM_ADDRESS = 0,
32454///     CONTRACT_ID_PREIMAGE_FROM_ASSET = 1
32455/// };
32456/// ```
32457///
32458// enum
32459#[cfg_attr(feature = "alloc", derive(Default))]
32460#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32461#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32462#[cfg_attr(
32463    all(feature = "serde", feature = "alloc"),
32464    derive(serde::Serialize, serde::Deserialize),
32465    serde(rename_all = "snake_case")
32466)]
32467#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32468#[repr(i32)]
32469pub enum ContractIdPreimageType {
32470    #[cfg_attr(feature = "alloc", default)]
32471    Address = 0,
32472    Asset = 1,
32473}
32474
32475impl ContractIdPreimageType {
32476    pub const VARIANTS: [ContractIdPreimageType; 2] = [
32477        ContractIdPreimageType::Address,
32478        ContractIdPreimageType::Asset,
32479    ];
32480    pub const VARIANTS_STR: [&'static str; 2] = ["Address", "Asset"];
32481
32482    #[must_use]
32483    pub const fn name(&self) -> &'static str {
32484        match self {
32485            Self::Address => "Address",
32486            Self::Asset => "Asset",
32487        }
32488    }
32489
32490    #[must_use]
32491    pub const fn variants() -> [ContractIdPreimageType; 2] {
32492        Self::VARIANTS
32493    }
32494}
32495
32496impl Name for ContractIdPreimageType {
32497    #[must_use]
32498    fn name(&self) -> &'static str {
32499        Self::name(self)
32500    }
32501}
32502
32503impl Variants<ContractIdPreimageType> for ContractIdPreimageType {
32504    fn variants() -> slice::Iter<'static, ContractIdPreimageType> {
32505        Self::VARIANTS.iter()
32506    }
32507}
32508
32509impl Enum for ContractIdPreimageType {}
32510
32511impl fmt::Display for ContractIdPreimageType {
32512    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
32513        f.write_str(self.name())
32514    }
32515}
32516
32517impl TryFrom<i32> for ContractIdPreimageType {
32518    type Error = Error;
32519
32520    fn try_from(i: i32) -> Result<Self, Error> {
32521        let e = match i {
32522            0 => ContractIdPreimageType::Address,
32523            1 => ContractIdPreimageType::Asset,
32524            #[allow(unreachable_patterns)]
32525            _ => return Err(Error::Invalid),
32526        };
32527        Ok(e)
32528    }
32529}
32530
32531impl From<ContractIdPreimageType> for i32 {
32532    #[must_use]
32533    fn from(e: ContractIdPreimageType) -> Self {
32534        e as Self
32535    }
32536}
32537
32538impl ReadXdr for ContractIdPreimageType {
32539    #[cfg(feature = "std")]
32540    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32541        r.with_limited_depth(|r| {
32542            let e = i32::read_xdr(r)?;
32543            let v: Self = e.try_into()?;
32544            Ok(v)
32545        })
32546    }
32547}
32548
32549impl WriteXdr for ContractIdPreimageType {
32550    #[cfg(feature = "std")]
32551    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32552        w.with_limited_depth(|w| {
32553            let i: i32 = (*self).into();
32554            i.write_xdr(w)
32555        })
32556    }
32557}
32558
32559/// ContractIdPreimageFromAddress is an XDR NestedStruct defines as:
32560///
32561/// ```text
32562/// struct
32563///     {
32564///         SCAddress address;
32565///         uint256 salt;
32566///     }
32567/// ```
32568///
32569#[cfg_attr(feature = "alloc", derive(Default))]
32570#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32571#[cfg_eval::cfg_eval]
32572#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32573#[cfg_attr(
32574    all(feature = "serde", feature = "alloc"),
32575    serde_with::serde_as,
32576    derive(serde::Serialize, serde::Deserialize),
32577    serde(rename_all = "snake_case")
32578)]
32579#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32580pub struct ContractIdPreimageFromAddress {
32581    pub address: ScAddress,
32582    pub salt: Uint256,
32583}
32584
32585impl ReadXdr for ContractIdPreimageFromAddress {
32586    #[cfg(feature = "std")]
32587    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32588        r.with_limited_depth(|r| {
32589            Ok(Self {
32590                address: ScAddress::read_xdr(r)?,
32591                salt: Uint256::read_xdr(r)?,
32592            })
32593        })
32594    }
32595}
32596
32597impl WriteXdr for ContractIdPreimageFromAddress {
32598    #[cfg(feature = "std")]
32599    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32600        w.with_limited_depth(|w| {
32601            self.address.write_xdr(w)?;
32602            self.salt.write_xdr(w)?;
32603            Ok(())
32604        })
32605    }
32606}
32607
32608/// ContractIdPreimage is an XDR Union defines as:
32609///
32610/// ```text
32611/// union ContractIDPreimage switch (ContractIDPreimageType type)
32612/// {
32613/// case CONTRACT_ID_PREIMAGE_FROM_ADDRESS:
32614///     struct
32615///     {
32616///         SCAddress address;
32617///         uint256 salt;
32618///     } fromAddress;
32619/// case CONTRACT_ID_PREIMAGE_FROM_ASSET:
32620///     Asset fromAsset;
32621/// };
32622/// ```
32623///
32624// union with discriminant ContractIdPreimageType
32625#[cfg_eval::cfg_eval]
32626#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32627#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32628#[cfg_attr(
32629    all(feature = "serde", feature = "alloc"),
32630    serde_with::serde_as,
32631    derive(serde::Serialize, serde::Deserialize),
32632    serde(rename_all = "snake_case")
32633)]
32634#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32635#[allow(clippy::large_enum_variant)]
32636pub enum ContractIdPreimage {
32637    Address(ContractIdPreimageFromAddress),
32638    Asset(Asset),
32639}
32640
32641#[cfg(feature = "alloc")]
32642impl Default for ContractIdPreimage {
32643    fn default() -> Self {
32644        Self::Address(ContractIdPreimageFromAddress::default())
32645    }
32646}
32647
32648impl ContractIdPreimage {
32649    pub const VARIANTS: [ContractIdPreimageType; 2] = [
32650        ContractIdPreimageType::Address,
32651        ContractIdPreimageType::Asset,
32652    ];
32653    pub const VARIANTS_STR: [&'static str; 2] = ["Address", "Asset"];
32654
32655    #[must_use]
32656    pub const fn name(&self) -> &'static str {
32657        match self {
32658            Self::Address(_) => "Address",
32659            Self::Asset(_) => "Asset",
32660        }
32661    }
32662
32663    #[must_use]
32664    pub const fn discriminant(&self) -> ContractIdPreimageType {
32665        #[allow(clippy::match_same_arms)]
32666        match self {
32667            Self::Address(_) => ContractIdPreimageType::Address,
32668            Self::Asset(_) => ContractIdPreimageType::Asset,
32669        }
32670    }
32671
32672    #[must_use]
32673    pub const fn variants() -> [ContractIdPreimageType; 2] {
32674        Self::VARIANTS
32675    }
32676}
32677
32678impl Name for ContractIdPreimage {
32679    #[must_use]
32680    fn name(&self) -> &'static str {
32681        Self::name(self)
32682    }
32683}
32684
32685impl Discriminant<ContractIdPreimageType> for ContractIdPreimage {
32686    #[must_use]
32687    fn discriminant(&self) -> ContractIdPreimageType {
32688        Self::discriminant(self)
32689    }
32690}
32691
32692impl Variants<ContractIdPreimageType> for ContractIdPreimage {
32693    fn variants() -> slice::Iter<'static, ContractIdPreimageType> {
32694        Self::VARIANTS.iter()
32695    }
32696}
32697
32698impl Union<ContractIdPreimageType> for ContractIdPreimage {}
32699
32700impl ReadXdr for ContractIdPreimage {
32701    #[cfg(feature = "std")]
32702    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32703        r.with_limited_depth(|r| {
32704            let dv: ContractIdPreimageType = <ContractIdPreimageType as ReadXdr>::read_xdr(r)?;
32705            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
32706            let v = match dv {
32707                ContractIdPreimageType::Address => {
32708                    Self::Address(ContractIdPreimageFromAddress::read_xdr(r)?)
32709                }
32710                ContractIdPreimageType::Asset => Self::Asset(Asset::read_xdr(r)?),
32711                #[allow(unreachable_patterns)]
32712                _ => return Err(Error::Invalid),
32713            };
32714            Ok(v)
32715        })
32716    }
32717}
32718
32719impl WriteXdr for ContractIdPreimage {
32720    #[cfg(feature = "std")]
32721    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32722        w.with_limited_depth(|w| {
32723            self.discriminant().write_xdr(w)?;
32724            #[allow(clippy::match_same_arms)]
32725            match self {
32726                Self::Address(v) => v.write_xdr(w)?,
32727                Self::Asset(v) => v.write_xdr(w)?,
32728            };
32729            Ok(())
32730        })
32731    }
32732}
32733
32734/// CreateContractArgs is an XDR Struct defines as:
32735///
32736/// ```text
32737/// struct CreateContractArgs
32738/// {
32739///     ContractIDPreimage contractIDPreimage;
32740///     ContractExecutable executable;
32741/// };
32742/// ```
32743///
32744#[cfg_attr(feature = "alloc", derive(Default))]
32745#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32746#[cfg_eval::cfg_eval]
32747#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32748#[cfg_attr(
32749    all(feature = "serde", feature = "alloc"),
32750    serde_with::serde_as,
32751    derive(serde::Serialize, serde::Deserialize),
32752    serde(rename_all = "snake_case")
32753)]
32754#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32755pub struct CreateContractArgs {
32756    pub contract_id_preimage: ContractIdPreimage,
32757    pub executable: ContractExecutable,
32758}
32759
32760impl ReadXdr for CreateContractArgs {
32761    #[cfg(feature = "std")]
32762    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32763        r.with_limited_depth(|r| {
32764            Ok(Self {
32765                contract_id_preimage: ContractIdPreimage::read_xdr(r)?,
32766                executable: ContractExecutable::read_xdr(r)?,
32767            })
32768        })
32769    }
32770}
32771
32772impl WriteXdr for CreateContractArgs {
32773    #[cfg(feature = "std")]
32774    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32775        w.with_limited_depth(|w| {
32776            self.contract_id_preimage.write_xdr(w)?;
32777            self.executable.write_xdr(w)?;
32778            Ok(())
32779        })
32780    }
32781}
32782
32783/// CreateContractArgsV2 is an XDR Struct defines as:
32784///
32785/// ```text
32786/// struct CreateContractArgsV2
32787/// {
32788///     ContractIDPreimage contractIDPreimage;
32789///     ContractExecutable executable;
32790///     // Arguments of the contract's constructor.
32791///     SCVal constructorArgs<>;
32792/// };
32793/// ```
32794///
32795#[cfg_attr(feature = "alloc", derive(Default))]
32796#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32797#[cfg_eval::cfg_eval]
32798#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32799#[cfg_attr(
32800    all(feature = "serde", feature = "alloc"),
32801    serde_with::serde_as,
32802    derive(serde::Serialize, serde::Deserialize),
32803    serde(rename_all = "snake_case")
32804)]
32805#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32806pub struct CreateContractArgsV2 {
32807    pub contract_id_preimage: ContractIdPreimage,
32808    pub executable: ContractExecutable,
32809    pub constructor_args: VecM<ScVal>,
32810}
32811
32812impl ReadXdr for CreateContractArgsV2 {
32813    #[cfg(feature = "std")]
32814    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32815        r.with_limited_depth(|r| {
32816            Ok(Self {
32817                contract_id_preimage: ContractIdPreimage::read_xdr(r)?,
32818                executable: ContractExecutable::read_xdr(r)?,
32819                constructor_args: VecM::<ScVal>::read_xdr(r)?,
32820            })
32821        })
32822    }
32823}
32824
32825impl WriteXdr for CreateContractArgsV2 {
32826    #[cfg(feature = "std")]
32827    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32828        w.with_limited_depth(|w| {
32829            self.contract_id_preimage.write_xdr(w)?;
32830            self.executable.write_xdr(w)?;
32831            self.constructor_args.write_xdr(w)?;
32832            Ok(())
32833        })
32834    }
32835}
32836
32837/// InvokeContractArgs is an XDR Struct defines as:
32838///
32839/// ```text
32840/// struct InvokeContractArgs {
32841///     SCAddress contractAddress;
32842///     SCSymbol functionName;
32843///     SCVal args<>;
32844/// };
32845/// ```
32846///
32847#[cfg_attr(feature = "alloc", derive(Default))]
32848#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32849#[cfg_eval::cfg_eval]
32850#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32851#[cfg_attr(
32852    all(feature = "serde", feature = "alloc"),
32853    serde_with::serde_as,
32854    derive(serde::Serialize, serde::Deserialize),
32855    serde(rename_all = "snake_case")
32856)]
32857#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32858pub struct InvokeContractArgs {
32859    pub contract_address: ScAddress,
32860    pub function_name: ScSymbol,
32861    pub args: VecM<ScVal>,
32862}
32863
32864impl ReadXdr for InvokeContractArgs {
32865    #[cfg(feature = "std")]
32866    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32867        r.with_limited_depth(|r| {
32868            Ok(Self {
32869                contract_address: ScAddress::read_xdr(r)?,
32870                function_name: ScSymbol::read_xdr(r)?,
32871                args: VecM::<ScVal>::read_xdr(r)?,
32872            })
32873        })
32874    }
32875}
32876
32877impl WriteXdr for InvokeContractArgs {
32878    #[cfg(feature = "std")]
32879    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
32880        w.with_limited_depth(|w| {
32881            self.contract_address.write_xdr(w)?;
32882            self.function_name.write_xdr(w)?;
32883            self.args.write_xdr(w)?;
32884            Ok(())
32885        })
32886    }
32887}
32888
32889/// HostFunction is an XDR Union defines as:
32890///
32891/// ```text
32892/// union HostFunction switch (HostFunctionType type)
32893/// {
32894/// case HOST_FUNCTION_TYPE_INVOKE_CONTRACT:
32895///     InvokeContractArgs invokeContract;
32896/// case HOST_FUNCTION_TYPE_CREATE_CONTRACT:
32897///     CreateContractArgs createContract;
32898/// case HOST_FUNCTION_TYPE_UPLOAD_CONTRACT_WASM:
32899///     opaque wasm<>;
32900/// case HOST_FUNCTION_TYPE_CREATE_CONTRACT_V2:
32901///     CreateContractArgsV2 createContractV2;
32902/// };
32903/// ```
32904///
32905// union with discriminant HostFunctionType
32906#[cfg_eval::cfg_eval]
32907#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
32908#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
32909#[cfg_attr(
32910    all(feature = "serde", feature = "alloc"),
32911    serde_with::serde_as,
32912    derive(serde::Serialize, serde::Deserialize),
32913    serde(rename_all = "snake_case")
32914)]
32915#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
32916#[allow(clippy::large_enum_variant)]
32917pub enum HostFunction {
32918    InvokeContract(InvokeContractArgs),
32919    CreateContract(CreateContractArgs),
32920    UploadContractWasm(BytesM),
32921    CreateContractV2(CreateContractArgsV2),
32922}
32923
32924#[cfg(feature = "alloc")]
32925impl Default for HostFunction {
32926    fn default() -> Self {
32927        Self::InvokeContract(InvokeContractArgs::default())
32928    }
32929}
32930
32931impl HostFunction {
32932    pub const VARIANTS: [HostFunctionType; 4] = [
32933        HostFunctionType::InvokeContract,
32934        HostFunctionType::CreateContract,
32935        HostFunctionType::UploadContractWasm,
32936        HostFunctionType::CreateContractV2,
32937    ];
32938    pub const VARIANTS_STR: [&'static str; 4] = [
32939        "InvokeContract",
32940        "CreateContract",
32941        "UploadContractWasm",
32942        "CreateContractV2",
32943    ];
32944
32945    #[must_use]
32946    pub const fn name(&self) -> &'static str {
32947        match self {
32948            Self::InvokeContract(_) => "InvokeContract",
32949            Self::CreateContract(_) => "CreateContract",
32950            Self::UploadContractWasm(_) => "UploadContractWasm",
32951            Self::CreateContractV2(_) => "CreateContractV2",
32952        }
32953    }
32954
32955    #[must_use]
32956    pub const fn discriminant(&self) -> HostFunctionType {
32957        #[allow(clippy::match_same_arms)]
32958        match self {
32959            Self::InvokeContract(_) => HostFunctionType::InvokeContract,
32960            Self::CreateContract(_) => HostFunctionType::CreateContract,
32961            Self::UploadContractWasm(_) => HostFunctionType::UploadContractWasm,
32962            Self::CreateContractV2(_) => HostFunctionType::CreateContractV2,
32963        }
32964    }
32965
32966    #[must_use]
32967    pub const fn variants() -> [HostFunctionType; 4] {
32968        Self::VARIANTS
32969    }
32970}
32971
32972impl Name for HostFunction {
32973    #[must_use]
32974    fn name(&self) -> &'static str {
32975        Self::name(self)
32976    }
32977}
32978
32979impl Discriminant<HostFunctionType> for HostFunction {
32980    #[must_use]
32981    fn discriminant(&self) -> HostFunctionType {
32982        Self::discriminant(self)
32983    }
32984}
32985
32986impl Variants<HostFunctionType> for HostFunction {
32987    fn variants() -> slice::Iter<'static, HostFunctionType> {
32988        Self::VARIANTS.iter()
32989    }
32990}
32991
32992impl Union<HostFunctionType> for HostFunction {}
32993
32994impl ReadXdr for HostFunction {
32995    #[cfg(feature = "std")]
32996    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
32997        r.with_limited_depth(|r| {
32998            let dv: HostFunctionType = <HostFunctionType as ReadXdr>::read_xdr(r)?;
32999            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
33000            let v = match dv {
33001                HostFunctionType::InvokeContract => {
33002                    Self::InvokeContract(InvokeContractArgs::read_xdr(r)?)
33003                }
33004                HostFunctionType::CreateContract => {
33005                    Self::CreateContract(CreateContractArgs::read_xdr(r)?)
33006                }
33007                HostFunctionType::UploadContractWasm => {
33008                    Self::UploadContractWasm(BytesM::read_xdr(r)?)
33009                }
33010                HostFunctionType::CreateContractV2 => {
33011                    Self::CreateContractV2(CreateContractArgsV2::read_xdr(r)?)
33012                }
33013                #[allow(unreachable_patterns)]
33014                _ => return Err(Error::Invalid),
33015            };
33016            Ok(v)
33017        })
33018    }
33019}
33020
33021impl WriteXdr for HostFunction {
33022    #[cfg(feature = "std")]
33023    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33024        w.with_limited_depth(|w| {
33025            self.discriminant().write_xdr(w)?;
33026            #[allow(clippy::match_same_arms)]
33027            match self {
33028                Self::InvokeContract(v) => v.write_xdr(w)?,
33029                Self::CreateContract(v) => v.write_xdr(w)?,
33030                Self::UploadContractWasm(v) => v.write_xdr(w)?,
33031                Self::CreateContractV2(v) => v.write_xdr(w)?,
33032            };
33033            Ok(())
33034        })
33035    }
33036}
33037
33038/// SorobanAuthorizedFunctionType is an XDR Enum defines as:
33039///
33040/// ```text
33041/// enum SorobanAuthorizedFunctionType
33042/// {
33043///     SOROBAN_AUTHORIZED_FUNCTION_TYPE_CONTRACT_FN = 0,
33044///     SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_HOST_FN = 1,
33045///     SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN = 2
33046/// };
33047/// ```
33048///
33049// enum
33050#[cfg_attr(feature = "alloc", derive(Default))]
33051#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
33052#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33053#[cfg_attr(
33054    all(feature = "serde", feature = "alloc"),
33055    derive(serde::Serialize, serde::Deserialize),
33056    serde(rename_all = "snake_case")
33057)]
33058#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33059#[repr(i32)]
33060pub enum SorobanAuthorizedFunctionType {
33061    #[cfg_attr(feature = "alloc", default)]
33062    ContractFn = 0,
33063    CreateContractHostFn = 1,
33064    CreateContractV2HostFn = 2,
33065}
33066
33067impl SorobanAuthorizedFunctionType {
33068    pub const VARIANTS: [SorobanAuthorizedFunctionType; 3] = [
33069        SorobanAuthorizedFunctionType::ContractFn,
33070        SorobanAuthorizedFunctionType::CreateContractHostFn,
33071        SorobanAuthorizedFunctionType::CreateContractV2HostFn,
33072    ];
33073    pub const VARIANTS_STR: [&'static str; 3] = [
33074        "ContractFn",
33075        "CreateContractHostFn",
33076        "CreateContractV2HostFn",
33077    ];
33078
33079    #[must_use]
33080    pub const fn name(&self) -> &'static str {
33081        match self {
33082            Self::ContractFn => "ContractFn",
33083            Self::CreateContractHostFn => "CreateContractHostFn",
33084            Self::CreateContractV2HostFn => "CreateContractV2HostFn",
33085        }
33086    }
33087
33088    #[must_use]
33089    pub const fn variants() -> [SorobanAuthorizedFunctionType; 3] {
33090        Self::VARIANTS
33091    }
33092}
33093
33094impl Name for SorobanAuthorizedFunctionType {
33095    #[must_use]
33096    fn name(&self) -> &'static str {
33097        Self::name(self)
33098    }
33099}
33100
33101impl Variants<SorobanAuthorizedFunctionType> for SorobanAuthorizedFunctionType {
33102    fn variants() -> slice::Iter<'static, SorobanAuthorizedFunctionType> {
33103        Self::VARIANTS.iter()
33104    }
33105}
33106
33107impl Enum for SorobanAuthorizedFunctionType {}
33108
33109impl fmt::Display for SorobanAuthorizedFunctionType {
33110    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
33111        f.write_str(self.name())
33112    }
33113}
33114
33115impl TryFrom<i32> for SorobanAuthorizedFunctionType {
33116    type Error = Error;
33117
33118    fn try_from(i: i32) -> Result<Self, Error> {
33119        let e = match i {
33120            0 => SorobanAuthorizedFunctionType::ContractFn,
33121            1 => SorobanAuthorizedFunctionType::CreateContractHostFn,
33122            2 => SorobanAuthorizedFunctionType::CreateContractV2HostFn,
33123            #[allow(unreachable_patterns)]
33124            _ => return Err(Error::Invalid),
33125        };
33126        Ok(e)
33127    }
33128}
33129
33130impl From<SorobanAuthorizedFunctionType> for i32 {
33131    #[must_use]
33132    fn from(e: SorobanAuthorizedFunctionType) -> Self {
33133        e as Self
33134    }
33135}
33136
33137impl ReadXdr for SorobanAuthorizedFunctionType {
33138    #[cfg(feature = "std")]
33139    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
33140        r.with_limited_depth(|r| {
33141            let e = i32::read_xdr(r)?;
33142            let v: Self = e.try_into()?;
33143            Ok(v)
33144        })
33145    }
33146}
33147
33148impl WriteXdr for SorobanAuthorizedFunctionType {
33149    #[cfg(feature = "std")]
33150    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33151        w.with_limited_depth(|w| {
33152            let i: i32 = (*self).into();
33153            i.write_xdr(w)
33154        })
33155    }
33156}
33157
33158/// SorobanAuthorizedFunction is an XDR Union defines as:
33159///
33160/// ```text
33161/// union SorobanAuthorizedFunction switch (SorobanAuthorizedFunctionType type)
33162/// {
33163/// case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CONTRACT_FN:
33164///     InvokeContractArgs contractFn;
33165/// // This variant of auth payload for creating new contract instances
33166/// // doesn't allow specifying the constructor arguments, creating contracts
33167/// // with constructors that take arguments is only possible by authorizing
33168/// // `SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN`
33169/// // (protocol 22+).
33170/// case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_HOST_FN:
33171///     CreateContractArgs createContractHostFn;
33172/// // This variant of auth payload for creating new contract instances
33173/// // is only accepted in and after protocol 22. It allows authorizing the
33174/// // contract constructor arguments.
33175/// case SOROBAN_AUTHORIZED_FUNCTION_TYPE_CREATE_CONTRACT_V2_HOST_FN:
33176///     CreateContractArgsV2 createContractV2HostFn;
33177/// };
33178/// ```
33179///
33180// union with discriminant SorobanAuthorizedFunctionType
33181#[cfg_eval::cfg_eval]
33182#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
33183#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33184#[cfg_attr(
33185    all(feature = "serde", feature = "alloc"),
33186    serde_with::serde_as,
33187    derive(serde::Serialize, serde::Deserialize),
33188    serde(rename_all = "snake_case")
33189)]
33190#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33191#[allow(clippy::large_enum_variant)]
33192pub enum SorobanAuthorizedFunction {
33193    ContractFn(InvokeContractArgs),
33194    CreateContractHostFn(CreateContractArgs),
33195    CreateContractV2HostFn(CreateContractArgsV2),
33196}
33197
33198#[cfg(feature = "alloc")]
33199impl Default for SorobanAuthorizedFunction {
33200    fn default() -> Self {
33201        Self::ContractFn(InvokeContractArgs::default())
33202    }
33203}
33204
33205impl SorobanAuthorizedFunction {
33206    pub const VARIANTS: [SorobanAuthorizedFunctionType; 3] = [
33207        SorobanAuthorizedFunctionType::ContractFn,
33208        SorobanAuthorizedFunctionType::CreateContractHostFn,
33209        SorobanAuthorizedFunctionType::CreateContractV2HostFn,
33210    ];
33211    pub const VARIANTS_STR: [&'static str; 3] = [
33212        "ContractFn",
33213        "CreateContractHostFn",
33214        "CreateContractV2HostFn",
33215    ];
33216
33217    #[must_use]
33218    pub const fn name(&self) -> &'static str {
33219        match self {
33220            Self::ContractFn(_) => "ContractFn",
33221            Self::CreateContractHostFn(_) => "CreateContractHostFn",
33222            Self::CreateContractV2HostFn(_) => "CreateContractV2HostFn",
33223        }
33224    }
33225
33226    #[must_use]
33227    pub const fn discriminant(&self) -> SorobanAuthorizedFunctionType {
33228        #[allow(clippy::match_same_arms)]
33229        match self {
33230            Self::ContractFn(_) => SorobanAuthorizedFunctionType::ContractFn,
33231            Self::CreateContractHostFn(_) => SorobanAuthorizedFunctionType::CreateContractHostFn,
33232            Self::CreateContractV2HostFn(_) => {
33233                SorobanAuthorizedFunctionType::CreateContractV2HostFn
33234            }
33235        }
33236    }
33237
33238    #[must_use]
33239    pub const fn variants() -> [SorobanAuthorizedFunctionType; 3] {
33240        Self::VARIANTS
33241    }
33242}
33243
33244impl Name for SorobanAuthorizedFunction {
33245    #[must_use]
33246    fn name(&self) -> &'static str {
33247        Self::name(self)
33248    }
33249}
33250
33251impl Discriminant<SorobanAuthorizedFunctionType> for SorobanAuthorizedFunction {
33252    #[must_use]
33253    fn discriminant(&self) -> SorobanAuthorizedFunctionType {
33254        Self::discriminant(self)
33255    }
33256}
33257
33258impl Variants<SorobanAuthorizedFunctionType> for SorobanAuthorizedFunction {
33259    fn variants() -> slice::Iter<'static, SorobanAuthorizedFunctionType> {
33260        Self::VARIANTS.iter()
33261    }
33262}
33263
33264impl Union<SorobanAuthorizedFunctionType> for SorobanAuthorizedFunction {}
33265
33266impl ReadXdr for SorobanAuthorizedFunction {
33267    #[cfg(feature = "std")]
33268    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
33269        r.with_limited_depth(|r| {
33270            let dv: SorobanAuthorizedFunctionType =
33271                <SorobanAuthorizedFunctionType as ReadXdr>::read_xdr(r)?;
33272            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
33273            let v = match dv {
33274                SorobanAuthorizedFunctionType::ContractFn => {
33275                    Self::ContractFn(InvokeContractArgs::read_xdr(r)?)
33276                }
33277                SorobanAuthorizedFunctionType::CreateContractHostFn => {
33278                    Self::CreateContractHostFn(CreateContractArgs::read_xdr(r)?)
33279                }
33280                SorobanAuthorizedFunctionType::CreateContractV2HostFn => {
33281                    Self::CreateContractV2HostFn(CreateContractArgsV2::read_xdr(r)?)
33282                }
33283                #[allow(unreachable_patterns)]
33284                _ => return Err(Error::Invalid),
33285            };
33286            Ok(v)
33287        })
33288    }
33289}
33290
33291impl WriteXdr for SorobanAuthorizedFunction {
33292    #[cfg(feature = "std")]
33293    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33294        w.with_limited_depth(|w| {
33295            self.discriminant().write_xdr(w)?;
33296            #[allow(clippy::match_same_arms)]
33297            match self {
33298                Self::ContractFn(v) => v.write_xdr(w)?,
33299                Self::CreateContractHostFn(v) => v.write_xdr(w)?,
33300                Self::CreateContractV2HostFn(v) => v.write_xdr(w)?,
33301            };
33302            Ok(())
33303        })
33304    }
33305}
33306
33307/// SorobanAuthorizedInvocation is an XDR Struct defines as:
33308///
33309/// ```text
33310/// struct SorobanAuthorizedInvocation
33311/// {
33312///     SorobanAuthorizedFunction function;
33313///     SorobanAuthorizedInvocation subInvocations<>;
33314/// };
33315/// ```
33316///
33317#[cfg_attr(feature = "alloc", derive(Default))]
33318#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
33319#[cfg_eval::cfg_eval]
33320#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33321#[cfg_attr(
33322    all(feature = "serde", feature = "alloc"),
33323    serde_with::serde_as,
33324    derive(serde::Serialize, serde::Deserialize),
33325    serde(rename_all = "snake_case")
33326)]
33327#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33328pub struct SorobanAuthorizedInvocation {
33329    pub function: SorobanAuthorizedFunction,
33330    pub sub_invocations: VecM<SorobanAuthorizedInvocation>,
33331}
33332
33333impl ReadXdr for SorobanAuthorizedInvocation {
33334    #[cfg(feature = "std")]
33335    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
33336        r.with_limited_depth(|r| {
33337            Ok(Self {
33338                function: SorobanAuthorizedFunction::read_xdr(r)?,
33339                sub_invocations: VecM::<SorobanAuthorizedInvocation>::read_xdr(r)?,
33340            })
33341        })
33342    }
33343}
33344
33345impl WriteXdr for SorobanAuthorizedInvocation {
33346    #[cfg(feature = "std")]
33347    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33348        w.with_limited_depth(|w| {
33349            self.function.write_xdr(w)?;
33350            self.sub_invocations.write_xdr(w)?;
33351            Ok(())
33352        })
33353    }
33354}
33355
33356/// SorobanAddressCredentials is an XDR Struct defines as:
33357///
33358/// ```text
33359/// struct SorobanAddressCredentials
33360/// {
33361///     SCAddress address;
33362///     int64 nonce;
33363///     uint32 signatureExpirationLedger;    
33364///     SCVal signature;
33365/// };
33366/// ```
33367///
33368#[cfg_attr(feature = "alloc", derive(Default))]
33369#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
33370#[cfg_eval::cfg_eval]
33371#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33372#[cfg_attr(
33373    all(feature = "serde", feature = "alloc"),
33374    serde_with::serde_as,
33375    derive(serde::Serialize, serde::Deserialize),
33376    serde(rename_all = "snake_case")
33377)]
33378#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33379pub struct SorobanAddressCredentials {
33380    pub address: ScAddress,
33381    #[cfg_attr(
33382        all(feature = "serde", feature = "alloc"),
33383        serde_as(as = "NumberOrString")
33384    )]
33385    pub nonce: i64,
33386    pub signature_expiration_ledger: u32,
33387    pub signature: ScVal,
33388}
33389
33390impl ReadXdr for SorobanAddressCredentials {
33391    #[cfg(feature = "std")]
33392    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
33393        r.with_limited_depth(|r| {
33394            Ok(Self {
33395                address: ScAddress::read_xdr(r)?,
33396                nonce: i64::read_xdr(r)?,
33397                signature_expiration_ledger: u32::read_xdr(r)?,
33398                signature: ScVal::read_xdr(r)?,
33399            })
33400        })
33401    }
33402}
33403
33404impl WriteXdr for SorobanAddressCredentials {
33405    #[cfg(feature = "std")]
33406    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33407        w.with_limited_depth(|w| {
33408            self.address.write_xdr(w)?;
33409            self.nonce.write_xdr(w)?;
33410            self.signature_expiration_ledger.write_xdr(w)?;
33411            self.signature.write_xdr(w)?;
33412            Ok(())
33413        })
33414    }
33415}
33416
33417/// SorobanCredentialsType is an XDR Enum defines as:
33418///
33419/// ```text
33420/// enum SorobanCredentialsType
33421/// {
33422///     SOROBAN_CREDENTIALS_SOURCE_ACCOUNT = 0,
33423///     SOROBAN_CREDENTIALS_ADDRESS = 1
33424/// };
33425/// ```
33426///
33427// enum
33428#[cfg_attr(feature = "alloc", derive(Default))]
33429#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
33430#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33431#[cfg_attr(
33432    all(feature = "serde", feature = "alloc"),
33433    derive(serde::Serialize, serde::Deserialize),
33434    serde(rename_all = "snake_case")
33435)]
33436#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33437#[repr(i32)]
33438pub enum SorobanCredentialsType {
33439    #[cfg_attr(feature = "alloc", default)]
33440    SourceAccount = 0,
33441    Address = 1,
33442}
33443
33444impl SorobanCredentialsType {
33445    pub const VARIANTS: [SorobanCredentialsType; 2] = [
33446        SorobanCredentialsType::SourceAccount,
33447        SorobanCredentialsType::Address,
33448    ];
33449    pub const VARIANTS_STR: [&'static str; 2] = ["SourceAccount", "Address"];
33450
33451    #[must_use]
33452    pub const fn name(&self) -> &'static str {
33453        match self {
33454            Self::SourceAccount => "SourceAccount",
33455            Self::Address => "Address",
33456        }
33457    }
33458
33459    #[must_use]
33460    pub const fn variants() -> [SorobanCredentialsType; 2] {
33461        Self::VARIANTS
33462    }
33463}
33464
33465impl Name for SorobanCredentialsType {
33466    #[must_use]
33467    fn name(&self) -> &'static str {
33468        Self::name(self)
33469    }
33470}
33471
33472impl Variants<SorobanCredentialsType> for SorobanCredentialsType {
33473    fn variants() -> slice::Iter<'static, SorobanCredentialsType> {
33474        Self::VARIANTS.iter()
33475    }
33476}
33477
33478impl Enum for SorobanCredentialsType {}
33479
33480impl fmt::Display for SorobanCredentialsType {
33481    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
33482        f.write_str(self.name())
33483    }
33484}
33485
33486impl TryFrom<i32> for SorobanCredentialsType {
33487    type Error = Error;
33488
33489    fn try_from(i: i32) -> Result<Self, Error> {
33490        let e = match i {
33491            0 => SorobanCredentialsType::SourceAccount,
33492            1 => SorobanCredentialsType::Address,
33493            #[allow(unreachable_patterns)]
33494            _ => return Err(Error::Invalid),
33495        };
33496        Ok(e)
33497    }
33498}
33499
33500impl From<SorobanCredentialsType> for i32 {
33501    #[must_use]
33502    fn from(e: SorobanCredentialsType) -> Self {
33503        e as Self
33504    }
33505}
33506
33507impl ReadXdr for SorobanCredentialsType {
33508    #[cfg(feature = "std")]
33509    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
33510        r.with_limited_depth(|r| {
33511            let e = i32::read_xdr(r)?;
33512            let v: Self = e.try_into()?;
33513            Ok(v)
33514        })
33515    }
33516}
33517
33518impl WriteXdr for SorobanCredentialsType {
33519    #[cfg(feature = "std")]
33520    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33521        w.with_limited_depth(|w| {
33522            let i: i32 = (*self).into();
33523            i.write_xdr(w)
33524        })
33525    }
33526}
33527
33528/// SorobanCredentials is an XDR Union defines as:
33529///
33530/// ```text
33531/// union SorobanCredentials switch (SorobanCredentialsType type)
33532/// {
33533/// case SOROBAN_CREDENTIALS_SOURCE_ACCOUNT:
33534///     void;
33535/// case SOROBAN_CREDENTIALS_ADDRESS:
33536///     SorobanAddressCredentials address;
33537/// };
33538/// ```
33539///
33540// union with discriminant SorobanCredentialsType
33541#[cfg_eval::cfg_eval]
33542#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
33543#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33544#[cfg_attr(
33545    all(feature = "serde", feature = "alloc"),
33546    serde_with::serde_as,
33547    derive(serde::Serialize, serde::Deserialize),
33548    serde(rename_all = "snake_case")
33549)]
33550#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33551#[allow(clippy::large_enum_variant)]
33552pub enum SorobanCredentials {
33553    SourceAccount,
33554    Address(SorobanAddressCredentials),
33555}
33556
33557#[cfg(feature = "alloc")]
33558impl Default for SorobanCredentials {
33559    fn default() -> Self {
33560        Self::SourceAccount
33561    }
33562}
33563
33564impl SorobanCredentials {
33565    pub const VARIANTS: [SorobanCredentialsType; 2] = [
33566        SorobanCredentialsType::SourceAccount,
33567        SorobanCredentialsType::Address,
33568    ];
33569    pub const VARIANTS_STR: [&'static str; 2] = ["SourceAccount", "Address"];
33570
33571    #[must_use]
33572    pub const fn name(&self) -> &'static str {
33573        match self {
33574            Self::SourceAccount => "SourceAccount",
33575            Self::Address(_) => "Address",
33576        }
33577    }
33578
33579    #[must_use]
33580    pub const fn discriminant(&self) -> SorobanCredentialsType {
33581        #[allow(clippy::match_same_arms)]
33582        match self {
33583            Self::SourceAccount => SorobanCredentialsType::SourceAccount,
33584            Self::Address(_) => SorobanCredentialsType::Address,
33585        }
33586    }
33587
33588    #[must_use]
33589    pub const fn variants() -> [SorobanCredentialsType; 2] {
33590        Self::VARIANTS
33591    }
33592}
33593
33594impl Name for SorobanCredentials {
33595    #[must_use]
33596    fn name(&self) -> &'static str {
33597        Self::name(self)
33598    }
33599}
33600
33601impl Discriminant<SorobanCredentialsType> for SorobanCredentials {
33602    #[must_use]
33603    fn discriminant(&self) -> SorobanCredentialsType {
33604        Self::discriminant(self)
33605    }
33606}
33607
33608impl Variants<SorobanCredentialsType> for SorobanCredentials {
33609    fn variants() -> slice::Iter<'static, SorobanCredentialsType> {
33610        Self::VARIANTS.iter()
33611    }
33612}
33613
33614impl Union<SorobanCredentialsType> for SorobanCredentials {}
33615
33616impl ReadXdr for SorobanCredentials {
33617    #[cfg(feature = "std")]
33618    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
33619        r.with_limited_depth(|r| {
33620            let dv: SorobanCredentialsType = <SorobanCredentialsType as ReadXdr>::read_xdr(r)?;
33621            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
33622            let v = match dv {
33623                SorobanCredentialsType::SourceAccount => Self::SourceAccount,
33624                SorobanCredentialsType::Address => {
33625                    Self::Address(SorobanAddressCredentials::read_xdr(r)?)
33626                }
33627                #[allow(unreachable_patterns)]
33628                _ => return Err(Error::Invalid),
33629            };
33630            Ok(v)
33631        })
33632    }
33633}
33634
33635impl WriteXdr for SorobanCredentials {
33636    #[cfg(feature = "std")]
33637    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33638        w.with_limited_depth(|w| {
33639            self.discriminant().write_xdr(w)?;
33640            #[allow(clippy::match_same_arms)]
33641            match self {
33642                Self::SourceAccount => ().write_xdr(w)?,
33643                Self::Address(v) => v.write_xdr(w)?,
33644            };
33645            Ok(())
33646        })
33647    }
33648}
33649
33650/// SorobanAuthorizationEntry is an XDR Struct defines as:
33651///
33652/// ```text
33653/// struct SorobanAuthorizationEntry
33654/// {
33655///     SorobanCredentials credentials;
33656///     SorobanAuthorizedInvocation rootInvocation;
33657/// };
33658/// ```
33659///
33660#[cfg_attr(feature = "alloc", derive(Default))]
33661#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
33662#[cfg_eval::cfg_eval]
33663#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33664#[cfg_attr(
33665    all(feature = "serde", feature = "alloc"),
33666    serde_with::serde_as,
33667    derive(serde::Serialize, serde::Deserialize),
33668    serde(rename_all = "snake_case")
33669)]
33670#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33671pub struct SorobanAuthorizationEntry {
33672    pub credentials: SorobanCredentials,
33673    pub root_invocation: SorobanAuthorizedInvocation,
33674}
33675
33676impl ReadXdr for SorobanAuthorizationEntry {
33677    #[cfg(feature = "std")]
33678    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
33679        r.with_limited_depth(|r| {
33680            Ok(Self {
33681                credentials: SorobanCredentials::read_xdr(r)?,
33682                root_invocation: SorobanAuthorizedInvocation::read_xdr(r)?,
33683            })
33684        })
33685    }
33686}
33687
33688impl WriteXdr for SorobanAuthorizationEntry {
33689    #[cfg(feature = "std")]
33690    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33691        w.with_limited_depth(|w| {
33692            self.credentials.write_xdr(w)?;
33693            self.root_invocation.write_xdr(w)?;
33694            Ok(())
33695        })
33696    }
33697}
33698
33699/// SorobanAuthorizationEntries is an XDR Typedef defines as:
33700///
33701/// ```text
33702/// typedef SorobanAuthorizationEntry SorobanAuthorizationEntries<>;
33703/// ```
33704///
33705#[cfg_eval::cfg_eval]
33706#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
33707#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33708#[cfg_attr(
33709    all(feature = "serde", feature = "alloc"),
33710    serde_with::serde_as,
33711    derive(serde::Serialize, serde::Deserialize),
33712    serde(rename_all = "snake_case")
33713)]
33714#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33715#[derive(Debug)]
33716pub struct SorobanAuthorizationEntries(pub VecM<SorobanAuthorizationEntry>);
33717
33718impl From<SorobanAuthorizationEntries> for VecM<SorobanAuthorizationEntry> {
33719    #[must_use]
33720    fn from(x: SorobanAuthorizationEntries) -> Self {
33721        x.0
33722    }
33723}
33724
33725impl From<VecM<SorobanAuthorizationEntry>> for SorobanAuthorizationEntries {
33726    #[must_use]
33727    fn from(x: VecM<SorobanAuthorizationEntry>) -> Self {
33728        SorobanAuthorizationEntries(x)
33729    }
33730}
33731
33732impl AsRef<VecM<SorobanAuthorizationEntry>> for SorobanAuthorizationEntries {
33733    #[must_use]
33734    fn as_ref(&self) -> &VecM<SorobanAuthorizationEntry> {
33735        &self.0
33736    }
33737}
33738
33739impl ReadXdr for SorobanAuthorizationEntries {
33740    #[cfg(feature = "std")]
33741    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
33742        r.with_limited_depth(|r| {
33743            let i = VecM::<SorobanAuthorizationEntry>::read_xdr(r)?;
33744            let v = SorobanAuthorizationEntries(i);
33745            Ok(v)
33746        })
33747    }
33748}
33749
33750impl WriteXdr for SorobanAuthorizationEntries {
33751    #[cfg(feature = "std")]
33752    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33753        w.with_limited_depth(|w| self.0.write_xdr(w))
33754    }
33755}
33756
33757impl Deref for SorobanAuthorizationEntries {
33758    type Target = VecM<SorobanAuthorizationEntry>;
33759    fn deref(&self) -> &Self::Target {
33760        &self.0
33761    }
33762}
33763
33764impl From<SorobanAuthorizationEntries> for Vec<SorobanAuthorizationEntry> {
33765    #[must_use]
33766    fn from(x: SorobanAuthorizationEntries) -> Self {
33767        x.0 .0
33768    }
33769}
33770
33771impl TryFrom<Vec<SorobanAuthorizationEntry>> for SorobanAuthorizationEntries {
33772    type Error = Error;
33773    fn try_from(x: Vec<SorobanAuthorizationEntry>) -> Result<Self, Error> {
33774        Ok(SorobanAuthorizationEntries(x.try_into()?))
33775    }
33776}
33777
33778#[cfg(feature = "alloc")]
33779impl TryFrom<&Vec<SorobanAuthorizationEntry>> for SorobanAuthorizationEntries {
33780    type Error = Error;
33781    fn try_from(x: &Vec<SorobanAuthorizationEntry>) -> Result<Self, Error> {
33782        Ok(SorobanAuthorizationEntries(x.try_into()?))
33783    }
33784}
33785
33786impl AsRef<Vec<SorobanAuthorizationEntry>> for SorobanAuthorizationEntries {
33787    #[must_use]
33788    fn as_ref(&self) -> &Vec<SorobanAuthorizationEntry> {
33789        &self.0 .0
33790    }
33791}
33792
33793impl AsRef<[SorobanAuthorizationEntry]> for SorobanAuthorizationEntries {
33794    #[cfg(feature = "alloc")]
33795    #[must_use]
33796    fn as_ref(&self) -> &[SorobanAuthorizationEntry] {
33797        &self.0 .0
33798    }
33799    #[cfg(not(feature = "alloc"))]
33800    #[must_use]
33801    fn as_ref(&self) -> &[SorobanAuthorizationEntry] {
33802        self.0 .0
33803    }
33804}
33805
33806/// InvokeHostFunctionOp is an XDR Struct defines as:
33807///
33808/// ```text
33809/// struct InvokeHostFunctionOp
33810/// {
33811///     // Host function to invoke.
33812///     HostFunction hostFunction;
33813///     // Per-address authorizations for this host function.
33814///     SorobanAuthorizationEntry auth<>;
33815/// };
33816/// ```
33817///
33818#[cfg_attr(feature = "alloc", derive(Default))]
33819#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
33820#[cfg_eval::cfg_eval]
33821#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33822#[cfg_attr(
33823    all(feature = "serde", feature = "alloc"),
33824    serde_with::serde_as,
33825    derive(serde::Serialize, serde::Deserialize),
33826    serde(rename_all = "snake_case")
33827)]
33828#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33829pub struct InvokeHostFunctionOp {
33830    pub host_function: HostFunction,
33831    pub auth: VecM<SorobanAuthorizationEntry>,
33832}
33833
33834impl ReadXdr for InvokeHostFunctionOp {
33835    #[cfg(feature = "std")]
33836    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
33837        r.with_limited_depth(|r| {
33838            Ok(Self {
33839                host_function: HostFunction::read_xdr(r)?,
33840                auth: VecM::<SorobanAuthorizationEntry>::read_xdr(r)?,
33841            })
33842        })
33843    }
33844}
33845
33846impl WriteXdr for InvokeHostFunctionOp {
33847    #[cfg(feature = "std")]
33848    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33849        w.with_limited_depth(|w| {
33850            self.host_function.write_xdr(w)?;
33851            self.auth.write_xdr(w)?;
33852            Ok(())
33853        })
33854    }
33855}
33856
33857/// ExtendFootprintTtlOp is an XDR Struct defines as:
33858///
33859/// ```text
33860/// struct ExtendFootprintTTLOp
33861/// {
33862///     ExtensionPoint ext;
33863///     uint32 extendTo;
33864/// };
33865/// ```
33866///
33867#[cfg_attr(feature = "alloc", derive(Default))]
33868#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
33869#[cfg_eval::cfg_eval]
33870#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33871#[cfg_attr(
33872    all(feature = "serde", feature = "alloc"),
33873    serde_with::serde_as,
33874    derive(serde::Serialize, serde::Deserialize),
33875    serde(rename_all = "snake_case")
33876)]
33877#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33878pub struct ExtendFootprintTtlOp {
33879    pub ext: ExtensionPoint,
33880    pub extend_to: u32,
33881}
33882
33883impl ReadXdr for ExtendFootprintTtlOp {
33884    #[cfg(feature = "std")]
33885    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
33886        r.with_limited_depth(|r| {
33887            Ok(Self {
33888                ext: ExtensionPoint::read_xdr(r)?,
33889                extend_to: u32::read_xdr(r)?,
33890            })
33891        })
33892    }
33893}
33894
33895impl WriteXdr for ExtendFootprintTtlOp {
33896    #[cfg(feature = "std")]
33897    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33898        w.with_limited_depth(|w| {
33899            self.ext.write_xdr(w)?;
33900            self.extend_to.write_xdr(w)?;
33901            Ok(())
33902        })
33903    }
33904}
33905
33906/// RestoreFootprintOp is an XDR Struct defines as:
33907///
33908/// ```text
33909/// struct RestoreFootprintOp
33910/// {
33911///     ExtensionPoint ext;
33912/// };
33913/// ```
33914///
33915#[cfg_attr(feature = "alloc", derive(Default))]
33916#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
33917#[cfg_eval::cfg_eval]
33918#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
33919#[cfg_attr(
33920    all(feature = "serde", feature = "alloc"),
33921    serde_with::serde_as,
33922    derive(serde::Serialize, serde::Deserialize),
33923    serde(rename_all = "snake_case")
33924)]
33925#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33926pub struct RestoreFootprintOp {
33927    pub ext: ExtensionPoint,
33928}
33929
33930impl ReadXdr for RestoreFootprintOp {
33931    #[cfg(feature = "std")]
33932    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
33933        r.with_limited_depth(|r| {
33934            Ok(Self {
33935                ext: ExtensionPoint::read_xdr(r)?,
33936            })
33937        })
33938    }
33939}
33940
33941impl WriteXdr for RestoreFootprintOp {
33942    #[cfg(feature = "std")]
33943    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
33944        w.with_limited_depth(|w| {
33945            self.ext.write_xdr(w)?;
33946            Ok(())
33947        })
33948    }
33949}
33950
33951/// OperationBody is an XDR NestedUnion defines as:
33952///
33953/// ```text
33954/// union switch (OperationType type)
33955///     {
33956///     case CREATE_ACCOUNT:
33957///         CreateAccountOp createAccountOp;
33958///     case PAYMENT:
33959///         PaymentOp paymentOp;
33960///     case PATH_PAYMENT_STRICT_RECEIVE:
33961///         PathPaymentStrictReceiveOp pathPaymentStrictReceiveOp;
33962///     case MANAGE_SELL_OFFER:
33963///         ManageSellOfferOp manageSellOfferOp;
33964///     case CREATE_PASSIVE_SELL_OFFER:
33965///         CreatePassiveSellOfferOp createPassiveSellOfferOp;
33966///     case SET_OPTIONS:
33967///         SetOptionsOp setOptionsOp;
33968///     case CHANGE_TRUST:
33969///         ChangeTrustOp changeTrustOp;
33970///     case ALLOW_TRUST:
33971///         AllowTrustOp allowTrustOp;
33972///     case ACCOUNT_MERGE:
33973///         MuxedAccount destination;
33974///     case INFLATION:
33975///         void;
33976///     case MANAGE_DATA:
33977///         ManageDataOp manageDataOp;
33978///     case BUMP_SEQUENCE:
33979///         BumpSequenceOp bumpSequenceOp;
33980///     case MANAGE_BUY_OFFER:
33981///         ManageBuyOfferOp manageBuyOfferOp;
33982///     case PATH_PAYMENT_STRICT_SEND:
33983///         PathPaymentStrictSendOp pathPaymentStrictSendOp;
33984///     case CREATE_CLAIMABLE_BALANCE:
33985///         CreateClaimableBalanceOp createClaimableBalanceOp;
33986///     case CLAIM_CLAIMABLE_BALANCE:
33987///         ClaimClaimableBalanceOp claimClaimableBalanceOp;
33988///     case BEGIN_SPONSORING_FUTURE_RESERVES:
33989///         BeginSponsoringFutureReservesOp beginSponsoringFutureReservesOp;
33990///     case END_SPONSORING_FUTURE_RESERVES:
33991///         void;
33992///     case REVOKE_SPONSORSHIP:
33993///         RevokeSponsorshipOp revokeSponsorshipOp;
33994///     case CLAWBACK:
33995///         ClawbackOp clawbackOp;
33996///     case CLAWBACK_CLAIMABLE_BALANCE:
33997///         ClawbackClaimableBalanceOp clawbackClaimableBalanceOp;
33998///     case SET_TRUST_LINE_FLAGS:
33999///         SetTrustLineFlagsOp setTrustLineFlagsOp;
34000///     case LIQUIDITY_POOL_DEPOSIT:
34001///         LiquidityPoolDepositOp liquidityPoolDepositOp;
34002///     case LIQUIDITY_POOL_WITHDRAW:
34003///         LiquidityPoolWithdrawOp liquidityPoolWithdrawOp;
34004///     case INVOKE_HOST_FUNCTION:
34005///         InvokeHostFunctionOp invokeHostFunctionOp;
34006///     case EXTEND_FOOTPRINT_TTL:
34007///         ExtendFootprintTTLOp extendFootprintTTLOp;
34008///     case RESTORE_FOOTPRINT:
34009///         RestoreFootprintOp restoreFootprintOp;
34010///     }
34011/// ```
34012///
34013// union with discriminant OperationType
34014#[cfg_eval::cfg_eval]
34015#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
34016#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
34017#[cfg_attr(
34018    all(feature = "serde", feature = "alloc"),
34019    serde_with::serde_as,
34020    derive(serde::Serialize, serde::Deserialize),
34021    serde(rename_all = "snake_case")
34022)]
34023#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
34024#[allow(clippy::large_enum_variant)]
34025pub enum OperationBody {
34026    CreateAccount(CreateAccountOp),
34027    Payment(PaymentOp),
34028    PathPaymentStrictReceive(PathPaymentStrictReceiveOp),
34029    ManageSellOffer(ManageSellOfferOp),
34030    CreatePassiveSellOffer(CreatePassiveSellOfferOp),
34031    SetOptions(SetOptionsOp),
34032    ChangeTrust(ChangeTrustOp),
34033    AllowTrust(AllowTrustOp),
34034    AccountMerge(MuxedAccount),
34035    Inflation,
34036    ManageData(ManageDataOp),
34037    BumpSequence(BumpSequenceOp),
34038    ManageBuyOffer(ManageBuyOfferOp),
34039    PathPaymentStrictSend(PathPaymentStrictSendOp),
34040    CreateClaimableBalance(CreateClaimableBalanceOp),
34041    ClaimClaimableBalance(ClaimClaimableBalanceOp),
34042    BeginSponsoringFutureReserves(BeginSponsoringFutureReservesOp),
34043    EndSponsoringFutureReserves,
34044    RevokeSponsorship(RevokeSponsorshipOp),
34045    Clawback(ClawbackOp),
34046    ClawbackClaimableBalance(ClawbackClaimableBalanceOp),
34047    SetTrustLineFlags(SetTrustLineFlagsOp),
34048    LiquidityPoolDeposit(LiquidityPoolDepositOp),
34049    LiquidityPoolWithdraw(LiquidityPoolWithdrawOp),
34050    InvokeHostFunction(InvokeHostFunctionOp),
34051    ExtendFootprintTtl(ExtendFootprintTtlOp),
34052    RestoreFootprint(RestoreFootprintOp),
34053}
34054
34055#[cfg(feature = "alloc")]
34056impl Default for OperationBody {
34057    fn default() -> Self {
34058        Self::CreateAccount(CreateAccountOp::default())
34059    }
34060}
34061
34062impl OperationBody {
34063    pub const VARIANTS: [OperationType; 27] = [
34064        OperationType::CreateAccount,
34065        OperationType::Payment,
34066        OperationType::PathPaymentStrictReceive,
34067        OperationType::ManageSellOffer,
34068        OperationType::CreatePassiveSellOffer,
34069        OperationType::SetOptions,
34070        OperationType::ChangeTrust,
34071        OperationType::AllowTrust,
34072        OperationType::AccountMerge,
34073        OperationType::Inflation,
34074        OperationType::ManageData,
34075        OperationType::BumpSequence,
34076        OperationType::ManageBuyOffer,
34077        OperationType::PathPaymentStrictSend,
34078        OperationType::CreateClaimableBalance,
34079        OperationType::ClaimClaimableBalance,
34080        OperationType::BeginSponsoringFutureReserves,
34081        OperationType::EndSponsoringFutureReserves,
34082        OperationType::RevokeSponsorship,
34083        OperationType::Clawback,
34084        OperationType::ClawbackClaimableBalance,
34085        OperationType::SetTrustLineFlags,
34086        OperationType::LiquidityPoolDeposit,
34087        OperationType::LiquidityPoolWithdraw,
34088        OperationType::InvokeHostFunction,
34089        OperationType::ExtendFootprintTtl,
34090        OperationType::RestoreFootprint,
34091    ];
34092    pub const VARIANTS_STR: [&'static str; 27] = [
34093        "CreateAccount",
34094        "Payment",
34095        "PathPaymentStrictReceive",
34096        "ManageSellOffer",
34097        "CreatePassiveSellOffer",
34098        "SetOptions",
34099        "ChangeTrust",
34100        "AllowTrust",
34101        "AccountMerge",
34102        "Inflation",
34103        "ManageData",
34104        "BumpSequence",
34105        "ManageBuyOffer",
34106        "PathPaymentStrictSend",
34107        "CreateClaimableBalance",
34108        "ClaimClaimableBalance",
34109        "BeginSponsoringFutureReserves",
34110        "EndSponsoringFutureReserves",
34111        "RevokeSponsorship",
34112        "Clawback",
34113        "ClawbackClaimableBalance",
34114        "SetTrustLineFlags",
34115        "LiquidityPoolDeposit",
34116        "LiquidityPoolWithdraw",
34117        "InvokeHostFunction",
34118        "ExtendFootprintTtl",
34119        "RestoreFootprint",
34120    ];
34121
34122    #[must_use]
34123    pub const fn name(&self) -> &'static str {
34124        match self {
34125            Self::CreateAccount(_) => "CreateAccount",
34126            Self::Payment(_) => "Payment",
34127            Self::PathPaymentStrictReceive(_) => "PathPaymentStrictReceive",
34128            Self::ManageSellOffer(_) => "ManageSellOffer",
34129            Self::CreatePassiveSellOffer(_) => "CreatePassiveSellOffer",
34130            Self::SetOptions(_) => "SetOptions",
34131            Self::ChangeTrust(_) => "ChangeTrust",
34132            Self::AllowTrust(_) => "AllowTrust",
34133            Self::AccountMerge(_) => "AccountMerge",
34134            Self::Inflation => "Inflation",
34135            Self::ManageData(_) => "ManageData",
34136            Self::BumpSequence(_) => "BumpSequence",
34137            Self::ManageBuyOffer(_) => "ManageBuyOffer",
34138            Self::PathPaymentStrictSend(_) => "PathPaymentStrictSend",
34139            Self::CreateClaimableBalance(_) => "CreateClaimableBalance",
34140            Self::ClaimClaimableBalance(_) => "ClaimClaimableBalance",
34141            Self::BeginSponsoringFutureReserves(_) => "BeginSponsoringFutureReserves",
34142            Self::EndSponsoringFutureReserves => "EndSponsoringFutureReserves",
34143            Self::RevokeSponsorship(_) => "RevokeSponsorship",
34144            Self::Clawback(_) => "Clawback",
34145            Self::ClawbackClaimableBalance(_) => "ClawbackClaimableBalance",
34146            Self::SetTrustLineFlags(_) => "SetTrustLineFlags",
34147            Self::LiquidityPoolDeposit(_) => "LiquidityPoolDeposit",
34148            Self::LiquidityPoolWithdraw(_) => "LiquidityPoolWithdraw",
34149            Self::InvokeHostFunction(_) => "InvokeHostFunction",
34150            Self::ExtendFootprintTtl(_) => "ExtendFootprintTtl",
34151            Self::RestoreFootprint(_) => "RestoreFootprint",
34152        }
34153    }
34154
34155    #[must_use]
34156    pub const fn discriminant(&self) -> OperationType {
34157        #[allow(clippy::match_same_arms)]
34158        match self {
34159            Self::CreateAccount(_) => OperationType::CreateAccount,
34160            Self::Payment(_) => OperationType::Payment,
34161            Self::PathPaymentStrictReceive(_) => OperationType::PathPaymentStrictReceive,
34162            Self::ManageSellOffer(_) => OperationType::ManageSellOffer,
34163            Self::CreatePassiveSellOffer(_) => OperationType::CreatePassiveSellOffer,
34164            Self::SetOptions(_) => OperationType::SetOptions,
34165            Self::ChangeTrust(_) => OperationType::ChangeTrust,
34166            Self::AllowTrust(_) => OperationType::AllowTrust,
34167            Self::AccountMerge(_) => OperationType::AccountMerge,
34168            Self::Inflation => OperationType::Inflation,
34169            Self::ManageData(_) => OperationType::ManageData,
34170            Self::BumpSequence(_) => OperationType::BumpSequence,
34171            Self::ManageBuyOffer(_) => OperationType::ManageBuyOffer,
34172            Self::PathPaymentStrictSend(_) => OperationType::PathPaymentStrictSend,
34173            Self::CreateClaimableBalance(_) => OperationType::CreateClaimableBalance,
34174            Self::ClaimClaimableBalance(_) => OperationType::ClaimClaimableBalance,
34175            Self::BeginSponsoringFutureReserves(_) => OperationType::BeginSponsoringFutureReserves,
34176            Self::EndSponsoringFutureReserves => OperationType::EndSponsoringFutureReserves,
34177            Self::RevokeSponsorship(_) => OperationType::RevokeSponsorship,
34178            Self::Clawback(_) => OperationType::Clawback,
34179            Self::ClawbackClaimableBalance(_) => OperationType::ClawbackClaimableBalance,
34180            Self::SetTrustLineFlags(_) => OperationType::SetTrustLineFlags,
34181            Self::LiquidityPoolDeposit(_) => OperationType::LiquidityPoolDeposit,
34182            Self::LiquidityPoolWithdraw(_) => OperationType::LiquidityPoolWithdraw,
34183            Self::InvokeHostFunction(_) => OperationType::InvokeHostFunction,
34184            Self::ExtendFootprintTtl(_) => OperationType::ExtendFootprintTtl,
34185            Self::RestoreFootprint(_) => OperationType::RestoreFootprint,
34186        }
34187    }
34188
34189    #[must_use]
34190    pub const fn variants() -> [OperationType; 27] {
34191        Self::VARIANTS
34192    }
34193}
34194
34195impl Name for OperationBody {
34196    #[must_use]
34197    fn name(&self) -> &'static str {
34198        Self::name(self)
34199    }
34200}
34201
34202impl Discriminant<OperationType> for OperationBody {
34203    #[must_use]
34204    fn discriminant(&self) -> OperationType {
34205        Self::discriminant(self)
34206    }
34207}
34208
34209impl Variants<OperationType> for OperationBody {
34210    fn variants() -> slice::Iter<'static, OperationType> {
34211        Self::VARIANTS.iter()
34212    }
34213}
34214
34215impl Union<OperationType> for OperationBody {}
34216
34217impl ReadXdr for OperationBody {
34218    #[cfg(feature = "std")]
34219    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
34220        r.with_limited_depth(|r| {
34221            let dv: OperationType = <OperationType as ReadXdr>::read_xdr(r)?;
34222            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
34223            let v = match dv {
34224                OperationType::CreateAccount => Self::CreateAccount(CreateAccountOp::read_xdr(r)?),
34225                OperationType::Payment => Self::Payment(PaymentOp::read_xdr(r)?),
34226                OperationType::PathPaymentStrictReceive => {
34227                    Self::PathPaymentStrictReceive(PathPaymentStrictReceiveOp::read_xdr(r)?)
34228                }
34229                OperationType::ManageSellOffer => {
34230                    Self::ManageSellOffer(ManageSellOfferOp::read_xdr(r)?)
34231                }
34232                OperationType::CreatePassiveSellOffer => {
34233                    Self::CreatePassiveSellOffer(CreatePassiveSellOfferOp::read_xdr(r)?)
34234                }
34235                OperationType::SetOptions => Self::SetOptions(SetOptionsOp::read_xdr(r)?),
34236                OperationType::ChangeTrust => Self::ChangeTrust(ChangeTrustOp::read_xdr(r)?),
34237                OperationType::AllowTrust => Self::AllowTrust(AllowTrustOp::read_xdr(r)?),
34238                OperationType::AccountMerge => Self::AccountMerge(MuxedAccount::read_xdr(r)?),
34239                OperationType::Inflation => Self::Inflation,
34240                OperationType::ManageData => Self::ManageData(ManageDataOp::read_xdr(r)?),
34241                OperationType::BumpSequence => Self::BumpSequence(BumpSequenceOp::read_xdr(r)?),
34242                OperationType::ManageBuyOffer => {
34243                    Self::ManageBuyOffer(ManageBuyOfferOp::read_xdr(r)?)
34244                }
34245                OperationType::PathPaymentStrictSend => {
34246                    Self::PathPaymentStrictSend(PathPaymentStrictSendOp::read_xdr(r)?)
34247                }
34248                OperationType::CreateClaimableBalance => {
34249                    Self::CreateClaimableBalance(CreateClaimableBalanceOp::read_xdr(r)?)
34250                }
34251                OperationType::ClaimClaimableBalance => {
34252                    Self::ClaimClaimableBalance(ClaimClaimableBalanceOp::read_xdr(r)?)
34253                }
34254                OperationType::BeginSponsoringFutureReserves => {
34255                    Self::BeginSponsoringFutureReserves(BeginSponsoringFutureReservesOp::read_xdr(
34256                        r,
34257                    )?)
34258                }
34259                OperationType::EndSponsoringFutureReserves => Self::EndSponsoringFutureReserves,
34260                OperationType::RevokeSponsorship => {
34261                    Self::RevokeSponsorship(RevokeSponsorshipOp::read_xdr(r)?)
34262                }
34263                OperationType::Clawback => Self::Clawback(ClawbackOp::read_xdr(r)?),
34264                OperationType::ClawbackClaimableBalance => {
34265                    Self::ClawbackClaimableBalance(ClawbackClaimableBalanceOp::read_xdr(r)?)
34266                }
34267                OperationType::SetTrustLineFlags => {
34268                    Self::SetTrustLineFlags(SetTrustLineFlagsOp::read_xdr(r)?)
34269                }
34270                OperationType::LiquidityPoolDeposit => {
34271                    Self::LiquidityPoolDeposit(LiquidityPoolDepositOp::read_xdr(r)?)
34272                }
34273                OperationType::LiquidityPoolWithdraw => {
34274                    Self::LiquidityPoolWithdraw(LiquidityPoolWithdrawOp::read_xdr(r)?)
34275                }
34276                OperationType::InvokeHostFunction => {
34277                    Self::InvokeHostFunction(InvokeHostFunctionOp::read_xdr(r)?)
34278                }
34279                OperationType::ExtendFootprintTtl => {
34280                    Self::ExtendFootprintTtl(ExtendFootprintTtlOp::read_xdr(r)?)
34281                }
34282                OperationType::RestoreFootprint => {
34283                    Self::RestoreFootprint(RestoreFootprintOp::read_xdr(r)?)
34284                }
34285                #[allow(unreachable_patterns)]
34286                _ => return Err(Error::Invalid),
34287            };
34288            Ok(v)
34289        })
34290    }
34291}
34292
34293impl WriteXdr for OperationBody {
34294    #[cfg(feature = "std")]
34295    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
34296        w.with_limited_depth(|w| {
34297            self.discriminant().write_xdr(w)?;
34298            #[allow(clippy::match_same_arms)]
34299            match self {
34300                Self::CreateAccount(v) => v.write_xdr(w)?,
34301                Self::Payment(v) => v.write_xdr(w)?,
34302                Self::PathPaymentStrictReceive(v) => v.write_xdr(w)?,
34303                Self::ManageSellOffer(v) => v.write_xdr(w)?,
34304                Self::CreatePassiveSellOffer(v) => v.write_xdr(w)?,
34305                Self::SetOptions(v) => v.write_xdr(w)?,
34306                Self::ChangeTrust(v) => v.write_xdr(w)?,
34307                Self::AllowTrust(v) => v.write_xdr(w)?,
34308                Self::AccountMerge(v) => v.write_xdr(w)?,
34309                Self::Inflation => ().write_xdr(w)?,
34310                Self::ManageData(v) => v.write_xdr(w)?,
34311                Self::BumpSequence(v) => v.write_xdr(w)?,
34312                Self::ManageBuyOffer(v) => v.write_xdr(w)?,
34313                Self::PathPaymentStrictSend(v) => v.write_xdr(w)?,
34314                Self::CreateClaimableBalance(v) => v.write_xdr(w)?,
34315                Self::ClaimClaimableBalance(v) => v.write_xdr(w)?,
34316                Self::BeginSponsoringFutureReserves(v) => v.write_xdr(w)?,
34317                Self::EndSponsoringFutureReserves => ().write_xdr(w)?,
34318                Self::RevokeSponsorship(v) => v.write_xdr(w)?,
34319                Self::Clawback(v) => v.write_xdr(w)?,
34320                Self::ClawbackClaimableBalance(v) => v.write_xdr(w)?,
34321                Self::SetTrustLineFlags(v) => v.write_xdr(w)?,
34322                Self::LiquidityPoolDeposit(v) => v.write_xdr(w)?,
34323                Self::LiquidityPoolWithdraw(v) => v.write_xdr(w)?,
34324                Self::InvokeHostFunction(v) => v.write_xdr(w)?,
34325                Self::ExtendFootprintTtl(v) => v.write_xdr(w)?,
34326                Self::RestoreFootprint(v) => v.write_xdr(w)?,
34327            };
34328            Ok(())
34329        })
34330    }
34331}
34332
34333/// Operation is an XDR Struct defines as:
34334///
34335/// ```text
34336/// struct Operation
34337/// {
34338///     // sourceAccount is the account used to run the operation
34339///     // if not set, the runtime defaults to "sourceAccount" specified at
34340///     // the transaction level
34341///     MuxedAccount* sourceAccount;
34342///
34343///     union switch (OperationType type)
34344///     {
34345///     case CREATE_ACCOUNT:
34346///         CreateAccountOp createAccountOp;
34347///     case PAYMENT:
34348///         PaymentOp paymentOp;
34349///     case PATH_PAYMENT_STRICT_RECEIVE:
34350///         PathPaymentStrictReceiveOp pathPaymentStrictReceiveOp;
34351///     case MANAGE_SELL_OFFER:
34352///         ManageSellOfferOp manageSellOfferOp;
34353///     case CREATE_PASSIVE_SELL_OFFER:
34354///         CreatePassiveSellOfferOp createPassiveSellOfferOp;
34355///     case SET_OPTIONS:
34356///         SetOptionsOp setOptionsOp;
34357///     case CHANGE_TRUST:
34358///         ChangeTrustOp changeTrustOp;
34359///     case ALLOW_TRUST:
34360///         AllowTrustOp allowTrustOp;
34361///     case ACCOUNT_MERGE:
34362///         MuxedAccount destination;
34363///     case INFLATION:
34364///         void;
34365///     case MANAGE_DATA:
34366///         ManageDataOp manageDataOp;
34367///     case BUMP_SEQUENCE:
34368///         BumpSequenceOp bumpSequenceOp;
34369///     case MANAGE_BUY_OFFER:
34370///         ManageBuyOfferOp manageBuyOfferOp;
34371///     case PATH_PAYMENT_STRICT_SEND:
34372///         PathPaymentStrictSendOp pathPaymentStrictSendOp;
34373///     case CREATE_CLAIMABLE_BALANCE:
34374///         CreateClaimableBalanceOp createClaimableBalanceOp;
34375///     case CLAIM_CLAIMABLE_BALANCE:
34376///         ClaimClaimableBalanceOp claimClaimableBalanceOp;
34377///     case BEGIN_SPONSORING_FUTURE_RESERVES:
34378///         BeginSponsoringFutureReservesOp beginSponsoringFutureReservesOp;
34379///     case END_SPONSORING_FUTURE_RESERVES:
34380///         void;
34381///     case REVOKE_SPONSORSHIP:
34382///         RevokeSponsorshipOp revokeSponsorshipOp;
34383///     case CLAWBACK:
34384///         ClawbackOp clawbackOp;
34385///     case CLAWBACK_CLAIMABLE_BALANCE:
34386///         ClawbackClaimableBalanceOp clawbackClaimableBalanceOp;
34387///     case SET_TRUST_LINE_FLAGS:
34388///         SetTrustLineFlagsOp setTrustLineFlagsOp;
34389///     case LIQUIDITY_POOL_DEPOSIT:
34390///         LiquidityPoolDepositOp liquidityPoolDepositOp;
34391///     case LIQUIDITY_POOL_WITHDRAW:
34392///         LiquidityPoolWithdrawOp liquidityPoolWithdrawOp;
34393///     case INVOKE_HOST_FUNCTION:
34394///         InvokeHostFunctionOp invokeHostFunctionOp;
34395///     case EXTEND_FOOTPRINT_TTL:
34396///         ExtendFootprintTTLOp extendFootprintTTLOp;
34397///     case RESTORE_FOOTPRINT:
34398///         RestoreFootprintOp restoreFootprintOp;
34399///     }
34400///     body;
34401/// };
34402/// ```
34403///
34404#[cfg_attr(feature = "alloc", derive(Default))]
34405#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
34406#[cfg_eval::cfg_eval]
34407#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
34408#[cfg_attr(
34409    all(feature = "serde", feature = "alloc"),
34410    serde_with::serde_as,
34411    derive(serde::Serialize, serde::Deserialize),
34412    serde(rename_all = "snake_case")
34413)]
34414#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
34415pub struct Operation {
34416    pub source_account: Option<MuxedAccount>,
34417    pub body: OperationBody,
34418}
34419
34420impl ReadXdr for Operation {
34421    #[cfg(feature = "std")]
34422    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
34423        r.with_limited_depth(|r| {
34424            Ok(Self {
34425                source_account: Option::<MuxedAccount>::read_xdr(r)?,
34426                body: OperationBody::read_xdr(r)?,
34427            })
34428        })
34429    }
34430}
34431
34432impl WriteXdr for Operation {
34433    #[cfg(feature = "std")]
34434    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
34435        w.with_limited_depth(|w| {
34436            self.source_account.write_xdr(w)?;
34437            self.body.write_xdr(w)?;
34438            Ok(())
34439        })
34440    }
34441}
34442
34443/// HashIdPreimageOperationId is an XDR NestedStruct defines as:
34444///
34445/// ```text
34446/// struct
34447///     {
34448///         AccountID sourceAccount;
34449///         SequenceNumber seqNum;
34450///         uint32 opNum;
34451///     }
34452/// ```
34453///
34454#[cfg_attr(feature = "alloc", derive(Default))]
34455#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
34456#[cfg_eval::cfg_eval]
34457#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
34458#[cfg_attr(
34459    all(feature = "serde", feature = "alloc"),
34460    serde_with::serde_as,
34461    derive(serde::Serialize, serde::Deserialize),
34462    serde(rename_all = "snake_case")
34463)]
34464#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
34465pub struct HashIdPreimageOperationId {
34466    pub source_account: AccountId,
34467    pub seq_num: SequenceNumber,
34468    pub op_num: u32,
34469}
34470
34471impl ReadXdr for HashIdPreimageOperationId {
34472    #[cfg(feature = "std")]
34473    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
34474        r.with_limited_depth(|r| {
34475            Ok(Self {
34476                source_account: AccountId::read_xdr(r)?,
34477                seq_num: SequenceNumber::read_xdr(r)?,
34478                op_num: u32::read_xdr(r)?,
34479            })
34480        })
34481    }
34482}
34483
34484impl WriteXdr for HashIdPreimageOperationId {
34485    #[cfg(feature = "std")]
34486    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
34487        w.with_limited_depth(|w| {
34488            self.source_account.write_xdr(w)?;
34489            self.seq_num.write_xdr(w)?;
34490            self.op_num.write_xdr(w)?;
34491            Ok(())
34492        })
34493    }
34494}
34495
34496/// HashIdPreimageRevokeId is an XDR NestedStruct defines as:
34497///
34498/// ```text
34499/// struct
34500///     {
34501///         AccountID sourceAccount;
34502///         SequenceNumber seqNum;
34503///         uint32 opNum;
34504///         PoolID liquidityPoolID;
34505///         Asset asset;
34506///     }
34507/// ```
34508///
34509#[cfg_attr(feature = "alloc", derive(Default))]
34510#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
34511#[cfg_eval::cfg_eval]
34512#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
34513#[cfg_attr(
34514    all(feature = "serde", feature = "alloc"),
34515    serde_with::serde_as,
34516    derive(serde::Serialize, serde::Deserialize),
34517    serde(rename_all = "snake_case")
34518)]
34519#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
34520pub struct HashIdPreimageRevokeId {
34521    pub source_account: AccountId,
34522    pub seq_num: SequenceNumber,
34523    pub op_num: u32,
34524    pub liquidity_pool_id: PoolId,
34525    pub asset: Asset,
34526}
34527
34528impl ReadXdr for HashIdPreimageRevokeId {
34529    #[cfg(feature = "std")]
34530    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
34531        r.with_limited_depth(|r| {
34532            Ok(Self {
34533                source_account: AccountId::read_xdr(r)?,
34534                seq_num: SequenceNumber::read_xdr(r)?,
34535                op_num: u32::read_xdr(r)?,
34536                liquidity_pool_id: PoolId::read_xdr(r)?,
34537                asset: Asset::read_xdr(r)?,
34538            })
34539        })
34540    }
34541}
34542
34543impl WriteXdr for HashIdPreimageRevokeId {
34544    #[cfg(feature = "std")]
34545    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
34546        w.with_limited_depth(|w| {
34547            self.source_account.write_xdr(w)?;
34548            self.seq_num.write_xdr(w)?;
34549            self.op_num.write_xdr(w)?;
34550            self.liquidity_pool_id.write_xdr(w)?;
34551            self.asset.write_xdr(w)?;
34552            Ok(())
34553        })
34554    }
34555}
34556
34557/// HashIdPreimageContractId is an XDR NestedStruct defines as:
34558///
34559/// ```text
34560/// struct
34561///     {
34562///         Hash networkID;
34563///         ContractIDPreimage contractIDPreimage;
34564///     }
34565/// ```
34566///
34567#[cfg_attr(feature = "alloc", derive(Default))]
34568#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
34569#[cfg_eval::cfg_eval]
34570#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
34571#[cfg_attr(
34572    all(feature = "serde", feature = "alloc"),
34573    serde_with::serde_as,
34574    derive(serde::Serialize, serde::Deserialize),
34575    serde(rename_all = "snake_case")
34576)]
34577#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
34578pub struct HashIdPreimageContractId {
34579    pub network_id: Hash,
34580    pub contract_id_preimage: ContractIdPreimage,
34581}
34582
34583impl ReadXdr for HashIdPreimageContractId {
34584    #[cfg(feature = "std")]
34585    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
34586        r.with_limited_depth(|r| {
34587            Ok(Self {
34588                network_id: Hash::read_xdr(r)?,
34589                contract_id_preimage: ContractIdPreimage::read_xdr(r)?,
34590            })
34591        })
34592    }
34593}
34594
34595impl WriteXdr for HashIdPreimageContractId {
34596    #[cfg(feature = "std")]
34597    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
34598        w.with_limited_depth(|w| {
34599            self.network_id.write_xdr(w)?;
34600            self.contract_id_preimage.write_xdr(w)?;
34601            Ok(())
34602        })
34603    }
34604}
34605
34606/// HashIdPreimageSorobanAuthorization is an XDR NestedStruct defines as:
34607///
34608/// ```text
34609/// struct
34610///     {
34611///         Hash networkID;
34612///         int64 nonce;
34613///         uint32 signatureExpirationLedger;
34614///         SorobanAuthorizedInvocation invocation;
34615///     }
34616/// ```
34617///
34618#[cfg_attr(feature = "alloc", derive(Default))]
34619#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
34620#[cfg_eval::cfg_eval]
34621#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
34622#[cfg_attr(
34623    all(feature = "serde", feature = "alloc"),
34624    serde_with::serde_as,
34625    derive(serde::Serialize, serde::Deserialize),
34626    serde(rename_all = "snake_case")
34627)]
34628#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
34629pub struct HashIdPreimageSorobanAuthorization {
34630    pub network_id: Hash,
34631    #[cfg_attr(
34632        all(feature = "serde", feature = "alloc"),
34633        serde_as(as = "NumberOrString")
34634    )]
34635    pub nonce: i64,
34636    pub signature_expiration_ledger: u32,
34637    pub invocation: SorobanAuthorizedInvocation,
34638}
34639
34640impl ReadXdr for HashIdPreimageSorobanAuthorization {
34641    #[cfg(feature = "std")]
34642    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
34643        r.with_limited_depth(|r| {
34644            Ok(Self {
34645                network_id: Hash::read_xdr(r)?,
34646                nonce: i64::read_xdr(r)?,
34647                signature_expiration_ledger: u32::read_xdr(r)?,
34648                invocation: SorobanAuthorizedInvocation::read_xdr(r)?,
34649            })
34650        })
34651    }
34652}
34653
34654impl WriteXdr for HashIdPreimageSorobanAuthorization {
34655    #[cfg(feature = "std")]
34656    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
34657        w.with_limited_depth(|w| {
34658            self.network_id.write_xdr(w)?;
34659            self.nonce.write_xdr(w)?;
34660            self.signature_expiration_ledger.write_xdr(w)?;
34661            self.invocation.write_xdr(w)?;
34662            Ok(())
34663        })
34664    }
34665}
34666
34667/// HashIdPreimage is an XDR Union defines as:
34668///
34669/// ```text
34670/// union HashIDPreimage switch (EnvelopeType type)
34671/// {
34672/// case ENVELOPE_TYPE_OP_ID:
34673///     struct
34674///     {
34675///         AccountID sourceAccount;
34676///         SequenceNumber seqNum;
34677///         uint32 opNum;
34678///     } operationID;
34679/// case ENVELOPE_TYPE_POOL_REVOKE_OP_ID:
34680///     struct
34681///     {
34682///         AccountID sourceAccount;
34683///         SequenceNumber seqNum;
34684///         uint32 opNum;
34685///         PoolID liquidityPoolID;
34686///         Asset asset;
34687///     } revokeID;
34688/// case ENVELOPE_TYPE_CONTRACT_ID:
34689///     struct
34690///     {
34691///         Hash networkID;
34692///         ContractIDPreimage contractIDPreimage;
34693///     } contractID;
34694/// case ENVELOPE_TYPE_SOROBAN_AUTHORIZATION:
34695///     struct
34696///     {
34697///         Hash networkID;
34698///         int64 nonce;
34699///         uint32 signatureExpirationLedger;
34700///         SorobanAuthorizedInvocation invocation;
34701///     } sorobanAuthorization;
34702/// };
34703/// ```
34704///
34705// union with discriminant EnvelopeType
34706#[cfg_eval::cfg_eval]
34707#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
34708#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
34709#[cfg_attr(
34710    all(feature = "serde", feature = "alloc"),
34711    serde_with::serde_as,
34712    derive(serde::Serialize, serde::Deserialize),
34713    serde(rename_all = "snake_case")
34714)]
34715#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
34716#[allow(clippy::large_enum_variant)]
34717pub enum HashIdPreimage {
34718    OpId(HashIdPreimageOperationId),
34719    PoolRevokeOpId(HashIdPreimageRevokeId),
34720    ContractId(HashIdPreimageContractId),
34721    SorobanAuthorization(HashIdPreimageSorobanAuthorization),
34722}
34723
34724#[cfg(feature = "alloc")]
34725impl Default for HashIdPreimage {
34726    fn default() -> Self {
34727        Self::OpId(HashIdPreimageOperationId::default())
34728    }
34729}
34730
34731impl HashIdPreimage {
34732    pub const VARIANTS: [EnvelopeType; 4] = [
34733        EnvelopeType::OpId,
34734        EnvelopeType::PoolRevokeOpId,
34735        EnvelopeType::ContractId,
34736        EnvelopeType::SorobanAuthorization,
34737    ];
34738    pub const VARIANTS_STR: [&'static str; 4] = [
34739        "OpId",
34740        "PoolRevokeOpId",
34741        "ContractId",
34742        "SorobanAuthorization",
34743    ];
34744
34745    #[must_use]
34746    pub const fn name(&self) -> &'static str {
34747        match self {
34748            Self::OpId(_) => "OpId",
34749            Self::PoolRevokeOpId(_) => "PoolRevokeOpId",
34750            Self::ContractId(_) => "ContractId",
34751            Self::SorobanAuthorization(_) => "SorobanAuthorization",
34752        }
34753    }
34754
34755    #[must_use]
34756    pub const fn discriminant(&self) -> EnvelopeType {
34757        #[allow(clippy::match_same_arms)]
34758        match self {
34759            Self::OpId(_) => EnvelopeType::OpId,
34760            Self::PoolRevokeOpId(_) => EnvelopeType::PoolRevokeOpId,
34761            Self::ContractId(_) => EnvelopeType::ContractId,
34762            Self::SorobanAuthorization(_) => EnvelopeType::SorobanAuthorization,
34763        }
34764    }
34765
34766    #[must_use]
34767    pub const fn variants() -> [EnvelopeType; 4] {
34768        Self::VARIANTS
34769    }
34770}
34771
34772impl Name for HashIdPreimage {
34773    #[must_use]
34774    fn name(&self) -> &'static str {
34775        Self::name(self)
34776    }
34777}
34778
34779impl Discriminant<EnvelopeType> for HashIdPreimage {
34780    #[must_use]
34781    fn discriminant(&self) -> EnvelopeType {
34782        Self::discriminant(self)
34783    }
34784}
34785
34786impl Variants<EnvelopeType> for HashIdPreimage {
34787    fn variants() -> slice::Iter<'static, EnvelopeType> {
34788        Self::VARIANTS.iter()
34789    }
34790}
34791
34792impl Union<EnvelopeType> for HashIdPreimage {}
34793
34794impl ReadXdr for HashIdPreimage {
34795    #[cfg(feature = "std")]
34796    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
34797        r.with_limited_depth(|r| {
34798            let dv: EnvelopeType = <EnvelopeType as ReadXdr>::read_xdr(r)?;
34799            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
34800            let v = match dv {
34801                EnvelopeType::OpId => Self::OpId(HashIdPreimageOperationId::read_xdr(r)?),
34802                EnvelopeType::PoolRevokeOpId => {
34803                    Self::PoolRevokeOpId(HashIdPreimageRevokeId::read_xdr(r)?)
34804                }
34805                EnvelopeType::ContractId => {
34806                    Self::ContractId(HashIdPreimageContractId::read_xdr(r)?)
34807                }
34808                EnvelopeType::SorobanAuthorization => {
34809                    Self::SorobanAuthorization(HashIdPreimageSorobanAuthorization::read_xdr(r)?)
34810                }
34811                #[allow(unreachable_patterns)]
34812                _ => return Err(Error::Invalid),
34813            };
34814            Ok(v)
34815        })
34816    }
34817}
34818
34819impl WriteXdr for HashIdPreimage {
34820    #[cfg(feature = "std")]
34821    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
34822        w.with_limited_depth(|w| {
34823            self.discriminant().write_xdr(w)?;
34824            #[allow(clippy::match_same_arms)]
34825            match self {
34826                Self::OpId(v) => v.write_xdr(w)?,
34827                Self::PoolRevokeOpId(v) => v.write_xdr(w)?,
34828                Self::ContractId(v) => v.write_xdr(w)?,
34829                Self::SorobanAuthorization(v) => v.write_xdr(w)?,
34830            };
34831            Ok(())
34832        })
34833    }
34834}
34835
34836/// MemoType is an XDR Enum defines as:
34837///
34838/// ```text
34839/// enum MemoType
34840/// {
34841///     MEMO_NONE = 0,
34842///     MEMO_TEXT = 1,
34843///     MEMO_ID = 2,
34844///     MEMO_HASH = 3,
34845///     MEMO_RETURN = 4
34846/// };
34847/// ```
34848///
34849// enum
34850#[cfg_attr(feature = "alloc", derive(Default))]
34851#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
34852#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
34853#[cfg_attr(
34854    all(feature = "serde", feature = "alloc"),
34855    derive(serde::Serialize, serde::Deserialize),
34856    serde(rename_all = "snake_case")
34857)]
34858#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
34859#[repr(i32)]
34860pub enum MemoType {
34861    #[cfg_attr(feature = "alloc", default)]
34862    None = 0,
34863    Text = 1,
34864    Id = 2,
34865    Hash = 3,
34866    Return = 4,
34867}
34868
34869impl MemoType {
34870    pub const VARIANTS: [MemoType; 5] = [
34871        MemoType::None,
34872        MemoType::Text,
34873        MemoType::Id,
34874        MemoType::Hash,
34875        MemoType::Return,
34876    ];
34877    pub const VARIANTS_STR: [&'static str; 5] = ["None", "Text", "Id", "Hash", "Return"];
34878
34879    #[must_use]
34880    pub const fn name(&self) -> &'static str {
34881        match self {
34882            Self::None => "None",
34883            Self::Text => "Text",
34884            Self::Id => "Id",
34885            Self::Hash => "Hash",
34886            Self::Return => "Return",
34887        }
34888    }
34889
34890    #[must_use]
34891    pub const fn variants() -> [MemoType; 5] {
34892        Self::VARIANTS
34893    }
34894}
34895
34896impl Name for MemoType {
34897    #[must_use]
34898    fn name(&self) -> &'static str {
34899        Self::name(self)
34900    }
34901}
34902
34903impl Variants<MemoType> for MemoType {
34904    fn variants() -> slice::Iter<'static, MemoType> {
34905        Self::VARIANTS.iter()
34906    }
34907}
34908
34909impl Enum for MemoType {}
34910
34911impl fmt::Display for MemoType {
34912    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34913        f.write_str(self.name())
34914    }
34915}
34916
34917impl TryFrom<i32> for MemoType {
34918    type Error = Error;
34919
34920    fn try_from(i: i32) -> Result<Self, Error> {
34921        let e = match i {
34922            0 => MemoType::None,
34923            1 => MemoType::Text,
34924            2 => MemoType::Id,
34925            3 => MemoType::Hash,
34926            4 => MemoType::Return,
34927            #[allow(unreachable_patterns)]
34928            _ => return Err(Error::Invalid),
34929        };
34930        Ok(e)
34931    }
34932}
34933
34934impl From<MemoType> for i32 {
34935    #[must_use]
34936    fn from(e: MemoType) -> Self {
34937        e as Self
34938    }
34939}
34940
34941impl ReadXdr for MemoType {
34942    #[cfg(feature = "std")]
34943    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
34944        r.with_limited_depth(|r| {
34945            let e = i32::read_xdr(r)?;
34946            let v: Self = e.try_into()?;
34947            Ok(v)
34948        })
34949    }
34950}
34951
34952impl WriteXdr for MemoType {
34953    #[cfg(feature = "std")]
34954    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
34955        w.with_limited_depth(|w| {
34956            let i: i32 = (*self).into();
34957            i.write_xdr(w)
34958        })
34959    }
34960}
34961
34962/// Memo is an XDR Union defines as:
34963///
34964/// ```text
34965/// union Memo switch (MemoType type)
34966/// {
34967/// case MEMO_NONE:
34968///     void;
34969/// case MEMO_TEXT:
34970///     string text<28>;
34971/// case MEMO_ID:
34972///     uint64 id;
34973/// case MEMO_HASH:
34974///     Hash hash; // the hash of what to pull from the content server
34975/// case MEMO_RETURN:
34976///     Hash retHash; // the hash of the tx you are rejecting
34977/// };
34978/// ```
34979///
34980// union with discriminant MemoType
34981#[cfg_eval::cfg_eval]
34982#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
34983#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
34984#[cfg_attr(
34985    all(feature = "serde", feature = "alloc"),
34986    serde_with::serde_as,
34987    derive(serde::Serialize, serde::Deserialize),
34988    serde(rename_all = "snake_case")
34989)]
34990#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
34991#[allow(clippy::large_enum_variant)]
34992pub enum Memo {
34993    None,
34994    Text(StringM<28>),
34995    Id(
34996        #[cfg_attr(
34997            all(feature = "serde", feature = "alloc"),
34998            serde_as(as = "NumberOrString")
34999        )]
35000        u64,
35001    ),
35002    Hash(Hash),
35003    Return(Hash),
35004}
35005
35006#[cfg(feature = "alloc")]
35007impl Default for Memo {
35008    fn default() -> Self {
35009        Self::None
35010    }
35011}
35012
35013impl Memo {
35014    pub const VARIANTS: [MemoType; 5] = [
35015        MemoType::None,
35016        MemoType::Text,
35017        MemoType::Id,
35018        MemoType::Hash,
35019        MemoType::Return,
35020    ];
35021    pub const VARIANTS_STR: [&'static str; 5] = ["None", "Text", "Id", "Hash", "Return"];
35022
35023    #[must_use]
35024    pub const fn name(&self) -> &'static str {
35025        match self {
35026            Self::None => "None",
35027            Self::Text(_) => "Text",
35028            Self::Id(_) => "Id",
35029            Self::Hash(_) => "Hash",
35030            Self::Return(_) => "Return",
35031        }
35032    }
35033
35034    #[must_use]
35035    pub const fn discriminant(&self) -> MemoType {
35036        #[allow(clippy::match_same_arms)]
35037        match self {
35038            Self::None => MemoType::None,
35039            Self::Text(_) => MemoType::Text,
35040            Self::Id(_) => MemoType::Id,
35041            Self::Hash(_) => MemoType::Hash,
35042            Self::Return(_) => MemoType::Return,
35043        }
35044    }
35045
35046    #[must_use]
35047    pub const fn variants() -> [MemoType; 5] {
35048        Self::VARIANTS
35049    }
35050}
35051
35052impl Name for Memo {
35053    #[must_use]
35054    fn name(&self) -> &'static str {
35055        Self::name(self)
35056    }
35057}
35058
35059impl Discriminant<MemoType> for Memo {
35060    #[must_use]
35061    fn discriminant(&self) -> MemoType {
35062        Self::discriminant(self)
35063    }
35064}
35065
35066impl Variants<MemoType> for Memo {
35067    fn variants() -> slice::Iter<'static, MemoType> {
35068        Self::VARIANTS.iter()
35069    }
35070}
35071
35072impl Union<MemoType> for Memo {}
35073
35074impl ReadXdr for Memo {
35075    #[cfg(feature = "std")]
35076    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35077        r.with_limited_depth(|r| {
35078            let dv: MemoType = <MemoType as ReadXdr>::read_xdr(r)?;
35079            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
35080            let v = match dv {
35081                MemoType::None => Self::None,
35082                MemoType::Text => Self::Text(StringM::<28>::read_xdr(r)?),
35083                MemoType::Id => Self::Id(u64::read_xdr(r)?),
35084                MemoType::Hash => Self::Hash(Hash::read_xdr(r)?),
35085                MemoType::Return => Self::Return(Hash::read_xdr(r)?),
35086                #[allow(unreachable_patterns)]
35087                _ => return Err(Error::Invalid),
35088            };
35089            Ok(v)
35090        })
35091    }
35092}
35093
35094impl WriteXdr for Memo {
35095    #[cfg(feature = "std")]
35096    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35097        w.with_limited_depth(|w| {
35098            self.discriminant().write_xdr(w)?;
35099            #[allow(clippy::match_same_arms)]
35100            match self {
35101                Self::None => ().write_xdr(w)?,
35102                Self::Text(v) => v.write_xdr(w)?,
35103                Self::Id(v) => v.write_xdr(w)?,
35104                Self::Hash(v) => v.write_xdr(w)?,
35105                Self::Return(v) => v.write_xdr(w)?,
35106            };
35107            Ok(())
35108        })
35109    }
35110}
35111
35112/// TimeBounds is an XDR Struct defines as:
35113///
35114/// ```text
35115/// struct TimeBounds
35116/// {
35117///     TimePoint minTime;
35118///     TimePoint maxTime; // 0 here means no maxTime
35119/// };
35120/// ```
35121///
35122#[cfg_attr(feature = "alloc", derive(Default))]
35123#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35124#[cfg_eval::cfg_eval]
35125#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
35126#[cfg_attr(
35127    all(feature = "serde", feature = "alloc"),
35128    serde_with::serde_as,
35129    derive(serde::Serialize, serde::Deserialize),
35130    serde(rename_all = "snake_case")
35131)]
35132#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
35133pub struct TimeBounds {
35134    pub min_time: TimePoint,
35135    pub max_time: TimePoint,
35136}
35137
35138impl ReadXdr for TimeBounds {
35139    #[cfg(feature = "std")]
35140    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35141        r.with_limited_depth(|r| {
35142            Ok(Self {
35143                min_time: TimePoint::read_xdr(r)?,
35144                max_time: TimePoint::read_xdr(r)?,
35145            })
35146        })
35147    }
35148}
35149
35150impl WriteXdr for TimeBounds {
35151    #[cfg(feature = "std")]
35152    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35153        w.with_limited_depth(|w| {
35154            self.min_time.write_xdr(w)?;
35155            self.max_time.write_xdr(w)?;
35156            Ok(())
35157        })
35158    }
35159}
35160
35161/// LedgerBounds is an XDR Struct defines as:
35162///
35163/// ```text
35164/// struct LedgerBounds
35165/// {
35166///     uint32 minLedger;
35167///     uint32 maxLedger; // 0 here means no maxLedger
35168/// };
35169/// ```
35170///
35171#[cfg_attr(feature = "alloc", derive(Default))]
35172#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35173#[cfg_eval::cfg_eval]
35174#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
35175#[cfg_attr(
35176    all(feature = "serde", feature = "alloc"),
35177    serde_with::serde_as,
35178    derive(serde::Serialize, serde::Deserialize),
35179    serde(rename_all = "snake_case")
35180)]
35181#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
35182pub struct LedgerBounds {
35183    pub min_ledger: u32,
35184    pub max_ledger: u32,
35185}
35186
35187impl ReadXdr for LedgerBounds {
35188    #[cfg(feature = "std")]
35189    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35190        r.with_limited_depth(|r| {
35191            Ok(Self {
35192                min_ledger: u32::read_xdr(r)?,
35193                max_ledger: u32::read_xdr(r)?,
35194            })
35195        })
35196    }
35197}
35198
35199impl WriteXdr for LedgerBounds {
35200    #[cfg(feature = "std")]
35201    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35202        w.with_limited_depth(|w| {
35203            self.min_ledger.write_xdr(w)?;
35204            self.max_ledger.write_xdr(w)?;
35205            Ok(())
35206        })
35207    }
35208}
35209
35210/// PreconditionsV2 is an XDR Struct defines as:
35211///
35212/// ```text
35213/// struct PreconditionsV2
35214/// {
35215///     TimeBounds* timeBounds;
35216///
35217///     // Transaction only valid for ledger numbers n such that
35218///     // minLedger <= n < maxLedger (if maxLedger == 0, then
35219///     // only minLedger is checked)
35220///     LedgerBounds* ledgerBounds;
35221///
35222///     // If NULL, only valid when sourceAccount's sequence number
35223///     // is seqNum - 1.  Otherwise, valid when sourceAccount's
35224///     // sequence number n satisfies minSeqNum <= n < tx.seqNum.
35225///     // Note that after execution the account's sequence number
35226///     // is always raised to tx.seqNum, and a transaction is not
35227///     // valid if tx.seqNum is too high to ensure replay protection.
35228///     SequenceNumber* minSeqNum;
35229///
35230///     // For the transaction to be valid, the current ledger time must
35231///     // be at least minSeqAge greater than sourceAccount's seqTime.
35232///     Duration minSeqAge;
35233///
35234///     // For the transaction to be valid, the current ledger number
35235///     // must be at least minSeqLedgerGap greater than sourceAccount's
35236///     // seqLedger.
35237///     uint32 minSeqLedgerGap;
35238///
35239///     // For the transaction to be valid, there must be a signature
35240///     // corresponding to every Signer in this array, even if the
35241///     // signature is not otherwise required by the sourceAccount or
35242///     // operations.
35243///     SignerKey extraSigners<2>;
35244/// };
35245/// ```
35246///
35247#[cfg_attr(feature = "alloc", derive(Default))]
35248#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35249#[cfg_eval::cfg_eval]
35250#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
35251#[cfg_attr(
35252    all(feature = "serde", feature = "alloc"),
35253    serde_with::serde_as,
35254    derive(serde::Serialize, serde::Deserialize),
35255    serde(rename_all = "snake_case")
35256)]
35257#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
35258pub struct PreconditionsV2 {
35259    pub time_bounds: Option<TimeBounds>,
35260    pub ledger_bounds: Option<LedgerBounds>,
35261    pub min_seq_num: Option<SequenceNumber>,
35262    pub min_seq_age: Duration,
35263    pub min_seq_ledger_gap: u32,
35264    pub extra_signers: VecM<SignerKey, 2>,
35265}
35266
35267impl ReadXdr for PreconditionsV2 {
35268    #[cfg(feature = "std")]
35269    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35270        r.with_limited_depth(|r| {
35271            Ok(Self {
35272                time_bounds: Option::<TimeBounds>::read_xdr(r)?,
35273                ledger_bounds: Option::<LedgerBounds>::read_xdr(r)?,
35274                min_seq_num: Option::<SequenceNumber>::read_xdr(r)?,
35275                min_seq_age: Duration::read_xdr(r)?,
35276                min_seq_ledger_gap: u32::read_xdr(r)?,
35277                extra_signers: VecM::<SignerKey, 2>::read_xdr(r)?,
35278            })
35279        })
35280    }
35281}
35282
35283impl WriteXdr for PreconditionsV2 {
35284    #[cfg(feature = "std")]
35285    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35286        w.with_limited_depth(|w| {
35287            self.time_bounds.write_xdr(w)?;
35288            self.ledger_bounds.write_xdr(w)?;
35289            self.min_seq_num.write_xdr(w)?;
35290            self.min_seq_age.write_xdr(w)?;
35291            self.min_seq_ledger_gap.write_xdr(w)?;
35292            self.extra_signers.write_xdr(w)?;
35293            Ok(())
35294        })
35295    }
35296}
35297
35298/// PreconditionType is an XDR Enum defines as:
35299///
35300/// ```text
35301/// enum PreconditionType
35302/// {
35303///     PRECOND_NONE = 0,
35304///     PRECOND_TIME = 1,
35305///     PRECOND_V2 = 2
35306/// };
35307/// ```
35308///
35309// enum
35310#[cfg_attr(feature = "alloc", derive(Default))]
35311#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35312#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
35313#[cfg_attr(
35314    all(feature = "serde", feature = "alloc"),
35315    derive(serde::Serialize, serde::Deserialize),
35316    serde(rename_all = "snake_case")
35317)]
35318#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
35319#[repr(i32)]
35320pub enum PreconditionType {
35321    #[cfg_attr(feature = "alloc", default)]
35322    None = 0,
35323    Time = 1,
35324    V2 = 2,
35325}
35326
35327impl PreconditionType {
35328    pub const VARIANTS: [PreconditionType; 3] = [
35329        PreconditionType::None,
35330        PreconditionType::Time,
35331        PreconditionType::V2,
35332    ];
35333    pub const VARIANTS_STR: [&'static str; 3] = ["None", "Time", "V2"];
35334
35335    #[must_use]
35336    pub const fn name(&self) -> &'static str {
35337        match self {
35338            Self::None => "None",
35339            Self::Time => "Time",
35340            Self::V2 => "V2",
35341        }
35342    }
35343
35344    #[must_use]
35345    pub const fn variants() -> [PreconditionType; 3] {
35346        Self::VARIANTS
35347    }
35348}
35349
35350impl Name for PreconditionType {
35351    #[must_use]
35352    fn name(&self) -> &'static str {
35353        Self::name(self)
35354    }
35355}
35356
35357impl Variants<PreconditionType> for PreconditionType {
35358    fn variants() -> slice::Iter<'static, PreconditionType> {
35359        Self::VARIANTS.iter()
35360    }
35361}
35362
35363impl Enum for PreconditionType {}
35364
35365impl fmt::Display for PreconditionType {
35366    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
35367        f.write_str(self.name())
35368    }
35369}
35370
35371impl TryFrom<i32> for PreconditionType {
35372    type Error = Error;
35373
35374    fn try_from(i: i32) -> Result<Self, Error> {
35375        let e = match i {
35376            0 => PreconditionType::None,
35377            1 => PreconditionType::Time,
35378            2 => PreconditionType::V2,
35379            #[allow(unreachable_patterns)]
35380            _ => return Err(Error::Invalid),
35381        };
35382        Ok(e)
35383    }
35384}
35385
35386impl From<PreconditionType> for i32 {
35387    #[must_use]
35388    fn from(e: PreconditionType) -> Self {
35389        e as Self
35390    }
35391}
35392
35393impl ReadXdr for PreconditionType {
35394    #[cfg(feature = "std")]
35395    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35396        r.with_limited_depth(|r| {
35397            let e = i32::read_xdr(r)?;
35398            let v: Self = e.try_into()?;
35399            Ok(v)
35400        })
35401    }
35402}
35403
35404impl WriteXdr for PreconditionType {
35405    #[cfg(feature = "std")]
35406    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35407        w.with_limited_depth(|w| {
35408            let i: i32 = (*self).into();
35409            i.write_xdr(w)
35410        })
35411    }
35412}
35413
35414/// Preconditions is an XDR Union defines as:
35415///
35416/// ```text
35417/// union Preconditions switch (PreconditionType type)
35418/// {
35419/// case PRECOND_NONE:
35420///     void;
35421/// case PRECOND_TIME:
35422///     TimeBounds timeBounds;
35423/// case PRECOND_V2:
35424///     PreconditionsV2 v2;
35425/// };
35426/// ```
35427///
35428// union with discriminant PreconditionType
35429#[cfg_eval::cfg_eval]
35430#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35431#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
35432#[cfg_attr(
35433    all(feature = "serde", feature = "alloc"),
35434    serde_with::serde_as,
35435    derive(serde::Serialize, serde::Deserialize),
35436    serde(rename_all = "snake_case")
35437)]
35438#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
35439#[allow(clippy::large_enum_variant)]
35440pub enum Preconditions {
35441    None,
35442    Time(TimeBounds),
35443    V2(PreconditionsV2),
35444}
35445
35446#[cfg(feature = "alloc")]
35447impl Default for Preconditions {
35448    fn default() -> Self {
35449        Self::None
35450    }
35451}
35452
35453impl Preconditions {
35454    pub const VARIANTS: [PreconditionType; 3] = [
35455        PreconditionType::None,
35456        PreconditionType::Time,
35457        PreconditionType::V2,
35458    ];
35459    pub const VARIANTS_STR: [&'static str; 3] = ["None", "Time", "V2"];
35460
35461    #[must_use]
35462    pub const fn name(&self) -> &'static str {
35463        match self {
35464            Self::None => "None",
35465            Self::Time(_) => "Time",
35466            Self::V2(_) => "V2",
35467        }
35468    }
35469
35470    #[must_use]
35471    pub const fn discriminant(&self) -> PreconditionType {
35472        #[allow(clippy::match_same_arms)]
35473        match self {
35474            Self::None => PreconditionType::None,
35475            Self::Time(_) => PreconditionType::Time,
35476            Self::V2(_) => PreconditionType::V2,
35477        }
35478    }
35479
35480    #[must_use]
35481    pub const fn variants() -> [PreconditionType; 3] {
35482        Self::VARIANTS
35483    }
35484}
35485
35486impl Name for Preconditions {
35487    #[must_use]
35488    fn name(&self) -> &'static str {
35489        Self::name(self)
35490    }
35491}
35492
35493impl Discriminant<PreconditionType> for Preconditions {
35494    #[must_use]
35495    fn discriminant(&self) -> PreconditionType {
35496        Self::discriminant(self)
35497    }
35498}
35499
35500impl Variants<PreconditionType> for Preconditions {
35501    fn variants() -> slice::Iter<'static, PreconditionType> {
35502        Self::VARIANTS.iter()
35503    }
35504}
35505
35506impl Union<PreconditionType> for Preconditions {}
35507
35508impl ReadXdr for Preconditions {
35509    #[cfg(feature = "std")]
35510    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35511        r.with_limited_depth(|r| {
35512            let dv: PreconditionType = <PreconditionType as ReadXdr>::read_xdr(r)?;
35513            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
35514            let v = match dv {
35515                PreconditionType::None => Self::None,
35516                PreconditionType::Time => Self::Time(TimeBounds::read_xdr(r)?),
35517                PreconditionType::V2 => Self::V2(PreconditionsV2::read_xdr(r)?),
35518                #[allow(unreachable_patterns)]
35519                _ => return Err(Error::Invalid),
35520            };
35521            Ok(v)
35522        })
35523    }
35524}
35525
35526impl WriteXdr for Preconditions {
35527    #[cfg(feature = "std")]
35528    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35529        w.with_limited_depth(|w| {
35530            self.discriminant().write_xdr(w)?;
35531            #[allow(clippy::match_same_arms)]
35532            match self {
35533                Self::None => ().write_xdr(w)?,
35534                Self::Time(v) => v.write_xdr(w)?,
35535                Self::V2(v) => v.write_xdr(w)?,
35536            };
35537            Ok(())
35538        })
35539    }
35540}
35541
35542/// LedgerFootprint is an XDR Struct defines as:
35543///
35544/// ```text
35545/// struct LedgerFootprint
35546/// {
35547///     LedgerKey readOnly<>;
35548///     LedgerKey readWrite<>;
35549/// };
35550/// ```
35551///
35552#[cfg_attr(feature = "alloc", derive(Default))]
35553#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35554#[cfg_eval::cfg_eval]
35555#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
35556#[cfg_attr(
35557    all(feature = "serde", feature = "alloc"),
35558    serde_with::serde_as,
35559    derive(serde::Serialize, serde::Deserialize),
35560    serde(rename_all = "snake_case")
35561)]
35562#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
35563pub struct LedgerFootprint {
35564    pub read_only: VecM<LedgerKey>,
35565    pub read_write: VecM<LedgerKey>,
35566}
35567
35568impl ReadXdr for LedgerFootprint {
35569    #[cfg(feature = "std")]
35570    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35571        r.with_limited_depth(|r| {
35572            Ok(Self {
35573                read_only: VecM::<LedgerKey>::read_xdr(r)?,
35574                read_write: VecM::<LedgerKey>::read_xdr(r)?,
35575            })
35576        })
35577    }
35578}
35579
35580impl WriteXdr for LedgerFootprint {
35581    #[cfg(feature = "std")]
35582    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35583        w.with_limited_depth(|w| {
35584            self.read_only.write_xdr(w)?;
35585            self.read_write.write_xdr(w)?;
35586            Ok(())
35587        })
35588    }
35589}
35590
35591/// SorobanResources is an XDR Struct defines as:
35592///
35593/// ```text
35594/// struct SorobanResources
35595/// {   
35596///     // The ledger footprint of the transaction.
35597///     LedgerFootprint footprint;
35598///     // The maximum number of instructions this transaction can use
35599///     uint32 instructions;
35600///
35601///     // The maximum number of bytes this transaction can read from disk backed entries
35602///     uint32 diskReadBytes;
35603///     // The maximum number of bytes this transaction can write to ledger
35604///     uint32 writeBytes;
35605/// };
35606/// ```
35607///
35608#[cfg_attr(feature = "alloc", derive(Default))]
35609#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35610#[cfg_eval::cfg_eval]
35611#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
35612#[cfg_attr(
35613    all(feature = "serde", feature = "alloc"),
35614    serde_with::serde_as,
35615    derive(serde::Serialize, serde::Deserialize),
35616    serde(rename_all = "snake_case")
35617)]
35618#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
35619pub struct SorobanResources {
35620    pub footprint: LedgerFootprint,
35621    pub instructions: u32,
35622    pub disk_read_bytes: u32,
35623    pub write_bytes: u32,
35624}
35625
35626impl ReadXdr for SorobanResources {
35627    #[cfg(feature = "std")]
35628    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35629        r.with_limited_depth(|r| {
35630            Ok(Self {
35631                footprint: LedgerFootprint::read_xdr(r)?,
35632                instructions: u32::read_xdr(r)?,
35633                disk_read_bytes: u32::read_xdr(r)?,
35634                write_bytes: u32::read_xdr(r)?,
35635            })
35636        })
35637    }
35638}
35639
35640impl WriteXdr for SorobanResources {
35641    #[cfg(feature = "std")]
35642    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35643        w.with_limited_depth(|w| {
35644            self.footprint.write_xdr(w)?;
35645            self.instructions.write_xdr(w)?;
35646            self.disk_read_bytes.write_xdr(w)?;
35647            self.write_bytes.write_xdr(w)?;
35648            Ok(())
35649        })
35650    }
35651}
35652
35653/// SorobanResourcesExtV0 is an XDR Struct defines as:
35654///
35655/// ```text
35656/// struct SorobanResourcesExtV0
35657/// {
35658///     // Vector of indices representing what Soroban
35659///     // entries in the footprint are archived, based on the
35660///     // order of keys provided in the readWrite footprint.
35661///     uint32 archivedSorobanEntries<>;
35662/// };
35663/// ```
35664///
35665#[cfg_attr(feature = "alloc", derive(Default))]
35666#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35667#[cfg_eval::cfg_eval]
35668#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
35669#[cfg_attr(
35670    all(feature = "serde", feature = "alloc"),
35671    serde_with::serde_as,
35672    derive(serde::Serialize, serde::Deserialize),
35673    serde(rename_all = "snake_case")
35674)]
35675#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
35676pub struct SorobanResourcesExtV0 {
35677    pub archived_soroban_entries: VecM<u32>,
35678}
35679
35680impl ReadXdr for SorobanResourcesExtV0 {
35681    #[cfg(feature = "std")]
35682    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35683        r.with_limited_depth(|r| {
35684            Ok(Self {
35685                archived_soroban_entries: VecM::<u32>::read_xdr(r)?,
35686            })
35687        })
35688    }
35689}
35690
35691impl WriteXdr for SorobanResourcesExtV0 {
35692    #[cfg(feature = "std")]
35693    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35694        w.with_limited_depth(|w| {
35695            self.archived_soroban_entries.write_xdr(w)?;
35696            Ok(())
35697        })
35698    }
35699}
35700
35701/// SorobanTransactionDataExt is an XDR NestedUnion defines as:
35702///
35703/// ```text
35704/// union switch (int v)
35705///     {
35706///     case 0:
35707///         void;
35708///     case 1:
35709///         SorobanResourcesExtV0 resourceExt;
35710///     }
35711/// ```
35712///
35713// union with discriminant i32
35714#[cfg_eval::cfg_eval]
35715#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35716#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
35717#[cfg_attr(
35718    all(feature = "serde", feature = "alloc"),
35719    serde_with::serde_as,
35720    derive(serde::Serialize, serde::Deserialize),
35721    serde(rename_all = "snake_case")
35722)]
35723#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
35724#[allow(clippy::large_enum_variant)]
35725pub enum SorobanTransactionDataExt {
35726    V0,
35727    V1(SorobanResourcesExtV0),
35728}
35729
35730#[cfg(feature = "alloc")]
35731impl Default for SorobanTransactionDataExt {
35732    fn default() -> Self {
35733        Self::V0
35734    }
35735}
35736
35737impl SorobanTransactionDataExt {
35738    pub const VARIANTS: [i32; 2] = [0, 1];
35739    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
35740
35741    #[must_use]
35742    pub const fn name(&self) -> &'static str {
35743        match self {
35744            Self::V0 => "V0",
35745            Self::V1(_) => "V1",
35746        }
35747    }
35748
35749    #[must_use]
35750    pub const fn discriminant(&self) -> i32 {
35751        #[allow(clippy::match_same_arms)]
35752        match self {
35753            Self::V0 => 0,
35754            Self::V1(_) => 1,
35755        }
35756    }
35757
35758    #[must_use]
35759    pub const fn variants() -> [i32; 2] {
35760        Self::VARIANTS
35761    }
35762}
35763
35764impl Name for SorobanTransactionDataExt {
35765    #[must_use]
35766    fn name(&self) -> &'static str {
35767        Self::name(self)
35768    }
35769}
35770
35771impl Discriminant<i32> for SorobanTransactionDataExt {
35772    #[must_use]
35773    fn discriminant(&self) -> i32 {
35774        Self::discriminant(self)
35775    }
35776}
35777
35778impl Variants<i32> for SorobanTransactionDataExt {
35779    fn variants() -> slice::Iter<'static, i32> {
35780        Self::VARIANTS.iter()
35781    }
35782}
35783
35784impl Union<i32> for SorobanTransactionDataExt {}
35785
35786impl ReadXdr for SorobanTransactionDataExt {
35787    #[cfg(feature = "std")]
35788    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35789        r.with_limited_depth(|r| {
35790            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
35791            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
35792            let v = match dv {
35793                0 => Self::V0,
35794                1 => Self::V1(SorobanResourcesExtV0::read_xdr(r)?),
35795                #[allow(unreachable_patterns)]
35796                _ => return Err(Error::Invalid),
35797            };
35798            Ok(v)
35799        })
35800    }
35801}
35802
35803impl WriteXdr for SorobanTransactionDataExt {
35804    #[cfg(feature = "std")]
35805    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35806        w.with_limited_depth(|w| {
35807            self.discriminant().write_xdr(w)?;
35808            #[allow(clippy::match_same_arms)]
35809            match self {
35810                Self::V0 => ().write_xdr(w)?,
35811                Self::V1(v) => v.write_xdr(w)?,
35812            };
35813            Ok(())
35814        })
35815    }
35816}
35817
35818/// SorobanTransactionData is an XDR Struct defines as:
35819///
35820/// ```text
35821/// struct SorobanTransactionData
35822/// {
35823///     union switch (int v)
35824///     {
35825///     case 0:
35826///         void;
35827///     case 1:
35828///         SorobanResourcesExtV0 resourceExt;
35829///     } ext;
35830///     SorobanResources resources;
35831///     // Amount of the transaction `fee` allocated to the Soroban resource fees.
35832///     // The fraction of `resourceFee` corresponding to `resources` specified
35833///     // above is *not* refundable (i.e. fees for instructions, ledger I/O), as
35834///     // well as fees for the transaction size.
35835///     // The remaining part of the fee is refundable and the charged value is
35836///     // based on the actual consumption of refundable resources (events, ledger
35837///     // rent bumps).
35838///     // The `inclusionFee` used for prioritization of the transaction is defined
35839///     // as `tx.fee - resourceFee`.
35840///     int64 resourceFee;
35841/// };
35842/// ```
35843///
35844#[cfg_attr(feature = "alloc", derive(Default))]
35845#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35846#[cfg_eval::cfg_eval]
35847#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
35848#[cfg_attr(
35849    all(feature = "serde", feature = "alloc"),
35850    serde_with::serde_as,
35851    derive(serde::Serialize, serde::Deserialize),
35852    serde(rename_all = "snake_case")
35853)]
35854#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
35855pub struct SorobanTransactionData {
35856    pub ext: SorobanTransactionDataExt,
35857    pub resources: SorobanResources,
35858    #[cfg_attr(
35859        all(feature = "serde", feature = "alloc"),
35860        serde_as(as = "NumberOrString")
35861    )]
35862    pub resource_fee: i64,
35863}
35864
35865impl ReadXdr for SorobanTransactionData {
35866    #[cfg(feature = "std")]
35867    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35868        r.with_limited_depth(|r| {
35869            Ok(Self {
35870                ext: SorobanTransactionDataExt::read_xdr(r)?,
35871                resources: SorobanResources::read_xdr(r)?,
35872                resource_fee: i64::read_xdr(r)?,
35873            })
35874        })
35875    }
35876}
35877
35878impl WriteXdr for SorobanTransactionData {
35879    #[cfg(feature = "std")]
35880    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35881        w.with_limited_depth(|w| {
35882            self.ext.write_xdr(w)?;
35883            self.resources.write_xdr(w)?;
35884            self.resource_fee.write_xdr(w)?;
35885            Ok(())
35886        })
35887    }
35888}
35889
35890/// TransactionV0Ext is an XDR NestedUnion defines as:
35891///
35892/// ```text
35893/// union switch (int v)
35894///     {
35895///     case 0:
35896///         void;
35897///     }
35898/// ```
35899///
35900// union with discriminant i32
35901#[cfg_eval::cfg_eval]
35902#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
35903#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
35904#[cfg_attr(
35905    all(feature = "serde", feature = "alloc"),
35906    serde_with::serde_as,
35907    derive(serde::Serialize, serde::Deserialize),
35908    serde(rename_all = "snake_case")
35909)]
35910#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
35911#[allow(clippy::large_enum_variant)]
35912pub enum TransactionV0Ext {
35913    V0,
35914}
35915
35916#[cfg(feature = "alloc")]
35917impl Default for TransactionV0Ext {
35918    fn default() -> Self {
35919        Self::V0
35920    }
35921}
35922
35923impl TransactionV0Ext {
35924    pub const VARIANTS: [i32; 1] = [0];
35925    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
35926
35927    #[must_use]
35928    pub const fn name(&self) -> &'static str {
35929        match self {
35930            Self::V0 => "V0",
35931        }
35932    }
35933
35934    #[must_use]
35935    pub const fn discriminant(&self) -> i32 {
35936        #[allow(clippy::match_same_arms)]
35937        match self {
35938            Self::V0 => 0,
35939        }
35940    }
35941
35942    #[must_use]
35943    pub const fn variants() -> [i32; 1] {
35944        Self::VARIANTS
35945    }
35946}
35947
35948impl Name for TransactionV0Ext {
35949    #[must_use]
35950    fn name(&self) -> &'static str {
35951        Self::name(self)
35952    }
35953}
35954
35955impl Discriminant<i32> for TransactionV0Ext {
35956    #[must_use]
35957    fn discriminant(&self) -> i32 {
35958        Self::discriminant(self)
35959    }
35960}
35961
35962impl Variants<i32> for TransactionV0Ext {
35963    fn variants() -> slice::Iter<'static, i32> {
35964        Self::VARIANTS.iter()
35965    }
35966}
35967
35968impl Union<i32> for TransactionV0Ext {}
35969
35970impl ReadXdr for TransactionV0Ext {
35971    #[cfg(feature = "std")]
35972    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
35973        r.with_limited_depth(|r| {
35974            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
35975            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
35976            let v = match dv {
35977                0 => Self::V0,
35978                #[allow(unreachable_patterns)]
35979                _ => return Err(Error::Invalid),
35980            };
35981            Ok(v)
35982        })
35983    }
35984}
35985
35986impl WriteXdr for TransactionV0Ext {
35987    #[cfg(feature = "std")]
35988    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
35989        w.with_limited_depth(|w| {
35990            self.discriminant().write_xdr(w)?;
35991            #[allow(clippy::match_same_arms)]
35992            match self {
35993                Self::V0 => ().write_xdr(w)?,
35994            };
35995            Ok(())
35996        })
35997    }
35998}
35999
36000/// TransactionV0 is an XDR Struct defines as:
36001///
36002/// ```text
36003/// struct TransactionV0
36004/// {
36005///     uint256 sourceAccountEd25519;
36006///     uint32 fee;
36007///     SequenceNumber seqNum;
36008///     TimeBounds* timeBounds;
36009///     Memo memo;
36010///     Operation operations<MAX_OPS_PER_TX>;
36011///     union switch (int v)
36012///     {
36013///     case 0:
36014///         void;
36015///     }
36016///     ext;
36017/// };
36018/// ```
36019///
36020#[cfg_attr(feature = "alloc", derive(Default))]
36021#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36022#[cfg_eval::cfg_eval]
36023#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36024#[cfg_attr(
36025    all(feature = "serde", feature = "alloc"),
36026    serde_with::serde_as,
36027    derive(serde::Serialize, serde::Deserialize),
36028    serde(rename_all = "snake_case")
36029)]
36030#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36031pub struct TransactionV0 {
36032    pub source_account_ed25519: Uint256,
36033    pub fee: u32,
36034    pub seq_num: SequenceNumber,
36035    pub time_bounds: Option<TimeBounds>,
36036    pub memo: Memo,
36037    pub operations: VecM<Operation, 100>,
36038    pub ext: TransactionV0Ext,
36039}
36040
36041impl ReadXdr for TransactionV0 {
36042    #[cfg(feature = "std")]
36043    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36044        r.with_limited_depth(|r| {
36045            Ok(Self {
36046                source_account_ed25519: Uint256::read_xdr(r)?,
36047                fee: u32::read_xdr(r)?,
36048                seq_num: SequenceNumber::read_xdr(r)?,
36049                time_bounds: Option::<TimeBounds>::read_xdr(r)?,
36050                memo: Memo::read_xdr(r)?,
36051                operations: VecM::<Operation, 100>::read_xdr(r)?,
36052                ext: TransactionV0Ext::read_xdr(r)?,
36053            })
36054        })
36055    }
36056}
36057
36058impl WriteXdr for TransactionV0 {
36059    #[cfg(feature = "std")]
36060    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
36061        w.with_limited_depth(|w| {
36062            self.source_account_ed25519.write_xdr(w)?;
36063            self.fee.write_xdr(w)?;
36064            self.seq_num.write_xdr(w)?;
36065            self.time_bounds.write_xdr(w)?;
36066            self.memo.write_xdr(w)?;
36067            self.operations.write_xdr(w)?;
36068            self.ext.write_xdr(w)?;
36069            Ok(())
36070        })
36071    }
36072}
36073
36074/// TransactionV0Envelope is an XDR Struct defines as:
36075///
36076/// ```text
36077/// struct TransactionV0Envelope
36078/// {
36079///     TransactionV0 tx;
36080///     /* Each decorated signature is a signature over the SHA256 hash of
36081///      * a TransactionSignaturePayload */
36082///     DecoratedSignature signatures<20>;
36083/// };
36084/// ```
36085///
36086#[cfg_attr(feature = "alloc", derive(Default))]
36087#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36088#[cfg_eval::cfg_eval]
36089#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36090#[cfg_attr(
36091    all(feature = "serde", feature = "alloc"),
36092    serde_with::serde_as,
36093    derive(serde::Serialize, serde::Deserialize),
36094    serde(rename_all = "snake_case")
36095)]
36096#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36097pub struct TransactionV0Envelope {
36098    pub tx: TransactionV0,
36099    pub signatures: VecM<DecoratedSignature, 20>,
36100}
36101
36102impl ReadXdr for TransactionV0Envelope {
36103    #[cfg(feature = "std")]
36104    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36105        r.with_limited_depth(|r| {
36106            Ok(Self {
36107                tx: TransactionV0::read_xdr(r)?,
36108                signatures: VecM::<DecoratedSignature, 20>::read_xdr(r)?,
36109            })
36110        })
36111    }
36112}
36113
36114impl WriteXdr for TransactionV0Envelope {
36115    #[cfg(feature = "std")]
36116    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
36117        w.with_limited_depth(|w| {
36118            self.tx.write_xdr(w)?;
36119            self.signatures.write_xdr(w)?;
36120            Ok(())
36121        })
36122    }
36123}
36124
36125/// TransactionExt is an XDR NestedUnion defines as:
36126///
36127/// ```text
36128/// union switch (int v)
36129///     {
36130///     case 0:
36131///         void;
36132///     case 1:
36133///         SorobanTransactionData sorobanData;
36134///     }
36135/// ```
36136///
36137// union with discriminant i32
36138#[cfg_eval::cfg_eval]
36139#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36140#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36141#[cfg_attr(
36142    all(feature = "serde", feature = "alloc"),
36143    serde_with::serde_as,
36144    derive(serde::Serialize, serde::Deserialize),
36145    serde(rename_all = "snake_case")
36146)]
36147#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36148#[allow(clippy::large_enum_variant)]
36149pub enum TransactionExt {
36150    V0,
36151    V1(SorobanTransactionData),
36152}
36153
36154#[cfg(feature = "alloc")]
36155impl Default for TransactionExt {
36156    fn default() -> Self {
36157        Self::V0
36158    }
36159}
36160
36161impl TransactionExt {
36162    pub const VARIANTS: [i32; 2] = [0, 1];
36163    pub const VARIANTS_STR: [&'static str; 2] = ["V0", "V1"];
36164
36165    #[must_use]
36166    pub const fn name(&self) -> &'static str {
36167        match self {
36168            Self::V0 => "V0",
36169            Self::V1(_) => "V1",
36170        }
36171    }
36172
36173    #[must_use]
36174    pub const fn discriminant(&self) -> i32 {
36175        #[allow(clippy::match_same_arms)]
36176        match self {
36177            Self::V0 => 0,
36178            Self::V1(_) => 1,
36179        }
36180    }
36181
36182    #[must_use]
36183    pub const fn variants() -> [i32; 2] {
36184        Self::VARIANTS
36185    }
36186}
36187
36188impl Name for TransactionExt {
36189    #[must_use]
36190    fn name(&self) -> &'static str {
36191        Self::name(self)
36192    }
36193}
36194
36195impl Discriminant<i32> for TransactionExt {
36196    #[must_use]
36197    fn discriminant(&self) -> i32 {
36198        Self::discriminant(self)
36199    }
36200}
36201
36202impl Variants<i32> for TransactionExt {
36203    fn variants() -> slice::Iter<'static, i32> {
36204        Self::VARIANTS.iter()
36205    }
36206}
36207
36208impl Union<i32> for TransactionExt {}
36209
36210impl ReadXdr for TransactionExt {
36211    #[cfg(feature = "std")]
36212    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36213        r.with_limited_depth(|r| {
36214            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
36215            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
36216            let v = match dv {
36217                0 => Self::V0,
36218                1 => Self::V1(SorobanTransactionData::read_xdr(r)?),
36219                #[allow(unreachable_patterns)]
36220                _ => return Err(Error::Invalid),
36221            };
36222            Ok(v)
36223        })
36224    }
36225}
36226
36227impl WriteXdr for TransactionExt {
36228    #[cfg(feature = "std")]
36229    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
36230        w.with_limited_depth(|w| {
36231            self.discriminant().write_xdr(w)?;
36232            #[allow(clippy::match_same_arms)]
36233            match self {
36234                Self::V0 => ().write_xdr(w)?,
36235                Self::V1(v) => v.write_xdr(w)?,
36236            };
36237            Ok(())
36238        })
36239    }
36240}
36241
36242/// Transaction is an XDR Struct defines as:
36243///
36244/// ```text
36245/// struct Transaction
36246/// {
36247///     // account used to run the transaction
36248///     MuxedAccount sourceAccount;
36249///
36250///     // the fee the sourceAccount will pay
36251///     uint32 fee;
36252///
36253///     // sequence number to consume in the account
36254///     SequenceNumber seqNum;
36255///
36256///     // validity conditions
36257///     Preconditions cond;
36258///
36259///     Memo memo;
36260///
36261///     Operation operations<MAX_OPS_PER_TX>;
36262///
36263///     union switch (int v)
36264///     {
36265///     case 0:
36266///         void;
36267///     case 1:
36268///         SorobanTransactionData sorobanData;
36269///     }
36270///     ext;
36271/// };
36272/// ```
36273///
36274#[cfg_attr(feature = "alloc", derive(Default))]
36275#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36276#[cfg_eval::cfg_eval]
36277#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36278#[cfg_attr(
36279    all(feature = "serde", feature = "alloc"),
36280    serde_with::serde_as,
36281    derive(serde::Serialize, serde::Deserialize),
36282    serde(rename_all = "snake_case")
36283)]
36284#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36285pub struct Transaction {
36286    pub source_account: MuxedAccount,
36287    pub fee: u32,
36288    pub seq_num: SequenceNumber,
36289    pub cond: Preconditions,
36290    pub memo: Memo,
36291    pub operations: VecM<Operation, 100>,
36292    pub ext: TransactionExt,
36293}
36294
36295impl ReadXdr for Transaction {
36296    #[cfg(feature = "std")]
36297    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36298        r.with_limited_depth(|r| {
36299            Ok(Self {
36300                source_account: MuxedAccount::read_xdr(r)?,
36301                fee: u32::read_xdr(r)?,
36302                seq_num: SequenceNumber::read_xdr(r)?,
36303                cond: Preconditions::read_xdr(r)?,
36304                memo: Memo::read_xdr(r)?,
36305                operations: VecM::<Operation, 100>::read_xdr(r)?,
36306                ext: TransactionExt::read_xdr(r)?,
36307            })
36308        })
36309    }
36310}
36311
36312impl WriteXdr for Transaction {
36313    #[cfg(feature = "std")]
36314    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
36315        w.with_limited_depth(|w| {
36316            self.source_account.write_xdr(w)?;
36317            self.fee.write_xdr(w)?;
36318            self.seq_num.write_xdr(w)?;
36319            self.cond.write_xdr(w)?;
36320            self.memo.write_xdr(w)?;
36321            self.operations.write_xdr(w)?;
36322            self.ext.write_xdr(w)?;
36323            Ok(())
36324        })
36325    }
36326}
36327
36328/// TransactionV1Envelope is an XDR Struct defines as:
36329///
36330/// ```text
36331/// struct TransactionV1Envelope
36332/// {
36333///     Transaction tx;
36334///     /* Each decorated signature is a signature over the SHA256 hash of
36335///      * a TransactionSignaturePayload */
36336///     DecoratedSignature signatures<20>;
36337/// };
36338/// ```
36339///
36340#[cfg_attr(feature = "alloc", derive(Default))]
36341#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36342#[cfg_eval::cfg_eval]
36343#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36344#[cfg_attr(
36345    all(feature = "serde", feature = "alloc"),
36346    serde_with::serde_as,
36347    derive(serde::Serialize, serde::Deserialize),
36348    serde(rename_all = "snake_case")
36349)]
36350#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36351pub struct TransactionV1Envelope {
36352    pub tx: Transaction,
36353    pub signatures: VecM<DecoratedSignature, 20>,
36354}
36355
36356impl ReadXdr for TransactionV1Envelope {
36357    #[cfg(feature = "std")]
36358    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36359        r.with_limited_depth(|r| {
36360            Ok(Self {
36361                tx: Transaction::read_xdr(r)?,
36362                signatures: VecM::<DecoratedSignature, 20>::read_xdr(r)?,
36363            })
36364        })
36365    }
36366}
36367
36368impl WriteXdr for TransactionV1Envelope {
36369    #[cfg(feature = "std")]
36370    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
36371        w.with_limited_depth(|w| {
36372            self.tx.write_xdr(w)?;
36373            self.signatures.write_xdr(w)?;
36374            Ok(())
36375        })
36376    }
36377}
36378
36379/// FeeBumpTransactionInnerTx is an XDR NestedUnion defines as:
36380///
36381/// ```text
36382/// union switch (EnvelopeType type)
36383///     {
36384///     case ENVELOPE_TYPE_TX:
36385///         TransactionV1Envelope v1;
36386///     }
36387/// ```
36388///
36389// union with discriminant EnvelopeType
36390#[cfg_eval::cfg_eval]
36391#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36392#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36393#[cfg_attr(
36394    all(feature = "serde", feature = "alloc"),
36395    serde_with::serde_as,
36396    derive(serde::Serialize, serde::Deserialize),
36397    serde(rename_all = "snake_case")
36398)]
36399#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36400#[allow(clippy::large_enum_variant)]
36401pub enum FeeBumpTransactionInnerTx {
36402    Tx(TransactionV1Envelope),
36403}
36404
36405#[cfg(feature = "alloc")]
36406impl Default for FeeBumpTransactionInnerTx {
36407    fn default() -> Self {
36408        Self::Tx(TransactionV1Envelope::default())
36409    }
36410}
36411
36412impl FeeBumpTransactionInnerTx {
36413    pub const VARIANTS: [EnvelopeType; 1] = [EnvelopeType::Tx];
36414    pub const VARIANTS_STR: [&'static str; 1] = ["Tx"];
36415
36416    #[must_use]
36417    pub const fn name(&self) -> &'static str {
36418        match self {
36419            Self::Tx(_) => "Tx",
36420        }
36421    }
36422
36423    #[must_use]
36424    pub const fn discriminant(&self) -> EnvelopeType {
36425        #[allow(clippy::match_same_arms)]
36426        match self {
36427            Self::Tx(_) => EnvelopeType::Tx,
36428        }
36429    }
36430
36431    #[must_use]
36432    pub const fn variants() -> [EnvelopeType; 1] {
36433        Self::VARIANTS
36434    }
36435}
36436
36437impl Name for FeeBumpTransactionInnerTx {
36438    #[must_use]
36439    fn name(&self) -> &'static str {
36440        Self::name(self)
36441    }
36442}
36443
36444impl Discriminant<EnvelopeType> for FeeBumpTransactionInnerTx {
36445    #[must_use]
36446    fn discriminant(&self) -> EnvelopeType {
36447        Self::discriminant(self)
36448    }
36449}
36450
36451impl Variants<EnvelopeType> for FeeBumpTransactionInnerTx {
36452    fn variants() -> slice::Iter<'static, EnvelopeType> {
36453        Self::VARIANTS.iter()
36454    }
36455}
36456
36457impl Union<EnvelopeType> for FeeBumpTransactionInnerTx {}
36458
36459impl ReadXdr for FeeBumpTransactionInnerTx {
36460    #[cfg(feature = "std")]
36461    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36462        r.with_limited_depth(|r| {
36463            let dv: EnvelopeType = <EnvelopeType as ReadXdr>::read_xdr(r)?;
36464            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
36465            let v = match dv {
36466                EnvelopeType::Tx => Self::Tx(TransactionV1Envelope::read_xdr(r)?),
36467                #[allow(unreachable_patterns)]
36468                _ => return Err(Error::Invalid),
36469            };
36470            Ok(v)
36471        })
36472    }
36473}
36474
36475impl WriteXdr for FeeBumpTransactionInnerTx {
36476    #[cfg(feature = "std")]
36477    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
36478        w.with_limited_depth(|w| {
36479            self.discriminant().write_xdr(w)?;
36480            #[allow(clippy::match_same_arms)]
36481            match self {
36482                Self::Tx(v) => v.write_xdr(w)?,
36483            };
36484            Ok(())
36485        })
36486    }
36487}
36488
36489/// FeeBumpTransactionExt is an XDR NestedUnion defines as:
36490///
36491/// ```text
36492/// union switch (int v)
36493///     {
36494///     case 0:
36495///         void;
36496///     }
36497/// ```
36498///
36499// union with discriminant i32
36500#[cfg_eval::cfg_eval]
36501#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36502#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36503#[cfg_attr(
36504    all(feature = "serde", feature = "alloc"),
36505    serde_with::serde_as,
36506    derive(serde::Serialize, serde::Deserialize),
36507    serde(rename_all = "snake_case")
36508)]
36509#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36510#[allow(clippy::large_enum_variant)]
36511pub enum FeeBumpTransactionExt {
36512    V0,
36513}
36514
36515#[cfg(feature = "alloc")]
36516impl Default for FeeBumpTransactionExt {
36517    fn default() -> Self {
36518        Self::V0
36519    }
36520}
36521
36522impl FeeBumpTransactionExt {
36523    pub const VARIANTS: [i32; 1] = [0];
36524    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
36525
36526    #[must_use]
36527    pub const fn name(&self) -> &'static str {
36528        match self {
36529            Self::V0 => "V0",
36530        }
36531    }
36532
36533    #[must_use]
36534    pub const fn discriminant(&self) -> i32 {
36535        #[allow(clippy::match_same_arms)]
36536        match self {
36537            Self::V0 => 0,
36538        }
36539    }
36540
36541    #[must_use]
36542    pub const fn variants() -> [i32; 1] {
36543        Self::VARIANTS
36544    }
36545}
36546
36547impl Name for FeeBumpTransactionExt {
36548    #[must_use]
36549    fn name(&self) -> &'static str {
36550        Self::name(self)
36551    }
36552}
36553
36554impl Discriminant<i32> for FeeBumpTransactionExt {
36555    #[must_use]
36556    fn discriminant(&self) -> i32 {
36557        Self::discriminant(self)
36558    }
36559}
36560
36561impl Variants<i32> for FeeBumpTransactionExt {
36562    fn variants() -> slice::Iter<'static, i32> {
36563        Self::VARIANTS.iter()
36564    }
36565}
36566
36567impl Union<i32> for FeeBumpTransactionExt {}
36568
36569impl ReadXdr for FeeBumpTransactionExt {
36570    #[cfg(feature = "std")]
36571    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36572        r.with_limited_depth(|r| {
36573            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
36574            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
36575            let v = match dv {
36576                0 => Self::V0,
36577                #[allow(unreachable_patterns)]
36578                _ => return Err(Error::Invalid),
36579            };
36580            Ok(v)
36581        })
36582    }
36583}
36584
36585impl WriteXdr for FeeBumpTransactionExt {
36586    #[cfg(feature = "std")]
36587    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
36588        w.with_limited_depth(|w| {
36589            self.discriminant().write_xdr(w)?;
36590            #[allow(clippy::match_same_arms)]
36591            match self {
36592                Self::V0 => ().write_xdr(w)?,
36593            };
36594            Ok(())
36595        })
36596    }
36597}
36598
36599/// FeeBumpTransaction is an XDR Struct defines as:
36600///
36601/// ```text
36602/// struct FeeBumpTransaction
36603/// {
36604///     MuxedAccount feeSource;
36605///     int64 fee;
36606///     union switch (EnvelopeType type)
36607///     {
36608///     case ENVELOPE_TYPE_TX:
36609///         TransactionV1Envelope v1;
36610///     }
36611///     innerTx;
36612///     union switch (int v)
36613///     {
36614///     case 0:
36615///         void;
36616///     }
36617///     ext;
36618/// };
36619/// ```
36620///
36621#[cfg_attr(feature = "alloc", derive(Default))]
36622#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36623#[cfg_eval::cfg_eval]
36624#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36625#[cfg_attr(
36626    all(feature = "serde", feature = "alloc"),
36627    serde_with::serde_as,
36628    derive(serde::Serialize, serde::Deserialize),
36629    serde(rename_all = "snake_case")
36630)]
36631#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36632pub struct FeeBumpTransaction {
36633    pub fee_source: MuxedAccount,
36634    #[cfg_attr(
36635        all(feature = "serde", feature = "alloc"),
36636        serde_as(as = "NumberOrString")
36637    )]
36638    pub fee: i64,
36639    pub inner_tx: FeeBumpTransactionInnerTx,
36640    pub ext: FeeBumpTransactionExt,
36641}
36642
36643impl ReadXdr for FeeBumpTransaction {
36644    #[cfg(feature = "std")]
36645    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36646        r.with_limited_depth(|r| {
36647            Ok(Self {
36648                fee_source: MuxedAccount::read_xdr(r)?,
36649                fee: i64::read_xdr(r)?,
36650                inner_tx: FeeBumpTransactionInnerTx::read_xdr(r)?,
36651                ext: FeeBumpTransactionExt::read_xdr(r)?,
36652            })
36653        })
36654    }
36655}
36656
36657impl WriteXdr for FeeBumpTransaction {
36658    #[cfg(feature = "std")]
36659    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
36660        w.with_limited_depth(|w| {
36661            self.fee_source.write_xdr(w)?;
36662            self.fee.write_xdr(w)?;
36663            self.inner_tx.write_xdr(w)?;
36664            self.ext.write_xdr(w)?;
36665            Ok(())
36666        })
36667    }
36668}
36669
36670/// FeeBumpTransactionEnvelope is an XDR Struct defines as:
36671///
36672/// ```text
36673/// struct FeeBumpTransactionEnvelope
36674/// {
36675///     FeeBumpTransaction tx;
36676///     /* Each decorated signature is a signature over the SHA256 hash of
36677///      * a TransactionSignaturePayload */
36678///     DecoratedSignature signatures<20>;
36679/// };
36680/// ```
36681///
36682#[cfg_attr(feature = "alloc", derive(Default))]
36683#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36684#[cfg_eval::cfg_eval]
36685#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36686#[cfg_attr(
36687    all(feature = "serde", feature = "alloc"),
36688    serde_with::serde_as,
36689    derive(serde::Serialize, serde::Deserialize),
36690    serde(rename_all = "snake_case")
36691)]
36692#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36693pub struct FeeBumpTransactionEnvelope {
36694    pub tx: FeeBumpTransaction,
36695    pub signatures: VecM<DecoratedSignature, 20>,
36696}
36697
36698impl ReadXdr for FeeBumpTransactionEnvelope {
36699    #[cfg(feature = "std")]
36700    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36701        r.with_limited_depth(|r| {
36702            Ok(Self {
36703                tx: FeeBumpTransaction::read_xdr(r)?,
36704                signatures: VecM::<DecoratedSignature, 20>::read_xdr(r)?,
36705            })
36706        })
36707    }
36708}
36709
36710impl WriteXdr for FeeBumpTransactionEnvelope {
36711    #[cfg(feature = "std")]
36712    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
36713        w.with_limited_depth(|w| {
36714            self.tx.write_xdr(w)?;
36715            self.signatures.write_xdr(w)?;
36716            Ok(())
36717        })
36718    }
36719}
36720
36721/// TransactionEnvelope is an XDR Union defines as:
36722///
36723/// ```text
36724/// union TransactionEnvelope switch (EnvelopeType type)
36725/// {
36726/// case ENVELOPE_TYPE_TX_V0:
36727///     TransactionV0Envelope v0;
36728/// case ENVELOPE_TYPE_TX:
36729///     TransactionV1Envelope v1;
36730/// case ENVELOPE_TYPE_TX_FEE_BUMP:
36731///     FeeBumpTransactionEnvelope feeBump;
36732/// };
36733/// ```
36734///
36735// union with discriminant EnvelopeType
36736#[cfg_eval::cfg_eval]
36737#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36738#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36739#[cfg_attr(
36740    all(feature = "serde", feature = "alloc"),
36741    serde_with::serde_as,
36742    derive(serde::Serialize, serde::Deserialize),
36743    serde(rename_all = "snake_case")
36744)]
36745#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36746#[allow(clippy::large_enum_variant)]
36747pub enum TransactionEnvelope {
36748    TxV0(TransactionV0Envelope),
36749    Tx(TransactionV1Envelope),
36750    TxFeeBump(FeeBumpTransactionEnvelope),
36751}
36752
36753impl TransactionEnvelope {
36754    pub const VARIANTS: [EnvelopeType; 3] = [
36755        EnvelopeType::TxV0,
36756        EnvelopeType::Tx,
36757        EnvelopeType::TxFeeBump,
36758    ];
36759    pub const VARIANTS_STR: [&'static str; 3] = ["TxV0", "Tx", "TxFeeBump"];
36760
36761    #[must_use]
36762    pub const fn name(&self) -> &'static str {
36763        match self {
36764            Self::TxV0(_) => "TxV0",
36765            Self::Tx(_) => "Tx",
36766            Self::TxFeeBump(_) => "TxFeeBump",
36767        }
36768    }
36769
36770    #[must_use]
36771    pub const fn discriminant(&self) -> EnvelopeType {
36772        #[allow(clippy::match_same_arms)]
36773        match self {
36774            Self::TxV0(_) => EnvelopeType::TxV0,
36775            Self::Tx(_) => EnvelopeType::Tx,
36776            Self::TxFeeBump(_) => EnvelopeType::TxFeeBump,
36777        }
36778    }
36779
36780    #[must_use]
36781    pub const fn variants() -> [EnvelopeType; 3] {
36782        Self::VARIANTS
36783    }
36784}
36785
36786impl Name for TransactionEnvelope {
36787    #[must_use]
36788    fn name(&self) -> &'static str {
36789        Self::name(self)
36790    }
36791}
36792
36793impl Discriminant<EnvelopeType> for TransactionEnvelope {
36794    #[must_use]
36795    fn discriminant(&self) -> EnvelopeType {
36796        Self::discriminant(self)
36797    }
36798}
36799
36800impl Variants<EnvelopeType> for TransactionEnvelope {
36801    fn variants() -> slice::Iter<'static, EnvelopeType> {
36802        Self::VARIANTS.iter()
36803    }
36804}
36805
36806impl Union<EnvelopeType> for TransactionEnvelope {}
36807
36808impl ReadXdr for TransactionEnvelope {
36809    #[cfg(feature = "std")]
36810    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36811        r.with_limited_depth(|r| {
36812            let dv: EnvelopeType = <EnvelopeType as ReadXdr>::read_xdr(r)?;
36813            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
36814            let v = match dv {
36815                EnvelopeType::TxV0 => Self::TxV0(TransactionV0Envelope::read_xdr(r)?),
36816                EnvelopeType::Tx => Self::Tx(TransactionV1Envelope::read_xdr(r)?),
36817                EnvelopeType::TxFeeBump => {
36818                    Self::TxFeeBump(FeeBumpTransactionEnvelope::read_xdr(r)?)
36819                }
36820                #[allow(unreachable_patterns)]
36821                _ => return Err(Error::Invalid),
36822            };
36823            Ok(v)
36824        })
36825    }
36826}
36827
36828impl WriteXdr for TransactionEnvelope {
36829    #[cfg(feature = "std")]
36830    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
36831        w.with_limited_depth(|w| {
36832            self.discriminant().write_xdr(w)?;
36833            #[allow(clippy::match_same_arms)]
36834            match self {
36835                Self::TxV0(v) => v.write_xdr(w)?,
36836                Self::Tx(v) => v.write_xdr(w)?,
36837                Self::TxFeeBump(v) => v.write_xdr(w)?,
36838            };
36839            Ok(())
36840        })
36841    }
36842}
36843
36844/// TransactionSignaturePayloadTaggedTransaction is an XDR NestedUnion defines as:
36845///
36846/// ```text
36847/// union switch (EnvelopeType type)
36848///     {
36849///     // Backwards Compatibility: Use ENVELOPE_TYPE_TX to sign ENVELOPE_TYPE_TX_V0
36850///     case ENVELOPE_TYPE_TX:
36851///         Transaction tx;
36852///     case ENVELOPE_TYPE_TX_FEE_BUMP:
36853///         FeeBumpTransaction feeBump;
36854///     }
36855/// ```
36856///
36857// union with discriminant EnvelopeType
36858#[cfg_eval::cfg_eval]
36859#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36860#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36861#[cfg_attr(
36862    all(feature = "serde", feature = "alloc"),
36863    serde_with::serde_as,
36864    derive(serde::Serialize, serde::Deserialize),
36865    serde(rename_all = "snake_case")
36866)]
36867#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36868#[allow(clippy::large_enum_variant)]
36869pub enum TransactionSignaturePayloadTaggedTransaction {
36870    Tx(Transaction),
36871    TxFeeBump(FeeBumpTransaction),
36872}
36873
36874#[cfg(feature = "alloc")]
36875impl Default for TransactionSignaturePayloadTaggedTransaction {
36876    fn default() -> Self {
36877        Self::Tx(Transaction::default())
36878    }
36879}
36880
36881impl TransactionSignaturePayloadTaggedTransaction {
36882    pub const VARIANTS: [EnvelopeType; 2] = [EnvelopeType::Tx, EnvelopeType::TxFeeBump];
36883    pub const VARIANTS_STR: [&'static str; 2] = ["Tx", "TxFeeBump"];
36884
36885    #[must_use]
36886    pub const fn name(&self) -> &'static str {
36887        match self {
36888            Self::Tx(_) => "Tx",
36889            Self::TxFeeBump(_) => "TxFeeBump",
36890        }
36891    }
36892
36893    #[must_use]
36894    pub const fn discriminant(&self) -> EnvelopeType {
36895        #[allow(clippy::match_same_arms)]
36896        match self {
36897            Self::Tx(_) => EnvelopeType::Tx,
36898            Self::TxFeeBump(_) => EnvelopeType::TxFeeBump,
36899        }
36900    }
36901
36902    #[must_use]
36903    pub const fn variants() -> [EnvelopeType; 2] {
36904        Self::VARIANTS
36905    }
36906}
36907
36908impl Name for TransactionSignaturePayloadTaggedTransaction {
36909    #[must_use]
36910    fn name(&self) -> &'static str {
36911        Self::name(self)
36912    }
36913}
36914
36915impl Discriminant<EnvelopeType> for TransactionSignaturePayloadTaggedTransaction {
36916    #[must_use]
36917    fn discriminant(&self) -> EnvelopeType {
36918        Self::discriminant(self)
36919    }
36920}
36921
36922impl Variants<EnvelopeType> for TransactionSignaturePayloadTaggedTransaction {
36923    fn variants() -> slice::Iter<'static, EnvelopeType> {
36924        Self::VARIANTS.iter()
36925    }
36926}
36927
36928impl Union<EnvelopeType> for TransactionSignaturePayloadTaggedTransaction {}
36929
36930impl ReadXdr for TransactionSignaturePayloadTaggedTransaction {
36931    #[cfg(feature = "std")]
36932    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36933        r.with_limited_depth(|r| {
36934            let dv: EnvelopeType = <EnvelopeType as ReadXdr>::read_xdr(r)?;
36935            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
36936            let v = match dv {
36937                EnvelopeType::Tx => Self::Tx(Transaction::read_xdr(r)?),
36938                EnvelopeType::TxFeeBump => Self::TxFeeBump(FeeBumpTransaction::read_xdr(r)?),
36939                #[allow(unreachable_patterns)]
36940                _ => return Err(Error::Invalid),
36941            };
36942            Ok(v)
36943        })
36944    }
36945}
36946
36947impl WriteXdr for TransactionSignaturePayloadTaggedTransaction {
36948    #[cfg(feature = "std")]
36949    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
36950        w.with_limited_depth(|w| {
36951            self.discriminant().write_xdr(w)?;
36952            #[allow(clippy::match_same_arms)]
36953            match self {
36954                Self::Tx(v) => v.write_xdr(w)?,
36955                Self::TxFeeBump(v) => v.write_xdr(w)?,
36956            };
36957            Ok(())
36958        })
36959    }
36960}
36961
36962/// TransactionSignaturePayload is an XDR Struct defines as:
36963///
36964/// ```text
36965/// struct TransactionSignaturePayload
36966/// {
36967///     Hash networkId;
36968///     union switch (EnvelopeType type)
36969///     {
36970///     // Backwards Compatibility: Use ENVELOPE_TYPE_TX to sign ENVELOPE_TYPE_TX_V0
36971///     case ENVELOPE_TYPE_TX:
36972///         Transaction tx;
36973///     case ENVELOPE_TYPE_TX_FEE_BUMP:
36974///         FeeBumpTransaction feeBump;
36975///     }
36976///     taggedTransaction;
36977/// };
36978/// ```
36979///
36980#[cfg_attr(feature = "alloc", derive(Default))]
36981#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
36982#[cfg_eval::cfg_eval]
36983#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
36984#[cfg_attr(
36985    all(feature = "serde", feature = "alloc"),
36986    serde_with::serde_as,
36987    derive(serde::Serialize, serde::Deserialize),
36988    serde(rename_all = "snake_case")
36989)]
36990#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
36991pub struct TransactionSignaturePayload {
36992    pub network_id: Hash,
36993    pub tagged_transaction: TransactionSignaturePayloadTaggedTransaction,
36994}
36995
36996impl ReadXdr for TransactionSignaturePayload {
36997    #[cfg(feature = "std")]
36998    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
36999        r.with_limited_depth(|r| {
37000            Ok(Self {
37001                network_id: Hash::read_xdr(r)?,
37002                tagged_transaction: TransactionSignaturePayloadTaggedTransaction::read_xdr(r)?,
37003            })
37004        })
37005    }
37006}
37007
37008impl WriteXdr for TransactionSignaturePayload {
37009    #[cfg(feature = "std")]
37010    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
37011        w.with_limited_depth(|w| {
37012            self.network_id.write_xdr(w)?;
37013            self.tagged_transaction.write_xdr(w)?;
37014            Ok(())
37015        })
37016    }
37017}
37018
37019/// ClaimAtomType is an XDR Enum defines as:
37020///
37021/// ```text
37022/// enum ClaimAtomType
37023/// {
37024///     CLAIM_ATOM_TYPE_V0 = 0,
37025///     CLAIM_ATOM_TYPE_ORDER_BOOK = 1,
37026///     CLAIM_ATOM_TYPE_LIQUIDITY_POOL = 2
37027/// };
37028/// ```
37029///
37030// enum
37031#[cfg_attr(feature = "alloc", derive(Default))]
37032#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
37033#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
37034#[cfg_attr(
37035    all(feature = "serde", feature = "alloc"),
37036    derive(serde::Serialize, serde::Deserialize),
37037    serde(rename_all = "snake_case")
37038)]
37039#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
37040#[repr(i32)]
37041pub enum ClaimAtomType {
37042    #[cfg_attr(feature = "alloc", default)]
37043    V0 = 0,
37044    OrderBook = 1,
37045    LiquidityPool = 2,
37046}
37047
37048impl ClaimAtomType {
37049    pub const VARIANTS: [ClaimAtomType; 3] = [
37050        ClaimAtomType::V0,
37051        ClaimAtomType::OrderBook,
37052        ClaimAtomType::LiquidityPool,
37053    ];
37054    pub const VARIANTS_STR: [&'static str; 3] = ["V0", "OrderBook", "LiquidityPool"];
37055
37056    #[must_use]
37057    pub const fn name(&self) -> &'static str {
37058        match self {
37059            Self::V0 => "V0",
37060            Self::OrderBook => "OrderBook",
37061            Self::LiquidityPool => "LiquidityPool",
37062        }
37063    }
37064
37065    #[must_use]
37066    pub const fn variants() -> [ClaimAtomType; 3] {
37067        Self::VARIANTS
37068    }
37069}
37070
37071impl Name for ClaimAtomType {
37072    #[must_use]
37073    fn name(&self) -> &'static str {
37074        Self::name(self)
37075    }
37076}
37077
37078impl Variants<ClaimAtomType> for ClaimAtomType {
37079    fn variants() -> slice::Iter<'static, ClaimAtomType> {
37080        Self::VARIANTS.iter()
37081    }
37082}
37083
37084impl Enum for ClaimAtomType {}
37085
37086impl fmt::Display for ClaimAtomType {
37087    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37088        f.write_str(self.name())
37089    }
37090}
37091
37092impl TryFrom<i32> for ClaimAtomType {
37093    type Error = Error;
37094
37095    fn try_from(i: i32) -> Result<Self, Error> {
37096        let e = match i {
37097            0 => ClaimAtomType::V0,
37098            1 => ClaimAtomType::OrderBook,
37099            2 => ClaimAtomType::LiquidityPool,
37100            #[allow(unreachable_patterns)]
37101            _ => return Err(Error::Invalid),
37102        };
37103        Ok(e)
37104    }
37105}
37106
37107impl From<ClaimAtomType> for i32 {
37108    #[must_use]
37109    fn from(e: ClaimAtomType) -> Self {
37110        e as Self
37111    }
37112}
37113
37114impl ReadXdr for ClaimAtomType {
37115    #[cfg(feature = "std")]
37116    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
37117        r.with_limited_depth(|r| {
37118            let e = i32::read_xdr(r)?;
37119            let v: Self = e.try_into()?;
37120            Ok(v)
37121        })
37122    }
37123}
37124
37125impl WriteXdr for ClaimAtomType {
37126    #[cfg(feature = "std")]
37127    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
37128        w.with_limited_depth(|w| {
37129            let i: i32 = (*self).into();
37130            i.write_xdr(w)
37131        })
37132    }
37133}
37134
37135/// ClaimOfferAtomV0 is an XDR Struct defines as:
37136///
37137/// ```text
37138/// struct ClaimOfferAtomV0
37139/// {
37140///     // emitted to identify the offer
37141///     uint256 sellerEd25519; // Account that owns the offer
37142///     int64 offerID;
37143///
37144///     // amount and asset taken from the owner
37145///     Asset assetSold;
37146///     int64 amountSold;
37147///
37148///     // amount and asset sent to the owner
37149///     Asset assetBought;
37150///     int64 amountBought;
37151/// };
37152/// ```
37153///
37154#[cfg_attr(feature = "alloc", derive(Default))]
37155#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
37156#[cfg_eval::cfg_eval]
37157#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
37158#[cfg_attr(
37159    all(feature = "serde", feature = "alloc"),
37160    serde_with::serde_as,
37161    derive(serde::Serialize, serde::Deserialize),
37162    serde(rename_all = "snake_case")
37163)]
37164#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
37165pub struct ClaimOfferAtomV0 {
37166    pub seller_ed25519: Uint256,
37167    #[cfg_attr(
37168        all(feature = "serde", feature = "alloc"),
37169        serde_as(as = "NumberOrString")
37170    )]
37171    pub offer_id: i64,
37172    pub asset_sold: Asset,
37173    #[cfg_attr(
37174        all(feature = "serde", feature = "alloc"),
37175        serde_as(as = "NumberOrString")
37176    )]
37177    pub amount_sold: i64,
37178    pub asset_bought: Asset,
37179    #[cfg_attr(
37180        all(feature = "serde", feature = "alloc"),
37181        serde_as(as = "NumberOrString")
37182    )]
37183    pub amount_bought: i64,
37184}
37185
37186impl ReadXdr for ClaimOfferAtomV0 {
37187    #[cfg(feature = "std")]
37188    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
37189        r.with_limited_depth(|r| {
37190            Ok(Self {
37191                seller_ed25519: Uint256::read_xdr(r)?,
37192                offer_id: i64::read_xdr(r)?,
37193                asset_sold: Asset::read_xdr(r)?,
37194                amount_sold: i64::read_xdr(r)?,
37195                asset_bought: Asset::read_xdr(r)?,
37196                amount_bought: i64::read_xdr(r)?,
37197            })
37198        })
37199    }
37200}
37201
37202impl WriteXdr for ClaimOfferAtomV0 {
37203    #[cfg(feature = "std")]
37204    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
37205        w.with_limited_depth(|w| {
37206            self.seller_ed25519.write_xdr(w)?;
37207            self.offer_id.write_xdr(w)?;
37208            self.asset_sold.write_xdr(w)?;
37209            self.amount_sold.write_xdr(w)?;
37210            self.asset_bought.write_xdr(w)?;
37211            self.amount_bought.write_xdr(w)?;
37212            Ok(())
37213        })
37214    }
37215}
37216
37217/// ClaimOfferAtom is an XDR Struct defines as:
37218///
37219/// ```text
37220/// struct ClaimOfferAtom
37221/// {
37222///     // emitted to identify the offer
37223///     AccountID sellerID; // Account that owns the offer
37224///     int64 offerID;
37225///
37226///     // amount and asset taken from the owner
37227///     Asset assetSold;
37228///     int64 amountSold;
37229///
37230///     // amount and asset sent to the owner
37231///     Asset assetBought;
37232///     int64 amountBought;
37233/// };
37234/// ```
37235///
37236#[cfg_attr(feature = "alloc", derive(Default))]
37237#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
37238#[cfg_eval::cfg_eval]
37239#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
37240#[cfg_attr(
37241    all(feature = "serde", feature = "alloc"),
37242    serde_with::serde_as,
37243    derive(serde::Serialize, serde::Deserialize),
37244    serde(rename_all = "snake_case")
37245)]
37246#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
37247pub struct ClaimOfferAtom {
37248    pub seller_id: AccountId,
37249    #[cfg_attr(
37250        all(feature = "serde", feature = "alloc"),
37251        serde_as(as = "NumberOrString")
37252    )]
37253    pub offer_id: i64,
37254    pub asset_sold: Asset,
37255    #[cfg_attr(
37256        all(feature = "serde", feature = "alloc"),
37257        serde_as(as = "NumberOrString")
37258    )]
37259    pub amount_sold: i64,
37260    pub asset_bought: Asset,
37261    #[cfg_attr(
37262        all(feature = "serde", feature = "alloc"),
37263        serde_as(as = "NumberOrString")
37264    )]
37265    pub amount_bought: i64,
37266}
37267
37268impl ReadXdr for ClaimOfferAtom {
37269    #[cfg(feature = "std")]
37270    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
37271        r.with_limited_depth(|r| {
37272            Ok(Self {
37273                seller_id: AccountId::read_xdr(r)?,
37274                offer_id: i64::read_xdr(r)?,
37275                asset_sold: Asset::read_xdr(r)?,
37276                amount_sold: i64::read_xdr(r)?,
37277                asset_bought: Asset::read_xdr(r)?,
37278                amount_bought: i64::read_xdr(r)?,
37279            })
37280        })
37281    }
37282}
37283
37284impl WriteXdr for ClaimOfferAtom {
37285    #[cfg(feature = "std")]
37286    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
37287        w.with_limited_depth(|w| {
37288            self.seller_id.write_xdr(w)?;
37289            self.offer_id.write_xdr(w)?;
37290            self.asset_sold.write_xdr(w)?;
37291            self.amount_sold.write_xdr(w)?;
37292            self.asset_bought.write_xdr(w)?;
37293            self.amount_bought.write_xdr(w)?;
37294            Ok(())
37295        })
37296    }
37297}
37298
37299/// ClaimLiquidityAtom is an XDR Struct defines as:
37300///
37301/// ```text
37302/// struct ClaimLiquidityAtom
37303/// {
37304///     PoolID liquidityPoolID;
37305///
37306///     // amount and asset taken from the pool
37307///     Asset assetSold;
37308///     int64 amountSold;
37309///
37310///     // amount and asset sent to the pool
37311///     Asset assetBought;
37312///     int64 amountBought;
37313/// };
37314/// ```
37315///
37316#[cfg_attr(feature = "alloc", derive(Default))]
37317#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
37318#[cfg_eval::cfg_eval]
37319#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
37320#[cfg_attr(
37321    all(feature = "serde", feature = "alloc"),
37322    serde_with::serde_as,
37323    derive(serde::Serialize, serde::Deserialize),
37324    serde(rename_all = "snake_case")
37325)]
37326#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
37327pub struct ClaimLiquidityAtom {
37328    pub liquidity_pool_id: PoolId,
37329    pub asset_sold: Asset,
37330    #[cfg_attr(
37331        all(feature = "serde", feature = "alloc"),
37332        serde_as(as = "NumberOrString")
37333    )]
37334    pub amount_sold: i64,
37335    pub asset_bought: Asset,
37336    #[cfg_attr(
37337        all(feature = "serde", feature = "alloc"),
37338        serde_as(as = "NumberOrString")
37339    )]
37340    pub amount_bought: i64,
37341}
37342
37343impl ReadXdr for ClaimLiquidityAtom {
37344    #[cfg(feature = "std")]
37345    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
37346        r.with_limited_depth(|r| {
37347            Ok(Self {
37348                liquidity_pool_id: PoolId::read_xdr(r)?,
37349                asset_sold: Asset::read_xdr(r)?,
37350                amount_sold: i64::read_xdr(r)?,
37351                asset_bought: Asset::read_xdr(r)?,
37352                amount_bought: i64::read_xdr(r)?,
37353            })
37354        })
37355    }
37356}
37357
37358impl WriteXdr for ClaimLiquidityAtom {
37359    #[cfg(feature = "std")]
37360    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
37361        w.with_limited_depth(|w| {
37362            self.liquidity_pool_id.write_xdr(w)?;
37363            self.asset_sold.write_xdr(w)?;
37364            self.amount_sold.write_xdr(w)?;
37365            self.asset_bought.write_xdr(w)?;
37366            self.amount_bought.write_xdr(w)?;
37367            Ok(())
37368        })
37369    }
37370}
37371
37372/// ClaimAtom is an XDR Union defines as:
37373///
37374/// ```text
37375/// union ClaimAtom switch (ClaimAtomType type)
37376/// {
37377/// case CLAIM_ATOM_TYPE_V0:
37378///     ClaimOfferAtomV0 v0;
37379/// case CLAIM_ATOM_TYPE_ORDER_BOOK:
37380///     ClaimOfferAtom orderBook;
37381/// case CLAIM_ATOM_TYPE_LIQUIDITY_POOL:
37382///     ClaimLiquidityAtom liquidityPool;
37383/// };
37384/// ```
37385///
37386// union with discriminant ClaimAtomType
37387#[cfg_eval::cfg_eval]
37388#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
37389#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
37390#[cfg_attr(
37391    all(feature = "serde", feature = "alloc"),
37392    serde_with::serde_as,
37393    derive(serde::Serialize, serde::Deserialize),
37394    serde(rename_all = "snake_case")
37395)]
37396#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
37397#[allow(clippy::large_enum_variant)]
37398pub enum ClaimAtom {
37399    V0(ClaimOfferAtomV0),
37400    OrderBook(ClaimOfferAtom),
37401    LiquidityPool(ClaimLiquidityAtom),
37402}
37403
37404#[cfg(feature = "alloc")]
37405impl Default for ClaimAtom {
37406    fn default() -> Self {
37407        Self::V0(ClaimOfferAtomV0::default())
37408    }
37409}
37410
37411impl ClaimAtom {
37412    pub const VARIANTS: [ClaimAtomType; 3] = [
37413        ClaimAtomType::V0,
37414        ClaimAtomType::OrderBook,
37415        ClaimAtomType::LiquidityPool,
37416    ];
37417    pub const VARIANTS_STR: [&'static str; 3] = ["V0", "OrderBook", "LiquidityPool"];
37418
37419    #[must_use]
37420    pub const fn name(&self) -> &'static str {
37421        match self {
37422            Self::V0(_) => "V0",
37423            Self::OrderBook(_) => "OrderBook",
37424            Self::LiquidityPool(_) => "LiquidityPool",
37425        }
37426    }
37427
37428    #[must_use]
37429    pub const fn discriminant(&self) -> ClaimAtomType {
37430        #[allow(clippy::match_same_arms)]
37431        match self {
37432            Self::V0(_) => ClaimAtomType::V0,
37433            Self::OrderBook(_) => ClaimAtomType::OrderBook,
37434            Self::LiquidityPool(_) => ClaimAtomType::LiquidityPool,
37435        }
37436    }
37437
37438    #[must_use]
37439    pub const fn variants() -> [ClaimAtomType; 3] {
37440        Self::VARIANTS
37441    }
37442}
37443
37444impl Name for ClaimAtom {
37445    #[must_use]
37446    fn name(&self) -> &'static str {
37447        Self::name(self)
37448    }
37449}
37450
37451impl Discriminant<ClaimAtomType> for ClaimAtom {
37452    #[must_use]
37453    fn discriminant(&self) -> ClaimAtomType {
37454        Self::discriminant(self)
37455    }
37456}
37457
37458impl Variants<ClaimAtomType> for ClaimAtom {
37459    fn variants() -> slice::Iter<'static, ClaimAtomType> {
37460        Self::VARIANTS.iter()
37461    }
37462}
37463
37464impl Union<ClaimAtomType> for ClaimAtom {}
37465
37466impl ReadXdr for ClaimAtom {
37467    #[cfg(feature = "std")]
37468    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
37469        r.with_limited_depth(|r| {
37470            let dv: ClaimAtomType = <ClaimAtomType as ReadXdr>::read_xdr(r)?;
37471            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
37472            let v = match dv {
37473                ClaimAtomType::V0 => Self::V0(ClaimOfferAtomV0::read_xdr(r)?),
37474                ClaimAtomType::OrderBook => Self::OrderBook(ClaimOfferAtom::read_xdr(r)?),
37475                ClaimAtomType::LiquidityPool => {
37476                    Self::LiquidityPool(ClaimLiquidityAtom::read_xdr(r)?)
37477                }
37478                #[allow(unreachable_patterns)]
37479                _ => return Err(Error::Invalid),
37480            };
37481            Ok(v)
37482        })
37483    }
37484}
37485
37486impl WriteXdr for ClaimAtom {
37487    #[cfg(feature = "std")]
37488    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
37489        w.with_limited_depth(|w| {
37490            self.discriminant().write_xdr(w)?;
37491            #[allow(clippy::match_same_arms)]
37492            match self {
37493                Self::V0(v) => v.write_xdr(w)?,
37494                Self::OrderBook(v) => v.write_xdr(w)?,
37495                Self::LiquidityPool(v) => v.write_xdr(w)?,
37496            };
37497            Ok(())
37498        })
37499    }
37500}
37501
37502/// CreateAccountResultCode is an XDR Enum defines as:
37503///
37504/// ```text
37505/// enum CreateAccountResultCode
37506/// {
37507///     // codes considered as "success" for the operation
37508///     CREATE_ACCOUNT_SUCCESS = 0, // account was created
37509///
37510///     // codes considered as "failure" for the operation
37511///     CREATE_ACCOUNT_MALFORMED = -1,   // invalid destination
37512///     CREATE_ACCOUNT_UNDERFUNDED = -2, // not enough funds in source account
37513///     CREATE_ACCOUNT_LOW_RESERVE =
37514///         -3, // would create an account below the min reserve
37515///     CREATE_ACCOUNT_ALREADY_EXIST = -4 // account already exists
37516/// };
37517/// ```
37518///
37519// enum
37520#[cfg_attr(feature = "alloc", derive(Default))]
37521#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
37522#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
37523#[cfg_attr(
37524    all(feature = "serde", feature = "alloc"),
37525    derive(serde::Serialize, serde::Deserialize),
37526    serde(rename_all = "snake_case")
37527)]
37528#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
37529#[repr(i32)]
37530pub enum CreateAccountResultCode {
37531    #[cfg_attr(feature = "alloc", default)]
37532    Success = 0,
37533    Malformed = -1,
37534    Underfunded = -2,
37535    LowReserve = -3,
37536    AlreadyExist = -4,
37537}
37538
37539impl CreateAccountResultCode {
37540    pub const VARIANTS: [CreateAccountResultCode; 5] = [
37541        CreateAccountResultCode::Success,
37542        CreateAccountResultCode::Malformed,
37543        CreateAccountResultCode::Underfunded,
37544        CreateAccountResultCode::LowReserve,
37545        CreateAccountResultCode::AlreadyExist,
37546    ];
37547    pub const VARIANTS_STR: [&'static str; 5] = [
37548        "Success",
37549        "Malformed",
37550        "Underfunded",
37551        "LowReserve",
37552        "AlreadyExist",
37553    ];
37554
37555    #[must_use]
37556    pub const fn name(&self) -> &'static str {
37557        match self {
37558            Self::Success => "Success",
37559            Self::Malformed => "Malformed",
37560            Self::Underfunded => "Underfunded",
37561            Self::LowReserve => "LowReserve",
37562            Self::AlreadyExist => "AlreadyExist",
37563        }
37564    }
37565
37566    #[must_use]
37567    pub const fn variants() -> [CreateAccountResultCode; 5] {
37568        Self::VARIANTS
37569    }
37570}
37571
37572impl Name for CreateAccountResultCode {
37573    #[must_use]
37574    fn name(&self) -> &'static str {
37575        Self::name(self)
37576    }
37577}
37578
37579impl Variants<CreateAccountResultCode> for CreateAccountResultCode {
37580    fn variants() -> slice::Iter<'static, CreateAccountResultCode> {
37581        Self::VARIANTS.iter()
37582    }
37583}
37584
37585impl Enum for CreateAccountResultCode {}
37586
37587impl fmt::Display for CreateAccountResultCode {
37588    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37589        f.write_str(self.name())
37590    }
37591}
37592
37593impl TryFrom<i32> for CreateAccountResultCode {
37594    type Error = Error;
37595
37596    fn try_from(i: i32) -> Result<Self, Error> {
37597        let e = match i {
37598            0 => CreateAccountResultCode::Success,
37599            -1 => CreateAccountResultCode::Malformed,
37600            -2 => CreateAccountResultCode::Underfunded,
37601            -3 => CreateAccountResultCode::LowReserve,
37602            -4 => CreateAccountResultCode::AlreadyExist,
37603            #[allow(unreachable_patterns)]
37604            _ => return Err(Error::Invalid),
37605        };
37606        Ok(e)
37607    }
37608}
37609
37610impl From<CreateAccountResultCode> for i32 {
37611    #[must_use]
37612    fn from(e: CreateAccountResultCode) -> Self {
37613        e as Self
37614    }
37615}
37616
37617impl ReadXdr for CreateAccountResultCode {
37618    #[cfg(feature = "std")]
37619    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
37620        r.with_limited_depth(|r| {
37621            let e = i32::read_xdr(r)?;
37622            let v: Self = e.try_into()?;
37623            Ok(v)
37624        })
37625    }
37626}
37627
37628impl WriteXdr for CreateAccountResultCode {
37629    #[cfg(feature = "std")]
37630    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
37631        w.with_limited_depth(|w| {
37632            let i: i32 = (*self).into();
37633            i.write_xdr(w)
37634        })
37635    }
37636}
37637
37638/// CreateAccountResult is an XDR Union defines as:
37639///
37640/// ```text
37641/// union CreateAccountResult switch (CreateAccountResultCode code)
37642/// {
37643/// case CREATE_ACCOUNT_SUCCESS:
37644///     void;
37645/// case CREATE_ACCOUNT_MALFORMED:
37646/// case CREATE_ACCOUNT_UNDERFUNDED:
37647/// case CREATE_ACCOUNT_LOW_RESERVE:
37648/// case CREATE_ACCOUNT_ALREADY_EXIST:
37649///     void;
37650/// };
37651/// ```
37652///
37653// union with discriminant CreateAccountResultCode
37654#[cfg_eval::cfg_eval]
37655#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
37656#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
37657#[cfg_attr(
37658    all(feature = "serde", feature = "alloc"),
37659    serde_with::serde_as,
37660    derive(serde::Serialize, serde::Deserialize),
37661    serde(rename_all = "snake_case")
37662)]
37663#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
37664#[allow(clippy::large_enum_variant)]
37665pub enum CreateAccountResult {
37666    Success,
37667    Malformed,
37668    Underfunded,
37669    LowReserve,
37670    AlreadyExist,
37671}
37672
37673#[cfg(feature = "alloc")]
37674impl Default for CreateAccountResult {
37675    fn default() -> Self {
37676        Self::Success
37677    }
37678}
37679
37680impl CreateAccountResult {
37681    pub const VARIANTS: [CreateAccountResultCode; 5] = [
37682        CreateAccountResultCode::Success,
37683        CreateAccountResultCode::Malformed,
37684        CreateAccountResultCode::Underfunded,
37685        CreateAccountResultCode::LowReserve,
37686        CreateAccountResultCode::AlreadyExist,
37687    ];
37688    pub const VARIANTS_STR: [&'static str; 5] = [
37689        "Success",
37690        "Malformed",
37691        "Underfunded",
37692        "LowReserve",
37693        "AlreadyExist",
37694    ];
37695
37696    #[must_use]
37697    pub const fn name(&self) -> &'static str {
37698        match self {
37699            Self::Success => "Success",
37700            Self::Malformed => "Malformed",
37701            Self::Underfunded => "Underfunded",
37702            Self::LowReserve => "LowReserve",
37703            Self::AlreadyExist => "AlreadyExist",
37704        }
37705    }
37706
37707    #[must_use]
37708    pub const fn discriminant(&self) -> CreateAccountResultCode {
37709        #[allow(clippy::match_same_arms)]
37710        match self {
37711            Self::Success => CreateAccountResultCode::Success,
37712            Self::Malformed => CreateAccountResultCode::Malformed,
37713            Self::Underfunded => CreateAccountResultCode::Underfunded,
37714            Self::LowReserve => CreateAccountResultCode::LowReserve,
37715            Self::AlreadyExist => CreateAccountResultCode::AlreadyExist,
37716        }
37717    }
37718
37719    #[must_use]
37720    pub const fn variants() -> [CreateAccountResultCode; 5] {
37721        Self::VARIANTS
37722    }
37723}
37724
37725impl Name for CreateAccountResult {
37726    #[must_use]
37727    fn name(&self) -> &'static str {
37728        Self::name(self)
37729    }
37730}
37731
37732impl Discriminant<CreateAccountResultCode> for CreateAccountResult {
37733    #[must_use]
37734    fn discriminant(&self) -> CreateAccountResultCode {
37735        Self::discriminant(self)
37736    }
37737}
37738
37739impl Variants<CreateAccountResultCode> for CreateAccountResult {
37740    fn variants() -> slice::Iter<'static, CreateAccountResultCode> {
37741        Self::VARIANTS.iter()
37742    }
37743}
37744
37745impl Union<CreateAccountResultCode> for CreateAccountResult {}
37746
37747impl ReadXdr for CreateAccountResult {
37748    #[cfg(feature = "std")]
37749    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
37750        r.with_limited_depth(|r| {
37751            let dv: CreateAccountResultCode = <CreateAccountResultCode as ReadXdr>::read_xdr(r)?;
37752            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
37753            let v = match dv {
37754                CreateAccountResultCode::Success => Self::Success,
37755                CreateAccountResultCode::Malformed => Self::Malformed,
37756                CreateAccountResultCode::Underfunded => Self::Underfunded,
37757                CreateAccountResultCode::LowReserve => Self::LowReserve,
37758                CreateAccountResultCode::AlreadyExist => Self::AlreadyExist,
37759                #[allow(unreachable_patterns)]
37760                _ => return Err(Error::Invalid),
37761            };
37762            Ok(v)
37763        })
37764    }
37765}
37766
37767impl WriteXdr for CreateAccountResult {
37768    #[cfg(feature = "std")]
37769    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
37770        w.with_limited_depth(|w| {
37771            self.discriminant().write_xdr(w)?;
37772            #[allow(clippy::match_same_arms)]
37773            match self {
37774                Self::Success => ().write_xdr(w)?,
37775                Self::Malformed => ().write_xdr(w)?,
37776                Self::Underfunded => ().write_xdr(w)?,
37777                Self::LowReserve => ().write_xdr(w)?,
37778                Self::AlreadyExist => ().write_xdr(w)?,
37779            };
37780            Ok(())
37781        })
37782    }
37783}
37784
37785/// PaymentResultCode is an XDR Enum defines as:
37786///
37787/// ```text
37788/// enum PaymentResultCode
37789/// {
37790///     // codes considered as "success" for the operation
37791///     PAYMENT_SUCCESS = 0, // payment successfully completed
37792///
37793///     // codes considered as "failure" for the operation
37794///     PAYMENT_MALFORMED = -1,          // bad input
37795///     PAYMENT_UNDERFUNDED = -2,        // not enough funds in source account
37796///     PAYMENT_SRC_NO_TRUST = -3,       // no trust line on source account
37797///     PAYMENT_SRC_NOT_AUTHORIZED = -4, // source not authorized to transfer
37798///     PAYMENT_NO_DESTINATION = -5,     // destination account does not exist
37799///     PAYMENT_NO_TRUST = -6,       // destination missing a trust line for asset
37800///     PAYMENT_NOT_AUTHORIZED = -7, // destination not authorized to hold asset
37801///     PAYMENT_LINE_FULL = -8,      // destination would go above their limit
37802///     PAYMENT_NO_ISSUER = -9       // missing issuer on asset
37803/// };
37804/// ```
37805///
37806// enum
37807#[cfg_attr(feature = "alloc", derive(Default))]
37808#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
37809#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
37810#[cfg_attr(
37811    all(feature = "serde", feature = "alloc"),
37812    derive(serde::Serialize, serde::Deserialize),
37813    serde(rename_all = "snake_case")
37814)]
37815#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
37816#[repr(i32)]
37817pub enum PaymentResultCode {
37818    #[cfg_attr(feature = "alloc", default)]
37819    Success = 0,
37820    Malformed = -1,
37821    Underfunded = -2,
37822    SrcNoTrust = -3,
37823    SrcNotAuthorized = -4,
37824    NoDestination = -5,
37825    NoTrust = -6,
37826    NotAuthorized = -7,
37827    LineFull = -8,
37828    NoIssuer = -9,
37829}
37830
37831impl PaymentResultCode {
37832    pub const VARIANTS: [PaymentResultCode; 10] = [
37833        PaymentResultCode::Success,
37834        PaymentResultCode::Malformed,
37835        PaymentResultCode::Underfunded,
37836        PaymentResultCode::SrcNoTrust,
37837        PaymentResultCode::SrcNotAuthorized,
37838        PaymentResultCode::NoDestination,
37839        PaymentResultCode::NoTrust,
37840        PaymentResultCode::NotAuthorized,
37841        PaymentResultCode::LineFull,
37842        PaymentResultCode::NoIssuer,
37843    ];
37844    pub const VARIANTS_STR: [&'static str; 10] = [
37845        "Success",
37846        "Malformed",
37847        "Underfunded",
37848        "SrcNoTrust",
37849        "SrcNotAuthorized",
37850        "NoDestination",
37851        "NoTrust",
37852        "NotAuthorized",
37853        "LineFull",
37854        "NoIssuer",
37855    ];
37856
37857    #[must_use]
37858    pub const fn name(&self) -> &'static str {
37859        match self {
37860            Self::Success => "Success",
37861            Self::Malformed => "Malformed",
37862            Self::Underfunded => "Underfunded",
37863            Self::SrcNoTrust => "SrcNoTrust",
37864            Self::SrcNotAuthorized => "SrcNotAuthorized",
37865            Self::NoDestination => "NoDestination",
37866            Self::NoTrust => "NoTrust",
37867            Self::NotAuthorized => "NotAuthorized",
37868            Self::LineFull => "LineFull",
37869            Self::NoIssuer => "NoIssuer",
37870        }
37871    }
37872
37873    #[must_use]
37874    pub const fn variants() -> [PaymentResultCode; 10] {
37875        Self::VARIANTS
37876    }
37877}
37878
37879impl Name for PaymentResultCode {
37880    #[must_use]
37881    fn name(&self) -> &'static str {
37882        Self::name(self)
37883    }
37884}
37885
37886impl Variants<PaymentResultCode> for PaymentResultCode {
37887    fn variants() -> slice::Iter<'static, PaymentResultCode> {
37888        Self::VARIANTS.iter()
37889    }
37890}
37891
37892impl Enum for PaymentResultCode {}
37893
37894impl fmt::Display for PaymentResultCode {
37895    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37896        f.write_str(self.name())
37897    }
37898}
37899
37900impl TryFrom<i32> for PaymentResultCode {
37901    type Error = Error;
37902
37903    fn try_from(i: i32) -> Result<Self, Error> {
37904        let e = match i {
37905            0 => PaymentResultCode::Success,
37906            -1 => PaymentResultCode::Malformed,
37907            -2 => PaymentResultCode::Underfunded,
37908            -3 => PaymentResultCode::SrcNoTrust,
37909            -4 => PaymentResultCode::SrcNotAuthorized,
37910            -5 => PaymentResultCode::NoDestination,
37911            -6 => PaymentResultCode::NoTrust,
37912            -7 => PaymentResultCode::NotAuthorized,
37913            -8 => PaymentResultCode::LineFull,
37914            -9 => PaymentResultCode::NoIssuer,
37915            #[allow(unreachable_patterns)]
37916            _ => return Err(Error::Invalid),
37917        };
37918        Ok(e)
37919    }
37920}
37921
37922impl From<PaymentResultCode> for i32 {
37923    #[must_use]
37924    fn from(e: PaymentResultCode) -> Self {
37925        e as Self
37926    }
37927}
37928
37929impl ReadXdr for PaymentResultCode {
37930    #[cfg(feature = "std")]
37931    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
37932        r.with_limited_depth(|r| {
37933            let e = i32::read_xdr(r)?;
37934            let v: Self = e.try_into()?;
37935            Ok(v)
37936        })
37937    }
37938}
37939
37940impl WriteXdr for PaymentResultCode {
37941    #[cfg(feature = "std")]
37942    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
37943        w.with_limited_depth(|w| {
37944            let i: i32 = (*self).into();
37945            i.write_xdr(w)
37946        })
37947    }
37948}
37949
37950/// PaymentResult is an XDR Union defines as:
37951///
37952/// ```text
37953/// union PaymentResult switch (PaymentResultCode code)
37954/// {
37955/// case PAYMENT_SUCCESS:
37956///     void;
37957/// case PAYMENT_MALFORMED:
37958/// case PAYMENT_UNDERFUNDED:
37959/// case PAYMENT_SRC_NO_TRUST:
37960/// case PAYMENT_SRC_NOT_AUTHORIZED:
37961/// case PAYMENT_NO_DESTINATION:
37962/// case PAYMENT_NO_TRUST:
37963/// case PAYMENT_NOT_AUTHORIZED:
37964/// case PAYMENT_LINE_FULL:
37965/// case PAYMENT_NO_ISSUER:
37966///     void;
37967/// };
37968/// ```
37969///
37970// union with discriminant PaymentResultCode
37971#[cfg_eval::cfg_eval]
37972#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
37973#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
37974#[cfg_attr(
37975    all(feature = "serde", feature = "alloc"),
37976    serde_with::serde_as,
37977    derive(serde::Serialize, serde::Deserialize),
37978    serde(rename_all = "snake_case")
37979)]
37980#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
37981#[allow(clippy::large_enum_variant)]
37982pub enum PaymentResult {
37983    Success,
37984    Malformed,
37985    Underfunded,
37986    SrcNoTrust,
37987    SrcNotAuthorized,
37988    NoDestination,
37989    NoTrust,
37990    NotAuthorized,
37991    LineFull,
37992    NoIssuer,
37993}
37994
37995#[cfg(feature = "alloc")]
37996impl Default for PaymentResult {
37997    fn default() -> Self {
37998        Self::Success
37999    }
38000}
38001
38002impl PaymentResult {
38003    pub const VARIANTS: [PaymentResultCode; 10] = [
38004        PaymentResultCode::Success,
38005        PaymentResultCode::Malformed,
38006        PaymentResultCode::Underfunded,
38007        PaymentResultCode::SrcNoTrust,
38008        PaymentResultCode::SrcNotAuthorized,
38009        PaymentResultCode::NoDestination,
38010        PaymentResultCode::NoTrust,
38011        PaymentResultCode::NotAuthorized,
38012        PaymentResultCode::LineFull,
38013        PaymentResultCode::NoIssuer,
38014    ];
38015    pub const VARIANTS_STR: [&'static str; 10] = [
38016        "Success",
38017        "Malformed",
38018        "Underfunded",
38019        "SrcNoTrust",
38020        "SrcNotAuthorized",
38021        "NoDestination",
38022        "NoTrust",
38023        "NotAuthorized",
38024        "LineFull",
38025        "NoIssuer",
38026    ];
38027
38028    #[must_use]
38029    pub const fn name(&self) -> &'static str {
38030        match self {
38031            Self::Success => "Success",
38032            Self::Malformed => "Malformed",
38033            Self::Underfunded => "Underfunded",
38034            Self::SrcNoTrust => "SrcNoTrust",
38035            Self::SrcNotAuthorized => "SrcNotAuthorized",
38036            Self::NoDestination => "NoDestination",
38037            Self::NoTrust => "NoTrust",
38038            Self::NotAuthorized => "NotAuthorized",
38039            Self::LineFull => "LineFull",
38040            Self::NoIssuer => "NoIssuer",
38041        }
38042    }
38043
38044    #[must_use]
38045    pub const fn discriminant(&self) -> PaymentResultCode {
38046        #[allow(clippy::match_same_arms)]
38047        match self {
38048            Self::Success => PaymentResultCode::Success,
38049            Self::Malformed => PaymentResultCode::Malformed,
38050            Self::Underfunded => PaymentResultCode::Underfunded,
38051            Self::SrcNoTrust => PaymentResultCode::SrcNoTrust,
38052            Self::SrcNotAuthorized => PaymentResultCode::SrcNotAuthorized,
38053            Self::NoDestination => PaymentResultCode::NoDestination,
38054            Self::NoTrust => PaymentResultCode::NoTrust,
38055            Self::NotAuthorized => PaymentResultCode::NotAuthorized,
38056            Self::LineFull => PaymentResultCode::LineFull,
38057            Self::NoIssuer => PaymentResultCode::NoIssuer,
38058        }
38059    }
38060
38061    #[must_use]
38062    pub const fn variants() -> [PaymentResultCode; 10] {
38063        Self::VARIANTS
38064    }
38065}
38066
38067impl Name for PaymentResult {
38068    #[must_use]
38069    fn name(&self) -> &'static str {
38070        Self::name(self)
38071    }
38072}
38073
38074impl Discriminant<PaymentResultCode> for PaymentResult {
38075    #[must_use]
38076    fn discriminant(&self) -> PaymentResultCode {
38077        Self::discriminant(self)
38078    }
38079}
38080
38081impl Variants<PaymentResultCode> for PaymentResult {
38082    fn variants() -> slice::Iter<'static, PaymentResultCode> {
38083        Self::VARIANTS.iter()
38084    }
38085}
38086
38087impl Union<PaymentResultCode> for PaymentResult {}
38088
38089impl ReadXdr for PaymentResult {
38090    #[cfg(feature = "std")]
38091    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
38092        r.with_limited_depth(|r| {
38093            let dv: PaymentResultCode = <PaymentResultCode as ReadXdr>::read_xdr(r)?;
38094            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
38095            let v = match dv {
38096                PaymentResultCode::Success => Self::Success,
38097                PaymentResultCode::Malformed => Self::Malformed,
38098                PaymentResultCode::Underfunded => Self::Underfunded,
38099                PaymentResultCode::SrcNoTrust => Self::SrcNoTrust,
38100                PaymentResultCode::SrcNotAuthorized => Self::SrcNotAuthorized,
38101                PaymentResultCode::NoDestination => Self::NoDestination,
38102                PaymentResultCode::NoTrust => Self::NoTrust,
38103                PaymentResultCode::NotAuthorized => Self::NotAuthorized,
38104                PaymentResultCode::LineFull => Self::LineFull,
38105                PaymentResultCode::NoIssuer => Self::NoIssuer,
38106                #[allow(unreachable_patterns)]
38107                _ => return Err(Error::Invalid),
38108            };
38109            Ok(v)
38110        })
38111    }
38112}
38113
38114impl WriteXdr for PaymentResult {
38115    #[cfg(feature = "std")]
38116    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
38117        w.with_limited_depth(|w| {
38118            self.discriminant().write_xdr(w)?;
38119            #[allow(clippy::match_same_arms)]
38120            match self {
38121                Self::Success => ().write_xdr(w)?,
38122                Self::Malformed => ().write_xdr(w)?,
38123                Self::Underfunded => ().write_xdr(w)?,
38124                Self::SrcNoTrust => ().write_xdr(w)?,
38125                Self::SrcNotAuthorized => ().write_xdr(w)?,
38126                Self::NoDestination => ().write_xdr(w)?,
38127                Self::NoTrust => ().write_xdr(w)?,
38128                Self::NotAuthorized => ().write_xdr(w)?,
38129                Self::LineFull => ().write_xdr(w)?,
38130                Self::NoIssuer => ().write_xdr(w)?,
38131            };
38132            Ok(())
38133        })
38134    }
38135}
38136
38137/// PathPaymentStrictReceiveResultCode is an XDR Enum defines as:
38138///
38139/// ```text
38140/// enum PathPaymentStrictReceiveResultCode
38141/// {
38142///     // codes considered as "success" for the operation
38143///     PATH_PAYMENT_STRICT_RECEIVE_SUCCESS = 0, // success
38144///
38145///     // codes considered as "failure" for the operation
38146///     PATH_PAYMENT_STRICT_RECEIVE_MALFORMED = -1, // bad input
38147///     PATH_PAYMENT_STRICT_RECEIVE_UNDERFUNDED =
38148///         -2, // not enough funds in source account
38149///     PATH_PAYMENT_STRICT_RECEIVE_SRC_NO_TRUST =
38150///         -3, // no trust line on source account
38151///     PATH_PAYMENT_STRICT_RECEIVE_SRC_NOT_AUTHORIZED =
38152///         -4, // source not authorized to transfer
38153///     PATH_PAYMENT_STRICT_RECEIVE_NO_DESTINATION =
38154///         -5, // destination account does not exist
38155///     PATH_PAYMENT_STRICT_RECEIVE_NO_TRUST =
38156///         -6, // dest missing a trust line for asset
38157///     PATH_PAYMENT_STRICT_RECEIVE_NOT_AUTHORIZED =
38158///         -7, // dest not authorized to hold asset
38159///     PATH_PAYMENT_STRICT_RECEIVE_LINE_FULL =
38160///         -8, // dest would go above their limit
38161///     PATH_PAYMENT_STRICT_RECEIVE_NO_ISSUER = -9, // missing issuer on one asset
38162///     PATH_PAYMENT_STRICT_RECEIVE_TOO_FEW_OFFERS =
38163///         -10, // not enough offers to satisfy path
38164///     PATH_PAYMENT_STRICT_RECEIVE_OFFER_CROSS_SELF =
38165///         -11, // would cross one of its own offers
38166///     PATH_PAYMENT_STRICT_RECEIVE_OVER_SENDMAX = -12 // could not satisfy sendmax
38167/// };
38168/// ```
38169///
38170// enum
38171#[cfg_attr(feature = "alloc", derive(Default))]
38172#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
38173#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
38174#[cfg_attr(
38175    all(feature = "serde", feature = "alloc"),
38176    derive(serde::Serialize, serde::Deserialize),
38177    serde(rename_all = "snake_case")
38178)]
38179#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
38180#[repr(i32)]
38181pub enum PathPaymentStrictReceiveResultCode {
38182    #[cfg_attr(feature = "alloc", default)]
38183    Success = 0,
38184    Malformed = -1,
38185    Underfunded = -2,
38186    SrcNoTrust = -3,
38187    SrcNotAuthorized = -4,
38188    NoDestination = -5,
38189    NoTrust = -6,
38190    NotAuthorized = -7,
38191    LineFull = -8,
38192    NoIssuer = -9,
38193    TooFewOffers = -10,
38194    OfferCrossSelf = -11,
38195    OverSendmax = -12,
38196}
38197
38198impl PathPaymentStrictReceiveResultCode {
38199    pub const VARIANTS: [PathPaymentStrictReceiveResultCode; 13] = [
38200        PathPaymentStrictReceiveResultCode::Success,
38201        PathPaymentStrictReceiveResultCode::Malformed,
38202        PathPaymentStrictReceiveResultCode::Underfunded,
38203        PathPaymentStrictReceiveResultCode::SrcNoTrust,
38204        PathPaymentStrictReceiveResultCode::SrcNotAuthorized,
38205        PathPaymentStrictReceiveResultCode::NoDestination,
38206        PathPaymentStrictReceiveResultCode::NoTrust,
38207        PathPaymentStrictReceiveResultCode::NotAuthorized,
38208        PathPaymentStrictReceiveResultCode::LineFull,
38209        PathPaymentStrictReceiveResultCode::NoIssuer,
38210        PathPaymentStrictReceiveResultCode::TooFewOffers,
38211        PathPaymentStrictReceiveResultCode::OfferCrossSelf,
38212        PathPaymentStrictReceiveResultCode::OverSendmax,
38213    ];
38214    pub const VARIANTS_STR: [&'static str; 13] = [
38215        "Success",
38216        "Malformed",
38217        "Underfunded",
38218        "SrcNoTrust",
38219        "SrcNotAuthorized",
38220        "NoDestination",
38221        "NoTrust",
38222        "NotAuthorized",
38223        "LineFull",
38224        "NoIssuer",
38225        "TooFewOffers",
38226        "OfferCrossSelf",
38227        "OverSendmax",
38228    ];
38229
38230    #[must_use]
38231    pub const fn name(&self) -> &'static str {
38232        match self {
38233            Self::Success => "Success",
38234            Self::Malformed => "Malformed",
38235            Self::Underfunded => "Underfunded",
38236            Self::SrcNoTrust => "SrcNoTrust",
38237            Self::SrcNotAuthorized => "SrcNotAuthorized",
38238            Self::NoDestination => "NoDestination",
38239            Self::NoTrust => "NoTrust",
38240            Self::NotAuthorized => "NotAuthorized",
38241            Self::LineFull => "LineFull",
38242            Self::NoIssuer => "NoIssuer",
38243            Self::TooFewOffers => "TooFewOffers",
38244            Self::OfferCrossSelf => "OfferCrossSelf",
38245            Self::OverSendmax => "OverSendmax",
38246        }
38247    }
38248
38249    #[must_use]
38250    pub const fn variants() -> [PathPaymentStrictReceiveResultCode; 13] {
38251        Self::VARIANTS
38252    }
38253}
38254
38255impl Name for PathPaymentStrictReceiveResultCode {
38256    #[must_use]
38257    fn name(&self) -> &'static str {
38258        Self::name(self)
38259    }
38260}
38261
38262impl Variants<PathPaymentStrictReceiveResultCode> for PathPaymentStrictReceiveResultCode {
38263    fn variants() -> slice::Iter<'static, PathPaymentStrictReceiveResultCode> {
38264        Self::VARIANTS.iter()
38265    }
38266}
38267
38268impl Enum for PathPaymentStrictReceiveResultCode {}
38269
38270impl fmt::Display for PathPaymentStrictReceiveResultCode {
38271    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
38272        f.write_str(self.name())
38273    }
38274}
38275
38276impl TryFrom<i32> for PathPaymentStrictReceiveResultCode {
38277    type Error = Error;
38278
38279    fn try_from(i: i32) -> Result<Self, Error> {
38280        let e = match i {
38281            0 => PathPaymentStrictReceiveResultCode::Success,
38282            -1 => PathPaymentStrictReceiveResultCode::Malformed,
38283            -2 => PathPaymentStrictReceiveResultCode::Underfunded,
38284            -3 => PathPaymentStrictReceiveResultCode::SrcNoTrust,
38285            -4 => PathPaymentStrictReceiveResultCode::SrcNotAuthorized,
38286            -5 => PathPaymentStrictReceiveResultCode::NoDestination,
38287            -6 => PathPaymentStrictReceiveResultCode::NoTrust,
38288            -7 => PathPaymentStrictReceiveResultCode::NotAuthorized,
38289            -8 => PathPaymentStrictReceiveResultCode::LineFull,
38290            -9 => PathPaymentStrictReceiveResultCode::NoIssuer,
38291            -10 => PathPaymentStrictReceiveResultCode::TooFewOffers,
38292            -11 => PathPaymentStrictReceiveResultCode::OfferCrossSelf,
38293            -12 => PathPaymentStrictReceiveResultCode::OverSendmax,
38294            #[allow(unreachable_patterns)]
38295            _ => return Err(Error::Invalid),
38296        };
38297        Ok(e)
38298    }
38299}
38300
38301impl From<PathPaymentStrictReceiveResultCode> for i32 {
38302    #[must_use]
38303    fn from(e: PathPaymentStrictReceiveResultCode) -> Self {
38304        e as Self
38305    }
38306}
38307
38308impl ReadXdr for PathPaymentStrictReceiveResultCode {
38309    #[cfg(feature = "std")]
38310    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
38311        r.with_limited_depth(|r| {
38312            let e = i32::read_xdr(r)?;
38313            let v: Self = e.try_into()?;
38314            Ok(v)
38315        })
38316    }
38317}
38318
38319impl WriteXdr for PathPaymentStrictReceiveResultCode {
38320    #[cfg(feature = "std")]
38321    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
38322        w.with_limited_depth(|w| {
38323            let i: i32 = (*self).into();
38324            i.write_xdr(w)
38325        })
38326    }
38327}
38328
38329/// SimplePaymentResult is an XDR Struct defines as:
38330///
38331/// ```text
38332/// struct SimplePaymentResult
38333/// {
38334///     AccountID destination;
38335///     Asset asset;
38336///     int64 amount;
38337/// };
38338/// ```
38339///
38340#[cfg_attr(feature = "alloc", derive(Default))]
38341#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
38342#[cfg_eval::cfg_eval]
38343#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
38344#[cfg_attr(
38345    all(feature = "serde", feature = "alloc"),
38346    serde_with::serde_as,
38347    derive(serde::Serialize, serde::Deserialize),
38348    serde(rename_all = "snake_case")
38349)]
38350#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
38351pub struct SimplePaymentResult {
38352    pub destination: AccountId,
38353    pub asset: Asset,
38354    #[cfg_attr(
38355        all(feature = "serde", feature = "alloc"),
38356        serde_as(as = "NumberOrString")
38357    )]
38358    pub amount: i64,
38359}
38360
38361impl ReadXdr for SimplePaymentResult {
38362    #[cfg(feature = "std")]
38363    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
38364        r.with_limited_depth(|r| {
38365            Ok(Self {
38366                destination: AccountId::read_xdr(r)?,
38367                asset: Asset::read_xdr(r)?,
38368                amount: i64::read_xdr(r)?,
38369            })
38370        })
38371    }
38372}
38373
38374impl WriteXdr for SimplePaymentResult {
38375    #[cfg(feature = "std")]
38376    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
38377        w.with_limited_depth(|w| {
38378            self.destination.write_xdr(w)?;
38379            self.asset.write_xdr(w)?;
38380            self.amount.write_xdr(w)?;
38381            Ok(())
38382        })
38383    }
38384}
38385
38386/// PathPaymentStrictReceiveResultSuccess is an XDR NestedStruct defines as:
38387///
38388/// ```text
38389/// struct
38390///     {
38391///         ClaimAtom offers<>;
38392///         SimplePaymentResult last;
38393///     }
38394/// ```
38395///
38396#[cfg_attr(feature = "alloc", derive(Default))]
38397#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
38398#[cfg_eval::cfg_eval]
38399#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
38400#[cfg_attr(
38401    all(feature = "serde", feature = "alloc"),
38402    serde_with::serde_as,
38403    derive(serde::Serialize, serde::Deserialize),
38404    serde(rename_all = "snake_case")
38405)]
38406#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
38407pub struct PathPaymentStrictReceiveResultSuccess {
38408    pub offers: VecM<ClaimAtom>,
38409    pub last: SimplePaymentResult,
38410}
38411
38412impl ReadXdr for PathPaymentStrictReceiveResultSuccess {
38413    #[cfg(feature = "std")]
38414    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
38415        r.with_limited_depth(|r| {
38416            Ok(Self {
38417                offers: VecM::<ClaimAtom>::read_xdr(r)?,
38418                last: SimplePaymentResult::read_xdr(r)?,
38419            })
38420        })
38421    }
38422}
38423
38424impl WriteXdr for PathPaymentStrictReceiveResultSuccess {
38425    #[cfg(feature = "std")]
38426    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
38427        w.with_limited_depth(|w| {
38428            self.offers.write_xdr(w)?;
38429            self.last.write_xdr(w)?;
38430            Ok(())
38431        })
38432    }
38433}
38434
38435/// PathPaymentStrictReceiveResult is an XDR Union defines as:
38436///
38437/// ```text
38438/// union PathPaymentStrictReceiveResult switch (
38439///     PathPaymentStrictReceiveResultCode code)
38440/// {
38441/// case PATH_PAYMENT_STRICT_RECEIVE_SUCCESS:
38442///     struct
38443///     {
38444///         ClaimAtom offers<>;
38445///         SimplePaymentResult last;
38446///     } success;
38447/// case PATH_PAYMENT_STRICT_RECEIVE_MALFORMED:
38448/// case PATH_PAYMENT_STRICT_RECEIVE_UNDERFUNDED:
38449/// case PATH_PAYMENT_STRICT_RECEIVE_SRC_NO_TRUST:
38450/// case PATH_PAYMENT_STRICT_RECEIVE_SRC_NOT_AUTHORIZED:
38451/// case PATH_PAYMENT_STRICT_RECEIVE_NO_DESTINATION:
38452/// case PATH_PAYMENT_STRICT_RECEIVE_NO_TRUST:
38453/// case PATH_PAYMENT_STRICT_RECEIVE_NOT_AUTHORIZED:
38454/// case PATH_PAYMENT_STRICT_RECEIVE_LINE_FULL:
38455///     void;
38456/// case PATH_PAYMENT_STRICT_RECEIVE_NO_ISSUER:
38457///     Asset noIssuer; // the asset that caused the error
38458/// case PATH_PAYMENT_STRICT_RECEIVE_TOO_FEW_OFFERS:
38459/// case PATH_PAYMENT_STRICT_RECEIVE_OFFER_CROSS_SELF:
38460/// case PATH_PAYMENT_STRICT_RECEIVE_OVER_SENDMAX:
38461///     void;
38462/// };
38463/// ```
38464///
38465// union with discriminant PathPaymentStrictReceiveResultCode
38466#[cfg_eval::cfg_eval]
38467#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
38468#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
38469#[cfg_attr(
38470    all(feature = "serde", feature = "alloc"),
38471    serde_with::serde_as,
38472    derive(serde::Serialize, serde::Deserialize),
38473    serde(rename_all = "snake_case")
38474)]
38475#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
38476#[allow(clippy::large_enum_variant)]
38477pub enum PathPaymentStrictReceiveResult {
38478    Success(PathPaymentStrictReceiveResultSuccess),
38479    Malformed,
38480    Underfunded,
38481    SrcNoTrust,
38482    SrcNotAuthorized,
38483    NoDestination,
38484    NoTrust,
38485    NotAuthorized,
38486    LineFull,
38487    NoIssuer(Asset),
38488    TooFewOffers,
38489    OfferCrossSelf,
38490    OverSendmax,
38491}
38492
38493#[cfg(feature = "alloc")]
38494impl Default for PathPaymentStrictReceiveResult {
38495    fn default() -> Self {
38496        Self::Success(PathPaymentStrictReceiveResultSuccess::default())
38497    }
38498}
38499
38500impl PathPaymentStrictReceiveResult {
38501    pub const VARIANTS: [PathPaymentStrictReceiveResultCode; 13] = [
38502        PathPaymentStrictReceiveResultCode::Success,
38503        PathPaymentStrictReceiveResultCode::Malformed,
38504        PathPaymentStrictReceiveResultCode::Underfunded,
38505        PathPaymentStrictReceiveResultCode::SrcNoTrust,
38506        PathPaymentStrictReceiveResultCode::SrcNotAuthorized,
38507        PathPaymentStrictReceiveResultCode::NoDestination,
38508        PathPaymentStrictReceiveResultCode::NoTrust,
38509        PathPaymentStrictReceiveResultCode::NotAuthorized,
38510        PathPaymentStrictReceiveResultCode::LineFull,
38511        PathPaymentStrictReceiveResultCode::NoIssuer,
38512        PathPaymentStrictReceiveResultCode::TooFewOffers,
38513        PathPaymentStrictReceiveResultCode::OfferCrossSelf,
38514        PathPaymentStrictReceiveResultCode::OverSendmax,
38515    ];
38516    pub const VARIANTS_STR: [&'static str; 13] = [
38517        "Success",
38518        "Malformed",
38519        "Underfunded",
38520        "SrcNoTrust",
38521        "SrcNotAuthorized",
38522        "NoDestination",
38523        "NoTrust",
38524        "NotAuthorized",
38525        "LineFull",
38526        "NoIssuer",
38527        "TooFewOffers",
38528        "OfferCrossSelf",
38529        "OverSendmax",
38530    ];
38531
38532    #[must_use]
38533    pub const fn name(&self) -> &'static str {
38534        match self {
38535            Self::Success(_) => "Success",
38536            Self::Malformed => "Malformed",
38537            Self::Underfunded => "Underfunded",
38538            Self::SrcNoTrust => "SrcNoTrust",
38539            Self::SrcNotAuthorized => "SrcNotAuthorized",
38540            Self::NoDestination => "NoDestination",
38541            Self::NoTrust => "NoTrust",
38542            Self::NotAuthorized => "NotAuthorized",
38543            Self::LineFull => "LineFull",
38544            Self::NoIssuer(_) => "NoIssuer",
38545            Self::TooFewOffers => "TooFewOffers",
38546            Self::OfferCrossSelf => "OfferCrossSelf",
38547            Self::OverSendmax => "OverSendmax",
38548        }
38549    }
38550
38551    #[must_use]
38552    pub const fn discriminant(&self) -> PathPaymentStrictReceiveResultCode {
38553        #[allow(clippy::match_same_arms)]
38554        match self {
38555            Self::Success(_) => PathPaymentStrictReceiveResultCode::Success,
38556            Self::Malformed => PathPaymentStrictReceiveResultCode::Malformed,
38557            Self::Underfunded => PathPaymentStrictReceiveResultCode::Underfunded,
38558            Self::SrcNoTrust => PathPaymentStrictReceiveResultCode::SrcNoTrust,
38559            Self::SrcNotAuthorized => PathPaymentStrictReceiveResultCode::SrcNotAuthorized,
38560            Self::NoDestination => PathPaymentStrictReceiveResultCode::NoDestination,
38561            Self::NoTrust => PathPaymentStrictReceiveResultCode::NoTrust,
38562            Self::NotAuthorized => PathPaymentStrictReceiveResultCode::NotAuthorized,
38563            Self::LineFull => PathPaymentStrictReceiveResultCode::LineFull,
38564            Self::NoIssuer(_) => PathPaymentStrictReceiveResultCode::NoIssuer,
38565            Self::TooFewOffers => PathPaymentStrictReceiveResultCode::TooFewOffers,
38566            Self::OfferCrossSelf => PathPaymentStrictReceiveResultCode::OfferCrossSelf,
38567            Self::OverSendmax => PathPaymentStrictReceiveResultCode::OverSendmax,
38568        }
38569    }
38570
38571    #[must_use]
38572    pub const fn variants() -> [PathPaymentStrictReceiveResultCode; 13] {
38573        Self::VARIANTS
38574    }
38575}
38576
38577impl Name for PathPaymentStrictReceiveResult {
38578    #[must_use]
38579    fn name(&self) -> &'static str {
38580        Self::name(self)
38581    }
38582}
38583
38584impl Discriminant<PathPaymentStrictReceiveResultCode> for PathPaymentStrictReceiveResult {
38585    #[must_use]
38586    fn discriminant(&self) -> PathPaymentStrictReceiveResultCode {
38587        Self::discriminant(self)
38588    }
38589}
38590
38591impl Variants<PathPaymentStrictReceiveResultCode> for PathPaymentStrictReceiveResult {
38592    fn variants() -> slice::Iter<'static, PathPaymentStrictReceiveResultCode> {
38593        Self::VARIANTS.iter()
38594    }
38595}
38596
38597impl Union<PathPaymentStrictReceiveResultCode> for PathPaymentStrictReceiveResult {}
38598
38599impl ReadXdr for PathPaymentStrictReceiveResult {
38600    #[cfg(feature = "std")]
38601    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
38602        r.with_limited_depth(|r| {
38603            let dv: PathPaymentStrictReceiveResultCode =
38604                <PathPaymentStrictReceiveResultCode as ReadXdr>::read_xdr(r)?;
38605            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
38606            let v = match dv {
38607                PathPaymentStrictReceiveResultCode::Success => {
38608                    Self::Success(PathPaymentStrictReceiveResultSuccess::read_xdr(r)?)
38609                }
38610                PathPaymentStrictReceiveResultCode::Malformed => Self::Malformed,
38611                PathPaymentStrictReceiveResultCode::Underfunded => Self::Underfunded,
38612                PathPaymentStrictReceiveResultCode::SrcNoTrust => Self::SrcNoTrust,
38613                PathPaymentStrictReceiveResultCode::SrcNotAuthorized => Self::SrcNotAuthorized,
38614                PathPaymentStrictReceiveResultCode::NoDestination => Self::NoDestination,
38615                PathPaymentStrictReceiveResultCode::NoTrust => Self::NoTrust,
38616                PathPaymentStrictReceiveResultCode::NotAuthorized => Self::NotAuthorized,
38617                PathPaymentStrictReceiveResultCode::LineFull => Self::LineFull,
38618                PathPaymentStrictReceiveResultCode::NoIssuer => Self::NoIssuer(Asset::read_xdr(r)?),
38619                PathPaymentStrictReceiveResultCode::TooFewOffers => Self::TooFewOffers,
38620                PathPaymentStrictReceiveResultCode::OfferCrossSelf => Self::OfferCrossSelf,
38621                PathPaymentStrictReceiveResultCode::OverSendmax => Self::OverSendmax,
38622                #[allow(unreachable_patterns)]
38623                _ => return Err(Error::Invalid),
38624            };
38625            Ok(v)
38626        })
38627    }
38628}
38629
38630impl WriteXdr for PathPaymentStrictReceiveResult {
38631    #[cfg(feature = "std")]
38632    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
38633        w.with_limited_depth(|w| {
38634            self.discriminant().write_xdr(w)?;
38635            #[allow(clippy::match_same_arms)]
38636            match self {
38637                Self::Success(v) => v.write_xdr(w)?,
38638                Self::Malformed => ().write_xdr(w)?,
38639                Self::Underfunded => ().write_xdr(w)?,
38640                Self::SrcNoTrust => ().write_xdr(w)?,
38641                Self::SrcNotAuthorized => ().write_xdr(w)?,
38642                Self::NoDestination => ().write_xdr(w)?,
38643                Self::NoTrust => ().write_xdr(w)?,
38644                Self::NotAuthorized => ().write_xdr(w)?,
38645                Self::LineFull => ().write_xdr(w)?,
38646                Self::NoIssuer(v) => v.write_xdr(w)?,
38647                Self::TooFewOffers => ().write_xdr(w)?,
38648                Self::OfferCrossSelf => ().write_xdr(w)?,
38649                Self::OverSendmax => ().write_xdr(w)?,
38650            };
38651            Ok(())
38652        })
38653    }
38654}
38655
38656/// PathPaymentStrictSendResultCode is an XDR Enum defines as:
38657///
38658/// ```text
38659/// enum PathPaymentStrictSendResultCode
38660/// {
38661///     // codes considered as "success" for the operation
38662///     PATH_PAYMENT_STRICT_SEND_SUCCESS = 0, // success
38663///
38664///     // codes considered as "failure" for the operation
38665///     PATH_PAYMENT_STRICT_SEND_MALFORMED = -1, // bad input
38666///     PATH_PAYMENT_STRICT_SEND_UNDERFUNDED =
38667///         -2, // not enough funds in source account
38668///     PATH_PAYMENT_STRICT_SEND_SRC_NO_TRUST =
38669///         -3, // no trust line on source account
38670///     PATH_PAYMENT_STRICT_SEND_SRC_NOT_AUTHORIZED =
38671///         -4, // source not authorized to transfer
38672///     PATH_PAYMENT_STRICT_SEND_NO_DESTINATION =
38673///         -5, // destination account does not exist
38674///     PATH_PAYMENT_STRICT_SEND_NO_TRUST =
38675///         -6, // dest missing a trust line for asset
38676///     PATH_PAYMENT_STRICT_SEND_NOT_AUTHORIZED =
38677///         -7, // dest not authorized to hold asset
38678///     PATH_PAYMENT_STRICT_SEND_LINE_FULL = -8, // dest would go above their limit
38679///     PATH_PAYMENT_STRICT_SEND_NO_ISSUER = -9, // missing issuer on one asset
38680///     PATH_PAYMENT_STRICT_SEND_TOO_FEW_OFFERS =
38681///         -10, // not enough offers to satisfy path
38682///     PATH_PAYMENT_STRICT_SEND_OFFER_CROSS_SELF =
38683///         -11, // would cross one of its own offers
38684///     PATH_PAYMENT_STRICT_SEND_UNDER_DESTMIN = -12 // could not satisfy destMin
38685/// };
38686/// ```
38687///
38688// enum
38689#[cfg_attr(feature = "alloc", derive(Default))]
38690#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
38691#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
38692#[cfg_attr(
38693    all(feature = "serde", feature = "alloc"),
38694    derive(serde::Serialize, serde::Deserialize),
38695    serde(rename_all = "snake_case")
38696)]
38697#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
38698#[repr(i32)]
38699pub enum PathPaymentStrictSendResultCode {
38700    #[cfg_attr(feature = "alloc", default)]
38701    Success = 0,
38702    Malformed = -1,
38703    Underfunded = -2,
38704    SrcNoTrust = -3,
38705    SrcNotAuthorized = -4,
38706    NoDestination = -5,
38707    NoTrust = -6,
38708    NotAuthorized = -7,
38709    LineFull = -8,
38710    NoIssuer = -9,
38711    TooFewOffers = -10,
38712    OfferCrossSelf = -11,
38713    UnderDestmin = -12,
38714}
38715
38716impl PathPaymentStrictSendResultCode {
38717    pub const VARIANTS: [PathPaymentStrictSendResultCode; 13] = [
38718        PathPaymentStrictSendResultCode::Success,
38719        PathPaymentStrictSendResultCode::Malformed,
38720        PathPaymentStrictSendResultCode::Underfunded,
38721        PathPaymentStrictSendResultCode::SrcNoTrust,
38722        PathPaymentStrictSendResultCode::SrcNotAuthorized,
38723        PathPaymentStrictSendResultCode::NoDestination,
38724        PathPaymentStrictSendResultCode::NoTrust,
38725        PathPaymentStrictSendResultCode::NotAuthorized,
38726        PathPaymentStrictSendResultCode::LineFull,
38727        PathPaymentStrictSendResultCode::NoIssuer,
38728        PathPaymentStrictSendResultCode::TooFewOffers,
38729        PathPaymentStrictSendResultCode::OfferCrossSelf,
38730        PathPaymentStrictSendResultCode::UnderDestmin,
38731    ];
38732    pub const VARIANTS_STR: [&'static str; 13] = [
38733        "Success",
38734        "Malformed",
38735        "Underfunded",
38736        "SrcNoTrust",
38737        "SrcNotAuthorized",
38738        "NoDestination",
38739        "NoTrust",
38740        "NotAuthorized",
38741        "LineFull",
38742        "NoIssuer",
38743        "TooFewOffers",
38744        "OfferCrossSelf",
38745        "UnderDestmin",
38746    ];
38747
38748    #[must_use]
38749    pub const fn name(&self) -> &'static str {
38750        match self {
38751            Self::Success => "Success",
38752            Self::Malformed => "Malformed",
38753            Self::Underfunded => "Underfunded",
38754            Self::SrcNoTrust => "SrcNoTrust",
38755            Self::SrcNotAuthorized => "SrcNotAuthorized",
38756            Self::NoDestination => "NoDestination",
38757            Self::NoTrust => "NoTrust",
38758            Self::NotAuthorized => "NotAuthorized",
38759            Self::LineFull => "LineFull",
38760            Self::NoIssuer => "NoIssuer",
38761            Self::TooFewOffers => "TooFewOffers",
38762            Self::OfferCrossSelf => "OfferCrossSelf",
38763            Self::UnderDestmin => "UnderDestmin",
38764        }
38765    }
38766
38767    #[must_use]
38768    pub const fn variants() -> [PathPaymentStrictSendResultCode; 13] {
38769        Self::VARIANTS
38770    }
38771}
38772
38773impl Name for PathPaymentStrictSendResultCode {
38774    #[must_use]
38775    fn name(&self) -> &'static str {
38776        Self::name(self)
38777    }
38778}
38779
38780impl Variants<PathPaymentStrictSendResultCode> for PathPaymentStrictSendResultCode {
38781    fn variants() -> slice::Iter<'static, PathPaymentStrictSendResultCode> {
38782        Self::VARIANTS.iter()
38783    }
38784}
38785
38786impl Enum for PathPaymentStrictSendResultCode {}
38787
38788impl fmt::Display for PathPaymentStrictSendResultCode {
38789    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
38790        f.write_str(self.name())
38791    }
38792}
38793
38794impl TryFrom<i32> for PathPaymentStrictSendResultCode {
38795    type Error = Error;
38796
38797    fn try_from(i: i32) -> Result<Self, Error> {
38798        let e = match i {
38799            0 => PathPaymentStrictSendResultCode::Success,
38800            -1 => PathPaymentStrictSendResultCode::Malformed,
38801            -2 => PathPaymentStrictSendResultCode::Underfunded,
38802            -3 => PathPaymentStrictSendResultCode::SrcNoTrust,
38803            -4 => PathPaymentStrictSendResultCode::SrcNotAuthorized,
38804            -5 => PathPaymentStrictSendResultCode::NoDestination,
38805            -6 => PathPaymentStrictSendResultCode::NoTrust,
38806            -7 => PathPaymentStrictSendResultCode::NotAuthorized,
38807            -8 => PathPaymentStrictSendResultCode::LineFull,
38808            -9 => PathPaymentStrictSendResultCode::NoIssuer,
38809            -10 => PathPaymentStrictSendResultCode::TooFewOffers,
38810            -11 => PathPaymentStrictSendResultCode::OfferCrossSelf,
38811            -12 => PathPaymentStrictSendResultCode::UnderDestmin,
38812            #[allow(unreachable_patterns)]
38813            _ => return Err(Error::Invalid),
38814        };
38815        Ok(e)
38816    }
38817}
38818
38819impl From<PathPaymentStrictSendResultCode> for i32 {
38820    #[must_use]
38821    fn from(e: PathPaymentStrictSendResultCode) -> Self {
38822        e as Self
38823    }
38824}
38825
38826impl ReadXdr for PathPaymentStrictSendResultCode {
38827    #[cfg(feature = "std")]
38828    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
38829        r.with_limited_depth(|r| {
38830            let e = i32::read_xdr(r)?;
38831            let v: Self = e.try_into()?;
38832            Ok(v)
38833        })
38834    }
38835}
38836
38837impl WriteXdr for PathPaymentStrictSendResultCode {
38838    #[cfg(feature = "std")]
38839    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
38840        w.with_limited_depth(|w| {
38841            let i: i32 = (*self).into();
38842            i.write_xdr(w)
38843        })
38844    }
38845}
38846
38847/// PathPaymentStrictSendResultSuccess is an XDR NestedStruct defines as:
38848///
38849/// ```text
38850/// struct
38851///     {
38852///         ClaimAtom offers<>;
38853///         SimplePaymentResult last;
38854///     }
38855/// ```
38856///
38857#[cfg_attr(feature = "alloc", derive(Default))]
38858#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
38859#[cfg_eval::cfg_eval]
38860#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
38861#[cfg_attr(
38862    all(feature = "serde", feature = "alloc"),
38863    serde_with::serde_as,
38864    derive(serde::Serialize, serde::Deserialize),
38865    serde(rename_all = "snake_case")
38866)]
38867#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
38868pub struct PathPaymentStrictSendResultSuccess {
38869    pub offers: VecM<ClaimAtom>,
38870    pub last: SimplePaymentResult,
38871}
38872
38873impl ReadXdr for PathPaymentStrictSendResultSuccess {
38874    #[cfg(feature = "std")]
38875    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
38876        r.with_limited_depth(|r| {
38877            Ok(Self {
38878                offers: VecM::<ClaimAtom>::read_xdr(r)?,
38879                last: SimplePaymentResult::read_xdr(r)?,
38880            })
38881        })
38882    }
38883}
38884
38885impl WriteXdr for PathPaymentStrictSendResultSuccess {
38886    #[cfg(feature = "std")]
38887    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
38888        w.with_limited_depth(|w| {
38889            self.offers.write_xdr(w)?;
38890            self.last.write_xdr(w)?;
38891            Ok(())
38892        })
38893    }
38894}
38895
38896/// PathPaymentStrictSendResult is an XDR Union defines as:
38897///
38898/// ```text
38899/// union PathPaymentStrictSendResult switch (PathPaymentStrictSendResultCode code)
38900/// {
38901/// case PATH_PAYMENT_STRICT_SEND_SUCCESS:
38902///     struct
38903///     {
38904///         ClaimAtom offers<>;
38905///         SimplePaymentResult last;
38906///     } success;
38907/// case PATH_PAYMENT_STRICT_SEND_MALFORMED:
38908/// case PATH_PAYMENT_STRICT_SEND_UNDERFUNDED:
38909/// case PATH_PAYMENT_STRICT_SEND_SRC_NO_TRUST:
38910/// case PATH_PAYMENT_STRICT_SEND_SRC_NOT_AUTHORIZED:
38911/// case PATH_PAYMENT_STRICT_SEND_NO_DESTINATION:
38912/// case PATH_PAYMENT_STRICT_SEND_NO_TRUST:
38913/// case PATH_PAYMENT_STRICT_SEND_NOT_AUTHORIZED:
38914/// case PATH_PAYMENT_STRICT_SEND_LINE_FULL:
38915///     void;
38916/// case PATH_PAYMENT_STRICT_SEND_NO_ISSUER:
38917///     Asset noIssuer; // the asset that caused the error
38918/// case PATH_PAYMENT_STRICT_SEND_TOO_FEW_OFFERS:
38919/// case PATH_PAYMENT_STRICT_SEND_OFFER_CROSS_SELF:
38920/// case PATH_PAYMENT_STRICT_SEND_UNDER_DESTMIN:
38921///     void;
38922/// };
38923/// ```
38924///
38925// union with discriminant PathPaymentStrictSendResultCode
38926#[cfg_eval::cfg_eval]
38927#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
38928#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
38929#[cfg_attr(
38930    all(feature = "serde", feature = "alloc"),
38931    serde_with::serde_as,
38932    derive(serde::Serialize, serde::Deserialize),
38933    serde(rename_all = "snake_case")
38934)]
38935#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
38936#[allow(clippy::large_enum_variant)]
38937pub enum PathPaymentStrictSendResult {
38938    Success(PathPaymentStrictSendResultSuccess),
38939    Malformed,
38940    Underfunded,
38941    SrcNoTrust,
38942    SrcNotAuthorized,
38943    NoDestination,
38944    NoTrust,
38945    NotAuthorized,
38946    LineFull,
38947    NoIssuer(Asset),
38948    TooFewOffers,
38949    OfferCrossSelf,
38950    UnderDestmin,
38951}
38952
38953#[cfg(feature = "alloc")]
38954impl Default for PathPaymentStrictSendResult {
38955    fn default() -> Self {
38956        Self::Success(PathPaymentStrictSendResultSuccess::default())
38957    }
38958}
38959
38960impl PathPaymentStrictSendResult {
38961    pub const VARIANTS: [PathPaymentStrictSendResultCode; 13] = [
38962        PathPaymentStrictSendResultCode::Success,
38963        PathPaymentStrictSendResultCode::Malformed,
38964        PathPaymentStrictSendResultCode::Underfunded,
38965        PathPaymentStrictSendResultCode::SrcNoTrust,
38966        PathPaymentStrictSendResultCode::SrcNotAuthorized,
38967        PathPaymentStrictSendResultCode::NoDestination,
38968        PathPaymentStrictSendResultCode::NoTrust,
38969        PathPaymentStrictSendResultCode::NotAuthorized,
38970        PathPaymentStrictSendResultCode::LineFull,
38971        PathPaymentStrictSendResultCode::NoIssuer,
38972        PathPaymentStrictSendResultCode::TooFewOffers,
38973        PathPaymentStrictSendResultCode::OfferCrossSelf,
38974        PathPaymentStrictSendResultCode::UnderDestmin,
38975    ];
38976    pub const VARIANTS_STR: [&'static str; 13] = [
38977        "Success",
38978        "Malformed",
38979        "Underfunded",
38980        "SrcNoTrust",
38981        "SrcNotAuthorized",
38982        "NoDestination",
38983        "NoTrust",
38984        "NotAuthorized",
38985        "LineFull",
38986        "NoIssuer",
38987        "TooFewOffers",
38988        "OfferCrossSelf",
38989        "UnderDestmin",
38990    ];
38991
38992    #[must_use]
38993    pub const fn name(&self) -> &'static str {
38994        match self {
38995            Self::Success(_) => "Success",
38996            Self::Malformed => "Malformed",
38997            Self::Underfunded => "Underfunded",
38998            Self::SrcNoTrust => "SrcNoTrust",
38999            Self::SrcNotAuthorized => "SrcNotAuthorized",
39000            Self::NoDestination => "NoDestination",
39001            Self::NoTrust => "NoTrust",
39002            Self::NotAuthorized => "NotAuthorized",
39003            Self::LineFull => "LineFull",
39004            Self::NoIssuer(_) => "NoIssuer",
39005            Self::TooFewOffers => "TooFewOffers",
39006            Self::OfferCrossSelf => "OfferCrossSelf",
39007            Self::UnderDestmin => "UnderDestmin",
39008        }
39009    }
39010
39011    #[must_use]
39012    pub const fn discriminant(&self) -> PathPaymentStrictSendResultCode {
39013        #[allow(clippy::match_same_arms)]
39014        match self {
39015            Self::Success(_) => PathPaymentStrictSendResultCode::Success,
39016            Self::Malformed => PathPaymentStrictSendResultCode::Malformed,
39017            Self::Underfunded => PathPaymentStrictSendResultCode::Underfunded,
39018            Self::SrcNoTrust => PathPaymentStrictSendResultCode::SrcNoTrust,
39019            Self::SrcNotAuthorized => PathPaymentStrictSendResultCode::SrcNotAuthorized,
39020            Self::NoDestination => PathPaymentStrictSendResultCode::NoDestination,
39021            Self::NoTrust => PathPaymentStrictSendResultCode::NoTrust,
39022            Self::NotAuthorized => PathPaymentStrictSendResultCode::NotAuthorized,
39023            Self::LineFull => PathPaymentStrictSendResultCode::LineFull,
39024            Self::NoIssuer(_) => PathPaymentStrictSendResultCode::NoIssuer,
39025            Self::TooFewOffers => PathPaymentStrictSendResultCode::TooFewOffers,
39026            Self::OfferCrossSelf => PathPaymentStrictSendResultCode::OfferCrossSelf,
39027            Self::UnderDestmin => PathPaymentStrictSendResultCode::UnderDestmin,
39028        }
39029    }
39030
39031    #[must_use]
39032    pub const fn variants() -> [PathPaymentStrictSendResultCode; 13] {
39033        Self::VARIANTS
39034    }
39035}
39036
39037impl Name for PathPaymentStrictSendResult {
39038    #[must_use]
39039    fn name(&self) -> &'static str {
39040        Self::name(self)
39041    }
39042}
39043
39044impl Discriminant<PathPaymentStrictSendResultCode> for PathPaymentStrictSendResult {
39045    #[must_use]
39046    fn discriminant(&self) -> PathPaymentStrictSendResultCode {
39047        Self::discriminant(self)
39048    }
39049}
39050
39051impl Variants<PathPaymentStrictSendResultCode> for PathPaymentStrictSendResult {
39052    fn variants() -> slice::Iter<'static, PathPaymentStrictSendResultCode> {
39053        Self::VARIANTS.iter()
39054    }
39055}
39056
39057impl Union<PathPaymentStrictSendResultCode> for PathPaymentStrictSendResult {}
39058
39059impl ReadXdr for PathPaymentStrictSendResult {
39060    #[cfg(feature = "std")]
39061    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
39062        r.with_limited_depth(|r| {
39063            let dv: PathPaymentStrictSendResultCode =
39064                <PathPaymentStrictSendResultCode as ReadXdr>::read_xdr(r)?;
39065            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
39066            let v = match dv {
39067                PathPaymentStrictSendResultCode::Success => {
39068                    Self::Success(PathPaymentStrictSendResultSuccess::read_xdr(r)?)
39069                }
39070                PathPaymentStrictSendResultCode::Malformed => Self::Malformed,
39071                PathPaymentStrictSendResultCode::Underfunded => Self::Underfunded,
39072                PathPaymentStrictSendResultCode::SrcNoTrust => Self::SrcNoTrust,
39073                PathPaymentStrictSendResultCode::SrcNotAuthorized => Self::SrcNotAuthorized,
39074                PathPaymentStrictSendResultCode::NoDestination => Self::NoDestination,
39075                PathPaymentStrictSendResultCode::NoTrust => Self::NoTrust,
39076                PathPaymentStrictSendResultCode::NotAuthorized => Self::NotAuthorized,
39077                PathPaymentStrictSendResultCode::LineFull => Self::LineFull,
39078                PathPaymentStrictSendResultCode::NoIssuer => Self::NoIssuer(Asset::read_xdr(r)?),
39079                PathPaymentStrictSendResultCode::TooFewOffers => Self::TooFewOffers,
39080                PathPaymentStrictSendResultCode::OfferCrossSelf => Self::OfferCrossSelf,
39081                PathPaymentStrictSendResultCode::UnderDestmin => Self::UnderDestmin,
39082                #[allow(unreachable_patterns)]
39083                _ => return Err(Error::Invalid),
39084            };
39085            Ok(v)
39086        })
39087    }
39088}
39089
39090impl WriteXdr for PathPaymentStrictSendResult {
39091    #[cfg(feature = "std")]
39092    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
39093        w.with_limited_depth(|w| {
39094            self.discriminant().write_xdr(w)?;
39095            #[allow(clippy::match_same_arms)]
39096            match self {
39097                Self::Success(v) => v.write_xdr(w)?,
39098                Self::Malformed => ().write_xdr(w)?,
39099                Self::Underfunded => ().write_xdr(w)?,
39100                Self::SrcNoTrust => ().write_xdr(w)?,
39101                Self::SrcNotAuthorized => ().write_xdr(w)?,
39102                Self::NoDestination => ().write_xdr(w)?,
39103                Self::NoTrust => ().write_xdr(w)?,
39104                Self::NotAuthorized => ().write_xdr(w)?,
39105                Self::LineFull => ().write_xdr(w)?,
39106                Self::NoIssuer(v) => v.write_xdr(w)?,
39107                Self::TooFewOffers => ().write_xdr(w)?,
39108                Self::OfferCrossSelf => ().write_xdr(w)?,
39109                Self::UnderDestmin => ().write_xdr(w)?,
39110            };
39111            Ok(())
39112        })
39113    }
39114}
39115
39116/// ManageSellOfferResultCode is an XDR Enum defines as:
39117///
39118/// ```text
39119/// enum ManageSellOfferResultCode
39120/// {
39121///     // codes considered as "success" for the operation
39122///     MANAGE_SELL_OFFER_SUCCESS = 0,
39123///
39124///     // codes considered as "failure" for the operation
39125///     MANAGE_SELL_OFFER_MALFORMED = -1, // generated offer would be invalid
39126///     MANAGE_SELL_OFFER_SELL_NO_TRUST =
39127///         -2,                              // no trust line for what we're selling
39128///     MANAGE_SELL_OFFER_BUY_NO_TRUST = -3, // no trust line for what we're buying
39129///     MANAGE_SELL_OFFER_SELL_NOT_AUTHORIZED = -4, // not authorized to sell
39130///     MANAGE_SELL_OFFER_BUY_NOT_AUTHORIZED = -5,  // not authorized to buy
39131///     MANAGE_SELL_OFFER_LINE_FULL = -6, // can't receive more of what it's buying
39132///     MANAGE_SELL_OFFER_UNDERFUNDED = -7, // doesn't hold what it's trying to sell
39133///     MANAGE_SELL_OFFER_CROSS_SELF =
39134///         -8, // would cross an offer from the same user
39135///     MANAGE_SELL_OFFER_SELL_NO_ISSUER = -9, // no issuer for what we're selling
39136///     MANAGE_SELL_OFFER_BUY_NO_ISSUER = -10, // no issuer for what we're buying
39137///
39138///     // update errors
39139///     MANAGE_SELL_OFFER_NOT_FOUND =
39140///         -11, // offerID does not match an existing offer
39141///
39142///     MANAGE_SELL_OFFER_LOW_RESERVE =
39143///         -12 // not enough funds to create a new Offer
39144/// };
39145/// ```
39146///
39147// enum
39148#[cfg_attr(feature = "alloc", derive(Default))]
39149#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
39150#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
39151#[cfg_attr(
39152    all(feature = "serde", feature = "alloc"),
39153    derive(serde::Serialize, serde::Deserialize),
39154    serde(rename_all = "snake_case")
39155)]
39156#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
39157#[repr(i32)]
39158pub enum ManageSellOfferResultCode {
39159    #[cfg_attr(feature = "alloc", default)]
39160    Success = 0,
39161    Malformed = -1,
39162    SellNoTrust = -2,
39163    BuyNoTrust = -3,
39164    SellNotAuthorized = -4,
39165    BuyNotAuthorized = -5,
39166    LineFull = -6,
39167    Underfunded = -7,
39168    CrossSelf = -8,
39169    SellNoIssuer = -9,
39170    BuyNoIssuer = -10,
39171    NotFound = -11,
39172    LowReserve = -12,
39173}
39174
39175impl ManageSellOfferResultCode {
39176    pub const VARIANTS: [ManageSellOfferResultCode; 13] = [
39177        ManageSellOfferResultCode::Success,
39178        ManageSellOfferResultCode::Malformed,
39179        ManageSellOfferResultCode::SellNoTrust,
39180        ManageSellOfferResultCode::BuyNoTrust,
39181        ManageSellOfferResultCode::SellNotAuthorized,
39182        ManageSellOfferResultCode::BuyNotAuthorized,
39183        ManageSellOfferResultCode::LineFull,
39184        ManageSellOfferResultCode::Underfunded,
39185        ManageSellOfferResultCode::CrossSelf,
39186        ManageSellOfferResultCode::SellNoIssuer,
39187        ManageSellOfferResultCode::BuyNoIssuer,
39188        ManageSellOfferResultCode::NotFound,
39189        ManageSellOfferResultCode::LowReserve,
39190    ];
39191    pub const VARIANTS_STR: [&'static str; 13] = [
39192        "Success",
39193        "Malformed",
39194        "SellNoTrust",
39195        "BuyNoTrust",
39196        "SellNotAuthorized",
39197        "BuyNotAuthorized",
39198        "LineFull",
39199        "Underfunded",
39200        "CrossSelf",
39201        "SellNoIssuer",
39202        "BuyNoIssuer",
39203        "NotFound",
39204        "LowReserve",
39205    ];
39206
39207    #[must_use]
39208    pub const fn name(&self) -> &'static str {
39209        match self {
39210            Self::Success => "Success",
39211            Self::Malformed => "Malformed",
39212            Self::SellNoTrust => "SellNoTrust",
39213            Self::BuyNoTrust => "BuyNoTrust",
39214            Self::SellNotAuthorized => "SellNotAuthorized",
39215            Self::BuyNotAuthorized => "BuyNotAuthorized",
39216            Self::LineFull => "LineFull",
39217            Self::Underfunded => "Underfunded",
39218            Self::CrossSelf => "CrossSelf",
39219            Self::SellNoIssuer => "SellNoIssuer",
39220            Self::BuyNoIssuer => "BuyNoIssuer",
39221            Self::NotFound => "NotFound",
39222            Self::LowReserve => "LowReserve",
39223        }
39224    }
39225
39226    #[must_use]
39227    pub const fn variants() -> [ManageSellOfferResultCode; 13] {
39228        Self::VARIANTS
39229    }
39230}
39231
39232impl Name for ManageSellOfferResultCode {
39233    #[must_use]
39234    fn name(&self) -> &'static str {
39235        Self::name(self)
39236    }
39237}
39238
39239impl Variants<ManageSellOfferResultCode> for ManageSellOfferResultCode {
39240    fn variants() -> slice::Iter<'static, ManageSellOfferResultCode> {
39241        Self::VARIANTS.iter()
39242    }
39243}
39244
39245impl Enum for ManageSellOfferResultCode {}
39246
39247impl fmt::Display for ManageSellOfferResultCode {
39248    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
39249        f.write_str(self.name())
39250    }
39251}
39252
39253impl TryFrom<i32> for ManageSellOfferResultCode {
39254    type Error = Error;
39255
39256    fn try_from(i: i32) -> Result<Self, Error> {
39257        let e = match i {
39258            0 => ManageSellOfferResultCode::Success,
39259            -1 => ManageSellOfferResultCode::Malformed,
39260            -2 => ManageSellOfferResultCode::SellNoTrust,
39261            -3 => ManageSellOfferResultCode::BuyNoTrust,
39262            -4 => ManageSellOfferResultCode::SellNotAuthorized,
39263            -5 => ManageSellOfferResultCode::BuyNotAuthorized,
39264            -6 => ManageSellOfferResultCode::LineFull,
39265            -7 => ManageSellOfferResultCode::Underfunded,
39266            -8 => ManageSellOfferResultCode::CrossSelf,
39267            -9 => ManageSellOfferResultCode::SellNoIssuer,
39268            -10 => ManageSellOfferResultCode::BuyNoIssuer,
39269            -11 => ManageSellOfferResultCode::NotFound,
39270            -12 => ManageSellOfferResultCode::LowReserve,
39271            #[allow(unreachable_patterns)]
39272            _ => return Err(Error::Invalid),
39273        };
39274        Ok(e)
39275    }
39276}
39277
39278impl From<ManageSellOfferResultCode> for i32 {
39279    #[must_use]
39280    fn from(e: ManageSellOfferResultCode) -> Self {
39281        e as Self
39282    }
39283}
39284
39285impl ReadXdr for ManageSellOfferResultCode {
39286    #[cfg(feature = "std")]
39287    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
39288        r.with_limited_depth(|r| {
39289            let e = i32::read_xdr(r)?;
39290            let v: Self = e.try_into()?;
39291            Ok(v)
39292        })
39293    }
39294}
39295
39296impl WriteXdr for ManageSellOfferResultCode {
39297    #[cfg(feature = "std")]
39298    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
39299        w.with_limited_depth(|w| {
39300            let i: i32 = (*self).into();
39301            i.write_xdr(w)
39302        })
39303    }
39304}
39305
39306/// ManageOfferEffect is an XDR Enum defines as:
39307///
39308/// ```text
39309/// enum ManageOfferEffect
39310/// {
39311///     MANAGE_OFFER_CREATED = 0,
39312///     MANAGE_OFFER_UPDATED = 1,
39313///     MANAGE_OFFER_DELETED = 2
39314/// };
39315/// ```
39316///
39317// enum
39318#[cfg_attr(feature = "alloc", derive(Default))]
39319#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
39320#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
39321#[cfg_attr(
39322    all(feature = "serde", feature = "alloc"),
39323    derive(serde::Serialize, serde::Deserialize),
39324    serde(rename_all = "snake_case")
39325)]
39326#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
39327#[repr(i32)]
39328pub enum ManageOfferEffect {
39329    #[cfg_attr(feature = "alloc", default)]
39330    Created = 0,
39331    Updated = 1,
39332    Deleted = 2,
39333}
39334
39335impl ManageOfferEffect {
39336    pub const VARIANTS: [ManageOfferEffect; 3] = [
39337        ManageOfferEffect::Created,
39338        ManageOfferEffect::Updated,
39339        ManageOfferEffect::Deleted,
39340    ];
39341    pub const VARIANTS_STR: [&'static str; 3] = ["Created", "Updated", "Deleted"];
39342
39343    #[must_use]
39344    pub const fn name(&self) -> &'static str {
39345        match self {
39346            Self::Created => "Created",
39347            Self::Updated => "Updated",
39348            Self::Deleted => "Deleted",
39349        }
39350    }
39351
39352    #[must_use]
39353    pub const fn variants() -> [ManageOfferEffect; 3] {
39354        Self::VARIANTS
39355    }
39356}
39357
39358impl Name for ManageOfferEffect {
39359    #[must_use]
39360    fn name(&self) -> &'static str {
39361        Self::name(self)
39362    }
39363}
39364
39365impl Variants<ManageOfferEffect> for ManageOfferEffect {
39366    fn variants() -> slice::Iter<'static, ManageOfferEffect> {
39367        Self::VARIANTS.iter()
39368    }
39369}
39370
39371impl Enum for ManageOfferEffect {}
39372
39373impl fmt::Display for ManageOfferEffect {
39374    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
39375        f.write_str(self.name())
39376    }
39377}
39378
39379impl TryFrom<i32> for ManageOfferEffect {
39380    type Error = Error;
39381
39382    fn try_from(i: i32) -> Result<Self, Error> {
39383        let e = match i {
39384            0 => ManageOfferEffect::Created,
39385            1 => ManageOfferEffect::Updated,
39386            2 => ManageOfferEffect::Deleted,
39387            #[allow(unreachable_patterns)]
39388            _ => return Err(Error::Invalid),
39389        };
39390        Ok(e)
39391    }
39392}
39393
39394impl From<ManageOfferEffect> for i32 {
39395    #[must_use]
39396    fn from(e: ManageOfferEffect) -> Self {
39397        e as Self
39398    }
39399}
39400
39401impl ReadXdr for ManageOfferEffect {
39402    #[cfg(feature = "std")]
39403    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
39404        r.with_limited_depth(|r| {
39405            let e = i32::read_xdr(r)?;
39406            let v: Self = e.try_into()?;
39407            Ok(v)
39408        })
39409    }
39410}
39411
39412impl WriteXdr for ManageOfferEffect {
39413    #[cfg(feature = "std")]
39414    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
39415        w.with_limited_depth(|w| {
39416            let i: i32 = (*self).into();
39417            i.write_xdr(w)
39418        })
39419    }
39420}
39421
39422/// ManageOfferSuccessResultOffer is an XDR NestedUnion defines as:
39423///
39424/// ```text
39425/// union switch (ManageOfferEffect effect)
39426///     {
39427///     case MANAGE_OFFER_CREATED:
39428///     case MANAGE_OFFER_UPDATED:
39429///         OfferEntry offer;
39430///     case MANAGE_OFFER_DELETED:
39431///         void;
39432///     }
39433/// ```
39434///
39435// union with discriminant ManageOfferEffect
39436#[cfg_eval::cfg_eval]
39437#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
39438#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
39439#[cfg_attr(
39440    all(feature = "serde", feature = "alloc"),
39441    serde_with::serde_as,
39442    derive(serde::Serialize, serde::Deserialize),
39443    serde(rename_all = "snake_case")
39444)]
39445#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
39446#[allow(clippy::large_enum_variant)]
39447pub enum ManageOfferSuccessResultOffer {
39448    Created(OfferEntry),
39449    Updated(OfferEntry),
39450    Deleted,
39451}
39452
39453#[cfg(feature = "alloc")]
39454impl Default for ManageOfferSuccessResultOffer {
39455    fn default() -> Self {
39456        Self::Created(OfferEntry::default())
39457    }
39458}
39459
39460impl ManageOfferSuccessResultOffer {
39461    pub const VARIANTS: [ManageOfferEffect; 3] = [
39462        ManageOfferEffect::Created,
39463        ManageOfferEffect::Updated,
39464        ManageOfferEffect::Deleted,
39465    ];
39466    pub const VARIANTS_STR: [&'static str; 3] = ["Created", "Updated", "Deleted"];
39467
39468    #[must_use]
39469    pub const fn name(&self) -> &'static str {
39470        match self {
39471            Self::Created(_) => "Created",
39472            Self::Updated(_) => "Updated",
39473            Self::Deleted => "Deleted",
39474        }
39475    }
39476
39477    #[must_use]
39478    pub const fn discriminant(&self) -> ManageOfferEffect {
39479        #[allow(clippy::match_same_arms)]
39480        match self {
39481            Self::Created(_) => ManageOfferEffect::Created,
39482            Self::Updated(_) => ManageOfferEffect::Updated,
39483            Self::Deleted => ManageOfferEffect::Deleted,
39484        }
39485    }
39486
39487    #[must_use]
39488    pub const fn variants() -> [ManageOfferEffect; 3] {
39489        Self::VARIANTS
39490    }
39491}
39492
39493impl Name for ManageOfferSuccessResultOffer {
39494    #[must_use]
39495    fn name(&self) -> &'static str {
39496        Self::name(self)
39497    }
39498}
39499
39500impl Discriminant<ManageOfferEffect> for ManageOfferSuccessResultOffer {
39501    #[must_use]
39502    fn discriminant(&self) -> ManageOfferEffect {
39503        Self::discriminant(self)
39504    }
39505}
39506
39507impl Variants<ManageOfferEffect> for ManageOfferSuccessResultOffer {
39508    fn variants() -> slice::Iter<'static, ManageOfferEffect> {
39509        Self::VARIANTS.iter()
39510    }
39511}
39512
39513impl Union<ManageOfferEffect> for ManageOfferSuccessResultOffer {}
39514
39515impl ReadXdr for ManageOfferSuccessResultOffer {
39516    #[cfg(feature = "std")]
39517    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
39518        r.with_limited_depth(|r| {
39519            let dv: ManageOfferEffect = <ManageOfferEffect as ReadXdr>::read_xdr(r)?;
39520            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
39521            let v = match dv {
39522                ManageOfferEffect::Created => Self::Created(OfferEntry::read_xdr(r)?),
39523                ManageOfferEffect::Updated => Self::Updated(OfferEntry::read_xdr(r)?),
39524                ManageOfferEffect::Deleted => Self::Deleted,
39525                #[allow(unreachable_patterns)]
39526                _ => return Err(Error::Invalid),
39527            };
39528            Ok(v)
39529        })
39530    }
39531}
39532
39533impl WriteXdr for ManageOfferSuccessResultOffer {
39534    #[cfg(feature = "std")]
39535    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
39536        w.with_limited_depth(|w| {
39537            self.discriminant().write_xdr(w)?;
39538            #[allow(clippy::match_same_arms)]
39539            match self {
39540                Self::Created(v) => v.write_xdr(w)?,
39541                Self::Updated(v) => v.write_xdr(w)?,
39542                Self::Deleted => ().write_xdr(w)?,
39543            };
39544            Ok(())
39545        })
39546    }
39547}
39548
39549/// ManageOfferSuccessResult is an XDR Struct defines as:
39550///
39551/// ```text
39552/// struct ManageOfferSuccessResult
39553/// {
39554///     // offers that got claimed while creating this offer
39555///     ClaimAtom offersClaimed<>;
39556///
39557///     union switch (ManageOfferEffect effect)
39558///     {
39559///     case MANAGE_OFFER_CREATED:
39560///     case MANAGE_OFFER_UPDATED:
39561///         OfferEntry offer;
39562///     case MANAGE_OFFER_DELETED:
39563///         void;
39564///     }
39565///     offer;
39566/// };
39567/// ```
39568///
39569#[cfg_attr(feature = "alloc", derive(Default))]
39570#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
39571#[cfg_eval::cfg_eval]
39572#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
39573#[cfg_attr(
39574    all(feature = "serde", feature = "alloc"),
39575    serde_with::serde_as,
39576    derive(serde::Serialize, serde::Deserialize),
39577    serde(rename_all = "snake_case")
39578)]
39579#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
39580pub struct ManageOfferSuccessResult {
39581    pub offers_claimed: VecM<ClaimAtom>,
39582    pub offer: ManageOfferSuccessResultOffer,
39583}
39584
39585impl ReadXdr for ManageOfferSuccessResult {
39586    #[cfg(feature = "std")]
39587    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
39588        r.with_limited_depth(|r| {
39589            Ok(Self {
39590                offers_claimed: VecM::<ClaimAtom>::read_xdr(r)?,
39591                offer: ManageOfferSuccessResultOffer::read_xdr(r)?,
39592            })
39593        })
39594    }
39595}
39596
39597impl WriteXdr for ManageOfferSuccessResult {
39598    #[cfg(feature = "std")]
39599    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
39600        w.with_limited_depth(|w| {
39601            self.offers_claimed.write_xdr(w)?;
39602            self.offer.write_xdr(w)?;
39603            Ok(())
39604        })
39605    }
39606}
39607
39608/// ManageSellOfferResult is an XDR Union defines as:
39609///
39610/// ```text
39611/// union ManageSellOfferResult switch (ManageSellOfferResultCode code)
39612/// {
39613/// case MANAGE_SELL_OFFER_SUCCESS:
39614///     ManageOfferSuccessResult success;
39615/// case MANAGE_SELL_OFFER_MALFORMED:
39616/// case MANAGE_SELL_OFFER_SELL_NO_TRUST:
39617/// case MANAGE_SELL_OFFER_BUY_NO_TRUST:
39618/// case MANAGE_SELL_OFFER_SELL_NOT_AUTHORIZED:
39619/// case MANAGE_SELL_OFFER_BUY_NOT_AUTHORIZED:
39620/// case MANAGE_SELL_OFFER_LINE_FULL:
39621/// case MANAGE_SELL_OFFER_UNDERFUNDED:
39622/// case MANAGE_SELL_OFFER_CROSS_SELF:
39623/// case MANAGE_SELL_OFFER_SELL_NO_ISSUER:
39624/// case MANAGE_SELL_OFFER_BUY_NO_ISSUER:
39625/// case MANAGE_SELL_OFFER_NOT_FOUND:
39626/// case MANAGE_SELL_OFFER_LOW_RESERVE:
39627///     void;
39628/// };
39629/// ```
39630///
39631// union with discriminant ManageSellOfferResultCode
39632#[cfg_eval::cfg_eval]
39633#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
39634#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
39635#[cfg_attr(
39636    all(feature = "serde", feature = "alloc"),
39637    serde_with::serde_as,
39638    derive(serde::Serialize, serde::Deserialize),
39639    serde(rename_all = "snake_case")
39640)]
39641#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
39642#[allow(clippy::large_enum_variant)]
39643pub enum ManageSellOfferResult {
39644    Success(ManageOfferSuccessResult),
39645    Malformed,
39646    SellNoTrust,
39647    BuyNoTrust,
39648    SellNotAuthorized,
39649    BuyNotAuthorized,
39650    LineFull,
39651    Underfunded,
39652    CrossSelf,
39653    SellNoIssuer,
39654    BuyNoIssuer,
39655    NotFound,
39656    LowReserve,
39657}
39658
39659#[cfg(feature = "alloc")]
39660impl Default for ManageSellOfferResult {
39661    fn default() -> Self {
39662        Self::Success(ManageOfferSuccessResult::default())
39663    }
39664}
39665
39666impl ManageSellOfferResult {
39667    pub const VARIANTS: [ManageSellOfferResultCode; 13] = [
39668        ManageSellOfferResultCode::Success,
39669        ManageSellOfferResultCode::Malformed,
39670        ManageSellOfferResultCode::SellNoTrust,
39671        ManageSellOfferResultCode::BuyNoTrust,
39672        ManageSellOfferResultCode::SellNotAuthorized,
39673        ManageSellOfferResultCode::BuyNotAuthorized,
39674        ManageSellOfferResultCode::LineFull,
39675        ManageSellOfferResultCode::Underfunded,
39676        ManageSellOfferResultCode::CrossSelf,
39677        ManageSellOfferResultCode::SellNoIssuer,
39678        ManageSellOfferResultCode::BuyNoIssuer,
39679        ManageSellOfferResultCode::NotFound,
39680        ManageSellOfferResultCode::LowReserve,
39681    ];
39682    pub const VARIANTS_STR: [&'static str; 13] = [
39683        "Success",
39684        "Malformed",
39685        "SellNoTrust",
39686        "BuyNoTrust",
39687        "SellNotAuthorized",
39688        "BuyNotAuthorized",
39689        "LineFull",
39690        "Underfunded",
39691        "CrossSelf",
39692        "SellNoIssuer",
39693        "BuyNoIssuer",
39694        "NotFound",
39695        "LowReserve",
39696    ];
39697
39698    #[must_use]
39699    pub const fn name(&self) -> &'static str {
39700        match self {
39701            Self::Success(_) => "Success",
39702            Self::Malformed => "Malformed",
39703            Self::SellNoTrust => "SellNoTrust",
39704            Self::BuyNoTrust => "BuyNoTrust",
39705            Self::SellNotAuthorized => "SellNotAuthorized",
39706            Self::BuyNotAuthorized => "BuyNotAuthorized",
39707            Self::LineFull => "LineFull",
39708            Self::Underfunded => "Underfunded",
39709            Self::CrossSelf => "CrossSelf",
39710            Self::SellNoIssuer => "SellNoIssuer",
39711            Self::BuyNoIssuer => "BuyNoIssuer",
39712            Self::NotFound => "NotFound",
39713            Self::LowReserve => "LowReserve",
39714        }
39715    }
39716
39717    #[must_use]
39718    pub const fn discriminant(&self) -> ManageSellOfferResultCode {
39719        #[allow(clippy::match_same_arms)]
39720        match self {
39721            Self::Success(_) => ManageSellOfferResultCode::Success,
39722            Self::Malformed => ManageSellOfferResultCode::Malformed,
39723            Self::SellNoTrust => ManageSellOfferResultCode::SellNoTrust,
39724            Self::BuyNoTrust => ManageSellOfferResultCode::BuyNoTrust,
39725            Self::SellNotAuthorized => ManageSellOfferResultCode::SellNotAuthorized,
39726            Self::BuyNotAuthorized => ManageSellOfferResultCode::BuyNotAuthorized,
39727            Self::LineFull => ManageSellOfferResultCode::LineFull,
39728            Self::Underfunded => ManageSellOfferResultCode::Underfunded,
39729            Self::CrossSelf => ManageSellOfferResultCode::CrossSelf,
39730            Self::SellNoIssuer => ManageSellOfferResultCode::SellNoIssuer,
39731            Self::BuyNoIssuer => ManageSellOfferResultCode::BuyNoIssuer,
39732            Self::NotFound => ManageSellOfferResultCode::NotFound,
39733            Self::LowReserve => ManageSellOfferResultCode::LowReserve,
39734        }
39735    }
39736
39737    #[must_use]
39738    pub const fn variants() -> [ManageSellOfferResultCode; 13] {
39739        Self::VARIANTS
39740    }
39741}
39742
39743impl Name for ManageSellOfferResult {
39744    #[must_use]
39745    fn name(&self) -> &'static str {
39746        Self::name(self)
39747    }
39748}
39749
39750impl Discriminant<ManageSellOfferResultCode> for ManageSellOfferResult {
39751    #[must_use]
39752    fn discriminant(&self) -> ManageSellOfferResultCode {
39753        Self::discriminant(self)
39754    }
39755}
39756
39757impl Variants<ManageSellOfferResultCode> for ManageSellOfferResult {
39758    fn variants() -> slice::Iter<'static, ManageSellOfferResultCode> {
39759        Self::VARIANTS.iter()
39760    }
39761}
39762
39763impl Union<ManageSellOfferResultCode> for ManageSellOfferResult {}
39764
39765impl ReadXdr for ManageSellOfferResult {
39766    #[cfg(feature = "std")]
39767    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
39768        r.with_limited_depth(|r| {
39769            let dv: ManageSellOfferResultCode =
39770                <ManageSellOfferResultCode as ReadXdr>::read_xdr(r)?;
39771            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
39772            let v = match dv {
39773                ManageSellOfferResultCode::Success => {
39774                    Self::Success(ManageOfferSuccessResult::read_xdr(r)?)
39775                }
39776                ManageSellOfferResultCode::Malformed => Self::Malformed,
39777                ManageSellOfferResultCode::SellNoTrust => Self::SellNoTrust,
39778                ManageSellOfferResultCode::BuyNoTrust => Self::BuyNoTrust,
39779                ManageSellOfferResultCode::SellNotAuthorized => Self::SellNotAuthorized,
39780                ManageSellOfferResultCode::BuyNotAuthorized => Self::BuyNotAuthorized,
39781                ManageSellOfferResultCode::LineFull => Self::LineFull,
39782                ManageSellOfferResultCode::Underfunded => Self::Underfunded,
39783                ManageSellOfferResultCode::CrossSelf => Self::CrossSelf,
39784                ManageSellOfferResultCode::SellNoIssuer => Self::SellNoIssuer,
39785                ManageSellOfferResultCode::BuyNoIssuer => Self::BuyNoIssuer,
39786                ManageSellOfferResultCode::NotFound => Self::NotFound,
39787                ManageSellOfferResultCode::LowReserve => Self::LowReserve,
39788                #[allow(unreachable_patterns)]
39789                _ => return Err(Error::Invalid),
39790            };
39791            Ok(v)
39792        })
39793    }
39794}
39795
39796impl WriteXdr for ManageSellOfferResult {
39797    #[cfg(feature = "std")]
39798    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
39799        w.with_limited_depth(|w| {
39800            self.discriminant().write_xdr(w)?;
39801            #[allow(clippy::match_same_arms)]
39802            match self {
39803                Self::Success(v) => v.write_xdr(w)?,
39804                Self::Malformed => ().write_xdr(w)?,
39805                Self::SellNoTrust => ().write_xdr(w)?,
39806                Self::BuyNoTrust => ().write_xdr(w)?,
39807                Self::SellNotAuthorized => ().write_xdr(w)?,
39808                Self::BuyNotAuthorized => ().write_xdr(w)?,
39809                Self::LineFull => ().write_xdr(w)?,
39810                Self::Underfunded => ().write_xdr(w)?,
39811                Self::CrossSelf => ().write_xdr(w)?,
39812                Self::SellNoIssuer => ().write_xdr(w)?,
39813                Self::BuyNoIssuer => ().write_xdr(w)?,
39814                Self::NotFound => ().write_xdr(w)?,
39815                Self::LowReserve => ().write_xdr(w)?,
39816            };
39817            Ok(())
39818        })
39819    }
39820}
39821
39822/// ManageBuyOfferResultCode is an XDR Enum defines as:
39823///
39824/// ```text
39825/// enum ManageBuyOfferResultCode
39826/// {
39827///     // codes considered as "success" for the operation
39828///     MANAGE_BUY_OFFER_SUCCESS = 0,
39829///
39830///     // codes considered as "failure" for the operation
39831///     MANAGE_BUY_OFFER_MALFORMED = -1,     // generated offer would be invalid
39832///     MANAGE_BUY_OFFER_SELL_NO_TRUST = -2, // no trust line for what we're selling
39833///     MANAGE_BUY_OFFER_BUY_NO_TRUST = -3,  // no trust line for what we're buying
39834///     MANAGE_BUY_OFFER_SELL_NOT_AUTHORIZED = -4, // not authorized to sell
39835///     MANAGE_BUY_OFFER_BUY_NOT_AUTHORIZED = -5,  // not authorized to buy
39836///     MANAGE_BUY_OFFER_LINE_FULL = -6,   // can't receive more of what it's buying
39837///     MANAGE_BUY_OFFER_UNDERFUNDED = -7, // doesn't hold what it's trying to sell
39838///     MANAGE_BUY_OFFER_CROSS_SELF = -8, // would cross an offer from the same user
39839///     MANAGE_BUY_OFFER_SELL_NO_ISSUER = -9, // no issuer for what we're selling
39840///     MANAGE_BUY_OFFER_BUY_NO_ISSUER = -10, // no issuer for what we're buying
39841///
39842///     // update errors
39843///     MANAGE_BUY_OFFER_NOT_FOUND =
39844///         -11, // offerID does not match an existing offer
39845///
39846///     MANAGE_BUY_OFFER_LOW_RESERVE = -12 // not enough funds to create a new Offer
39847/// };
39848/// ```
39849///
39850// enum
39851#[cfg_attr(feature = "alloc", derive(Default))]
39852#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
39853#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
39854#[cfg_attr(
39855    all(feature = "serde", feature = "alloc"),
39856    derive(serde::Serialize, serde::Deserialize),
39857    serde(rename_all = "snake_case")
39858)]
39859#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
39860#[repr(i32)]
39861pub enum ManageBuyOfferResultCode {
39862    #[cfg_attr(feature = "alloc", default)]
39863    Success = 0,
39864    Malformed = -1,
39865    SellNoTrust = -2,
39866    BuyNoTrust = -3,
39867    SellNotAuthorized = -4,
39868    BuyNotAuthorized = -5,
39869    LineFull = -6,
39870    Underfunded = -7,
39871    CrossSelf = -8,
39872    SellNoIssuer = -9,
39873    BuyNoIssuer = -10,
39874    NotFound = -11,
39875    LowReserve = -12,
39876}
39877
39878impl ManageBuyOfferResultCode {
39879    pub const VARIANTS: [ManageBuyOfferResultCode; 13] = [
39880        ManageBuyOfferResultCode::Success,
39881        ManageBuyOfferResultCode::Malformed,
39882        ManageBuyOfferResultCode::SellNoTrust,
39883        ManageBuyOfferResultCode::BuyNoTrust,
39884        ManageBuyOfferResultCode::SellNotAuthorized,
39885        ManageBuyOfferResultCode::BuyNotAuthorized,
39886        ManageBuyOfferResultCode::LineFull,
39887        ManageBuyOfferResultCode::Underfunded,
39888        ManageBuyOfferResultCode::CrossSelf,
39889        ManageBuyOfferResultCode::SellNoIssuer,
39890        ManageBuyOfferResultCode::BuyNoIssuer,
39891        ManageBuyOfferResultCode::NotFound,
39892        ManageBuyOfferResultCode::LowReserve,
39893    ];
39894    pub const VARIANTS_STR: [&'static str; 13] = [
39895        "Success",
39896        "Malformed",
39897        "SellNoTrust",
39898        "BuyNoTrust",
39899        "SellNotAuthorized",
39900        "BuyNotAuthorized",
39901        "LineFull",
39902        "Underfunded",
39903        "CrossSelf",
39904        "SellNoIssuer",
39905        "BuyNoIssuer",
39906        "NotFound",
39907        "LowReserve",
39908    ];
39909
39910    #[must_use]
39911    pub const fn name(&self) -> &'static str {
39912        match self {
39913            Self::Success => "Success",
39914            Self::Malformed => "Malformed",
39915            Self::SellNoTrust => "SellNoTrust",
39916            Self::BuyNoTrust => "BuyNoTrust",
39917            Self::SellNotAuthorized => "SellNotAuthorized",
39918            Self::BuyNotAuthorized => "BuyNotAuthorized",
39919            Self::LineFull => "LineFull",
39920            Self::Underfunded => "Underfunded",
39921            Self::CrossSelf => "CrossSelf",
39922            Self::SellNoIssuer => "SellNoIssuer",
39923            Self::BuyNoIssuer => "BuyNoIssuer",
39924            Self::NotFound => "NotFound",
39925            Self::LowReserve => "LowReserve",
39926        }
39927    }
39928
39929    #[must_use]
39930    pub const fn variants() -> [ManageBuyOfferResultCode; 13] {
39931        Self::VARIANTS
39932    }
39933}
39934
39935impl Name for ManageBuyOfferResultCode {
39936    #[must_use]
39937    fn name(&self) -> &'static str {
39938        Self::name(self)
39939    }
39940}
39941
39942impl Variants<ManageBuyOfferResultCode> for ManageBuyOfferResultCode {
39943    fn variants() -> slice::Iter<'static, ManageBuyOfferResultCode> {
39944        Self::VARIANTS.iter()
39945    }
39946}
39947
39948impl Enum for ManageBuyOfferResultCode {}
39949
39950impl fmt::Display for ManageBuyOfferResultCode {
39951    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
39952        f.write_str(self.name())
39953    }
39954}
39955
39956impl TryFrom<i32> for ManageBuyOfferResultCode {
39957    type Error = Error;
39958
39959    fn try_from(i: i32) -> Result<Self, Error> {
39960        let e = match i {
39961            0 => ManageBuyOfferResultCode::Success,
39962            -1 => ManageBuyOfferResultCode::Malformed,
39963            -2 => ManageBuyOfferResultCode::SellNoTrust,
39964            -3 => ManageBuyOfferResultCode::BuyNoTrust,
39965            -4 => ManageBuyOfferResultCode::SellNotAuthorized,
39966            -5 => ManageBuyOfferResultCode::BuyNotAuthorized,
39967            -6 => ManageBuyOfferResultCode::LineFull,
39968            -7 => ManageBuyOfferResultCode::Underfunded,
39969            -8 => ManageBuyOfferResultCode::CrossSelf,
39970            -9 => ManageBuyOfferResultCode::SellNoIssuer,
39971            -10 => ManageBuyOfferResultCode::BuyNoIssuer,
39972            -11 => ManageBuyOfferResultCode::NotFound,
39973            -12 => ManageBuyOfferResultCode::LowReserve,
39974            #[allow(unreachable_patterns)]
39975            _ => return Err(Error::Invalid),
39976        };
39977        Ok(e)
39978    }
39979}
39980
39981impl From<ManageBuyOfferResultCode> for i32 {
39982    #[must_use]
39983    fn from(e: ManageBuyOfferResultCode) -> Self {
39984        e as Self
39985    }
39986}
39987
39988impl ReadXdr for ManageBuyOfferResultCode {
39989    #[cfg(feature = "std")]
39990    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
39991        r.with_limited_depth(|r| {
39992            let e = i32::read_xdr(r)?;
39993            let v: Self = e.try_into()?;
39994            Ok(v)
39995        })
39996    }
39997}
39998
39999impl WriteXdr for ManageBuyOfferResultCode {
40000    #[cfg(feature = "std")]
40001    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
40002        w.with_limited_depth(|w| {
40003            let i: i32 = (*self).into();
40004            i.write_xdr(w)
40005        })
40006    }
40007}
40008
40009/// ManageBuyOfferResult is an XDR Union defines as:
40010///
40011/// ```text
40012/// union ManageBuyOfferResult switch (ManageBuyOfferResultCode code)
40013/// {
40014/// case MANAGE_BUY_OFFER_SUCCESS:
40015///     ManageOfferSuccessResult success;
40016/// case MANAGE_BUY_OFFER_MALFORMED:
40017/// case MANAGE_BUY_OFFER_SELL_NO_TRUST:
40018/// case MANAGE_BUY_OFFER_BUY_NO_TRUST:
40019/// case MANAGE_BUY_OFFER_SELL_NOT_AUTHORIZED:
40020/// case MANAGE_BUY_OFFER_BUY_NOT_AUTHORIZED:
40021/// case MANAGE_BUY_OFFER_LINE_FULL:
40022/// case MANAGE_BUY_OFFER_UNDERFUNDED:
40023/// case MANAGE_BUY_OFFER_CROSS_SELF:
40024/// case MANAGE_BUY_OFFER_SELL_NO_ISSUER:
40025/// case MANAGE_BUY_OFFER_BUY_NO_ISSUER:
40026/// case MANAGE_BUY_OFFER_NOT_FOUND:
40027/// case MANAGE_BUY_OFFER_LOW_RESERVE:
40028///     void;
40029/// };
40030/// ```
40031///
40032// union with discriminant ManageBuyOfferResultCode
40033#[cfg_eval::cfg_eval]
40034#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
40035#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
40036#[cfg_attr(
40037    all(feature = "serde", feature = "alloc"),
40038    serde_with::serde_as,
40039    derive(serde::Serialize, serde::Deserialize),
40040    serde(rename_all = "snake_case")
40041)]
40042#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
40043#[allow(clippy::large_enum_variant)]
40044pub enum ManageBuyOfferResult {
40045    Success(ManageOfferSuccessResult),
40046    Malformed,
40047    SellNoTrust,
40048    BuyNoTrust,
40049    SellNotAuthorized,
40050    BuyNotAuthorized,
40051    LineFull,
40052    Underfunded,
40053    CrossSelf,
40054    SellNoIssuer,
40055    BuyNoIssuer,
40056    NotFound,
40057    LowReserve,
40058}
40059
40060#[cfg(feature = "alloc")]
40061impl Default for ManageBuyOfferResult {
40062    fn default() -> Self {
40063        Self::Success(ManageOfferSuccessResult::default())
40064    }
40065}
40066
40067impl ManageBuyOfferResult {
40068    pub const VARIANTS: [ManageBuyOfferResultCode; 13] = [
40069        ManageBuyOfferResultCode::Success,
40070        ManageBuyOfferResultCode::Malformed,
40071        ManageBuyOfferResultCode::SellNoTrust,
40072        ManageBuyOfferResultCode::BuyNoTrust,
40073        ManageBuyOfferResultCode::SellNotAuthorized,
40074        ManageBuyOfferResultCode::BuyNotAuthorized,
40075        ManageBuyOfferResultCode::LineFull,
40076        ManageBuyOfferResultCode::Underfunded,
40077        ManageBuyOfferResultCode::CrossSelf,
40078        ManageBuyOfferResultCode::SellNoIssuer,
40079        ManageBuyOfferResultCode::BuyNoIssuer,
40080        ManageBuyOfferResultCode::NotFound,
40081        ManageBuyOfferResultCode::LowReserve,
40082    ];
40083    pub const VARIANTS_STR: [&'static str; 13] = [
40084        "Success",
40085        "Malformed",
40086        "SellNoTrust",
40087        "BuyNoTrust",
40088        "SellNotAuthorized",
40089        "BuyNotAuthorized",
40090        "LineFull",
40091        "Underfunded",
40092        "CrossSelf",
40093        "SellNoIssuer",
40094        "BuyNoIssuer",
40095        "NotFound",
40096        "LowReserve",
40097    ];
40098
40099    #[must_use]
40100    pub const fn name(&self) -> &'static str {
40101        match self {
40102            Self::Success(_) => "Success",
40103            Self::Malformed => "Malformed",
40104            Self::SellNoTrust => "SellNoTrust",
40105            Self::BuyNoTrust => "BuyNoTrust",
40106            Self::SellNotAuthorized => "SellNotAuthorized",
40107            Self::BuyNotAuthorized => "BuyNotAuthorized",
40108            Self::LineFull => "LineFull",
40109            Self::Underfunded => "Underfunded",
40110            Self::CrossSelf => "CrossSelf",
40111            Self::SellNoIssuer => "SellNoIssuer",
40112            Self::BuyNoIssuer => "BuyNoIssuer",
40113            Self::NotFound => "NotFound",
40114            Self::LowReserve => "LowReserve",
40115        }
40116    }
40117
40118    #[must_use]
40119    pub const fn discriminant(&self) -> ManageBuyOfferResultCode {
40120        #[allow(clippy::match_same_arms)]
40121        match self {
40122            Self::Success(_) => ManageBuyOfferResultCode::Success,
40123            Self::Malformed => ManageBuyOfferResultCode::Malformed,
40124            Self::SellNoTrust => ManageBuyOfferResultCode::SellNoTrust,
40125            Self::BuyNoTrust => ManageBuyOfferResultCode::BuyNoTrust,
40126            Self::SellNotAuthorized => ManageBuyOfferResultCode::SellNotAuthorized,
40127            Self::BuyNotAuthorized => ManageBuyOfferResultCode::BuyNotAuthorized,
40128            Self::LineFull => ManageBuyOfferResultCode::LineFull,
40129            Self::Underfunded => ManageBuyOfferResultCode::Underfunded,
40130            Self::CrossSelf => ManageBuyOfferResultCode::CrossSelf,
40131            Self::SellNoIssuer => ManageBuyOfferResultCode::SellNoIssuer,
40132            Self::BuyNoIssuer => ManageBuyOfferResultCode::BuyNoIssuer,
40133            Self::NotFound => ManageBuyOfferResultCode::NotFound,
40134            Self::LowReserve => ManageBuyOfferResultCode::LowReserve,
40135        }
40136    }
40137
40138    #[must_use]
40139    pub const fn variants() -> [ManageBuyOfferResultCode; 13] {
40140        Self::VARIANTS
40141    }
40142}
40143
40144impl Name for ManageBuyOfferResult {
40145    #[must_use]
40146    fn name(&self) -> &'static str {
40147        Self::name(self)
40148    }
40149}
40150
40151impl Discriminant<ManageBuyOfferResultCode> for ManageBuyOfferResult {
40152    #[must_use]
40153    fn discriminant(&self) -> ManageBuyOfferResultCode {
40154        Self::discriminant(self)
40155    }
40156}
40157
40158impl Variants<ManageBuyOfferResultCode> for ManageBuyOfferResult {
40159    fn variants() -> slice::Iter<'static, ManageBuyOfferResultCode> {
40160        Self::VARIANTS.iter()
40161    }
40162}
40163
40164impl Union<ManageBuyOfferResultCode> for ManageBuyOfferResult {}
40165
40166impl ReadXdr for ManageBuyOfferResult {
40167    #[cfg(feature = "std")]
40168    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
40169        r.with_limited_depth(|r| {
40170            let dv: ManageBuyOfferResultCode = <ManageBuyOfferResultCode as ReadXdr>::read_xdr(r)?;
40171            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
40172            let v = match dv {
40173                ManageBuyOfferResultCode::Success => {
40174                    Self::Success(ManageOfferSuccessResult::read_xdr(r)?)
40175                }
40176                ManageBuyOfferResultCode::Malformed => Self::Malformed,
40177                ManageBuyOfferResultCode::SellNoTrust => Self::SellNoTrust,
40178                ManageBuyOfferResultCode::BuyNoTrust => Self::BuyNoTrust,
40179                ManageBuyOfferResultCode::SellNotAuthorized => Self::SellNotAuthorized,
40180                ManageBuyOfferResultCode::BuyNotAuthorized => Self::BuyNotAuthorized,
40181                ManageBuyOfferResultCode::LineFull => Self::LineFull,
40182                ManageBuyOfferResultCode::Underfunded => Self::Underfunded,
40183                ManageBuyOfferResultCode::CrossSelf => Self::CrossSelf,
40184                ManageBuyOfferResultCode::SellNoIssuer => Self::SellNoIssuer,
40185                ManageBuyOfferResultCode::BuyNoIssuer => Self::BuyNoIssuer,
40186                ManageBuyOfferResultCode::NotFound => Self::NotFound,
40187                ManageBuyOfferResultCode::LowReserve => Self::LowReserve,
40188                #[allow(unreachable_patterns)]
40189                _ => return Err(Error::Invalid),
40190            };
40191            Ok(v)
40192        })
40193    }
40194}
40195
40196impl WriteXdr for ManageBuyOfferResult {
40197    #[cfg(feature = "std")]
40198    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
40199        w.with_limited_depth(|w| {
40200            self.discriminant().write_xdr(w)?;
40201            #[allow(clippy::match_same_arms)]
40202            match self {
40203                Self::Success(v) => v.write_xdr(w)?,
40204                Self::Malformed => ().write_xdr(w)?,
40205                Self::SellNoTrust => ().write_xdr(w)?,
40206                Self::BuyNoTrust => ().write_xdr(w)?,
40207                Self::SellNotAuthorized => ().write_xdr(w)?,
40208                Self::BuyNotAuthorized => ().write_xdr(w)?,
40209                Self::LineFull => ().write_xdr(w)?,
40210                Self::Underfunded => ().write_xdr(w)?,
40211                Self::CrossSelf => ().write_xdr(w)?,
40212                Self::SellNoIssuer => ().write_xdr(w)?,
40213                Self::BuyNoIssuer => ().write_xdr(w)?,
40214                Self::NotFound => ().write_xdr(w)?,
40215                Self::LowReserve => ().write_xdr(w)?,
40216            };
40217            Ok(())
40218        })
40219    }
40220}
40221
40222/// SetOptionsResultCode is an XDR Enum defines as:
40223///
40224/// ```text
40225/// enum SetOptionsResultCode
40226/// {
40227///     // codes considered as "success" for the operation
40228///     SET_OPTIONS_SUCCESS = 0,
40229///     // codes considered as "failure" for the operation
40230///     SET_OPTIONS_LOW_RESERVE = -1,      // not enough funds to add a signer
40231///     SET_OPTIONS_TOO_MANY_SIGNERS = -2, // max number of signers already reached
40232///     SET_OPTIONS_BAD_FLAGS = -3,        // invalid combination of clear/set flags
40233///     SET_OPTIONS_INVALID_INFLATION = -4,      // inflation account does not exist
40234///     SET_OPTIONS_CANT_CHANGE = -5,            // can no longer change this option
40235///     SET_OPTIONS_UNKNOWN_FLAG = -6,           // can't set an unknown flag
40236///     SET_OPTIONS_THRESHOLD_OUT_OF_RANGE = -7, // bad value for weight/threshold
40237///     SET_OPTIONS_BAD_SIGNER = -8,             // signer cannot be masterkey
40238///     SET_OPTIONS_INVALID_HOME_DOMAIN = -9,    // malformed home domain
40239///     SET_OPTIONS_AUTH_REVOCABLE_REQUIRED =
40240///         -10 // auth revocable is required for clawback
40241/// };
40242/// ```
40243///
40244// enum
40245#[cfg_attr(feature = "alloc", derive(Default))]
40246#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
40247#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
40248#[cfg_attr(
40249    all(feature = "serde", feature = "alloc"),
40250    derive(serde::Serialize, serde::Deserialize),
40251    serde(rename_all = "snake_case")
40252)]
40253#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
40254#[repr(i32)]
40255pub enum SetOptionsResultCode {
40256    #[cfg_attr(feature = "alloc", default)]
40257    Success = 0,
40258    LowReserve = -1,
40259    TooManySigners = -2,
40260    BadFlags = -3,
40261    InvalidInflation = -4,
40262    CantChange = -5,
40263    UnknownFlag = -6,
40264    ThresholdOutOfRange = -7,
40265    BadSigner = -8,
40266    InvalidHomeDomain = -9,
40267    AuthRevocableRequired = -10,
40268}
40269
40270impl SetOptionsResultCode {
40271    pub const VARIANTS: [SetOptionsResultCode; 11] = [
40272        SetOptionsResultCode::Success,
40273        SetOptionsResultCode::LowReserve,
40274        SetOptionsResultCode::TooManySigners,
40275        SetOptionsResultCode::BadFlags,
40276        SetOptionsResultCode::InvalidInflation,
40277        SetOptionsResultCode::CantChange,
40278        SetOptionsResultCode::UnknownFlag,
40279        SetOptionsResultCode::ThresholdOutOfRange,
40280        SetOptionsResultCode::BadSigner,
40281        SetOptionsResultCode::InvalidHomeDomain,
40282        SetOptionsResultCode::AuthRevocableRequired,
40283    ];
40284    pub const VARIANTS_STR: [&'static str; 11] = [
40285        "Success",
40286        "LowReserve",
40287        "TooManySigners",
40288        "BadFlags",
40289        "InvalidInflation",
40290        "CantChange",
40291        "UnknownFlag",
40292        "ThresholdOutOfRange",
40293        "BadSigner",
40294        "InvalidHomeDomain",
40295        "AuthRevocableRequired",
40296    ];
40297
40298    #[must_use]
40299    pub const fn name(&self) -> &'static str {
40300        match self {
40301            Self::Success => "Success",
40302            Self::LowReserve => "LowReserve",
40303            Self::TooManySigners => "TooManySigners",
40304            Self::BadFlags => "BadFlags",
40305            Self::InvalidInflation => "InvalidInflation",
40306            Self::CantChange => "CantChange",
40307            Self::UnknownFlag => "UnknownFlag",
40308            Self::ThresholdOutOfRange => "ThresholdOutOfRange",
40309            Self::BadSigner => "BadSigner",
40310            Self::InvalidHomeDomain => "InvalidHomeDomain",
40311            Self::AuthRevocableRequired => "AuthRevocableRequired",
40312        }
40313    }
40314
40315    #[must_use]
40316    pub const fn variants() -> [SetOptionsResultCode; 11] {
40317        Self::VARIANTS
40318    }
40319}
40320
40321impl Name for SetOptionsResultCode {
40322    #[must_use]
40323    fn name(&self) -> &'static str {
40324        Self::name(self)
40325    }
40326}
40327
40328impl Variants<SetOptionsResultCode> for SetOptionsResultCode {
40329    fn variants() -> slice::Iter<'static, SetOptionsResultCode> {
40330        Self::VARIANTS.iter()
40331    }
40332}
40333
40334impl Enum for SetOptionsResultCode {}
40335
40336impl fmt::Display for SetOptionsResultCode {
40337    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40338        f.write_str(self.name())
40339    }
40340}
40341
40342impl TryFrom<i32> for SetOptionsResultCode {
40343    type Error = Error;
40344
40345    fn try_from(i: i32) -> Result<Self, Error> {
40346        let e = match i {
40347            0 => SetOptionsResultCode::Success,
40348            -1 => SetOptionsResultCode::LowReserve,
40349            -2 => SetOptionsResultCode::TooManySigners,
40350            -3 => SetOptionsResultCode::BadFlags,
40351            -4 => SetOptionsResultCode::InvalidInflation,
40352            -5 => SetOptionsResultCode::CantChange,
40353            -6 => SetOptionsResultCode::UnknownFlag,
40354            -7 => SetOptionsResultCode::ThresholdOutOfRange,
40355            -8 => SetOptionsResultCode::BadSigner,
40356            -9 => SetOptionsResultCode::InvalidHomeDomain,
40357            -10 => SetOptionsResultCode::AuthRevocableRequired,
40358            #[allow(unreachable_patterns)]
40359            _ => return Err(Error::Invalid),
40360        };
40361        Ok(e)
40362    }
40363}
40364
40365impl From<SetOptionsResultCode> for i32 {
40366    #[must_use]
40367    fn from(e: SetOptionsResultCode) -> Self {
40368        e as Self
40369    }
40370}
40371
40372impl ReadXdr for SetOptionsResultCode {
40373    #[cfg(feature = "std")]
40374    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
40375        r.with_limited_depth(|r| {
40376            let e = i32::read_xdr(r)?;
40377            let v: Self = e.try_into()?;
40378            Ok(v)
40379        })
40380    }
40381}
40382
40383impl WriteXdr for SetOptionsResultCode {
40384    #[cfg(feature = "std")]
40385    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
40386        w.with_limited_depth(|w| {
40387            let i: i32 = (*self).into();
40388            i.write_xdr(w)
40389        })
40390    }
40391}
40392
40393/// SetOptionsResult is an XDR Union defines as:
40394///
40395/// ```text
40396/// union SetOptionsResult switch (SetOptionsResultCode code)
40397/// {
40398/// case SET_OPTIONS_SUCCESS:
40399///     void;
40400/// case SET_OPTIONS_LOW_RESERVE:
40401/// case SET_OPTIONS_TOO_MANY_SIGNERS:
40402/// case SET_OPTIONS_BAD_FLAGS:
40403/// case SET_OPTIONS_INVALID_INFLATION:
40404/// case SET_OPTIONS_CANT_CHANGE:
40405/// case SET_OPTIONS_UNKNOWN_FLAG:
40406/// case SET_OPTIONS_THRESHOLD_OUT_OF_RANGE:
40407/// case SET_OPTIONS_BAD_SIGNER:
40408/// case SET_OPTIONS_INVALID_HOME_DOMAIN:
40409/// case SET_OPTIONS_AUTH_REVOCABLE_REQUIRED:
40410///     void;
40411/// };
40412/// ```
40413///
40414// union with discriminant SetOptionsResultCode
40415#[cfg_eval::cfg_eval]
40416#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
40417#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
40418#[cfg_attr(
40419    all(feature = "serde", feature = "alloc"),
40420    serde_with::serde_as,
40421    derive(serde::Serialize, serde::Deserialize),
40422    serde(rename_all = "snake_case")
40423)]
40424#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
40425#[allow(clippy::large_enum_variant)]
40426pub enum SetOptionsResult {
40427    Success,
40428    LowReserve,
40429    TooManySigners,
40430    BadFlags,
40431    InvalidInflation,
40432    CantChange,
40433    UnknownFlag,
40434    ThresholdOutOfRange,
40435    BadSigner,
40436    InvalidHomeDomain,
40437    AuthRevocableRequired,
40438}
40439
40440#[cfg(feature = "alloc")]
40441impl Default for SetOptionsResult {
40442    fn default() -> Self {
40443        Self::Success
40444    }
40445}
40446
40447impl SetOptionsResult {
40448    pub const VARIANTS: [SetOptionsResultCode; 11] = [
40449        SetOptionsResultCode::Success,
40450        SetOptionsResultCode::LowReserve,
40451        SetOptionsResultCode::TooManySigners,
40452        SetOptionsResultCode::BadFlags,
40453        SetOptionsResultCode::InvalidInflation,
40454        SetOptionsResultCode::CantChange,
40455        SetOptionsResultCode::UnknownFlag,
40456        SetOptionsResultCode::ThresholdOutOfRange,
40457        SetOptionsResultCode::BadSigner,
40458        SetOptionsResultCode::InvalidHomeDomain,
40459        SetOptionsResultCode::AuthRevocableRequired,
40460    ];
40461    pub const VARIANTS_STR: [&'static str; 11] = [
40462        "Success",
40463        "LowReserve",
40464        "TooManySigners",
40465        "BadFlags",
40466        "InvalidInflation",
40467        "CantChange",
40468        "UnknownFlag",
40469        "ThresholdOutOfRange",
40470        "BadSigner",
40471        "InvalidHomeDomain",
40472        "AuthRevocableRequired",
40473    ];
40474
40475    #[must_use]
40476    pub const fn name(&self) -> &'static str {
40477        match self {
40478            Self::Success => "Success",
40479            Self::LowReserve => "LowReserve",
40480            Self::TooManySigners => "TooManySigners",
40481            Self::BadFlags => "BadFlags",
40482            Self::InvalidInflation => "InvalidInflation",
40483            Self::CantChange => "CantChange",
40484            Self::UnknownFlag => "UnknownFlag",
40485            Self::ThresholdOutOfRange => "ThresholdOutOfRange",
40486            Self::BadSigner => "BadSigner",
40487            Self::InvalidHomeDomain => "InvalidHomeDomain",
40488            Self::AuthRevocableRequired => "AuthRevocableRequired",
40489        }
40490    }
40491
40492    #[must_use]
40493    pub const fn discriminant(&self) -> SetOptionsResultCode {
40494        #[allow(clippy::match_same_arms)]
40495        match self {
40496            Self::Success => SetOptionsResultCode::Success,
40497            Self::LowReserve => SetOptionsResultCode::LowReserve,
40498            Self::TooManySigners => SetOptionsResultCode::TooManySigners,
40499            Self::BadFlags => SetOptionsResultCode::BadFlags,
40500            Self::InvalidInflation => SetOptionsResultCode::InvalidInflation,
40501            Self::CantChange => SetOptionsResultCode::CantChange,
40502            Self::UnknownFlag => SetOptionsResultCode::UnknownFlag,
40503            Self::ThresholdOutOfRange => SetOptionsResultCode::ThresholdOutOfRange,
40504            Self::BadSigner => SetOptionsResultCode::BadSigner,
40505            Self::InvalidHomeDomain => SetOptionsResultCode::InvalidHomeDomain,
40506            Self::AuthRevocableRequired => SetOptionsResultCode::AuthRevocableRequired,
40507        }
40508    }
40509
40510    #[must_use]
40511    pub const fn variants() -> [SetOptionsResultCode; 11] {
40512        Self::VARIANTS
40513    }
40514}
40515
40516impl Name for SetOptionsResult {
40517    #[must_use]
40518    fn name(&self) -> &'static str {
40519        Self::name(self)
40520    }
40521}
40522
40523impl Discriminant<SetOptionsResultCode> for SetOptionsResult {
40524    #[must_use]
40525    fn discriminant(&self) -> SetOptionsResultCode {
40526        Self::discriminant(self)
40527    }
40528}
40529
40530impl Variants<SetOptionsResultCode> for SetOptionsResult {
40531    fn variants() -> slice::Iter<'static, SetOptionsResultCode> {
40532        Self::VARIANTS.iter()
40533    }
40534}
40535
40536impl Union<SetOptionsResultCode> for SetOptionsResult {}
40537
40538impl ReadXdr for SetOptionsResult {
40539    #[cfg(feature = "std")]
40540    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
40541        r.with_limited_depth(|r| {
40542            let dv: SetOptionsResultCode = <SetOptionsResultCode as ReadXdr>::read_xdr(r)?;
40543            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
40544            let v = match dv {
40545                SetOptionsResultCode::Success => Self::Success,
40546                SetOptionsResultCode::LowReserve => Self::LowReserve,
40547                SetOptionsResultCode::TooManySigners => Self::TooManySigners,
40548                SetOptionsResultCode::BadFlags => Self::BadFlags,
40549                SetOptionsResultCode::InvalidInflation => Self::InvalidInflation,
40550                SetOptionsResultCode::CantChange => Self::CantChange,
40551                SetOptionsResultCode::UnknownFlag => Self::UnknownFlag,
40552                SetOptionsResultCode::ThresholdOutOfRange => Self::ThresholdOutOfRange,
40553                SetOptionsResultCode::BadSigner => Self::BadSigner,
40554                SetOptionsResultCode::InvalidHomeDomain => Self::InvalidHomeDomain,
40555                SetOptionsResultCode::AuthRevocableRequired => Self::AuthRevocableRequired,
40556                #[allow(unreachable_patterns)]
40557                _ => return Err(Error::Invalid),
40558            };
40559            Ok(v)
40560        })
40561    }
40562}
40563
40564impl WriteXdr for SetOptionsResult {
40565    #[cfg(feature = "std")]
40566    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
40567        w.with_limited_depth(|w| {
40568            self.discriminant().write_xdr(w)?;
40569            #[allow(clippy::match_same_arms)]
40570            match self {
40571                Self::Success => ().write_xdr(w)?,
40572                Self::LowReserve => ().write_xdr(w)?,
40573                Self::TooManySigners => ().write_xdr(w)?,
40574                Self::BadFlags => ().write_xdr(w)?,
40575                Self::InvalidInflation => ().write_xdr(w)?,
40576                Self::CantChange => ().write_xdr(w)?,
40577                Self::UnknownFlag => ().write_xdr(w)?,
40578                Self::ThresholdOutOfRange => ().write_xdr(w)?,
40579                Self::BadSigner => ().write_xdr(w)?,
40580                Self::InvalidHomeDomain => ().write_xdr(w)?,
40581                Self::AuthRevocableRequired => ().write_xdr(w)?,
40582            };
40583            Ok(())
40584        })
40585    }
40586}
40587
40588/// ChangeTrustResultCode is an XDR Enum defines as:
40589///
40590/// ```text
40591/// enum ChangeTrustResultCode
40592/// {
40593///     // codes considered as "success" for the operation
40594///     CHANGE_TRUST_SUCCESS = 0,
40595///     // codes considered as "failure" for the operation
40596///     CHANGE_TRUST_MALFORMED = -1,     // bad input
40597///     CHANGE_TRUST_NO_ISSUER = -2,     // could not find issuer
40598///     CHANGE_TRUST_INVALID_LIMIT = -3, // cannot drop limit below balance
40599///                                      // cannot create with a limit of 0
40600///     CHANGE_TRUST_LOW_RESERVE =
40601///         -4, // not enough funds to create a new trust line,
40602///     CHANGE_TRUST_SELF_NOT_ALLOWED = -5,   // trusting self is not allowed
40603///     CHANGE_TRUST_TRUST_LINE_MISSING = -6, // Asset trustline is missing for pool
40604///     CHANGE_TRUST_CANNOT_DELETE =
40605///         -7, // Asset trustline is still referenced in a pool
40606///     CHANGE_TRUST_NOT_AUTH_MAINTAIN_LIABILITIES =
40607///         -8 // Asset trustline is deauthorized
40608/// };
40609/// ```
40610///
40611// enum
40612#[cfg_attr(feature = "alloc", derive(Default))]
40613#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
40614#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
40615#[cfg_attr(
40616    all(feature = "serde", feature = "alloc"),
40617    derive(serde::Serialize, serde::Deserialize),
40618    serde(rename_all = "snake_case")
40619)]
40620#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
40621#[repr(i32)]
40622pub enum ChangeTrustResultCode {
40623    #[cfg_attr(feature = "alloc", default)]
40624    Success = 0,
40625    Malformed = -1,
40626    NoIssuer = -2,
40627    InvalidLimit = -3,
40628    LowReserve = -4,
40629    SelfNotAllowed = -5,
40630    TrustLineMissing = -6,
40631    CannotDelete = -7,
40632    NotAuthMaintainLiabilities = -8,
40633}
40634
40635impl ChangeTrustResultCode {
40636    pub const VARIANTS: [ChangeTrustResultCode; 9] = [
40637        ChangeTrustResultCode::Success,
40638        ChangeTrustResultCode::Malformed,
40639        ChangeTrustResultCode::NoIssuer,
40640        ChangeTrustResultCode::InvalidLimit,
40641        ChangeTrustResultCode::LowReserve,
40642        ChangeTrustResultCode::SelfNotAllowed,
40643        ChangeTrustResultCode::TrustLineMissing,
40644        ChangeTrustResultCode::CannotDelete,
40645        ChangeTrustResultCode::NotAuthMaintainLiabilities,
40646    ];
40647    pub const VARIANTS_STR: [&'static str; 9] = [
40648        "Success",
40649        "Malformed",
40650        "NoIssuer",
40651        "InvalidLimit",
40652        "LowReserve",
40653        "SelfNotAllowed",
40654        "TrustLineMissing",
40655        "CannotDelete",
40656        "NotAuthMaintainLiabilities",
40657    ];
40658
40659    #[must_use]
40660    pub const fn name(&self) -> &'static str {
40661        match self {
40662            Self::Success => "Success",
40663            Self::Malformed => "Malformed",
40664            Self::NoIssuer => "NoIssuer",
40665            Self::InvalidLimit => "InvalidLimit",
40666            Self::LowReserve => "LowReserve",
40667            Self::SelfNotAllowed => "SelfNotAllowed",
40668            Self::TrustLineMissing => "TrustLineMissing",
40669            Self::CannotDelete => "CannotDelete",
40670            Self::NotAuthMaintainLiabilities => "NotAuthMaintainLiabilities",
40671        }
40672    }
40673
40674    #[must_use]
40675    pub const fn variants() -> [ChangeTrustResultCode; 9] {
40676        Self::VARIANTS
40677    }
40678}
40679
40680impl Name for ChangeTrustResultCode {
40681    #[must_use]
40682    fn name(&self) -> &'static str {
40683        Self::name(self)
40684    }
40685}
40686
40687impl Variants<ChangeTrustResultCode> for ChangeTrustResultCode {
40688    fn variants() -> slice::Iter<'static, ChangeTrustResultCode> {
40689        Self::VARIANTS.iter()
40690    }
40691}
40692
40693impl Enum for ChangeTrustResultCode {}
40694
40695impl fmt::Display for ChangeTrustResultCode {
40696    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40697        f.write_str(self.name())
40698    }
40699}
40700
40701impl TryFrom<i32> for ChangeTrustResultCode {
40702    type Error = Error;
40703
40704    fn try_from(i: i32) -> Result<Self, Error> {
40705        let e = match i {
40706            0 => ChangeTrustResultCode::Success,
40707            -1 => ChangeTrustResultCode::Malformed,
40708            -2 => ChangeTrustResultCode::NoIssuer,
40709            -3 => ChangeTrustResultCode::InvalidLimit,
40710            -4 => ChangeTrustResultCode::LowReserve,
40711            -5 => ChangeTrustResultCode::SelfNotAllowed,
40712            -6 => ChangeTrustResultCode::TrustLineMissing,
40713            -7 => ChangeTrustResultCode::CannotDelete,
40714            -8 => ChangeTrustResultCode::NotAuthMaintainLiabilities,
40715            #[allow(unreachable_patterns)]
40716            _ => return Err(Error::Invalid),
40717        };
40718        Ok(e)
40719    }
40720}
40721
40722impl From<ChangeTrustResultCode> for i32 {
40723    #[must_use]
40724    fn from(e: ChangeTrustResultCode) -> Self {
40725        e as Self
40726    }
40727}
40728
40729impl ReadXdr for ChangeTrustResultCode {
40730    #[cfg(feature = "std")]
40731    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
40732        r.with_limited_depth(|r| {
40733            let e = i32::read_xdr(r)?;
40734            let v: Self = e.try_into()?;
40735            Ok(v)
40736        })
40737    }
40738}
40739
40740impl WriteXdr for ChangeTrustResultCode {
40741    #[cfg(feature = "std")]
40742    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
40743        w.with_limited_depth(|w| {
40744            let i: i32 = (*self).into();
40745            i.write_xdr(w)
40746        })
40747    }
40748}
40749
40750/// ChangeTrustResult is an XDR Union defines as:
40751///
40752/// ```text
40753/// union ChangeTrustResult switch (ChangeTrustResultCode code)
40754/// {
40755/// case CHANGE_TRUST_SUCCESS:
40756///     void;
40757/// case CHANGE_TRUST_MALFORMED:
40758/// case CHANGE_TRUST_NO_ISSUER:
40759/// case CHANGE_TRUST_INVALID_LIMIT:
40760/// case CHANGE_TRUST_LOW_RESERVE:
40761/// case CHANGE_TRUST_SELF_NOT_ALLOWED:
40762/// case CHANGE_TRUST_TRUST_LINE_MISSING:
40763/// case CHANGE_TRUST_CANNOT_DELETE:
40764/// case CHANGE_TRUST_NOT_AUTH_MAINTAIN_LIABILITIES:
40765///     void;
40766/// };
40767/// ```
40768///
40769// union with discriminant ChangeTrustResultCode
40770#[cfg_eval::cfg_eval]
40771#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
40772#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
40773#[cfg_attr(
40774    all(feature = "serde", feature = "alloc"),
40775    serde_with::serde_as,
40776    derive(serde::Serialize, serde::Deserialize),
40777    serde(rename_all = "snake_case")
40778)]
40779#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
40780#[allow(clippy::large_enum_variant)]
40781pub enum ChangeTrustResult {
40782    Success,
40783    Malformed,
40784    NoIssuer,
40785    InvalidLimit,
40786    LowReserve,
40787    SelfNotAllowed,
40788    TrustLineMissing,
40789    CannotDelete,
40790    NotAuthMaintainLiabilities,
40791}
40792
40793#[cfg(feature = "alloc")]
40794impl Default for ChangeTrustResult {
40795    fn default() -> Self {
40796        Self::Success
40797    }
40798}
40799
40800impl ChangeTrustResult {
40801    pub const VARIANTS: [ChangeTrustResultCode; 9] = [
40802        ChangeTrustResultCode::Success,
40803        ChangeTrustResultCode::Malformed,
40804        ChangeTrustResultCode::NoIssuer,
40805        ChangeTrustResultCode::InvalidLimit,
40806        ChangeTrustResultCode::LowReserve,
40807        ChangeTrustResultCode::SelfNotAllowed,
40808        ChangeTrustResultCode::TrustLineMissing,
40809        ChangeTrustResultCode::CannotDelete,
40810        ChangeTrustResultCode::NotAuthMaintainLiabilities,
40811    ];
40812    pub const VARIANTS_STR: [&'static str; 9] = [
40813        "Success",
40814        "Malformed",
40815        "NoIssuer",
40816        "InvalidLimit",
40817        "LowReserve",
40818        "SelfNotAllowed",
40819        "TrustLineMissing",
40820        "CannotDelete",
40821        "NotAuthMaintainLiabilities",
40822    ];
40823
40824    #[must_use]
40825    pub const fn name(&self) -> &'static str {
40826        match self {
40827            Self::Success => "Success",
40828            Self::Malformed => "Malformed",
40829            Self::NoIssuer => "NoIssuer",
40830            Self::InvalidLimit => "InvalidLimit",
40831            Self::LowReserve => "LowReserve",
40832            Self::SelfNotAllowed => "SelfNotAllowed",
40833            Self::TrustLineMissing => "TrustLineMissing",
40834            Self::CannotDelete => "CannotDelete",
40835            Self::NotAuthMaintainLiabilities => "NotAuthMaintainLiabilities",
40836        }
40837    }
40838
40839    #[must_use]
40840    pub const fn discriminant(&self) -> ChangeTrustResultCode {
40841        #[allow(clippy::match_same_arms)]
40842        match self {
40843            Self::Success => ChangeTrustResultCode::Success,
40844            Self::Malformed => ChangeTrustResultCode::Malformed,
40845            Self::NoIssuer => ChangeTrustResultCode::NoIssuer,
40846            Self::InvalidLimit => ChangeTrustResultCode::InvalidLimit,
40847            Self::LowReserve => ChangeTrustResultCode::LowReserve,
40848            Self::SelfNotAllowed => ChangeTrustResultCode::SelfNotAllowed,
40849            Self::TrustLineMissing => ChangeTrustResultCode::TrustLineMissing,
40850            Self::CannotDelete => ChangeTrustResultCode::CannotDelete,
40851            Self::NotAuthMaintainLiabilities => ChangeTrustResultCode::NotAuthMaintainLiabilities,
40852        }
40853    }
40854
40855    #[must_use]
40856    pub const fn variants() -> [ChangeTrustResultCode; 9] {
40857        Self::VARIANTS
40858    }
40859}
40860
40861impl Name for ChangeTrustResult {
40862    #[must_use]
40863    fn name(&self) -> &'static str {
40864        Self::name(self)
40865    }
40866}
40867
40868impl Discriminant<ChangeTrustResultCode> for ChangeTrustResult {
40869    #[must_use]
40870    fn discriminant(&self) -> ChangeTrustResultCode {
40871        Self::discriminant(self)
40872    }
40873}
40874
40875impl Variants<ChangeTrustResultCode> for ChangeTrustResult {
40876    fn variants() -> slice::Iter<'static, ChangeTrustResultCode> {
40877        Self::VARIANTS.iter()
40878    }
40879}
40880
40881impl Union<ChangeTrustResultCode> for ChangeTrustResult {}
40882
40883impl ReadXdr for ChangeTrustResult {
40884    #[cfg(feature = "std")]
40885    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
40886        r.with_limited_depth(|r| {
40887            let dv: ChangeTrustResultCode = <ChangeTrustResultCode as ReadXdr>::read_xdr(r)?;
40888            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
40889            let v = match dv {
40890                ChangeTrustResultCode::Success => Self::Success,
40891                ChangeTrustResultCode::Malformed => Self::Malformed,
40892                ChangeTrustResultCode::NoIssuer => Self::NoIssuer,
40893                ChangeTrustResultCode::InvalidLimit => Self::InvalidLimit,
40894                ChangeTrustResultCode::LowReserve => Self::LowReserve,
40895                ChangeTrustResultCode::SelfNotAllowed => Self::SelfNotAllowed,
40896                ChangeTrustResultCode::TrustLineMissing => Self::TrustLineMissing,
40897                ChangeTrustResultCode::CannotDelete => Self::CannotDelete,
40898                ChangeTrustResultCode::NotAuthMaintainLiabilities => {
40899                    Self::NotAuthMaintainLiabilities
40900                }
40901                #[allow(unreachable_patterns)]
40902                _ => return Err(Error::Invalid),
40903            };
40904            Ok(v)
40905        })
40906    }
40907}
40908
40909impl WriteXdr for ChangeTrustResult {
40910    #[cfg(feature = "std")]
40911    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
40912        w.with_limited_depth(|w| {
40913            self.discriminant().write_xdr(w)?;
40914            #[allow(clippy::match_same_arms)]
40915            match self {
40916                Self::Success => ().write_xdr(w)?,
40917                Self::Malformed => ().write_xdr(w)?,
40918                Self::NoIssuer => ().write_xdr(w)?,
40919                Self::InvalidLimit => ().write_xdr(w)?,
40920                Self::LowReserve => ().write_xdr(w)?,
40921                Self::SelfNotAllowed => ().write_xdr(w)?,
40922                Self::TrustLineMissing => ().write_xdr(w)?,
40923                Self::CannotDelete => ().write_xdr(w)?,
40924                Self::NotAuthMaintainLiabilities => ().write_xdr(w)?,
40925            };
40926            Ok(())
40927        })
40928    }
40929}
40930
40931/// AllowTrustResultCode is an XDR Enum defines as:
40932///
40933/// ```text
40934/// enum AllowTrustResultCode
40935/// {
40936///     // codes considered as "success" for the operation
40937///     ALLOW_TRUST_SUCCESS = 0,
40938///     // codes considered as "failure" for the operation
40939///     ALLOW_TRUST_MALFORMED = -1,     // asset is not ASSET_TYPE_ALPHANUM
40940///     ALLOW_TRUST_NO_TRUST_LINE = -2, // trustor does not have a trustline
40941///                                     // source account does not require trust
40942///     ALLOW_TRUST_TRUST_NOT_REQUIRED = -3,
40943///     ALLOW_TRUST_CANT_REVOKE = -4,      // source account can't revoke trust,
40944///     ALLOW_TRUST_SELF_NOT_ALLOWED = -5, // trusting self is not allowed
40945///     ALLOW_TRUST_LOW_RESERVE = -6       // claimable balances can't be created
40946///                                        // on revoke due to low reserves
40947/// };
40948/// ```
40949///
40950// enum
40951#[cfg_attr(feature = "alloc", derive(Default))]
40952#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
40953#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
40954#[cfg_attr(
40955    all(feature = "serde", feature = "alloc"),
40956    derive(serde::Serialize, serde::Deserialize),
40957    serde(rename_all = "snake_case")
40958)]
40959#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
40960#[repr(i32)]
40961pub enum AllowTrustResultCode {
40962    #[cfg_attr(feature = "alloc", default)]
40963    Success = 0,
40964    Malformed = -1,
40965    NoTrustLine = -2,
40966    TrustNotRequired = -3,
40967    CantRevoke = -4,
40968    SelfNotAllowed = -5,
40969    LowReserve = -6,
40970}
40971
40972impl AllowTrustResultCode {
40973    pub const VARIANTS: [AllowTrustResultCode; 7] = [
40974        AllowTrustResultCode::Success,
40975        AllowTrustResultCode::Malformed,
40976        AllowTrustResultCode::NoTrustLine,
40977        AllowTrustResultCode::TrustNotRequired,
40978        AllowTrustResultCode::CantRevoke,
40979        AllowTrustResultCode::SelfNotAllowed,
40980        AllowTrustResultCode::LowReserve,
40981    ];
40982    pub const VARIANTS_STR: [&'static str; 7] = [
40983        "Success",
40984        "Malformed",
40985        "NoTrustLine",
40986        "TrustNotRequired",
40987        "CantRevoke",
40988        "SelfNotAllowed",
40989        "LowReserve",
40990    ];
40991
40992    #[must_use]
40993    pub const fn name(&self) -> &'static str {
40994        match self {
40995            Self::Success => "Success",
40996            Self::Malformed => "Malformed",
40997            Self::NoTrustLine => "NoTrustLine",
40998            Self::TrustNotRequired => "TrustNotRequired",
40999            Self::CantRevoke => "CantRevoke",
41000            Self::SelfNotAllowed => "SelfNotAllowed",
41001            Self::LowReserve => "LowReserve",
41002        }
41003    }
41004
41005    #[must_use]
41006    pub const fn variants() -> [AllowTrustResultCode; 7] {
41007        Self::VARIANTS
41008    }
41009}
41010
41011impl Name for AllowTrustResultCode {
41012    #[must_use]
41013    fn name(&self) -> &'static str {
41014        Self::name(self)
41015    }
41016}
41017
41018impl Variants<AllowTrustResultCode> for AllowTrustResultCode {
41019    fn variants() -> slice::Iter<'static, AllowTrustResultCode> {
41020        Self::VARIANTS.iter()
41021    }
41022}
41023
41024impl Enum for AllowTrustResultCode {}
41025
41026impl fmt::Display for AllowTrustResultCode {
41027    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
41028        f.write_str(self.name())
41029    }
41030}
41031
41032impl TryFrom<i32> for AllowTrustResultCode {
41033    type Error = Error;
41034
41035    fn try_from(i: i32) -> Result<Self, Error> {
41036        let e = match i {
41037            0 => AllowTrustResultCode::Success,
41038            -1 => AllowTrustResultCode::Malformed,
41039            -2 => AllowTrustResultCode::NoTrustLine,
41040            -3 => AllowTrustResultCode::TrustNotRequired,
41041            -4 => AllowTrustResultCode::CantRevoke,
41042            -5 => AllowTrustResultCode::SelfNotAllowed,
41043            -6 => AllowTrustResultCode::LowReserve,
41044            #[allow(unreachable_patterns)]
41045            _ => return Err(Error::Invalid),
41046        };
41047        Ok(e)
41048    }
41049}
41050
41051impl From<AllowTrustResultCode> for i32 {
41052    #[must_use]
41053    fn from(e: AllowTrustResultCode) -> Self {
41054        e as Self
41055    }
41056}
41057
41058impl ReadXdr for AllowTrustResultCode {
41059    #[cfg(feature = "std")]
41060    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
41061        r.with_limited_depth(|r| {
41062            let e = i32::read_xdr(r)?;
41063            let v: Self = e.try_into()?;
41064            Ok(v)
41065        })
41066    }
41067}
41068
41069impl WriteXdr for AllowTrustResultCode {
41070    #[cfg(feature = "std")]
41071    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
41072        w.with_limited_depth(|w| {
41073            let i: i32 = (*self).into();
41074            i.write_xdr(w)
41075        })
41076    }
41077}
41078
41079/// AllowTrustResult is an XDR Union defines as:
41080///
41081/// ```text
41082/// union AllowTrustResult switch (AllowTrustResultCode code)
41083/// {
41084/// case ALLOW_TRUST_SUCCESS:
41085///     void;
41086/// case ALLOW_TRUST_MALFORMED:
41087/// case ALLOW_TRUST_NO_TRUST_LINE:
41088/// case ALLOW_TRUST_TRUST_NOT_REQUIRED:
41089/// case ALLOW_TRUST_CANT_REVOKE:
41090/// case ALLOW_TRUST_SELF_NOT_ALLOWED:
41091/// case ALLOW_TRUST_LOW_RESERVE:
41092///     void;
41093/// };
41094/// ```
41095///
41096// union with discriminant AllowTrustResultCode
41097#[cfg_eval::cfg_eval]
41098#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
41099#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
41100#[cfg_attr(
41101    all(feature = "serde", feature = "alloc"),
41102    serde_with::serde_as,
41103    derive(serde::Serialize, serde::Deserialize),
41104    serde(rename_all = "snake_case")
41105)]
41106#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
41107#[allow(clippy::large_enum_variant)]
41108pub enum AllowTrustResult {
41109    Success,
41110    Malformed,
41111    NoTrustLine,
41112    TrustNotRequired,
41113    CantRevoke,
41114    SelfNotAllowed,
41115    LowReserve,
41116}
41117
41118#[cfg(feature = "alloc")]
41119impl Default for AllowTrustResult {
41120    fn default() -> Self {
41121        Self::Success
41122    }
41123}
41124
41125impl AllowTrustResult {
41126    pub const VARIANTS: [AllowTrustResultCode; 7] = [
41127        AllowTrustResultCode::Success,
41128        AllowTrustResultCode::Malformed,
41129        AllowTrustResultCode::NoTrustLine,
41130        AllowTrustResultCode::TrustNotRequired,
41131        AllowTrustResultCode::CantRevoke,
41132        AllowTrustResultCode::SelfNotAllowed,
41133        AllowTrustResultCode::LowReserve,
41134    ];
41135    pub const VARIANTS_STR: [&'static str; 7] = [
41136        "Success",
41137        "Malformed",
41138        "NoTrustLine",
41139        "TrustNotRequired",
41140        "CantRevoke",
41141        "SelfNotAllowed",
41142        "LowReserve",
41143    ];
41144
41145    #[must_use]
41146    pub const fn name(&self) -> &'static str {
41147        match self {
41148            Self::Success => "Success",
41149            Self::Malformed => "Malformed",
41150            Self::NoTrustLine => "NoTrustLine",
41151            Self::TrustNotRequired => "TrustNotRequired",
41152            Self::CantRevoke => "CantRevoke",
41153            Self::SelfNotAllowed => "SelfNotAllowed",
41154            Self::LowReserve => "LowReserve",
41155        }
41156    }
41157
41158    #[must_use]
41159    pub const fn discriminant(&self) -> AllowTrustResultCode {
41160        #[allow(clippy::match_same_arms)]
41161        match self {
41162            Self::Success => AllowTrustResultCode::Success,
41163            Self::Malformed => AllowTrustResultCode::Malformed,
41164            Self::NoTrustLine => AllowTrustResultCode::NoTrustLine,
41165            Self::TrustNotRequired => AllowTrustResultCode::TrustNotRequired,
41166            Self::CantRevoke => AllowTrustResultCode::CantRevoke,
41167            Self::SelfNotAllowed => AllowTrustResultCode::SelfNotAllowed,
41168            Self::LowReserve => AllowTrustResultCode::LowReserve,
41169        }
41170    }
41171
41172    #[must_use]
41173    pub const fn variants() -> [AllowTrustResultCode; 7] {
41174        Self::VARIANTS
41175    }
41176}
41177
41178impl Name for AllowTrustResult {
41179    #[must_use]
41180    fn name(&self) -> &'static str {
41181        Self::name(self)
41182    }
41183}
41184
41185impl Discriminant<AllowTrustResultCode> for AllowTrustResult {
41186    #[must_use]
41187    fn discriminant(&self) -> AllowTrustResultCode {
41188        Self::discriminant(self)
41189    }
41190}
41191
41192impl Variants<AllowTrustResultCode> for AllowTrustResult {
41193    fn variants() -> slice::Iter<'static, AllowTrustResultCode> {
41194        Self::VARIANTS.iter()
41195    }
41196}
41197
41198impl Union<AllowTrustResultCode> for AllowTrustResult {}
41199
41200impl ReadXdr for AllowTrustResult {
41201    #[cfg(feature = "std")]
41202    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
41203        r.with_limited_depth(|r| {
41204            let dv: AllowTrustResultCode = <AllowTrustResultCode as ReadXdr>::read_xdr(r)?;
41205            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
41206            let v = match dv {
41207                AllowTrustResultCode::Success => Self::Success,
41208                AllowTrustResultCode::Malformed => Self::Malformed,
41209                AllowTrustResultCode::NoTrustLine => Self::NoTrustLine,
41210                AllowTrustResultCode::TrustNotRequired => Self::TrustNotRequired,
41211                AllowTrustResultCode::CantRevoke => Self::CantRevoke,
41212                AllowTrustResultCode::SelfNotAllowed => Self::SelfNotAllowed,
41213                AllowTrustResultCode::LowReserve => Self::LowReserve,
41214                #[allow(unreachable_patterns)]
41215                _ => return Err(Error::Invalid),
41216            };
41217            Ok(v)
41218        })
41219    }
41220}
41221
41222impl WriteXdr for AllowTrustResult {
41223    #[cfg(feature = "std")]
41224    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
41225        w.with_limited_depth(|w| {
41226            self.discriminant().write_xdr(w)?;
41227            #[allow(clippy::match_same_arms)]
41228            match self {
41229                Self::Success => ().write_xdr(w)?,
41230                Self::Malformed => ().write_xdr(w)?,
41231                Self::NoTrustLine => ().write_xdr(w)?,
41232                Self::TrustNotRequired => ().write_xdr(w)?,
41233                Self::CantRevoke => ().write_xdr(w)?,
41234                Self::SelfNotAllowed => ().write_xdr(w)?,
41235                Self::LowReserve => ().write_xdr(w)?,
41236            };
41237            Ok(())
41238        })
41239    }
41240}
41241
41242/// AccountMergeResultCode is an XDR Enum defines as:
41243///
41244/// ```text
41245/// enum AccountMergeResultCode
41246/// {
41247///     // codes considered as "success" for the operation
41248///     ACCOUNT_MERGE_SUCCESS = 0,
41249///     // codes considered as "failure" for the operation
41250///     ACCOUNT_MERGE_MALFORMED = -1,       // can't merge onto itself
41251///     ACCOUNT_MERGE_NO_ACCOUNT = -2,      // destination does not exist
41252///     ACCOUNT_MERGE_IMMUTABLE_SET = -3,   // source account has AUTH_IMMUTABLE set
41253///     ACCOUNT_MERGE_HAS_SUB_ENTRIES = -4, // account has trust lines/offers
41254///     ACCOUNT_MERGE_SEQNUM_TOO_FAR = -5,  // sequence number is over max allowed
41255///     ACCOUNT_MERGE_DEST_FULL = -6,       // can't add source balance to
41256///                                         // destination balance
41257///     ACCOUNT_MERGE_IS_SPONSOR = -7       // can't merge account that is a sponsor
41258/// };
41259/// ```
41260///
41261// enum
41262#[cfg_attr(feature = "alloc", derive(Default))]
41263#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
41264#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
41265#[cfg_attr(
41266    all(feature = "serde", feature = "alloc"),
41267    derive(serde::Serialize, serde::Deserialize),
41268    serde(rename_all = "snake_case")
41269)]
41270#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
41271#[repr(i32)]
41272pub enum AccountMergeResultCode {
41273    #[cfg_attr(feature = "alloc", default)]
41274    Success = 0,
41275    Malformed = -1,
41276    NoAccount = -2,
41277    ImmutableSet = -3,
41278    HasSubEntries = -4,
41279    SeqnumTooFar = -5,
41280    DestFull = -6,
41281    IsSponsor = -7,
41282}
41283
41284impl AccountMergeResultCode {
41285    pub const VARIANTS: [AccountMergeResultCode; 8] = [
41286        AccountMergeResultCode::Success,
41287        AccountMergeResultCode::Malformed,
41288        AccountMergeResultCode::NoAccount,
41289        AccountMergeResultCode::ImmutableSet,
41290        AccountMergeResultCode::HasSubEntries,
41291        AccountMergeResultCode::SeqnumTooFar,
41292        AccountMergeResultCode::DestFull,
41293        AccountMergeResultCode::IsSponsor,
41294    ];
41295    pub const VARIANTS_STR: [&'static str; 8] = [
41296        "Success",
41297        "Malformed",
41298        "NoAccount",
41299        "ImmutableSet",
41300        "HasSubEntries",
41301        "SeqnumTooFar",
41302        "DestFull",
41303        "IsSponsor",
41304    ];
41305
41306    #[must_use]
41307    pub const fn name(&self) -> &'static str {
41308        match self {
41309            Self::Success => "Success",
41310            Self::Malformed => "Malformed",
41311            Self::NoAccount => "NoAccount",
41312            Self::ImmutableSet => "ImmutableSet",
41313            Self::HasSubEntries => "HasSubEntries",
41314            Self::SeqnumTooFar => "SeqnumTooFar",
41315            Self::DestFull => "DestFull",
41316            Self::IsSponsor => "IsSponsor",
41317        }
41318    }
41319
41320    #[must_use]
41321    pub const fn variants() -> [AccountMergeResultCode; 8] {
41322        Self::VARIANTS
41323    }
41324}
41325
41326impl Name for AccountMergeResultCode {
41327    #[must_use]
41328    fn name(&self) -> &'static str {
41329        Self::name(self)
41330    }
41331}
41332
41333impl Variants<AccountMergeResultCode> for AccountMergeResultCode {
41334    fn variants() -> slice::Iter<'static, AccountMergeResultCode> {
41335        Self::VARIANTS.iter()
41336    }
41337}
41338
41339impl Enum for AccountMergeResultCode {}
41340
41341impl fmt::Display for AccountMergeResultCode {
41342    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
41343        f.write_str(self.name())
41344    }
41345}
41346
41347impl TryFrom<i32> for AccountMergeResultCode {
41348    type Error = Error;
41349
41350    fn try_from(i: i32) -> Result<Self, Error> {
41351        let e = match i {
41352            0 => AccountMergeResultCode::Success,
41353            -1 => AccountMergeResultCode::Malformed,
41354            -2 => AccountMergeResultCode::NoAccount,
41355            -3 => AccountMergeResultCode::ImmutableSet,
41356            -4 => AccountMergeResultCode::HasSubEntries,
41357            -5 => AccountMergeResultCode::SeqnumTooFar,
41358            -6 => AccountMergeResultCode::DestFull,
41359            -7 => AccountMergeResultCode::IsSponsor,
41360            #[allow(unreachable_patterns)]
41361            _ => return Err(Error::Invalid),
41362        };
41363        Ok(e)
41364    }
41365}
41366
41367impl From<AccountMergeResultCode> for i32 {
41368    #[must_use]
41369    fn from(e: AccountMergeResultCode) -> Self {
41370        e as Self
41371    }
41372}
41373
41374impl ReadXdr for AccountMergeResultCode {
41375    #[cfg(feature = "std")]
41376    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
41377        r.with_limited_depth(|r| {
41378            let e = i32::read_xdr(r)?;
41379            let v: Self = e.try_into()?;
41380            Ok(v)
41381        })
41382    }
41383}
41384
41385impl WriteXdr for AccountMergeResultCode {
41386    #[cfg(feature = "std")]
41387    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
41388        w.with_limited_depth(|w| {
41389            let i: i32 = (*self).into();
41390            i.write_xdr(w)
41391        })
41392    }
41393}
41394
41395/// AccountMergeResult is an XDR Union defines as:
41396///
41397/// ```text
41398/// union AccountMergeResult switch (AccountMergeResultCode code)
41399/// {
41400/// case ACCOUNT_MERGE_SUCCESS:
41401///     int64 sourceAccountBalance; // how much got transferred from source account
41402/// case ACCOUNT_MERGE_MALFORMED:
41403/// case ACCOUNT_MERGE_NO_ACCOUNT:
41404/// case ACCOUNT_MERGE_IMMUTABLE_SET:
41405/// case ACCOUNT_MERGE_HAS_SUB_ENTRIES:
41406/// case ACCOUNT_MERGE_SEQNUM_TOO_FAR:
41407/// case ACCOUNT_MERGE_DEST_FULL:
41408/// case ACCOUNT_MERGE_IS_SPONSOR:
41409///     void;
41410/// };
41411/// ```
41412///
41413// union with discriminant AccountMergeResultCode
41414#[cfg_eval::cfg_eval]
41415#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
41416#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
41417#[cfg_attr(
41418    all(feature = "serde", feature = "alloc"),
41419    serde_with::serde_as,
41420    derive(serde::Serialize, serde::Deserialize),
41421    serde(rename_all = "snake_case")
41422)]
41423#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
41424#[allow(clippy::large_enum_variant)]
41425pub enum AccountMergeResult {
41426    Success(
41427        #[cfg_attr(
41428            all(feature = "serde", feature = "alloc"),
41429            serde_as(as = "NumberOrString")
41430        )]
41431        i64,
41432    ),
41433    Malformed,
41434    NoAccount,
41435    ImmutableSet,
41436    HasSubEntries,
41437    SeqnumTooFar,
41438    DestFull,
41439    IsSponsor,
41440}
41441
41442#[cfg(feature = "alloc")]
41443impl Default for AccountMergeResult {
41444    fn default() -> Self {
41445        Self::Success(i64::default())
41446    }
41447}
41448
41449impl AccountMergeResult {
41450    pub const VARIANTS: [AccountMergeResultCode; 8] = [
41451        AccountMergeResultCode::Success,
41452        AccountMergeResultCode::Malformed,
41453        AccountMergeResultCode::NoAccount,
41454        AccountMergeResultCode::ImmutableSet,
41455        AccountMergeResultCode::HasSubEntries,
41456        AccountMergeResultCode::SeqnumTooFar,
41457        AccountMergeResultCode::DestFull,
41458        AccountMergeResultCode::IsSponsor,
41459    ];
41460    pub const VARIANTS_STR: [&'static str; 8] = [
41461        "Success",
41462        "Malformed",
41463        "NoAccount",
41464        "ImmutableSet",
41465        "HasSubEntries",
41466        "SeqnumTooFar",
41467        "DestFull",
41468        "IsSponsor",
41469    ];
41470
41471    #[must_use]
41472    pub const fn name(&self) -> &'static str {
41473        match self {
41474            Self::Success(_) => "Success",
41475            Self::Malformed => "Malformed",
41476            Self::NoAccount => "NoAccount",
41477            Self::ImmutableSet => "ImmutableSet",
41478            Self::HasSubEntries => "HasSubEntries",
41479            Self::SeqnumTooFar => "SeqnumTooFar",
41480            Self::DestFull => "DestFull",
41481            Self::IsSponsor => "IsSponsor",
41482        }
41483    }
41484
41485    #[must_use]
41486    pub const fn discriminant(&self) -> AccountMergeResultCode {
41487        #[allow(clippy::match_same_arms)]
41488        match self {
41489            Self::Success(_) => AccountMergeResultCode::Success,
41490            Self::Malformed => AccountMergeResultCode::Malformed,
41491            Self::NoAccount => AccountMergeResultCode::NoAccount,
41492            Self::ImmutableSet => AccountMergeResultCode::ImmutableSet,
41493            Self::HasSubEntries => AccountMergeResultCode::HasSubEntries,
41494            Self::SeqnumTooFar => AccountMergeResultCode::SeqnumTooFar,
41495            Self::DestFull => AccountMergeResultCode::DestFull,
41496            Self::IsSponsor => AccountMergeResultCode::IsSponsor,
41497        }
41498    }
41499
41500    #[must_use]
41501    pub const fn variants() -> [AccountMergeResultCode; 8] {
41502        Self::VARIANTS
41503    }
41504}
41505
41506impl Name for AccountMergeResult {
41507    #[must_use]
41508    fn name(&self) -> &'static str {
41509        Self::name(self)
41510    }
41511}
41512
41513impl Discriminant<AccountMergeResultCode> for AccountMergeResult {
41514    #[must_use]
41515    fn discriminant(&self) -> AccountMergeResultCode {
41516        Self::discriminant(self)
41517    }
41518}
41519
41520impl Variants<AccountMergeResultCode> for AccountMergeResult {
41521    fn variants() -> slice::Iter<'static, AccountMergeResultCode> {
41522        Self::VARIANTS.iter()
41523    }
41524}
41525
41526impl Union<AccountMergeResultCode> for AccountMergeResult {}
41527
41528impl ReadXdr for AccountMergeResult {
41529    #[cfg(feature = "std")]
41530    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
41531        r.with_limited_depth(|r| {
41532            let dv: AccountMergeResultCode = <AccountMergeResultCode as ReadXdr>::read_xdr(r)?;
41533            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
41534            let v = match dv {
41535                AccountMergeResultCode::Success => Self::Success(i64::read_xdr(r)?),
41536                AccountMergeResultCode::Malformed => Self::Malformed,
41537                AccountMergeResultCode::NoAccount => Self::NoAccount,
41538                AccountMergeResultCode::ImmutableSet => Self::ImmutableSet,
41539                AccountMergeResultCode::HasSubEntries => Self::HasSubEntries,
41540                AccountMergeResultCode::SeqnumTooFar => Self::SeqnumTooFar,
41541                AccountMergeResultCode::DestFull => Self::DestFull,
41542                AccountMergeResultCode::IsSponsor => Self::IsSponsor,
41543                #[allow(unreachable_patterns)]
41544                _ => return Err(Error::Invalid),
41545            };
41546            Ok(v)
41547        })
41548    }
41549}
41550
41551impl WriteXdr for AccountMergeResult {
41552    #[cfg(feature = "std")]
41553    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
41554        w.with_limited_depth(|w| {
41555            self.discriminant().write_xdr(w)?;
41556            #[allow(clippy::match_same_arms)]
41557            match self {
41558                Self::Success(v) => v.write_xdr(w)?,
41559                Self::Malformed => ().write_xdr(w)?,
41560                Self::NoAccount => ().write_xdr(w)?,
41561                Self::ImmutableSet => ().write_xdr(w)?,
41562                Self::HasSubEntries => ().write_xdr(w)?,
41563                Self::SeqnumTooFar => ().write_xdr(w)?,
41564                Self::DestFull => ().write_xdr(w)?,
41565                Self::IsSponsor => ().write_xdr(w)?,
41566            };
41567            Ok(())
41568        })
41569    }
41570}
41571
41572/// InflationResultCode is an XDR Enum defines as:
41573///
41574/// ```text
41575/// enum InflationResultCode
41576/// {
41577///     // codes considered as "success" for the operation
41578///     INFLATION_SUCCESS = 0,
41579///     // codes considered as "failure" for the operation
41580///     INFLATION_NOT_TIME = -1
41581/// };
41582/// ```
41583///
41584// enum
41585#[cfg_attr(feature = "alloc", derive(Default))]
41586#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
41587#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
41588#[cfg_attr(
41589    all(feature = "serde", feature = "alloc"),
41590    derive(serde::Serialize, serde::Deserialize),
41591    serde(rename_all = "snake_case")
41592)]
41593#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
41594#[repr(i32)]
41595pub enum InflationResultCode {
41596    #[cfg_attr(feature = "alloc", default)]
41597    Success = 0,
41598    NotTime = -1,
41599}
41600
41601impl InflationResultCode {
41602    pub const VARIANTS: [InflationResultCode; 2] =
41603        [InflationResultCode::Success, InflationResultCode::NotTime];
41604    pub const VARIANTS_STR: [&'static str; 2] = ["Success", "NotTime"];
41605
41606    #[must_use]
41607    pub const fn name(&self) -> &'static str {
41608        match self {
41609            Self::Success => "Success",
41610            Self::NotTime => "NotTime",
41611        }
41612    }
41613
41614    #[must_use]
41615    pub const fn variants() -> [InflationResultCode; 2] {
41616        Self::VARIANTS
41617    }
41618}
41619
41620impl Name for InflationResultCode {
41621    #[must_use]
41622    fn name(&self) -> &'static str {
41623        Self::name(self)
41624    }
41625}
41626
41627impl Variants<InflationResultCode> for InflationResultCode {
41628    fn variants() -> slice::Iter<'static, InflationResultCode> {
41629        Self::VARIANTS.iter()
41630    }
41631}
41632
41633impl Enum for InflationResultCode {}
41634
41635impl fmt::Display for InflationResultCode {
41636    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
41637        f.write_str(self.name())
41638    }
41639}
41640
41641impl TryFrom<i32> for InflationResultCode {
41642    type Error = Error;
41643
41644    fn try_from(i: i32) -> Result<Self, Error> {
41645        let e = match i {
41646            0 => InflationResultCode::Success,
41647            -1 => InflationResultCode::NotTime,
41648            #[allow(unreachable_patterns)]
41649            _ => return Err(Error::Invalid),
41650        };
41651        Ok(e)
41652    }
41653}
41654
41655impl From<InflationResultCode> for i32 {
41656    #[must_use]
41657    fn from(e: InflationResultCode) -> Self {
41658        e as Self
41659    }
41660}
41661
41662impl ReadXdr for InflationResultCode {
41663    #[cfg(feature = "std")]
41664    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
41665        r.with_limited_depth(|r| {
41666            let e = i32::read_xdr(r)?;
41667            let v: Self = e.try_into()?;
41668            Ok(v)
41669        })
41670    }
41671}
41672
41673impl WriteXdr for InflationResultCode {
41674    #[cfg(feature = "std")]
41675    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
41676        w.with_limited_depth(|w| {
41677            let i: i32 = (*self).into();
41678            i.write_xdr(w)
41679        })
41680    }
41681}
41682
41683/// InflationPayout is an XDR Struct defines as:
41684///
41685/// ```text
41686/// struct InflationPayout // or use PaymentResultAtom to limit types?
41687/// {
41688///     AccountID destination;
41689///     int64 amount;
41690/// };
41691/// ```
41692///
41693#[cfg_attr(feature = "alloc", derive(Default))]
41694#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
41695#[cfg_eval::cfg_eval]
41696#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
41697#[cfg_attr(
41698    all(feature = "serde", feature = "alloc"),
41699    serde_with::serde_as,
41700    derive(serde::Serialize, serde::Deserialize),
41701    serde(rename_all = "snake_case")
41702)]
41703#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
41704pub struct InflationPayout {
41705    pub destination: AccountId,
41706    #[cfg_attr(
41707        all(feature = "serde", feature = "alloc"),
41708        serde_as(as = "NumberOrString")
41709    )]
41710    pub amount: i64,
41711}
41712
41713impl ReadXdr for InflationPayout {
41714    #[cfg(feature = "std")]
41715    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
41716        r.with_limited_depth(|r| {
41717            Ok(Self {
41718                destination: AccountId::read_xdr(r)?,
41719                amount: i64::read_xdr(r)?,
41720            })
41721        })
41722    }
41723}
41724
41725impl WriteXdr for InflationPayout {
41726    #[cfg(feature = "std")]
41727    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
41728        w.with_limited_depth(|w| {
41729            self.destination.write_xdr(w)?;
41730            self.amount.write_xdr(w)?;
41731            Ok(())
41732        })
41733    }
41734}
41735
41736/// InflationResult is an XDR Union defines as:
41737///
41738/// ```text
41739/// union InflationResult switch (InflationResultCode code)
41740/// {
41741/// case INFLATION_SUCCESS:
41742///     InflationPayout payouts<>;
41743/// case INFLATION_NOT_TIME:
41744///     void;
41745/// };
41746/// ```
41747///
41748// union with discriminant InflationResultCode
41749#[cfg_eval::cfg_eval]
41750#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
41751#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
41752#[cfg_attr(
41753    all(feature = "serde", feature = "alloc"),
41754    serde_with::serde_as,
41755    derive(serde::Serialize, serde::Deserialize),
41756    serde(rename_all = "snake_case")
41757)]
41758#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
41759#[allow(clippy::large_enum_variant)]
41760pub enum InflationResult {
41761    Success(VecM<InflationPayout>),
41762    NotTime,
41763}
41764
41765#[cfg(feature = "alloc")]
41766impl Default for InflationResult {
41767    fn default() -> Self {
41768        Self::Success(VecM::<InflationPayout>::default())
41769    }
41770}
41771
41772impl InflationResult {
41773    pub const VARIANTS: [InflationResultCode; 2] =
41774        [InflationResultCode::Success, InflationResultCode::NotTime];
41775    pub const VARIANTS_STR: [&'static str; 2] = ["Success", "NotTime"];
41776
41777    #[must_use]
41778    pub const fn name(&self) -> &'static str {
41779        match self {
41780            Self::Success(_) => "Success",
41781            Self::NotTime => "NotTime",
41782        }
41783    }
41784
41785    #[must_use]
41786    pub const fn discriminant(&self) -> InflationResultCode {
41787        #[allow(clippy::match_same_arms)]
41788        match self {
41789            Self::Success(_) => InflationResultCode::Success,
41790            Self::NotTime => InflationResultCode::NotTime,
41791        }
41792    }
41793
41794    #[must_use]
41795    pub const fn variants() -> [InflationResultCode; 2] {
41796        Self::VARIANTS
41797    }
41798}
41799
41800impl Name for InflationResult {
41801    #[must_use]
41802    fn name(&self) -> &'static str {
41803        Self::name(self)
41804    }
41805}
41806
41807impl Discriminant<InflationResultCode> for InflationResult {
41808    #[must_use]
41809    fn discriminant(&self) -> InflationResultCode {
41810        Self::discriminant(self)
41811    }
41812}
41813
41814impl Variants<InflationResultCode> for InflationResult {
41815    fn variants() -> slice::Iter<'static, InflationResultCode> {
41816        Self::VARIANTS.iter()
41817    }
41818}
41819
41820impl Union<InflationResultCode> for InflationResult {}
41821
41822impl ReadXdr for InflationResult {
41823    #[cfg(feature = "std")]
41824    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
41825        r.with_limited_depth(|r| {
41826            let dv: InflationResultCode = <InflationResultCode as ReadXdr>::read_xdr(r)?;
41827            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
41828            let v = match dv {
41829                InflationResultCode::Success => {
41830                    Self::Success(VecM::<InflationPayout>::read_xdr(r)?)
41831                }
41832                InflationResultCode::NotTime => Self::NotTime,
41833                #[allow(unreachable_patterns)]
41834                _ => return Err(Error::Invalid),
41835            };
41836            Ok(v)
41837        })
41838    }
41839}
41840
41841impl WriteXdr for InflationResult {
41842    #[cfg(feature = "std")]
41843    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
41844        w.with_limited_depth(|w| {
41845            self.discriminant().write_xdr(w)?;
41846            #[allow(clippy::match_same_arms)]
41847            match self {
41848                Self::Success(v) => v.write_xdr(w)?,
41849                Self::NotTime => ().write_xdr(w)?,
41850            };
41851            Ok(())
41852        })
41853    }
41854}
41855
41856/// ManageDataResultCode is an XDR Enum defines as:
41857///
41858/// ```text
41859/// enum ManageDataResultCode
41860/// {
41861///     // codes considered as "success" for the operation
41862///     MANAGE_DATA_SUCCESS = 0,
41863///     // codes considered as "failure" for the operation
41864///     MANAGE_DATA_NOT_SUPPORTED_YET =
41865///         -1, // The network hasn't moved to this protocol change yet
41866///     MANAGE_DATA_NAME_NOT_FOUND =
41867///         -2, // Trying to remove a Data Entry that isn't there
41868///     MANAGE_DATA_LOW_RESERVE = -3, // not enough funds to create a new Data Entry
41869///     MANAGE_DATA_INVALID_NAME = -4 // Name not a valid string
41870/// };
41871/// ```
41872///
41873// enum
41874#[cfg_attr(feature = "alloc", derive(Default))]
41875#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
41876#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
41877#[cfg_attr(
41878    all(feature = "serde", feature = "alloc"),
41879    derive(serde::Serialize, serde::Deserialize),
41880    serde(rename_all = "snake_case")
41881)]
41882#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
41883#[repr(i32)]
41884pub enum ManageDataResultCode {
41885    #[cfg_attr(feature = "alloc", default)]
41886    Success = 0,
41887    NotSupportedYet = -1,
41888    NameNotFound = -2,
41889    LowReserve = -3,
41890    InvalidName = -4,
41891}
41892
41893impl ManageDataResultCode {
41894    pub const VARIANTS: [ManageDataResultCode; 5] = [
41895        ManageDataResultCode::Success,
41896        ManageDataResultCode::NotSupportedYet,
41897        ManageDataResultCode::NameNotFound,
41898        ManageDataResultCode::LowReserve,
41899        ManageDataResultCode::InvalidName,
41900    ];
41901    pub const VARIANTS_STR: [&'static str; 5] = [
41902        "Success",
41903        "NotSupportedYet",
41904        "NameNotFound",
41905        "LowReserve",
41906        "InvalidName",
41907    ];
41908
41909    #[must_use]
41910    pub const fn name(&self) -> &'static str {
41911        match self {
41912            Self::Success => "Success",
41913            Self::NotSupportedYet => "NotSupportedYet",
41914            Self::NameNotFound => "NameNotFound",
41915            Self::LowReserve => "LowReserve",
41916            Self::InvalidName => "InvalidName",
41917        }
41918    }
41919
41920    #[must_use]
41921    pub const fn variants() -> [ManageDataResultCode; 5] {
41922        Self::VARIANTS
41923    }
41924}
41925
41926impl Name for ManageDataResultCode {
41927    #[must_use]
41928    fn name(&self) -> &'static str {
41929        Self::name(self)
41930    }
41931}
41932
41933impl Variants<ManageDataResultCode> for ManageDataResultCode {
41934    fn variants() -> slice::Iter<'static, ManageDataResultCode> {
41935        Self::VARIANTS.iter()
41936    }
41937}
41938
41939impl Enum for ManageDataResultCode {}
41940
41941impl fmt::Display for ManageDataResultCode {
41942    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
41943        f.write_str(self.name())
41944    }
41945}
41946
41947impl TryFrom<i32> for ManageDataResultCode {
41948    type Error = Error;
41949
41950    fn try_from(i: i32) -> Result<Self, Error> {
41951        let e = match i {
41952            0 => ManageDataResultCode::Success,
41953            -1 => ManageDataResultCode::NotSupportedYet,
41954            -2 => ManageDataResultCode::NameNotFound,
41955            -3 => ManageDataResultCode::LowReserve,
41956            -4 => ManageDataResultCode::InvalidName,
41957            #[allow(unreachable_patterns)]
41958            _ => return Err(Error::Invalid),
41959        };
41960        Ok(e)
41961    }
41962}
41963
41964impl From<ManageDataResultCode> for i32 {
41965    #[must_use]
41966    fn from(e: ManageDataResultCode) -> Self {
41967        e as Self
41968    }
41969}
41970
41971impl ReadXdr for ManageDataResultCode {
41972    #[cfg(feature = "std")]
41973    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
41974        r.with_limited_depth(|r| {
41975            let e = i32::read_xdr(r)?;
41976            let v: Self = e.try_into()?;
41977            Ok(v)
41978        })
41979    }
41980}
41981
41982impl WriteXdr for ManageDataResultCode {
41983    #[cfg(feature = "std")]
41984    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
41985        w.with_limited_depth(|w| {
41986            let i: i32 = (*self).into();
41987            i.write_xdr(w)
41988        })
41989    }
41990}
41991
41992/// ManageDataResult is an XDR Union defines as:
41993///
41994/// ```text
41995/// union ManageDataResult switch (ManageDataResultCode code)
41996/// {
41997/// case MANAGE_DATA_SUCCESS:
41998///     void;
41999/// case MANAGE_DATA_NOT_SUPPORTED_YET:
42000/// case MANAGE_DATA_NAME_NOT_FOUND:
42001/// case MANAGE_DATA_LOW_RESERVE:
42002/// case MANAGE_DATA_INVALID_NAME:
42003///     void;
42004/// };
42005/// ```
42006///
42007// union with discriminant ManageDataResultCode
42008#[cfg_eval::cfg_eval]
42009#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
42010#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
42011#[cfg_attr(
42012    all(feature = "serde", feature = "alloc"),
42013    serde_with::serde_as,
42014    derive(serde::Serialize, serde::Deserialize),
42015    serde(rename_all = "snake_case")
42016)]
42017#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
42018#[allow(clippy::large_enum_variant)]
42019pub enum ManageDataResult {
42020    Success,
42021    NotSupportedYet,
42022    NameNotFound,
42023    LowReserve,
42024    InvalidName,
42025}
42026
42027#[cfg(feature = "alloc")]
42028impl Default for ManageDataResult {
42029    fn default() -> Self {
42030        Self::Success
42031    }
42032}
42033
42034impl ManageDataResult {
42035    pub const VARIANTS: [ManageDataResultCode; 5] = [
42036        ManageDataResultCode::Success,
42037        ManageDataResultCode::NotSupportedYet,
42038        ManageDataResultCode::NameNotFound,
42039        ManageDataResultCode::LowReserve,
42040        ManageDataResultCode::InvalidName,
42041    ];
42042    pub const VARIANTS_STR: [&'static str; 5] = [
42043        "Success",
42044        "NotSupportedYet",
42045        "NameNotFound",
42046        "LowReserve",
42047        "InvalidName",
42048    ];
42049
42050    #[must_use]
42051    pub const fn name(&self) -> &'static str {
42052        match self {
42053            Self::Success => "Success",
42054            Self::NotSupportedYet => "NotSupportedYet",
42055            Self::NameNotFound => "NameNotFound",
42056            Self::LowReserve => "LowReserve",
42057            Self::InvalidName => "InvalidName",
42058        }
42059    }
42060
42061    #[must_use]
42062    pub const fn discriminant(&self) -> ManageDataResultCode {
42063        #[allow(clippy::match_same_arms)]
42064        match self {
42065            Self::Success => ManageDataResultCode::Success,
42066            Self::NotSupportedYet => ManageDataResultCode::NotSupportedYet,
42067            Self::NameNotFound => ManageDataResultCode::NameNotFound,
42068            Self::LowReserve => ManageDataResultCode::LowReserve,
42069            Self::InvalidName => ManageDataResultCode::InvalidName,
42070        }
42071    }
42072
42073    #[must_use]
42074    pub const fn variants() -> [ManageDataResultCode; 5] {
42075        Self::VARIANTS
42076    }
42077}
42078
42079impl Name for ManageDataResult {
42080    #[must_use]
42081    fn name(&self) -> &'static str {
42082        Self::name(self)
42083    }
42084}
42085
42086impl Discriminant<ManageDataResultCode> for ManageDataResult {
42087    #[must_use]
42088    fn discriminant(&self) -> ManageDataResultCode {
42089        Self::discriminant(self)
42090    }
42091}
42092
42093impl Variants<ManageDataResultCode> for ManageDataResult {
42094    fn variants() -> slice::Iter<'static, ManageDataResultCode> {
42095        Self::VARIANTS.iter()
42096    }
42097}
42098
42099impl Union<ManageDataResultCode> for ManageDataResult {}
42100
42101impl ReadXdr for ManageDataResult {
42102    #[cfg(feature = "std")]
42103    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
42104        r.with_limited_depth(|r| {
42105            let dv: ManageDataResultCode = <ManageDataResultCode as ReadXdr>::read_xdr(r)?;
42106            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
42107            let v = match dv {
42108                ManageDataResultCode::Success => Self::Success,
42109                ManageDataResultCode::NotSupportedYet => Self::NotSupportedYet,
42110                ManageDataResultCode::NameNotFound => Self::NameNotFound,
42111                ManageDataResultCode::LowReserve => Self::LowReserve,
42112                ManageDataResultCode::InvalidName => Self::InvalidName,
42113                #[allow(unreachable_patterns)]
42114                _ => return Err(Error::Invalid),
42115            };
42116            Ok(v)
42117        })
42118    }
42119}
42120
42121impl WriteXdr for ManageDataResult {
42122    #[cfg(feature = "std")]
42123    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
42124        w.with_limited_depth(|w| {
42125            self.discriminant().write_xdr(w)?;
42126            #[allow(clippy::match_same_arms)]
42127            match self {
42128                Self::Success => ().write_xdr(w)?,
42129                Self::NotSupportedYet => ().write_xdr(w)?,
42130                Self::NameNotFound => ().write_xdr(w)?,
42131                Self::LowReserve => ().write_xdr(w)?,
42132                Self::InvalidName => ().write_xdr(w)?,
42133            };
42134            Ok(())
42135        })
42136    }
42137}
42138
42139/// BumpSequenceResultCode is an XDR Enum defines as:
42140///
42141/// ```text
42142/// enum BumpSequenceResultCode
42143/// {
42144///     // codes considered as "success" for the operation
42145///     BUMP_SEQUENCE_SUCCESS = 0,
42146///     // codes considered as "failure" for the operation
42147///     BUMP_SEQUENCE_BAD_SEQ = -1 // `bumpTo` is not within bounds
42148/// };
42149/// ```
42150///
42151// enum
42152#[cfg_attr(feature = "alloc", derive(Default))]
42153#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
42154#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
42155#[cfg_attr(
42156    all(feature = "serde", feature = "alloc"),
42157    derive(serde::Serialize, serde::Deserialize),
42158    serde(rename_all = "snake_case")
42159)]
42160#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
42161#[repr(i32)]
42162pub enum BumpSequenceResultCode {
42163    #[cfg_attr(feature = "alloc", default)]
42164    Success = 0,
42165    BadSeq = -1,
42166}
42167
42168impl BumpSequenceResultCode {
42169    pub const VARIANTS: [BumpSequenceResultCode; 2] = [
42170        BumpSequenceResultCode::Success,
42171        BumpSequenceResultCode::BadSeq,
42172    ];
42173    pub const VARIANTS_STR: [&'static str; 2] = ["Success", "BadSeq"];
42174
42175    #[must_use]
42176    pub const fn name(&self) -> &'static str {
42177        match self {
42178            Self::Success => "Success",
42179            Self::BadSeq => "BadSeq",
42180        }
42181    }
42182
42183    #[must_use]
42184    pub const fn variants() -> [BumpSequenceResultCode; 2] {
42185        Self::VARIANTS
42186    }
42187}
42188
42189impl Name for BumpSequenceResultCode {
42190    #[must_use]
42191    fn name(&self) -> &'static str {
42192        Self::name(self)
42193    }
42194}
42195
42196impl Variants<BumpSequenceResultCode> for BumpSequenceResultCode {
42197    fn variants() -> slice::Iter<'static, BumpSequenceResultCode> {
42198        Self::VARIANTS.iter()
42199    }
42200}
42201
42202impl Enum for BumpSequenceResultCode {}
42203
42204impl fmt::Display for BumpSequenceResultCode {
42205    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
42206        f.write_str(self.name())
42207    }
42208}
42209
42210impl TryFrom<i32> for BumpSequenceResultCode {
42211    type Error = Error;
42212
42213    fn try_from(i: i32) -> Result<Self, Error> {
42214        let e = match i {
42215            0 => BumpSequenceResultCode::Success,
42216            -1 => BumpSequenceResultCode::BadSeq,
42217            #[allow(unreachable_patterns)]
42218            _ => return Err(Error::Invalid),
42219        };
42220        Ok(e)
42221    }
42222}
42223
42224impl From<BumpSequenceResultCode> for i32 {
42225    #[must_use]
42226    fn from(e: BumpSequenceResultCode) -> Self {
42227        e as Self
42228    }
42229}
42230
42231impl ReadXdr for BumpSequenceResultCode {
42232    #[cfg(feature = "std")]
42233    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
42234        r.with_limited_depth(|r| {
42235            let e = i32::read_xdr(r)?;
42236            let v: Self = e.try_into()?;
42237            Ok(v)
42238        })
42239    }
42240}
42241
42242impl WriteXdr for BumpSequenceResultCode {
42243    #[cfg(feature = "std")]
42244    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
42245        w.with_limited_depth(|w| {
42246            let i: i32 = (*self).into();
42247            i.write_xdr(w)
42248        })
42249    }
42250}
42251
42252/// BumpSequenceResult is an XDR Union defines as:
42253///
42254/// ```text
42255/// union BumpSequenceResult switch (BumpSequenceResultCode code)
42256/// {
42257/// case BUMP_SEQUENCE_SUCCESS:
42258///     void;
42259/// case BUMP_SEQUENCE_BAD_SEQ:
42260///     void;
42261/// };
42262/// ```
42263///
42264// union with discriminant BumpSequenceResultCode
42265#[cfg_eval::cfg_eval]
42266#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
42267#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
42268#[cfg_attr(
42269    all(feature = "serde", feature = "alloc"),
42270    serde_with::serde_as,
42271    derive(serde::Serialize, serde::Deserialize),
42272    serde(rename_all = "snake_case")
42273)]
42274#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
42275#[allow(clippy::large_enum_variant)]
42276pub enum BumpSequenceResult {
42277    Success,
42278    BadSeq,
42279}
42280
42281#[cfg(feature = "alloc")]
42282impl Default for BumpSequenceResult {
42283    fn default() -> Self {
42284        Self::Success
42285    }
42286}
42287
42288impl BumpSequenceResult {
42289    pub const VARIANTS: [BumpSequenceResultCode; 2] = [
42290        BumpSequenceResultCode::Success,
42291        BumpSequenceResultCode::BadSeq,
42292    ];
42293    pub const VARIANTS_STR: [&'static str; 2] = ["Success", "BadSeq"];
42294
42295    #[must_use]
42296    pub const fn name(&self) -> &'static str {
42297        match self {
42298            Self::Success => "Success",
42299            Self::BadSeq => "BadSeq",
42300        }
42301    }
42302
42303    #[must_use]
42304    pub const fn discriminant(&self) -> BumpSequenceResultCode {
42305        #[allow(clippy::match_same_arms)]
42306        match self {
42307            Self::Success => BumpSequenceResultCode::Success,
42308            Self::BadSeq => BumpSequenceResultCode::BadSeq,
42309        }
42310    }
42311
42312    #[must_use]
42313    pub const fn variants() -> [BumpSequenceResultCode; 2] {
42314        Self::VARIANTS
42315    }
42316}
42317
42318impl Name for BumpSequenceResult {
42319    #[must_use]
42320    fn name(&self) -> &'static str {
42321        Self::name(self)
42322    }
42323}
42324
42325impl Discriminant<BumpSequenceResultCode> for BumpSequenceResult {
42326    #[must_use]
42327    fn discriminant(&self) -> BumpSequenceResultCode {
42328        Self::discriminant(self)
42329    }
42330}
42331
42332impl Variants<BumpSequenceResultCode> for BumpSequenceResult {
42333    fn variants() -> slice::Iter<'static, BumpSequenceResultCode> {
42334        Self::VARIANTS.iter()
42335    }
42336}
42337
42338impl Union<BumpSequenceResultCode> for BumpSequenceResult {}
42339
42340impl ReadXdr for BumpSequenceResult {
42341    #[cfg(feature = "std")]
42342    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
42343        r.with_limited_depth(|r| {
42344            let dv: BumpSequenceResultCode = <BumpSequenceResultCode as ReadXdr>::read_xdr(r)?;
42345            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
42346            let v = match dv {
42347                BumpSequenceResultCode::Success => Self::Success,
42348                BumpSequenceResultCode::BadSeq => Self::BadSeq,
42349                #[allow(unreachable_patterns)]
42350                _ => return Err(Error::Invalid),
42351            };
42352            Ok(v)
42353        })
42354    }
42355}
42356
42357impl WriteXdr for BumpSequenceResult {
42358    #[cfg(feature = "std")]
42359    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
42360        w.with_limited_depth(|w| {
42361            self.discriminant().write_xdr(w)?;
42362            #[allow(clippy::match_same_arms)]
42363            match self {
42364                Self::Success => ().write_xdr(w)?,
42365                Self::BadSeq => ().write_xdr(w)?,
42366            };
42367            Ok(())
42368        })
42369    }
42370}
42371
42372/// CreateClaimableBalanceResultCode is an XDR Enum defines as:
42373///
42374/// ```text
42375/// enum CreateClaimableBalanceResultCode
42376/// {
42377///     CREATE_CLAIMABLE_BALANCE_SUCCESS = 0,
42378///     CREATE_CLAIMABLE_BALANCE_MALFORMED = -1,
42379///     CREATE_CLAIMABLE_BALANCE_LOW_RESERVE = -2,
42380///     CREATE_CLAIMABLE_BALANCE_NO_TRUST = -3,
42381///     CREATE_CLAIMABLE_BALANCE_NOT_AUTHORIZED = -4,
42382///     CREATE_CLAIMABLE_BALANCE_UNDERFUNDED = -5
42383/// };
42384/// ```
42385///
42386// enum
42387#[cfg_attr(feature = "alloc", derive(Default))]
42388#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
42389#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
42390#[cfg_attr(
42391    all(feature = "serde", feature = "alloc"),
42392    derive(serde::Serialize, serde::Deserialize),
42393    serde(rename_all = "snake_case")
42394)]
42395#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
42396#[repr(i32)]
42397pub enum CreateClaimableBalanceResultCode {
42398    #[cfg_attr(feature = "alloc", default)]
42399    Success = 0,
42400    Malformed = -1,
42401    LowReserve = -2,
42402    NoTrust = -3,
42403    NotAuthorized = -4,
42404    Underfunded = -5,
42405}
42406
42407impl CreateClaimableBalanceResultCode {
42408    pub const VARIANTS: [CreateClaimableBalanceResultCode; 6] = [
42409        CreateClaimableBalanceResultCode::Success,
42410        CreateClaimableBalanceResultCode::Malformed,
42411        CreateClaimableBalanceResultCode::LowReserve,
42412        CreateClaimableBalanceResultCode::NoTrust,
42413        CreateClaimableBalanceResultCode::NotAuthorized,
42414        CreateClaimableBalanceResultCode::Underfunded,
42415    ];
42416    pub const VARIANTS_STR: [&'static str; 6] = [
42417        "Success",
42418        "Malformed",
42419        "LowReserve",
42420        "NoTrust",
42421        "NotAuthorized",
42422        "Underfunded",
42423    ];
42424
42425    #[must_use]
42426    pub const fn name(&self) -> &'static str {
42427        match self {
42428            Self::Success => "Success",
42429            Self::Malformed => "Malformed",
42430            Self::LowReserve => "LowReserve",
42431            Self::NoTrust => "NoTrust",
42432            Self::NotAuthorized => "NotAuthorized",
42433            Self::Underfunded => "Underfunded",
42434        }
42435    }
42436
42437    #[must_use]
42438    pub const fn variants() -> [CreateClaimableBalanceResultCode; 6] {
42439        Self::VARIANTS
42440    }
42441}
42442
42443impl Name for CreateClaimableBalanceResultCode {
42444    #[must_use]
42445    fn name(&self) -> &'static str {
42446        Self::name(self)
42447    }
42448}
42449
42450impl Variants<CreateClaimableBalanceResultCode> for CreateClaimableBalanceResultCode {
42451    fn variants() -> slice::Iter<'static, CreateClaimableBalanceResultCode> {
42452        Self::VARIANTS.iter()
42453    }
42454}
42455
42456impl Enum for CreateClaimableBalanceResultCode {}
42457
42458impl fmt::Display for CreateClaimableBalanceResultCode {
42459    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
42460        f.write_str(self.name())
42461    }
42462}
42463
42464impl TryFrom<i32> for CreateClaimableBalanceResultCode {
42465    type Error = Error;
42466
42467    fn try_from(i: i32) -> Result<Self, Error> {
42468        let e = match i {
42469            0 => CreateClaimableBalanceResultCode::Success,
42470            -1 => CreateClaimableBalanceResultCode::Malformed,
42471            -2 => CreateClaimableBalanceResultCode::LowReserve,
42472            -3 => CreateClaimableBalanceResultCode::NoTrust,
42473            -4 => CreateClaimableBalanceResultCode::NotAuthorized,
42474            -5 => CreateClaimableBalanceResultCode::Underfunded,
42475            #[allow(unreachable_patterns)]
42476            _ => return Err(Error::Invalid),
42477        };
42478        Ok(e)
42479    }
42480}
42481
42482impl From<CreateClaimableBalanceResultCode> for i32 {
42483    #[must_use]
42484    fn from(e: CreateClaimableBalanceResultCode) -> Self {
42485        e as Self
42486    }
42487}
42488
42489impl ReadXdr for CreateClaimableBalanceResultCode {
42490    #[cfg(feature = "std")]
42491    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
42492        r.with_limited_depth(|r| {
42493            let e = i32::read_xdr(r)?;
42494            let v: Self = e.try_into()?;
42495            Ok(v)
42496        })
42497    }
42498}
42499
42500impl WriteXdr for CreateClaimableBalanceResultCode {
42501    #[cfg(feature = "std")]
42502    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
42503        w.with_limited_depth(|w| {
42504            let i: i32 = (*self).into();
42505            i.write_xdr(w)
42506        })
42507    }
42508}
42509
42510/// CreateClaimableBalanceResult is an XDR Union defines as:
42511///
42512/// ```text
42513/// union CreateClaimableBalanceResult switch (
42514///     CreateClaimableBalanceResultCode code)
42515/// {
42516/// case CREATE_CLAIMABLE_BALANCE_SUCCESS:
42517///     ClaimableBalanceID balanceID;
42518/// case CREATE_CLAIMABLE_BALANCE_MALFORMED:
42519/// case CREATE_CLAIMABLE_BALANCE_LOW_RESERVE:
42520/// case CREATE_CLAIMABLE_BALANCE_NO_TRUST:
42521/// case CREATE_CLAIMABLE_BALANCE_NOT_AUTHORIZED:
42522/// case CREATE_CLAIMABLE_BALANCE_UNDERFUNDED:
42523///     void;
42524/// };
42525/// ```
42526///
42527// union with discriminant CreateClaimableBalanceResultCode
42528#[cfg_eval::cfg_eval]
42529#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
42530#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
42531#[cfg_attr(
42532    all(feature = "serde", feature = "alloc"),
42533    serde_with::serde_as,
42534    derive(serde::Serialize, serde::Deserialize),
42535    serde(rename_all = "snake_case")
42536)]
42537#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
42538#[allow(clippy::large_enum_variant)]
42539pub enum CreateClaimableBalanceResult {
42540    Success(ClaimableBalanceId),
42541    Malformed,
42542    LowReserve,
42543    NoTrust,
42544    NotAuthorized,
42545    Underfunded,
42546}
42547
42548#[cfg(feature = "alloc")]
42549impl Default for CreateClaimableBalanceResult {
42550    fn default() -> Self {
42551        Self::Success(ClaimableBalanceId::default())
42552    }
42553}
42554
42555impl CreateClaimableBalanceResult {
42556    pub const VARIANTS: [CreateClaimableBalanceResultCode; 6] = [
42557        CreateClaimableBalanceResultCode::Success,
42558        CreateClaimableBalanceResultCode::Malformed,
42559        CreateClaimableBalanceResultCode::LowReserve,
42560        CreateClaimableBalanceResultCode::NoTrust,
42561        CreateClaimableBalanceResultCode::NotAuthorized,
42562        CreateClaimableBalanceResultCode::Underfunded,
42563    ];
42564    pub const VARIANTS_STR: [&'static str; 6] = [
42565        "Success",
42566        "Malformed",
42567        "LowReserve",
42568        "NoTrust",
42569        "NotAuthorized",
42570        "Underfunded",
42571    ];
42572
42573    #[must_use]
42574    pub const fn name(&self) -> &'static str {
42575        match self {
42576            Self::Success(_) => "Success",
42577            Self::Malformed => "Malformed",
42578            Self::LowReserve => "LowReserve",
42579            Self::NoTrust => "NoTrust",
42580            Self::NotAuthorized => "NotAuthorized",
42581            Self::Underfunded => "Underfunded",
42582        }
42583    }
42584
42585    #[must_use]
42586    pub const fn discriminant(&self) -> CreateClaimableBalanceResultCode {
42587        #[allow(clippy::match_same_arms)]
42588        match self {
42589            Self::Success(_) => CreateClaimableBalanceResultCode::Success,
42590            Self::Malformed => CreateClaimableBalanceResultCode::Malformed,
42591            Self::LowReserve => CreateClaimableBalanceResultCode::LowReserve,
42592            Self::NoTrust => CreateClaimableBalanceResultCode::NoTrust,
42593            Self::NotAuthorized => CreateClaimableBalanceResultCode::NotAuthorized,
42594            Self::Underfunded => CreateClaimableBalanceResultCode::Underfunded,
42595        }
42596    }
42597
42598    #[must_use]
42599    pub const fn variants() -> [CreateClaimableBalanceResultCode; 6] {
42600        Self::VARIANTS
42601    }
42602}
42603
42604impl Name for CreateClaimableBalanceResult {
42605    #[must_use]
42606    fn name(&self) -> &'static str {
42607        Self::name(self)
42608    }
42609}
42610
42611impl Discriminant<CreateClaimableBalanceResultCode> for CreateClaimableBalanceResult {
42612    #[must_use]
42613    fn discriminant(&self) -> CreateClaimableBalanceResultCode {
42614        Self::discriminant(self)
42615    }
42616}
42617
42618impl Variants<CreateClaimableBalanceResultCode> for CreateClaimableBalanceResult {
42619    fn variants() -> slice::Iter<'static, CreateClaimableBalanceResultCode> {
42620        Self::VARIANTS.iter()
42621    }
42622}
42623
42624impl Union<CreateClaimableBalanceResultCode> for CreateClaimableBalanceResult {}
42625
42626impl ReadXdr for CreateClaimableBalanceResult {
42627    #[cfg(feature = "std")]
42628    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
42629        r.with_limited_depth(|r| {
42630            let dv: CreateClaimableBalanceResultCode =
42631                <CreateClaimableBalanceResultCode as ReadXdr>::read_xdr(r)?;
42632            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
42633            let v = match dv {
42634                CreateClaimableBalanceResultCode::Success => {
42635                    Self::Success(ClaimableBalanceId::read_xdr(r)?)
42636                }
42637                CreateClaimableBalanceResultCode::Malformed => Self::Malformed,
42638                CreateClaimableBalanceResultCode::LowReserve => Self::LowReserve,
42639                CreateClaimableBalanceResultCode::NoTrust => Self::NoTrust,
42640                CreateClaimableBalanceResultCode::NotAuthorized => Self::NotAuthorized,
42641                CreateClaimableBalanceResultCode::Underfunded => Self::Underfunded,
42642                #[allow(unreachable_patterns)]
42643                _ => return Err(Error::Invalid),
42644            };
42645            Ok(v)
42646        })
42647    }
42648}
42649
42650impl WriteXdr for CreateClaimableBalanceResult {
42651    #[cfg(feature = "std")]
42652    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
42653        w.with_limited_depth(|w| {
42654            self.discriminant().write_xdr(w)?;
42655            #[allow(clippy::match_same_arms)]
42656            match self {
42657                Self::Success(v) => v.write_xdr(w)?,
42658                Self::Malformed => ().write_xdr(w)?,
42659                Self::LowReserve => ().write_xdr(w)?,
42660                Self::NoTrust => ().write_xdr(w)?,
42661                Self::NotAuthorized => ().write_xdr(w)?,
42662                Self::Underfunded => ().write_xdr(w)?,
42663            };
42664            Ok(())
42665        })
42666    }
42667}
42668
42669/// ClaimClaimableBalanceResultCode is an XDR Enum defines as:
42670///
42671/// ```text
42672/// enum ClaimClaimableBalanceResultCode
42673/// {
42674///     CLAIM_CLAIMABLE_BALANCE_SUCCESS = 0,
42675///     CLAIM_CLAIMABLE_BALANCE_DOES_NOT_EXIST = -1,
42676///     CLAIM_CLAIMABLE_BALANCE_CANNOT_CLAIM = -2,
42677///     CLAIM_CLAIMABLE_BALANCE_LINE_FULL = -3,
42678///     CLAIM_CLAIMABLE_BALANCE_NO_TRUST = -4,
42679///     CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED = -5
42680/// };
42681/// ```
42682///
42683// enum
42684#[cfg_attr(feature = "alloc", derive(Default))]
42685#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
42686#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
42687#[cfg_attr(
42688    all(feature = "serde", feature = "alloc"),
42689    derive(serde::Serialize, serde::Deserialize),
42690    serde(rename_all = "snake_case")
42691)]
42692#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
42693#[repr(i32)]
42694pub enum ClaimClaimableBalanceResultCode {
42695    #[cfg_attr(feature = "alloc", default)]
42696    Success = 0,
42697    DoesNotExist = -1,
42698    CannotClaim = -2,
42699    LineFull = -3,
42700    NoTrust = -4,
42701    NotAuthorized = -5,
42702}
42703
42704impl ClaimClaimableBalanceResultCode {
42705    pub const VARIANTS: [ClaimClaimableBalanceResultCode; 6] = [
42706        ClaimClaimableBalanceResultCode::Success,
42707        ClaimClaimableBalanceResultCode::DoesNotExist,
42708        ClaimClaimableBalanceResultCode::CannotClaim,
42709        ClaimClaimableBalanceResultCode::LineFull,
42710        ClaimClaimableBalanceResultCode::NoTrust,
42711        ClaimClaimableBalanceResultCode::NotAuthorized,
42712    ];
42713    pub const VARIANTS_STR: [&'static str; 6] = [
42714        "Success",
42715        "DoesNotExist",
42716        "CannotClaim",
42717        "LineFull",
42718        "NoTrust",
42719        "NotAuthorized",
42720    ];
42721
42722    #[must_use]
42723    pub const fn name(&self) -> &'static str {
42724        match self {
42725            Self::Success => "Success",
42726            Self::DoesNotExist => "DoesNotExist",
42727            Self::CannotClaim => "CannotClaim",
42728            Self::LineFull => "LineFull",
42729            Self::NoTrust => "NoTrust",
42730            Self::NotAuthorized => "NotAuthorized",
42731        }
42732    }
42733
42734    #[must_use]
42735    pub const fn variants() -> [ClaimClaimableBalanceResultCode; 6] {
42736        Self::VARIANTS
42737    }
42738}
42739
42740impl Name for ClaimClaimableBalanceResultCode {
42741    #[must_use]
42742    fn name(&self) -> &'static str {
42743        Self::name(self)
42744    }
42745}
42746
42747impl Variants<ClaimClaimableBalanceResultCode> for ClaimClaimableBalanceResultCode {
42748    fn variants() -> slice::Iter<'static, ClaimClaimableBalanceResultCode> {
42749        Self::VARIANTS.iter()
42750    }
42751}
42752
42753impl Enum for ClaimClaimableBalanceResultCode {}
42754
42755impl fmt::Display for ClaimClaimableBalanceResultCode {
42756    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
42757        f.write_str(self.name())
42758    }
42759}
42760
42761impl TryFrom<i32> for ClaimClaimableBalanceResultCode {
42762    type Error = Error;
42763
42764    fn try_from(i: i32) -> Result<Self, Error> {
42765        let e = match i {
42766            0 => ClaimClaimableBalanceResultCode::Success,
42767            -1 => ClaimClaimableBalanceResultCode::DoesNotExist,
42768            -2 => ClaimClaimableBalanceResultCode::CannotClaim,
42769            -3 => ClaimClaimableBalanceResultCode::LineFull,
42770            -4 => ClaimClaimableBalanceResultCode::NoTrust,
42771            -5 => ClaimClaimableBalanceResultCode::NotAuthorized,
42772            #[allow(unreachable_patterns)]
42773            _ => return Err(Error::Invalid),
42774        };
42775        Ok(e)
42776    }
42777}
42778
42779impl From<ClaimClaimableBalanceResultCode> for i32 {
42780    #[must_use]
42781    fn from(e: ClaimClaimableBalanceResultCode) -> Self {
42782        e as Self
42783    }
42784}
42785
42786impl ReadXdr for ClaimClaimableBalanceResultCode {
42787    #[cfg(feature = "std")]
42788    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
42789        r.with_limited_depth(|r| {
42790            let e = i32::read_xdr(r)?;
42791            let v: Self = e.try_into()?;
42792            Ok(v)
42793        })
42794    }
42795}
42796
42797impl WriteXdr for ClaimClaimableBalanceResultCode {
42798    #[cfg(feature = "std")]
42799    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
42800        w.with_limited_depth(|w| {
42801            let i: i32 = (*self).into();
42802            i.write_xdr(w)
42803        })
42804    }
42805}
42806
42807/// ClaimClaimableBalanceResult is an XDR Union defines as:
42808///
42809/// ```text
42810/// union ClaimClaimableBalanceResult switch (ClaimClaimableBalanceResultCode code)
42811/// {
42812/// case CLAIM_CLAIMABLE_BALANCE_SUCCESS:
42813///     void;
42814/// case CLAIM_CLAIMABLE_BALANCE_DOES_NOT_EXIST:
42815/// case CLAIM_CLAIMABLE_BALANCE_CANNOT_CLAIM:
42816/// case CLAIM_CLAIMABLE_BALANCE_LINE_FULL:
42817/// case CLAIM_CLAIMABLE_BALANCE_NO_TRUST:
42818/// case CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED:
42819///     void;
42820/// };
42821/// ```
42822///
42823// union with discriminant ClaimClaimableBalanceResultCode
42824#[cfg_eval::cfg_eval]
42825#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
42826#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
42827#[cfg_attr(
42828    all(feature = "serde", feature = "alloc"),
42829    serde_with::serde_as,
42830    derive(serde::Serialize, serde::Deserialize),
42831    serde(rename_all = "snake_case")
42832)]
42833#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
42834#[allow(clippy::large_enum_variant)]
42835pub enum ClaimClaimableBalanceResult {
42836    Success,
42837    DoesNotExist,
42838    CannotClaim,
42839    LineFull,
42840    NoTrust,
42841    NotAuthorized,
42842}
42843
42844#[cfg(feature = "alloc")]
42845impl Default for ClaimClaimableBalanceResult {
42846    fn default() -> Self {
42847        Self::Success
42848    }
42849}
42850
42851impl ClaimClaimableBalanceResult {
42852    pub const VARIANTS: [ClaimClaimableBalanceResultCode; 6] = [
42853        ClaimClaimableBalanceResultCode::Success,
42854        ClaimClaimableBalanceResultCode::DoesNotExist,
42855        ClaimClaimableBalanceResultCode::CannotClaim,
42856        ClaimClaimableBalanceResultCode::LineFull,
42857        ClaimClaimableBalanceResultCode::NoTrust,
42858        ClaimClaimableBalanceResultCode::NotAuthorized,
42859    ];
42860    pub const VARIANTS_STR: [&'static str; 6] = [
42861        "Success",
42862        "DoesNotExist",
42863        "CannotClaim",
42864        "LineFull",
42865        "NoTrust",
42866        "NotAuthorized",
42867    ];
42868
42869    #[must_use]
42870    pub const fn name(&self) -> &'static str {
42871        match self {
42872            Self::Success => "Success",
42873            Self::DoesNotExist => "DoesNotExist",
42874            Self::CannotClaim => "CannotClaim",
42875            Self::LineFull => "LineFull",
42876            Self::NoTrust => "NoTrust",
42877            Self::NotAuthorized => "NotAuthorized",
42878        }
42879    }
42880
42881    #[must_use]
42882    pub const fn discriminant(&self) -> ClaimClaimableBalanceResultCode {
42883        #[allow(clippy::match_same_arms)]
42884        match self {
42885            Self::Success => ClaimClaimableBalanceResultCode::Success,
42886            Self::DoesNotExist => ClaimClaimableBalanceResultCode::DoesNotExist,
42887            Self::CannotClaim => ClaimClaimableBalanceResultCode::CannotClaim,
42888            Self::LineFull => ClaimClaimableBalanceResultCode::LineFull,
42889            Self::NoTrust => ClaimClaimableBalanceResultCode::NoTrust,
42890            Self::NotAuthorized => ClaimClaimableBalanceResultCode::NotAuthorized,
42891        }
42892    }
42893
42894    #[must_use]
42895    pub const fn variants() -> [ClaimClaimableBalanceResultCode; 6] {
42896        Self::VARIANTS
42897    }
42898}
42899
42900impl Name for ClaimClaimableBalanceResult {
42901    #[must_use]
42902    fn name(&self) -> &'static str {
42903        Self::name(self)
42904    }
42905}
42906
42907impl Discriminant<ClaimClaimableBalanceResultCode> for ClaimClaimableBalanceResult {
42908    #[must_use]
42909    fn discriminant(&self) -> ClaimClaimableBalanceResultCode {
42910        Self::discriminant(self)
42911    }
42912}
42913
42914impl Variants<ClaimClaimableBalanceResultCode> for ClaimClaimableBalanceResult {
42915    fn variants() -> slice::Iter<'static, ClaimClaimableBalanceResultCode> {
42916        Self::VARIANTS.iter()
42917    }
42918}
42919
42920impl Union<ClaimClaimableBalanceResultCode> for ClaimClaimableBalanceResult {}
42921
42922impl ReadXdr for ClaimClaimableBalanceResult {
42923    #[cfg(feature = "std")]
42924    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
42925        r.with_limited_depth(|r| {
42926            let dv: ClaimClaimableBalanceResultCode =
42927                <ClaimClaimableBalanceResultCode as ReadXdr>::read_xdr(r)?;
42928            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
42929            let v = match dv {
42930                ClaimClaimableBalanceResultCode::Success => Self::Success,
42931                ClaimClaimableBalanceResultCode::DoesNotExist => Self::DoesNotExist,
42932                ClaimClaimableBalanceResultCode::CannotClaim => Self::CannotClaim,
42933                ClaimClaimableBalanceResultCode::LineFull => Self::LineFull,
42934                ClaimClaimableBalanceResultCode::NoTrust => Self::NoTrust,
42935                ClaimClaimableBalanceResultCode::NotAuthorized => Self::NotAuthorized,
42936                #[allow(unreachable_patterns)]
42937                _ => return Err(Error::Invalid),
42938            };
42939            Ok(v)
42940        })
42941    }
42942}
42943
42944impl WriteXdr for ClaimClaimableBalanceResult {
42945    #[cfg(feature = "std")]
42946    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
42947        w.with_limited_depth(|w| {
42948            self.discriminant().write_xdr(w)?;
42949            #[allow(clippy::match_same_arms)]
42950            match self {
42951                Self::Success => ().write_xdr(w)?,
42952                Self::DoesNotExist => ().write_xdr(w)?,
42953                Self::CannotClaim => ().write_xdr(w)?,
42954                Self::LineFull => ().write_xdr(w)?,
42955                Self::NoTrust => ().write_xdr(w)?,
42956                Self::NotAuthorized => ().write_xdr(w)?,
42957            };
42958            Ok(())
42959        })
42960    }
42961}
42962
42963/// BeginSponsoringFutureReservesResultCode is an XDR Enum defines as:
42964///
42965/// ```text
42966/// enum BeginSponsoringFutureReservesResultCode
42967/// {
42968///     // codes considered as "success" for the operation
42969///     BEGIN_SPONSORING_FUTURE_RESERVES_SUCCESS = 0,
42970///
42971///     // codes considered as "failure" for the operation
42972///     BEGIN_SPONSORING_FUTURE_RESERVES_MALFORMED = -1,
42973///     BEGIN_SPONSORING_FUTURE_RESERVES_ALREADY_SPONSORED = -2,
42974///     BEGIN_SPONSORING_FUTURE_RESERVES_RECURSIVE = -3
42975/// };
42976/// ```
42977///
42978// enum
42979#[cfg_attr(feature = "alloc", derive(Default))]
42980#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
42981#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
42982#[cfg_attr(
42983    all(feature = "serde", feature = "alloc"),
42984    derive(serde::Serialize, serde::Deserialize),
42985    serde(rename_all = "snake_case")
42986)]
42987#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
42988#[repr(i32)]
42989pub enum BeginSponsoringFutureReservesResultCode {
42990    #[cfg_attr(feature = "alloc", default)]
42991    Success = 0,
42992    Malformed = -1,
42993    AlreadySponsored = -2,
42994    Recursive = -3,
42995}
42996
42997impl BeginSponsoringFutureReservesResultCode {
42998    pub const VARIANTS: [BeginSponsoringFutureReservesResultCode; 4] = [
42999        BeginSponsoringFutureReservesResultCode::Success,
43000        BeginSponsoringFutureReservesResultCode::Malformed,
43001        BeginSponsoringFutureReservesResultCode::AlreadySponsored,
43002        BeginSponsoringFutureReservesResultCode::Recursive,
43003    ];
43004    pub const VARIANTS_STR: [&'static str; 4] =
43005        ["Success", "Malformed", "AlreadySponsored", "Recursive"];
43006
43007    #[must_use]
43008    pub const fn name(&self) -> &'static str {
43009        match self {
43010            Self::Success => "Success",
43011            Self::Malformed => "Malformed",
43012            Self::AlreadySponsored => "AlreadySponsored",
43013            Self::Recursive => "Recursive",
43014        }
43015    }
43016
43017    #[must_use]
43018    pub const fn variants() -> [BeginSponsoringFutureReservesResultCode; 4] {
43019        Self::VARIANTS
43020    }
43021}
43022
43023impl Name for BeginSponsoringFutureReservesResultCode {
43024    #[must_use]
43025    fn name(&self) -> &'static str {
43026        Self::name(self)
43027    }
43028}
43029
43030impl Variants<BeginSponsoringFutureReservesResultCode> for BeginSponsoringFutureReservesResultCode {
43031    fn variants() -> slice::Iter<'static, BeginSponsoringFutureReservesResultCode> {
43032        Self::VARIANTS.iter()
43033    }
43034}
43035
43036impl Enum for BeginSponsoringFutureReservesResultCode {}
43037
43038impl fmt::Display for BeginSponsoringFutureReservesResultCode {
43039    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43040        f.write_str(self.name())
43041    }
43042}
43043
43044impl TryFrom<i32> for BeginSponsoringFutureReservesResultCode {
43045    type Error = Error;
43046
43047    fn try_from(i: i32) -> Result<Self, Error> {
43048        let e = match i {
43049            0 => BeginSponsoringFutureReservesResultCode::Success,
43050            -1 => BeginSponsoringFutureReservesResultCode::Malformed,
43051            -2 => BeginSponsoringFutureReservesResultCode::AlreadySponsored,
43052            -3 => BeginSponsoringFutureReservesResultCode::Recursive,
43053            #[allow(unreachable_patterns)]
43054            _ => return Err(Error::Invalid),
43055        };
43056        Ok(e)
43057    }
43058}
43059
43060impl From<BeginSponsoringFutureReservesResultCode> for i32 {
43061    #[must_use]
43062    fn from(e: BeginSponsoringFutureReservesResultCode) -> Self {
43063        e as Self
43064    }
43065}
43066
43067impl ReadXdr for BeginSponsoringFutureReservesResultCode {
43068    #[cfg(feature = "std")]
43069    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
43070        r.with_limited_depth(|r| {
43071            let e = i32::read_xdr(r)?;
43072            let v: Self = e.try_into()?;
43073            Ok(v)
43074        })
43075    }
43076}
43077
43078impl WriteXdr for BeginSponsoringFutureReservesResultCode {
43079    #[cfg(feature = "std")]
43080    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
43081        w.with_limited_depth(|w| {
43082            let i: i32 = (*self).into();
43083            i.write_xdr(w)
43084        })
43085    }
43086}
43087
43088/// BeginSponsoringFutureReservesResult is an XDR Union defines as:
43089///
43090/// ```text
43091/// union BeginSponsoringFutureReservesResult switch (
43092///     BeginSponsoringFutureReservesResultCode code)
43093/// {
43094/// case BEGIN_SPONSORING_FUTURE_RESERVES_SUCCESS:
43095///     void;
43096/// case BEGIN_SPONSORING_FUTURE_RESERVES_MALFORMED:
43097/// case BEGIN_SPONSORING_FUTURE_RESERVES_ALREADY_SPONSORED:
43098/// case BEGIN_SPONSORING_FUTURE_RESERVES_RECURSIVE:
43099///     void;
43100/// };
43101/// ```
43102///
43103// union with discriminant BeginSponsoringFutureReservesResultCode
43104#[cfg_eval::cfg_eval]
43105#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
43106#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
43107#[cfg_attr(
43108    all(feature = "serde", feature = "alloc"),
43109    serde_with::serde_as,
43110    derive(serde::Serialize, serde::Deserialize),
43111    serde(rename_all = "snake_case")
43112)]
43113#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
43114#[allow(clippy::large_enum_variant)]
43115pub enum BeginSponsoringFutureReservesResult {
43116    Success,
43117    Malformed,
43118    AlreadySponsored,
43119    Recursive,
43120}
43121
43122#[cfg(feature = "alloc")]
43123impl Default for BeginSponsoringFutureReservesResult {
43124    fn default() -> Self {
43125        Self::Success
43126    }
43127}
43128
43129impl BeginSponsoringFutureReservesResult {
43130    pub const VARIANTS: [BeginSponsoringFutureReservesResultCode; 4] = [
43131        BeginSponsoringFutureReservesResultCode::Success,
43132        BeginSponsoringFutureReservesResultCode::Malformed,
43133        BeginSponsoringFutureReservesResultCode::AlreadySponsored,
43134        BeginSponsoringFutureReservesResultCode::Recursive,
43135    ];
43136    pub const VARIANTS_STR: [&'static str; 4] =
43137        ["Success", "Malformed", "AlreadySponsored", "Recursive"];
43138
43139    #[must_use]
43140    pub const fn name(&self) -> &'static str {
43141        match self {
43142            Self::Success => "Success",
43143            Self::Malformed => "Malformed",
43144            Self::AlreadySponsored => "AlreadySponsored",
43145            Self::Recursive => "Recursive",
43146        }
43147    }
43148
43149    #[must_use]
43150    pub const fn discriminant(&self) -> BeginSponsoringFutureReservesResultCode {
43151        #[allow(clippy::match_same_arms)]
43152        match self {
43153            Self::Success => BeginSponsoringFutureReservesResultCode::Success,
43154            Self::Malformed => BeginSponsoringFutureReservesResultCode::Malformed,
43155            Self::AlreadySponsored => BeginSponsoringFutureReservesResultCode::AlreadySponsored,
43156            Self::Recursive => BeginSponsoringFutureReservesResultCode::Recursive,
43157        }
43158    }
43159
43160    #[must_use]
43161    pub const fn variants() -> [BeginSponsoringFutureReservesResultCode; 4] {
43162        Self::VARIANTS
43163    }
43164}
43165
43166impl Name for BeginSponsoringFutureReservesResult {
43167    #[must_use]
43168    fn name(&self) -> &'static str {
43169        Self::name(self)
43170    }
43171}
43172
43173impl Discriminant<BeginSponsoringFutureReservesResultCode> for BeginSponsoringFutureReservesResult {
43174    #[must_use]
43175    fn discriminant(&self) -> BeginSponsoringFutureReservesResultCode {
43176        Self::discriminant(self)
43177    }
43178}
43179
43180impl Variants<BeginSponsoringFutureReservesResultCode> for BeginSponsoringFutureReservesResult {
43181    fn variants() -> slice::Iter<'static, BeginSponsoringFutureReservesResultCode> {
43182        Self::VARIANTS.iter()
43183    }
43184}
43185
43186impl Union<BeginSponsoringFutureReservesResultCode> for BeginSponsoringFutureReservesResult {}
43187
43188impl ReadXdr for BeginSponsoringFutureReservesResult {
43189    #[cfg(feature = "std")]
43190    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
43191        r.with_limited_depth(|r| {
43192            let dv: BeginSponsoringFutureReservesResultCode =
43193                <BeginSponsoringFutureReservesResultCode as ReadXdr>::read_xdr(r)?;
43194            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
43195            let v = match dv {
43196                BeginSponsoringFutureReservesResultCode::Success => Self::Success,
43197                BeginSponsoringFutureReservesResultCode::Malformed => Self::Malformed,
43198                BeginSponsoringFutureReservesResultCode::AlreadySponsored => Self::AlreadySponsored,
43199                BeginSponsoringFutureReservesResultCode::Recursive => Self::Recursive,
43200                #[allow(unreachable_patterns)]
43201                _ => return Err(Error::Invalid),
43202            };
43203            Ok(v)
43204        })
43205    }
43206}
43207
43208impl WriteXdr for BeginSponsoringFutureReservesResult {
43209    #[cfg(feature = "std")]
43210    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
43211        w.with_limited_depth(|w| {
43212            self.discriminant().write_xdr(w)?;
43213            #[allow(clippy::match_same_arms)]
43214            match self {
43215                Self::Success => ().write_xdr(w)?,
43216                Self::Malformed => ().write_xdr(w)?,
43217                Self::AlreadySponsored => ().write_xdr(w)?,
43218                Self::Recursive => ().write_xdr(w)?,
43219            };
43220            Ok(())
43221        })
43222    }
43223}
43224
43225/// EndSponsoringFutureReservesResultCode is an XDR Enum defines as:
43226///
43227/// ```text
43228/// enum EndSponsoringFutureReservesResultCode
43229/// {
43230///     // codes considered as "success" for the operation
43231///     END_SPONSORING_FUTURE_RESERVES_SUCCESS = 0,
43232///
43233///     // codes considered as "failure" for the operation
43234///     END_SPONSORING_FUTURE_RESERVES_NOT_SPONSORED = -1
43235/// };
43236/// ```
43237///
43238// enum
43239#[cfg_attr(feature = "alloc", derive(Default))]
43240#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
43241#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
43242#[cfg_attr(
43243    all(feature = "serde", feature = "alloc"),
43244    derive(serde::Serialize, serde::Deserialize),
43245    serde(rename_all = "snake_case")
43246)]
43247#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
43248#[repr(i32)]
43249pub enum EndSponsoringFutureReservesResultCode {
43250    #[cfg_attr(feature = "alloc", default)]
43251    Success = 0,
43252    NotSponsored = -1,
43253}
43254
43255impl EndSponsoringFutureReservesResultCode {
43256    pub const VARIANTS: [EndSponsoringFutureReservesResultCode; 2] = [
43257        EndSponsoringFutureReservesResultCode::Success,
43258        EndSponsoringFutureReservesResultCode::NotSponsored,
43259    ];
43260    pub const VARIANTS_STR: [&'static str; 2] = ["Success", "NotSponsored"];
43261
43262    #[must_use]
43263    pub const fn name(&self) -> &'static str {
43264        match self {
43265            Self::Success => "Success",
43266            Self::NotSponsored => "NotSponsored",
43267        }
43268    }
43269
43270    #[must_use]
43271    pub const fn variants() -> [EndSponsoringFutureReservesResultCode; 2] {
43272        Self::VARIANTS
43273    }
43274}
43275
43276impl Name for EndSponsoringFutureReservesResultCode {
43277    #[must_use]
43278    fn name(&self) -> &'static str {
43279        Self::name(self)
43280    }
43281}
43282
43283impl Variants<EndSponsoringFutureReservesResultCode> for EndSponsoringFutureReservesResultCode {
43284    fn variants() -> slice::Iter<'static, EndSponsoringFutureReservesResultCode> {
43285        Self::VARIANTS.iter()
43286    }
43287}
43288
43289impl Enum for EndSponsoringFutureReservesResultCode {}
43290
43291impl fmt::Display for EndSponsoringFutureReservesResultCode {
43292    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43293        f.write_str(self.name())
43294    }
43295}
43296
43297impl TryFrom<i32> for EndSponsoringFutureReservesResultCode {
43298    type Error = Error;
43299
43300    fn try_from(i: i32) -> Result<Self, Error> {
43301        let e = match i {
43302            0 => EndSponsoringFutureReservesResultCode::Success,
43303            -1 => EndSponsoringFutureReservesResultCode::NotSponsored,
43304            #[allow(unreachable_patterns)]
43305            _ => return Err(Error::Invalid),
43306        };
43307        Ok(e)
43308    }
43309}
43310
43311impl From<EndSponsoringFutureReservesResultCode> for i32 {
43312    #[must_use]
43313    fn from(e: EndSponsoringFutureReservesResultCode) -> Self {
43314        e as Self
43315    }
43316}
43317
43318impl ReadXdr for EndSponsoringFutureReservesResultCode {
43319    #[cfg(feature = "std")]
43320    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
43321        r.with_limited_depth(|r| {
43322            let e = i32::read_xdr(r)?;
43323            let v: Self = e.try_into()?;
43324            Ok(v)
43325        })
43326    }
43327}
43328
43329impl WriteXdr for EndSponsoringFutureReservesResultCode {
43330    #[cfg(feature = "std")]
43331    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
43332        w.with_limited_depth(|w| {
43333            let i: i32 = (*self).into();
43334            i.write_xdr(w)
43335        })
43336    }
43337}
43338
43339/// EndSponsoringFutureReservesResult is an XDR Union defines as:
43340///
43341/// ```text
43342/// union EndSponsoringFutureReservesResult switch (
43343///     EndSponsoringFutureReservesResultCode code)
43344/// {
43345/// case END_SPONSORING_FUTURE_RESERVES_SUCCESS:
43346///     void;
43347/// case END_SPONSORING_FUTURE_RESERVES_NOT_SPONSORED:
43348///     void;
43349/// };
43350/// ```
43351///
43352// union with discriminant EndSponsoringFutureReservesResultCode
43353#[cfg_eval::cfg_eval]
43354#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
43355#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
43356#[cfg_attr(
43357    all(feature = "serde", feature = "alloc"),
43358    serde_with::serde_as,
43359    derive(serde::Serialize, serde::Deserialize),
43360    serde(rename_all = "snake_case")
43361)]
43362#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
43363#[allow(clippy::large_enum_variant)]
43364pub enum EndSponsoringFutureReservesResult {
43365    Success,
43366    NotSponsored,
43367}
43368
43369#[cfg(feature = "alloc")]
43370impl Default for EndSponsoringFutureReservesResult {
43371    fn default() -> Self {
43372        Self::Success
43373    }
43374}
43375
43376impl EndSponsoringFutureReservesResult {
43377    pub const VARIANTS: [EndSponsoringFutureReservesResultCode; 2] = [
43378        EndSponsoringFutureReservesResultCode::Success,
43379        EndSponsoringFutureReservesResultCode::NotSponsored,
43380    ];
43381    pub const VARIANTS_STR: [&'static str; 2] = ["Success", "NotSponsored"];
43382
43383    #[must_use]
43384    pub const fn name(&self) -> &'static str {
43385        match self {
43386            Self::Success => "Success",
43387            Self::NotSponsored => "NotSponsored",
43388        }
43389    }
43390
43391    #[must_use]
43392    pub const fn discriminant(&self) -> EndSponsoringFutureReservesResultCode {
43393        #[allow(clippy::match_same_arms)]
43394        match self {
43395            Self::Success => EndSponsoringFutureReservesResultCode::Success,
43396            Self::NotSponsored => EndSponsoringFutureReservesResultCode::NotSponsored,
43397        }
43398    }
43399
43400    #[must_use]
43401    pub const fn variants() -> [EndSponsoringFutureReservesResultCode; 2] {
43402        Self::VARIANTS
43403    }
43404}
43405
43406impl Name for EndSponsoringFutureReservesResult {
43407    #[must_use]
43408    fn name(&self) -> &'static str {
43409        Self::name(self)
43410    }
43411}
43412
43413impl Discriminant<EndSponsoringFutureReservesResultCode> for EndSponsoringFutureReservesResult {
43414    #[must_use]
43415    fn discriminant(&self) -> EndSponsoringFutureReservesResultCode {
43416        Self::discriminant(self)
43417    }
43418}
43419
43420impl Variants<EndSponsoringFutureReservesResultCode> for EndSponsoringFutureReservesResult {
43421    fn variants() -> slice::Iter<'static, EndSponsoringFutureReservesResultCode> {
43422        Self::VARIANTS.iter()
43423    }
43424}
43425
43426impl Union<EndSponsoringFutureReservesResultCode> for EndSponsoringFutureReservesResult {}
43427
43428impl ReadXdr for EndSponsoringFutureReservesResult {
43429    #[cfg(feature = "std")]
43430    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
43431        r.with_limited_depth(|r| {
43432            let dv: EndSponsoringFutureReservesResultCode =
43433                <EndSponsoringFutureReservesResultCode as ReadXdr>::read_xdr(r)?;
43434            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
43435            let v = match dv {
43436                EndSponsoringFutureReservesResultCode::Success => Self::Success,
43437                EndSponsoringFutureReservesResultCode::NotSponsored => Self::NotSponsored,
43438                #[allow(unreachable_patterns)]
43439                _ => return Err(Error::Invalid),
43440            };
43441            Ok(v)
43442        })
43443    }
43444}
43445
43446impl WriteXdr for EndSponsoringFutureReservesResult {
43447    #[cfg(feature = "std")]
43448    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
43449        w.with_limited_depth(|w| {
43450            self.discriminant().write_xdr(w)?;
43451            #[allow(clippy::match_same_arms)]
43452            match self {
43453                Self::Success => ().write_xdr(w)?,
43454                Self::NotSponsored => ().write_xdr(w)?,
43455            };
43456            Ok(())
43457        })
43458    }
43459}
43460
43461/// RevokeSponsorshipResultCode is an XDR Enum defines as:
43462///
43463/// ```text
43464/// enum RevokeSponsorshipResultCode
43465/// {
43466///     // codes considered as "success" for the operation
43467///     REVOKE_SPONSORSHIP_SUCCESS = 0,
43468///
43469///     // codes considered as "failure" for the operation
43470///     REVOKE_SPONSORSHIP_DOES_NOT_EXIST = -1,
43471///     REVOKE_SPONSORSHIP_NOT_SPONSOR = -2,
43472///     REVOKE_SPONSORSHIP_LOW_RESERVE = -3,
43473///     REVOKE_SPONSORSHIP_ONLY_TRANSFERABLE = -4,
43474///     REVOKE_SPONSORSHIP_MALFORMED = -5
43475/// };
43476/// ```
43477///
43478// enum
43479#[cfg_attr(feature = "alloc", derive(Default))]
43480#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
43481#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
43482#[cfg_attr(
43483    all(feature = "serde", feature = "alloc"),
43484    derive(serde::Serialize, serde::Deserialize),
43485    serde(rename_all = "snake_case")
43486)]
43487#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
43488#[repr(i32)]
43489pub enum RevokeSponsorshipResultCode {
43490    #[cfg_attr(feature = "alloc", default)]
43491    Success = 0,
43492    DoesNotExist = -1,
43493    NotSponsor = -2,
43494    LowReserve = -3,
43495    OnlyTransferable = -4,
43496    Malformed = -5,
43497}
43498
43499impl RevokeSponsorshipResultCode {
43500    pub const VARIANTS: [RevokeSponsorshipResultCode; 6] = [
43501        RevokeSponsorshipResultCode::Success,
43502        RevokeSponsorshipResultCode::DoesNotExist,
43503        RevokeSponsorshipResultCode::NotSponsor,
43504        RevokeSponsorshipResultCode::LowReserve,
43505        RevokeSponsorshipResultCode::OnlyTransferable,
43506        RevokeSponsorshipResultCode::Malformed,
43507    ];
43508    pub const VARIANTS_STR: [&'static str; 6] = [
43509        "Success",
43510        "DoesNotExist",
43511        "NotSponsor",
43512        "LowReserve",
43513        "OnlyTransferable",
43514        "Malformed",
43515    ];
43516
43517    #[must_use]
43518    pub const fn name(&self) -> &'static str {
43519        match self {
43520            Self::Success => "Success",
43521            Self::DoesNotExist => "DoesNotExist",
43522            Self::NotSponsor => "NotSponsor",
43523            Self::LowReserve => "LowReserve",
43524            Self::OnlyTransferable => "OnlyTransferable",
43525            Self::Malformed => "Malformed",
43526        }
43527    }
43528
43529    #[must_use]
43530    pub const fn variants() -> [RevokeSponsorshipResultCode; 6] {
43531        Self::VARIANTS
43532    }
43533}
43534
43535impl Name for RevokeSponsorshipResultCode {
43536    #[must_use]
43537    fn name(&self) -> &'static str {
43538        Self::name(self)
43539    }
43540}
43541
43542impl Variants<RevokeSponsorshipResultCode> for RevokeSponsorshipResultCode {
43543    fn variants() -> slice::Iter<'static, RevokeSponsorshipResultCode> {
43544        Self::VARIANTS.iter()
43545    }
43546}
43547
43548impl Enum for RevokeSponsorshipResultCode {}
43549
43550impl fmt::Display for RevokeSponsorshipResultCode {
43551    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43552        f.write_str(self.name())
43553    }
43554}
43555
43556impl TryFrom<i32> for RevokeSponsorshipResultCode {
43557    type Error = Error;
43558
43559    fn try_from(i: i32) -> Result<Self, Error> {
43560        let e = match i {
43561            0 => RevokeSponsorshipResultCode::Success,
43562            -1 => RevokeSponsorshipResultCode::DoesNotExist,
43563            -2 => RevokeSponsorshipResultCode::NotSponsor,
43564            -3 => RevokeSponsorshipResultCode::LowReserve,
43565            -4 => RevokeSponsorshipResultCode::OnlyTransferable,
43566            -5 => RevokeSponsorshipResultCode::Malformed,
43567            #[allow(unreachable_patterns)]
43568            _ => return Err(Error::Invalid),
43569        };
43570        Ok(e)
43571    }
43572}
43573
43574impl From<RevokeSponsorshipResultCode> for i32 {
43575    #[must_use]
43576    fn from(e: RevokeSponsorshipResultCode) -> Self {
43577        e as Self
43578    }
43579}
43580
43581impl ReadXdr for RevokeSponsorshipResultCode {
43582    #[cfg(feature = "std")]
43583    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
43584        r.with_limited_depth(|r| {
43585            let e = i32::read_xdr(r)?;
43586            let v: Self = e.try_into()?;
43587            Ok(v)
43588        })
43589    }
43590}
43591
43592impl WriteXdr for RevokeSponsorshipResultCode {
43593    #[cfg(feature = "std")]
43594    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
43595        w.with_limited_depth(|w| {
43596            let i: i32 = (*self).into();
43597            i.write_xdr(w)
43598        })
43599    }
43600}
43601
43602/// RevokeSponsorshipResult is an XDR Union defines as:
43603///
43604/// ```text
43605/// union RevokeSponsorshipResult switch (RevokeSponsorshipResultCode code)
43606/// {
43607/// case REVOKE_SPONSORSHIP_SUCCESS:
43608///     void;
43609/// case REVOKE_SPONSORSHIP_DOES_NOT_EXIST:
43610/// case REVOKE_SPONSORSHIP_NOT_SPONSOR:
43611/// case REVOKE_SPONSORSHIP_LOW_RESERVE:
43612/// case REVOKE_SPONSORSHIP_ONLY_TRANSFERABLE:
43613/// case REVOKE_SPONSORSHIP_MALFORMED:
43614///     void;
43615/// };
43616/// ```
43617///
43618// union with discriminant RevokeSponsorshipResultCode
43619#[cfg_eval::cfg_eval]
43620#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
43621#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
43622#[cfg_attr(
43623    all(feature = "serde", feature = "alloc"),
43624    serde_with::serde_as,
43625    derive(serde::Serialize, serde::Deserialize),
43626    serde(rename_all = "snake_case")
43627)]
43628#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
43629#[allow(clippy::large_enum_variant)]
43630pub enum RevokeSponsorshipResult {
43631    Success,
43632    DoesNotExist,
43633    NotSponsor,
43634    LowReserve,
43635    OnlyTransferable,
43636    Malformed,
43637}
43638
43639#[cfg(feature = "alloc")]
43640impl Default for RevokeSponsorshipResult {
43641    fn default() -> Self {
43642        Self::Success
43643    }
43644}
43645
43646impl RevokeSponsorshipResult {
43647    pub const VARIANTS: [RevokeSponsorshipResultCode; 6] = [
43648        RevokeSponsorshipResultCode::Success,
43649        RevokeSponsorshipResultCode::DoesNotExist,
43650        RevokeSponsorshipResultCode::NotSponsor,
43651        RevokeSponsorshipResultCode::LowReserve,
43652        RevokeSponsorshipResultCode::OnlyTransferable,
43653        RevokeSponsorshipResultCode::Malformed,
43654    ];
43655    pub const VARIANTS_STR: [&'static str; 6] = [
43656        "Success",
43657        "DoesNotExist",
43658        "NotSponsor",
43659        "LowReserve",
43660        "OnlyTransferable",
43661        "Malformed",
43662    ];
43663
43664    #[must_use]
43665    pub const fn name(&self) -> &'static str {
43666        match self {
43667            Self::Success => "Success",
43668            Self::DoesNotExist => "DoesNotExist",
43669            Self::NotSponsor => "NotSponsor",
43670            Self::LowReserve => "LowReserve",
43671            Self::OnlyTransferable => "OnlyTransferable",
43672            Self::Malformed => "Malformed",
43673        }
43674    }
43675
43676    #[must_use]
43677    pub const fn discriminant(&self) -> RevokeSponsorshipResultCode {
43678        #[allow(clippy::match_same_arms)]
43679        match self {
43680            Self::Success => RevokeSponsorshipResultCode::Success,
43681            Self::DoesNotExist => RevokeSponsorshipResultCode::DoesNotExist,
43682            Self::NotSponsor => RevokeSponsorshipResultCode::NotSponsor,
43683            Self::LowReserve => RevokeSponsorshipResultCode::LowReserve,
43684            Self::OnlyTransferable => RevokeSponsorshipResultCode::OnlyTransferable,
43685            Self::Malformed => RevokeSponsorshipResultCode::Malformed,
43686        }
43687    }
43688
43689    #[must_use]
43690    pub const fn variants() -> [RevokeSponsorshipResultCode; 6] {
43691        Self::VARIANTS
43692    }
43693}
43694
43695impl Name for RevokeSponsorshipResult {
43696    #[must_use]
43697    fn name(&self) -> &'static str {
43698        Self::name(self)
43699    }
43700}
43701
43702impl Discriminant<RevokeSponsorshipResultCode> for RevokeSponsorshipResult {
43703    #[must_use]
43704    fn discriminant(&self) -> RevokeSponsorshipResultCode {
43705        Self::discriminant(self)
43706    }
43707}
43708
43709impl Variants<RevokeSponsorshipResultCode> for RevokeSponsorshipResult {
43710    fn variants() -> slice::Iter<'static, RevokeSponsorshipResultCode> {
43711        Self::VARIANTS.iter()
43712    }
43713}
43714
43715impl Union<RevokeSponsorshipResultCode> for RevokeSponsorshipResult {}
43716
43717impl ReadXdr for RevokeSponsorshipResult {
43718    #[cfg(feature = "std")]
43719    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
43720        r.with_limited_depth(|r| {
43721            let dv: RevokeSponsorshipResultCode =
43722                <RevokeSponsorshipResultCode as ReadXdr>::read_xdr(r)?;
43723            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
43724            let v = match dv {
43725                RevokeSponsorshipResultCode::Success => Self::Success,
43726                RevokeSponsorshipResultCode::DoesNotExist => Self::DoesNotExist,
43727                RevokeSponsorshipResultCode::NotSponsor => Self::NotSponsor,
43728                RevokeSponsorshipResultCode::LowReserve => Self::LowReserve,
43729                RevokeSponsorshipResultCode::OnlyTransferable => Self::OnlyTransferable,
43730                RevokeSponsorshipResultCode::Malformed => Self::Malformed,
43731                #[allow(unreachable_patterns)]
43732                _ => return Err(Error::Invalid),
43733            };
43734            Ok(v)
43735        })
43736    }
43737}
43738
43739impl WriteXdr for RevokeSponsorshipResult {
43740    #[cfg(feature = "std")]
43741    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
43742        w.with_limited_depth(|w| {
43743            self.discriminant().write_xdr(w)?;
43744            #[allow(clippy::match_same_arms)]
43745            match self {
43746                Self::Success => ().write_xdr(w)?,
43747                Self::DoesNotExist => ().write_xdr(w)?,
43748                Self::NotSponsor => ().write_xdr(w)?,
43749                Self::LowReserve => ().write_xdr(w)?,
43750                Self::OnlyTransferable => ().write_xdr(w)?,
43751                Self::Malformed => ().write_xdr(w)?,
43752            };
43753            Ok(())
43754        })
43755    }
43756}
43757
43758/// ClawbackResultCode is an XDR Enum defines as:
43759///
43760/// ```text
43761/// enum ClawbackResultCode
43762/// {
43763///     // codes considered as "success" for the operation
43764///     CLAWBACK_SUCCESS = 0,
43765///
43766///     // codes considered as "failure" for the operation
43767///     CLAWBACK_MALFORMED = -1,
43768///     CLAWBACK_NOT_CLAWBACK_ENABLED = -2,
43769///     CLAWBACK_NO_TRUST = -3,
43770///     CLAWBACK_UNDERFUNDED = -4
43771/// };
43772/// ```
43773///
43774// enum
43775#[cfg_attr(feature = "alloc", derive(Default))]
43776#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
43777#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
43778#[cfg_attr(
43779    all(feature = "serde", feature = "alloc"),
43780    derive(serde::Serialize, serde::Deserialize),
43781    serde(rename_all = "snake_case")
43782)]
43783#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
43784#[repr(i32)]
43785pub enum ClawbackResultCode {
43786    #[cfg_attr(feature = "alloc", default)]
43787    Success = 0,
43788    Malformed = -1,
43789    NotClawbackEnabled = -2,
43790    NoTrust = -3,
43791    Underfunded = -4,
43792}
43793
43794impl ClawbackResultCode {
43795    pub const VARIANTS: [ClawbackResultCode; 5] = [
43796        ClawbackResultCode::Success,
43797        ClawbackResultCode::Malformed,
43798        ClawbackResultCode::NotClawbackEnabled,
43799        ClawbackResultCode::NoTrust,
43800        ClawbackResultCode::Underfunded,
43801    ];
43802    pub const VARIANTS_STR: [&'static str; 5] = [
43803        "Success",
43804        "Malformed",
43805        "NotClawbackEnabled",
43806        "NoTrust",
43807        "Underfunded",
43808    ];
43809
43810    #[must_use]
43811    pub const fn name(&self) -> &'static str {
43812        match self {
43813            Self::Success => "Success",
43814            Self::Malformed => "Malformed",
43815            Self::NotClawbackEnabled => "NotClawbackEnabled",
43816            Self::NoTrust => "NoTrust",
43817            Self::Underfunded => "Underfunded",
43818        }
43819    }
43820
43821    #[must_use]
43822    pub const fn variants() -> [ClawbackResultCode; 5] {
43823        Self::VARIANTS
43824    }
43825}
43826
43827impl Name for ClawbackResultCode {
43828    #[must_use]
43829    fn name(&self) -> &'static str {
43830        Self::name(self)
43831    }
43832}
43833
43834impl Variants<ClawbackResultCode> for ClawbackResultCode {
43835    fn variants() -> slice::Iter<'static, ClawbackResultCode> {
43836        Self::VARIANTS.iter()
43837    }
43838}
43839
43840impl Enum for ClawbackResultCode {}
43841
43842impl fmt::Display for ClawbackResultCode {
43843    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43844        f.write_str(self.name())
43845    }
43846}
43847
43848impl TryFrom<i32> for ClawbackResultCode {
43849    type Error = Error;
43850
43851    fn try_from(i: i32) -> Result<Self, Error> {
43852        let e = match i {
43853            0 => ClawbackResultCode::Success,
43854            -1 => ClawbackResultCode::Malformed,
43855            -2 => ClawbackResultCode::NotClawbackEnabled,
43856            -3 => ClawbackResultCode::NoTrust,
43857            -4 => ClawbackResultCode::Underfunded,
43858            #[allow(unreachable_patterns)]
43859            _ => return Err(Error::Invalid),
43860        };
43861        Ok(e)
43862    }
43863}
43864
43865impl From<ClawbackResultCode> for i32 {
43866    #[must_use]
43867    fn from(e: ClawbackResultCode) -> Self {
43868        e as Self
43869    }
43870}
43871
43872impl ReadXdr for ClawbackResultCode {
43873    #[cfg(feature = "std")]
43874    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
43875        r.with_limited_depth(|r| {
43876            let e = i32::read_xdr(r)?;
43877            let v: Self = e.try_into()?;
43878            Ok(v)
43879        })
43880    }
43881}
43882
43883impl WriteXdr for ClawbackResultCode {
43884    #[cfg(feature = "std")]
43885    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
43886        w.with_limited_depth(|w| {
43887            let i: i32 = (*self).into();
43888            i.write_xdr(w)
43889        })
43890    }
43891}
43892
43893/// ClawbackResult is an XDR Union defines as:
43894///
43895/// ```text
43896/// union ClawbackResult switch (ClawbackResultCode code)
43897/// {
43898/// case CLAWBACK_SUCCESS:
43899///     void;
43900/// case CLAWBACK_MALFORMED:
43901/// case CLAWBACK_NOT_CLAWBACK_ENABLED:
43902/// case CLAWBACK_NO_TRUST:
43903/// case CLAWBACK_UNDERFUNDED:
43904///     void;
43905/// };
43906/// ```
43907///
43908// union with discriminant ClawbackResultCode
43909#[cfg_eval::cfg_eval]
43910#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
43911#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
43912#[cfg_attr(
43913    all(feature = "serde", feature = "alloc"),
43914    serde_with::serde_as,
43915    derive(serde::Serialize, serde::Deserialize),
43916    serde(rename_all = "snake_case")
43917)]
43918#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
43919#[allow(clippy::large_enum_variant)]
43920pub enum ClawbackResult {
43921    Success,
43922    Malformed,
43923    NotClawbackEnabled,
43924    NoTrust,
43925    Underfunded,
43926}
43927
43928#[cfg(feature = "alloc")]
43929impl Default for ClawbackResult {
43930    fn default() -> Self {
43931        Self::Success
43932    }
43933}
43934
43935impl ClawbackResult {
43936    pub const VARIANTS: [ClawbackResultCode; 5] = [
43937        ClawbackResultCode::Success,
43938        ClawbackResultCode::Malformed,
43939        ClawbackResultCode::NotClawbackEnabled,
43940        ClawbackResultCode::NoTrust,
43941        ClawbackResultCode::Underfunded,
43942    ];
43943    pub const VARIANTS_STR: [&'static str; 5] = [
43944        "Success",
43945        "Malformed",
43946        "NotClawbackEnabled",
43947        "NoTrust",
43948        "Underfunded",
43949    ];
43950
43951    #[must_use]
43952    pub const fn name(&self) -> &'static str {
43953        match self {
43954            Self::Success => "Success",
43955            Self::Malformed => "Malformed",
43956            Self::NotClawbackEnabled => "NotClawbackEnabled",
43957            Self::NoTrust => "NoTrust",
43958            Self::Underfunded => "Underfunded",
43959        }
43960    }
43961
43962    #[must_use]
43963    pub const fn discriminant(&self) -> ClawbackResultCode {
43964        #[allow(clippy::match_same_arms)]
43965        match self {
43966            Self::Success => ClawbackResultCode::Success,
43967            Self::Malformed => ClawbackResultCode::Malformed,
43968            Self::NotClawbackEnabled => ClawbackResultCode::NotClawbackEnabled,
43969            Self::NoTrust => ClawbackResultCode::NoTrust,
43970            Self::Underfunded => ClawbackResultCode::Underfunded,
43971        }
43972    }
43973
43974    #[must_use]
43975    pub const fn variants() -> [ClawbackResultCode; 5] {
43976        Self::VARIANTS
43977    }
43978}
43979
43980impl Name for ClawbackResult {
43981    #[must_use]
43982    fn name(&self) -> &'static str {
43983        Self::name(self)
43984    }
43985}
43986
43987impl Discriminant<ClawbackResultCode> for ClawbackResult {
43988    #[must_use]
43989    fn discriminant(&self) -> ClawbackResultCode {
43990        Self::discriminant(self)
43991    }
43992}
43993
43994impl Variants<ClawbackResultCode> for ClawbackResult {
43995    fn variants() -> slice::Iter<'static, ClawbackResultCode> {
43996        Self::VARIANTS.iter()
43997    }
43998}
43999
44000impl Union<ClawbackResultCode> for ClawbackResult {}
44001
44002impl ReadXdr for ClawbackResult {
44003    #[cfg(feature = "std")]
44004    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
44005        r.with_limited_depth(|r| {
44006            let dv: ClawbackResultCode = <ClawbackResultCode as ReadXdr>::read_xdr(r)?;
44007            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
44008            let v = match dv {
44009                ClawbackResultCode::Success => Self::Success,
44010                ClawbackResultCode::Malformed => Self::Malformed,
44011                ClawbackResultCode::NotClawbackEnabled => Self::NotClawbackEnabled,
44012                ClawbackResultCode::NoTrust => Self::NoTrust,
44013                ClawbackResultCode::Underfunded => Self::Underfunded,
44014                #[allow(unreachable_patterns)]
44015                _ => return Err(Error::Invalid),
44016            };
44017            Ok(v)
44018        })
44019    }
44020}
44021
44022impl WriteXdr for ClawbackResult {
44023    #[cfg(feature = "std")]
44024    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
44025        w.with_limited_depth(|w| {
44026            self.discriminant().write_xdr(w)?;
44027            #[allow(clippy::match_same_arms)]
44028            match self {
44029                Self::Success => ().write_xdr(w)?,
44030                Self::Malformed => ().write_xdr(w)?,
44031                Self::NotClawbackEnabled => ().write_xdr(w)?,
44032                Self::NoTrust => ().write_xdr(w)?,
44033                Self::Underfunded => ().write_xdr(w)?,
44034            };
44035            Ok(())
44036        })
44037    }
44038}
44039
44040/// ClawbackClaimableBalanceResultCode is an XDR Enum defines as:
44041///
44042/// ```text
44043/// enum ClawbackClaimableBalanceResultCode
44044/// {
44045///     // codes considered as "success" for the operation
44046///     CLAWBACK_CLAIMABLE_BALANCE_SUCCESS = 0,
44047///
44048///     // codes considered as "failure" for the operation
44049///     CLAWBACK_CLAIMABLE_BALANCE_DOES_NOT_EXIST = -1,
44050///     CLAWBACK_CLAIMABLE_BALANCE_NOT_ISSUER = -2,
44051///     CLAWBACK_CLAIMABLE_BALANCE_NOT_CLAWBACK_ENABLED = -3
44052/// };
44053/// ```
44054///
44055// enum
44056#[cfg_attr(feature = "alloc", derive(Default))]
44057#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
44058#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
44059#[cfg_attr(
44060    all(feature = "serde", feature = "alloc"),
44061    derive(serde::Serialize, serde::Deserialize),
44062    serde(rename_all = "snake_case")
44063)]
44064#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
44065#[repr(i32)]
44066pub enum ClawbackClaimableBalanceResultCode {
44067    #[cfg_attr(feature = "alloc", default)]
44068    Success = 0,
44069    DoesNotExist = -1,
44070    NotIssuer = -2,
44071    NotClawbackEnabled = -3,
44072}
44073
44074impl ClawbackClaimableBalanceResultCode {
44075    pub const VARIANTS: [ClawbackClaimableBalanceResultCode; 4] = [
44076        ClawbackClaimableBalanceResultCode::Success,
44077        ClawbackClaimableBalanceResultCode::DoesNotExist,
44078        ClawbackClaimableBalanceResultCode::NotIssuer,
44079        ClawbackClaimableBalanceResultCode::NotClawbackEnabled,
44080    ];
44081    pub const VARIANTS_STR: [&'static str; 4] =
44082        ["Success", "DoesNotExist", "NotIssuer", "NotClawbackEnabled"];
44083
44084    #[must_use]
44085    pub const fn name(&self) -> &'static str {
44086        match self {
44087            Self::Success => "Success",
44088            Self::DoesNotExist => "DoesNotExist",
44089            Self::NotIssuer => "NotIssuer",
44090            Self::NotClawbackEnabled => "NotClawbackEnabled",
44091        }
44092    }
44093
44094    #[must_use]
44095    pub const fn variants() -> [ClawbackClaimableBalanceResultCode; 4] {
44096        Self::VARIANTS
44097    }
44098}
44099
44100impl Name for ClawbackClaimableBalanceResultCode {
44101    #[must_use]
44102    fn name(&self) -> &'static str {
44103        Self::name(self)
44104    }
44105}
44106
44107impl Variants<ClawbackClaimableBalanceResultCode> for ClawbackClaimableBalanceResultCode {
44108    fn variants() -> slice::Iter<'static, ClawbackClaimableBalanceResultCode> {
44109        Self::VARIANTS.iter()
44110    }
44111}
44112
44113impl Enum for ClawbackClaimableBalanceResultCode {}
44114
44115impl fmt::Display for ClawbackClaimableBalanceResultCode {
44116    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
44117        f.write_str(self.name())
44118    }
44119}
44120
44121impl TryFrom<i32> for ClawbackClaimableBalanceResultCode {
44122    type Error = Error;
44123
44124    fn try_from(i: i32) -> Result<Self, Error> {
44125        let e = match i {
44126            0 => ClawbackClaimableBalanceResultCode::Success,
44127            -1 => ClawbackClaimableBalanceResultCode::DoesNotExist,
44128            -2 => ClawbackClaimableBalanceResultCode::NotIssuer,
44129            -3 => ClawbackClaimableBalanceResultCode::NotClawbackEnabled,
44130            #[allow(unreachable_patterns)]
44131            _ => return Err(Error::Invalid),
44132        };
44133        Ok(e)
44134    }
44135}
44136
44137impl From<ClawbackClaimableBalanceResultCode> for i32 {
44138    #[must_use]
44139    fn from(e: ClawbackClaimableBalanceResultCode) -> Self {
44140        e as Self
44141    }
44142}
44143
44144impl ReadXdr for ClawbackClaimableBalanceResultCode {
44145    #[cfg(feature = "std")]
44146    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
44147        r.with_limited_depth(|r| {
44148            let e = i32::read_xdr(r)?;
44149            let v: Self = e.try_into()?;
44150            Ok(v)
44151        })
44152    }
44153}
44154
44155impl WriteXdr for ClawbackClaimableBalanceResultCode {
44156    #[cfg(feature = "std")]
44157    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
44158        w.with_limited_depth(|w| {
44159            let i: i32 = (*self).into();
44160            i.write_xdr(w)
44161        })
44162    }
44163}
44164
44165/// ClawbackClaimableBalanceResult is an XDR Union defines as:
44166///
44167/// ```text
44168/// union ClawbackClaimableBalanceResult switch (
44169///     ClawbackClaimableBalanceResultCode code)
44170/// {
44171/// case CLAWBACK_CLAIMABLE_BALANCE_SUCCESS:
44172///     void;
44173/// case CLAWBACK_CLAIMABLE_BALANCE_DOES_NOT_EXIST:
44174/// case CLAWBACK_CLAIMABLE_BALANCE_NOT_ISSUER:
44175/// case CLAWBACK_CLAIMABLE_BALANCE_NOT_CLAWBACK_ENABLED:
44176///     void;
44177/// };
44178/// ```
44179///
44180// union with discriminant ClawbackClaimableBalanceResultCode
44181#[cfg_eval::cfg_eval]
44182#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
44183#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
44184#[cfg_attr(
44185    all(feature = "serde", feature = "alloc"),
44186    serde_with::serde_as,
44187    derive(serde::Serialize, serde::Deserialize),
44188    serde(rename_all = "snake_case")
44189)]
44190#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
44191#[allow(clippy::large_enum_variant)]
44192pub enum ClawbackClaimableBalanceResult {
44193    Success,
44194    DoesNotExist,
44195    NotIssuer,
44196    NotClawbackEnabled,
44197}
44198
44199#[cfg(feature = "alloc")]
44200impl Default for ClawbackClaimableBalanceResult {
44201    fn default() -> Self {
44202        Self::Success
44203    }
44204}
44205
44206impl ClawbackClaimableBalanceResult {
44207    pub const VARIANTS: [ClawbackClaimableBalanceResultCode; 4] = [
44208        ClawbackClaimableBalanceResultCode::Success,
44209        ClawbackClaimableBalanceResultCode::DoesNotExist,
44210        ClawbackClaimableBalanceResultCode::NotIssuer,
44211        ClawbackClaimableBalanceResultCode::NotClawbackEnabled,
44212    ];
44213    pub const VARIANTS_STR: [&'static str; 4] =
44214        ["Success", "DoesNotExist", "NotIssuer", "NotClawbackEnabled"];
44215
44216    #[must_use]
44217    pub const fn name(&self) -> &'static str {
44218        match self {
44219            Self::Success => "Success",
44220            Self::DoesNotExist => "DoesNotExist",
44221            Self::NotIssuer => "NotIssuer",
44222            Self::NotClawbackEnabled => "NotClawbackEnabled",
44223        }
44224    }
44225
44226    #[must_use]
44227    pub const fn discriminant(&self) -> ClawbackClaimableBalanceResultCode {
44228        #[allow(clippy::match_same_arms)]
44229        match self {
44230            Self::Success => ClawbackClaimableBalanceResultCode::Success,
44231            Self::DoesNotExist => ClawbackClaimableBalanceResultCode::DoesNotExist,
44232            Self::NotIssuer => ClawbackClaimableBalanceResultCode::NotIssuer,
44233            Self::NotClawbackEnabled => ClawbackClaimableBalanceResultCode::NotClawbackEnabled,
44234        }
44235    }
44236
44237    #[must_use]
44238    pub const fn variants() -> [ClawbackClaimableBalanceResultCode; 4] {
44239        Self::VARIANTS
44240    }
44241}
44242
44243impl Name for ClawbackClaimableBalanceResult {
44244    #[must_use]
44245    fn name(&self) -> &'static str {
44246        Self::name(self)
44247    }
44248}
44249
44250impl Discriminant<ClawbackClaimableBalanceResultCode> for ClawbackClaimableBalanceResult {
44251    #[must_use]
44252    fn discriminant(&self) -> ClawbackClaimableBalanceResultCode {
44253        Self::discriminant(self)
44254    }
44255}
44256
44257impl Variants<ClawbackClaimableBalanceResultCode> for ClawbackClaimableBalanceResult {
44258    fn variants() -> slice::Iter<'static, ClawbackClaimableBalanceResultCode> {
44259        Self::VARIANTS.iter()
44260    }
44261}
44262
44263impl Union<ClawbackClaimableBalanceResultCode> for ClawbackClaimableBalanceResult {}
44264
44265impl ReadXdr for ClawbackClaimableBalanceResult {
44266    #[cfg(feature = "std")]
44267    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
44268        r.with_limited_depth(|r| {
44269            let dv: ClawbackClaimableBalanceResultCode =
44270                <ClawbackClaimableBalanceResultCode as ReadXdr>::read_xdr(r)?;
44271            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
44272            let v = match dv {
44273                ClawbackClaimableBalanceResultCode::Success => Self::Success,
44274                ClawbackClaimableBalanceResultCode::DoesNotExist => Self::DoesNotExist,
44275                ClawbackClaimableBalanceResultCode::NotIssuer => Self::NotIssuer,
44276                ClawbackClaimableBalanceResultCode::NotClawbackEnabled => Self::NotClawbackEnabled,
44277                #[allow(unreachable_patterns)]
44278                _ => return Err(Error::Invalid),
44279            };
44280            Ok(v)
44281        })
44282    }
44283}
44284
44285impl WriteXdr for ClawbackClaimableBalanceResult {
44286    #[cfg(feature = "std")]
44287    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
44288        w.with_limited_depth(|w| {
44289            self.discriminant().write_xdr(w)?;
44290            #[allow(clippy::match_same_arms)]
44291            match self {
44292                Self::Success => ().write_xdr(w)?,
44293                Self::DoesNotExist => ().write_xdr(w)?,
44294                Self::NotIssuer => ().write_xdr(w)?,
44295                Self::NotClawbackEnabled => ().write_xdr(w)?,
44296            };
44297            Ok(())
44298        })
44299    }
44300}
44301
44302/// SetTrustLineFlagsResultCode is an XDR Enum defines as:
44303///
44304/// ```text
44305/// enum SetTrustLineFlagsResultCode
44306/// {
44307///     // codes considered as "success" for the operation
44308///     SET_TRUST_LINE_FLAGS_SUCCESS = 0,
44309///
44310///     // codes considered as "failure" for the operation
44311///     SET_TRUST_LINE_FLAGS_MALFORMED = -1,
44312///     SET_TRUST_LINE_FLAGS_NO_TRUST_LINE = -2,
44313///     SET_TRUST_LINE_FLAGS_CANT_REVOKE = -3,
44314///     SET_TRUST_LINE_FLAGS_INVALID_STATE = -4,
44315///     SET_TRUST_LINE_FLAGS_LOW_RESERVE = -5 // claimable balances can't be created
44316///                                           // on revoke due to low reserves
44317/// };
44318/// ```
44319///
44320// enum
44321#[cfg_attr(feature = "alloc", derive(Default))]
44322#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
44323#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
44324#[cfg_attr(
44325    all(feature = "serde", feature = "alloc"),
44326    derive(serde::Serialize, serde::Deserialize),
44327    serde(rename_all = "snake_case")
44328)]
44329#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
44330#[repr(i32)]
44331pub enum SetTrustLineFlagsResultCode {
44332    #[cfg_attr(feature = "alloc", default)]
44333    Success = 0,
44334    Malformed = -1,
44335    NoTrustLine = -2,
44336    CantRevoke = -3,
44337    InvalidState = -4,
44338    LowReserve = -5,
44339}
44340
44341impl SetTrustLineFlagsResultCode {
44342    pub const VARIANTS: [SetTrustLineFlagsResultCode; 6] = [
44343        SetTrustLineFlagsResultCode::Success,
44344        SetTrustLineFlagsResultCode::Malformed,
44345        SetTrustLineFlagsResultCode::NoTrustLine,
44346        SetTrustLineFlagsResultCode::CantRevoke,
44347        SetTrustLineFlagsResultCode::InvalidState,
44348        SetTrustLineFlagsResultCode::LowReserve,
44349    ];
44350    pub const VARIANTS_STR: [&'static str; 6] = [
44351        "Success",
44352        "Malformed",
44353        "NoTrustLine",
44354        "CantRevoke",
44355        "InvalidState",
44356        "LowReserve",
44357    ];
44358
44359    #[must_use]
44360    pub const fn name(&self) -> &'static str {
44361        match self {
44362            Self::Success => "Success",
44363            Self::Malformed => "Malformed",
44364            Self::NoTrustLine => "NoTrustLine",
44365            Self::CantRevoke => "CantRevoke",
44366            Self::InvalidState => "InvalidState",
44367            Self::LowReserve => "LowReserve",
44368        }
44369    }
44370
44371    #[must_use]
44372    pub const fn variants() -> [SetTrustLineFlagsResultCode; 6] {
44373        Self::VARIANTS
44374    }
44375}
44376
44377impl Name for SetTrustLineFlagsResultCode {
44378    #[must_use]
44379    fn name(&self) -> &'static str {
44380        Self::name(self)
44381    }
44382}
44383
44384impl Variants<SetTrustLineFlagsResultCode> for SetTrustLineFlagsResultCode {
44385    fn variants() -> slice::Iter<'static, SetTrustLineFlagsResultCode> {
44386        Self::VARIANTS.iter()
44387    }
44388}
44389
44390impl Enum for SetTrustLineFlagsResultCode {}
44391
44392impl fmt::Display for SetTrustLineFlagsResultCode {
44393    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
44394        f.write_str(self.name())
44395    }
44396}
44397
44398impl TryFrom<i32> for SetTrustLineFlagsResultCode {
44399    type Error = Error;
44400
44401    fn try_from(i: i32) -> Result<Self, Error> {
44402        let e = match i {
44403            0 => SetTrustLineFlagsResultCode::Success,
44404            -1 => SetTrustLineFlagsResultCode::Malformed,
44405            -2 => SetTrustLineFlagsResultCode::NoTrustLine,
44406            -3 => SetTrustLineFlagsResultCode::CantRevoke,
44407            -4 => SetTrustLineFlagsResultCode::InvalidState,
44408            -5 => SetTrustLineFlagsResultCode::LowReserve,
44409            #[allow(unreachable_patterns)]
44410            _ => return Err(Error::Invalid),
44411        };
44412        Ok(e)
44413    }
44414}
44415
44416impl From<SetTrustLineFlagsResultCode> for i32 {
44417    #[must_use]
44418    fn from(e: SetTrustLineFlagsResultCode) -> Self {
44419        e as Self
44420    }
44421}
44422
44423impl ReadXdr for SetTrustLineFlagsResultCode {
44424    #[cfg(feature = "std")]
44425    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
44426        r.with_limited_depth(|r| {
44427            let e = i32::read_xdr(r)?;
44428            let v: Self = e.try_into()?;
44429            Ok(v)
44430        })
44431    }
44432}
44433
44434impl WriteXdr for SetTrustLineFlagsResultCode {
44435    #[cfg(feature = "std")]
44436    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
44437        w.with_limited_depth(|w| {
44438            let i: i32 = (*self).into();
44439            i.write_xdr(w)
44440        })
44441    }
44442}
44443
44444/// SetTrustLineFlagsResult is an XDR Union defines as:
44445///
44446/// ```text
44447/// union SetTrustLineFlagsResult switch (SetTrustLineFlagsResultCode code)
44448/// {
44449/// case SET_TRUST_LINE_FLAGS_SUCCESS:
44450///     void;
44451/// case SET_TRUST_LINE_FLAGS_MALFORMED:
44452/// case SET_TRUST_LINE_FLAGS_NO_TRUST_LINE:
44453/// case SET_TRUST_LINE_FLAGS_CANT_REVOKE:
44454/// case SET_TRUST_LINE_FLAGS_INVALID_STATE:
44455/// case SET_TRUST_LINE_FLAGS_LOW_RESERVE:
44456///     void;
44457/// };
44458/// ```
44459///
44460// union with discriminant SetTrustLineFlagsResultCode
44461#[cfg_eval::cfg_eval]
44462#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
44463#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
44464#[cfg_attr(
44465    all(feature = "serde", feature = "alloc"),
44466    serde_with::serde_as,
44467    derive(serde::Serialize, serde::Deserialize),
44468    serde(rename_all = "snake_case")
44469)]
44470#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
44471#[allow(clippy::large_enum_variant)]
44472pub enum SetTrustLineFlagsResult {
44473    Success,
44474    Malformed,
44475    NoTrustLine,
44476    CantRevoke,
44477    InvalidState,
44478    LowReserve,
44479}
44480
44481#[cfg(feature = "alloc")]
44482impl Default for SetTrustLineFlagsResult {
44483    fn default() -> Self {
44484        Self::Success
44485    }
44486}
44487
44488impl SetTrustLineFlagsResult {
44489    pub const VARIANTS: [SetTrustLineFlagsResultCode; 6] = [
44490        SetTrustLineFlagsResultCode::Success,
44491        SetTrustLineFlagsResultCode::Malformed,
44492        SetTrustLineFlagsResultCode::NoTrustLine,
44493        SetTrustLineFlagsResultCode::CantRevoke,
44494        SetTrustLineFlagsResultCode::InvalidState,
44495        SetTrustLineFlagsResultCode::LowReserve,
44496    ];
44497    pub const VARIANTS_STR: [&'static str; 6] = [
44498        "Success",
44499        "Malformed",
44500        "NoTrustLine",
44501        "CantRevoke",
44502        "InvalidState",
44503        "LowReserve",
44504    ];
44505
44506    #[must_use]
44507    pub const fn name(&self) -> &'static str {
44508        match self {
44509            Self::Success => "Success",
44510            Self::Malformed => "Malformed",
44511            Self::NoTrustLine => "NoTrustLine",
44512            Self::CantRevoke => "CantRevoke",
44513            Self::InvalidState => "InvalidState",
44514            Self::LowReserve => "LowReserve",
44515        }
44516    }
44517
44518    #[must_use]
44519    pub const fn discriminant(&self) -> SetTrustLineFlagsResultCode {
44520        #[allow(clippy::match_same_arms)]
44521        match self {
44522            Self::Success => SetTrustLineFlagsResultCode::Success,
44523            Self::Malformed => SetTrustLineFlagsResultCode::Malformed,
44524            Self::NoTrustLine => SetTrustLineFlagsResultCode::NoTrustLine,
44525            Self::CantRevoke => SetTrustLineFlagsResultCode::CantRevoke,
44526            Self::InvalidState => SetTrustLineFlagsResultCode::InvalidState,
44527            Self::LowReserve => SetTrustLineFlagsResultCode::LowReserve,
44528        }
44529    }
44530
44531    #[must_use]
44532    pub const fn variants() -> [SetTrustLineFlagsResultCode; 6] {
44533        Self::VARIANTS
44534    }
44535}
44536
44537impl Name for SetTrustLineFlagsResult {
44538    #[must_use]
44539    fn name(&self) -> &'static str {
44540        Self::name(self)
44541    }
44542}
44543
44544impl Discriminant<SetTrustLineFlagsResultCode> for SetTrustLineFlagsResult {
44545    #[must_use]
44546    fn discriminant(&self) -> SetTrustLineFlagsResultCode {
44547        Self::discriminant(self)
44548    }
44549}
44550
44551impl Variants<SetTrustLineFlagsResultCode> for SetTrustLineFlagsResult {
44552    fn variants() -> slice::Iter<'static, SetTrustLineFlagsResultCode> {
44553        Self::VARIANTS.iter()
44554    }
44555}
44556
44557impl Union<SetTrustLineFlagsResultCode> for SetTrustLineFlagsResult {}
44558
44559impl ReadXdr for SetTrustLineFlagsResult {
44560    #[cfg(feature = "std")]
44561    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
44562        r.with_limited_depth(|r| {
44563            let dv: SetTrustLineFlagsResultCode =
44564                <SetTrustLineFlagsResultCode as ReadXdr>::read_xdr(r)?;
44565            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
44566            let v = match dv {
44567                SetTrustLineFlagsResultCode::Success => Self::Success,
44568                SetTrustLineFlagsResultCode::Malformed => Self::Malformed,
44569                SetTrustLineFlagsResultCode::NoTrustLine => Self::NoTrustLine,
44570                SetTrustLineFlagsResultCode::CantRevoke => Self::CantRevoke,
44571                SetTrustLineFlagsResultCode::InvalidState => Self::InvalidState,
44572                SetTrustLineFlagsResultCode::LowReserve => Self::LowReserve,
44573                #[allow(unreachable_patterns)]
44574                _ => return Err(Error::Invalid),
44575            };
44576            Ok(v)
44577        })
44578    }
44579}
44580
44581impl WriteXdr for SetTrustLineFlagsResult {
44582    #[cfg(feature = "std")]
44583    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
44584        w.with_limited_depth(|w| {
44585            self.discriminant().write_xdr(w)?;
44586            #[allow(clippy::match_same_arms)]
44587            match self {
44588                Self::Success => ().write_xdr(w)?,
44589                Self::Malformed => ().write_xdr(w)?,
44590                Self::NoTrustLine => ().write_xdr(w)?,
44591                Self::CantRevoke => ().write_xdr(w)?,
44592                Self::InvalidState => ().write_xdr(w)?,
44593                Self::LowReserve => ().write_xdr(w)?,
44594            };
44595            Ok(())
44596        })
44597    }
44598}
44599
44600/// LiquidityPoolDepositResultCode is an XDR Enum defines as:
44601///
44602/// ```text
44603/// enum LiquidityPoolDepositResultCode
44604/// {
44605///     // codes considered as "success" for the operation
44606///     LIQUIDITY_POOL_DEPOSIT_SUCCESS = 0,
44607///
44608///     // codes considered as "failure" for the operation
44609///     LIQUIDITY_POOL_DEPOSIT_MALFORMED = -1,      // bad input
44610///     LIQUIDITY_POOL_DEPOSIT_NO_TRUST = -2,       // no trust line for one of the
44611///                                                 // assets
44612///     LIQUIDITY_POOL_DEPOSIT_NOT_AUTHORIZED = -3, // not authorized for one of the
44613///                                                 // assets
44614///     LIQUIDITY_POOL_DEPOSIT_UNDERFUNDED = -4,    // not enough balance for one of
44615///                                                 // the assets
44616///     LIQUIDITY_POOL_DEPOSIT_LINE_FULL = -5,      // pool share trust line doesn't
44617///                                                 // have sufficient limit
44618///     LIQUIDITY_POOL_DEPOSIT_BAD_PRICE = -6,      // deposit price outside bounds
44619///     LIQUIDITY_POOL_DEPOSIT_POOL_FULL = -7       // pool reserves are full
44620/// };
44621/// ```
44622///
44623// enum
44624#[cfg_attr(feature = "alloc", derive(Default))]
44625#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
44626#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
44627#[cfg_attr(
44628    all(feature = "serde", feature = "alloc"),
44629    derive(serde::Serialize, serde::Deserialize),
44630    serde(rename_all = "snake_case")
44631)]
44632#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
44633#[repr(i32)]
44634pub enum LiquidityPoolDepositResultCode {
44635    #[cfg_attr(feature = "alloc", default)]
44636    Success = 0,
44637    Malformed = -1,
44638    NoTrust = -2,
44639    NotAuthorized = -3,
44640    Underfunded = -4,
44641    LineFull = -5,
44642    BadPrice = -6,
44643    PoolFull = -7,
44644}
44645
44646impl LiquidityPoolDepositResultCode {
44647    pub const VARIANTS: [LiquidityPoolDepositResultCode; 8] = [
44648        LiquidityPoolDepositResultCode::Success,
44649        LiquidityPoolDepositResultCode::Malformed,
44650        LiquidityPoolDepositResultCode::NoTrust,
44651        LiquidityPoolDepositResultCode::NotAuthorized,
44652        LiquidityPoolDepositResultCode::Underfunded,
44653        LiquidityPoolDepositResultCode::LineFull,
44654        LiquidityPoolDepositResultCode::BadPrice,
44655        LiquidityPoolDepositResultCode::PoolFull,
44656    ];
44657    pub const VARIANTS_STR: [&'static str; 8] = [
44658        "Success",
44659        "Malformed",
44660        "NoTrust",
44661        "NotAuthorized",
44662        "Underfunded",
44663        "LineFull",
44664        "BadPrice",
44665        "PoolFull",
44666    ];
44667
44668    #[must_use]
44669    pub const fn name(&self) -> &'static str {
44670        match self {
44671            Self::Success => "Success",
44672            Self::Malformed => "Malformed",
44673            Self::NoTrust => "NoTrust",
44674            Self::NotAuthorized => "NotAuthorized",
44675            Self::Underfunded => "Underfunded",
44676            Self::LineFull => "LineFull",
44677            Self::BadPrice => "BadPrice",
44678            Self::PoolFull => "PoolFull",
44679        }
44680    }
44681
44682    #[must_use]
44683    pub const fn variants() -> [LiquidityPoolDepositResultCode; 8] {
44684        Self::VARIANTS
44685    }
44686}
44687
44688impl Name for LiquidityPoolDepositResultCode {
44689    #[must_use]
44690    fn name(&self) -> &'static str {
44691        Self::name(self)
44692    }
44693}
44694
44695impl Variants<LiquidityPoolDepositResultCode> for LiquidityPoolDepositResultCode {
44696    fn variants() -> slice::Iter<'static, LiquidityPoolDepositResultCode> {
44697        Self::VARIANTS.iter()
44698    }
44699}
44700
44701impl Enum for LiquidityPoolDepositResultCode {}
44702
44703impl fmt::Display for LiquidityPoolDepositResultCode {
44704    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
44705        f.write_str(self.name())
44706    }
44707}
44708
44709impl TryFrom<i32> for LiquidityPoolDepositResultCode {
44710    type Error = Error;
44711
44712    fn try_from(i: i32) -> Result<Self, Error> {
44713        let e = match i {
44714            0 => LiquidityPoolDepositResultCode::Success,
44715            -1 => LiquidityPoolDepositResultCode::Malformed,
44716            -2 => LiquidityPoolDepositResultCode::NoTrust,
44717            -3 => LiquidityPoolDepositResultCode::NotAuthorized,
44718            -4 => LiquidityPoolDepositResultCode::Underfunded,
44719            -5 => LiquidityPoolDepositResultCode::LineFull,
44720            -6 => LiquidityPoolDepositResultCode::BadPrice,
44721            -7 => LiquidityPoolDepositResultCode::PoolFull,
44722            #[allow(unreachable_patterns)]
44723            _ => return Err(Error::Invalid),
44724        };
44725        Ok(e)
44726    }
44727}
44728
44729impl From<LiquidityPoolDepositResultCode> for i32 {
44730    #[must_use]
44731    fn from(e: LiquidityPoolDepositResultCode) -> Self {
44732        e as Self
44733    }
44734}
44735
44736impl ReadXdr for LiquidityPoolDepositResultCode {
44737    #[cfg(feature = "std")]
44738    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
44739        r.with_limited_depth(|r| {
44740            let e = i32::read_xdr(r)?;
44741            let v: Self = e.try_into()?;
44742            Ok(v)
44743        })
44744    }
44745}
44746
44747impl WriteXdr for LiquidityPoolDepositResultCode {
44748    #[cfg(feature = "std")]
44749    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
44750        w.with_limited_depth(|w| {
44751            let i: i32 = (*self).into();
44752            i.write_xdr(w)
44753        })
44754    }
44755}
44756
44757/// LiquidityPoolDepositResult is an XDR Union defines as:
44758///
44759/// ```text
44760/// union LiquidityPoolDepositResult switch (LiquidityPoolDepositResultCode code)
44761/// {
44762/// case LIQUIDITY_POOL_DEPOSIT_SUCCESS:
44763///     void;
44764/// case LIQUIDITY_POOL_DEPOSIT_MALFORMED:
44765/// case LIQUIDITY_POOL_DEPOSIT_NO_TRUST:
44766/// case LIQUIDITY_POOL_DEPOSIT_NOT_AUTHORIZED:
44767/// case LIQUIDITY_POOL_DEPOSIT_UNDERFUNDED:
44768/// case LIQUIDITY_POOL_DEPOSIT_LINE_FULL:
44769/// case LIQUIDITY_POOL_DEPOSIT_BAD_PRICE:
44770/// case LIQUIDITY_POOL_DEPOSIT_POOL_FULL:
44771///     void;
44772/// };
44773/// ```
44774///
44775// union with discriminant LiquidityPoolDepositResultCode
44776#[cfg_eval::cfg_eval]
44777#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
44778#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
44779#[cfg_attr(
44780    all(feature = "serde", feature = "alloc"),
44781    serde_with::serde_as,
44782    derive(serde::Serialize, serde::Deserialize),
44783    serde(rename_all = "snake_case")
44784)]
44785#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
44786#[allow(clippy::large_enum_variant)]
44787pub enum LiquidityPoolDepositResult {
44788    Success,
44789    Malformed,
44790    NoTrust,
44791    NotAuthorized,
44792    Underfunded,
44793    LineFull,
44794    BadPrice,
44795    PoolFull,
44796}
44797
44798#[cfg(feature = "alloc")]
44799impl Default for LiquidityPoolDepositResult {
44800    fn default() -> Self {
44801        Self::Success
44802    }
44803}
44804
44805impl LiquidityPoolDepositResult {
44806    pub const VARIANTS: [LiquidityPoolDepositResultCode; 8] = [
44807        LiquidityPoolDepositResultCode::Success,
44808        LiquidityPoolDepositResultCode::Malformed,
44809        LiquidityPoolDepositResultCode::NoTrust,
44810        LiquidityPoolDepositResultCode::NotAuthorized,
44811        LiquidityPoolDepositResultCode::Underfunded,
44812        LiquidityPoolDepositResultCode::LineFull,
44813        LiquidityPoolDepositResultCode::BadPrice,
44814        LiquidityPoolDepositResultCode::PoolFull,
44815    ];
44816    pub const VARIANTS_STR: [&'static str; 8] = [
44817        "Success",
44818        "Malformed",
44819        "NoTrust",
44820        "NotAuthorized",
44821        "Underfunded",
44822        "LineFull",
44823        "BadPrice",
44824        "PoolFull",
44825    ];
44826
44827    #[must_use]
44828    pub const fn name(&self) -> &'static str {
44829        match self {
44830            Self::Success => "Success",
44831            Self::Malformed => "Malformed",
44832            Self::NoTrust => "NoTrust",
44833            Self::NotAuthorized => "NotAuthorized",
44834            Self::Underfunded => "Underfunded",
44835            Self::LineFull => "LineFull",
44836            Self::BadPrice => "BadPrice",
44837            Self::PoolFull => "PoolFull",
44838        }
44839    }
44840
44841    #[must_use]
44842    pub const fn discriminant(&self) -> LiquidityPoolDepositResultCode {
44843        #[allow(clippy::match_same_arms)]
44844        match self {
44845            Self::Success => LiquidityPoolDepositResultCode::Success,
44846            Self::Malformed => LiquidityPoolDepositResultCode::Malformed,
44847            Self::NoTrust => LiquidityPoolDepositResultCode::NoTrust,
44848            Self::NotAuthorized => LiquidityPoolDepositResultCode::NotAuthorized,
44849            Self::Underfunded => LiquidityPoolDepositResultCode::Underfunded,
44850            Self::LineFull => LiquidityPoolDepositResultCode::LineFull,
44851            Self::BadPrice => LiquidityPoolDepositResultCode::BadPrice,
44852            Self::PoolFull => LiquidityPoolDepositResultCode::PoolFull,
44853        }
44854    }
44855
44856    #[must_use]
44857    pub const fn variants() -> [LiquidityPoolDepositResultCode; 8] {
44858        Self::VARIANTS
44859    }
44860}
44861
44862impl Name for LiquidityPoolDepositResult {
44863    #[must_use]
44864    fn name(&self) -> &'static str {
44865        Self::name(self)
44866    }
44867}
44868
44869impl Discriminant<LiquidityPoolDepositResultCode> for LiquidityPoolDepositResult {
44870    #[must_use]
44871    fn discriminant(&self) -> LiquidityPoolDepositResultCode {
44872        Self::discriminant(self)
44873    }
44874}
44875
44876impl Variants<LiquidityPoolDepositResultCode> for LiquidityPoolDepositResult {
44877    fn variants() -> slice::Iter<'static, LiquidityPoolDepositResultCode> {
44878        Self::VARIANTS.iter()
44879    }
44880}
44881
44882impl Union<LiquidityPoolDepositResultCode> for LiquidityPoolDepositResult {}
44883
44884impl ReadXdr for LiquidityPoolDepositResult {
44885    #[cfg(feature = "std")]
44886    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
44887        r.with_limited_depth(|r| {
44888            let dv: LiquidityPoolDepositResultCode =
44889                <LiquidityPoolDepositResultCode as ReadXdr>::read_xdr(r)?;
44890            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
44891            let v = match dv {
44892                LiquidityPoolDepositResultCode::Success => Self::Success,
44893                LiquidityPoolDepositResultCode::Malformed => Self::Malformed,
44894                LiquidityPoolDepositResultCode::NoTrust => Self::NoTrust,
44895                LiquidityPoolDepositResultCode::NotAuthorized => Self::NotAuthorized,
44896                LiquidityPoolDepositResultCode::Underfunded => Self::Underfunded,
44897                LiquidityPoolDepositResultCode::LineFull => Self::LineFull,
44898                LiquidityPoolDepositResultCode::BadPrice => Self::BadPrice,
44899                LiquidityPoolDepositResultCode::PoolFull => Self::PoolFull,
44900                #[allow(unreachable_patterns)]
44901                _ => return Err(Error::Invalid),
44902            };
44903            Ok(v)
44904        })
44905    }
44906}
44907
44908impl WriteXdr for LiquidityPoolDepositResult {
44909    #[cfg(feature = "std")]
44910    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
44911        w.with_limited_depth(|w| {
44912            self.discriminant().write_xdr(w)?;
44913            #[allow(clippy::match_same_arms)]
44914            match self {
44915                Self::Success => ().write_xdr(w)?,
44916                Self::Malformed => ().write_xdr(w)?,
44917                Self::NoTrust => ().write_xdr(w)?,
44918                Self::NotAuthorized => ().write_xdr(w)?,
44919                Self::Underfunded => ().write_xdr(w)?,
44920                Self::LineFull => ().write_xdr(w)?,
44921                Self::BadPrice => ().write_xdr(w)?,
44922                Self::PoolFull => ().write_xdr(w)?,
44923            };
44924            Ok(())
44925        })
44926    }
44927}
44928
44929/// LiquidityPoolWithdrawResultCode is an XDR Enum defines as:
44930///
44931/// ```text
44932/// enum LiquidityPoolWithdrawResultCode
44933/// {
44934///     // codes considered as "success" for the operation
44935///     LIQUIDITY_POOL_WITHDRAW_SUCCESS = 0,
44936///
44937///     // codes considered as "failure" for the operation
44938///     LIQUIDITY_POOL_WITHDRAW_MALFORMED = -1,    // bad input
44939///     LIQUIDITY_POOL_WITHDRAW_NO_TRUST = -2,     // no trust line for one of the
44940///                                                // assets
44941///     LIQUIDITY_POOL_WITHDRAW_UNDERFUNDED = -3,  // not enough balance of the
44942///                                                // pool share
44943///     LIQUIDITY_POOL_WITHDRAW_LINE_FULL = -4,    // would go above limit for one
44944///                                                // of the assets
44945///     LIQUIDITY_POOL_WITHDRAW_UNDER_MINIMUM = -5 // didn't withdraw enough
44946/// };
44947/// ```
44948///
44949// enum
44950#[cfg_attr(feature = "alloc", derive(Default))]
44951#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
44952#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
44953#[cfg_attr(
44954    all(feature = "serde", feature = "alloc"),
44955    derive(serde::Serialize, serde::Deserialize),
44956    serde(rename_all = "snake_case")
44957)]
44958#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
44959#[repr(i32)]
44960pub enum LiquidityPoolWithdrawResultCode {
44961    #[cfg_attr(feature = "alloc", default)]
44962    Success = 0,
44963    Malformed = -1,
44964    NoTrust = -2,
44965    Underfunded = -3,
44966    LineFull = -4,
44967    UnderMinimum = -5,
44968}
44969
44970impl LiquidityPoolWithdrawResultCode {
44971    pub const VARIANTS: [LiquidityPoolWithdrawResultCode; 6] = [
44972        LiquidityPoolWithdrawResultCode::Success,
44973        LiquidityPoolWithdrawResultCode::Malformed,
44974        LiquidityPoolWithdrawResultCode::NoTrust,
44975        LiquidityPoolWithdrawResultCode::Underfunded,
44976        LiquidityPoolWithdrawResultCode::LineFull,
44977        LiquidityPoolWithdrawResultCode::UnderMinimum,
44978    ];
44979    pub const VARIANTS_STR: [&'static str; 6] = [
44980        "Success",
44981        "Malformed",
44982        "NoTrust",
44983        "Underfunded",
44984        "LineFull",
44985        "UnderMinimum",
44986    ];
44987
44988    #[must_use]
44989    pub const fn name(&self) -> &'static str {
44990        match self {
44991            Self::Success => "Success",
44992            Self::Malformed => "Malformed",
44993            Self::NoTrust => "NoTrust",
44994            Self::Underfunded => "Underfunded",
44995            Self::LineFull => "LineFull",
44996            Self::UnderMinimum => "UnderMinimum",
44997        }
44998    }
44999
45000    #[must_use]
45001    pub const fn variants() -> [LiquidityPoolWithdrawResultCode; 6] {
45002        Self::VARIANTS
45003    }
45004}
45005
45006impl Name for LiquidityPoolWithdrawResultCode {
45007    #[must_use]
45008    fn name(&self) -> &'static str {
45009        Self::name(self)
45010    }
45011}
45012
45013impl Variants<LiquidityPoolWithdrawResultCode> for LiquidityPoolWithdrawResultCode {
45014    fn variants() -> slice::Iter<'static, LiquidityPoolWithdrawResultCode> {
45015        Self::VARIANTS.iter()
45016    }
45017}
45018
45019impl Enum for LiquidityPoolWithdrawResultCode {}
45020
45021impl fmt::Display for LiquidityPoolWithdrawResultCode {
45022    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45023        f.write_str(self.name())
45024    }
45025}
45026
45027impl TryFrom<i32> for LiquidityPoolWithdrawResultCode {
45028    type Error = Error;
45029
45030    fn try_from(i: i32) -> Result<Self, Error> {
45031        let e = match i {
45032            0 => LiquidityPoolWithdrawResultCode::Success,
45033            -1 => LiquidityPoolWithdrawResultCode::Malformed,
45034            -2 => LiquidityPoolWithdrawResultCode::NoTrust,
45035            -3 => LiquidityPoolWithdrawResultCode::Underfunded,
45036            -4 => LiquidityPoolWithdrawResultCode::LineFull,
45037            -5 => LiquidityPoolWithdrawResultCode::UnderMinimum,
45038            #[allow(unreachable_patterns)]
45039            _ => return Err(Error::Invalid),
45040        };
45041        Ok(e)
45042    }
45043}
45044
45045impl From<LiquidityPoolWithdrawResultCode> for i32 {
45046    #[must_use]
45047    fn from(e: LiquidityPoolWithdrawResultCode) -> Self {
45048        e as Self
45049    }
45050}
45051
45052impl ReadXdr for LiquidityPoolWithdrawResultCode {
45053    #[cfg(feature = "std")]
45054    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
45055        r.with_limited_depth(|r| {
45056            let e = i32::read_xdr(r)?;
45057            let v: Self = e.try_into()?;
45058            Ok(v)
45059        })
45060    }
45061}
45062
45063impl WriteXdr for LiquidityPoolWithdrawResultCode {
45064    #[cfg(feature = "std")]
45065    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
45066        w.with_limited_depth(|w| {
45067            let i: i32 = (*self).into();
45068            i.write_xdr(w)
45069        })
45070    }
45071}
45072
45073/// LiquidityPoolWithdrawResult is an XDR Union defines as:
45074///
45075/// ```text
45076/// union LiquidityPoolWithdrawResult switch (LiquidityPoolWithdrawResultCode code)
45077/// {
45078/// case LIQUIDITY_POOL_WITHDRAW_SUCCESS:
45079///     void;
45080/// case LIQUIDITY_POOL_WITHDRAW_MALFORMED:
45081/// case LIQUIDITY_POOL_WITHDRAW_NO_TRUST:
45082/// case LIQUIDITY_POOL_WITHDRAW_UNDERFUNDED:
45083/// case LIQUIDITY_POOL_WITHDRAW_LINE_FULL:
45084/// case LIQUIDITY_POOL_WITHDRAW_UNDER_MINIMUM:
45085///     void;
45086/// };
45087/// ```
45088///
45089// union with discriminant LiquidityPoolWithdrawResultCode
45090#[cfg_eval::cfg_eval]
45091#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
45092#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
45093#[cfg_attr(
45094    all(feature = "serde", feature = "alloc"),
45095    serde_with::serde_as,
45096    derive(serde::Serialize, serde::Deserialize),
45097    serde(rename_all = "snake_case")
45098)]
45099#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
45100#[allow(clippy::large_enum_variant)]
45101pub enum LiquidityPoolWithdrawResult {
45102    Success,
45103    Malformed,
45104    NoTrust,
45105    Underfunded,
45106    LineFull,
45107    UnderMinimum,
45108}
45109
45110#[cfg(feature = "alloc")]
45111impl Default for LiquidityPoolWithdrawResult {
45112    fn default() -> Self {
45113        Self::Success
45114    }
45115}
45116
45117impl LiquidityPoolWithdrawResult {
45118    pub const VARIANTS: [LiquidityPoolWithdrawResultCode; 6] = [
45119        LiquidityPoolWithdrawResultCode::Success,
45120        LiquidityPoolWithdrawResultCode::Malformed,
45121        LiquidityPoolWithdrawResultCode::NoTrust,
45122        LiquidityPoolWithdrawResultCode::Underfunded,
45123        LiquidityPoolWithdrawResultCode::LineFull,
45124        LiquidityPoolWithdrawResultCode::UnderMinimum,
45125    ];
45126    pub const VARIANTS_STR: [&'static str; 6] = [
45127        "Success",
45128        "Malformed",
45129        "NoTrust",
45130        "Underfunded",
45131        "LineFull",
45132        "UnderMinimum",
45133    ];
45134
45135    #[must_use]
45136    pub const fn name(&self) -> &'static str {
45137        match self {
45138            Self::Success => "Success",
45139            Self::Malformed => "Malformed",
45140            Self::NoTrust => "NoTrust",
45141            Self::Underfunded => "Underfunded",
45142            Self::LineFull => "LineFull",
45143            Self::UnderMinimum => "UnderMinimum",
45144        }
45145    }
45146
45147    #[must_use]
45148    pub const fn discriminant(&self) -> LiquidityPoolWithdrawResultCode {
45149        #[allow(clippy::match_same_arms)]
45150        match self {
45151            Self::Success => LiquidityPoolWithdrawResultCode::Success,
45152            Self::Malformed => LiquidityPoolWithdrawResultCode::Malformed,
45153            Self::NoTrust => LiquidityPoolWithdrawResultCode::NoTrust,
45154            Self::Underfunded => LiquidityPoolWithdrawResultCode::Underfunded,
45155            Self::LineFull => LiquidityPoolWithdrawResultCode::LineFull,
45156            Self::UnderMinimum => LiquidityPoolWithdrawResultCode::UnderMinimum,
45157        }
45158    }
45159
45160    #[must_use]
45161    pub const fn variants() -> [LiquidityPoolWithdrawResultCode; 6] {
45162        Self::VARIANTS
45163    }
45164}
45165
45166impl Name for LiquidityPoolWithdrawResult {
45167    #[must_use]
45168    fn name(&self) -> &'static str {
45169        Self::name(self)
45170    }
45171}
45172
45173impl Discriminant<LiquidityPoolWithdrawResultCode> for LiquidityPoolWithdrawResult {
45174    #[must_use]
45175    fn discriminant(&self) -> LiquidityPoolWithdrawResultCode {
45176        Self::discriminant(self)
45177    }
45178}
45179
45180impl Variants<LiquidityPoolWithdrawResultCode> for LiquidityPoolWithdrawResult {
45181    fn variants() -> slice::Iter<'static, LiquidityPoolWithdrawResultCode> {
45182        Self::VARIANTS.iter()
45183    }
45184}
45185
45186impl Union<LiquidityPoolWithdrawResultCode> for LiquidityPoolWithdrawResult {}
45187
45188impl ReadXdr for LiquidityPoolWithdrawResult {
45189    #[cfg(feature = "std")]
45190    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
45191        r.with_limited_depth(|r| {
45192            let dv: LiquidityPoolWithdrawResultCode =
45193                <LiquidityPoolWithdrawResultCode as ReadXdr>::read_xdr(r)?;
45194            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
45195            let v = match dv {
45196                LiquidityPoolWithdrawResultCode::Success => Self::Success,
45197                LiquidityPoolWithdrawResultCode::Malformed => Self::Malformed,
45198                LiquidityPoolWithdrawResultCode::NoTrust => Self::NoTrust,
45199                LiquidityPoolWithdrawResultCode::Underfunded => Self::Underfunded,
45200                LiquidityPoolWithdrawResultCode::LineFull => Self::LineFull,
45201                LiquidityPoolWithdrawResultCode::UnderMinimum => Self::UnderMinimum,
45202                #[allow(unreachable_patterns)]
45203                _ => return Err(Error::Invalid),
45204            };
45205            Ok(v)
45206        })
45207    }
45208}
45209
45210impl WriteXdr for LiquidityPoolWithdrawResult {
45211    #[cfg(feature = "std")]
45212    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
45213        w.with_limited_depth(|w| {
45214            self.discriminant().write_xdr(w)?;
45215            #[allow(clippy::match_same_arms)]
45216            match self {
45217                Self::Success => ().write_xdr(w)?,
45218                Self::Malformed => ().write_xdr(w)?,
45219                Self::NoTrust => ().write_xdr(w)?,
45220                Self::Underfunded => ().write_xdr(w)?,
45221                Self::LineFull => ().write_xdr(w)?,
45222                Self::UnderMinimum => ().write_xdr(w)?,
45223            };
45224            Ok(())
45225        })
45226    }
45227}
45228
45229/// InvokeHostFunctionResultCode is an XDR Enum defines as:
45230///
45231/// ```text
45232/// enum InvokeHostFunctionResultCode
45233/// {
45234///     // codes considered as "success" for the operation
45235///     INVOKE_HOST_FUNCTION_SUCCESS = 0,
45236///
45237///     // codes considered as "failure" for the operation
45238///     INVOKE_HOST_FUNCTION_MALFORMED = -1,
45239///     INVOKE_HOST_FUNCTION_TRAPPED = -2,
45240///     INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED = -3,
45241///     INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED = -4,
45242///     INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE = -5
45243/// };
45244/// ```
45245///
45246// enum
45247#[cfg_attr(feature = "alloc", derive(Default))]
45248#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
45249#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
45250#[cfg_attr(
45251    all(feature = "serde", feature = "alloc"),
45252    derive(serde::Serialize, serde::Deserialize),
45253    serde(rename_all = "snake_case")
45254)]
45255#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
45256#[repr(i32)]
45257pub enum InvokeHostFunctionResultCode {
45258    #[cfg_attr(feature = "alloc", default)]
45259    Success = 0,
45260    Malformed = -1,
45261    Trapped = -2,
45262    ResourceLimitExceeded = -3,
45263    EntryArchived = -4,
45264    InsufficientRefundableFee = -5,
45265}
45266
45267impl InvokeHostFunctionResultCode {
45268    pub const VARIANTS: [InvokeHostFunctionResultCode; 6] = [
45269        InvokeHostFunctionResultCode::Success,
45270        InvokeHostFunctionResultCode::Malformed,
45271        InvokeHostFunctionResultCode::Trapped,
45272        InvokeHostFunctionResultCode::ResourceLimitExceeded,
45273        InvokeHostFunctionResultCode::EntryArchived,
45274        InvokeHostFunctionResultCode::InsufficientRefundableFee,
45275    ];
45276    pub const VARIANTS_STR: [&'static str; 6] = [
45277        "Success",
45278        "Malformed",
45279        "Trapped",
45280        "ResourceLimitExceeded",
45281        "EntryArchived",
45282        "InsufficientRefundableFee",
45283    ];
45284
45285    #[must_use]
45286    pub const fn name(&self) -> &'static str {
45287        match self {
45288            Self::Success => "Success",
45289            Self::Malformed => "Malformed",
45290            Self::Trapped => "Trapped",
45291            Self::ResourceLimitExceeded => "ResourceLimitExceeded",
45292            Self::EntryArchived => "EntryArchived",
45293            Self::InsufficientRefundableFee => "InsufficientRefundableFee",
45294        }
45295    }
45296
45297    #[must_use]
45298    pub const fn variants() -> [InvokeHostFunctionResultCode; 6] {
45299        Self::VARIANTS
45300    }
45301}
45302
45303impl Name for InvokeHostFunctionResultCode {
45304    #[must_use]
45305    fn name(&self) -> &'static str {
45306        Self::name(self)
45307    }
45308}
45309
45310impl Variants<InvokeHostFunctionResultCode> for InvokeHostFunctionResultCode {
45311    fn variants() -> slice::Iter<'static, InvokeHostFunctionResultCode> {
45312        Self::VARIANTS.iter()
45313    }
45314}
45315
45316impl Enum for InvokeHostFunctionResultCode {}
45317
45318impl fmt::Display for InvokeHostFunctionResultCode {
45319    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45320        f.write_str(self.name())
45321    }
45322}
45323
45324impl TryFrom<i32> for InvokeHostFunctionResultCode {
45325    type Error = Error;
45326
45327    fn try_from(i: i32) -> Result<Self, Error> {
45328        let e = match i {
45329            0 => InvokeHostFunctionResultCode::Success,
45330            -1 => InvokeHostFunctionResultCode::Malformed,
45331            -2 => InvokeHostFunctionResultCode::Trapped,
45332            -3 => InvokeHostFunctionResultCode::ResourceLimitExceeded,
45333            -4 => InvokeHostFunctionResultCode::EntryArchived,
45334            -5 => InvokeHostFunctionResultCode::InsufficientRefundableFee,
45335            #[allow(unreachable_patterns)]
45336            _ => return Err(Error::Invalid),
45337        };
45338        Ok(e)
45339    }
45340}
45341
45342impl From<InvokeHostFunctionResultCode> for i32 {
45343    #[must_use]
45344    fn from(e: InvokeHostFunctionResultCode) -> Self {
45345        e as Self
45346    }
45347}
45348
45349impl ReadXdr for InvokeHostFunctionResultCode {
45350    #[cfg(feature = "std")]
45351    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
45352        r.with_limited_depth(|r| {
45353            let e = i32::read_xdr(r)?;
45354            let v: Self = e.try_into()?;
45355            Ok(v)
45356        })
45357    }
45358}
45359
45360impl WriteXdr for InvokeHostFunctionResultCode {
45361    #[cfg(feature = "std")]
45362    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
45363        w.with_limited_depth(|w| {
45364            let i: i32 = (*self).into();
45365            i.write_xdr(w)
45366        })
45367    }
45368}
45369
45370/// InvokeHostFunctionResult is an XDR Union defines as:
45371///
45372/// ```text
45373/// union InvokeHostFunctionResult switch (InvokeHostFunctionResultCode code)
45374/// {
45375/// case INVOKE_HOST_FUNCTION_SUCCESS:
45376///     Hash success; // sha256(InvokeHostFunctionSuccessPreImage)
45377/// case INVOKE_HOST_FUNCTION_MALFORMED:
45378/// case INVOKE_HOST_FUNCTION_TRAPPED:
45379/// case INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED:
45380/// case INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED:
45381/// case INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE:
45382///     void;
45383/// };
45384/// ```
45385///
45386// union with discriminant InvokeHostFunctionResultCode
45387#[cfg_eval::cfg_eval]
45388#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
45389#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
45390#[cfg_attr(
45391    all(feature = "serde", feature = "alloc"),
45392    serde_with::serde_as,
45393    derive(serde::Serialize, serde::Deserialize),
45394    serde(rename_all = "snake_case")
45395)]
45396#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
45397#[allow(clippy::large_enum_variant)]
45398pub enum InvokeHostFunctionResult {
45399    Success(Hash),
45400    Malformed,
45401    Trapped,
45402    ResourceLimitExceeded,
45403    EntryArchived,
45404    InsufficientRefundableFee,
45405}
45406
45407#[cfg(feature = "alloc")]
45408impl Default for InvokeHostFunctionResult {
45409    fn default() -> Self {
45410        Self::Success(Hash::default())
45411    }
45412}
45413
45414impl InvokeHostFunctionResult {
45415    pub const VARIANTS: [InvokeHostFunctionResultCode; 6] = [
45416        InvokeHostFunctionResultCode::Success,
45417        InvokeHostFunctionResultCode::Malformed,
45418        InvokeHostFunctionResultCode::Trapped,
45419        InvokeHostFunctionResultCode::ResourceLimitExceeded,
45420        InvokeHostFunctionResultCode::EntryArchived,
45421        InvokeHostFunctionResultCode::InsufficientRefundableFee,
45422    ];
45423    pub const VARIANTS_STR: [&'static str; 6] = [
45424        "Success",
45425        "Malformed",
45426        "Trapped",
45427        "ResourceLimitExceeded",
45428        "EntryArchived",
45429        "InsufficientRefundableFee",
45430    ];
45431
45432    #[must_use]
45433    pub const fn name(&self) -> &'static str {
45434        match self {
45435            Self::Success(_) => "Success",
45436            Self::Malformed => "Malformed",
45437            Self::Trapped => "Trapped",
45438            Self::ResourceLimitExceeded => "ResourceLimitExceeded",
45439            Self::EntryArchived => "EntryArchived",
45440            Self::InsufficientRefundableFee => "InsufficientRefundableFee",
45441        }
45442    }
45443
45444    #[must_use]
45445    pub const fn discriminant(&self) -> InvokeHostFunctionResultCode {
45446        #[allow(clippy::match_same_arms)]
45447        match self {
45448            Self::Success(_) => InvokeHostFunctionResultCode::Success,
45449            Self::Malformed => InvokeHostFunctionResultCode::Malformed,
45450            Self::Trapped => InvokeHostFunctionResultCode::Trapped,
45451            Self::ResourceLimitExceeded => InvokeHostFunctionResultCode::ResourceLimitExceeded,
45452            Self::EntryArchived => InvokeHostFunctionResultCode::EntryArchived,
45453            Self::InsufficientRefundableFee => {
45454                InvokeHostFunctionResultCode::InsufficientRefundableFee
45455            }
45456        }
45457    }
45458
45459    #[must_use]
45460    pub const fn variants() -> [InvokeHostFunctionResultCode; 6] {
45461        Self::VARIANTS
45462    }
45463}
45464
45465impl Name for InvokeHostFunctionResult {
45466    #[must_use]
45467    fn name(&self) -> &'static str {
45468        Self::name(self)
45469    }
45470}
45471
45472impl Discriminant<InvokeHostFunctionResultCode> for InvokeHostFunctionResult {
45473    #[must_use]
45474    fn discriminant(&self) -> InvokeHostFunctionResultCode {
45475        Self::discriminant(self)
45476    }
45477}
45478
45479impl Variants<InvokeHostFunctionResultCode> for InvokeHostFunctionResult {
45480    fn variants() -> slice::Iter<'static, InvokeHostFunctionResultCode> {
45481        Self::VARIANTS.iter()
45482    }
45483}
45484
45485impl Union<InvokeHostFunctionResultCode> for InvokeHostFunctionResult {}
45486
45487impl ReadXdr for InvokeHostFunctionResult {
45488    #[cfg(feature = "std")]
45489    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
45490        r.with_limited_depth(|r| {
45491            let dv: InvokeHostFunctionResultCode =
45492                <InvokeHostFunctionResultCode as ReadXdr>::read_xdr(r)?;
45493            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
45494            let v = match dv {
45495                InvokeHostFunctionResultCode::Success => Self::Success(Hash::read_xdr(r)?),
45496                InvokeHostFunctionResultCode::Malformed => Self::Malformed,
45497                InvokeHostFunctionResultCode::Trapped => Self::Trapped,
45498                InvokeHostFunctionResultCode::ResourceLimitExceeded => Self::ResourceLimitExceeded,
45499                InvokeHostFunctionResultCode::EntryArchived => Self::EntryArchived,
45500                InvokeHostFunctionResultCode::InsufficientRefundableFee => {
45501                    Self::InsufficientRefundableFee
45502                }
45503                #[allow(unreachable_patterns)]
45504                _ => return Err(Error::Invalid),
45505            };
45506            Ok(v)
45507        })
45508    }
45509}
45510
45511impl WriteXdr for InvokeHostFunctionResult {
45512    #[cfg(feature = "std")]
45513    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
45514        w.with_limited_depth(|w| {
45515            self.discriminant().write_xdr(w)?;
45516            #[allow(clippy::match_same_arms)]
45517            match self {
45518                Self::Success(v) => v.write_xdr(w)?,
45519                Self::Malformed => ().write_xdr(w)?,
45520                Self::Trapped => ().write_xdr(w)?,
45521                Self::ResourceLimitExceeded => ().write_xdr(w)?,
45522                Self::EntryArchived => ().write_xdr(w)?,
45523                Self::InsufficientRefundableFee => ().write_xdr(w)?,
45524            };
45525            Ok(())
45526        })
45527    }
45528}
45529
45530/// ExtendFootprintTtlResultCode is an XDR Enum defines as:
45531///
45532/// ```text
45533/// enum ExtendFootprintTTLResultCode
45534/// {
45535///     // codes considered as "success" for the operation
45536///     EXTEND_FOOTPRINT_TTL_SUCCESS = 0,
45537///
45538///     // codes considered as "failure" for the operation
45539///     EXTEND_FOOTPRINT_TTL_MALFORMED = -1,
45540///     EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED = -2,
45541///     EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE = -3
45542/// };
45543/// ```
45544///
45545// enum
45546#[cfg_attr(feature = "alloc", derive(Default))]
45547#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
45548#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
45549#[cfg_attr(
45550    all(feature = "serde", feature = "alloc"),
45551    derive(serde::Serialize, serde::Deserialize),
45552    serde(rename_all = "snake_case")
45553)]
45554#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
45555#[repr(i32)]
45556pub enum ExtendFootprintTtlResultCode {
45557    #[cfg_attr(feature = "alloc", default)]
45558    Success = 0,
45559    Malformed = -1,
45560    ResourceLimitExceeded = -2,
45561    InsufficientRefundableFee = -3,
45562}
45563
45564impl ExtendFootprintTtlResultCode {
45565    pub const VARIANTS: [ExtendFootprintTtlResultCode; 4] = [
45566        ExtendFootprintTtlResultCode::Success,
45567        ExtendFootprintTtlResultCode::Malformed,
45568        ExtendFootprintTtlResultCode::ResourceLimitExceeded,
45569        ExtendFootprintTtlResultCode::InsufficientRefundableFee,
45570    ];
45571    pub const VARIANTS_STR: [&'static str; 4] = [
45572        "Success",
45573        "Malformed",
45574        "ResourceLimitExceeded",
45575        "InsufficientRefundableFee",
45576    ];
45577
45578    #[must_use]
45579    pub const fn name(&self) -> &'static str {
45580        match self {
45581            Self::Success => "Success",
45582            Self::Malformed => "Malformed",
45583            Self::ResourceLimitExceeded => "ResourceLimitExceeded",
45584            Self::InsufficientRefundableFee => "InsufficientRefundableFee",
45585        }
45586    }
45587
45588    #[must_use]
45589    pub const fn variants() -> [ExtendFootprintTtlResultCode; 4] {
45590        Self::VARIANTS
45591    }
45592}
45593
45594impl Name for ExtendFootprintTtlResultCode {
45595    #[must_use]
45596    fn name(&self) -> &'static str {
45597        Self::name(self)
45598    }
45599}
45600
45601impl Variants<ExtendFootprintTtlResultCode> for ExtendFootprintTtlResultCode {
45602    fn variants() -> slice::Iter<'static, ExtendFootprintTtlResultCode> {
45603        Self::VARIANTS.iter()
45604    }
45605}
45606
45607impl Enum for ExtendFootprintTtlResultCode {}
45608
45609impl fmt::Display for ExtendFootprintTtlResultCode {
45610    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45611        f.write_str(self.name())
45612    }
45613}
45614
45615impl TryFrom<i32> for ExtendFootprintTtlResultCode {
45616    type Error = Error;
45617
45618    fn try_from(i: i32) -> Result<Self, Error> {
45619        let e = match i {
45620            0 => ExtendFootprintTtlResultCode::Success,
45621            -1 => ExtendFootprintTtlResultCode::Malformed,
45622            -2 => ExtendFootprintTtlResultCode::ResourceLimitExceeded,
45623            -3 => ExtendFootprintTtlResultCode::InsufficientRefundableFee,
45624            #[allow(unreachable_patterns)]
45625            _ => return Err(Error::Invalid),
45626        };
45627        Ok(e)
45628    }
45629}
45630
45631impl From<ExtendFootprintTtlResultCode> for i32 {
45632    #[must_use]
45633    fn from(e: ExtendFootprintTtlResultCode) -> Self {
45634        e as Self
45635    }
45636}
45637
45638impl ReadXdr for ExtendFootprintTtlResultCode {
45639    #[cfg(feature = "std")]
45640    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
45641        r.with_limited_depth(|r| {
45642            let e = i32::read_xdr(r)?;
45643            let v: Self = e.try_into()?;
45644            Ok(v)
45645        })
45646    }
45647}
45648
45649impl WriteXdr for ExtendFootprintTtlResultCode {
45650    #[cfg(feature = "std")]
45651    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
45652        w.with_limited_depth(|w| {
45653            let i: i32 = (*self).into();
45654            i.write_xdr(w)
45655        })
45656    }
45657}
45658
45659/// ExtendFootprintTtlResult is an XDR Union defines as:
45660///
45661/// ```text
45662/// union ExtendFootprintTTLResult switch (ExtendFootprintTTLResultCode code)
45663/// {
45664/// case EXTEND_FOOTPRINT_TTL_SUCCESS:
45665///     void;
45666/// case EXTEND_FOOTPRINT_TTL_MALFORMED:
45667/// case EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED:
45668/// case EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE:
45669///     void;
45670/// };
45671/// ```
45672///
45673// union with discriminant ExtendFootprintTtlResultCode
45674#[cfg_eval::cfg_eval]
45675#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
45676#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
45677#[cfg_attr(
45678    all(feature = "serde", feature = "alloc"),
45679    serde_with::serde_as,
45680    derive(serde::Serialize, serde::Deserialize),
45681    serde(rename_all = "snake_case")
45682)]
45683#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
45684#[allow(clippy::large_enum_variant)]
45685pub enum ExtendFootprintTtlResult {
45686    Success,
45687    Malformed,
45688    ResourceLimitExceeded,
45689    InsufficientRefundableFee,
45690}
45691
45692#[cfg(feature = "alloc")]
45693impl Default for ExtendFootprintTtlResult {
45694    fn default() -> Self {
45695        Self::Success
45696    }
45697}
45698
45699impl ExtendFootprintTtlResult {
45700    pub const VARIANTS: [ExtendFootprintTtlResultCode; 4] = [
45701        ExtendFootprintTtlResultCode::Success,
45702        ExtendFootprintTtlResultCode::Malformed,
45703        ExtendFootprintTtlResultCode::ResourceLimitExceeded,
45704        ExtendFootprintTtlResultCode::InsufficientRefundableFee,
45705    ];
45706    pub const VARIANTS_STR: [&'static str; 4] = [
45707        "Success",
45708        "Malformed",
45709        "ResourceLimitExceeded",
45710        "InsufficientRefundableFee",
45711    ];
45712
45713    #[must_use]
45714    pub const fn name(&self) -> &'static str {
45715        match self {
45716            Self::Success => "Success",
45717            Self::Malformed => "Malformed",
45718            Self::ResourceLimitExceeded => "ResourceLimitExceeded",
45719            Self::InsufficientRefundableFee => "InsufficientRefundableFee",
45720        }
45721    }
45722
45723    #[must_use]
45724    pub const fn discriminant(&self) -> ExtendFootprintTtlResultCode {
45725        #[allow(clippy::match_same_arms)]
45726        match self {
45727            Self::Success => ExtendFootprintTtlResultCode::Success,
45728            Self::Malformed => ExtendFootprintTtlResultCode::Malformed,
45729            Self::ResourceLimitExceeded => ExtendFootprintTtlResultCode::ResourceLimitExceeded,
45730            Self::InsufficientRefundableFee => {
45731                ExtendFootprintTtlResultCode::InsufficientRefundableFee
45732            }
45733        }
45734    }
45735
45736    #[must_use]
45737    pub const fn variants() -> [ExtendFootprintTtlResultCode; 4] {
45738        Self::VARIANTS
45739    }
45740}
45741
45742impl Name for ExtendFootprintTtlResult {
45743    #[must_use]
45744    fn name(&self) -> &'static str {
45745        Self::name(self)
45746    }
45747}
45748
45749impl Discriminant<ExtendFootprintTtlResultCode> for ExtendFootprintTtlResult {
45750    #[must_use]
45751    fn discriminant(&self) -> ExtendFootprintTtlResultCode {
45752        Self::discriminant(self)
45753    }
45754}
45755
45756impl Variants<ExtendFootprintTtlResultCode> for ExtendFootprintTtlResult {
45757    fn variants() -> slice::Iter<'static, ExtendFootprintTtlResultCode> {
45758        Self::VARIANTS.iter()
45759    }
45760}
45761
45762impl Union<ExtendFootprintTtlResultCode> for ExtendFootprintTtlResult {}
45763
45764impl ReadXdr for ExtendFootprintTtlResult {
45765    #[cfg(feature = "std")]
45766    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
45767        r.with_limited_depth(|r| {
45768            let dv: ExtendFootprintTtlResultCode =
45769                <ExtendFootprintTtlResultCode as ReadXdr>::read_xdr(r)?;
45770            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
45771            let v = match dv {
45772                ExtendFootprintTtlResultCode::Success => Self::Success,
45773                ExtendFootprintTtlResultCode::Malformed => Self::Malformed,
45774                ExtendFootprintTtlResultCode::ResourceLimitExceeded => Self::ResourceLimitExceeded,
45775                ExtendFootprintTtlResultCode::InsufficientRefundableFee => {
45776                    Self::InsufficientRefundableFee
45777                }
45778                #[allow(unreachable_patterns)]
45779                _ => return Err(Error::Invalid),
45780            };
45781            Ok(v)
45782        })
45783    }
45784}
45785
45786impl WriteXdr for ExtendFootprintTtlResult {
45787    #[cfg(feature = "std")]
45788    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
45789        w.with_limited_depth(|w| {
45790            self.discriminant().write_xdr(w)?;
45791            #[allow(clippy::match_same_arms)]
45792            match self {
45793                Self::Success => ().write_xdr(w)?,
45794                Self::Malformed => ().write_xdr(w)?,
45795                Self::ResourceLimitExceeded => ().write_xdr(w)?,
45796                Self::InsufficientRefundableFee => ().write_xdr(w)?,
45797            };
45798            Ok(())
45799        })
45800    }
45801}
45802
45803/// RestoreFootprintResultCode is an XDR Enum defines as:
45804///
45805/// ```text
45806/// enum RestoreFootprintResultCode
45807/// {
45808///     // codes considered as "success" for the operation
45809///     RESTORE_FOOTPRINT_SUCCESS = 0,
45810///
45811///     // codes considered as "failure" for the operation
45812///     RESTORE_FOOTPRINT_MALFORMED = -1,
45813///     RESTORE_FOOTPRINT_RESOURCE_LIMIT_EXCEEDED = -2,
45814///     RESTORE_FOOTPRINT_INSUFFICIENT_REFUNDABLE_FEE = -3
45815/// };
45816/// ```
45817///
45818// enum
45819#[cfg_attr(feature = "alloc", derive(Default))]
45820#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
45821#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
45822#[cfg_attr(
45823    all(feature = "serde", feature = "alloc"),
45824    derive(serde::Serialize, serde::Deserialize),
45825    serde(rename_all = "snake_case")
45826)]
45827#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
45828#[repr(i32)]
45829pub enum RestoreFootprintResultCode {
45830    #[cfg_attr(feature = "alloc", default)]
45831    Success = 0,
45832    Malformed = -1,
45833    ResourceLimitExceeded = -2,
45834    InsufficientRefundableFee = -3,
45835}
45836
45837impl RestoreFootprintResultCode {
45838    pub const VARIANTS: [RestoreFootprintResultCode; 4] = [
45839        RestoreFootprintResultCode::Success,
45840        RestoreFootprintResultCode::Malformed,
45841        RestoreFootprintResultCode::ResourceLimitExceeded,
45842        RestoreFootprintResultCode::InsufficientRefundableFee,
45843    ];
45844    pub const VARIANTS_STR: [&'static str; 4] = [
45845        "Success",
45846        "Malformed",
45847        "ResourceLimitExceeded",
45848        "InsufficientRefundableFee",
45849    ];
45850
45851    #[must_use]
45852    pub const fn name(&self) -> &'static str {
45853        match self {
45854            Self::Success => "Success",
45855            Self::Malformed => "Malformed",
45856            Self::ResourceLimitExceeded => "ResourceLimitExceeded",
45857            Self::InsufficientRefundableFee => "InsufficientRefundableFee",
45858        }
45859    }
45860
45861    #[must_use]
45862    pub const fn variants() -> [RestoreFootprintResultCode; 4] {
45863        Self::VARIANTS
45864    }
45865}
45866
45867impl Name for RestoreFootprintResultCode {
45868    #[must_use]
45869    fn name(&self) -> &'static str {
45870        Self::name(self)
45871    }
45872}
45873
45874impl Variants<RestoreFootprintResultCode> for RestoreFootprintResultCode {
45875    fn variants() -> slice::Iter<'static, RestoreFootprintResultCode> {
45876        Self::VARIANTS.iter()
45877    }
45878}
45879
45880impl Enum for RestoreFootprintResultCode {}
45881
45882impl fmt::Display for RestoreFootprintResultCode {
45883    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45884        f.write_str(self.name())
45885    }
45886}
45887
45888impl TryFrom<i32> for RestoreFootprintResultCode {
45889    type Error = Error;
45890
45891    fn try_from(i: i32) -> Result<Self, Error> {
45892        let e = match i {
45893            0 => RestoreFootprintResultCode::Success,
45894            -1 => RestoreFootprintResultCode::Malformed,
45895            -2 => RestoreFootprintResultCode::ResourceLimitExceeded,
45896            -3 => RestoreFootprintResultCode::InsufficientRefundableFee,
45897            #[allow(unreachable_patterns)]
45898            _ => return Err(Error::Invalid),
45899        };
45900        Ok(e)
45901    }
45902}
45903
45904impl From<RestoreFootprintResultCode> for i32 {
45905    #[must_use]
45906    fn from(e: RestoreFootprintResultCode) -> Self {
45907        e as Self
45908    }
45909}
45910
45911impl ReadXdr for RestoreFootprintResultCode {
45912    #[cfg(feature = "std")]
45913    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
45914        r.with_limited_depth(|r| {
45915            let e = i32::read_xdr(r)?;
45916            let v: Self = e.try_into()?;
45917            Ok(v)
45918        })
45919    }
45920}
45921
45922impl WriteXdr for RestoreFootprintResultCode {
45923    #[cfg(feature = "std")]
45924    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
45925        w.with_limited_depth(|w| {
45926            let i: i32 = (*self).into();
45927            i.write_xdr(w)
45928        })
45929    }
45930}
45931
45932/// RestoreFootprintResult is an XDR Union defines as:
45933///
45934/// ```text
45935/// union RestoreFootprintResult switch (RestoreFootprintResultCode code)
45936/// {
45937/// case RESTORE_FOOTPRINT_SUCCESS:
45938///     void;
45939/// case RESTORE_FOOTPRINT_MALFORMED:
45940/// case RESTORE_FOOTPRINT_RESOURCE_LIMIT_EXCEEDED:
45941/// case RESTORE_FOOTPRINT_INSUFFICIENT_REFUNDABLE_FEE:
45942///     void;
45943/// };
45944/// ```
45945///
45946// union with discriminant RestoreFootprintResultCode
45947#[cfg_eval::cfg_eval]
45948#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
45949#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
45950#[cfg_attr(
45951    all(feature = "serde", feature = "alloc"),
45952    serde_with::serde_as,
45953    derive(serde::Serialize, serde::Deserialize),
45954    serde(rename_all = "snake_case")
45955)]
45956#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
45957#[allow(clippy::large_enum_variant)]
45958pub enum RestoreFootprintResult {
45959    Success,
45960    Malformed,
45961    ResourceLimitExceeded,
45962    InsufficientRefundableFee,
45963}
45964
45965#[cfg(feature = "alloc")]
45966impl Default for RestoreFootprintResult {
45967    fn default() -> Self {
45968        Self::Success
45969    }
45970}
45971
45972impl RestoreFootprintResult {
45973    pub const VARIANTS: [RestoreFootprintResultCode; 4] = [
45974        RestoreFootprintResultCode::Success,
45975        RestoreFootprintResultCode::Malformed,
45976        RestoreFootprintResultCode::ResourceLimitExceeded,
45977        RestoreFootprintResultCode::InsufficientRefundableFee,
45978    ];
45979    pub const VARIANTS_STR: [&'static str; 4] = [
45980        "Success",
45981        "Malformed",
45982        "ResourceLimitExceeded",
45983        "InsufficientRefundableFee",
45984    ];
45985
45986    #[must_use]
45987    pub const fn name(&self) -> &'static str {
45988        match self {
45989            Self::Success => "Success",
45990            Self::Malformed => "Malformed",
45991            Self::ResourceLimitExceeded => "ResourceLimitExceeded",
45992            Self::InsufficientRefundableFee => "InsufficientRefundableFee",
45993        }
45994    }
45995
45996    #[must_use]
45997    pub const fn discriminant(&self) -> RestoreFootprintResultCode {
45998        #[allow(clippy::match_same_arms)]
45999        match self {
46000            Self::Success => RestoreFootprintResultCode::Success,
46001            Self::Malformed => RestoreFootprintResultCode::Malformed,
46002            Self::ResourceLimitExceeded => RestoreFootprintResultCode::ResourceLimitExceeded,
46003            Self::InsufficientRefundableFee => {
46004                RestoreFootprintResultCode::InsufficientRefundableFee
46005            }
46006        }
46007    }
46008
46009    #[must_use]
46010    pub const fn variants() -> [RestoreFootprintResultCode; 4] {
46011        Self::VARIANTS
46012    }
46013}
46014
46015impl Name for RestoreFootprintResult {
46016    #[must_use]
46017    fn name(&self) -> &'static str {
46018        Self::name(self)
46019    }
46020}
46021
46022impl Discriminant<RestoreFootprintResultCode> for RestoreFootprintResult {
46023    #[must_use]
46024    fn discriminant(&self) -> RestoreFootprintResultCode {
46025        Self::discriminant(self)
46026    }
46027}
46028
46029impl Variants<RestoreFootprintResultCode> for RestoreFootprintResult {
46030    fn variants() -> slice::Iter<'static, RestoreFootprintResultCode> {
46031        Self::VARIANTS.iter()
46032    }
46033}
46034
46035impl Union<RestoreFootprintResultCode> for RestoreFootprintResult {}
46036
46037impl ReadXdr for RestoreFootprintResult {
46038    #[cfg(feature = "std")]
46039    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
46040        r.with_limited_depth(|r| {
46041            let dv: RestoreFootprintResultCode =
46042                <RestoreFootprintResultCode as ReadXdr>::read_xdr(r)?;
46043            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
46044            let v = match dv {
46045                RestoreFootprintResultCode::Success => Self::Success,
46046                RestoreFootprintResultCode::Malformed => Self::Malformed,
46047                RestoreFootprintResultCode::ResourceLimitExceeded => Self::ResourceLimitExceeded,
46048                RestoreFootprintResultCode::InsufficientRefundableFee => {
46049                    Self::InsufficientRefundableFee
46050                }
46051                #[allow(unreachable_patterns)]
46052                _ => return Err(Error::Invalid),
46053            };
46054            Ok(v)
46055        })
46056    }
46057}
46058
46059impl WriteXdr for RestoreFootprintResult {
46060    #[cfg(feature = "std")]
46061    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
46062        w.with_limited_depth(|w| {
46063            self.discriminant().write_xdr(w)?;
46064            #[allow(clippy::match_same_arms)]
46065            match self {
46066                Self::Success => ().write_xdr(w)?,
46067                Self::Malformed => ().write_xdr(w)?,
46068                Self::ResourceLimitExceeded => ().write_xdr(w)?,
46069                Self::InsufficientRefundableFee => ().write_xdr(w)?,
46070            };
46071            Ok(())
46072        })
46073    }
46074}
46075
46076/// OperationResultCode is an XDR Enum defines as:
46077///
46078/// ```text
46079/// enum OperationResultCode
46080/// {
46081///     opINNER = 0, // inner object result is valid
46082///
46083///     opBAD_AUTH = -1,            // too few valid signatures / wrong network
46084///     opNO_ACCOUNT = -2,          // source account was not found
46085///     opNOT_SUPPORTED = -3,       // operation not supported at this time
46086///     opTOO_MANY_SUBENTRIES = -4, // max number of subentries already reached
46087///     opEXCEEDED_WORK_LIMIT = -5, // operation did too much work
46088///     opTOO_MANY_SPONSORING = -6  // account is sponsoring too many entries
46089/// };
46090/// ```
46091///
46092// enum
46093#[cfg_attr(feature = "alloc", derive(Default))]
46094#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
46095#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
46096#[cfg_attr(
46097    all(feature = "serde", feature = "alloc"),
46098    derive(serde::Serialize, serde::Deserialize),
46099    serde(rename_all = "snake_case")
46100)]
46101#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
46102#[repr(i32)]
46103pub enum OperationResultCode {
46104    #[cfg_attr(feature = "alloc", default)]
46105    OpInner = 0,
46106    OpBadAuth = -1,
46107    OpNoAccount = -2,
46108    OpNotSupported = -3,
46109    OpTooManySubentries = -4,
46110    OpExceededWorkLimit = -5,
46111    OpTooManySponsoring = -6,
46112}
46113
46114impl OperationResultCode {
46115    pub const VARIANTS: [OperationResultCode; 7] = [
46116        OperationResultCode::OpInner,
46117        OperationResultCode::OpBadAuth,
46118        OperationResultCode::OpNoAccount,
46119        OperationResultCode::OpNotSupported,
46120        OperationResultCode::OpTooManySubentries,
46121        OperationResultCode::OpExceededWorkLimit,
46122        OperationResultCode::OpTooManySponsoring,
46123    ];
46124    pub const VARIANTS_STR: [&'static str; 7] = [
46125        "OpInner",
46126        "OpBadAuth",
46127        "OpNoAccount",
46128        "OpNotSupported",
46129        "OpTooManySubentries",
46130        "OpExceededWorkLimit",
46131        "OpTooManySponsoring",
46132    ];
46133
46134    #[must_use]
46135    pub const fn name(&self) -> &'static str {
46136        match self {
46137            Self::OpInner => "OpInner",
46138            Self::OpBadAuth => "OpBadAuth",
46139            Self::OpNoAccount => "OpNoAccount",
46140            Self::OpNotSupported => "OpNotSupported",
46141            Self::OpTooManySubentries => "OpTooManySubentries",
46142            Self::OpExceededWorkLimit => "OpExceededWorkLimit",
46143            Self::OpTooManySponsoring => "OpTooManySponsoring",
46144        }
46145    }
46146
46147    #[must_use]
46148    pub const fn variants() -> [OperationResultCode; 7] {
46149        Self::VARIANTS
46150    }
46151}
46152
46153impl Name for OperationResultCode {
46154    #[must_use]
46155    fn name(&self) -> &'static str {
46156        Self::name(self)
46157    }
46158}
46159
46160impl Variants<OperationResultCode> for OperationResultCode {
46161    fn variants() -> slice::Iter<'static, OperationResultCode> {
46162        Self::VARIANTS.iter()
46163    }
46164}
46165
46166impl Enum for OperationResultCode {}
46167
46168impl fmt::Display for OperationResultCode {
46169    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
46170        f.write_str(self.name())
46171    }
46172}
46173
46174impl TryFrom<i32> for OperationResultCode {
46175    type Error = Error;
46176
46177    fn try_from(i: i32) -> Result<Self, Error> {
46178        let e = match i {
46179            0 => OperationResultCode::OpInner,
46180            -1 => OperationResultCode::OpBadAuth,
46181            -2 => OperationResultCode::OpNoAccount,
46182            -3 => OperationResultCode::OpNotSupported,
46183            -4 => OperationResultCode::OpTooManySubentries,
46184            -5 => OperationResultCode::OpExceededWorkLimit,
46185            -6 => OperationResultCode::OpTooManySponsoring,
46186            #[allow(unreachable_patterns)]
46187            _ => return Err(Error::Invalid),
46188        };
46189        Ok(e)
46190    }
46191}
46192
46193impl From<OperationResultCode> for i32 {
46194    #[must_use]
46195    fn from(e: OperationResultCode) -> Self {
46196        e as Self
46197    }
46198}
46199
46200impl ReadXdr for OperationResultCode {
46201    #[cfg(feature = "std")]
46202    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
46203        r.with_limited_depth(|r| {
46204            let e = i32::read_xdr(r)?;
46205            let v: Self = e.try_into()?;
46206            Ok(v)
46207        })
46208    }
46209}
46210
46211impl WriteXdr for OperationResultCode {
46212    #[cfg(feature = "std")]
46213    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
46214        w.with_limited_depth(|w| {
46215            let i: i32 = (*self).into();
46216            i.write_xdr(w)
46217        })
46218    }
46219}
46220
46221/// OperationResultTr is an XDR NestedUnion defines as:
46222///
46223/// ```text
46224/// union switch (OperationType type)
46225///     {
46226///     case CREATE_ACCOUNT:
46227///         CreateAccountResult createAccountResult;
46228///     case PAYMENT:
46229///         PaymentResult paymentResult;
46230///     case PATH_PAYMENT_STRICT_RECEIVE:
46231///         PathPaymentStrictReceiveResult pathPaymentStrictReceiveResult;
46232///     case MANAGE_SELL_OFFER:
46233///         ManageSellOfferResult manageSellOfferResult;
46234///     case CREATE_PASSIVE_SELL_OFFER:
46235///         ManageSellOfferResult createPassiveSellOfferResult;
46236///     case SET_OPTIONS:
46237///         SetOptionsResult setOptionsResult;
46238///     case CHANGE_TRUST:
46239///         ChangeTrustResult changeTrustResult;
46240///     case ALLOW_TRUST:
46241///         AllowTrustResult allowTrustResult;
46242///     case ACCOUNT_MERGE:
46243///         AccountMergeResult accountMergeResult;
46244///     case INFLATION:
46245///         InflationResult inflationResult;
46246///     case MANAGE_DATA:
46247///         ManageDataResult manageDataResult;
46248///     case BUMP_SEQUENCE:
46249///         BumpSequenceResult bumpSeqResult;
46250///     case MANAGE_BUY_OFFER:
46251///         ManageBuyOfferResult manageBuyOfferResult;
46252///     case PATH_PAYMENT_STRICT_SEND:
46253///         PathPaymentStrictSendResult pathPaymentStrictSendResult;
46254///     case CREATE_CLAIMABLE_BALANCE:
46255///         CreateClaimableBalanceResult createClaimableBalanceResult;
46256///     case CLAIM_CLAIMABLE_BALANCE:
46257///         ClaimClaimableBalanceResult claimClaimableBalanceResult;
46258///     case BEGIN_SPONSORING_FUTURE_RESERVES:
46259///         BeginSponsoringFutureReservesResult beginSponsoringFutureReservesResult;
46260///     case END_SPONSORING_FUTURE_RESERVES:
46261///         EndSponsoringFutureReservesResult endSponsoringFutureReservesResult;
46262///     case REVOKE_SPONSORSHIP:
46263///         RevokeSponsorshipResult revokeSponsorshipResult;
46264///     case CLAWBACK:
46265///         ClawbackResult clawbackResult;
46266///     case CLAWBACK_CLAIMABLE_BALANCE:
46267///         ClawbackClaimableBalanceResult clawbackClaimableBalanceResult;
46268///     case SET_TRUST_LINE_FLAGS:
46269///         SetTrustLineFlagsResult setTrustLineFlagsResult;
46270///     case LIQUIDITY_POOL_DEPOSIT:
46271///         LiquidityPoolDepositResult liquidityPoolDepositResult;
46272///     case LIQUIDITY_POOL_WITHDRAW:
46273///         LiquidityPoolWithdrawResult liquidityPoolWithdrawResult;
46274///     case INVOKE_HOST_FUNCTION:
46275///         InvokeHostFunctionResult invokeHostFunctionResult;
46276///     case EXTEND_FOOTPRINT_TTL:
46277///         ExtendFootprintTTLResult extendFootprintTTLResult;
46278///     case RESTORE_FOOTPRINT:
46279///         RestoreFootprintResult restoreFootprintResult;
46280///     }
46281/// ```
46282///
46283// union with discriminant OperationType
46284#[cfg_eval::cfg_eval]
46285#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
46286#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
46287#[cfg_attr(
46288    all(feature = "serde", feature = "alloc"),
46289    serde_with::serde_as,
46290    derive(serde::Serialize, serde::Deserialize),
46291    serde(rename_all = "snake_case")
46292)]
46293#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
46294#[allow(clippy::large_enum_variant)]
46295pub enum OperationResultTr {
46296    CreateAccount(CreateAccountResult),
46297    Payment(PaymentResult),
46298    PathPaymentStrictReceive(PathPaymentStrictReceiveResult),
46299    ManageSellOffer(ManageSellOfferResult),
46300    CreatePassiveSellOffer(ManageSellOfferResult),
46301    SetOptions(SetOptionsResult),
46302    ChangeTrust(ChangeTrustResult),
46303    AllowTrust(AllowTrustResult),
46304    AccountMerge(AccountMergeResult),
46305    Inflation(InflationResult),
46306    ManageData(ManageDataResult),
46307    BumpSequence(BumpSequenceResult),
46308    ManageBuyOffer(ManageBuyOfferResult),
46309    PathPaymentStrictSend(PathPaymentStrictSendResult),
46310    CreateClaimableBalance(CreateClaimableBalanceResult),
46311    ClaimClaimableBalance(ClaimClaimableBalanceResult),
46312    BeginSponsoringFutureReserves(BeginSponsoringFutureReservesResult),
46313    EndSponsoringFutureReserves(EndSponsoringFutureReservesResult),
46314    RevokeSponsorship(RevokeSponsorshipResult),
46315    Clawback(ClawbackResult),
46316    ClawbackClaimableBalance(ClawbackClaimableBalanceResult),
46317    SetTrustLineFlags(SetTrustLineFlagsResult),
46318    LiquidityPoolDeposit(LiquidityPoolDepositResult),
46319    LiquidityPoolWithdraw(LiquidityPoolWithdrawResult),
46320    InvokeHostFunction(InvokeHostFunctionResult),
46321    ExtendFootprintTtl(ExtendFootprintTtlResult),
46322    RestoreFootprint(RestoreFootprintResult),
46323}
46324
46325#[cfg(feature = "alloc")]
46326impl Default for OperationResultTr {
46327    fn default() -> Self {
46328        Self::CreateAccount(CreateAccountResult::default())
46329    }
46330}
46331
46332impl OperationResultTr {
46333    pub const VARIANTS: [OperationType; 27] = [
46334        OperationType::CreateAccount,
46335        OperationType::Payment,
46336        OperationType::PathPaymentStrictReceive,
46337        OperationType::ManageSellOffer,
46338        OperationType::CreatePassiveSellOffer,
46339        OperationType::SetOptions,
46340        OperationType::ChangeTrust,
46341        OperationType::AllowTrust,
46342        OperationType::AccountMerge,
46343        OperationType::Inflation,
46344        OperationType::ManageData,
46345        OperationType::BumpSequence,
46346        OperationType::ManageBuyOffer,
46347        OperationType::PathPaymentStrictSend,
46348        OperationType::CreateClaimableBalance,
46349        OperationType::ClaimClaimableBalance,
46350        OperationType::BeginSponsoringFutureReserves,
46351        OperationType::EndSponsoringFutureReserves,
46352        OperationType::RevokeSponsorship,
46353        OperationType::Clawback,
46354        OperationType::ClawbackClaimableBalance,
46355        OperationType::SetTrustLineFlags,
46356        OperationType::LiquidityPoolDeposit,
46357        OperationType::LiquidityPoolWithdraw,
46358        OperationType::InvokeHostFunction,
46359        OperationType::ExtendFootprintTtl,
46360        OperationType::RestoreFootprint,
46361    ];
46362    pub const VARIANTS_STR: [&'static str; 27] = [
46363        "CreateAccount",
46364        "Payment",
46365        "PathPaymentStrictReceive",
46366        "ManageSellOffer",
46367        "CreatePassiveSellOffer",
46368        "SetOptions",
46369        "ChangeTrust",
46370        "AllowTrust",
46371        "AccountMerge",
46372        "Inflation",
46373        "ManageData",
46374        "BumpSequence",
46375        "ManageBuyOffer",
46376        "PathPaymentStrictSend",
46377        "CreateClaimableBalance",
46378        "ClaimClaimableBalance",
46379        "BeginSponsoringFutureReserves",
46380        "EndSponsoringFutureReserves",
46381        "RevokeSponsorship",
46382        "Clawback",
46383        "ClawbackClaimableBalance",
46384        "SetTrustLineFlags",
46385        "LiquidityPoolDeposit",
46386        "LiquidityPoolWithdraw",
46387        "InvokeHostFunction",
46388        "ExtendFootprintTtl",
46389        "RestoreFootprint",
46390    ];
46391
46392    #[must_use]
46393    pub const fn name(&self) -> &'static str {
46394        match self {
46395            Self::CreateAccount(_) => "CreateAccount",
46396            Self::Payment(_) => "Payment",
46397            Self::PathPaymentStrictReceive(_) => "PathPaymentStrictReceive",
46398            Self::ManageSellOffer(_) => "ManageSellOffer",
46399            Self::CreatePassiveSellOffer(_) => "CreatePassiveSellOffer",
46400            Self::SetOptions(_) => "SetOptions",
46401            Self::ChangeTrust(_) => "ChangeTrust",
46402            Self::AllowTrust(_) => "AllowTrust",
46403            Self::AccountMerge(_) => "AccountMerge",
46404            Self::Inflation(_) => "Inflation",
46405            Self::ManageData(_) => "ManageData",
46406            Self::BumpSequence(_) => "BumpSequence",
46407            Self::ManageBuyOffer(_) => "ManageBuyOffer",
46408            Self::PathPaymentStrictSend(_) => "PathPaymentStrictSend",
46409            Self::CreateClaimableBalance(_) => "CreateClaimableBalance",
46410            Self::ClaimClaimableBalance(_) => "ClaimClaimableBalance",
46411            Self::BeginSponsoringFutureReserves(_) => "BeginSponsoringFutureReserves",
46412            Self::EndSponsoringFutureReserves(_) => "EndSponsoringFutureReserves",
46413            Self::RevokeSponsorship(_) => "RevokeSponsorship",
46414            Self::Clawback(_) => "Clawback",
46415            Self::ClawbackClaimableBalance(_) => "ClawbackClaimableBalance",
46416            Self::SetTrustLineFlags(_) => "SetTrustLineFlags",
46417            Self::LiquidityPoolDeposit(_) => "LiquidityPoolDeposit",
46418            Self::LiquidityPoolWithdraw(_) => "LiquidityPoolWithdraw",
46419            Self::InvokeHostFunction(_) => "InvokeHostFunction",
46420            Self::ExtendFootprintTtl(_) => "ExtendFootprintTtl",
46421            Self::RestoreFootprint(_) => "RestoreFootprint",
46422        }
46423    }
46424
46425    #[must_use]
46426    pub const fn discriminant(&self) -> OperationType {
46427        #[allow(clippy::match_same_arms)]
46428        match self {
46429            Self::CreateAccount(_) => OperationType::CreateAccount,
46430            Self::Payment(_) => OperationType::Payment,
46431            Self::PathPaymentStrictReceive(_) => OperationType::PathPaymentStrictReceive,
46432            Self::ManageSellOffer(_) => OperationType::ManageSellOffer,
46433            Self::CreatePassiveSellOffer(_) => OperationType::CreatePassiveSellOffer,
46434            Self::SetOptions(_) => OperationType::SetOptions,
46435            Self::ChangeTrust(_) => OperationType::ChangeTrust,
46436            Self::AllowTrust(_) => OperationType::AllowTrust,
46437            Self::AccountMerge(_) => OperationType::AccountMerge,
46438            Self::Inflation(_) => OperationType::Inflation,
46439            Self::ManageData(_) => OperationType::ManageData,
46440            Self::BumpSequence(_) => OperationType::BumpSequence,
46441            Self::ManageBuyOffer(_) => OperationType::ManageBuyOffer,
46442            Self::PathPaymentStrictSend(_) => OperationType::PathPaymentStrictSend,
46443            Self::CreateClaimableBalance(_) => OperationType::CreateClaimableBalance,
46444            Self::ClaimClaimableBalance(_) => OperationType::ClaimClaimableBalance,
46445            Self::BeginSponsoringFutureReserves(_) => OperationType::BeginSponsoringFutureReserves,
46446            Self::EndSponsoringFutureReserves(_) => OperationType::EndSponsoringFutureReserves,
46447            Self::RevokeSponsorship(_) => OperationType::RevokeSponsorship,
46448            Self::Clawback(_) => OperationType::Clawback,
46449            Self::ClawbackClaimableBalance(_) => OperationType::ClawbackClaimableBalance,
46450            Self::SetTrustLineFlags(_) => OperationType::SetTrustLineFlags,
46451            Self::LiquidityPoolDeposit(_) => OperationType::LiquidityPoolDeposit,
46452            Self::LiquidityPoolWithdraw(_) => OperationType::LiquidityPoolWithdraw,
46453            Self::InvokeHostFunction(_) => OperationType::InvokeHostFunction,
46454            Self::ExtendFootprintTtl(_) => OperationType::ExtendFootprintTtl,
46455            Self::RestoreFootprint(_) => OperationType::RestoreFootprint,
46456        }
46457    }
46458
46459    #[must_use]
46460    pub const fn variants() -> [OperationType; 27] {
46461        Self::VARIANTS
46462    }
46463}
46464
46465impl Name for OperationResultTr {
46466    #[must_use]
46467    fn name(&self) -> &'static str {
46468        Self::name(self)
46469    }
46470}
46471
46472impl Discriminant<OperationType> for OperationResultTr {
46473    #[must_use]
46474    fn discriminant(&self) -> OperationType {
46475        Self::discriminant(self)
46476    }
46477}
46478
46479impl Variants<OperationType> for OperationResultTr {
46480    fn variants() -> slice::Iter<'static, OperationType> {
46481        Self::VARIANTS.iter()
46482    }
46483}
46484
46485impl Union<OperationType> for OperationResultTr {}
46486
46487impl ReadXdr for OperationResultTr {
46488    #[cfg(feature = "std")]
46489    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
46490        r.with_limited_depth(|r| {
46491            let dv: OperationType = <OperationType as ReadXdr>::read_xdr(r)?;
46492            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
46493            let v = match dv {
46494                OperationType::CreateAccount => {
46495                    Self::CreateAccount(CreateAccountResult::read_xdr(r)?)
46496                }
46497                OperationType::Payment => Self::Payment(PaymentResult::read_xdr(r)?),
46498                OperationType::PathPaymentStrictReceive => {
46499                    Self::PathPaymentStrictReceive(PathPaymentStrictReceiveResult::read_xdr(r)?)
46500                }
46501                OperationType::ManageSellOffer => {
46502                    Self::ManageSellOffer(ManageSellOfferResult::read_xdr(r)?)
46503                }
46504                OperationType::CreatePassiveSellOffer => {
46505                    Self::CreatePassiveSellOffer(ManageSellOfferResult::read_xdr(r)?)
46506                }
46507                OperationType::SetOptions => Self::SetOptions(SetOptionsResult::read_xdr(r)?),
46508                OperationType::ChangeTrust => Self::ChangeTrust(ChangeTrustResult::read_xdr(r)?),
46509                OperationType::AllowTrust => Self::AllowTrust(AllowTrustResult::read_xdr(r)?),
46510                OperationType::AccountMerge => Self::AccountMerge(AccountMergeResult::read_xdr(r)?),
46511                OperationType::Inflation => Self::Inflation(InflationResult::read_xdr(r)?),
46512                OperationType::ManageData => Self::ManageData(ManageDataResult::read_xdr(r)?),
46513                OperationType::BumpSequence => Self::BumpSequence(BumpSequenceResult::read_xdr(r)?),
46514                OperationType::ManageBuyOffer => {
46515                    Self::ManageBuyOffer(ManageBuyOfferResult::read_xdr(r)?)
46516                }
46517                OperationType::PathPaymentStrictSend => {
46518                    Self::PathPaymentStrictSend(PathPaymentStrictSendResult::read_xdr(r)?)
46519                }
46520                OperationType::CreateClaimableBalance => {
46521                    Self::CreateClaimableBalance(CreateClaimableBalanceResult::read_xdr(r)?)
46522                }
46523                OperationType::ClaimClaimableBalance => {
46524                    Self::ClaimClaimableBalance(ClaimClaimableBalanceResult::read_xdr(r)?)
46525                }
46526                OperationType::BeginSponsoringFutureReserves => {
46527                    Self::BeginSponsoringFutureReserves(
46528                        BeginSponsoringFutureReservesResult::read_xdr(r)?,
46529                    )
46530                }
46531                OperationType::EndSponsoringFutureReserves => Self::EndSponsoringFutureReserves(
46532                    EndSponsoringFutureReservesResult::read_xdr(r)?,
46533                ),
46534                OperationType::RevokeSponsorship => {
46535                    Self::RevokeSponsorship(RevokeSponsorshipResult::read_xdr(r)?)
46536                }
46537                OperationType::Clawback => Self::Clawback(ClawbackResult::read_xdr(r)?),
46538                OperationType::ClawbackClaimableBalance => {
46539                    Self::ClawbackClaimableBalance(ClawbackClaimableBalanceResult::read_xdr(r)?)
46540                }
46541                OperationType::SetTrustLineFlags => {
46542                    Self::SetTrustLineFlags(SetTrustLineFlagsResult::read_xdr(r)?)
46543                }
46544                OperationType::LiquidityPoolDeposit => {
46545                    Self::LiquidityPoolDeposit(LiquidityPoolDepositResult::read_xdr(r)?)
46546                }
46547                OperationType::LiquidityPoolWithdraw => {
46548                    Self::LiquidityPoolWithdraw(LiquidityPoolWithdrawResult::read_xdr(r)?)
46549                }
46550                OperationType::InvokeHostFunction => {
46551                    Self::InvokeHostFunction(InvokeHostFunctionResult::read_xdr(r)?)
46552                }
46553                OperationType::ExtendFootprintTtl => {
46554                    Self::ExtendFootprintTtl(ExtendFootprintTtlResult::read_xdr(r)?)
46555                }
46556                OperationType::RestoreFootprint => {
46557                    Self::RestoreFootprint(RestoreFootprintResult::read_xdr(r)?)
46558                }
46559                #[allow(unreachable_patterns)]
46560                _ => return Err(Error::Invalid),
46561            };
46562            Ok(v)
46563        })
46564    }
46565}
46566
46567impl WriteXdr for OperationResultTr {
46568    #[cfg(feature = "std")]
46569    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
46570        w.with_limited_depth(|w| {
46571            self.discriminant().write_xdr(w)?;
46572            #[allow(clippy::match_same_arms)]
46573            match self {
46574                Self::CreateAccount(v) => v.write_xdr(w)?,
46575                Self::Payment(v) => v.write_xdr(w)?,
46576                Self::PathPaymentStrictReceive(v) => v.write_xdr(w)?,
46577                Self::ManageSellOffer(v) => v.write_xdr(w)?,
46578                Self::CreatePassiveSellOffer(v) => v.write_xdr(w)?,
46579                Self::SetOptions(v) => v.write_xdr(w)?,
46580                Self::ChangeTrust(v) => v.write_xdr(w)?,
46581                Self::AllowTrust(v) => v.write_xdr(w)?,
46582                Self::AccountMerge(v) => v.write_xdr(w)?,
46583                Self::Inflation(v) => v.write_xdr(w)?,
46584                Self::ManageData(v) => v.write_xdr(w)?,
46585                Self::BumpSequence(v) => v.write_xdr(w)?,
46586                Self::ManageBuyOffer(v) => v.write_xdr(w)?,
46587                Self::PathPaymentStrictSend(v) => v.write_xdr(w)?,
46588                Self::CreateClaimableBalance(v) => v.write_xdr(w)?,
46589                Self::ClaimClaimableBalance(v) => v.write_xdr(w)?,
46590                Self::BeginSponsoringFutureReserves(v) => v.write_xdr(w)?,
46591                Self::EndSponsoringFutureReserves(v) => v.write_xdr(w)?,
46592                Self::RevokeSponsorship(v) => v.write_xdr(w)?,
46593                Self::Clawback(v) => v.write_xdr(w)?,
46594                Self::ClawbackClaimableBalance(v) => v.write_xdr(w)?,
46595                Self::SetTrustLineFlags(v) => v.write_xdr(w)?,
46596                Self::LiquidityPoolDeposit(v) => v.write_xdr(w)?,
46597                Self::LiquidityPoolWithdraw(v) => v.write_xdr(w)?,
46598                Self::InvokeHostFunction(v) => v.write_xdr(w)?,
46599                Self::ExtendFootprintTtl(v) => v.write_xdr(w)?,
46600                Self::RestoreFootprint(v) => v.write_xdr(w)?,
46601            };
46602            Ok(())
46603        })
46604    }
46605}
46606
46607/// OperationResult is an XDR Union defines as:
46608///
46609/// ```text
46610/// union OperationResult switch (OperationResultCode code)
46611/// {
46612/// case opINNER:
46613///     union switch (OperationType type)
46614///     {
46615///     case CREATE_ACCOUNT:
46616///         CreateAccountResult createAccountResult;
46617///     case PAYMENT:
46618///         PaymentResult paymentResult;
46619///     case PATH_PAYMENT_STRICT_RECEIVE:
46620///         PathPaymentStrictReceiveResult pathPaymentStrictReceiveResult;
46621///     case MANAGE_SELL_OFFER:
46622///         ManageSellOfferResult manageSellOfferResult;
46623///     case CREATE_PASSIVE_SELL_OFFER:
46624///         ManageSellOfferResult createPassiveSellOfferResult;
46625///     case SET_OPTIONS:
46626///         SetOptionsResult setOptionsResult;
46627///     case CHANGE_TRUST:
46628///         ChangeTrustResult changeTrustResult;
46629///     case ALLOW_TRUST:
46630///         AllowTrustResult allowTrustResult;
46631///     case ACCOUNT_MERGE:
46632///         AccountMergeResult accountMergeResult;
46633///     case INFLATION:
46634///         InflationResult inflationResult;
46635///     case MANAGE_DATA:
46636///         ManageDataResult manageDataResult;
46637///     case BUMP_SEQUENCE:
46638///         BumpSequenceResult bumpSeqResult;
46639///     case MANAGE_BUY_OFFER:
46640///         ManageBuyOfferResult manageBuyOfferResult;
46641///     case PATH_PAYMENT_STRICT_SEND:
46642///         PathPaymentStrictSendResult pathPaymentStrictSendResult;
46643///     case CREATE_CLAIMABLE_BALANCE:
46644///         CreateClaimableBalanceResult createClaimableBalanceResult;
46645///     case CLAIM_CLAIMABLE_BALANCE:
46646///         ClaimClaimableBalanceResult claimClaimableBalanceResult;
46647///     case BEGIN_SPONSORING_FUTURE_RESERVES:
46648///         BeginSponsoringFutureReservesResult beginSponsoringFutureReservesResult;
46649///     case END_SPONSORING_FUTURE_RESERVES:
46650///         EndSponsoringFutureReservesResult endSponsoringFutureReservesResult;
46651///     case REVOKE_SPONSORSHIP:
46652///         RevokeSponsorshipResult revokeSponsorshipResult;
46653///     case CLAWBACK:
46654///         ClawbackResult clawbackResult;
46655///     case CLAWBACK_CLAIMABLE_BALANCE:
46656///         ClawbackClaimableBalanceResult clawbackClaimableBalanceResult;
46657///     case SET_TRUST_LINE_FLAGS:
46658///         SetTrustLineFlagsResult setTrustLineFlagsResult;
46659///     case LIQUIDITY_POOL_DEPOSIT:
46660///         LiquidityPoolDepositResult liquidityPoolDepositResult;
46661///     case LIQUIDITY_POOL_WITHDRAW:
46662///         LiquidityPoolWithdrawResult liquidityPoolWithdrawResult;
46663///     case INVOKE_HOST_FUNCTION:
46664///         InvokeHostFunctionResult invokeHostFunctionResult;
46665///     case EXTEND_FOOTPRINT_TTL:
46666///         ExtendFootprintTTLResult extendFootprintTTLResult;
46667///     case RESTORE_FOOTPRINT:
46668///         RestoreFootprintResult restoreFootprintResult;
46669///     }
46670///     tr;
46671/// case opBAD_AUTH:
46672/// case opNO_ACCOUNT:
46673/// case opNOT_SUPPORTED:
46674/// case opTOO_MANY_SUBENTRIES:
46675/// case opEXCEEDED_WORK_LIMIT:
46676/// case opTOO_MANY_SPONSORING:
46677///     void;
46678/// };
46679/// ```
46680///
46681// union with discriminant OperationResultCode
46682#[cfg_eval::cfg_eval]
46683#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
46684#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
46685#[cfg_attr(
46686    all(feature = "serde", feature = "alloc"),
46687    serde_with::serde_as,
46688    derive(serde::Serialize, serde::Deserialize),
46689    serde(rename_all = "snake_case")
46690)]
46691#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
46692#[allow(clippy::large_enum_variant)]
46693pub enum OperationResult {
46694    OpInner(OperationResultTr),
46695    OpBadAuth,
46696    OpNoAccount,
46697    OpNotSupported,
46698    OpTooManySubentries,
46699    OpExceededWorkLimit,
46700    OpTooManySponsoring,
46701}
46702
46703#[cfg(feature = "alloc")]
46704impl Default for OperationResult {
46705    fn default() -> Self {
46706        Self::OpInner(OperationResultTr::default())
46707    }
46708}
46709
46710impl OperationResult {
46711    pub const VARIANTS: [OperationResultCode; 7] = [
46712        OperationResultCode::OpInner,
46713        OperationResultCode::OpBadAuth,
46714        OperationResultCode::OpNoAccount,
46715        OperationResultCode::OpNotSupported,
46716        OperationResultCode::OpTooManySubentries,
46717        OperationResultCode::OpExceededWorkLimit,
46718        OperationResultCode::OpTooManySponsoring,
46719    ];
46720    pub const VARIANTS_STR: [&'static str; 7] = [
46721        "OpInner",
46722        "OpBadAuth",
46723        "OpNoAccount",
46724        "OpNotSupported",
46725        "OpTooManySubentries",
46726        "OpExceededWorkLimit",
46727        "OpTooManySponsoring",
46728    ];
46729
46730    #[must_use]
46731    pub const fn name(&self) -> &'static str {
46732        match self {
46733            Self::OpInner(_) => "OpInner",
46734            Self::OpBadAuth => "OpBadAuth",
46735            Self::OpNoAccount => "OpNoAccount",
46736            Self::OpNotSupported => "OpNotSupported",
46737            Self::OpTooManySubentries => "OpTooManySubentries",
46738            Self::OpExceededWorkLimit => "OpExceededWorkLimit",
46739            Self::OpTooManySponsoring => "OpTooManySponsoring",
46740        }
46741    }
46742
46743    #[must_use]
46744    pub const fn discriminant(&self) -> OperationResultCode {
46745        #[allow(clippy::match_same_arms)]
46746        match self {
46747            Self::OpInner(_) => OperationResultCode::OpInner,
46748            Self::OpBadAuth => OperationResultCode::OpBadAuth,
46749            Self::OpNoAccount => OperationResultCode::OpNoAccount,
46750            Self::OpNotSupported => OperationResultCode::OpNotSupported,
46751            Self::OpTooManySubentries => OperationResultCode::OpTooManySubentries,
46752            Self::OpExceededWorkLimit => OperationResultCode::OpExceededWorkLimit,
46753            Self::OpTooManySponsoring => OperationResultCode::OpTooManySponsoring,
46754        }
46755    }
46756
46757    #[must_use]
46758    pub const fn variants() -> [OperationResultCode; 7] {
46759        Self::VARIANTS
46760    }
46761}
46762
46763impl Name for OperationResult {
46764    #[must_use]
46765    fn name(&self) -> &'static str {
46766        Self::name(self)
46767    }
46768}
46769
46770impl Discriminant<OperationResultCode> for OperationResult {
46771    #[must_use]
46772    fn discriminant(&self) -> OperationResultCode {
46773        Self::discriminant(self)
46774    }
46775}
46776
46777impl Variants<OperationResultCode> for OperationResult {
46778    fn variants() -> slice::Iter<'static, OperationResultCode> {
46779        Self::VARIANTS.iter()
46780    }
46781}
46782
46783impl Union<OperationResultCode> for OperationResult {}
46784
46785impl ReadXdr for OperationResult {
46786    #[cfg(feature = "std")]
46787    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
46788        r.with_limited_depth(|r| {
46789            let dv: OperationResultCode = <OperationResultCode as ReadXdr>::read_xdr(r)?;
46790            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
46791            let v = match dv {
46792                OperationResultCode::OpInner => Self::OpInner(OperationResultTr::read_xdr(r)?),
46793                OperationResultCode::OpBadAuth => Self::OpBadAuth,
46794                OperationResultCode::OpNoAccount => Self::OpNoAccount,
46795                OperationResultCode::OpNotSupported => Self::OpNotSupported,
46796                OperationResultCode::OpTooManySubentries => Self::OpTooManySubentries,
46797                OperationResultCode::OpExceededWorkLimit => Self::OpExceededWorkLimit,
46798                OperationResultCode::OpTooManySponsoring => Self::OpTooManySponsoring,
46799                #[allow(unreachable_patterns)]
46800                _ => return Err(Error::Invalid),
46801            };
46802            Ok(v)
46803        })
46804    }
46805}
46806
46807impl WriteXdr for OperationResult {
46808    #[cfg(feature = "std")]
46809    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
46810        w.with_limited_depth(|w| {
46811            self.discriminant().write_xdr(w)?;
46812            #[allow(clippy::match_same_arms)]
46813            match self {
46814                Self::OpInner(v) => v.write_xdr(w)?,
46815                Self::OpBadAuth => ().write_xdr(w)?,
46816                Self::OpNoAccount => ().write_xdr(w)?,
46817                Self::OpNotSupported => ().write_xdr(w)?,
46818                Self::OpTooManySubentries => ().write_xdr(w)?,
46819                Self::OpExceededWorkLimit => ().write_xdr(w)?,
46820                Self::OpTooManySponsoring => ().write_xdr(w)?,
46821            };
46822            Ok(())
46823        })
46824    }
46825}
46826
46827/// TransactionResultCode is an XDR Enum defines as:
46828///
46829/// ```text
46830/// enum TransactionResultCode
46831/// {
46832///     txFEE_BUMP_INNER_SUCCESS = 1, // fee bump inner transaction succeeded
46833///     txSUCCESS = 0,                // all operations succeeded
46834///
46835///     txFAILED = -1, // one of the operations failed (none were applied)
46836///
46837///     txTOO_EARLY = -2,         // ledger closeTime before minTime
46838///     txTOO_LATE = -3,          // ledger closeTime after maxTime
46839///     txMISSING_OPERATION = -4, // no operation was specified
46840///     txBAD_SEQ = -5,           // sequence number does not match source account
46841///
46842///     txBAD_AUTH = -6,             // too few valid signatures / wrong network
46843///     txINSUFFICIENT_BALANCE = -7, // fee would bring account below reserve
46844///     txNO_ACCOUNT = -8,           // source account not found
46845///     txINSUFFICIENT_FEE = -9,     // fee is too small
46846///     txBAD_AUTH_EXTRA = -10,      // unused signatures attached to transaction
46847///     txINTERNAL_ERROR = -11,      // an unknown error occurred
46848///
46849///     txNOT_SUPPORTED = -12,          // transaction type not supported
46850///     txFEE_BUMP_INNER_FAILED = -13,  // fee bump inner transaction failed
46851///     txBAD_SPONSORSHIP = -14,        // sponsorship not confirmed
46852///     txBAD_MIN_SEQ_AGE_OR_GAP = -15, // minSeqAge or minSeqLedgerGap conditions not met
46853///     txMALFORMED = -16,              // precondition is invalid
46854///     txSOROBAN_INVALID = -17         // soroban-specific preconditions were not met
46855/// };
46856/// ```
46857///
46858// enum
46859#[cfg_attr(feature = "alloc", derive(Default))]
46860#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
46861#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
46862#[cfg_attr(
46863    all(feature = "serde", feature = "alloc"),
46864    derive(serde::Serialize, serde::Deserialize),
46865    serde(rename_all = "snake_case")
46866)]
46867#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
46868#[repr(i32)]
46869pub enum TransactionResultCode {
46870    #[cfg_attr(feature = "alloc", default)]
46871    TxFeeBumpInnerSuccess = 1,
46872    TxSuccess = 0,
46873    TxFailed = -1,
46874    TxTooEarly = -2,
46875    TxTooLate = -3,
46876    TxMissingOperation = -4,
46877    TxBadSeq = -5,
46878    TxBadAuth = -6,
46879    TxInsufficientBalance = -7,
46880    TxNoAccount = -8,
46881    TxInsufficientFee = -9,
46882    TxBadAuthExtra = -10,
46883    TxInternalError = -11,
46884    TxNotSupported = -12,
46885    TxFeeBumpInnerFailed = -13,
46886    TxBadSponsorship = -14,
46887    TxBadMinSeqAgeOrGap = -15,
46888    TxMalformed = -16,
46889    TxSorobanInvalid = -17,
46890}
46891
46892impl TransactionResultCode {
46893    pub const VARIANTS: [TransactionResultCode; 19] = [
46894        TransactionResultCode::TxFeeBumpInnerSuccess,
46895        TransactionResultCode::TxSuccess,
46896        TransactionResultCode::TxFailed,
46897        TransactionResultCode::TxTooEarly,
46898        TransactionResultCode::TxTooLate,
46899        TransactionResultCode::TxMissingOperation,
46900        TransactionResultCode::TxBadSeq,
46901        TransactionResultCode::TxBadAuth,
46902        TransactionResultCode::TxInsufficientBalance,
46903        TransactionResultCode::TxNoAccount,
46904        TransactionResultCode::TxInsufficientFee,
46905        TransactionResultCode::TxBadAuthExtra,
46906        TransactionResultCode::TxInternalError,
46907        TransactionResultCode::TxNotSupported,
46908        TransactionResultCode::TxFeeBumpInnerFailed,
46909        TransactionResultCode::TxBadSponsorship,
46910        TransactionResultCode::TxBadMinSeqAgeOrGap,
46911        TransactionResultCode::TxMalformed,
46912        TransactionResultCode::TxSorobanInvalid,
46913    ];
46914    pub const VARIANTS_STR: [&'static str; 19] = [
46915        "TxFeeBumpInnerSuccess",
46916        "TxSuccess",
46917        "TxFailed",
46918        "TxTooEarly",
46919        "TxTooLate",
46920        "TxMissingOperation",
46921        "TxBadSeq",
46922        "TxBadAuth",
46923        "TxInsufficientBalance",
46924        "TxNoAccount",
46925        "TxInsufficientFee",
46926        "TxBadAuthExtra",
46927        "TxInternalError",
46928        "TxNotSupported",
46929        "TxFeeBumpInnerFailed",
46930        "TxBadSponsorship",
46931        "TxBadMinSeqAgeOrGap",
46932        "TxMalformed",
46933        "TxSorobanInvalid",
46934    ];
46935
46936    #[must_use]
46937    pub const fn name(&self) -> &'static str {
46938        match self {
46939            Self::TxFeeBumpInnerSuccess => "TxFeeBumpInnerSuccess",
46940            Self::TxSuccess => "TxSuccess",
46941            Self::TxFailed => "TxFailed",
46942            Self::TxTooEarly => "TxTooEarly",
46943            Self::TxTooLate => "TxTooLate",
46944            Self::TxMissingOperation => "TxMissingOperation",
46945            Self::TxBadSeq => "TxBadSeq",
46946            Self::TxBadAuth => "TxBadAuth",
46947            Self::TxInsufficientBalance => "TxInsufficientBalance",
46948            Self::TxNoAccount => "TxNoAccount",
46949            Self::TxInsufficientFee => "TxInsufficientFee",
46950            Self::TxBadAuthExtra => "TxBadAuthExtra",
46951            Self::TxInternalError => "TxInternalError",
46952            Self::TxNotSupported => "TxNotSupported",
46953            Self::TxFeeBumpInnerFailed => "TxFeeBumpInnerFailed",
46954            Self::TxBadSponsorship => "TxBadSponsorship",
46955            Self::TxBadMinSeqAgeOrGap => "TxBadMinSeqAgeOrGap",
46956            Self::TxMalformed => "TxMalformed",
46957            Self::TxSorobanInvalid => "TxSorobanInvalid",
46958        }
46959    }
46960
46961    #[must_use]
46962    pub const fn variants() -> [TransactionResultCode; 19] {
46963        Self::VARIANTS
46964    }
46965}
46966
46967impl Name for TransactionResultCode {
46968    #[must_use]
46969    fn name(&self) -> &'static str {
46970        Self::name(self)
46971    }
46972}
46973
46974impl Variants<TransactionResultCode> for TransactionResultCode {
46975    fn variants() -> slice::Iter<'static, TransactionResultCode> {
46976        Self::VARIANTS.iter()
46977    }
46978}
46979
46980impl Enum for TransactionResultCode {}
46981
46982impl fmt::Display for TransactionResultCode {
46983    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
46984        f.write_str(self.name())
46985    }
46986}
46987
46988impl TryFrom<i32> for TransactionResultCode {
46989    type Error = Error;
46990
46991    fn try_from(i: i32) -> Result<Self, Error> {
46992        let e = match i {
46993            1 => TransactionResultCode::TxFeeBumpInnerSuccess,
46994            0 => TransactionResultCode::TxSuccess,
46995            -1 => TransactionResultCode::TxFailed,
46996            -2 => TransactionResultCode::TxTooEarly,
46997            -3 => TransactionResultCode::TxTooLate,
46998            -4 => TransactionResultCode::TxMissingOperation,
46999            -5 => TransactionResultCode::TxBadSeq,
47000            -6 => TransactionResultCode::TxBadAuth,
47001            -7 => TransactionResultCode::TxInsufficientBalance,
47002            -8 => TransactionResultCode::TxNoAccount,
47003            -9 => TransactionResultCode::TxInsufficientFee,
47004            -10 => TransactionResultCode::TxBadAuthExtra,
47005            -11 => TransactionResultCode::TxInternalError,
47006            -12 => TransactionResultCode::TxNotSupported,
47007            -13 => TransactionResultCode::TxFeeBumpInnerFailed,
47008            -14 => TransactionResultCode::TxBadSponsorship,
47009            -15 => TransactionResultCode::TxBadMinSeqAgeOrGap,
47010            -16 => TransactionResultCode::TxMalformed,
47011            -17 => TransactionResultCode::TxSorobanInvalid,
47012            #[allow(unreachable_patterns)]
47013            _ => return Err(Error::Invalid),
47014        };
47015        Ok(e)
47016    }
47017}
47018
47019impl From<TransactionResultCode> for i32 {
47020    #[must_use]
47021    fn from(e: TransactionResultCode) -> Self {
47022        e as Self
47023    }
47024}
47025
47026impl ReadXdr for TransactionResultCode {
47027    #[cfg(feature = "std")]
47028    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
47029        r.with_limited_depth(|r| {
47030            let e = i32::read_xdr(r)?;
47031            let v: Self = e.try_into()?;
47032            Ok(v)
47033        })
47034    }
47035}
47036
47037impl WriteXdr for TransactionResultCode {
47038    #[cfg(feature = "std")]
47039    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
47040        w.with_limited_depth(|w| {
47041            let i: i32 = (*self).into();
47042            i.write_xdr(w)
47043        })
47044    }
47045}
47046
47047/// InnerTransactionResultResult is an XDR NestedUnion defines as:
47048///
47049/// ```text
47050/// union switch (TransactionResultCode code)
47051///     {
47052///     // txFEE_BUMP_INNER_SUCCESS is not included
47053///     case txSUCCESS:
47054///     case txFAILED:
47055///         OperationResult results<>;
47056///     case txTOO_EARLY:
47057///     case txTOO_LATE:
47058///     case txMISSING_OPERATION:
47059///     case txBAD_SEQ:
47060///     case txBAD_AUTH:
47061///     case txINSUFFICIENT_BALANCE:
47062///     case txNO_ACCOUNT:
47063///     case txINSUFFICIENT_FEE:
47064///     case txBAD_AUTH_EXTRA:
47065///     case txINTERNAL_ERROR:
47066///     case txNOT_SUPPORTED:
47067///     // txFEE_BUMP_INNER_FAILED is not included
47068///     case txBAD_SPONSORSHIP:
47069///     case txBAD_MIN_SEQ_AGE_OR_GAP:
47070///     case txMALFORMED:
47071///     case txSOROBAN_INVALID:
47072///         void;
47073///     }
47074/// ```
47075///
47076// union with discriminant TransactionResultCode
47077#[cfg_eval::cfg_eval]
47078#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
47079#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
47080#[cfg_attr(
47081    all(feature = "serde", feature = "alloc"),
47082    serde_with::serde_as,
47083    derive(serde::Serialize, serde::Deserialize),
47084    serde(rename_all = "snake_case")
47085)]
47086#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
47087#[allow(clippy::large_enum_variant)]
47088pub enum InnerTransactionResultResult {
47089    TxSuccess(VecM<OperationResult>),
47090    TxFailed(VecM<OperationResult>),
47091    TxTooEarly,
47092    TxTooLate,
47093    TxMissingOperation,
47094    TxBadSeq,
47095    TxBadAuth,
47096    TxInsufficientBalance,
47097    TxNoAccount,
47098    TxInsufficientFee,
47099    TxBadAuthExtra,
47100    TxInternalError,
47101    TxNotSupported,
47102    TxBadSponsorship,
47103    TxBadMinSeqAgeOrGap,
47104    TxMalformed,
47105    TxSorobanInvalid,
47106}
47107
47108#[cfg(feature = "alloc")]
47109impl Default for InnerTransactionResultResult {
47110    fn default() -> Self {
47111        Self::TxSuccess(VecM::<OperationResult>::default())
47112    }
47113}
47114
47115impl InnerTransactionResultResult {
47116    pub const VARIANTS: [TransactionResultCode; 17] = [
47117        TransactionResultCode::TxSuccess,
47118        TransactionResultCode::TxFailed,
47119        TransactionResultCode::TxTooEarly,
47120        TransactionResultCode::TxTooLate,
47121        TransactionResultCode::TxMissingOperation,
47122        TransactionResultCode::TxBadSeq,
47123        TransactionResultCode::TxBadAuth,
47124        TransactionResultCode::TxInsufficientBalance,
47125        TransactionResultCode::TxNoAccount,
47126        TransactionResultCode::TxInsufficientFee,
47127        TransactionResultCode::TxBadAuthExtra,
47128        TransactionResultCode::TxInternalError,
47129        TransactionResultCode::TxNotSupported,
47130        TransactionResultCode::TxBadSponsorship,
47131        TransactionResultCode::TxBadMinSeqAgeOrGap,
47132        TransactionResultCode::TxMalformed,
47133        TransactionResultCode::TxSorobanInvalid,
47134    ];
47135    pub const VARIANTS_STR: [&'static str; 17] = [
47136        "TxSuccess",
47137        "TxFailed",
47138        "TxTooEarly",
47139        "TxTooLate",
47140        "TxMissingOperation",
47141        "TxBadSeq",
47142        "TxBadAuth",
47143        "TxInsufficientBalance",
47144        "TxNoAccount",
47145        "TxInsufficientFee",
47146        "TxBadAuthExtra",
47147        "TxInternalError",
47148        "TxNotSupported",
47149        "TxBadSponsorship",
47150        "TxBadMinSeqAgeOrGap",
47151        "TxMalformed",
47152        "TxSorobanInvalid",
47153    ];
47154
47155    #[must_use]
47156    pub const fn name(&self) -> &'static str {
47157        match self {
47158            Self::TxSuccess(_) => "TxSuccess",
47159            Self::TxFailed(_) => "TxFailed",
47160            Self::TxTooEarly => "TxTooEarly",
47161            Self::TxTooLate => "TxTooLate",
47162            Self::TxMissingOperation => "TxMissingOperation",
47163            Self::TxBadSeq => "TxBadSeq",
47164            Self::TxBadAuth => "TxBadAuth",
47165            Self::TxInsufficientBalance => "TxInsufficientBalance",
47166            Self::TxNoAccount => "TxNoAccount",
47167            Self::TxInsufficientFee => "TxInsufficientFee",
47168            Self::TxBadAuthExtra => "TxBadAuthExtra",
47169            Self::TxInternalError => "TxInternalError",
47170            Self::TxNotSupported => "TxNotSupported",
47171            Self::TxBadSponsorship => "TxBadSponsorship",
47172            Self::TxBadMinSeqAgeOrGap => "TxBadMinSeqAgeOrGap",
47173            Self::TxMalformed => "TxMalformed",
47174            Self::TxSorobanInvalid => "TxSorobanInvalid",
47175        }
47176    }
47177
47178    #[must_use]
47179    pub const fn discriminant(&self) -> TransactionResultCode {
47180        #[allow(clippy::match_same_arms)]
47181        match self {
47182            Self::TxSuccess(_) => TransactionResultCode::TxSuccess,
47183            Self::TxFailed(_) => TransactionResultCode::TxFailed,
47184            Self::TxTooEarly => TransactionResultCode::TxTooEarly,
47185            Self::TxTooLate => TransactionResultCode::TxTooLate,
47186            Self::TxMissingOperation => TransactionResultCode::TxMissingOperation,
47187            Self::TxBadSeq => TransactionResultCode::TxBadSeq,
47188            Self::TxBadAuth => TransactionResultCode::TxBadAuth,
47189            Self::TxInsufficientBalance => TransactionResultCode::TxInsufficientBalance,
47190            Self::TxNoAccount => TransactionResultCode::TxNoAccount,
47191            Self::TxInsufficientFee => TransactionResultCode::TxInsufficientFee,
47192            Self::TxBadAuthExtra => TransactionResultCode::TxBadAuthExtra,
47193            Self::TxInternalError => TransactionResultCode::TxInternalError,
47194            Self::TxNotSupported => TransactionResultCode::TxNotSupported,
47195            Self::TxBadSponsorship => TransactionResultCode::TxBadSponsorship,
47196            Self::TxBadMinSeqAgeOrGap => TransactionResultCode::TxBadMinSeqAgeOrGap,
47197            Self::TxMalformed => TransactionResultCode::TxMalformed,
47198            Self::TxSorobanInvalid => TransactionResultCode::TxSorobanInvalid,
47199        }
47200    }
47201
47202    #[must_use]
47203    pub const fn variants() -> [TransactionResultCode; 17] {
47204        Self::VARIANTS
47205    }
47206}
47207
47208impl Name for InnerTransactionResultResult {
47209    #[must_use]
47210    fn name(&self) -> &'static str {
47211        Self::name(self)
47212    }
47213}
47214
47215impl Discriminant<TransactionResultCode> for InnerTransactionResultResult {
47216    #[must_use]
47217    fn discriminant(&self) -> TransactionResultCode {
47218        Self::discriminant(self)
47219    }
47220}
47221
47222impl Variants<TransactionResultCode> for InnerTransactionResultResult {
47223    fn variants() -> slice::Iter<'static, TransactionResultCode> {
47224        Self::VARIANTS.iter()
47225    }
47226}
47227
47228impl Union<TransactionResultCode> for InnerTransactionResultResult {}
47229
47230impl ReadXdr for InnerTransactionResultResult {
47231    #[cfg(feature = "std")]
47232    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
47233        r.with_limited_depth(|r| {
47234            let dv: TransactionResultCode = <TransactionResultCode as ReadXdr>::read_xdr(r)?;
47235            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
47236            let v = match dv {
47237                TransactionResultCode::TxSuccess => {
47238                    Self::TxSuccess(VecM::<OperationResult>::read_xdr(r)?)
47239                }
47240                TransactionResultCode::TxFailed => {
47241                    Self::TxFailed(VecM::<OperationResult>::read_xdr(r)?)
47242                }
47243                TransactionResultCode::TxTooEarly => Self::TxTooEarly,
47244                TransactionResultCode::TxTooLate => Self::TxTooLate,
47245                TransactionResultCode::TxMissingOperation => Self::TxMissingOperation,
47246                TransactionResultCode::TxBadSeq => Self::TxBadSeq,
47247                TransactionResultCode::TxBadAuth => Self::TxBadAuth,
47248                TransactionResultCode::TxInsufficientBalance => Self::TxInsufficientBalance,
47249                TransactionResultCode::TxNoAccount => Self::TxNoAccount,
47250                TransactionResultCode::TxInsufficientFee => Self::TxInsufficientFee,
47251                TransactionResultCode::TxBadAuthExtra => Self::TxBadAuthExtra,
47252                TransactionResultCode::TxInternalError => Self::TxInternalError,
47253                TransactionResultCode::TxNotSupported => Self::TxNotSupported,
47254                TransactionResultCode::TxBadSponsorship => Self::TxBadSponsorship,
47255                TransactionResultCode::TxBadMinSeqAgeOrGap => Self::TxBadMinSeqAgeOrGap,
47256                TransactionResultCode::TxMalformed => Self::TxMalformed,
47257                TransactionResultCode::TxSorobanInvalid => Self::TxSorobanInvalid,
47258                #[allow(unreachable_patterns)]
47259                _ => return Err(Error::Invalid),
47260            };
47261            Ok(v)
47262        })
47263    }
47264}
47265
47266impl WriteXdr for InnerTransactionResultResult {
47267    #[cfg(feature = "std")]
47268    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
47269        w.with_limited_depth(|w| {
47270            self.discriminant().write_xdr(w)?;
47271            #[allow(clippy::match_same_arms)]
47272            match self {
47273                Self::TxSuccess(v) => v.write_xdr(w)?,
47274                Self::TxFailed(v) => v.write_xdr(w)?,
47275                Self::TxTooEarly => ().write_xdr(w)?,
47276                Self::TxTooLate => ().write_xdr(w)?,
47277                Self::TxMissingOperation => ().write_xdr(w)?,
47278                Self::TxBadSeq => ().write_xdr(w)?,
47279                Self::TxBadAuth => ().write_xdr(w)?,
47280                Self::TxInsufficientBalance => ().write_xdr(w)?,
47281                Self::TxNoAccount => ().write_xdr(w)?,
47282                Self::TxInsufficientFee => ().write_xdr(w)?,
47283                Self::TxBadAuthExtra => ().write_xdr(w)?,
47284                Self::TxInternalError => ().write_xdr(w)?,
47285                Self::TxNotSupported => ().write_xdr(w)?,
47286                Self::TxBadSponsorship => ().write_xdr(w)?,
47287                Self::TxBadMinSeqAgeOrGap => ().write_xdr(w)?,
47288                Self::TxMalformed => ().write_xdr(w)?,
47289                Self::TxSorobanInvalid => ().write_xdr(w)?,
47290            };
47291            Ok(())
47292        })
47293    }
47294}
47295
47296/// InnerTransactionResultExt is an XDR NestedUnion defines as:
47297///
47298/// ```text
47299/// union switch (int v)
47300///     {
47301///     case 0:
47302///         void;
47303///     }
47304/// ```
47305///
47306// union with discriminant i32
47307#[cfg_eval::cfg_eval]
47308#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
47309#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
47310#[cfg_attr(
47311    all(feature = "serde", feature = "alloc"),
47312    serde_with::serde_as,
47313    derive(serde::Serialize, serde::Deserialize),
47314    serde(rename_all = "snake_case")
47315)]
47316#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
47317#[allow(clippy::large_enum_variant)]
47318pub enum InnerTransactionResultExt {
47319    V0,
47320}
47321
47322#[cfg(feature = "alloc")]
47323impl Default for InnerTransactionResultExt {
47324    fn default() -> Self {
47325        Self::V0
47326    }
47327}
47328
47329impl InnerTransactionResultExt {
47330    pub const VARIANTS: [i32; 1] = [0];
47331    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
47332
47333    #[must_use]
47334    pub const fn name(&self) -> &'static str {
47335        match self {
47336            Self::V0 => "V0",
47337        }
47338    }
47339
47340    #[must_use]
47341    pub const fn discriminant(&self) -> i32 {
47342        #[allow(clippy::match_same_arms)]
47343        match self {
47344            Self::V0 => 0,
47345        }
47346    }
47347
47348    #[must_use]
47349    pub const fn variants() -> [i32; 1] {
47350        Self::VARIANTS
47351    }
47352}
47353
47354impl Name for InnerTransactionResultExt {
47355    #[must_use]
47356    fn name(&self) -> &'static str {
47357        Self::name(self)
47358    }
47359}
47360
47361impl Discriminant<i32> for InnerTransactionResultExt {
47362    #[must_use]
47363    fn discriminant(&self) -> i32 {
47364        Self::discriminant(self)
47365    }
47366}
47367
47368impl Variants<i32> for InnerTransactionResultExt {
47369    fn variants() -> slice::Iter<'static, i32> {
47370        Self::VARIANTS.iter()
47371    }
47372}
47373
47374impl Union<i32> for InnerTransactionResultExt {}
47375
47376impl ReadXdr for InnerTransactionResultExt {
47377    #[cfg(feature = "std")]
47378    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
47379        r.with_limited_depth(|r| {
47380            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
47381            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
47382            let v = match dv {
47383                0 => Self::V0,
47384                #[allow(unreachable_patterns)]
47385                _ => return Err(Error::Invalid),
47386            };
47387            Ok(v)
47388        })
47389    }
47390}
47391
47392impl WriteXdr for InnerTransactionResultExt {
47393    #[cfg(feature = "std")]
47394    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
47395        w.with_limited_depth(|w| {
47396            self.discriminant().write_xdr(w)?;
47397            #[allow(clippy::match_same_arms)]
47398            match self {
47399                Self::V0 => ().write_xdr(w)?,
47400            };
47401            Ok(())
47402        })
47403    }
47404}
47405
47406/// InnerTransactionResult is an XDR Struct defines as:
47407///
47408/// ```text
47409/// struct InnerTransactionResult
47410/// {
47411///     // Always 0. Here for binary compatibility.
47412///     int64 feeCharged;
47413///
47414///     union switch (TransactionResultCode code)
47415///     {
47416///     // txFEE_BUMP_INNER_SUCCESS is not included
47417///     case txSUCCESS:
47418///     case txFAILED:
47419///         OperationResult results<>;
47420///     case txTOO_EARLY:
47421///     case txTOO_LATE:
47422///     case txMISSING_OPERATION:
47423///     case txBAD_SEQ:
47424///     case txBAD_AUTH:
47425///     case txINSUFFICIENT_BALANCE:
47426///     case txNO_ACCOUNT:
47427///     case txINSUFFICIENT_FEE:
47428///     case txBAD_AUTH_EXTRA:
47429///     case txINTERNAL_ERROR:
47430///     case txNOT_SUPPORTED:
47431///     // txFEE_BUMP_INNER_FAILED is not included
47432///     case txBAD_SPONSORSHIP:
47433///     case txBAD_MIN_SEQ_AGE_OR_GAP:
47434///     case txMALFORMED:
47435///     case txSOROBAN_INVALID:
47436///         void;
47437///     }
47438///     result;
47439///
47440///     // reserved for future use
47441///     union switch (int v)
47442///     {
47443///     case 0:
47444///         void;
47445///     }
47446///     ext;
47447/// };
47448/// ```
47449///
47450#[cfg_attr(feature = "alloc", derive(Default))]
47451#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
47452#[cfg_eval::cfg_eval]
47453#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
47454#[cfg_attr(
47455    all(feature = "serde", feature = "alloc"),
47456    serde_with::serde_as,
47457    derive(serde::Serialize, serde::Deserialize),
47458    serde(rename_all = "snake_case")
47459)]
47460#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
47461pub struct InnerTransactionResult {
47462    #[cfg_attr(
47463        all(feature = "serde", feature = "alloc"),
47464        serde_as(as = "NumberOrString")
47465    )]
47466    pub fee_charged: i64,
47467    pub result: InnerTransactionResultResult,
47468    pub ext: InnerTransactionResultExt,
47469}
47470
47471impl ReadXdr for InnerTransactionResult {
47472    #[cfg(feature = "std")]
47473    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
47474        r.with_limited_depth(|r| {
47475            Ok(Self {
47476                fee_charged: i64::read_xdr(r)?,
47477                result: InnerTransactionResultResult::read_xdr(r)?,
47478                ext: InnerTransactionResultExt::read_xdr(r)?,
47479            })
47480        })
47481    }
47482}
47483
47484impl WriteXdr for InnerTransactionResult {
47485    #[cfg(feature = "std")]
47486    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
47487        w.with_limited_depth(|w| {
47488            self.fee_charged.write_xdr(w)?;
47489            self.result.write_xdr(w)?;
47490            self.ext.write_xdr(w)?;
47491            Ok(())
47492        })
47493    }
47494}
47495
47496/// InnerTransactionResultPair is an XDR Struct defines as:
47497///
47498/// ```text
47499/// struct InnerTransactionResultPair
47500/// {
47501///     Hash transactionHash;          // hash of the inner transaction
47502///     InnerTransactionResult result; // result for the inner transaction
47503/// };
47504/// ```
47505///
47506#[cfg_attr(feature = "alloc", derive(Default))]
47507#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
47508#[cfg_eval::cfg_eval]
47509#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
47510#[cfg_attr(
47511    all(feature = "serde", feature = "alloc"),
47512    serde_with::serde_as,
47513    derive(serde::Serialize, serde::Deserialize),
47514    serde(rename_all = "snake_case")
47515)]
47516#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
47517pub struct InnerTransactionResultPair {
47518    pub transaction_hash: Hash,
47519    pub result: InnerTransactionResult,
47520}
47521
47522impl ReadXdr for InnerTransactionResultPair {
47523    #[cfg(feature = "std")]
47524    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
47525        r.with_limited_depth(|r| {
47526            Ok(Self {
47527                transaction_hash: Hash::read_xdr(r)?,
47528                result: InnerTransactionResult::read_xdr(r)?,
47529            })
47530        })
47531    }
47532}
47533
47534impl WriteXdr for InnerTransactionResultPair {
47535    #[cfg(feature = "std")]
47536    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
47537        w.with_limited_depth(|w| {
47538            self.transaction_hash.write_xdr(w)?;
47539            self.result.write_xdr(w)?;
47540            Ok(())
47541        })
47542    }
47543}
47544
47545/// TransactionResultResult is an XDR NestedUnion defines as:
47546///
47547/// ```text
47548/// union switch (TransactionResultCode code)
47549///     {
47550///     case txFEE_BUMP_INNER_SUCCESS:
47551///     case txFEE_BUMP_INNER_FAILED:
47552///         InnerTransactionResultPair innerResultPair;
47553///     case txSUCCESS:
47554///     case txFAILED:
47555///         OperationResult results<>;
47556///     case txTOO_EARLY:
47557///     case txTOO_LATE:
47558///     case txMISSING_OPERATION:
47559///     case txBAD_SEQ:
47560///     case txBAD_AUTH:
47561///     case txINSUFFICIENT_BALANCE:
47562///     case txNO_ACCOUNT:
47563///     case txINSUFFICIENT_FEE:
47564///     case txBAD_AUTH_EXTRA:
47565///     case txINTERNAL_ERROR:
47566///     case txNOT_SUPPORTED:
47567///     // case txFEE_BUMP_INNER_FAILED: handled above
47568///     case txBAD_SPONSORSHIP:
47569///     case txBAD_MIN_SEQ_AGE_OR_GAP:
47570///     case txMALFORMED:
47571///     case txSOROBAN_INVALID:
47572///         void;
47573///     }
47574/// ```
47575///
47576// union with discriminant TransactionResultCode
47577#[cfg_eval::cfg_eval]
47578#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
47579#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
47580#[cfg_attr(
47581    all(feature = "serde", feature = "alloc"),
47582    serde_with::serde_as,
47583    derive(serde::Serialize, serde::Deserialize),
47584    serde(rename_all = "snake_case")
47585)]
47586#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
47587#[allow(clippy::large_enum_variant)]
47588pub enum TransactionResultResult {
47589    TxFeeBumpInnerSuccess(InnerTransactionResultPair),
47590    TxFeeBumpInnerFailed(InnerTransactionResultPair),
47591    TxSuccess(VecM<OperationResult>),
47592    TxFailed(VecM<OperationResult>),
47593    TxTooEarly,
47594    TxTooLate,
47595    TxMissingOperation,
47596    TxBadSeq,
47597    TxBadAuth,
47598    TxInsufficientBalance,
47599    TxNoAccount,
47600    TxInsufficientFee,
47601    TxBadAuthExtra,
47602    TxInternalError,
47603    TxNotSupported,
47604    TxBadSponsorship,
47605    TxBadMinSeqAgeOrGap,
47606    TxMalformed,
47607    TxSorobanInvalid,
47608}
47609
47610#[cfg(feature = "alloc")]
47611impl Default for TransactionResultResult {
47612    fn default() -> Self {
47613        Self::TxFeeBumpInnerSuccess(InnerTransactionResultPair::default())
47614    }
47615}
47616
47617impl TransactionResultResult {
47618    pub const VARIANTS: [TransactionResultCode; 19] = [
47619        TransactionResultCode::TxFeeBumpInnerSuccess,
47620        TransactionResultCode::TxFeeBumpInnerFailed,
47621        TransactionResultCode::TxSuccess,
47622        TransactionResultCode::TxFailed,
47623        TransactionResultCode::TxTooEarly,
47624        TransactionResultCode::TxTooLate,
47625        TransactionResultCode::TxMissingOperation,
47626        TransactionResultCode::TxBadSeq,
47627        TransactionResultCode::TxBadAuth,
47628        TransactionResultCode::TxInsufficientBalance,
47629        TransactionResultCode::TxNoAccount,
47630        TransactionResultCode::TxInsufficientFee,
47631        TransactionResultCode::TxBadAuthExtra,
47632        TransactionResultCode::TxInternalError,
47633        TransactionResultCode::TxNotSupported,
47634        TransactionResultCode::TxBadSponsorship,
47635        TransactionResultCode::TxBadMinSeqAgeOrGap,
47636        TransactionResultCode::TxMalformed,
47637        TransactionResultCode::TxSorobanInvalid,
47638    ];
47639    pub const VARIANTS_STR: [&'static str; 19] = [
47640        "TxFeeBumpInnerSuccess",
47641        "TxFeeBumpInnerFailed",
47642        "TxSuccess",
47643        "TxFailed",
47644        "TxTooEarly",
47645        "TxTooLate",
47646        "TxMissingOperation",
47647        "TxBadSeq",
47648        "TxBadAuth",
47649        "TxInsufficientBalance",
47650        "TxNoAccount",
47651        "TxInsufficientFee",
47652        "TxBadAuthExtra",
47653        "TxInternalError",
47654        "TxNotSupported",
47655        "TxBadSponsorship",
47656        "TxBadMinSeqAgeOrGap",
47657        "TxMalformed",
47658        "TxSorobanInvalid",
47659    ];
47660
47661    #[must_use]
47662    pub const fn name(&self) -> &'static str {
47663        match self {
47664            Self::TxFeeBumpInnerSuccess(_) => "TxFeeBumpInnerSuccess",
47665            Self::TxFeeBumpInnerFailed(_) => "TxFeeBumpInnerFailed",
47666            Self::TxSuccess(_) => "TxSuccess",
47667            Self::TxFailed(_) => "TxFailed",
47668            Self::TxTooEarly => "TxTooEarly",
47669            Self::TxTooLate => "TxTooLate",
47670            Self::TxMissingOperation => "TxMissingOperation",
47671            Self::TxBadSeq => "TxBadSeq",
47672            Self::TxBadAuth => "TxBadAuth",
47673            Self::TxInsufficientBalance => "TxInsufficientBalance",
47674            Self::TxNoAccount => "TxNoAccount",
47675            Self::TxInsufficientFee => "TxInsufficientFee",
47676            Self::TxBadAuthExtra => "TxBadAuthExtra",
47677            Self::TxInternalError => "TxInternalError",
47678            Self::TxNotSupported => "TxNotSupported",
47679            Self::TxBadSponsorship => "TxBadSponsorship",
47680            Self::TxBadMinSeqAgeOrGap => "TxBadMinSeqAgeOrGap",
47681            Self::TxMalformed => "TxMalformed",
47682            Self::TxSorobanInvalid => "TxSorobanInvalid",
47683        }
47684    }
47685
47686    #[must_use]
47687    pub const fn discriminant(&self) -> TransactionResultCode {
47688        #[allow(clippy::match_same_arms)]
47689        match self {
47690            Self::TxFeeBumpInnerSuccess(_) => TransactionResultCode::TxFeeBumpInnerSuccess,
47691            Self::TxFeeBumpInnerFailed(_) => TransactionResultCode::TxFeeBumpInnerFailed,
47692            Self::TxSuccess(_) => TransactionResultCode::TxSuccess,
47693            Self::TxFailed(_) => TransactionResultCode::TxFailed,
47694            Self::TxTooEarly => TransactionResultCode::TxTooEarly,
47695            Self::TxTooLate => TransactionResultCode::TxTooLate,
47696            Self::TxMissingOperation => TransactionResultCode::TxMissingOperation,
47697            Self::TxBadSeq => TransactionResultCode::TxBadSeq,
47698            Self::TxBadAuth => TransactionResultCode::TxBadAuth,
47699            Self::TxInsufficientBalance => TransactionResultCode::TxInsufficientBalance,
47700            Self::TxNoAccount => TransactionResultCode::TxNoAccount,
47701            Self::TxInsufficientFee => TransactionResultCode::TxInsufficientFee,
47702            Self::TxBadAuthExtra => TransactionResultCode::TxBadAuthExtra,
47703            Self::TxInternalError => TransactionResultCode::TxInternalError,
47704            Self::TxNotSupported => TransactionResultCode::TxNotSupported,
47705            Self::TxBadSponsorship => TransactionResultCode::TxBadSponsorship,
47706            Self::TxBadMinSeqAgeOrGap => TransactionResultCode::TxBadMinSeqAgeOrGap,
47707            Self::TxMalformed => TransactionResultCode::TxMalformed,
47708            Self::TxSorobanInvalid => TransactionResultCode::TxSorobanInvalid,
47709        }
47710    }
47711
47712    #[must_use]
47713    pub const fn variants() -> [TransactionResultCode; 19] {
47714        Self::VARIANTS
47715    }
47716}
47717
47718impl Name for TransactionResultResult {
47719    #[must_use]
47720    fn name(&self) -> &'static str {
47721        Self::name(self)
47722    }
47723}
47724
47725impl Discriminant<TransactionResultCode> for TransactionResultResult {
47726    #[must_use]
47727    fn discriminant(&self) -> TransactionResultCode {
47728        Self::discriminant(self)
47729    }
47730}
47731
47732impl Variants<TransactionResultCode> for TransactionResultResult {
47733    fn variants() -> slice::Iter<'static, TransactionResultCode> {
47734        Self::VARIANTS.iter()
47735    }
47736}
47737
47738impl Union<TransactionResultCode> for TransactionResultResult {}
47739
47740impl ReadXdr for TransactionResultResult {
47741    #[cfg(feature = "std")]
47742    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
47743        r.with_limited_depth(|r| {
47744            let dv: TransactionResultCode = <TransactionResultCode as ReadXdr>::read_xdr(r)?;
47745            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
47746            let v = match dv {
47747                TransactionResultCode::TxFeeBumpInnerSuccess => {
47748                    Self::TxFeeBumpInnerSuccess(InnerTransactionResultPair::read_xdr(r)?)
47749                }
47750                TransactionResultCode::TxFeeBumpInnerFailed => {
47751                    Self::TxFeeBumpInnerFailed(InnerTransactionResultPair::read_xdr(r)?)
47752                }
47753                TransactionResultCode::TxSuccess => {
47754                    Self::TxSuccess(VecM::<OperationResult>::read_xdr(r)?)
47755                }
47756                TransactionResultCode::TxFailed => {
47757                    Self::TxFailed(VecM::<OperationResult>::read_xdr(r)?)
47758                }
47759                TransactionResultCode::TxTooEarly => Self::TxTooEarly,
47760                TransactionResultCode::TxTooLate => Self::TxTooLate,
47761                TransactionResultCode::TxMissingOperation => Self::TxMissingOperation,
47762                TransactionResultCode::TxBadSeq => Self::TxBadSeq,
47763                TransactionResultCode::TxBadAuth => Self::TxBadAuth,
47764                TransactionResultCode::TxInsufficientBalance => Self::TxInsufficientBalance,
47765                TransactionResultCode::TxNoAccount => Self::TxNoAccount,
47766                TransactionResultCode::TxInsufficientFee => Self::TxInsufficientFee,
47767                TransactionResultCode::TxBadAuthExtra => Self::TxBadAuthExtra,
47768                TransactionResultCode::TxInternalError => Self::TxInternalError,
47769                TransactionResultCode::TxNotSupported => Self::TxNotSupported,
47770                TransactionResultCode::TxBadSponsorship => Self::TxBadSponsorship,
47771                TransactionResultCode::TxBadMinSeqAgeOrGap => Self::TxBadMinSeqAgeOrGap,
47772                TransactionResultCode::TxMalformed => Self::TxMalformed,
47773                TransactionResultCode::TxSorobanInvalid => Self::TxSorobanInvalid,
47774                #[allow(unreachable_patterns)]
47775                _ => return Err(Error::Invalid),
47776            };
47777            Ok(v)
47778        })
47779    }
47780}
47781
47782impl WriteXdr for TransactionResultResult {
47783    #[cfg(feature = "std")]
47784    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
47785        w.with_limited_depth(|w| {
47786            self.discriminant().write_xdr(w)?;
47787            #[allow(clippy::match_same_arms)]
47788            match self {
47789                Self::TxFeeBumpInnerSuccess(v) => v.write_xdr(w)?,
47790                Self::TxFeeBumpInnerFailed(v) => v.write_xdr(w)?,
47791                Self::TxSuccess(v) => v.write_xdr(w)?,
47792                Self::TxFailed(v) => v.write_xdr(w)?,
47793                Self::TxTooEarly => ().write_xdr(w)?,
47794                Self::TxTooLate => ().write_xdr(w)?,
47795                Self::TxMissingOperation => ().write_xdr(w)?,
47796                Self::TxBadSeq => ().write_xdr(w)?,
47797                Self::TxBadAuth => ().write_xdr(w)?,
47798                Self::TxInsufficientBalance => ().write_xdr(w)?,
47799                Self::TxNoAccount => ().write_xdr(w)?,
47800                Self::TxInsufficientFee => ().write_xdr(w)?,
47801                Self::TxBadAuthExtra => ().write_xdr(w)?,
47802                Self::TxInternalError => ().write_xdr(w)?,
47803                Self::TxNotSupported => ().write_xdr(w)?,
47804                Self::TxBadSponsorship => ().write_xdr(w)?,
47805                Self::TxBadMinSeqAgeOrGap => ().write_xdr(w)?,
47806                Self::TxMalformed => ().write_xdr(w)?,
47807                Self::TxSorobanInvalid => ().write_xdr(w)?,
47808            };
47809            Ok(())
47810        })
47811    }
47812}
47813
47814/// TransactionResultExt is an XDR NestedUnion defines as:
47815///
47816/// ```text
47817/// union switch (int v)
47818///     {
47819///     case 0:
47820///         void;
47821///     }
47822/// ```
47823///
47824// union with discriminant i32
47825#[cfg_eval::cfg_eval]
47826#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
47827#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
47828#[cfg_attr(
47829    all(feature = "serde", feature = "alloc"),
47830    serde_with::serde_as,
47831    derive(serde::Serialize, serde::Deserialize),
47832    serde(rename_all = "snake_case")
47833)]
47834#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
47835#[allow(clippy::large_enum_variant)]
47836pub enum TransactionResultExt {
47837    V0,
47838}
47839
47840#[cfg(feature = "alloc")]
47841impl Default for TransactionResultExt {
47842    fn default() -> Self {
47843        Self::V0
47844    }
47845}
47846
47847impl TransactionResultExt {
47848    pub const VARIANTS: [i32; 1] = [0];
47849    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
47850
47851    #[must_use]
47852    pub const fn name(&self) -> &'static str {
47853        match self {
47854            Self::V0 => "V0",
47855        }
47856    }
47857
47858    #[must_use]
47859    pub const fn discriminant(&self) -> i32 {
47860        #[allow(clippy::match_same_arms)]
47861        match self {
47862            Self::V0 => 0,
47863        }
47864    }
47865
47866    #[must_use]
47867    pub const fn variants() -> [i32; 1] {
47868        Self::VARIANTS
47869    }
47870}
47871
47872impl Name for TransactionResultExt {
47873    #[must_use]
47874    fn name(&self) -> &'static str {
47875        Self::name(self)
47876    }
47877}
47878
47879impl Discriminant<i32> for TransactionResultExt {
47880    #[must_use]
47881    fn discriminant(&self) -> i32 {
47882        Self::discriminant(self)
47883    }
47884}
47885
47886impl Variants<i32> for TransactionResultExt {
47887    fn variants() -> slice::Iter<'static, i32> {
47888        Self::VARIANTS.iter()
47889    }
47890}
47891
47892impl Union<i32> for TransactionResultExt {}
47893
47894impl ReadXdr for TransactionResultExt {
47895    #[cfg(feature = "std")]
47896    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
47897        r.with_limited_depth(|r| {
47898            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
47899            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
47900            let v = match dv {
47901                0 => Self::V0,
47902                #[allow(unreachable_patterns)]
47903                _ => return Err(Error::Invalid),
47904            };
47905            Ok(v)
47906        })
47907    }
47908}
47909
47910impl WriteXdr for TransactionResultExt {
47911    #[cfg(feature = "std")]
47912    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
47913        w.with_limited_depth(|w| {
47914            self.discriminant().write_xdr(w)?;
47915            #[allow(clippy::match_same_arms)]
47916            match self {
47917                Self::V0 => ().write_xdr(w)?,
47918            };
47919            Ok(())
47920        })
47921    }
47922}
47923
47924/// TransactionResult is an XDR Struct defines as:
47925///
47926/// ```text
47927/// struct TransactionResult
47928/// {
47929///     int64 feeCharged; // actual fee charged for the transaction
47930///
47931///     union switch (TransactionResultCode code)
47932///     {
47933///     case txFEE_BUMP_INNER_SUCCESS:
47934///     case txFEE_BUMP_INNER_FAILED:
47935///         InnerTransactionResultPair innerResultPair;
47936///     case txSUCCESS:
47937///     case txFAILED:
47938///         OperationResult results<>;
47939///     case txTOO_EARLY:
47940///     case txTOO_LATE:
47941///     case txMISSING_OPERATION:
47942///     case txBAD_SEQ:
47943///     case txBAD_AUTH:
47944///     case txINSUFFICIENT_BALANCE:
47945///     case txNO_ACCOUNT:
47946///     case txINSUFFICIENT_FEE:
47947///     case txBAD_AUTH_EXTRA:
47948///     case txINTERNAL_ERROR:
47949///     case txNOT_SUPPORTED:
47950///     // case txFEE_BUMP_INNER_FAILED: handled above
47951///     case txBAD_SPONSORSHIP:
47952///     case txBAD_MIN_SEQ_AGE_OR_GAP:
47953///     case txMALFORMED:
47954///     case txSOROBAN_INVALID:
47955///         void;
47956///     }
47957///     result;
47958///
47959///     // reserved for future use
47960///     union switch (int v)
47961///     {
47962///     case 0:
47963///         void;
47964///     }
47965///     ext;
47966/// };
47967/// ```
47968///
47969#[cfg_attr(feature = "alloc", derive(Default))]
47970#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
47971#[cfg_eval::cfg_eval]
47972#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
47973#[cfg_attr(
47974    all(feature = "serde", feature = "alloc"),
47975    serde_with::serde_as,
47976    derive(serde::Serialize, serde::Deserialize),
47977    serde(rename_all = "snake_case")
47978)]
47979#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
47980pub struct TransactionResult {
47981    #[cfg_attr(
47982        all(feature = "serde", feature = "alloc"),
47983        serde_as(as = "NumberOrString")
47984    )]
47985    pub fee_charged: i64,
47986    pub result: TransactionResultResult,
47987    pub ext: TransactionResultExt,
47988}
47989
47990impl ReadXdr for TransactionResult {
47991    #[cfg(feature = "std")]
47992    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
47993        r.with_limited_depth(|r| {
47994            Ok(Self {
47995                fee_charged: i64::read_xdr(r)?,
47996                result: TransactionResultResult::read_xdr(r)?,
47997                ext: TransactionResultExt::read_xdr(r)?,
47998            })
47999        })
48000    }
48001}
48002
48003impl WriteXdr for TransactionResult {
48004    #[cfg(feature = "std")]
48005    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
48006        w.with_limited_depth(|w| {
48007            self.fee_charged.write_xdr(w)?;
48008            self.result.write_xdr(w)?;
48009            self.ext.write_xdr(w)?;
48010            Ok(())
48011        })
48012    }
48013}
48014
48015/// Hash is an XDR Typedef defines as:
48016///
48017/// ```text
48018/// typedef opaque Hash[32];
48019/// ```
48020///
48021#[cfg_eval::cfg_eval]
48022#[cfg_attr(feature = "alloc", derive(Default))]
48023#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
48024#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
48025#[cfg_attr(
48026    all(feature = "serde", feature = "alloc"),
48027    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
48028)]
48029pub struct Hash(pub [u8; 32]);
48030
48031impl core::fmt::Debug for Hash {
48032    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
48033        let v = &self.0;
48034        write!(f, "Hash(")?;
48035        for b in v {
48036            write!(f, "{b:02x}")?;
48037        }
48038        write!(f, ")")?;
48039        Ok(())
48040    }
48041}
48042impl core::fmt::Display for Hash {
48043    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
48044        let v = &self.0;
48045        for b in v {
48046            write!(f, "{b:02x}")?;
48047        }
48048        Ok(())
48049    }
48050}
48051
48052#[cfg(feature = "alloc")]
48053impl core::str::FromStr for Hash {
48054    type Err = Error;
48055    fn from_str(s: &str) -> core::result::Result<Self, Self::Err> {
48056        hex::decode(s).map_err(|_| Error::InvalidHex)?.try_into()
48057    }
48058}
48059#[cfg(feature = "schemars")]
48060impl schemars::JsonSchema for Hash {
48061    fn schema_name() -> String {
48062        "Hash".to_string()
48063    }
48064
48065    fn is_referenceable() -> bool {
48066        false
48067    }
48068
48069    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
48070        let schema = String::json_schema(gen);
48071        if let schemars::schema::Schema::Object(mut schema) = schema {
48072            schema.extensions.insert(
48073                "contentEncoding".to_owned(),
48074                serde_json::Value::String("hex".to_string()),
48075            );
48076            schema.extensions.insert(
48077                "contentMediaType".to_owned(),
48078                serde_json::Value::String("application/binary".to_string()),
48079            );
48080            let string = *schema.string.unwrap_or_default().clone();
48081            schema.string = Some(Box::new(schemars::schema::StringValidation {
48082                max_length: 32_u32.checked_mul(2).map(Some).unwrap_or_default(),
48083                min_length: 32_u32.checked_mul(2).map(Some).unwrap_or_default(),
48084                ..string
48085            }));
48086            schema.into()
48087        } else {
48088            schema
48089        }
48090    }
48091}
48092impl From<Hash> for [u8; 32] {
48093    #[must_use]
48094    fn from(x: Hash) -> Self {
48095        x.0
48096    }
48097}
48098
48099impl From<[u8; 32]> for Hash {
48100    #[must_use]
48101    fn from(x: [u8; 32]) -> Self {
48102        Hash(x)
48103    }
48104}
48105
48106impl AsRef<[u8; 32]> for Hash {
48107    #[must_use]
48108    fn as_ref(&self) -> &[u8; 32] {
48109        &self.0
48110    }
48111}
48112
48113impl ReadXdr for Hash {
48114    #[cfg(feature = "std")]
48115    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
48116        r.with_limited_depth(|r| {
48117            let i = <[u8; 32]>::read_xdr(r)?;
48118            let v = Hash(i);
48119            Ok(v)
48120        })
48121    }
48122}
48123
48124impl WriteXdr for Hash {
48125    #[cfg(feature = "std")]
48126    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
48127        w.with_limited_depth(|w| self.0.write_xdr(w))
48128    }
48129}
48130
48131impl Hash {
48132    #[must_use]
48133    pub fn as_slice(&self) -> &[u8] {
48134        &self.0
48135    }
48136}
48137
48138#[cfg(feature = "alloc")]
48139impl TryFrom<Vec<u8>> for Hash {
48140    type Error = Error;
48141    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
48142        x.as_slice().try_into()
48143    }
48144}
48145
48146#[cfg(feature = "alloc")]
48147impl TryFrom<&Vec<u8>> for Hash {
48148    type Error = Error;
48149    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
48150        x.as_slice().try_into()
48151    }
48152}
48153
48154impl TryFrom<&[u8]> for Hash {
48155    type Error = Error;
48156    fn try_from(x: &[u8]) -> Result<Self, Error> {
48157        Ok(Hash(x.try_into()?))
48158    }
48159}
48160
48161impl AsRef<[u8]> for Hash {
48162    #[must_use]
48163    fn as_ref(&self) -> &[u8] {
48164        &self.0
48165    }
48166}
48167
48168/// Uint256 is an XDR Typedef defines as:
48169///
48170/// ```text
48171/// typedef opaque uint256[32];
48172/// ```
48173///
48174#[cfg_eval::cfg_eval]
48175#[cfg_attr(feature = "alloc", derive(Default))]
48176#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
48177#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
48178#[cfg_attr(
48179    all(feature = "serde", feature = "alloc"),
48180    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
48181)]
48182pub struct Uint256(pub [u8; 32]);
48183
48184impl core::fmt::Debug for Uint256 {
48185    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
48186        let v = &self.0;
48187        write!(f, "Uint256(")?;
48188        for b in v {
48189            write!(f, "{b:02x}")?;
48190        }
48191        write!(f, ")")?;
48192        Ok(())
48193    }
48194}
48195impl core::fmt::Display for Uint256 {
48196    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
48197        let v = &self.0;
48198        for b in v {
48199            write!(f, "{b:02x}")?;
48200        }
48201        Ok(())
48202    }
48203}
48204
48205#[cfg(feature = "alloc")]
48206impl core::str::FromStr for Uint256 {
48207    type Err = Error;
48208    fn from_str(s: &str) -> core::result::Result<Self, Self::Err> {
48209        hex::decode(s).map_err(|_| Error::InvalidHex)?.try_into()
48210    }
48211}
48212#[cfg(feature = "schemars")]
48213impl schemars::JsonSchema for Uint256 {
48214    fn schema_name() -> String {
48215        "Uint256".to_string()
48216    }
48217
48218    fn is_referenceable() -> bool {
48219        false
48220    }
48221
48222    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
48223        let schema = String::json_schema(gen);
48224        if let schemars::schema::Schema::Object(mut schema) = schema {
48225            schema.extensions.insert(
48226                "contentEncoding".to_owned(),
48227                serde_json::Value::String("hex".to_string()),
48228            );
48229            schema.extensions.insert(
48230                "contentMediaType".to_owned(),
48231                serde_json::Value::String("application/binary".to_string()),
48232            );
48233            let string = *schema.string.unwrap_or_default().clone();
48234            schema.string = Some(Box::new(schemars::schema::StringValidation {
48235                max_length: 32_u32.checked_mul(2).map(Some).unwrap_or_default(),
48236                min_length: 32_u32.checked_mul(2).map(Some).unwrap_or_default(),
48237                ..string
48238            }));
48239            schema.into()
48240        } else {
48241            schema
48242        }
48243    }
48244}
48245impl From<Uint256> for [u8; 32] {
48246    #[must_use]
48247    fn from(x: Uint256) -> Self {
48248        x.0
48249    }
48250}
48251
48252impl From<[u8; 32]> for Uint256 {
48253    #[must_use]
48254    fn from(x: [u8; 32]) -> Self {
48255        Uint256(x)
48256    }
48257}
48258
48259impl AsRef<[u8; 32]> for Uint256 {
48260    #[must_use]
48261    fn as_ref(&self) -> &[u8; 32] {
48262        &self.0
48263    }
48264}
48265
48266impl ReadXdr for Uint256 {
48267    #[cfg(feature = "std")]
48268    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
48269        r.with_limited_depth(|r| {
48270            let i = <[u8; 32]>::read_xdr(r)?;
48271            let v = Uint256(i);
48272            Ok(v)
48273        })
48274    }
48275}
48276
48277impl WriteXdr for Uint256 {
48278    #[cfg(feature = "std")]
48279    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
48280        w.with_limited_depth(|w| self.0.write_xdr(w))
48281    }
48282}
48283
48284impl Uint256 {
48285    #[must_use]
48286    pub fn as_slice(&self) -> &[u8] {
48287        &self.0
48288    }
48289}
48290
48291#[cfg(feature = "alloc")]
48292impl TryFrom<Vec<u8>> for Uint256 {
48293    type Error = Error;
48294    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
48295        x.as_slice().try_into()
48296    }
48297}
48298
48299#[cfg(feature = "alloc")]
48300impl TryFrom<&Vec<u8>> for Uint256 {
48301    type Error = Error;
48302    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
48303        x.as_slice().try_into()
48304    }
48305}
48306
48307impl TryFrom<&[u8]> for Uint256 {
48308    type Error = Error;
48309    fn try_from(x: &[u8]) -> Result<Self, Error> {
48310        Ok(Uint256(x.try_into()?))
48311    }
48312}
48313
48314impl AsRef<[u8]> for Uint256 {
48315    #[must_use]
48316    fn as_ref(&self) -> &[u8] {
48317        &self.0
48318    }
48319}
48320
48321/// Uint32 is an XDR Typedef defines as:
48322///
48323/// ```text
48324/// typedef unsigned int uint32;
48325/// ```
48326///
48327pub type Uint32 = u32;
48328
48329/// Int32 is an XDR Typedef defines as:
48330///
48331/// ```text
48332/// typedef int int32;
48333/// ```
48334///
48335pub type Int32 = i32;
48336
48337/// Uint64 is an XDR Typedef defines as:
48338///
48339/// ```text
48340/// typedef unsigned hyper uint64;
48341/// ```
48342///
48343pub type Uint64 = u64;
48344
48345/// Int64 is an XDR Typedef defines as:
48346///
48347/// ```text
48348/// typedef hyper int64;
48349/// ```
48350///
48351pub type Int64 = i64;
48352
48353/// TimePoint is an XDR Typedef defines as:
48354///
48355/// ```text
48356/// typedef uint64 TimePoint;
48357/// ```
48358///
48359#[cfg_eval::cfg_eval]
48360#[cfg_attr(feature = "alloc", derive(Default))]
48361#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
48362#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
48363#[cfg_attr(
48364    all(feature = "serde", feature = "alloc"),
48365    serde_with::serde_as,
48366    derive(serde::Serialize, serde::Deserialize),
48367    serde(rename_all = "snake_case")
48368)]
48369#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
48370#[derive(Debug)]
48371pub struct TimePoint(
48372    #[cfg_attr(
48373        all(feature = "serde", feature = "alloc"),
48374        serde_as(as = "NumberOrString")
48375    )]
48376    pub u64,
48377);
48378
48379impl From<TimePoint> for u64 {
48380    #[must_use]
48381    fn from(x: TimePoint) -> Self {
48382        x.0
48383    }
48384}
48385
48386impl From<u64> for TimePoint {
48387    #[must_use]
48388    fn from(x: u64) -> Self {
48389        TimePoint(x)
48390    }
48391}
48392
48393impl AsRef<u64> for TimePoint {
48394    #[must_use]
48395    fn as_ref(&self) -> &u64 {
48396        &self.0
48397    }
48398}
48399
48400impl ReadXdr for TimePoint {
48401    #[cfg(feature = "std")]
48402    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
48403        r.with_limited_depth(|r| {
48404            let i = u64::read_xdr(r)?;
48405            let v = TimePoint(i);
48406            Ok(v)
48407        })
48408    }
48409}
48410
48411impl WriteXdr for TimePoint {
48412    #[cfg(feature = "std")]
48413    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
48414        w.with_limited_depth(|w| self.0.write_xdr(w))
48415    }
48416}
48417
48418/// Duration is an XDR Typedef defines as:
48419///
48420/// ```text
48421/// typedef uint64 Duration;
48422/// ```
48423///
48424#[cfg_eval::cfg_eval]
48425#[cfg_attr(feature = "alloc", derive(Default))]
48426#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
48427#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
48428#[cfg_attr(
48429    all(feature = "serde", feature = "alloc"),
48430    serde_with::serde_as,
48431    derive(serde::Serialize, serde::Deserialize),
48432    serde(rename_all = "snake_case")
48433)]
48434#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
48435#[derive(Debug)]
48436pub struct Duration(
48437    #[cfg_attr(
48438        all(feature = "serde", feature = "alloc"),
48439        serde_as(as = "NumberOrString")
48440    )]
48441    pub u64,
48442);
48443
48444impl From<Duration> for u64 {
48445    #[must_use]
48446    fn from(x: Duration) -> Self {
48447        x.0
48448    }
48449}
48450
48451impl From<u64> for Duration {
48452    #[must_use]
48453    fn from(x: u64) -> Self {
48454        Duration(x)
48455    }
48456}
48457
48458impl AsRef<u64> for Duration {
48459    #[must_use]
48460    fn as_ref(&self) -> &u64 {
48461        &self.0
48462    }
48463}
48464
48465impl ReadXdr for Duration {
48466    #[cfg(feature = "std")]
48467    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
48468        r.with_limited_depth(|r| {
48469            let i = u64::read_xdr(r)?;
48470            let v = Duration(i);
48471            Ok(v)
48472        })
48473    }
48474}
48475
48476impl WriteXdr for Duration {
48477    #[cfg(feature = "std")]
48478    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
48479        w.with_limited_depth(|w| self.0.write_xdr(w))
48480    }
48481}
48482
48483/// ExtensionPoint is an XDR Union defines as:
48484///
48485/// ```text
48486/// union ExtensionPoint switch (int v)
48487/// {
48488/// case 0:
48489///     void;
48490/// };
48491/// ```
48492///
48493// union with discriminant i32
48494#[cfg_eval::cfg_eval]
48495#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
48496#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
48497#[cfg_attr(
48498    all(feature = "serde", feature = "alloc"),
48499    serde_with::serde_as,
48500    derive(serde::Serialize, serde::Deserialize),
48501    serde(rename_all = "snake_case")
48502)]
48503#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
48504#[allow(clippy::large_enum_variant)]
48505pub enum ExtensionPoint {
48506    V0,
48507}
48508
48509#[cfg(feature = "alloc")]
48510impl Default for ExtensionPoint {
48511    fn default() -> Self {
48512        Self::V0
48513    }
48514}
48515
48516impl ExtensionPoint {
48517    pub const VARIANTS: [i32; 1] = [0];
48518    pub const VARIANTS_STR: [&'static str; 1] = ["V0"];
48519
48520    #[must_use]
48521    pub const fn name(&self) -> &'static str {
48522        match self {
48523            Self::V0 => "V0",
48524        }
48525    }
48526
48527    #[must_use]
48528    pub const fn discriminant(&self) -> i32 {
48529        #[allow(clippy::match_same_arms)]
48530        match self {
48531            Self::V0 => 0,
48532        }
48533    }
48534
48535    #[must_use]
48536    pub const fn variants() -> [i32; 1] {
48537        Self::VARIANTS
48538    }
48539}
48540
48541impl Name for ExtensionPoint {
48542    #[must_use]
48543    fn name(&self) -> &'static str {
48544        Self::name(self)
48545    }
48546}
48547
48548impl Discriminant<i32> for ExtensionPoint {
48549    #[must_use]
48550    fn discriminant(&self) -> i32 {
48551        Self::discriminant(self)
48552    }
48553}
48554
48555impl Variants<i32> for ExtensionPoint {
48556    fn variants() -> slice::Iter<'static, i32> {
48557        Self::VARIANTS.iter()
48558    }
48559}
48560
48561impl Union<i32> for ExtensionPoint {}
48562
48563impl ReadXdr for ExtensionPoint {
48564    #[cfg(feature = "std")]
48565    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
48566        r.with_limited_depth(|r| {
48567            let dv: i32 = <i32 as ReadXdr>::read_xdr(r)?;
48568            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
48569            let v = match dv {
48570                0 => Self::V0,
48571                #[allow(unreachable_patterns)]
48572                _ => return Err(Error::Invalid),
48573            };
48574            Ok(v)
48575        })
48576    }
48577}
48578
48579impl WriteXdr for ExtensionPoint {
48580    #[cfg(feature = "std")]
48581    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
48582        w.with_limited_depth(|w| {
48583            self.discriminant().write_xdr(w)?;
48584            #[allow(clippy::match_same_arms)]
48585            match self {
48586                Self::V0 => ().write_xdr(w)?,
48587            };
48588            Ok(())
48589        })
48590    }
48591}
48592
48593/// CryptoKeyType is an XDR Enum defines as:
48594///
48595/// ```text
48596/// enum CryptoKeyType
48597/// {
48598///     KEY_TYPE_ED25519 = 0,
48599///     KEY_TYPE_PRE_AUTH_TX = 1,
48600///     KEY_TYPE_HASH_X = 2,
48601///     KEY_TYPE_ED25519_SIGNED_PAYLOAD = 3,
48602///     // MUXED enum values for supported type are derived from the enum values
48603///     // above by ORing them with 0x100
48604///     KEY_TYPE_MUXED_ED25519 = 0x100
48605/// };
48606/// ```
48607///
48608// enum
48609#[cfg_attr(feature = "alloc", derive(Default))]
48610#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
48611#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
48612#[cfg_attr(
48613    all(feature = "serde", feature = "alloc"),
48614    derive(serde::Serialize, serde::Deserialize),
48615    serde(rename_all = "snake_case")
48616)]
48617#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
48618#[repr(i32)]
48619pub enum CryptoKeyType {
48620    #[cfg_attr(feature = "alloc", default)]
48621    Ed25519 = 0,
48622    PreAuthTx = 1,
48623    HashX = 2,
48624    Ed25519SignedPayload = 3,
48625    MuxedEd25519 = 256,
48626}
48627
48628impl CryptoKeyType {
48629    pub const VARIANTS: [CryptoKeyType; 5] = [
48630        CryptoKeyType::Ed25519,
48631        CryptoKeyType::PreAuthTx,
48632        CryptoKeyType::HashX,
48633        CryptoKeyType::Ed25519SignedPayload,
48634        CryptoKeyType::MuxedEd25519,
48635    ];
48636    pub const VARIANTS_STR: [&'static str; 5] = [
48637        "Ed25519",
48638        "PreAuthTx",
48639        "HashX",
48640        "Ed25519SignedPayload",
48641        "MuxedEd25519",
48642    ];
48643
48644    #[must_use]
48645    pub const fn name(&self) -> &'static str {
48646        match self {
48647            Self::Ed25519 => "Ed25519",
48648            Self::PreAuthTx => "PreAuthTx",
48649            Self::HashX => "HashX",
48650            Self::Ed25519SignedPayload => "Ed25519SignedPayload",
48651            Self::MuxedEd25519 => "MuxedEd25519",
48652        }
48653    }
48654
48655    #[must_use]
48656    pub const fn variants() -> [CryptoKeyType; 5] {
48657        Self::VARIANTS
48658    }
48659}
48660
48661impl Name for CryptoKeyType {
48662    #[must_use]
48663    fn name(&self) -> &'static str {
48664        Self::name(self)
48665    }
48666}
48667
48668impl Variants<CryptoKeyType> for CryptoKeyType {
48669    fn variants() -> slice::Iter<'static, CryptoKeyType> {
48670        Self::VARIANTS.iter()
48671    }
48672}
48673
48674impl Enum for CryptoKeyType {}
48675
48676impl fmt::Display for CryptoKeyType {
48677    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
48678        f.write_str(self.name())
48679    }
48680}
48681
48682impl TryFrom<i32> for CryptoKeyType {
48683    type Error = Error;
48684
48685    fn try_from(i: i32) -> Result<Self, Error> {
48686        let e = match i {
48687            0 => CryptoKeyType::Ed25519,
48688            1 => CryptoKeyType::PreAuthTx,
48689            2 => CryptoKeyType::HashX,
48690            3 => CryptoKeyType::Ed25519SignedPayload,
48691            256 => CryptoKeyType::MuxedEd25519,
48692            #[allow(unreachable_patterns)]
48693            _ => return Err(Error::Invalid),
48694        };
48695        Ok(e)
48696    }
48697}
48698
48699impl From<CryptoKeyType> for i32 {
48700    #[must_use]
48701    fn from(e: CryptoKeyType) -> Self {
48702        e as Self
48703    }
48704}
48705
48706impl ReadXdr for CryptoKeyType {
48707    #[cfg(feature = "std")]
48708    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
48709        r.with_limited_depth(|r| {
48710            let e = i32::read_xdr(r)?;
48711            let v: Self = e.try_into()?;
48712            Ok(v)
48713        })
48714    }
48715}
48716
48717impl WriteXdr for CryptoKeyType {
48718    #[cfg(feature = "std")]
48719    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
48720        w.with_limited_depth(|w| {
48721            let i: i32 = (*self).into();
48722            i.write_xdr(w)
48723        })
48724    }
48725}
48726
48727/// PublicKeyType is an XDR Enum defines as:
48728///
48729/// ```text
48730/// enum PublicKeyType
48731/// {
48732///     PUBLIC_KEY_TYPE_ED25519 = KEY_TYPE_ED25519
48733/// };
48734/// ```
48735///
48736// enum
48737#[cfg_attr(feature = "alloc", derive(Default))]
48738#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
48739#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
48740#[cfg_attr(
48741    all(feature = "serde", feature = "alloc"),
48742    derive(serde::Serialize, serde::Deserialize),
48743    serde(rename_all = "snake_case")
48744)]
48745#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
48746#[repr(i32)]
48747pub enum PublicKeyType {
48748    #[cfg_attr(feature = "alloc", default)]
48749    PublicKeyTypeEd25519 = 0,
48750}
48751
48752impl PublicKeyType {
48753    pub const VARIANTS: [PublicKeyType; 1] = [PublicKeyType::PublicKeyTypeEd25519];
48754    pub const VARIANTS_STR: [&'static str; 1] = ["PublicKeyTypeEd25519"];
48755
48756    #[must_use]
48757    pub const fn name(&self) -> &'static str {
48758        match self {
48759            Self::PublicKeyTypeEd25519 => "PublicKeyTypeEd25519",
48760        }
48761    }
48762
48763    #[must_use]
48764    pub const fn variants() -> [PublicKeyType; 1] {
48765        Self::VARIANTS
48766    }
48767}
48768
48769impl Name for PublicKeyType {
48770    #[must_use]
48771    fn name(&self) -> &'static str {
48772        Self::name(self)
48773    }
48774}
48775
48776impl Variants<PublicKeyType> for PublicKeyType {
48777    fn variants() -> slice::Iter<'static, PublicKeyType> {
48778        Self::VARIANTS.iter()
48779    }
48780}
48781
48782impl Enum for PublicKeyType {}
48783
48784impl fmt::Display for PublicKeyType {
48785    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
48786        f.write_str(self.name())
48787    }
48788}
48789
48790impl TryFrom<i32> for PublicKeyType {
48791    type Error = Error;
48792
48793    fn try_from(i: i32) -> Result<Self, Error> {
48794        let e = match i {
48795            0 => PublicKeyType::PublicKeyTypeEd25519,
48796            #[allow(unreachable_patterns)]
48797            _ => return Err(Error::Invalid),
48798        };
48799        Ok(e)
48800    }
48801}
48802
48803impl From<PublicKeyType> for i32 {
48804    #[must_use]
48805    fn from(e: PublicKeyType) -> Self {
48806        e as Self
48807    }
48808}
48809
48810impl ReadXdr for PublicKeyType {
48811    #[cfg(feature = "std")]
48812    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
48813        r.with_limited_depth(|r| {
48814            let e = i32::read_xdr(r)?;
48815            let v: Self = e.try_into()?;
48816            Ok(v)
48817        })
48818    }
48819}
48820
48821impl WriteXdr for PublicKeyType {
48822    #[cfg(feature = "std")]
48823    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
48824        w.with_limited_depth(|w| {
48825            let i: i32 = (*self).into();
48826            i.write_xdr(w)
48827        })
48828    }
48829}
48830
48831/// SignerKeyType is an XDR Enum defines as:
48832///
48833/// ```text
48834/// enum SignerKeyType
48835/// {
48836///     SIGNER_KEY_TYPE_ED25519 = KEY_TYPE_ED25519,
48837///     SIGNER_KEY_TYPE_PRE_AUTH_TX = KEY_TYPE_PRE_AUTH_TX,
48838///     SIGNER_KEY_TYPE_HASH_X = KEY_TYPE_HASH_X,
48839///     SIGNER_KEY_TYPE_ED25519_SIGNED_PAYLOAD = KEY_TYPE_ED25519_SIGNED_PAYLOAD
48840/// };
48841/// ```
48842///
48843// enum
48844#[cfg_attr(feature = "alloc", derive(Default))]
48845#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
48846#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
48847#[cfg_attr(
48848    all(feature = "serde", feature = "alloc"),
48849    derive(serde::Serialize, serde::Deserialize),
48850    serde(rename_all = "snake_case")
48851)]
48852#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
48853#[repr(i32)]
48854pub enum SignerKeyType {
48855    #[cfg_attr(feature = "alloc", default)]
48856    Ed25519 = 0,
48857    PreAuthTx = 1,
48858    HashX = 2,
48859    Ed25519SignedPayload = 3,
48860}
48861
48862impl SignerKeyType {
48863    pub const VARIANTS: [SignerKeyType; 4] = [
48864        SignerKeyType::Ed25519,
48865        SignerKeyType::PreAuthTx,
48866        SignerKeyType::HashX,
48867        SignerKeyType::Ed25519SignedPayload,
48868    ];
48869    pub const VARIANTS_STR: [&'static str; 4] =
48870        ["Ed25519", "PreAuthTx", "HashX", "Ed25519SignedPayload"];
48871
48872    #[must_use]
48873    pub const fn name(&self) -> &'static str {
48874        match self {
48875            Self::Ed25519 => "Ed25519",
48876            Self::PreAuthTx => "PreAuthTx",
48877            Self::HashX => "HashX",
48878            Self::Ed25519SignedPayload => "Ed25519SignedPayload",
48879        }
48880    }
48881
48882    #[must_use]
48883    pub const fn variants() -> [SignerKeyType; 4] {
48884        Self::VARIANTS
48885    }
48886}
48887
48888impl Name for SignerKeyType {
48889    #[must_use]
48890    fn name(&self) -> &'static str {
48891        Self::name(self)
48892    }
48893}
48894
48895impl Variants<SignerKeyType> for SignerKeyType {
48896    fn variants() -> slice::Iter<'static, SignerKeyType> {
48897        Self::VARIANTS.iter()
48898    }
48899}
48900
48901impl Enum for SignerKeyType {}
48902
48903impl fmt::Display for SignerKeyType {
48904    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
48905        f.write_str(self.name())
48906    }
48907}
48908
48909impl TryFrom<i32> for SignerKeyType {
48910    type Error = Error;
48911
48912    fn try_from(i: i32) -> Result<Self, Error> {
48913        let e = match i {
48914            0 => SignerKeyType::Ed25519,
48915            1 => SignerKeyType::PreAuthTx,
48916            2 => SignerKeyType::HashX,
48917            3 => SignerKeyType::Ed25519SignedPayload,
48918            #[allow(unreachable_patterns)]
48919            _ => return Err(Error::Invalid),
48920        };
48921        Ok(e)
48922    }
48923}
48924
48925impl From<SignerKeyType> for i32 {
48926    #[must_use]
48927    fn from(e: SignerKeyType) -> Self {
48928        e as Self
48929    }
48930}
48931
48932impl ReadXdr for SignerKeyType {
48933    #[cfg(feature = "std")]
48934    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
48935        r.with_limited_depth(|r| {
48936            let e = i32::read_xdr(r)?;
48937            let v: Self = e.try_into()?;
48938            Ok(v)
48939        })
48940    }
48941}
48942
48943impl WriteXdr for SignerKeyType {
48944    #[cfg(feature = "std")]
48945    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
48946        w.with_limited_depth(|w| {
48947            let i: i32 = (*self).into();
48948            i.write_xdr(w)
48949        })
48950    }
48951}
48952
48953/// PublicKey is an XDR Union defines as:
48954///
48955/// ```text
48956/// union PublicKey switch (PublicKeyType type)
48957/// {
48958/// case PUBLIC_KEY_TYPE_ED25519:
48959///     uint256 ed25519;
48960/// };
48961/// ```
48962///
48963// union with discriminant PublicKeyType
48964#[cfg_eval::cfg_eval]
48965#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
48966#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
48967#[cfg_attr(
48968    all(feature = "serde", feature = "alloc"),
48969    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
48970)]
48971#[allow(clippy::large_enum_variant)]
48972pub enum PublicKey {
48973    PublicKeyTypeEd25519(Uint256),
48974}
48975
48976#[cfg(feature = "alloc")]
48977impl Default for PublicKey {
48978    fn default() -> Self {
48979        Self::PublicKeyTypeEd25519(Uint256::default())
48980    }
48981}
48982
48983impl PublicKey {
48984    pub const VARIANTS: [PublicKeyType; 1] = [PublicKeyType::PublicKeyTypeEd25519];
48985    pub const VARIANTS_STR: [&'static str; 1] = ["PublicKeyTypeEd25519"];
48986
48987    #[must_use]
48988    pub const fn name(&self) -> &'static str {
48989        match self {
48990            Self::PublicKeyTypeEd25519(_) => "PublicKeyTypeEd25519",
48991        }
48992    }
48993
48994    #[must_use]
48995    pub const fn discriminant(&self) -> PublicKeyType {
48996        #[allow(clippy::match_same_arms)]
48997        match self {
48998            Self::PublicKeyTypeEd25519(_) => PublicKeyType::PublicKeyTypeEd25519,
48999        }
49000    }
49001
49002    #[must_use]
49003    pub const fn variants() -> [PublicKeyType; 1] {
49004        Self::VARIANTS
49005    }
49006}
49007
49008impl Name for PublicKey {
49009    #[must_use]
49010    fn name(&self) -> &'static str {
49011        Self::name(self)
49012    }
49013}
49014
49015impl Discriminant<PublicKeyType> for PublicKey {
49016    #[must_use]
49017    fn discriminant(&self) -> PublicKeyType {
49018        Self::discriminant(self)
49019    }
49020}
49021
49022impl Variants<PublicKeyType> for PublicKey {
49023    fn variants() -> slice::Iter<'static, PublicKeyType> {
49024        Self::VARIANTS.iter()
49025    }
49026}
49027
49028impl Union<PublicKeyType> for PublicKey {}
49029
49030impl ReadXdr for PublicKey {
49031    #[cfg(feature = "std")]
49032    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49033        r.with_limited_depth(|r| {
49034            let dv: PublicKeyType = <PublicKeyType as ReadXdr>::read_xdr(r)?;
49035            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
49036            let v = match dv {
49037                PublicKeyType::PublicKeyTypeEd25519 => {
49038                    Self::PublicKeyTypeEd25519(Uint256::read_xdr(r)?)
49039                }
49040                #[allow(unreachable_patterns)]
49041                _ => return Err(Error::Invalid),
49042            };
49043            Ok(v)
49044        })
49045    }
49046}
49047
49048impl WriteXdr for PublicKey {
49049    #[cfg(feature = "std")]
49050    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49051        w.with_limited_depth(|w| {
49052            self.discriminant().write_xdr(w)?;
49053            #[allow(clippy::match_same_arms)]
49054            match self {
49055                Self::PublicKeyTypeEd25519(v) => v.write_xdr(w)?,
49056            };
49057            Ok(())
49058        })
49059    }
49060}
49061
49062/// SignerKeyEd25519SignedPayload is an XDR NestedStruct defines as:
49063///
49064/// ```text
49065/// struct
49066///     {
49067///         /* Public key that must sign the payload. */
49068///         uint256 ed25519;
49069///         /* Payload to be raw signed by ed25519. */
49070///         opaque payload<64>;
49071///     }
49072/// ```
49073///
49074#[cfg_attr(feature = "alloc", derive(Default))]
49075#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
49076#[cfg_eval::cfg_eval]
49077#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49078#[cfg_attr(
49079    all(feature = "serde", feature = "alloc"),
49080    derive(serde_with::SerializeDisplay)
49081)]
49082pub struct SignerKeyEd25519SignedPayload {
49083    pub ed25519: Uint256,
49084    pub payload: BytesM<64>,
49085}
49086
49087impl ReadXdr for SignerKeyEd25519SignedPayload {
49088    #[cfg(feature = "std")]
49089    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49090        r.with_limited_depth(|r| {
49091            Ok(Self {
49092                ed25519: Uint256::read_xdr(r)?,
49093                payload: BytesM::<64>::read_xdr(r)?,
49094            })
49095        })
49096    }
49097}
49098
49099impl WriteXdr for SignerKeyEd25519SignedPayload {
49100    #[cfg(feature = "std")]
49101    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49102        w.with_limited_depth(|w| {
49103            self.ed25519.write_xdr(w)?;
49104            self.payload.write_xdr(w)?;
49105            Ok(())
49106        })
49107    }
49108}
49109#[cfg(all(feature = "serde", feature = "alloc"))]
49110impl<'de> serde::Deserialize<'de> for SignerKeyEd25519SignedPayload {
49111    fn deserialize<D>(deserializer: D) -> core::result::Result<Self, D::Error>
49112    where
49113        D: serde::Deserializer<'de>,
49114    {
49115        use serde::Deserialize;
49116        #[derive(Deserialize)]
49117        struct SignerKeyEd25519SignedPayload {
49118            ed25519: Uint256,
49119            payload: BytesM<64>,
49120        }
49121        #[derive(Deserialize)]
49122        #[serde(untagged)]
49123        enum SignerKeyEd25519SignedPayloadOrString<'a> {
49124            Str(&'a str),
49125            String(String),
49126            SignerKeyEd25519SignedPayload(SignerKeyEd25519SignedPayload),
49127        }
49128        match SignerKeyEd25519SignedPayloadOrString::deserialize(deserializer)? {
49129            SignerKeyEd25519SignedPayloadOrString::Str(s) => {
49130                s.parse().map_err(serde::de::Error::custom)
49131            }
49132            SignerKeyEd25519SignedPayloadOrString::String(s) => {
49133                s.parse().map_err(serde::de::Error::custom)
49134            }
49135            SignerKeyEd25519SignedPayloadOrString::SignerKeyEd25519SignedPayload(
49136                SignerKeyEd25519SignedPayload { ed25519, payload },
49137            ) => Ok(self::SignerKeyEd25519SignedPayload { ed25519, payload }),
49138        }
49139    }
49140}
49141
49142/// SignerKey is an XDR Union defines as:
49143///
49144/// ```text
49145/// union SignerKey switch (SignerKeyType type)
49146/// {
49147/// case SIGNER_KEY_TYPE_ED25519:
49148///     uint256 ed25519;
49149/// case SIGNER_KEY_TYPE_PRE_AUTH_TX:
49150///     /* SHA-256 Hash of TransactionSignaturePayload structure */
49151///     uint256 preAuthTx;
49152/// case SIGNER_KEY_TYPE_HASH_X:
49153///     /* Hash of random 256 bit preimage X */
49154///     uint256 hashX;
49155/// case SIGNER_KEY_TYPE_ED25519_SIGNED_PAYLOAD:
49156///     struct
49157///     {
49158///         /* Public key that must sign the payload. */
49159///         uint256 ed25519;
49160///         /* Payload to be raw signed by ed25519. */
49161///         opaque payload<64>;
49162///     } ed25519SignedPayload;
49163/// };
49164/// ```
49165///
49166// union with discriminant SignerKeyType
49167#[cfg_eval::cfg_eval]
49168#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
49169#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49170#[cfg_attr(
49171    all(feature = "serde", feature = "alloc"),
49172    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
49173)]
49174#[allow(clippy::large_enum_variant)]
49175pub enum SignerKey {
49176    Ed25519(Uint256),
49177    PreAuthTx(Uint256),
49178    HashX(Uint256),
49179    Ed25519SignedPayload(SignerKeyEd25519SignedPayload),
49180}
49181
49182#[cfg(feature = "alloc")]
49183impl Default for SignerKey {
49184    fn default() -> Self {
49185        Self::Ed25519(Uint256::default())
49186    }
49187}
49188
49189impl SignerKey {
49190    pub const VARIANTS: [SignerKeyType; 4] = [
49191        SignerKeyType::Ed25519,
49192        SignerKeyType::PreAuthTx,
49193        SignerKeyType::HashX,
49194        SignerKeyType::Ed25519SignedPayload,
49195    ];
49196    pub const VARIANTS_STR: [&'static str; 4] =
49197        ["Ed25519", "PreAuthTx", "HashX", "Ed25519SignedPayload"];
49198
49199    #[must_use]
49200    pub const fn name(&self) -> &'static str {
49201        match self {
49202            Self::Ed25519(_) => "Ed25519",
49203            Self::PreAuthTx(_) => "PreAuthTx",
49204            Self::HashX(_) => "HashX",
49205            Self::Ed25519SignedPayload(_) => "Ed25519SignedPayload",
49206        }
49207    }
49208
49209    #[must_use]
49210    pub const fn discriminant(&self) -> SignerKeyType {
49211        #[allow(clippy::match_same_arms)]
49212        match self {
49213            Self::Ed25519(_) => SignerKeyType::Ed25519,
49214            Self::PreAuthTx(_) => SignerKeyType::PreAuthTx,
49215            Self::HashX(_) => SignerKeyType::HashX,
49216            Self::Ed25519SignedPayload(_) => SignerKeyType::Ed25519SignedPayload,
49217        }
49218    }
49219
49220    #[must_use]
49221    pub const fn variants() -> [SignerKeyType; 4] {
49222        Self::VARIANTS
49223    }
49224}
49225
49226impl Name for SignerKey {
49227    #[must_use]
49228    fn name(&self) -> &'static str {
49229        Self::name(self)
49230    }
49231}
49232
49233impl Discriminant<SignerKeyType> for SignerKey {
49234    #[must_use]
49235    fn discriminant(&self) -> SignerKeyType {
49236        Self::discriminant(self)
49237    }
49238}
49239
49240impl Variants<SignerKeyType> for SignerKey {
49241    fn variants() -> slice::Iter<'static, SignerKeyType> {
49242        Self::VARIANTS.iter()
49243    }
49244}
49245
49246impl Union<SignerKeyType> for SignerKey {}
49247
49248impl ReadXdr for SignerKey {
49249    #[cfg(feature = "std")]
49250    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49251        r.with_limited_depth(|r| {
49252            let dv: SignerKeyType = <SignerKeyType as ReadXdr>::read_xdr(r)?;
49253            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
49254            let v = match dv {
49255                SignerKeyType::Ed25519 => Self::Ed25519(Uint256::read_xdr(r)?),
49256                SignerKeyType::PreAuthTx => Self::PreAuthTx(Uint256::read_xdr(r)?),
49257                SignerKeyType::HashX => Self::HashX(Uint256::read_xdr(r)?),
49258                SignerKeyType::Ed25519SignedPayload => {
49259                    Self::Ed25519SignedPayload(SignerKeyEd25519SignedPayload::read_xdr(r)?)
49260                }
49261                #[allow(unreachable_patterns)]
49262                _ => return Err(Error::Invalid),
49263            };
49264            Ok(v)
49265        })
49266    }
49267}
49268
49269impl WriteXdr for SignerKey {
49270    #[cfg(feature = "std")]
49271    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49272        w.with_limited_depth(|w| {
49273            self.discriminant().write_xdr(w)?;
49274            #[allow(clippy::match_same_arms)]
49275            match self {
49276                Self::Ed25519(v) => v.write_xdr(w)?,
49277                Self::PreAuthTx(v) => v.write_xdr(w)?,
49278                Self::HashX(v) => v.write_xdr(w)?,
49279                Self::Ed25519SignedPayload(v) => v.write_xdr(w)?,
49280            };
49281            Ok(())
49282        })
49283    }
49284}
49285
49286/// Signature is an XDR Typedef defines as:
49287///
49288/// ```text
49289/// typedef opaque Signature<64>;
49290/// ```
49291///
49292#[cfg_eval::cfg_eval]
49293#[derive(Default, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
49294#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49295#[cfg_attr(
49296    all(feature = "serde", feature = "alloc"),
49297    serde_with::serde_as,
49298    derive(serde::Serialize, serde::Deserialize),
49299    serde(rename_all = "snake_case")
49300)]
49301#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
49302#[derive(Debug)]
49303pub struct Signature(pub BytesM<64>);
49304
49305impl From<Signature> for BytesM<64> {
49306    #[must_use]
49307    fn from(x: Signature) -> Self {
49308        x.0
49309    }
49310}
49311
49312impl From<BytesM<64>> for Signature {
49313    #[must_use]
49314    fn from(x: BytesM<64>) -> Self {
49315        Signature(x)
49316    }
49317}
49318
49319impl AsRef<BytesM<64>> for Signature {
49320    #[must_use]
49321    fn as_ref(&self) -> &BytesM<64> {
49322        &self.0
49323    }
49324}
49325
49326impl ReadXdr for Signature {
49327    #[cfg(feature = "std")]
49328    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49329        r.with_limited_depth(|r| {
49330            let i = BytesM::<64>::read_xdr(r)?;
49331            let v = Signature(i);
49332            Ok(v)
49333        })
49334    }
49335}
49336
49337impl WriteXdr for Signature {
49338    #[cfg(feature = "std")]
49339    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49340        w.with_limited_depth(|w| self.0.write_xdr(w))
49341    }
49342}
49343
49344impl Deref for Signature {
49345    type Target = BytesM<64>;
49346    fn deref(&self) -> &Self::Target {
49347        &self.0
49348    }
49349}
49350
49351impl From<Signature> for Vec<u8> {
49352    #[must_use]
49353    fn from(x: Signature) -> Self {
49354        x.0 .0
49355    }
49356}
49357
49358impl TryFrom<Vec<u8>> for Signature {
49359    type Error = Error;
49360    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
49361        Ok(Signature(x.try_into()?))
49362    }
49363}
49364
49365#[cfg(feature = "alloc")]
49366impl TryFrom<&Vec<u8>> for Signature {
49367    type Error = Error;
49368    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
49369        Ok(Signature(x.try_into()?))
49370    }
49371}
49372
49373impl AsRef<Vec<u8>> for Signature {
49374    #[must_use]
49375    fn as_ref(&self) -> &Vec<u8> {
49376        &self.0 .0
49377    }
49378}
49379
49380impl AsRef<[u8]> for Signature {
49381    #[cfg(feature = "alloc")]
49382    #[must_use]
49383    fn as_ref(&self) -> &[u8] {
49384        &self.0 .0
49385    }
49386    #[cfg(not(feature = "alloc"))]
49387    #[must_use]
49388    fn as_ref(&self) -> &[u8] {
49389        self.0 .0
49390    }
49391}
49392
49393/// SignatureHint is an XDR Typedef defines as:
49394///
49395/// ```text
49396/// typedef opaque SignatureHint[4];
49397/// ```
49398///
49399#[cfg_eval::cfg_eval]
49400#[cfg_attr(feature = "alloc", derive(Default))]
49401#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
49402#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49403#[cfg_attr(
49404    all(feature = "serde", feature = "alloc"),
49405    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
49406)]
49407pub struct SignatureHint(pub [u8; 4]);
49408
49409impl core::fmt::Debug for SignatureHint {
49410    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
49411        let v = &self.0;
49412        write!(f, "SignatureHint(")?;
49413        for b in v {
49414            write!(f, "{b:02x}")?;
49415        }
49416        write!(f, ")")?;
49417        Ok(())
49418    }
49419}
49420impl core::fmt::Display for SignatureHint {
49421    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
49422        let v = &self.0;
49423        for b in v {
49424            write!(f, "{b:02x}")?;
49425        }
49426        Ok(())
49427    }
49428}
49429
49430#[cfg(feature = "alloc")]
49431impl core::str::FromStr for SignatureHint {
49432    type Err = Error;
49433    fn from_str(s: &str) -> core::result::Result<Self, Self::Err> {
49434        hex::decode(s).map_err(|_| Error::InvalidHex)?.try_into()
49435    }
49436}
49437#[cfg(feature = "schemars")]
49438impl schemars::JsonSchema for SignatureHint {
49439    fn schema_name() -> String {
49440        "SignatureHint".to_string()
49441    }
49442
49443    fn is_referenceable() -> bool {
49444        false
49445    }
49446
49447    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
49448        let schema = String::json_schema(gen);
49449        if let schemars::schema::Schema::Object(mut schema) = schema {
49450            schema.extensions.insert(
49451                "contentEncoding".to_owned(),
49452                serde_json::Value::String("hex".to_string()),
49453            );
49454            schema.extensions.insert(
49455                "contentMediaType".to_owned(),
49456                serde_json::Value::String("application/binary".to_string()),
49457            );
49458            let string = *schema.string.unwrap_or_default().clone();
49459            schema.string = Some(Box::new(schemars::schema::StringValidation {
49460                max_length: 4_u32.checked_mul(2).map(Some).unwrap_or_default(),
49461                min_length: 4_u32.checked_mul(2).map(Some).unwrap_or_default(),
49462                ..string
49463            }));
49464            schema.into()
49465        } else {
49466            schema
49467        }
49468    }
49469}
49470impl From<SignatureHint> for [u8; 4] {
49471    #[must_use]
49472    fn from(x: SignatureHint) -> Self {
49473        x.0
49474    }
49475}
49476
49477impl From<[u8; 4]> for SignatureHint {
49478    #[must_use]
49479    fn from(x: [u8; 4]) -> Self {
49480        SignatureHint(x)
49481    }
49482}
49483
49484impl AsRef<[u8; 4]> for SignatureHint {
49485    #[must_use]
49486    fn as_ref(&self) -> &[u8; 4] {
49487        &self.0
49488    }
49489}
49490
49491impl ReadXdr for SignatureHint {
49492    #[cfg(feature = "std")]
49493    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49494        r.with_limited_depth(|r| {
49495            let i = <[u8; 4]>::read_xdr(r)?;
49496            let v = SignatureHint(i);
49497            Ok(v)
49498        })
49499    }
49500}
49501
49502impl WriteXdr for SignatureHint {
49503    #[cfg(feature = "std")]
49504    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49505        w.with_limited_depth(|w| self.0.write_xdr(w))
49506    }
49507}
49508
49509impl SignatureHint {
49510    #[must_use]
49511    pub fn as_slice(&self) -> &[u8] {
49512        &self.0
49513    }
49514}
49515
49516#[cfg(feature = "alloc")]
49517impl TryFrom<Vec<u8>> for SignatureHint {
49518    type Error = Error;
49519    fn try_from(x: Vec<u8>) -> Result<Self, Error> {
49520        x.as_slice().try_into()
49521    }
49522}
49523
49524#[cfg(feature = "alloc")]
49525impl TryFrom<&Vec<u8>> for SignatureHint {
49526    type Error = Error;
49527    fn try_from(x: &Vec<u8>) -> Result<Self, Error> {
49528        x.as_slice().try_into()
49529    }
49530}
49531
49532impl TryFrom<&[u8]> for SignatureHint {
49533    type Error = Error;
49534    fn try_from(x: &[u8]) -> Result<Self, Error> {
49535        Ok(SignatureHint(x.try_into()?))
49536    }
49537}
49538
49539impl AsRef<[u8]> for SignatureHint {
49540    #[must_use]
49541    fn as_ref(&self) -> &[u8] {
49542        &self.0
49543    }
49544}
49545
49546/// NodeId is an XDR Typedef defines as:
49547///
49548/// ```text
49549/// typedef PublicKey NodeID;
49550/// ```
49551///
49552#[cfg_eval::cfg_eval]
49553#[cfg_attr(feature = "alloc", derive(Default))]
49554#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
49555#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49556#[cfg_attr(
49557    all(feature = "serde", feature = "alloc"),
49558    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
49559)]
49560#[derive(Debug)]
49561pub struct NodeId(pub PublicKey);
49562
49563impl From<NodeId> for PublicKey {
49564    #[must_use]
49565    fn from(x: NodeId) -> Self {
49566        x.0
49567    }
49568}
49569
49570impl From<PublicKey> for NodeId {
49571    #[must_use]
49572    fn from(x: PublicKey) -> Self {
49573        NodeId(x)
49574    }
49575}
49576
49577impl AsRef<PublicKey> for NodeId {
49578    #[must_use]
49579    fn as_ref(&self) -> &PublicKey {
49580        &self.0
49581    }
49582}
49583
49584impl ReadXdr for NodeId {
49585    #[cfg(feature = "std")]
49586    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49587        r.with_limited_depth(|r| {
49588            let i = PublicKey::read_xdr(r)?;
49589            let v = NodeId(i);
49590            Ok(v)
49591        })
49592    }
49593}
49594
49595impl WriteXdr for NodeId {
49596    #[cfg(feature = "std")]
49597    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49598        w.with_limited_depth(|w| self.0.write_xdr(w))
49599    }
49600}
49601
49602/// AccountId is an XDR Typedef defines as:
49603///
49604/// ```text
49605/// typedef PublicKey AccountID;
49606/// ```
49607///
49608#[cfg_eval::cfg_eval]
49609#[cfg_attr(feature = "alloc", derive(Default))]
49610#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
49611#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49612#[cfg_attr(
49613    all(feature = "serde", feature = "alloc"),
49614    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
49615)]
49616#[derive(Debug)]
49617pub struct AccountId(pub PublicKey);
49618
49619impl From<AccountId> for PublicKey {
49620    #[must_use]
49621    fn from(x: AccountId) -> Self {
49622        x.0
49623    }
49624}
49625
49626impl From<PublicKey> for AccountId {
49627    #[must_use]
49628    fn from(x: PublicKey) -> Self {
49629        AccountId(x)
49630    }
49631}
49632
49633impl AsRef<PublicKey> for AccountId {
49634    #[must_use]
49635    fn as_ref(&self) -> &PublicKey {
49636        &self.0
49637    }
49638}
49639
49640impl ReadXdr for AccountId {
49641    #[cfg(feature = "std")]
49642    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49643        r.with_limited_depth(|r| {
49644            let i = PublicKey::read_xdr(r)?;
49645            let v = AccountId(i);
49646            Ok(v)
49647        })
49648    }
49649}
49650
49651impl WriteXdr for AccountId {
49652    #[cfg(feature = "std")]
49653    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49654        w.with_limited_depth(|w| self.0.write_xdr(w))
49655    }
49656}
49657
49658/// ContractId is an XDR Typedef defines as:
49659///
49660/// ```text
49661/// typedef Hash ContractID;
49662/// ```
49663///
49664#[cfg_eval::cfg_eval]
49665#[cfg_attr(feature = "alloc", derive(Default))]
49666#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
49667#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49668#[cfg_attr(
49669    all(feature = "serde", feature = "alloc"),
49670    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
49671)]
49672#[derive(Debug)]
49673pub struct ContractId(pub Hash);
49674
49675impl From<ContractId> for Hash {
49676    #[must_use]
49677    fn from(x: ContractId) -> Self {
49678        x.0
49679    }
49680}
49681
49682impl From<Hash> for ContractId {
49683    #[must_use]
49684    fn from(x: Hash) -> Self {
49685        ContractId(x)
49686    }
49687}
49688
49689impl AsRef<Hash> for ContractId {
49690    #[must_use]
49691    fn as_ref(&self) -> &Hash {
49692        &self.0
49693    }
49694}
49695
49696impl ReadXdr for ContractId {
49697    #[cfg(feature = "std")]
49698    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49699        r.with_limited_depth(|r| {
49700            let i = Hash::read_xdr(r)?;
49701            let v = ContractId(i);
49702            Ok(v)
49703        })
49704    }
49705}
49706
49707impl WriteXdr for ContractId {
49708    #[cfg(feature = "std")]
49709    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49710        w.with_limited_depth(|w| self.0.write_xdr(w))
49711    }
49712}
49713
49714/// Curve25519Secret is an XDR Struct defines as:
49715///
49716/// ```text
49717/// struct Curve25519Secret
49718/// {
49719///     opaque key[32];
49720/// };
49721/// ```
49722///
49723#[cfg_attr(feature = "alloc", derive(Default))]
49724#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
49725#[cfg_eval::cfg_eval]
49726#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49727#[cfg_attr(
49728    all(feature = "serde", feature = "alloc"),
49729    serde_with::serde_as,
49730    derive(serde::Serialize, serde::Deserialize),
49731    serde(rename_all = "snake_case")
49732)]
49733#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
49734pub struct Curve25519Secret {
49735    pub key: [u8; 32],
49736}
49737
49738impl ReadXdr for Curve25519Secret {
49739    #[cfg(feature = "std")]
49740    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49741        r.with_limited_depth(|r| {
49742            Ok(Self {
49743                key: <[u8; 32]>::read_xdr(r)?,
49744            })
49745        })
49746    }
49747}
49748
49749impl WriteXdr for Curve25519Secret {
49750    #[cfg(feature = "std")]
49751    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49752        w.with_limited_depth(|w| {
49753            self.key.write_xdr(w)?;
49754            Ok(())
49755        })
49756    }
49757}
49758
49759/// Curve25519Public is an XDR Struct defines as:
49760///
49761/// ```text
49762/// struct Curve25519Public
49763/// {
49764///     opaque key[32];
49765/// };
49766/// ```
49767///
49768#[cfg_attr(feature = "alloc", derive(Default))]
49769#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
49770#[cfg_eval::cfg_eval]
49771#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49772#[cfg_attr(
49773    all(feature = "serde", feature = "alloc"),
49774    serde_with::serde_as,
49775    derive(serde::Serialize, serde::Deserialize),
49776    serde(rename_all = "snake_case")
49777)]
49778#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
49779pub struct Curve25519Public {
49780    pub key: [u8; 32],
49781}
49782
49783impl ReadXdr for Curve25519Public {
49784    #[cfg(feature = "std")]
49785    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49786        r.with_limited_depth(|r| {
49787            Ok(Self {
49788                key: <[u8; 32]>::read_xdr(r)?,
49789            })
49790        })
49791    }
49792}
49793
49794impl WriteXdr for Curve25519Public {
49795    #[cfg(feature = "std")]
49796    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49797        w.with_limited_depth(|w| {
49798            self.key.write_xdr(w)?;
49799            Ok(())
49800        })
49801    }
49802}
49803
49804/// HmacSha256Key is an XDR Struct defines as:
49805///
49806/// ```text
49807/// struct HmacSha256Key
49808/// {
49809///     opaque key[32];
49810/// };
49811/// ```
49812///
49813#[cfg_attr(feature = "alloc", derive(Default))]
49814#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
49815#[cfg_eval::cfg_eval]
49816#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49817#[cfg_attr(
49818    all(feature = "serde", feature = "alloc"),
49819    serde_with::serde_as,
49820    derive(serde::Serialize, serde::Deserialize),
49821    serde(rename_all = "snake_case")
49822)]
49823#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
49824pub struct HmacSha256Key {
49825    pub key: [u8; 32],
49826}
49827
49828impl ReadXdr for HmacSha256Key {
49829    #[cfg(feature = "std")]
49830    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49831        r.with_limited_depth(|r| {
49832            Ok(Self {
49833                key: <[u8; 32]>::read_xdr(r)?,
49834            })
49835        })
49836    }
49837}
49838
49839impl WriteXdr for HmacSha256Key {
49840    #[cfg(feature = "std")]
49841    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49842        w.with_limited_depth(|w| {
49843            self.key.write_xdr(w)?;
49844            Ok(())
49845        })
49846    }
49847}
49848
49849/// HmacSha256Mac is an XDR Struct defines as:
49850///
49851/// ```text
49852/// struct HmacSha256Mac
49853/// {
49854///     opaque mac[32];
49855/// };
49856/// ```
49857///
49858#[cfg_attr(feature = "alloc", derive(Default))]
49859#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
49860#[cfg_eval::cfg_eval]
49861#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49862#[cfg_attr(
49863    all(feature = "serde", feature = "alloc"),
49864    serde_with::serde_as,
49865    derive(serde::Serialize, serde::Deserialize),
49866    serde(rename_all = "snake_case")
49867)]
49868#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
49869pub struct HmacSha256Mac {
49870    pub mac: [u8; 32],
49871}
49872
49873impl ReadXdr for HmacSha256Mac {
49874    #[cfg(feature = "std")]
49875    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49876        r.with_limited_depth(|r| {
49877            Ok(Self {
49878                mac: <[u8; 32]>::read_xdr(r)?,
49879            })
49880        })
49881    }
49882}
49883
49884impl WriteXdr for HmacSha256Mac {
49885    #[cfg(feature = "std")]
49886    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49887        w.with_limited_depth(|w| {
49888            self.mac.write_xdr(w)?;
49889            Ok(())
49890        })
49891    }
49892}
49893
49894/// ShortHashSeed is an XDR Struct defines as:
49895///
49896/// ```text
49897/// struct ShortHashSeed
49898/// {
49899///     opaque seed[16];
49900/// };
49901/// ```
49902///
49903#[cfg_attr(feature = "alloc", derive(Default))]
49904#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
49905#[cfg_eval::cfg_eval]
49906#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49907#[cfg_attr(
49908    all(feature = "serde", feature = "alloc"),
49909    serde_with::serde_as,
49910    derive(serde::Serialize, serde::Deserialize),
49911    serde(rename_all = "snake_case")
49912)]
49913#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
49914pub struct ShortHashSeed {
49915    pub seed: [u8; 16],
49916}
49917
49918impl ReadXdr for ShortHashSeed {
49919    #[cfg(feature = "std")]
49920    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
49921        r.with_limited_depth(|r| {
49922            Ok(Self {
49923                seed: <[u8; 16]>::read_xdr(r)?,
49924            })
49925        })
49926    }
49927}
49928
49929impl WriteXdr for ShortHashSeed {
49930    #[cfg(feature = "std")]
49931    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
49932        w.with_limited_depth(|w| {
49933            self.seed.write_xdr(w)?;
49934            Ok(())
49935        })
49936    }
49937}
49938
49939/// BinaryFuseFilterType is an XDR Enum defines as:
49940///
49941/// ```text
49942/// enum BinaryFuseFilterType
49943/// {
49944///     BINARY_FUSE_FILTER_8_BIT = 0,
49945///     BINARY_FUSE_FILTER_16_BIT = 1,
49946///     BINARY_FUSE_FILTER_32_BIT = 2
49947/// };
49948/// ```
49949///
49950// enum
49951#[cfg_attr(feature = "alloc", derive(Default))]
49952#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
49953#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
49954#[cfg_attr(
49955    all(feature = "serde", feature = "alloc"),
49956    derive(serde::Serialize, serde::Deserialize),
49957    serde(rename_all = "snake_case")
49958)]
49959#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
49960#[repr(i32)]
49961pub enum BinaryFuseFilterType {
49962    #[cfg_attr(feature = "alloc", default)]
49963    B8Bit = 0,
49964    B16Bit = 1,
49965    B32Bit = 2,
49966}
49967
49968impl BinaryFuseFilterType {
49969    pub const VARIANTS: [BinaryFuseFilterType; 3] = [
49970        BinaryFuseFilterType::B8Bit,
49971        BinaryFuseFilterType::B16Bit,
49972        BinaryFuseFilterType::B32Bit,
49973    ];
49974    pub const VARIANTS_STR: [&'static str; 3] = ["B8Bit", "B16Bit", "B32Bit"];
49975
49976    #[must_use]
49977    pub const fn name(&self) -> &'static str {
49978        match self {
49979            Self::B8Bit => "B8Bit",
49980            Self::B16Bit => "B16Bit",
49981            Self::B32Bit => "B32Bit",
49982        }
49983    }
49984
49985    #[must_use]
49986    pub const fn variants() -> [BinaryFuseFilterType; 3] {
49987        Self::VARIANTS
49988    }
49989}
49990
49991impl Name for BinaryFuseFilterType {
49992    #[must_use]
49993    fn name(&self) -> &'static str {
49994        Self::name(self)
49995    }
49996}
49997
49998impl Variants<BinaryFuseFilterType> for BinaryFuseFilterType {
49999    fn variants() -> slice::Iter<'static, BinaryFuseFilterType> {
50000        Self::VARIANTS.iter()
50001    }
50002}
50003
50004impl Enum for BinaryFuseFilterType {}
50005
50006impl fmt::Display for BinaryFuseFilterType {
50007    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
50008        f.write_str(self.name())
50009    }
50010}
50011
50012impl TryFrom<i32> for BinaryFuseFilterType {
50013    type Error = Error;
50014
50015    fn try_from(i: i32) -> Result<Self, Error> {
50016        let e = match i {
50017            0 => BinaryFuseFilterType::B8Bit,
50018            1 => BinaryFuseFilterType::B16Bit,
50019            2 => BinaryFuseFilterType::B32Bit,
50020            #[allow(unreachable_patterns)]
50021            _ => return Err(Error::Invalid),
50022        };
50023        Ok(e)
50024    }
50025}
50026
50027impl From<BinaryFuseFilterType> for i32 {
50028    #[must_use]
50029    fn from(e: BinaryFuseFilterType) -> Self {
50030        e as Self
50031    }
50032}
50033
50034impl ReadXdr for BinaryFuseFilterType {
50035    #[cfg(feature = "std")]
50036    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
50037        r.with_limited_depth(|r| {
50038            let e = i32::read_xdr(r)?;
50039            let v: Self = e.try_into()?;
50040            Ok(v)
50041        })
50042    }
50043}
50044
50045impl WriteXdr for BinaryFuseFilterType {
50046    #[cfg(feature = "std")]
50047    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
50048        w.with_limited_depth(|w| {
50049            let i: i32 = (*self).into();
50050            i.write_xdr(w)
50051        })
50052    }
50053}
50054
50055/// SerializedBinaryFuseFilter is an XDR Struct defines as:
50056///
50057/// ```text
50058/// struct SerializedBinaryFuseFilter
50059/// {
50060///     BinaryFuseFilterType type;
50061///
50062///     // Seed used to hash input to filter
50063///     ShortHashSeed inputHashSeed;
50064///
50065///     // Seed used for internal filter hash operations
50066///     ShortHashSeed filterSeed;
50067///     uint32 segmentLength;
50068///     uint32 segementLengthMask;
50069///     uint32 segmentCount;
50070///     uint32 segmentCountLength;
50071///     uint32 fingerprintLength; // Length in terms of element count, not bytes
50072///
50073///     // Array of uint8_t, uint16_t, or uint32_t depending on filter type
50074///     opaque fingerprints<>;
50075/// };
50076/// ```
50077///
50078#[cfg_attr(feature = "alloc", derive(Default))]
50079#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
50080#[cfg_eval::cfg_eval]
50081#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
50082#[cfg_attr(
50083    all(feature = "serde", feature = "alloc"),
50084    serde_with::serde_as,
50085    derive(serde::Serialize, serde::Deserialize),
50086    serde(rename_all = "snake_case")
50087)]
50088#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
50089pub struct SerializedBinaryFuseFilter {
50090    pub type_: BinaryFuseFilterType,
50091    pub input_hash_seed: ShortHashSeed,
50092    pub filter_seed: ShortHashSeed,
50093    pub segment_length: u32,
50094    pub segement_length_mask: u32,
50095    pub segment_count: u32,
50096    pub segment_count_length: u32,
50097    pub fingerprint_length: u32,
50098    pub fingerprints: BytesM,
50099}
50100
50101impl ReadXdr for SerializedBinaryFuseFilter {
50102    #[cfg(feature = "std")]
50103    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
50104        r.with_limited_depth(|r| {
50105            Ok(Self {
50106                type_: BinaryFuseFilterType::read_xdr(r)?,
50107                input_hash_seed: ShortHashSeed::read_xdr(r)?,
50108                filter_seed: ShortHashSeed::read_xdr(r)?,
50109                segment_length: u32::read_xdr(r)?,
50110                segement_length_mask: u32::read_xdr(r)?,
50111                segment_count: u32::read_xdr(r)?,
50112                segment_count_length: u32::read_xdr(r)?,
50113                fingerprint_length: u32::read_xdr(r)?,
50114                fingerprints: BytesM::read_xdr(r)?,
50115            })
50116        })
50117    }
50118}
50119
50120impl WriteXdr for SerializedBinaryFuseFilter {
50121    #[cfg(feature = "std")]
50122    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
50123        w.with_limited_depth(|w| {
50124            self.type_.write_xdr(w)?;
50125            self.input_hash_seed.write_xdr(w)?;
50126            self.filter_seed.write_xdr(w)?;
50127            self.segment_length.write_xdr(w)?;
50128            self.segement_length_mask.write_xdr(w)?;
50129            self.segment_count.write_xdr(w)?;
50130            self.segment_count_length.write_xdr(w)?;
50131            self.fingerprint_length.write_xdr(w)?;
50132            self.fingerprints.write_xdr(w)?;
50133            Ok(())
50134        })
50135    }
50136}
50137
50138/// PoolId is an XDR Typedef defines as:
50139///
50140/// ```text
50141/// typedef Hash PoolID;
50142/// ```
50143///
50144#[cfg_eval::cfg_eval]
50145#[cfg_attr(feature = "alloc", derive(Default))]
50146#[derive(Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
50147#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
50148#[cfg_attr(
50149    all(feature = "serde", feature = "alloc"),
50150    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
50151)]
50152#[derive(Debug)]
50153pub struct PoolId(pub Hash);
50154
50155impl From<PoolId> for Hash {
50156    #[must_use]
50157    fn from(x: PoolId) -> Self {
50158        x.0
50159    }
50160}
50161
50162impl From<Hash> for PoolId {
50163    #[must_use]
50164    fn from(x: Hash) -> Self {
50165        PoolId(x)
50166    }
50167}
50168
50169impl AsRef<Hash> for PoolId {
50170    #[must_use]
50171    fn as_ref(&self) -> &Hash {
50172        &self.0
50173    }
50174}
50175
50176impl ReadXdr for PoolId {
50177    #[cfg(feature = "std")]
50178    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
50179        r.with_limited_depth(|r| {
50180            let i = Hash::read_xdr(r)?;
50181            let v = PoolId(i);
50182            Ok(v)
50183        })
50184    }
50185}
50186
50187impl WriteXdr for PoolId {
50188    #[cfg(feature = "std")]
50189    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
50190        w.with_limited_depth(|w| self.0.write_xdr(w))
50191    }
50192}
50193
50194/// ClaimableBalanceIdType is an XDR Enum defines as:
50195///
50196/// ```text
50197/// enum ClaimableBalanceIDType
50198/// {
50199///     CLAIMABLE_BALANCE_ID_TYPE_V0 = 0
50200/// };
50201/// ```
50202///
50203// enum
50204#[cfg_attr(feature = "alloc", derive(Default))]
50205#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
50206#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
50207#[cfg_attr(
50208    all(feature = "serde", feature = "alloc"),
50209    derive(serde::Serialize, serde::Deserialize),
50210    serde(rename_all = "snake_case")
50211)]
50212#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
50213#[repr(i32)]
50214pub enum ClaimableBalanceIdType {
50215    #[cfg_attr(feature = "alloc", default)]
50216    ClaimableBalanceIdTypeV0 = 0,
50217}
50218
50219impl ClaimableBalanceIdType {
50220    pub const VARIANTS: [ClaimableBalanceIdType; 1] =
50221        [ClaimableBalanceIdType::ClaimableBalanceIdTypeV0];
50222    pub const VARIANTS_STR: [&'static str; 1] = ["ClaimableBalanceIdTypeV0"];
50223
50224    #[must_use]
50225    pub const fn name(&self) -> &'static str {
50226        match self {
50227            Self::ClaimableBalanceIdTypeV0 => "ClaimableBalanceIdTypeV0",
50228        }
50229    }
50230
50231    #[must_use]
50232    pub const fn variants() -> [ClaimableBalanceIdType; 1] {
50233        Self::VARIANTS
50234    }
50235}
50236
50237impl Name for ClaimableBalanceIdType {
50238    #[must_use]
50239    fn name(&self) -> &'static str {
50240        Self::name(self)
50241    }
50242}
50243
50244impl Variants<ClaimableBalanceIdType> for ClaimableBalanceIdType {
50245    fn variants() -> slice::Iter<'static, ClaimableBalanceIdType> {
50246        Self::VARIANTS.iter()
50247    }
50248}
50249
50250impl Enum for ClaimableBalanceIdType {}
50251
50252impl fmt::Display for ClaimableBalanceIdType {
50253    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
50254        f.write_str(self.name())
50255    }
50256}
50257
50258impl TryFrom<i32> for ClaimableBalanceIdType {
50259    type Error = Error;
50260
50261    fn try_from(i: i32) -> Result<Self, Error> {
50262        let e = match i {
50263            0 => ClaimableBalanceIdType::ClaimableBalanceIdTypeV0,
50264            #[allow(unreachable_patterns)]
50265            _ => return Err(Error::Invalid),
50266        };
50267        Ok(e)
50268    }
50269}
50270
50271impl From<ClaimableBalanceIdType> for i32 {
50272    #[must_use]
50273    fn from(e: ClaimableBalanceIdType) -> Self {
50274        e as Self
50275    }
50276}
50277
50278impl ReadXdr for ClaimableBalanceIdType {
50279    #[cfg(feature = "std")]
50280    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
50281        r.with_limited_depth(|r| {
50282            let e = i32::read_xdr(r)?;
50283            let v: Self = e.try_into()?;
50284            Ok(v)
50285        })
50286    }
50287}
50288
50289impl WriteXdr for ClaimableBalanceIdType {
50290    #[cfg(feature = "std")]
50291    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
50292        w.with_limited_depth(|w| {
50293            let i: i32 = (*self).into();
50294            i.write_xdr(w)
50295        })
50296    }
50297}
50298
50299/// ClaimableBalanceId is an XDR Union defines as:
50300///
50301/// ```text
50302/// union ClaimableBalanceID switch (ClaimableBalanceIDType type)
50303/// {
50304/// case CLAIMABLE_BALANCE_ID_TYPE_V0:
50305///     Hash v0;
50306/// };
50307/// ```
50308///
50309// union with discriminant ClaimableBalanceIdType
50310#[cfg_eval::cfg_eval]
50311#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
50312#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
50313#[cfg_attr(
50314    all(feature = "serde", feature = "alloc"),
50315    derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
50316)]
50317#[allow(clippy::large_enum_variant)]
50318pub enum ClaimableBalanceId {
50319    ClaimableBalanceIdTypeV0(Hash),
50320}
50321
50322#[cfg(feature = "alloc")]
50323impl Default for ClaimableBalanceId {
50324    fn default() -> Self {
50325        Self::ClaimableBalanceIdTypeV0(Hash::default())
50326    }
50327}
50328
50329impl ClaimableBalanceId {
50330    pub const VARIANTS: [ClaimableBalanceIdType; 1] =
50331        [ClaimableBalanceIdType::ClaimableBalanceIdTypeV0];
50332    pub const VARIANTS_STR: [&'static str; 1] = ["ClaimableBalanceIdTypeV0"];
50333
50334    #[must_use]
50335    pub const fn name(&self) -> &'static str {
50336        match self {
50337            Self::ClaimableBalanceIdTypeV0(_) => "ClaimableBalanceIdTypeV0",
50338        }
50339    }
50340
50341    #[must_use]
50342    pub const fn discriminant(&self) -> ClaimableBalanceIdType {
50343        #[allow(clippy::match_same_arms)]
50344        match self {
50345            Self::ClaimableBalanceIdTypeV0(_) => ClaimableBalanceIdType::ClaimableBalanceIdTypeV0,
50346        }
50347    }
50348
50349    #[must_use]
50350    pub const fn variants() -> [ClaimableBalanceIdType; 1] {
50351        Self::VARIANTS
50352    }
50353}
50354
50355impl Name for ClaimableBalanceId {
50356    #[must_use]
50357    fn name(&self) -> &'static str {
50358        Self::name(self)
50359    }
50360}
50361
50362impl Discriminant<ClaimableBalanceIdType> for ClaimableBalanceId {
50363    #[must_use]
50364    fn discriminant(&self) -> ClaimableBalanceIdType {
50365        Self::discriminant(self)
50366    }
50367}
50368
50369impl Variants<ClaimableBalanceIdType> for ClaimableBalanceId {
50370    fn variants() -> slice::Iter<'static, ClaimableBalanceIdType> {
50371        Self::VARIANTS.iter()
50372    }
50373}
50374
50375impl Union<ClaimableBalanceIdType> for ClaimableBalanceId {}
50376
50377impl ReadXdr for ClaimableBalanceId {
50378    #[cfg(feature = "std")]
50379    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
50380        r.with_limited_depth(|r| {
50381            let dv: ClaimableBalanceIdType = <ClaimableBalanceIdType as ReadXdr>::read_xdr(r)?;
50382            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
50383            let v = match dv {
50384                ClaimableBalanceIdType::ClaimableBalanceIdTypeV0 => {
50385                    Self::ClaimableBalanceIdTypeV0(Hash::read_xdr(r)?)
50386                }
50387                #[allow(unreachable_patterns)]
50388                _ => return Err(Error::Invalid),
50389            };
50390            Ok(v)
50391        })
50392    }
50393}
50394
50395impl WriteXdr for ClaimableBalanceId {
50396    #[cfg(feature = "std")]
50397    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
50398        w.with_limited_depth(|w| {
50399            self.discriminant().write_xdr(w)?;
50400            #[allow(clippy::match_same_arms)]
50401            match self {
50402                Self::ClaimableBalanceIdTypeV0(v) => v.write_xdr(w)?,
50403            };
50404            Ok(())
50405        })
50406    }
50407}
50408
50409#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
50410#[cfg_attr(
50411    all(feature = "serde", feature = "alloc"),
50412    derive(serde::Serialize, serde::Deserialize),
50413    serde(rename_all = "snake_case")
50414)]
50415#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
50416pub enum TypeVariant {
50417    Value,
50418    ScpBallot,
50419    ScpStatementType,
50420    ScpNomination,
50421    ScpStatement,
50422    ScpStatementPledges,
50423    ScpStatementPrepare,
50424    ScpStatementConfirm,
50425    ScpStatementExternalize,
50426    ScpEnvelope,
50427    ScpQuorumSet,
50428    ConfigSettingContractExecutionLanesV0,
50429    ConfigSettingContractComputeV0,
50430    ConfigSettingContractParallelComputeV0,
50431    ConfigSettingContractLedgerCostV0,
50432    ConfigSettingContractLedgerCostExtV0,
50433    ConfigSettingContractHistoricalDataV0,
50434    ConfigSettingContractEventsV0,
50435    ConfigSettingContractBandwidthV0,
50436    ContractCostType,
50437    ContractCostParamEntry,
50438    StateArchivalSettings,
50439    EvictionIterator,
50440    ConfigSettingScpTiming,
50441    ContractCostParams,
50442    ConfigSettingId,
50443    ConfigSettingEntry,
50444    ScEnvMetaKind,
50445    ScEnvMetaEntry,
50446    ScEnvMetaEntryInterfaceVersion,
50447    ScMetaV0,
50448    ScMetaKind,
50449    ScMetaEntry,
50450    ScSpecType,
50451    ScSpecTypeOption,
50452    ScSpecTypeResult,
50453    ScSpecTypeVec,
50454    ScSpecTypeMap,
50455    ScSpecTypeTuple,
50456    ScSpecTypeBytesN,
50457    ScSpecTypeUdt,
50458    ScSpecTypeDef,
50459    ScSpecUdtStructFieldV0,
50460    ScSpecUdtStructV0,
50461    ScSpecUdtUnionCaseVoidV0,
50462    ScSpecUdtUnionCaseTupleV0,
50463    ScSpecUdtUnionCaseV0Kind,
50464    ScSpecUdtUnionCaseV0,
50465    ScSpecUdtUnionV0,
50466    ScSpecUdtEnumCaseV0,
50467    ScSpecUdtEnumV0,
50468    ScSpecUdtErrorEnumCaseV0,
50469    ScSpecUdtErrorEnumV0,
50470    ScSpecFunctionInputV0,
50471    ScSpecFunctionV0,
50472    ScSpecEventParamLocationV0,
50473    ScSpecEventParamV0,
50474    ScSpecEventDataFormat,
50475    ScSpecEventV0,
50476    ScSpecEntryKind,
50477    ScSpecEntry,
50478    ScValType,
50479    ScErrorType,
50480    ScErrorCode,
50481    ScError,
50482    UInt128Parts,
50483    Int128Parts,
50484    UInt256Parts,
50485    Int256Parts,
50486    ContractExecutableType,
50487    ContractExecutable,
50488    ScAddressType,
50489    MuxedEd25519Account,
50490    ScAddress,
50491    ScVec,
50492    ScMap,
50493    ScBytes,
50494    ScString,
50495    ScSymbol,
50496    ScNonceKey,
50497    ScContractInstance,
50498    ScVal,
50499    ScMapEntry,
50500    LedgerCloseMetaBatch,
50501    StoredTransactionSet,
50502    StoredDebugTransactionSet,
50503    PersistedScpStateV0,
50504    PersistedScpStateV1,
50505    PersistedScpState,
50506    Thresholds,
50507    String32,
50508    String64,
50509    SequenceNumber,
50510    DataValue,
50511    AssetCode4,
50512    AssetCode12,
50513    AssetType,
50514    AssetCode,
50515    AlphaNum4,
50516    AlphaNum12,
50517    Asset,
50518    Price,
50519    Liabilities,
50520    ThresholdIndexes,
50521    LedgerEntryType,
50522    Signer,
50523    AccountFlags,
50524    SponsorshipDescriptor,
50525    AccountEntryExtensionV3,
50526    AccountEntryExtensionV2,
50527    AccountEntryExtensionV2Ext,
50528    AccountEntryExtensionV1,
50529    AccountEntryExtensionV1Ext,
50530    AccountEntry,
50531    AccountEntryExt,
50532    TrustLineFlags,
50533    LiquidityPoolType,
50534    TrustLineAsset,
50535    TrustLineEntryExtensionV2,
50536    TrustLineEntryExtensionV2Ext,
50537    TrustLineEntry,
50538    TrustLineEntryExt,
50539    TrustLineEntryV1,
50540    TrustLineEntryV1Ext,
50541    OfferEntryFlags,
50542    OfferEntry,
50543    OfferEntryExt,
50544    DataEntry,
50545    DataEntryExt,
50546    ClaimPredicateType,
50547    ClaimPredicate,
50548    ClaimantType,
50549    Claimant,
50550    ClaimantV0,
50551    ClaimableBalanceFlags,
50552    ClaimableBalanceEntryExtensionV1,
50553    ClaimableBalanceEntryExtensionV1Ext,
50554    ClaimableBalanceEntry,
50555    ClaimableBalanceEntryExt,
50556    LiquidityPoolConstantProductParameters,
50557    LiquidityPoolEntry,
50558    LiquidityPoolEntryBody,
50559    LiquidityPoolEntryConstantProduct,
50560    ContractDataDurability,
50561    ContractDataEntry,
50562    ContractCodeCostInputs,
50563    ContractCodeEntry,
50564    ContractCodeEntryExt,
50565    ContractCodeEntryV1,
50566    TtlEntry,
50567    LedgerEntryExtensionV1,
50568    LedgerEntryExtensionV1Ext,
50569    LedgerEntry,
50570    LedgerEntryData,
50571    LedgerEntryExt,
50572    LedgerKey,
50573    LedgerKeyAccount,
50574    LedgerKeyTrustLine,
50575    LedgerKeyOffer,
50576    LedgerKeyData,
50577    LedgerKeyClaimableBalance,
50578    LedgerKeyLiquidityPool,
50579    LedgerKeyContractData,
50580    LedgerKeyContractCode,
50581    LedgerKeyConfigSetting,
50582    LedgerKeyTtl,
50583    EnvelopeType,
50584    BucketListType,
50585    BucketEntryType,
50586    HotArchiveBucketEntryType,
50587    BucketMetadata,
50588    BucketMetadataExt,
50589    BucketEntry,
50590    HotArchiveBucketEntry,
50591    UpgradeType,
50592    StellarValueType,
50593    LedgerCloseValueSignature,
50594    StellarValue,
50595    StellarValueExt,
50596    LedgerHeaderFlags,
50597    LedgerHeaderExtensionV1,
50598    LedgerHeaderExtensionV1Ext,
50599    LedgerHeader,
50600    LedgerHeaderExt,
50601    LedgerUpgradeType,
50602    ConfigUpgradeSetKey,
50603    LedgerUpgrade,
50604    ConfigUpgradeSet,
50605    TxSetComponentType,
50606    DependentTxCluster,
50607    ParallelTxExecutionStage,
50608    ParallelTxsComponent,
50609    TxSetComponent,
50610    TxSetComponentTxsMaybeDiscountedFee,
50611    TransactionPhase,
50612    TransactionSet,
50613    TransactionSetV1,
50614    GeneralizedTransactionSet,
50615    TransactionResultPair,
50616    TransactionResultSet,
50617    TransactionHistoryEntry,
50618    TransactionHistoryEntryExt,
50619    TransactionHistoryResultEntry,
50620    TransactionHistoryResultEntryExt,
50621    LedgerHeaderHistoryEntry,
50622    LedgerHeaderHistoryEntryExt,
50623    LedgerScpMessages,
50624    ScpHistoryEntryV0,
50625    ScpHistoryEntry,
50626    LedgerEntryChangeType,
50627    LedgerEntryChange,
50628    LedgerEntryChanges,
50629    OperationMeta,
50630    TransactionMetaV1,
50631    TransactionMetaV2,
50632    ContractEventType,
50633    ContractEvent,
50634    ContractEventBody,
50635    ContractEventV0,
50636    DiagnosticEvent,
50637    SorobanTransactionMetaExtV1,
50638    SorobanTransactionMetaExt,
50639    SorobanTransactionMeta,
50640    TransactionMetaV3,
50641    OperationMetaV2,
50642    SorobanTransactionMetaV2,
50643    TransactionEventStage,
50644    TransactionEvent,
50645    TransactionMetaV4,
50646    InvokeHostFunctionSuccessPreImage,
50647    TransactionMeta,
50648    TransactionResultMeta,
50649    TransactionResultMetaV1,
50650    UpgradeEntryMeta,
50651    LedgerCloseMetaV0,
50652    LedgerCloseMetaExtV1,
50653    LedgerCloseMetaExt,
50654    LedgerCloseMetaV1,
50655    LedgerCloseMetaV2,
50656    LedgerCloseMeta,
50657    ErrorCode,
50658    SError,
50659    SendMore,
50660    SendMoreExtended,
50661    AuthCert,
50662    Hello,
50663    Auth,
50664    IpAddrType,
50665    PeerAddress,
50666    PeerAddressIp,
50667    MessageType,
50668    DontHave,
50669    SurveyMessageCommandType,
50670    SurveyMessageResponseType,
50671    TimeSlicedSurveyStartCollectingMessage,
50672    SignedTimeSlicedSurveyStartCollectingMessage,
50673    TimeSlicedSurveyStopCollectingMessage,
50674    SignedTimeSlicedSurveyStopCollectingMessage,
50675    SurveyRequestMessage,
50676    TimeSlicedSurveyRequestMessage,
50677    SignedTimeSlicedSurveyRequestMessage,
50678    EncryptedBody,
50679    SurveyResponseMessage,
50680    TimeSlicedSurveyResponseMessage,
50681    SignedTimeSlicedSurveyResponseMessage,
50682    PeerStats,
50683    TimeSlicedNodeData,
50684    TimeSlicedPeerData,
50685    TimeSlicedPeerDataList,
50686    TopologyResponseBodyV2,
50687    SurveyResponseBody,
50688    TxAdvertVector,
50689    FloodAdvert,
50690    TxDemandVector,
50691    FloodDemand,
50692    StellarMessage,
50693    AuthenticatedMessage,
50694    AuthenticatedMessageV0,
50695    LiquidityPoolParameters,
50696    MuxedAccount,
50697    MuxedAccountMed25519,
50698    DecoratedSignature,
50699    OperationType,
50700    CreateAccountOp,
50701    PaymentOp,
50702    PathPaymentStrictReceiveOp,
50703    PathPaymentStrictSendOp,
50704    ManageSellOfferOp,
50705    ManageBuyOfferOp,
50706    CreatePassiveSellOfferOp,
50707    SetOptionsOp,
50708    ChangeTrustAsset,
50709    ChangeTrustOp,
50710    AllowTrustOp,
50711    ManageDataOp,
50712    BumpSequenceOp,
50713    CreateClaimableBalanceOp,
50714    ClaimClaimableBalanceOp,
50715    BeginSponsoringFutureReservesOp,
50716    RevokeSponsorshipType,
50717    RevokeSponsorshipOp,
50718    RevokeSponsorshipOpSigner,
50719    ClawbackOp,
50720    ClawbackClaimableBalanceOp,
50721    SetTrustLineFlagsOp,
50722    LiquidityPoolDepositOp,
50723    LiquidityPoolWithdrawOp,
50724    HostFunctionType,
50725    ContractIdPreimageType,
50726    ContractIdPreimage,
50727    ContractIdPreimageFromAddress,
50728    CreateContractArgs,
50729    CreateContractArgsV2,
50730    InvokeContractArgs,
50731    HostFunction,
50732    SorobanAuthorizedFunctionType,
50733    SorobanAuthorizedFunction,
50734    SorobanAuthorizedInvocation,
50735    SorobanAddressCredentials,
50736    SorobanCredentialsType,
50737    SorobanCredentials,
50738    SorobanAuthorizationEntry,
50739    SorobanAuthorizationEntries,
50740    InvokeHostFunctionOp,
50741    ExtendFootprintTtlOp,
50742    RestoreFootprintOp,
50743    Operation,
50744    OperationBody,
50745    HashIdPreimage,
50746    HashIdPreimageOperationId,
50747    HashIdPreimageRevokeId,
50748    HashIdPreimageContractId,
50749    HashIdPreimageSorobanAuthorization,
50750    MemoType,
50751    Memo,
50752    TimeBounds,
50753    LedgerBounds,
50754    PreconditionsV2,
50755    PreconditionType,
50756    Preconditions,
50757    LedgerFootprint,
50758    SorobanResources,
50759    SorobanResourcesExtV0,
50760    SorobanTransactionData,
50761    SorobanTransactionDataExt,
50762    TransactionV0,
50763    TransactionV0Ext,
50764    TransactionV0Envelope,
50765    Transaction,
50766    TransactionExt,
50767    TransactionV1Envelope,
50768    FeeBumpTransaction,
50769    FeeBumpTransactionInnerTx,
50770    FeeBumpTransactionExt,
50771    FeeBumpTransactionEnvelope,
50772    TransactionEnvelope,
50773    TransactionSignaturePayload,
50774    TransactionSignaturePayloadTaggedTransaction,
50775    ClaimAtomType,
50776    ClaimOfferAtomV0,
50777    ClaimOfferAtom,
50778    ClaimLiquidityAtom,
50779    ClaimAtom,
50780    CreateAccountResultCode,
50781    CreateAccountResult,
50782    PaymentResultCode,
50783    PaymentResult,
50784    PathPaymentStrictReceiveResultCode,
50785    SimplePaymentResult,
50786    PathPaymentStrictReceiveResult,
50787    PathPaymentStrictReceiveResultSuccess,
50788    PathPaymentStrictSendResultCode,
50789    PathPaymentStrictSendResult,
50790    PathPaymentStrictSendResultSuccess,
50791    ManageSellOfferResultCode,
50792    ManageOfferEffect,
50793    ManageOfferSuccessResult,
50794    ManageOfferSuccessResultOffer,
50795    ManageSellOfferResult,
50796    ManageBuyOfferResultCode,
50797    ManageBuyOfferResult,
50798    SetOptionsResultCode,
50799    SetOptionsResult,
50800    ChangeTrustResultCode,
50801    ChangeTrustResult,
50802    AllowTrustResultCode,
50803    AllowTrustResult,
50804    AccountMergeResultCode,
50805    AccountMergeResult,
50806    InflationResultCode,
50807    InflationPayout,
50808    InflationResult,
50809    ManageDataResultCode,
50810    ManageDataResult,
50811    BumpSequenceResultCode,
50812    BumpSequenceResult,
50813    CreateClaimableBalanceResultCode,
50814    CreateClaimableBalanceResult,
50815    ClaimClaimableBalanceResultCode,
50816    ClaimClaimableBalanceResult,
50817    BeginSponsoringFutureReservesResultCode,
50818    BeginSponsoringFutureReservesResult,
50819    EndSponsoringFutureReservesResultCode,
50820    EndSponsoringFutureReservesResult,
50821    RevokeSponsorshipResultCode,
50822    RevokeSponsorshipResult,
50823    ClawbackResultCode,
50824    ClawbackResult,
50825    ClawbackClaimableBalanceResultCode,
50826    ClawbackClaimableBalanceResult,
50827    SetTrustLineFlagsResultCode,
50828    SetTrustLineFlagsResult,
50829    LiquidityPoolDepositResultCode,
50830    LiquidityPoolDepositResult,
50831    LiquidityPoolWithdrawResultCode,
50832    LiquidityPoolWithdrawResult,
50833    InvokeHostFunctionResultCode,
50834    InvokeHostFunctionResult,
50835    ExtendFootprintTtlResultCode,
50836    ExtendFootprintTtlResult,
50837    RestoreFootprintResultCode,
50838    RestoreFootprintResult,
50839    OperationResultCode,
50840    OperationResult,
50841    OperationResultTr,
50842    TransactionResultCode,
50843    InnerTransactionResult,
50844    InnerTransactionResultResult,
50845    InnerTransactionResultExt,
50846    InnerTransactionResultPair,
50847    TransactionResult,
50848    TransactionResultResult,
50849    TransactionResultExt,
50850    Hash,
50851    Uint256,
50852    Uint32,
50853    Int32,
50854    Uint64,
50855    Int64,
50856    TimePoint,
50857    Duration,
50858    ExtensionPoint,
50859    CryptoKeyType,
50860    PublicKeyType,
50861    SignerKeyType,
50862    PublicKey,
50863    SignerKey,
50864    SignerKeyEd25519SignedPayload,
50865    Signature,
50866    SignatureHint,
50867    NodeId,
50868    AccountId,
50869    ContractId,
50870    Curve25519Secret,
50871    Curve25519Public,
50872    HmacSha256Key,
50873    HmacSha256Mac,
50874    ShortHashSeed,
50875    BinaryFuseFilterType,
50876    SerializedBinaryFuseFilter,
50877    PoolId,
50878    ClaimableBalanceIdType,
50879    ClaimableBalanceId,
50880}
50881
50882impl TypeVariant {
50883    pub const VARIANTS: [TypeVariant; 463] = [
50884        TypeVariant::Value,
50885        TypeVariant::ScpBallot,
50886        TypeVariant::ScpStatementType,
50887        TypeVariant::ScpNomination,
50888        TypeVariant::ScpStatement,
50889        TypeVariant::ScpStatementPledges,
50890        TypeVariant::ScpStatementPrepare,
50891        TypeVariant::ScpStatementConfirm,
50892        TypeVariant::ScpStatementExternalize,
50893        TypeVariant::ScpEnvelope,
50894        TypeVariant::ScpQuorumSet,
50895        TypeVariant::ConfigSettingContractExecutionLanesV0,
50896        TypeVariant::ConfigSettingContractComputeV0,
50897        TypeVariant::ConfigSettingContractParallelComputeV0,
50898        TypeVariant::ConfigSettingContractLedgerCostV0,
50899        TypeVariant::ConfigSettingContractLedgerCostExtV0,
50900        TypeVariant::ConfigSettingContractHistoricalDataV0,
50901        TypeVariant::ConfigSettingContractEventsV0,
50902        TypeVariant::ConfigSettingContractBandwidthV0,
50903        TypeVariant::ContractCostType,
50904        TypeVariant::ContractCostParamEntry,
50905        TypeVariant::StateArchivalSettings,
50906        TypeVariant::EvictionIterator,
50907        TypeVariant::ConfigSettingScpTiming,
50908        TypeVariant::ContractCostParams,
50909        TypeVariant::ConfigSettingId,
50910        TypeVariant::ConfigSettingEntry,
50911        TypeVariant::ScEnvMetaKind,
50912        TypeVariant::ScEnvMetaEntry,
50913        TypeVariant::ScEnvMetaEntryInterfaceVersion,
50914        TypeVariant::ScMetaV0,
50915        TypeVariant::ScMetaKind,
50916        TypeVariant::ScMetaEntry,
50917        TypeVariant::ScSpecType,
50918        TypeVariant::ScSpecTypeOption,
50919        TypeVariant::ScSpecTypeResult,
50920        TypeVariant::ScSpecTypeVec,
50921        TypeVariant::ScSpecTypeMap,
50922        TypeVariant::ScSpecTypeTuple,
50923        TypeVariant::ScSpecTypeBytesN,
50924        TypeVariant::ScSpecTypeUdt,
50925        TypeVariant::ScSpecTypeDef,
50926        TypeVariant::ScSpecUdtStructFieldV0,
50927        TypeVariant::ScSpecUdtStructV0,
50928        TypeVariant::ScSpecUdtUnionCaseVoidV0,
50929        TypeVariant::ScSpecUdtUnionCaseTupleV0,
50930        TypeVariant::ScSpecUdtUnionCaseV0Kind,
50931        TypeVariant::ScSpecUdtUnionCaseV0,
50932        TypeVariant::ScSpecUdtUnionV0,
50933        TypeVariant::ScSpecUdtEnumCaseV0,
50934        TypeVariant::ScSpecUdtEnumV0,
50935        TypeVariant::ScSpecUdtErrorEnumCaseV0,
50936        TypeVariant::ScSpecUdtErrorEnumV0,
50937        TypeVariant::ScSpecFunctionInputV0,
50938        TypeVariant::ScSpecFunctionV0,
50939        TypeVariant::ScSpecEventParamLocationV0,
50940        TypeVariant::ScSpecEventParamV0,
50941        TypeVariant::ScSpecEventDataFormat,
50942        TypeVariant::ScSpecEventV0,
50943        TypeVariant::ScSpecEntryKind,
50944        TypeVariant::ScSpecEntry,
50945        TypeVariant::ScValType,
50946        TypeVariant::ScErrorType,
50947        TypeVariant::ScErrorCode,
50948        TypeVariant::ScError,
50949        TypeVariant::UInt128Parts,
50950        TypeVariant::Int128Parts,
50951        TypeVariant::UInt256Parts,
50952        TypeVariant::Int256Parts,
50953        TypeVariant::ContractExecutableType,
50954        TypeVariant::ContractExecutable,
50955        TypeVariant::ScAddressType,
50956        TypeVariant::MuxedEd25519Account,
50957        TypeVariant::ScAddress,
50958        TypeVariant::ScVec,
50959        TypeVariant::ScMap,
50960        TypeVariant::ScBytes,
50961        TypeVariant::ScString,
50962        TypeVariant::ScSymbol,
50963        TypeVariant::ScNonceKey,
50964        TypeVariant::ScContractInstance,
50965        TypeVariant::ScVal,
50966        TypeVariant::ScMapEntry,
50967        TypeVariant::LedgerCloseMetaBatch,
50968        TypeVariant::StoredTransactionSet,
50969        TypeVariant::StoredDebugTransactionSet,
50970        TypeVariant::PersistedScpStateV0,
50971        TypeVariant::PersistedScpStateV1,
50972        TypeVariant::PersistedScpState,
50973        TypeVariant::Thresholds,
50974        TypeVariant::String32,
50975        TypeVariant::String64,
50976        TypeVariant::SequenceNumber,
50977        TypeVariant::DataValue,
50978        TypeVariant::AssetCode4,
50979        TypeVariant::AssetCode12,
50980        TypeVariant::AssetType,
50981        TypeVariant::AssetCode,
50982        TypeVariant::AlphaNum4,
50983        TypeVariant::AlphaNum12,
50984        TypeVariant::Asset,
50985        TypeVariant::Price,
50986        TypeVariant::Liabilities,
50987        TypeVariant::ThresholdIndexes,
50988        TypeVariant::LedgerEntryType,
50989        TypeVariant::Signer,
50990        TypeVariant::AccountFlags,
50991        TypeVariant::SponsorshipDescriptor,
50992        TypeVariant::AccountEntryExtensionV3,
50993        TypeVariant::AccountEntryExtensionV2,
50994        TypeVariant::AccountEntryExtensionV2Ext,
50995        TypeVariant::AccountEntryExtensionV1,
50996        TypeVariant::AccountEntryExtensionV1Ext,
50997        TypeVariant::AccountEntry,
50998        TypeVariant::AccountEntryExt,
50999        TypeVariant::TrustLineFlags,
51000        TypeVariant::LiquidityPoolType,
51001        TypeVariant::TrustLineAsset,
51002        TypeVariant::TrustLineEntryExtensionV2,
51003        TypeVariant::TrustLineEntryExtensionV2Ext,
51004        TypeVariant::TrustLineEntry,
51005        TypeVariant::TrustLineEntryExt,
51006        TypeVariant::TrustLineEntryV1,
51007        TypeVariant::TrustLineEntryV1Ext,
51008        TypeVariant::OfferEntryFlags,
51009        TypeVariant::OfferEntry,
51010        TypeVariant::OfferEntryExt,
51011        TypeVariant::DataEntry,
51012        TypeVariant::DataEntryExt,
51013        TypeVariant::ClaimPredicateType,
51014        TypeVariant::ClaimPredicate,
51015        TypeVariant::ClaimantType,
51016        TypeVariant::Claimant,
51017        TypeVariant::ClaimantV0,
51018        TypeVariant::ClaimableBalanceFlags,
51019        TypeVariant::ClaimableBalanceEntryExtensionV1,
51020        TypeVariant::ClaimableBalanceEntryExtensionV1Ext,
51021        TypeVariant::ClaimableBalanceEntry,
51022        TypeVariant::ClaimableBalanceEntryExt,
51023        TypeVariant::LiquidityPoolConstantProductParameters,
51024        TypeVariant::LiquidityPoolEntry,
51025        TypeVariant::LiquidityPoolEntryBody,
51026        TypeVariant::LiquidityPoolEntryConstantProduct,
51027        TypeVariant::ContractDataDurability,
51028        TypeVariant::ContractDataEntry,
51029        TypeVariant::ContractCodeCostInputs,
51030        TypeVariant::ContractCodeEntry,
51031        TypeVariant::ContractCodeEntryExt,
51032        TypeVariant::ContractCodeEntryV1,
51033        TypeVariant::TtlEntry,
51034        TypeVariant::LedgerEntryExtensionV1,
51035        TypeVariant::LedgerEntryExtensionV1Ext,
51036        TypeVariant::LedgerEntry,
51037        TypeVariant::LedgerEntryData,
51038        TypeVariant::LedgerEntryExt,
51039        TypeVariant::LedgerKey,
51040        TypeVariant::LedgerKeyAccount,
51041        TypeVariant::LedgerKeyTrustLine,
51042        TypeVariant::LedgerKeyOffer,
51043        TypeVariant::LedgerKeyData,
51044        TypeVariant::LedgerKeyClaimableBalance,
51045        TypeVariant::LedgerKeyLiquidityPool,
51046        TypeVariant::LedgerKeyContractData,
51047        TypeVariant::LedgerKeyContractCode,
51048        TypeVariant::LedgerKeyConfigSetting,
51049        TypeVariant::LedgerKeyTtl,
51050        TypeVariant::EnvelopeType,
51051        TypeVariant::BucketListType,
51052        TypeVariant::BucketEntryType,
51053        TypeVariant::HotArchiveBucketEntryType,
51054        TypeVariant::BucketMetadata,
51055        TypeVariant::BucketMetadataExt,
51056        TypeVariant::BucketEntry,
51057        TypeVariant::HotArchiveBucketEntry,
51058        TypeVariant::UpgradeType,
51059        TypeVariant::StellarValueType,
51060        TypeVariant::LedgerCloseValueSignature,
51061        TypeVariant::StellarValue,
51062        TypeVariant::StellarValueExt,
51063        TypeVariant::LedgerHeaderFlags,
51064        TypeVariant::LedgerHeaderExtensionV1,
51065        TypeVariant::LedgerHeaderExtensionV1Ext,
51066        TypeVariant::LedgerHeader,
51067        TypeVariant::LedgerHeaderExt,
51068        TypeVariant::LedgerUpgradeType,
51069        TypeVariant::ConfigUpgradeSetKey,
51070        TypeVariant::LedgerUpgrade,
51071        TypeVariant::ConfigUpgradeSet,
51072        TypeVariant::TxSetComponentType,
51073        TypeVariant::DependentTxCluster,
51074        TypeVariant::ParallelTxExecutionStage,
51075        TypeVariant::ParallelTxsComponent,
51076        TypeVariant::TxSetComponent,
51077        TypeVariant::TxSetComponentTxsMaybeDiscountedFee,
51078        TypeVariant::TransactionPhase,
51079        TypeVariant::TransactionSet,
51080        TypeVariant::TransactionSetV1,
51081        TypeVariant::GeneralizedTransactionSet,
51082        TypeVariant::TransactionResultPair,
51083        TypeVariant::TransactionResultSet,
51084        TypeVariant::TransactionHistoryEntry,
51085        TypeVariant::TransactionHistoryEntryExt,
51086        TypeVariant::TransactionHistoryResultEntry,
51087        TypeVariant::TransactionHistoryResultEntryExt,
51088        TypeVariant::LedgerHeaderHistoryEntry,
51089        TypeVariant::LedgerHeaderHistoryEntryExt,
51090        TypeVariant::LedgerScpMessages,
51091        TypeVariant::ScpHistoryEntryV0,
51092        TypeVariant::ScpHistoryEntry,
51093        TypeVariant::LedgerEntryChangeType,
51094        TypeVariant::LedgerEntryChange,
51095        TypeVariant::LedgerEntryChanges,
51096        TypeVariant::OperationMeta,
51097        TypeVariant::TransactionMetaV1,
51098        TypeVariant::TransactionMetaV2,
51099        TypeVariant::ContractEventType,
51100        TypeVariant::ContractEvent,
51101        TypeVariant::ContractEventBody,
51102        TypeVariant::ContractEventV0,
51103        TypeVariant::DiagnosticEvent,
51104        TypeVariant::SorobanTransactionMetaExtV1,
51105        TypeVariant::SorobanTransactionMetaExt,
51106        TypeVariant::SorobanTransactionMeta,
51107        TypeVariant::TransactionMetaV3,
51108        TypeVariant::OperationMetaV2,
51109        TypeVariant::SorobanTransactionMetaV2,
51110        TypeVariant::TransactionEventStage,
51111        TypeVariant::TransactionEvent,
51112        TypeVariant::TransactionMetaV4,
51113        TypeVariant::InvokeHostFunctionSuccessPreImage,
51114        TypeVariant::TransactionMeta,
51115        TypeVariant::TransactionResultMeta,
51116        TypeVariant::TransactionResultMetaV1,
51117        TypeVariant::UpgradeEntryMeta,
51118        TypeVariant::LedgerCloseMetaV0,
51119        TypeVariant::LedgerCloseMetaExtV1,
51120        TypeVariant::LedgerCloseMetaExt,
51121        TypeVariant::LedgerCloseMetaV1,
51122        TypeVariant::LedgerCloseMetaV2,
51123        TypeVariant::LedgerCloseMeta,
51124        TypeVariant::ErrorCode,
51125        TypeVariant::SError,
51126        TypeVariant::SendMore,
51127        TypeVariant::SendMoreExtended,
51128        TypeVariant::AuthCert,
51129        TypeVariant::Hello,
51130        TypeVariant::Auth,
51131        TypeVariant::IpAddrType,
51132        TypeVariant::PeerAddress,
51133        TypeVariant::PeerAddressIp,
51134        TypeVariant::MessageType,
51135        TypeVariant::DontHave,
51136        TypeVariant::SurveyMessageCommandType,
51137        TypeVariant::SurveyMessageResponseType,
51138        TypeVariant::TimeSlicedSurveyStartCollectingMessage,
51139        TypeVariant::SignedTimeSlicedSurveyStartCollectingMessage,
51140        TypeVariant::TimeSlicedSurveyStopCollectingMessage,
51141        TypeVariant::SignedTimeSlicedSurveyStopCollectingMessage,
51142        TypeVariant::SurveyRequestMessage,
51143        TypeVariant::TimeSlicedSurveyRequestMessage,
51144        TypeVariant::SignedTimeSlicedSurveyRequestMessage,
51145        TypeVariant::EncryptedBody,
51146        TypeVariant::SurveyResponseMessage,
51147        TypeVariant::TimeSlicedSurveyResponseMessage,
51148        TypeVariant::SignedTimeSlicedSurveyResponseMessage,
51149        TypeVariant::PeerStats,
51150        TypeVariant::TimeSlicedNodeData,
51151        TypeVariant::TimeSlicedPeerData,
51152        TypeVariant::TimeSlicedPeerDataList,
51153        TypeVariant::TopologyResponseBodyV2,
51154        TypeVariant::SurveyResponseBody,
51155        TypeVariant::TxAdvertVector,
51156        TypeVariant::FloodAdvert,
51157        TypeVariant::TxDemandVector,
51158        TypeVariant::FloodDemand,
51159        TypeVariant::StellarMessage,
51160        TypeVariant::AuthenticatedMessage,
51161        TypeVariant::AuthenticatedMessageV0,
51162        TypeVariant::LiquidityPoolParameters,
51163        TypeVariant::MuxedAccount,
51164        TypeVariant::MuxedAccountMed25519,
51165        TypeVariant::DecoratedSignature,
51166        TypeVariant::OperationType,
51167        TypeVariant::CreateAccountOp,
51168        TypeVariant::PaymentOp,
51169        TypeVariant::PathPaymentStrictReceiveOp,
51170        TypeVariant::PathPaymentStrictSendOp,
51171        TypeVariant::ManageSellOfferOp,
51172        TypeVariant::ManageBuyOfferOp,
51173        TypeVariant::CreatePassiveSellOfferOp,
51174        TypeVariant::SetOptionsOp,
51175        TypeVariant::ChangeTrustAsset,
51176        TypeVariant::ChangeTrustOp,
51177        TypeVariant::AllowTrustOp,
51178        TypeVariant::ManageDataOp,
51179        TypeVariant::BumpSequenceOp,
51180        TypeVariant::CreateClaimableBalanceOp,
51181        TypeVariant::ClaimClaimableBalanceOp,
51182        TypeVariant::BeginSponsoringFutureReservesOp,
51183        TypeVariant::RevokeSponsorshipType,
51184        TypeVariant::RevokeSponsorshipOp,
51185        TypeVariant::RevokeSponsorshipOpSigner,
51186        TypeVariant::ClawbackOp,
51187        TypeVariant::ClawbackClaimableBalanceOp,
51188        TypeVariant::SetTrustLineFlagsOp,
51189        TypeVariant::LiquidityPoolDepositOp,
51190        TypeVariant::LiquidityPoolWithdrawOp,
51191        TypeVariant::HostFunctionType,
51192        TypeVariant::ContractIdPreimageType,
51193        TypeVariant::ContractIdPreimage,
51194        TypeVariant::ContractIdPreimageFromAddress,
51195        TypeVariant::CreateContractArgs,
51196        TypeVariant::CreateContractArgsV2,
51197        TypeVariant::InvokeContractArgs,
51198        TypeVariant::HostFunction,
51199        TypeVariant::SorobanAuthorizedFunctionType,
51200        TypeVariant::SorobanAuthorizedFunction,
51201        TypeVariant::SorobanAuthorizedInvocation,
51202        TypeVariant::SorobanAddressCredentials,
51203        TypeVariant::SorobanCredentialsType,
51204        TypeVariant::SorobanCredentials,
51205        TypeVariant::SorobanAuthorizationEntry,
51206        TypeVariant::SorobanAuthorizationEntries,
51207        TypeVariant::InvokeHostFunctionOp,
51208        TypeVariant::ExtendFootprintTtlOp,
51209        TypeVariant::RestoreFootprintOp,
51210        TypeVariant::Operation,
51211        TypeVariant::OperationBody,
51212        TypeVariant::HashIdPreimage,
51213        TypeVariant::HashIdPreimageOperationId,
51214        TypeVariant::HashIdPreimageRevokeId,
51215        TypeVariant::HashIdPreimageContractId,
51216        TypeVariant::HashIdPreimageSorobanAuthorization,
51217        TypeVariant::MemoType,
51218        TypeVariant::Memo,
51219        TypeVariant::TimeBounds,
51220        TypeVariant::LedgerBounds,
51221        TypeVariant::PreconditionsV2,
51222        TypeVariant::PreconditionType,
51223        TypeVariant::Preconditions,
51224        TypeVariant::LedgerFootprint,
51225        TypeVariant::SorobanResources,
51226        TypeVariant::SorobanResourcesExtV0,
51227        TypeVariant::SorobanTransactionData,
51228        TypeVariant::SorobanTransactionDataExt,
51229        TypeVariant::TransactionV0,
51230        TypeVariant::TransactionV0Ext,
51231        TypeVariant::TransactionV0Envelope,
51232        TypeVariant::Transaction,
51233        TypeVariant::TransactionExt,
51234        TypeVariant::TransactionV1Envelope,
51235        TypeVariant::FeeBumpTransaction,
51236        TypeVariant::FeeBumpTransactionInnerTx,
51237        TypeVariant::FeeBumpTransactionExt,
51238        TypeVariant::FeeBumpTransactionEnvelope,
51239        TypeVariant::TransactionEnvelope,
51240        TypeVariant::TransactionSignaturePayload,
51241        TypeVariant::TransactionSignaturePayloadTaggedTransaction,
51242        TypeVariant::ClaimAtomType,
51243        TypeVariant::ClaimOfferAtomV0,
51244        TypeVariant::ClaimOfferAtom,
51245        TypeVariant::ClaimLiquidityAtom,
51246        TypeVariant::ClaimAtom,
51247        TypeVariant::CreateAccountResultCode,
51248        TypeVariant::CreateAccountResult,
51249        TypeVariant::PaymentResultCode,
51250        TypeVariant::PaymentResult,
51251        TypeVariant::PathPaymentStrictReceiveResultCode,
51252        TypeVariant::SimplePaymentResult,
51253        TypeVariant::PathPaymentStrictReceiveResult,
51254        TypeVariant::PathPaymentStrictReceiveResultSuccess,
51255        TypeVariant::PathPaymentStrictSendResultCode,
51256        TypeVariant::PathPaymentStrictSendResult,
51257        TypeVariant::PathPaymentStrictSendResultSuccess,
51258        TypeVariant::ManageSellOfferResultCode,
51259        TypeVariant::ManageOfferEffect,
51260        TypeVariant::ManageOfferSuccessResult,
51261        TypeVariant::ManageOfferSuccessResultOffer,
51262        TypeVariant::ManageSellOfferResult,
51263        TypeVariant::ManageBuyOfferResultCode,
51264        TypeVariant::ManageBuyOfferResult,
51265        TypeVariant::SetOptionsResultCode,
51266        TypeVariant::SetOptionsResult,
51267        TypeVariant::ChangeTrustResultCode,
51268        TypeVariant::ChangeTrustResult,
51269        TypeVariant::AllowTrustResultCode,
51270        TypeVariant::AllowTrustResult,
51271        TypeVariant::AccountMergeResultCode,
51272        TypeVariant::AccountMergeResult,
51273        TypeVariant::InflationResultCode,
51274        TypeVariant::InflationPayout,
51275        TypeVariant::InflationResult,
51276        TypeVariant::ManageDataResultCode,
51277        TypeVariant::ManageDataResult,
51278        TypeVariant::BumpSequenceResultCode,
51279        TypeVariant::BumpSequenceResult,
51280        TypeVariant::CreateClaimableBalanceResultCode,
51281        TypeVariant::CreateClaimableBalanceResult,
51282        TypeVariant::ClaimClaimableBalanceResultCode,
51283        TypeVariant::ClaimClaimableBalanceResult,
51284        TypeVariant::BeginSponsoringFutureReservesResultCode,
51285        TypeVariant::BeginSponsoringFutureReservesResult,
51286        TypeVariant::EndSponsoringFutureReservesResultCode,
51287        TypeVariant::EndSponsoringFutureReservesResult,
51288        TypeVariant::RevokeSponsorshipResultCode,
51289        TypeVariant::RevokeSponsorshipResult,
51290        TypeVariant::ClawbackResultCode,
51291        TypeVariant::ClawbackResult,
51292        TypeVariant::ClawbackClaimableBalanceResultCode,
51293        TypeVariant::ClawbackClaimableBalanceResult,
51294        TypeVariant::SetTrustLineFlagsResultCode,
51295        TypeVariant::SetTrustLineFlagsResult,
51296        TypeVariant::LiquidityPoolDepositResultCode,
51297        TypeVariant::LiquidityPoolDepositResult,
51298        TypeVariant::LiquidityPoolWithdrawResultCode,
51299        TypeVariant::LiquidityPoolWithdrawResult,
51300        TypeVariant::InvokeHostFunctionResultCode,
51301        TypeVariant::InvokeHostFunctionResult,
51302        TypeVariant::ExtendFootprintTtlResultCode,
51303        TypeVariant::ExtendFootprintTtlResult,
51304        TypeVariant::RestoreFootprintResultCode,
51305        TypeVariant::RestoreFootprintResult,
51306        TypeVariant::OperationResultCode,
51307        TypeVariant::OperationResult,
51308        TypeVariant::OperationResultTr,
51309        TypeVariant::TransactionResultCode,
51310        TypeVariant::InnerTransactionResult,
51311        TypeVariant::InnerTransactionResultResult,
51312        TypeVariant::InnerTransactionResultExt,
51313        TypeVariant::InnerTransactionResultPair,
51314        TypeVariant::TransactionResult,
51315        TypeVariant::TransactionResultResult,
51316        TypeVariant::TransactionResultExt,
51317        TypeVariant::Hash,
51318        TypeVariant::Uint256,
51319        TypeVariant::Uint32,
51320        TypeVariant::Int32,
51321        TypeVariant::Uint64,
51322        TypeVariant::Int64,
51323        TypeVariant::TimePoint,
51324        TypeVariant::Duration,
51325        TypeVariant::ExtensionPoint,
51326        TypeVariant::CryptoKeyType,
51327        TypeVariant::PublicKeyType,
51328        TypeVariant::SignerKeyType,
51329        TypeVariant::PublicKey,
51330        TypeVariant::SignerKey,
51331        TypeVariant::SignerKeyEd25519SignedPayload,
51332        TypeVariant::Signature,
51333        TypeVariant::SignatureHint,
51334        TypeVariant::NodeId,
51335        TypeVariant::AccountId,
51336        TypeVariant::ContractId,
51337        TypeVariant::Curve25519Secret,
51338        TypeVariant::Curve25519Public,
51339        TypeVariant::HmacSha256Key,
51340        TypeVariant::HmacSha256Mac,
51341        TypeVariant::ShortHashSeed,
51342        TypeVariant::BinaryFuseFilterType,
51343        TypeVariant::SerializedBinaryFuseFilter,
51344        TypeVariant::PoolId,
51345        TypeVariant::ClaimableBalanceIdType,
51346        TypeVariant::ClaimableBalanceId,
51347    ];
51348    pub const VARIANTS_STR: [&'static str; 463] = [
51349        "Value",
51350        "ScpBallot",
51351        "ScpStatementType",
51352        "ScpNomination",
51353        "ScpStatement",
51354        "ScpStatementPledges",
51355        "ScpStatementPrepare",
51356        "ScpStatementConfirm",
51357        "ScpStatementExternalize",
51358        "ScpEnvelope",
51359        "ScpQuorumSet",
51360        "ConfigSettingContractExecutionLanesV0",
51361        "ConfigSettingContractComputeV0",
51362        "ConfigSettingContractParallelComputeV0",
51363        "ConfigSettingContractLedgerCostV0",
51364        "ConfigSettingContractLedgerCostExtV0",
51365        "ConfigSettingContractHistoricalDataV0",
51366        "ConfigSettingContractEventsV0",
51367        "ConfigSettingContractBandwidthV0",
51368        "ContractCostType",
51369        "ContractCostParamEntry",
51370        "StateArchivalSettings",
51371        "EvictionIterator",
51372        "ConfigSettingScpTiming",
51373        "ContractCostParams",
51374        "ConfigSettingId",
51375        "ConfigSettingEntry",
51376        "ScEnvMetaKind",
51377        "ScEnvMetaEntry",
51378        "ScEnvMetaEntryInterfaceVersion",
51379        "ScMetaV0",
51380        "ScMetaKind",
51381        "ScMetaEntry",
51382        "ScSpecType",
51383        "ScSpecTypeOption",
51384        "ScSpecTypeResult",
51385        "ScSpecTypeVec",
51386        "ScSpecTypeMap",
51387        "ScSpecTypeTuple",
51388        "ScSpecTypeBytesN",
51389        "ScSpecTypeUdt",
51390        "ScSpecTypeDef",
51391        "ScSpecUdtStructFieldV0",
51392        "ScSpecUdtStructV0",
51393        "ScSpecUdtUnionCaseVoidV0",
51394        "ScSpecUdtUnionCaseTupleV0",
51395        "ScSpecUdtUnionCaseV0Kind",
51396        "ScSpecUdtUnionCaseV0",
51397        "ScSpecUdtUnionV0",
51398        "ScSpecUdtEnumCaseV0",
51399        "ScSpecUdtEnumV0",
51400        "ScSpecUdtErrorEnumCaseV0",
51401        "ScSpecUdtErrorEnumV0",
51402        "ScSpecFunctionInputV0",
51403        "ScSpecFunctionV0",
51404        "ScSpecEventParamLocationV0",
51405        "ScSpecEventParamV0",
51406        "ScSpecEventDataFormat",
51407        "ScSpecEventV0",
51408        "ScSpecEntryKind",
51409        "ScSpecEntry",
51410        "ScValType",
51411        "ScErrorType",
51412        "ScErrorCode",
51413        "ScError",
51414        "UInt128Parts",
51415        "Int128Parts",
51416        "UInt256Parts",
51417        "Int256Parts",
51418        "ContractExecutableType",
51419        "ContractExecutable",
51420        "ScAddressType",
51421        "MuxedEd25519Account",
51422        "ScAddress",
51423        "ScVec",
51424        "ScMap",
51425        "ScBytes",
51426        "ScString",
51427        "ScSymbol",
51428        "ScNonceKey",
51429        "ScContractInstance",
51430        "ScVal",
51431        "ScMapEntry",
51432        "LedgerCloseMetaBatch",
51433        "StoredTransactionSet",
51434        "StoredDebugTransactionSet",
51435        "PersistedScpStateV0",
51436        "PersistedScpStateV1",
51437        "PersistedScpState",
51438        "Thresholds",
51439        "String32",
51440        "String64",
51441        "SequenceNumber",
51442        "DataValue",
51443        "AssetCode4",
51444        "AssetCode12",
51445        "AssetType",
51446        "AssetCode",
51447        "AlphaNum4",
51448        "AlphaNum12",
51449        "Asset",
51450        "Price",
51451        "Liabilities",
51452        "ThresholdIndexes",
51453        "LedgerEntryType",
51454        "Signer",
51455        "AccountFlags",
51456        "SponsorshipDescriptor",
51457        "AccountEntryExtensionV3",
51458        "AccountEntryExtensionV2",
51459        "AccountEntryExtensionV2Ext",
51460        "AccountEntryExtensionV1",
51461        "AccountEntryExtensionV1Ext",
51462        "AccountEntry",
51463        "AccountEntryExt",
51464        "TrustLineFlags",
51465        "LiquidityPoolType",
51466        "TrustLineAsset",
51467        "TrustLineEntryExtensionV2",
51468        "TrustLineEntryExtensionV2Ext",
51469        "TrustLineEntry",
51470        "TrustLineEntryExt",
51471        "TrustLineEntryV1",
51472        "TrustLineEntryV1Ext",
51473        "OfferEntryFlags",
51474        "OfferEntry",
51475        "OfferEntryExt",
51476        "DataEntry",
51477        "DataEntryExt",
51478        "ClaimPredicateType",
51479        "ClaimPredicate",
51480        "ClaimantType",
51481        "Claimant",
51482        "ClaimantV0",
51483        "ClaimableBalanceFlags",
51484        "ClaimableBalanceEntryExtensionV1",
51485        "ClaimableBalanceEntryExtensionV1Ext",
51486        "ClaimableBalanceEntry",
51487        "ClaimableBalanceEntryExt",
51488        "LiquidityPoolConstantProductParameters",
51489        "LiquidityPoolEntry",
51490        "LiquidityPoolEntryBody",
51491        "LiquidityPoolEntryConstantProduct",
51492        "ContractDataDurability",
51493        "ContractDataEntry",
51494        "ContractCodeCostInputs",
51495        "ContractCodeEntry",
51496        "ContractCodeEntryExt",
51497        "ContractCodeEntryV1",
51498        "TtlEntry",
51499        "LedgerEntryExtensionV1",
51500        "LedgerEntryExtensionV1Ext",
51501        "LedgerEntry",
51502        "LedgerEntryData",
51503        "LedgerEntryExt",
51504        "LedgerKey",
51505        "LedgerKeyAccount",
51506        "LedgerKeyTrustLine",
51507        "LedgerKeyOffer",
51508        "LedgerKeyData",
51509        "LedgerKeyClaimableBalance",
51510        "LedgerKeyLiquidityPool",
51511        "LedgerKeyContractData",
51512        "LedgerKeyContractCode",
51513        "LedgerKeyConfigSetting",
51514        "LedgerKeyTtl",
51515        "EnvelopeType",
51516        "BucketListType",
51517        "BucketEntryType",
51518        "HotArchiveBucketEntryType",
51519        "BucketMetadata",
51520        "BucketMetadataExt",
51521        "BucketEntry",
51522        "HotArchiveBucketEntry",
51523        "UpgradeType",
51524        "StellarValueType",
51525        "LedgerCloseValueSignature",
51526        "StellarValue",
51527        "StellarValueExt",
51528        "LedgerHeaderFlags",
51529        "LedgerHeaderExtensionV1",
51530        "LedgerHeaderExtensionV1Ext",
51531        "LedgerHeader",
51532        "LedgerHeaderExt",
51533        "LedgerUpgradeType",
51534        "ConfigUpgradeSetKey",
51535        "LedgerUpgrade",
51536        "ConfigUpgradeSet",
51537        "TxSetComponentType",
51538        "DependentTxCluster",
51539        "ParallelTxExecutionStage",
51540        "ParallelTxsComponent",
51541        "TxSetComponent",
51542        "TxSetComponentTxsMaybeDiscountedFee",
51543        "TransactionPhase",
51544        "TransactionSet",
51545        "TransactionSetV1",
51546        "GeneralizedTransactionSet",
51547        "TransactionResultPair",
51548        "TransactionResultSet",
51549        "TransactionHistoryEntry",
51550        "TransactionHistoryEntryExt",
51551        "TransactionHistoryResultEntry",
51552        "TransactionHistoryResultEntryExt",
51553        "LedgerHeaderHistoryEntry",
51554        "LedgerHeaderHistoryEntryExt",
51555        "LedgerScpMessages",
51556        "ScpHistoryEntryV0",
51557        "ScpHistoryEntry",
51558        "LedgerEntryChangeType",
51559        "LedgerEntryChange",
51560        "LedgerEntryChanges",
51561        "OperationMeta",
51562        "TransactionMetaV1",
51563        "TransactionMetaV2",
51564        "ContractEventType",
51565        "ContractEvent",
51566        "ContractEventBody",
51567        "ContractEventV0",
51568        "DiagnosticEvent",
51569        "SorobanTransactionMetaExtV1",
51570        "SorobanTransactionMetaExt",
51571        "SorobanTransactionMeta",
51572        "TransactionMetaV3",
51573        "OperationMetaV2",
51574        "SorobanTransactionMetaV2",
51575        "TransactionEventStage",
51576        "TransactionEvent",
51577        "TransactionMetaV4",
51578        "InvokeHostFunctionSuccessPreImage",
51579        "TransactionMeta",
51580        "TransactionResultMeta",
51581        "TransactionResultMetaV1",
51582        "UpgradeEntryMeta",
51583        "LedgerCloseMetaV0",
51584        "LedgerCloseMetaExtV1",
51585        "LedgerCloseMetaExt",
51586        "LedgerCloseMetaV1",
51587        "LedgerCloseMetaV2",
51588        "LedgerCloseMeta",
51589        "ErrorCode",
51590        "SError",
51591        "SendMore",
51592        "SendMoreExtended",
51593        "AuthCert",
51594        "Hello",
51595        "Auth",
51596        "IpAddrType",
51597        "PeerAddress",
51598        "PeerAddressIp",
51599        "MessageType",
51600        "DontHave",
51601        "SurveyMessageCommandType",
51602        "SurveyMessageResponseType",
51603        "TimeSlicedSurveyStartCollectingMessage",
51604        "SignedTimeSlicedSurveyStartCollectingMessage",
51605        "TimeSlicedSurveyStopCollectingMessage",
51606        "SignedTimeSlicedSurveyStopCollectingMessage",
51607        "SurveyRequestMessage",
51608        "TimeSlicedSurveyRequestMessage",
51609        "SignedTimeSlicedSurveyRequestMessage",
51610        "EncryptedBody",
51611        "SurveyResponseMessage",
51612        "TimeSlicedSurveyResponseMessage",
51613        "SignedTimeSlicedSurveyResponseMessage",
51614        "PeerStats",
51615        "TimeSlicedNodeData",
51616        "TimeSlicedPeerData",
51617        "TimeSlicedPeerDataList",
51618        "TopologyResponseBodyV2",
51619        "SurveyResponseBody",
51620        "TxAdvertVector",
51621        "FloodAdvert",
51622        "TxDemandVector",
51623        "FloodDemand",
51624        "StellarMessage",
51625        "AuthenticatedMessage",
51626        "AuthenticatedMessageV0",
51627        "LiquidityPoolParameters",
51628        "MuxedAccount",
51629        "MuxedAccountMed25519",
51630        "DecoratedSignature",
51631        "OperationType",
51632        "CreateAccountOp",
51633        "PaymentOp",
51634        "PathPaymentStrictReceiveOp",
51635        "PathPaymentStrictSendOp",
51636        "ManageSellOfferOp",
51637        "ManageBuyOfferOp",
51638        "CreatePassiveSellOfferOp",
51639        "SetOptionsOp",
51640        "ChangeTrustAsset",
51641        "ChangeTrustOp",
51642        "AllowTrustOp",
51643        "ManageDataOp",
51644        "BumpSequenceOp",
51645        "CreateClaimableBalanceOp",
51646        "ClaimClaimableBalanceOp",
51647        "BeginSponsoringFutureReservesOp",
51648        "RevokeSponsorshipType",
51649        "RevokeSponsorshipOp",
51650        "RevokeSponsorshipOpSigner",
51651        "ClawbackOp",
51652        "ClawbackClaimableBalanceOp",
51653        "SetTrustLineFlagsOp",
51654        "LiquidityPoolDepositOp",
51655        "LiquidityPoolWithdrawOp",
51656        "HostFunctionType",
51657        "ContractIdPreimageType",
51658        "ContractIdPreimage",
51659        "ContractIdPreimageFromAddress",
51660        "CreateContractArgs",
51661        "CreateContractArgsV2",
51662        "InvokeContractArgs",
51663        "HostFunction",
51664        "SorobanAuthorizedFunctionType",
51665        "SorobanAuthorizedFunction",
51666        "SorobanAuthorizedInvocation",
51667        "SorobanAddressCredentials",
51668        "SorobanCredentialsType",
51669        "SorobanCredentials",
51670        "SorobanAuthorizationEntry",
51671        "SorobanAuthorizationEntries",
51672        "InvokeHostFunctionOp",
51673        "ExtendFootprintTtlOp",
51674        "RestoreFootprintOp",
51675        "Operation",
51676        "OperationBody",
51677        "HashIdPreimage",
51678        "HashIdPreimageOperationId",
51679        "HashIdPreimageRevokeId",
51680        "HashIdPreimageContractId",
51681        "HashIdPreimageSorobanAuthorization",
51682        "MemoType",
51683        "Memo",
51684        "TimeBounds",
51685        "LedgerBounds",
51686        "PreconditionsV2",
51687        "PreconditionType",
51688        "Preconditions",
51689        "LedgerFootprint",
51690        "SorobanResources",
51691        "SorobanResourcesExtV0",
51692        "SorobanTransactionData",
51693        "SorobanTransactionDataExt",
51694        "TransactionV0",
51695        "TransactionV0Ext",
51696        "TransactionV0Envelope",
51697        "Transaction",
51698        "TransactionExt",
51699        "TransactionV1Envelope",
51700        "FeeBumpTransaction",
51701        "FeeBumpTransactionInnerTx",
51702        "FeeBumpTransactionExt",
51703        "FeeBumpTransactionEnvelope",
51704        "TransactionEnvelope",
51705        "TransactionSignaturePayload",
51706        "TransactionSignaturePayloadTaggedTransaction",
51707        "ClaimAtomType",
51708        "ClaimOfferAtomV0",
51709        "ClaimOfferAtom",
51710        "ClaimLiquidityAtom",
51711        "ClaimAtom",
51712        "CreateAccountResultCode",
51713        "CreateAccountResult",
51714        "PaymentResultCode",
51715        "PaymentResult",
51716        "PathPaymentStrictReceiveResultCode",
51717        "SimplePaymentResult",
51718        "PathPaymentStrictReceiveResult",
51719        "PathPaymentStrictReceiveResultSuccess",
51720        "PathPaymentStrictSendResultCode",
51721        "PathPaymentStrictSendResult",
51722        "PathPaymentStrictSendResultSuccess",
51723        "ManageSellOfferResultCode",
51724        "ManageOfferEffect",
51725        "ManageOfferSuccessResult",
51726        "ManageOfferSuccessResultOffer",
51727        "ManageSellOfferResult",
51728        "ManageBuyOfferResultCode",
51729        "ManageBuyOfferResult",
51730        "SetOptionsResultCode",
51731        "SetOptionsResult",
51732        "ChangeTrustResultCode",
51733        "ChangeTrustResult",
51734        "AllowTrustResultCode",
51735        "AllowTrustResult",
51736        "AccountMergeResultCode",
51737        "AccountMergeResult",
51738        "InflationResultCode",
51739        "InflationPayout",
51740        "InflationResult",
51741        "ManageDataResultCode",
51742        "ManageDataResult",
51743        "BumpSequenceResultCode",
51744        "BumpSequenceResult",
51745        "CreateClaimableBalanceResultCode",
51746        "CreateClaimableBalanceResult",
51747        "ClaimClaimableBalanceResultCode",
51748        "ClaimClaimableBalanceResult",
51749        "BeginSponsoringFutureReservesResultCode",
51750        "BeginSponsoringFutureReservesResult",
51751        "EndSponsoringFutureReservesResultCode",
51752        "EndSponsoringFutureReservesResult",
51753        "RevokeSponsorshipResultCode",
51754        "RevokeSponsorshipResult",
51755        "ClawbackResultCode",
51756        "ClawbackResult",
51757        "ClawbackClaimableBalanceResultCode",
51758        "ClawbackClaimableBalanceResult",
51759        "SetTrustLineFlagsResultCode",
51760        "SetTrustLineFlagsResult",
51761        "LiquidityPoolDepositResultCode",
51762        "LiquidityPoolDepositResult",
51763        "LiquidityPoolWithdrawResultCode",
51764        "LiquidityPoolWithdrawResult",
51765        "InvokeHostFunctionResultCode",
51766        "InvokeHostFunctionResult",
51767        "ExtendFootprintTtlResultCode",
51768        "ExtendFootprintTtlResult",
51769        "RestoreFootprintResultCode",
51770        "RestoreFootprintResult",
51771        "OperationResultCode",
51772        "OperationResult",
51773        "OperationResultTr",
51774        "TransactionResultCode",
51775        "InnerTransactionResult",
51776        "InnerTransactionResultResult",
51777        "InnerTransactionResultExt",
51778        "InnerTransactionResultPair",
51779        "TransactionResult",
51780        "TransactionResultResult",
51781        "TransactionResultExt",
51782        "Hash",
51783        "Uint256",
51784        "Uint32",
51785        "Int32",
51786        "Uint64",
51787        "Int64",
51788        "TimePoint",
51789        "Duration",
51790        "ExtensionPoint",
51791        "CryptoKeyType",
51792        "PublicKeyType",
51793        "SignerKeyType",
51794        "PublicKey",
51795        "SignerKey",
51796        "SignerKeyEd25519SignedPayload",
51797        "Signature",
51798        "SignatureHint",
51799        "NodeId",
51800        "AccountId",
51801        "ContractId",
51802        "Curve25519Secret",
51803        "Curve25519Public",
51804        "HmacSha256Key",
51805        "HmacSha256Mac",
51806        "ShortHashSeed",
51807        "BinaryFuseFilterType",
51808        "SerializedBinaryFuseFilter",
51809        "PoolId",
51810        "ClaimableBalanceIdType",
51811        "ClaimableBalanceId",
51812    ];
51813
51814    #[must_use]
51815    #[allow(clippy::too_many_lines)]
51816    pub const fn name(&self) -> &'static str {
51817        match self {
51818            Self::Value => "Value",
51819            Self::ScpBallot => "ScpBallot",
51820            Self::ScpStatementType => "ScpStatementType",
51821            Self::ScpNomination => "ScpNomination",
51822            Self::ScpStatement => "ScpStatement",
51823            Self::ScpStatementPledges => "ScpStatementPledges",
51824            Self::ScpStatementPrepare => "ScpStatementPrepare",
51825            Self::ScpStatementConfirm => "ScpStatementConfirm",
51826            Self::ScpStatementExternalize => "ScpStatementExternalize",
51827            Self::ScpEnvelope => "ScpEnvelope",
51828            Self::ScpQuorumSet => "ScpQuorumSet",
51829            Self::ConfigSettingContractExecutionLanesV0 => "ConfigSettingContractExecutionLanesV0",
51830            Self::ConfigSettingContractComputeV0 => "ConfigSettingContractComputeV0",
51831            Self::ConfigSettingContractParallelComputeV0 => {
51832                "ConfigSettingContractParallelComputeV0"
51833            }
51834            Self::ConfigSettingContractLedgerCostV0 => "ConfigSettingContractLedgerCostV0",
51835            Self::ConfigSettingContractLedgerCostExtV0 => "ConfigSettingContractLedgerCostExtV0",
51836            Self::ConfigSettingContractHistoricalDataV0 => "ConfigSettingContractHistoricalDataV0",
51837            Self::ConfigSettingContractEventsV0 => "ConfigSettingContractEventsV0",
51838            Self::ConfigSettingContractBandwidthV0 => "ConfigSettingContractBandwidthV0",
51839            Self::ContractCostType => "ContractCostType",
51840            Self::ContractCostParamEntry => "ContractCostParamEntry",
51841            Self::StateArchivalSettings => "StateArchivalSettings",
51842            Self::EvictionIterator => "EvictionIterator",
51843            Self::ConfigSettingScpTiming => "ConfigSettingScpTiming",
51844            Self::ContractCostParams => "ContractCostParams",
51845            Self::ConfigSettingId => "ConfigSettingId",
51846            Self::ConfigSettingEntry => "ConfigSettingEntry",
51847            Self::ScEnvMetaKind => "ScEnvMetaKind",
51848            Self::ScEnvMetaEntry => "ScEnvMetaEntry",
51849            Self::ScEnvMetaEntryInterfaceVersion => "ScEnvMetaEntryInterfaceVersion",
51850            Self::ScMetaV0 => "ScMetaV0",
51851            Self::ScMetaKind => "ScMetaKind",
51852            Self::ScMetaEntry => "ScMetaEntry",
51853            Self::ScSpecType => "ScSpecType",
51854            Self::ScSpecTypeOption => "ScSpecTypeOption",
51855            Self::ScSpecTypeResult => "ScSpecTypeResult",
51856            Self::ScSpecTypeVec => "ScSpecTypeVec",
51857            Self::ScSpecTypeMap => "ScSpecTypeMap",
51858            Self::ScSpecTypeTuple => "ScSpecTypeTuple",
51859            Self::ScSpecTypeBytesN => "ScSpecTypeBytesN",
51860            Self::ScSpecTypeUdt => "ScSpecTypeUdt",
51861            Self::ScSpecTypeDef => "ScSpecTypeDef",
51862            Self::ScSpecUdtStructFieldV0 => "ScSpecUdtStructFieldV0",
51863            Self::ScSpecUdtStructV0 => "ScSpecUdtStructV0",
51864            Self::ScSpecUdtUnionCaseVoidV0 => "ScSpecUdtUnionCaseVoidV0",
51865            Self::ScSpecUdtUnionCaseTupleV0 => "ScSpecUdtUnionCaseTupleV0",
51866            Self::ScSpecUdtUnionCaseV0Kind => "ScSpecUdtUnionCaseV0Kind",
51867            Self::ScSpecUdtUnionCaseV0 => "ScSpecUdtUnionCaseV0",
51868            Self::ScSpecUdtUnionV0 => "ScSpecUdtUnionV0",
51869            Self::ScSpecUdtEnumCaseV0 => "ScSpecUdtEnumCaseV0",
51870            Self::ScSpecUdtEnumV0 => "ScSpecUdtEnumV0",
51871            Self::ScSpecUdtErrorEnumCaseV0 => "ScSpecUdtErrorEnumCaseV0",
51872            Self::ScSpecUdtErrorEnumV0 => "ScSpecUdtErrorEnumV0",
51873            Self::ScSpecFunctionInputV0 => "ScSpecFunctionInputV0",
51874            Self::ScSpecFunctionV0 => "ScSpecFunctionV0",
51875            Self::ScSpecEventParamLocationV0 => "ScSpecEventParamLocationV0",
51876            Self::ScSpecEventParamV0 => "ScSpecEventParamV0",
51877            Self::ScSpecEventDataFormat => "ScSpecEventDataFormat",
51878            Self::ScSpecEventV0 => "ScSpecEventV0",
51879            Self::ScSpecEntryKind => "ScSpecEntryKind",
51880            Self::ScSpecEntry => "ScSpecEntry",
51881            Self::ScValType => "ScValType",
51882            Self::ScErrorType => "ScErrorType",
51883            Self::ScErrorCode => "ScErrorCode",
51884            Self::ScError => "ScError",
51885            Self::UInt128Parts => "UInt128Parts",
51886            Self::Int128Parts => "Int128Parts",
51887            Self::UInt256Parts => "UInt256Parts",
51888            Self::Int256Parts => "Int256Parts",
51889            Self::ContractExecutableType => "ContractExecutableType",
51890            Self::ContractExecutable => "ContractExecutable",
51891            Self::ScAddressType => "ScAddressType",
51892            Self::MuxedEd25519Account => "MuxedEd25519Account",
51893            Self::ScAddress => "ScAddress",
51894            Self::ScVec => "ScVec",
51895            Self::ScMap => "ScMap",
51896            Self::ScBytes => "ScBytes",
51897            Self::ScString => "ScString",
51898            Self::ScSymbol => "ScSymbol",
51899            Self::ScNonceKey => "ScNonceKey",
51900            Self::ScContractInstance => "ScContractInstance",
51901            Self::ScVal => "ScVal",
51902            Self::ScMapEntry => "ScMapEntry",
51903            Self::LedgerCloseMetaBatch => "LedgerCloseMetaBatch",
51904            Self::StoredTransactionSet => "StoredTransactionSet",
51905            Self::StoredDebugTransactionSet => "StoredDebugTransactionSet",
51906            Self::PersistedScpStateV0 => "PersistedScpStateV0",
51907            Self::PersistedScpStateV1 => "PersistedScpStateV1",
51908            Self::PersistedScpState => "PersistedScpState",
51909            Self::Thresholds => "Thresholds",
51910            Self::String32 => "String32",
51911            Self::String64 => "String64",
51912            Self::SequenceNumber => "SequenceNumber",
51913            Self::DataValue => "DataValue",
51914            Self::AssetCode4 => "AssetCode4",
51915            Self::AssetCode12 => "AssetCode12",
51916            Self::AssetType => "AssetType",
51917            Self::AssetCode => "AssetCode",
51918            Self::AlphaNum4 => "AlphaNum4",
51919            Self::AlphaNum12 => "AlphaNum12",
51920            Self::Asset => "Asset",
51921            Self::Price => "Price",
51922            Self::Liabilities => "Liabilities",
51923            Self::ThresholdIndexes => "ThresholdIndexes",
51924            Self::LedgerEntryType => "LedgerEntryType",
51925            Self::Signer => "Signer",
51926            Self::AccountFlags => "AccountFlags",
51927            Self::SponsorshipDescriptor => "SponsorshipDescriptor",
51928            Self::AccountEntryExtensionV3 => "AccountEntryExtensionV3",
51929            Self::AccountEntryExtensionV2 => "AccountEntryExtensionV2",
51930            Self::AccountEntryExtensionV2Ext => "AccountEntryExtensionV2Ext",
51931            Self::AccountEntryExtensionV1 => "AccountEntryExtensionV1",
51932            Self::AccountEntryExtensionV1Ext => "AccountEntryExtensionV1Ext",
51933            Self::AccountEntry => "AccountEntry",
51934            Self::AccountEntryExt => "AccountEntryExt",
51935            Self::TrustLineFlags => "TrustLineFlags",
51936            Self::LiquidityPoolType => "LiquidityPoolType",
51937            Self::TrustLineAsset => "TrustLineAsset",
51938            Self::TrustLineEntryExtensionV2 => "TrustLineEntryExtensionV2",
51939            Self::TrustLineEntryExtensionV2Ext => "TrustLineEntryExtensionV2Ext",
51940            Self::TrustLineEntry => "TrustLineEntry",
51941            Self::TrustLineEntryExt => "TrustLineEntryExt",
51942            Self::TrustLineEntryV1 => "TrustLineEntryV1",
51943            Self::TrustLineEntryV1Ext => "TrustLineEntryV1Ext",
51944            Self::OfferEntryFlags => "OfferEntryFlags",
51945            Self::OfferEntry => "OfferEntry",
51946            Self::OfferEntryExt => "OfferEntryExt",
51947            Self::DataEntry => "DataEntry",
51948            Self::DataEntryExt => "DataEntryExt",
51949            Self::ClaimPredicateType => "ClaimPredicateType",
51950            Self::ClaimPredicate => "ClaimPredicate",
51951            Self::ClaimantType => "ClaimantType",
51952            Self::Claimant => "Claimant",
51953            Self::ClaimantV0 => "ClaimantV0",
51954            Self::ClaimableBalanceFlags => "ClaimableBalanceFlags",
51955            Self::ClaimableBalanceEntryExtensionV1 => "ClaimableBalanceEntryExtensionV1",
51956            Self::ClaimableBalanceEntryExtensionV1Ext => "ClaimableBalanceEntryExtensionV1Ext",
51957            Self::ClaimableBalanceEntry => "ClaimableBalanceEntry",
51958            Self::ClaimableBalanceEntryExt => "ClaimableBalanceEntryExt",
51959            Self::LiquidityPoolConstantProductParameters => {
51960                "LiquidityPoolConstantProductParameters"
51961            }
51962            Self::LiquidityPoolEntry => "LiquidityPoolEntry",
51963            Self::LiquidityPoolEntryBody => "LiquidityPoolEntryBody",
51964            Self::LiquidityPoolEntryConstantProduct => "LiquidityPoolEntryConstantProduct",
51965            Self::ContractDataDurability => "ContractDataDurability",
51966            Self::ContractDataEntry => "ContractDataEntry",
51967            Self::ContractCodeCostInputs => "ContractCodeCostInputs",
51968            Self::ContractCodeEntry => "ContractCodeEntry",
51969            Self::ContractCodeEntryExt => "ContractCodeEntryExt",
51970            Self::ContractCodeEntryV1 => "ContractCodeEntryV1",
51971            Self::TtlEntry => "TtlEntry",
51972            Self::LedgerEntryExtensionV1 => "LedgerEntryExtensionV1",
51973            Self::LedgerEntryExtensionV1Ext => "LedgerEntryExtensionV1Ext",
51974            Self::LedgerEntry => "LedgerEntry",
51975            Self::LedgerEntryData => "LedgerEntryData",
51976            Self::LedgerEntryExt => "LedgerEntryExt",
51977            Self::LedgerKey => "LedgerKey",
51978            Self::LedgerKeyAccount => "LedgerKeyAccount",
51979            Self::LedgerKeyTrustLine => "LedgerKeyTrustLine",
51980            Self::LedgerKeyOffer => "LedgerKeyOffer",
51981            Self::LedgerKeyData => "LedgerKeyData",
51982            Self::LedgerKeyClaimableBalance => "LedgerKeyClaimableBalance",
51983            Self::LedgerKeyLiquidityPool => "LedgerKeyLiquidityPool",
51984            Self::LedgerKeyContractData => "LedgerKeyContractData",
51985            Self::LedgerKeyContractCode => "LedgerKeyContractCode",
51986            Self::LedgerKeyConfigSetting => "LedgerKeyConfigSetting",
51987            Self::LedgerKeyTtl => "LedgerKeyTtl",
51988            Self::EnvelopeType => "EnvelopeType",
51989            Self::BucketListType => "BucketListType",
51990            Self::BucketEntryType => "BucketEntryType",
51991            Self::HotArchiveBucketEntryType => "HotArchiveBucketEntryType",
51992            Self::BucketMetadata => "BucketMetadata",
51993            Self::BucketMetadataExt => "BucketMetadataExt",
51994            Self::BucketEntry => "BucketEntry",
51995            Self::HotArchiveBucketEntry => "HotArchiveBucketEntry",
51996            Self::UpgradeType => "UpgradeType",
51997            Self::StellarValueType => "StellarValueType",
51998            Self::LedgerCloseValueSignature => "LedgerCloseValueSignature",
51999            Self::StellarValue => "StellarValue",
52000            Self::StellarValueExt => "StellarValueExt",
52001            Self::LedgerHeaderFlags => "LedgerHeaderFlags",
52002            Self::LedgerHeaderExtensionV1 => "LedgerHeaderExtensionV1",
52003            Self::LedgerHeaderExtensionV1Ext => "LedgerHeaderExtensionV1Ext",
52004            Self::LedgerHeader => "LedgerHeader",
52005            Self::LedgerHeaderExt => "LedgerHeaderExt",
52006            Self::LedgerUpgradeType => "LedgerUpgradeType",
52007            Self::ConfigUpgradeSetKey => "ConfigUpgradeSetKey",
52008            Self::LedgerUpgrade => "LedgerUpgrade",
52009            Self::ConfigUpgradeSet => "ConfigUpgradeSet",
52010            Self::TxSetComponentType => "TxSetComponentType",
52011            Self::DependentTxCluster => "DependentTxCluster",
52012            Self::ParallelTxExecutionStage => "ParallelTxExecutionStage",
52013            Self::ParallelTxsComponent => "ParallelTxsComponent",
52014            Self::TxSetComponent => "TxSetComponent",
52015            Self::TxSetComponentTxsMaybeDiscountedFee => "TxSetComponentTxsMaybeDiscountedFee",
52016            Self::TransactionPhase => "TransactionPhase",
52017            Self::TransactionSet => "TransactionSet",
52018            Self::TransactionSetV1 => "TransactionSetV1",
52019            Self::GeneralizedTransactionSet => "GeneralizedTransactionSet",
52020            Self::TransactionResultPair => "TransactionResultPair",
52021            Self::TransactionResultSet => "TransactionResultSet",
52022            Self::TransactionHistoryEntry => "TransactionHistoryEntry",
52023            Self::TransactionHistoryEntryExt => "TransactionHistoryEntryExt",
52024            Self::TransactionHistoryResultEntry => "TransactionHistoryResultEntry",
52025            Self::TransactionHistoryResultEntryExt => "TransactionHistoryResultEntryExt",
52026            Self::LedgerHeaderHistoryEntry => "LedgerHeaderHistoryEntry",
52027            Self::LedgerHeaderHistoryEntryExt => "LedgerHeaderHistoryEntryExt",
52028            Self::LedgerScpMessages => "LedgerScpMessages",
52029            Self::ScpHistoryEntryV0 => "ScpHistoryEntryV0",
52030            Self::ScpHistoryEntry => "ScpHistoryEntry",
52031            Self::LedgerEntryChangeType => "LedgerEntryChangeType",
52032            Self::LedgerEntryChange => "LedgerEntryChange",
52033            Self::LedgerEntryChanges => "LedgerEntryChanges",
52034            Self::OperationMeta => "OperationMeta",
52035            Self::TransactionMetaV1 => "TransactionMetaV1",
52036            Self::TransactionMetaV2 => "TransactionMetaV2",
52037            Self::ContractEventType => "ContractEventType",
52038            Self::ContractEvent => "ContractEvent",
52039            Self::ContractEventBody => "ContractEventBody",
52040            Self::ContractEventV0 => "ContractEventV0",
52041            Self::DiagnosticEvent => "DiagnosticEvent",
52042            Self::SorobanTransactionMetaExtV1 => "SorobanTransactionMetaExtV1",
52043            Self::SorobanTransactionMetaExt => "SorobanTransactionMetaExt",
52044            Self::SorobanTransactionMeta => "SorobanTransactionMeta",
52045            Self::TransactionMetaV3 => "TransactionMetaV3",
52046            Self::OperationMetaV2 => "OperationMetaV2",
52047            Self::SorobanTransactionMetaV2 => "SorobanTransactionMetaV2",
52048            Self::TransactionEventStage => "TransactionEventStage",
52049            Self::TransactionEvent => "TransactionEvent",
52050            Self::TransactionMetaV4 => "TransactionMetaV4",
52051            Self::InvokeHostFunctionSuccessPreImage => "InvokeHostFunctionSuccessPreImage",
52052            Self::TransactionMeta => "TransactionMeta",
52053            Self::TransactionResultMeta => "TransactionResultMeta",
52054            Self::TransactionResultMetaV1 => "TransactionResultMetaV1",
52055            Self::UpgradeEntryMeta => "UpgradeEntryMeta",
52056            Self::LedgerCloseMetaV0 => "LedgerCloseMetaV0",
52057            Self::LedgerCloseMetaExtV1 => "LedgerCloseMetaExtV1",
52058            Self::LedgerCloseMetaExt => "LedgerCloseMetaExt",
52059            Self::LedgerCloseMetaV1 => "LedgerCloseMetaV1",
52060            Self::LedgerCloseMetaV2 => "LedgerCloseMetaV2",
52061            Self::LedgerCloseMeta => "LedgerCloseMeta",
52062            Self::ErrorCode => "ErrorCode",
52063            Self::SError => "SError",
52064            Self::SendMore => "SendMore",
52065            Self::SendMoreExtended => "SendMoreExtended",
52066            Self::AuthCert => "AuthCert",
52067            Self::Hello => "Hello",
52068            Self::Auth => "Auth",
52069            Self::IpAddrType => "IpAddrType",
52070            Self::PeerAddress => "PeerAddress",
52071            Self::PeerAddressIp => "PeerAddressIp",
52072            Self::MessageType => "MessageType",
52073            Self::DontHave => "DontHave",
52074            Self::SurveyMessageCommandType => "SurveyMessageCommandType",
52075            Self::SurveyMessageResponseType => "SurveyMessageResponseType",
52076            Self::TimeSlicedSurveyStartCollectingMessage => {
52077                "TimeSlicedSurveyStartCollectingMessage"
52078            }
52079            Self::SignedTimeSlicedSurveyStartCollectingMessage => {
52080                "SignedTimeSlicedSurveyStartCollectingMessage"
52081            }
52082            Self::TimeSlicedSurveyStopCollectingMessage => "TimeSlicedSurveyStopCollectingMessage",
52083            Self::SignedTimeSlicedSurveyStopCollectingMessage => {
52084                "SignedTimeSlicedSurveyStopCollectingMessage"
52085            }
52086            Self::SurveyRequestMessage => "SurveyRequestMessage",
52087            Self::TimeSlicedSurveyRequestMessage => "TimeSlicedSurveyRequestMessage",
52088            Self::SignedTimeSlicedSurveyRequestMessage => "SignedTimeSlicedSurveyRequestMessage",
52089            Self::EncryptedBody => "EncryptedBody",
52090            Self::SurveyResponseMessage => "SurveyResponseMessage",
52091            Self::TimeSlicedSurveyResponseMessage => "TimeSlicedSurveyResponseMessage",
52092            Self::SignedTimeSlicedSurveyResponseMessage => "SignedTimeSlicedSurveyResponseMessage",
52093            Self::PeerStats => "PeerStats",
52094            Self::TimeSlicedNodeData => "TimeSlicedNodeData",
52095            Self::TimeSlicedPeerData => "TimeSlicedPeerData",
52096            Self::TimeSlicedPeerDataList => "TimeSlicedPeerDataList",
52097            Self::TopologyResponseBodyV2 => "TopologyResponseBodyV2",
52098            Self::SurveyResponseBody => "SurveyResponseBody",
52099            Self::TxAdvertVector => "TxAdvertVector",
52100            Self::FloodAdvert => "FloodAdvert",
52101            Self::TxDemandVector => "TxDemandVector",
52102            Self::FloodDemand => "FloodDemand",
52103            Self::StellarMessage => "StellarMessage",
52104            Self::AuthenticatedMessage => "AuthenticatedMessage",
52105            Self::AuthenticatedMessageV0 => "AuthenticatedMessageV0",
52106            Self::LiquidityPoolParameters => "LiquidityPoolParameters",
52107            Self::MuxedAccount => "MuxedAccount",
52108            Self::MuxedAccountMed25519 => "MuxedAccountMed25519",
52109            Self::DecoratedSignature => "DecoratedSignature",
52110            Self::OperationType => "OperationType",
52111            Self::CreateAccountOp => "CreateAccountOp",
52112            Self::PaymentOp => "PaymentOp",
52113            Self::PathPaymentStrictReceiveOp => "PathPaymentStrictReceiveOp",
52114            Self::PathPaymentStrictSendOp => "PathPaymentStrictSendOp",
52115            Self::ManageSellOfferOp => "ManageSellOfferOp",
52116            Self::ManageBuyOfferOp => "ManageBuyOfferOp",
52117            Self::CreatePassiveSellOfferOp => "CreatePassiveSellOfferOp",
52118            Self::SetOptionsOp => "SetOptionsOp",
52119            Self::ChangeTrustAsset => "ChangeTrustAsset",
52120            Self::ChangeTrustOp => "ChangeTrustOp",
52121            Self::AllowTrustOp => "AllowTrustOp",
52122            Self::ManageDataOp => "ManageDataOp",
52123            Self::BumpSequenceOp => "BumpSequenceOp",
52124            Self::CreateClaimableBalanceOp => "CreateClaimableBalanceOp",
52125            Self::ClaimClaimableBalanceOp => "ClaimClaimableBalanceOp",
52126            Self::BeginSponsoringFutureReservesOp => "BeginSponsoringFutureReservesOp",
52127            Self::RevokeSponsorshipType => "RevokeSponsorshipType",
52128            Self::RevokeSponsorshipOp => "RevokeSponsorshipOp",
52129            Self::RevokeSponsorshipOpSigner => "RevokeSponsorshipOpSigner",
52130            Self::ClawbackOp => "ClawbackOp",
52131            Self::ClawbackClaimableBalanceOp => "ClawbackClaimableBalanceOp",
52132            Self::SetTrustLineFlagsOp => "SetTrustLineFlagsOp",
52133            Self::LiquidityPoolDepositOp => "LiquidityPoolDepositOp",
52134            Self::LiquidityPoolWithdrawOp => "LiquidityPoolWithdrawOp",
52135            Self::HostFunctionType => "HostFunctionType",
52136            Self::ContractIdPreimageType => "ContractIdPreimageType",
52137            Self::ContractIdPreimage => "ContractIdPreimage",
52138            Self::ContractIdPreimageFromAddress => "ContractIdPreimageFromAddress",
52139            Self::CreateContractArgs => "CreateContractArgs",
52140            Self::CreateContractArgsV2 => "CreateContractArgsV2",
52141            Self::InvokeContractArgs => "InvokeContractArgs",
52142            Self::HostFunction => "HostFunction",
52143            Self::SorobanAuthorizedFunctionType => "SorobanAuthorizedFunctionType",
52144            Self::SorobanAuthorizedFunction => "SorobanAuthorizedFunction",
52145            Self::SorobanAuthorizedInvocation => "SorobanAuthorizedInvocation",
52146            Self::SorobanAddressCredentials => "SorobanAddressCredentials",
52147            Self::SorobanCredentialsType => "SorobanCredentialsType",
52148            Self::SorobanCredentials => "SorobanCredentials",
52149            Self::SorobanAuthorizationEntry => "SorobanAuthorizationEntry",
52150            Self::SorobanAuthorizationEntries => "SorobanAuthorizationEntries",
52151            Self::InvokeHostFunctionOp => "InvokeHostFunctionOp",
52152            Self::ExtendFootprintTtlOp => "ExtendFootprintTtlOp",
52153            Self::RestoreFootprintOp => "RestoreFootprintOp",
52154            Self::Operation => "Operation",
52155            Self::OperationBody => "OperationBody",
52156            Self::HashIdPreimage => "HashIdPreimage",
52157            Self::HashIdPreimageOperationId => "HashIdPreimageOperationId",
52158            Self::HashIdPreimageRevokeId => "HashIdPreimageRevokeId",
52159            Self::HashIdPreimageContractId => "HashIdPreimageContractId",
52160            Self::HashIdPreimageSorobanAuthorization => "HashIdPreimageSorobanAuthorization",
52161            Self::MemoType => "MemoType",
52162            Self::Memo => "Memo",
52163            Self::TimeBounds => "TimeBounds",
52164            Self::LedgerBounds => "LedgerBounds",
52165            Self::PreconditionsV2 => "PreconditionsV2",
52166            Self::PreconditionType => "PreconditionType",
52167            Self::Preconditions => "Preconditions",
52168            Self::LedgerFootprint => "LedgerFootprint",
52169            Self::SorobanResources => "SorobanResources",
52170            Self::SorobanResourcesExtV0 => "SorobanResourcesExtV0",
52171            Self::SorobanTransactionData => "SorobanTransactionData",
52172            Self::SorobanTransactionDataExt => "SorobanTransactionDataExt",
52173            Self::TransactionV0 => "TransactionV0",
52174            Self::TransactionV0Ext => "TransactionV0Ext",
52175            Self::TransactionV0Envelope => "TransactionV0Envelope",
52176            Self::Transaction => "Transaction",
52177            Self::TransactionExt => "TransactionExt",
52178            Self::TransactionV1Envelope => "TransactionV1Envelope",
52179            Self::FeeBumpTransaction => "FeeBumpTransaction",
52180            Self::FeeBumpTransactionInnerTx => "FeeBumpTransactionInnerTx",
52181            Self::FeeBumpTransactionExt => "FeeBumpTransactionExt",
52182            Self::FeeBumpTransactionEnvelope => "FeeBumpTransactionEnvelope",
52183            Self::TransactionEnvelope => "TransactionEnvelope",
52184            Self::TransactionSignaturePayload => "TransactionSignaturePayload",
52185            Self::TransactionSignaturePayloadTaggedTransaction => {
52186                "TransactionSignaturePayloadTaggedTransaction"
52187            }
52188            Self::ClaimAtomType => "ClaimAtomType",
52189            Self::ClaimOfferAtomV0 => "ClaimOfferAtomV0",
52190            Self::ClaimOfferAtom => "ClaimOfferAtom",
52191            Self::ClaimLiquidityAtom => "ClaimLiquidityAtom",
52192            Self::ClaimAtom => "ClaimAtom",
52193            Self::CreateAccountResultCode => "CreateAccountResultCode",
52194            Self::CreateAccountResult => "CreateAccountResult",
52195            Self::PaymentResultCode => "PaymentResultCode",
52196            Self::PaymentResult => "PaymentResult",
52197            Self::PathPaymentStrictReceiveResultCode => "PathPaymentStrictReceiveResultCode",
52198            Self::SimplePaymentResult => "SimplePaymentResult",
52199            Self::PathPaymentStrictReceiveResult => "PathPaymentStrictReceiveResult",
52200            Self::PathPaymentStrictReceiveResultSuccess => "PathPaymentStrictReceiveResultSuccess",
52201            Self::PathPaymentStrictSendResultCode => "PathPaymentStrictSendResultCode",
52202            Self::PathPaymentStrictSendResult => "PathPaymentStrictSendResult",
52203            Self::PathPaymentStrictSendResultSuccess => "PathPaymentStrictSendResultSuccess",
52204            Self::ManageSellOfferResultCode => "ManageSellOfferResultCode",
52205            Self::ManageOfferEffect => "ManageOfferEffect",
52206            Self::ManageOfferSuccessResult => "ManageOfferSuccessResult",
52207            Self::ManageOfferSuccessResultOffer => "ManageOfferSuccessResultOffer",
52208            Self::ManageSellOfferResult => "ManageSellOfferResult",
52209            Self::ManageBuyOfferResultCode => "ManageBuyOfferResultCode",
52210            Self::ManageBuyOfferResult => "ManageBuyOfferResult",
52211            Self::SetOptionsResultCode => "SetOptionsResultCode",
52212            Self::SetOptionsResult => "SetOptionsResult",
52213            Self::ChangeTrustResultCode => "ChangeTrustResultCode",
52214            Self::ChangeTrustResult => "ChangeTrustResult",
52215            Self::AllowTrustResultCode => "AllowTrustResultCode",
52216            Self::AllowTrustResult => "AllowTrustResult",
52217            Self::AccountMergeResultCode => "AccountMergeResultCode",
52218            Self::AccountMergeResult => "AccountMergeResult",
52219            Self::InflationResultCode => "InflationResultCode",
52220            Self::InflationPayout => "InflationPayout",
52221            Self::InflationResult => "InflationResult",
52222            Self::ManageDataResultCode => "ManageDataResultCode",
52223            Self::ManageDataResult => "ManageDataResult",
52224            Self::BumpSequenceResultCode => "BumpSequenceResultCode",
52225            Self::BumpSequenceResult => "BumpSequenceResult",
52226            Self::CreateClaimableBalanceResultCode => "CreateClaimableBalanceResultCode",
52227            Self::CreateClaimableBalanceResult => "CreateClaimableBalanceResult",
52228            Self::ClaimClaimableBalanceResultCode => "ClaimClaimableBalanceResultCode",
52229            Self::ClaimClaimableBalanceResult => "ClaimClaimableBalanceResult",
52230            Self::BeginSponsoringFutureReservesResultCode => {
52231                "BeginSponsoringFutureReservesResultCode"
52232            }
52233            Self::BeginSponsoringFutureReservesResult => "BeginSponsoringFutureReservesResult",
52234            Self::EndSponsoringFutureReservesResultCode => "EndSponsoringFutureReservesResultCode",
52235            Self::EndSponsoringFutureReservesResult => "EndSponsoringFutureReservesResult",
52236            Self::RevokeSponsorshipResultCode => "RevokeSponsorshipResultCode",
52237            Self::RevokeSponsorshipResult => "RevokeSponsorshipResult",
52238            Self::ClawbackResultCode => "ClawbackResultCode",
52239            Self::ClawbackResult => "ClawbackResult",
52240            Self::ClawbackClaimableBalanceResultCode => "ClawbackClaimableBalanceResultCode",
52241            Self::ClawbackClaimableBalanceResult => "ClawbackClaimableBalanceResult",
52242            Self::SetTrustLineFlagsResultCode => "SetTrustLineFlagsResultCode",
52243            Self::SetTrustLineFlagsResult => "SetTrustLineFlagsResult",
52244            Self::LiquidityPoolDepositResultCode => "LiquidityPoolDepositResultCode",
52245            Self::LiquidityPoolDepositResult => "LiquidityPoolDepositResult",
52246            Self::LiquidityPoolWithdrawResultCode => "LiquidityPoolWithdrawResultCode",
52247            Self::LiquidityPoolWithdrawResult => "LiquidityPoolWithdrawResult",
52248            Self::InvokeHostFunctionResultCode => "InvokeHostFunctionResultCode",
52249            Self::InvokeHostFunctionResult => "InvokeHostFunctionResult",
52250            Self::ExtendFootprintTtlResultCode => "ExtendFootprintTtlResultCode",
52251            Self::ExtendFootprintTtlResult => "ExtendFootprintTtlResult",
52252            Self::RestoreFootprintResultCode => "RestoreFootprintResultCode",
52253            Self::RestoreFootprintResult => "RestoreFootprintResult",
52254            Self::OperationResultCode => "OperationResultCode",
52255            Self::OperationResult => "OperationResult",
52256            Self::OperationResultTr => "OperationResultTr",
52257            Self::TransactionResultCode => "TransactionResultCode",
52258            Self::InnerTransactionResult => "InnerTransactionResult",
52259            Self::InnerTransactionResultResult => "InnerTransactionResultResult",
52260            Self::InnerTransactionResultExt => "InnerTransactionResultExt",
52261            Self::InnerTransactionResultPair => "InnerTransactionResultPair",
52262            Self::TransactionResult => "TransactionResult",
52263            Self::TransactionResultResult => "TransactionResultResult",
52264            Self::TransactionResultExt => "TransactionResultExt",
52265            Self::Hash => "Hash",
52266            Self::Uint256 => "Uint256",
52267            Self::Uint32 => "Uint32",
52268            Self::Int32 => "Int32",
52269            Self::Uint64 => "Uint64",
52270            Self::Int64 => "Int64",
52271            Self::TimePoint => "TimePoint",
52272            Self::Duration => "Duration",
52273            Self::ExtensionPoint => "ExtensionPoint",
52274            Self::CryptoKeyType => "CryptoKeyType",
52275            Self::PublicKeyType => "PublicKeyType",
52276            Self::SignerKeyType => "SignerKeyType",
52277            Self::PublicKey => "PublicKey",
52278            Self::SignerKey => "SignerKey",
52279            Self::SignerKeyEd25519SignedPayload => "SignerKeyEd25519SignedPayload",
52280            Self::Signature => "Signature",
52281            Self::SignatureHint => "SignatureHint",
52282            Self::NodeId => "NodeId",
52283            Self::AccountId => "AccountId",
52284            Self::ContractId => "ContractId",
52285            Self::Curve25519Secret => "Curve25519Secret",
52286            Self::Curve25519Public => "Curve25519Public",
52287            Self::HmacSha256Key => "HmacSha256Key",
52288            Self::HmacSha256Mac => "HmacSha256Mac",
52289            Self::ShortHashSeed => "ShortHashSeed",
52290            Self::BinaryFuseFilterType => "BinaryFuseFilterType",
52291            Self::SerializedBinaryFuseFilter => "SerializedBinaryFuseFilter",
52292            Self::PoolId => "PoolId",
52293            Self::ClaimableBalanceIdType => "ClaimableBalanceIdType",
52294            Self::ClaimableBalanceId => "ClaimableBalanceId",
52295        }
52296    }
52297
52298    #[must_use]
52299    #[allow(clippy::too_many_lines)]
52300    pub const fn variants() -> [TypeVariant; 463] {
52301        Self::VARIANTS
52302    }
52303
52304    #[cfg(feature = "schemars")]
52305    #[must_use]
52306    #[allow(clippy::too_many_lines)]
52307    pub fn json_schema(&self, gen: schemars::gen::SchemaGenerator) -> schemars::schema::RootSchema {
52308        match self {
52309            Self::Value => gen.into_root_schema_for::<Value>(),
52310            Self::ScpBallot => gen.into_root_schema_for::<ScpBallot>(),
52311            Self::ScpStatementType => gen.into_root_schema_for::<ScpStatementType>(),
52312            Self::ScpNomination => gen.into_root_schema_for::<ScpNomination>(),
52313            Self::ScpStatement => gen.into_root_schema_for::<ScpStatement>(),
52314            Self::ScpStatementPledges => gen.into_root_schema_for::<ScpStatementPledges>(),
52315            Self::ScpStatementPrepare => gen.into_root_schema_for::<ScpStatementPrepare>(),
52316            Self::ScpStatementConfirm => gen.into_root_schema_for::<ScpStatementConfirm>(),
52317            Self::ScpStatementExternalize => gen.into_root_schema_for::<ScpStatementExternalize>(),
52318            Self::ScpEnvelope => gen.into_root_schema_for::<ScpEnvelope>(),
52319            Self::ScpQuorumSet => gen.into_root_schema_for::<ScpQuorumSet>(),
52320            Self::ConfigSettingContractExecutionLanesV0 => {
52321                gen.into_root_schema_for::<ConfigSettingContractExecutionLanesV0>()
52322            }
52323            Self::ConfigSettingContractComputeV0 => {
52324                gen.into_root_schema_for::<ConfigSettingContractComputeV0>()
52325            }
52326            Self::ConfigSettingContractParallelComputeV0 => {
52327                gen.into_root_schema_for::<ConfigSettingContractParallelComputeV0>()
52328            }
52329            Self::ConfigSettingContractLedgerCostV0 => {
52330                gen.into_root_schema_for::<ConfigSettingContractLedgerCostV0>()
52331            }
52332            Self::ConfigSettingContractLedgerCostExtV0 => {
52333                gen.into_root_schema_for::<ConfigSettingContractLedgerCostExtV0>()
52334            }
52335            Self::ConfigSettingContractHistoricalDataV0 => {
52336                gen.into_root_schema_for::<ConfigSettingContractHistoricalDataV0>()
52337            }
52338            Self::ConfigSettingContractEventsV0 => {
52339                gen.into_root_schema_for::<ConfigSettingContractEventsV0>()
52340            }
52341            Self::ConfigSettingContractBandwidthV0 => {
52342                gen.into_root_schema_for::<ConfigSettingContractBandwidthV0>()
52343            }
52344            Self::ContractCostType => gen.into_root_schema_for::<ContractCostType>(),
52345            Self::ContractCostParamEntry => gen.into_root_schema_for::<ContractCostParamEntry>(),
52346            Self::StateArchivalSettings => gen.into_root_schema_for::<StateArchivalSettings>(),
52347            Self::EvictionIterator => gen.into_root_schema_for::<EvictionIterator>(),
52348            Self::ConfigSettingScpTiming => gen.into_root_schema_for::<ConfigSettingScpTiming>(),
52349            Self::ContractCostParams => gen.into_root_schema_for::<ContractCostParams>(),
52350            Self::ConfigSettingId => gen.into_root_schema_for::<ConfigSettingId>(),
52351            Self::ConfigSettingEntry => gen.into_root_schema_for::<ConfigSettingEntry>(),
52352            Self::ScEnvMetaKind => gen.into_root_schema_for::<ScEnvMetaKind>(),
52353            Self::ScEnvMetaEntry => gen.into_root_schema_for::<ScEnvMetaEntry>(),
52354            Self::ScEnvMetaEntryInterfaceVersion => {
52355                gen.into_root_schema_for::<ScEnvMetaEntryInterfaceVersion>()
52356            }
52357            Self::ScMetaV0 => gen.into_root_schema_for::<ScMetaV0>(),
52358            Self::ScMetaKind => gen.into_root_schema_for::<ScMetaKind>(),
52359            Self::ScMetaEntry => gen.into_root_schema_for::<ScMetaEntry>(),
52360            Self::ScSpecType => gen.into_root_schema_for::<ScSpecType>(),
52361            Self::ScSpecTypeOption => gen.into_root_schema_for::<ScSpecTypeOption>(),
52362            Self::ScSpecTypeResult => gen.into_root_schema_for::<ScSpecTypeResult>(),
52363            Self::ScSpecTypeVec => gen.into_root_schema_for::<ScSpecTypeVec>(),
52364            Self::ScSpecTypeMap => gen.into_root_schema_for::<ScSpecTypeMap>(),
52365            Self::ScSpecTypeTuple => gen.into_root_schema_for::<ScSpecTypeTuple>(),
52366            Self::ScSpecTypeBytesN => gen.into_root_schema_for::<ScSpecTypeBytesN>(),
52367            Self::ScSpecTypeUdt => gen.into_root_schema_for::<ScSpecTypeUdt>(),
52368            Self::ScSpecTypeDef => gen.into_root_schema_for::<ScSpecTypeDef>(),
52369            Self::ScSpecUdtStructFieldV0 => gen.into_root_schema_for::<ScSpecUdtStructFieldV0>(),
52370            Self::ScSpecUdtStructV0 => gen.into_root_schema_for::<ScSpecUdtStructV0>(),
52371            Self::ScSpecUdtUnionCaseVoidV0 => {
52372                gen.into_root_schema_for::<ScSpecUdtUnionCaseVoidV0>()
52373            }
52374            Self::ScSpecUdtUnionCaseTupleV0 => {
52375                gen.into_root_schema_for::<ScSpecUdtUnionCaseTupleV0>()
52376            }
52377            Self::ScSpecUdtUnionCaseV0Kind => {
52378                gen.into_root_schema_for::<ScSpecUdtUnionCaseV0Kind>()
52379            }
52380            Self::ScSpecUdtUnionCaseV0 => gen.into_root_schema_for::<ScSpecUdtUnionCaseV0>(),
52381            Self::ScSpecUdtUnionV0 => gen.into_root_schema_for::<ScSpecUdtUnionV0>(),
52382            Self::ScSpecUdtEnumCaseV0 => gen.into_root_schema_for::<ScSpecUdtEnumCaseV0>(),
52383            Self::ScSpecUdtEnumV0 => gen.into_root_schema_for::<ScSpecUdtEnumV0>(),
52384            Self::ScSpecUdtErrorEnumCaseV0 => {
52385                gen.into_root_schema_for::<ScSpecUdtErrorEnumCaseV0>()
52386            }
52387            Self::ScSpecUdtErrorEnumV0 => gen.into_root_schema_for::<ScSpecUdtErrorEnumV0>(),
52388            Self::ScSpecFunctionInputV0 => gen.into_root_schema_for::<ScSpecFunctionInputV0>(),
52389            Self::ScSpecFunctionV0 => gen.into_root_schema_for::<ScSpecFunctionV0>(),
52390            Self::ScSpecEventParamLocationV0 => {
52391                gen.into_root_schema_for::<ScSpecEventParamLocationV0>()
52392            }
52393            Self::ScSpecEventParamV0 => gen.into_root_schema_for::<ScSpecEventParamV0>(),
52394            Self::ScSpecEventDataFormat => gen.into_root_schema_for::<ScSpecEventDataFormat>(),
52395            Self::ScSpecEventV0 => gen.into_root_schema_for::<ScSpecEventV0>(),
52396            Self::ScSpecEntryKind => gen.into_root_schema_for::<ScSpecEntryKind>(),
52397            Self::ScSpecEntry => gen.into_root_schema_for::<ScSpecEntry>(),
52398            Self::ScValType => gen.into_root_schema_for::<ScValType>(),
52399            Self::ScErrorType => gen.into_root_schema_for::<ScErrorType>(),
52400            Self::ScErrorCode => gen.into_root_schema_for::<ScErrorCode>(),
52401            Self::ScError => gen.into_root_schema_for::<ScError>(),
52402            Self::UInt128Parts => gen.into_root_schema_for::<UInt128Parts>(),
52403            Self::Int128Parts => gen.into_root_schema_for::<Int128Parts>(),
52404            Self::UInt256Parts => gen.into_root_schema_for::<UInt256Parts>(),
52405            Self::Int256Parts => gen.into_root_schema_for::<Int256Parts>(),
52406            Self::ContractExecutableType => gen.into_root_schema_for::<ContractExecutableType>(),
52407            Self::ContractExecutable => gen.into_root_schema_for::<ContractExecutable>(),
52408            Self::ScAddressType => gen.into_root_schema_for::<ScAddressType>(),
52409            Self::MuxedEd25519Account => gen.into_root_schema_for::<MuxedEd25519Account>(),
52410            Self::ScAddress => gen.into_root_schema_for::<ScAddress>(),
52411            Self::ScVec => gen.into_root_schema_for::<ScVec>(),
52412            Self::ScMap => gen.into_root_schema_for::<ScMap>(),
52413            Self::ScBytes => gen.into_root_schema_for::<ScBytes>(),
52414            Self::ScString => gen.into_root_schema_for::<ScString>(),
52415            Self::ScSymbol => gen.into_root_schema_for::<ScSymbol>(),
52416            Self::ScNonceKey => gen.into_root_schema_for::<ScNonceKey>(),
52417            Self::ScContractInstance => gen.into_root_schema_for::<ScContractInstance>(),
52418            Self::ScVal => gen.into_root_schema_for::<ScVal>(),
52419            Self::ScMapEntry => gen.into_root_schema_for::<ScMapEntry>(),
52420            Self::LedgerCloseMetaBatch => gen.into_root_schema_for::<LedgerCloseMetaBatch>(),
52421            Self::StoredTransactionSet => gen.into_root_schema_for::<StoredTransactionSet>(),
52422            Self::StoredDebugTransactionSet => {
52423                gen.into_root_schema_for::<StoredDebugTransactionSet>()
52424            }
52425            Self::PersistedScpStateV0 => gen.into_root_schema_for::<PersistedScpStateV0>(),
52426            Self::PersistedScpStateV1 => gen.into_root_schema_for::<PersistedScpStateV1>(),
52427            Self::PersistedScpState => gen.into_root_schema_for::<PersistedScpState>(),
52428            Self::Thresholds => gen.into_root_schema_for::<Thresholds>(),
52429            Self::String32 => gen.into_root_schema_for::<String32>(),
52430            Self::String64 => gen.into_root_schema_for::<String64>(),
52431            Self::SequenceNumber => gen.into_root_schema_for::<SequenceNumber>(),
52432            Self::DataValue => gen.into_root_schema_for::<DataValue>(),
52433            Self::AssetCode4 => gen.into_root_schema_for::<AssetCode4>(),
52434            Self::AssetCode12 => gen.into_root_schema_for::<AssetCode12>(),
52435            Self::AssetType => gen.into_root_schema_for::<AssetType>(),
52436            Self::AssetCode => gen.into_root_schema_for::<AssetCode>(),
52437            Self::AlphaNum4 => gen.into_root_schema_for::<AlphaNum4>(),
52438            Self::AlphaNum12 => gen.into_root_schema_for::<AlphaNum12>(),
52439            Self::Asset => gen.into_root_schema_for::<Asset>(),
52440            Self::Price => gen.into_root_schema_for::<Price>(),
52441            Self::Liabilities => gen.into_root_schema_for::<Liabilities>(),
52442            Self::ThresholdIndexes => gen.into_root_schema_for::<ThresholdIndexes>(),
52443            Self::LedgerEntryType => gen.into_root_schema_for::<LedgerEntryType>(),
52444            Self::Signer => gen.into_root_schema_for::<Signer>(),
52445            Self::AccountFlags => gen.into_root_schema_for::<AccountFlags>(),
52446            Self::SponsorshipDescriptor => gen.into_root_schema_for::<SponsorshipDescriptor>(),
52447            Self::AccountEntryExtensionV3 => gen.into_root_schema_for::<AccountEntryExtensionV3>(),
52448            Self::AccountEntryExtensionV2 => gen.into_root_schema_for::<AccountEntryExtensionV2>(),
52449            Self::AccountEntryExtensionV2Ext => {
52450                gen.into_root_schema_for::<AccountEntryExtensionV2Ext>()
52451            }
52452            Self::AccountEntryExtensionV1 => gen.into_root_schema_for::<AccountEntryExtensionV1>(),
52453            Self::AccountEntryExtensionV1Ext => {
52454                gen.into_root_schema_for::<AccountEntryExtensionV1Ext>()
52455            }
52456            Self::AccountEntry => gen.into_root_schema_for::<AccountEntry>(),
52457            Self::AccountEntryExt => gen.into_root_schema_for::<AccountEntryExt>(),
52458            Self::TrustLineFlags => gen.into_root_schema_for::<TrustLineFlags>(),
52459            Self::LiquidityPoolType => gen.into_root_schema_for::<LiquidityPoolType>(),
52460            Self::TrustLineAsset => gen.into_root_schema_for::<TrustLineAsset>(),
52461            Self::TrustLineEntryExtensionV2 => {
52462                gen.into_root_schema_for::<TrustLineEntryExtensionV2>()
52463            }
52464            Self::TrustLineEntryExtensionV2Ext => {
52465                gen.into_root_schema_for::<TrustLineEntryExtensionV2Ext>()
52466            }
52467            Self::TrustLineEntry => gen.into_root_schema_for::<TrustLineEntry>(),
52468            Self::TrustLineEntryExt => gen.into_root_schema_for::<TrustLineEntryExt>(),
52469            Self::TrustLineEntryV1 => gen.into_root_schema_for::<TrustLineEntryV1>(),
52470            Self::TrustLineEntryV1Ext => gen.into_root_schema_for::<TrustLineEntryV1Ext>(),
52471            Self::OfferEntryFlags => gen.into_root_schema_for::<OfferEntryFlags>(),
52472            Self::OfferEntry => gen.into_root_schema_for::<OfferEntry>(),
52473            Self::OfferEntryExt => gen.into_root_schema_for::<OfferEntryExt>(),
52474            Self::DataEntry => gen.into_root_schema_for::<DataEntry>(),
52475            Self::DataEntryExt => gen.into_root_schema_for::<DataEntryExt>(),
52476            Self::ClaimPredicateType => gen.into_root_schema_for::<ClaimPredicateType>(),
52477            Self::ClaimPredicate => gen.into_root_schema_for::<ClaimPredicate>(),
52478            Self::ClaimantType => gen.into_root_schema_for::<ClaimantType>(),
52479            Self::Claimant => gen.into_root_schema_for::<Claimant>(),
52480            Self::ClaimantV0 => gen.into_root_schema_for::<ClaimantV0>(),
52481            Self::ClaimableBalanceFlags => gen.into_root_schema_for::<ClaimableBalanceFlags>(),
52482            Self::ClaimableBalanceEntryExtensionV1 => {
52483                gen.into_root_schema_for::<ClaimableBalanceEntryExtensionV1>()
52484            }
52485            Self::ClaimableBalanceEntryExtensionV1Ext => {
52486                gen.into_root_schema_for::<ClaimableBalanceEntryExtensionV1Ext>()
52487            }
52488            Self::ClaimableBalanceEntry => gen.into_root_schema_for::<ClaimableBalanceEntry>(),
52489            Self::ClaimableBalanceEntryExt => {
52490                gen.into_root_schema_for::<ClaimableBalanceEntryExt>()
52491            }
52492            Self::LiquidityPoolConstantProductParameters => {
52493                gen.into_root_schema_for::<LiquidityPoolConstantProductParameters>()
52494            }
52495            Self::LiquidityPoolEntry => gen.into_root_schema_for::<LiquidityPoolEntry>(),
52496            Self::LiquidityPoolEntryBody => gen.into_root_schema_for::<LiquidityPoolEntryBody>(),
52497            Self::LiquidityPoolEntryConstantProduct => {
52498                gen.into_root_schema_for::<LiquidityPoolEntryConstantProduct>()
52499            }
52500            Self::ContractDataDurability => gen.into_root_schema_for::<ContractDataDurability>(),
52501            Self::ContractDataEntry => gen.into_root_schema_for::<ContractDataEntry>(),
52502            Self::ContractCodeCostInputs => gen.into_root_schema_for::<ContractCodeCostInputs>(),
52503            Self::ContractCodeEntry => gen.into_root_schema_for::<ContractCodeEntry>(),
52504            Self::ContractCodeEntryExt => gen.into_root_schema_for::<ContractCodeEntryExt>(),
52505            Self::ContractCodeEntryV1 => gen.into_root_schema_for::<ContractCodeEntryV1>(),
52506            Self::TtlEntry => gen.into_root_schema_for::<TtlEntry>(),
52507            Self::LedgerEntryExtensionV1 => gen.into_root_schema_for::<LedgerEntryExtensionV1>(),
52508            Self::LedgerEntryExtensionV1Ext => {
52509                gen.into_root_schema_for::<LedgerEntryExtensionV1Ext>()
52510            }
52511            Self::LedgerEntry => gen.into_root_schema_for::<LedgerEntry>(),
52512            Self::LedgerEntryData => gen.into_root_schema_for::<LedgerEntryData>(),
52513            Self::LedgerEntryExt => gen.into_root_schema_for::<LedgerEntryExt>(),
52514            Self::LedgerKey => gen.into_root_schema_for::<LedgerKey>(),
52515            Self::LedgerKeyAccount => gen.into_root_schema_for::<LedgerKeyAccount>(),
52516            Self::LedgerKeyTrustLine => gen.into_root_schema_for::<LedgerKeyTrustLine>(),
52517            Self::LedgerKeyOffer => gen.into_root_schema_for::<LedgerKeyOffer>(),
52518            Self::LedgerKeyData => gen.into_root_schema_for::<LedgerKeyData>(),
52519            Self::LedgerKeyClaimableBalance => {
52520                gen.into_root_schema_for::<LedgerKeyClaimableBalance>()
52521            }
52522            Self::LedgerKeyLiquidityPool => gen.into_root_schema_for::<LedgerKeyLiquidityPool>(),
52523            Self::LedgerKeyContractData => gen.into_root_schema_for::<LedgerKeyContractData>(),
52524            Self::LedgerKeyContractCode => gen.into_root_schema_for::<LedgerKeyContractCode>(),
52525            Self::LedgerKeyConfigSetting => gen.into_root_schema_for::<LedgerKeyConfigSetting>(),
52526            Self::LedgerKeyTtl => gen.into_root_schema_for::<LedgerKeyTtl>(),
52527            Self::EnvelopeType => gen.into_root_schema_for::<EnvelopeType>(),
52528            Self::BucketListType => gen.into_root_schema_for::<BucketListType>(),
52529            Self::BucketEntryType => gen.into_root_schema_for::<BucketEntryType>(),
52530            Self::HotArchiveBucketEntryType => {
52531                gen.into_root_schema_for::<HotArchiveBucketEntryType>()
52532            }
52533            Self::BucketMetadata => gen.into_root_schema_for::<BucketMetadata>(),
52534            Self::BucketMetadataExt => gen.into_root_schema_for::<BucketMetadataExt>(),
52535            Self::BucketEntry => gen.into_root_schema_for::<BucketEntry>(),
52536            Self::HotArchiveBucketEntry => gen.into_root_schema_for::<HotArchiveBucketEntry>(),
52537            Self::UpgradeType => gen.into_root_schema_for::<UpgradeType>(),
52538            Self::StellarValueType => gen.into_root_schema_for::<StellarValueType>(),
52539            Self::LedgerCloseValueSignature => {
52540                gen.into_root_schema_for::<LedgerCloseValueSignature>()
52541            }
52542            Self::StellarValue => gen.into_root_schema_for::<StellarValue>(),
52543            Self::StellarValueExt => gen.into_root_schema_for::<StellarValueExt>(),
52544            Self::LedgerHeaderFlags => gen.into_root_schema_for::<LedgerHeaderFlags>(),
52545            Self::LedgerHeaderExtensionV1 => gen.into_root_schema_for::<LedgerHeaderExtensionV1>(),
52546            Self::LedgerHeaderExtensionV1Ext => {
52547                gen.into_root_schema_for::<LedgerHeaderExtensionV1Ext>()
52548            }
52549            Self::LedgerHeader => gen.into_root_schema_for::<LedgerHeader>(),
52550            Self::LedgerHeaderExt => gen.into_root_schema_for::<LedgerHeaderExt>(),
52551            Self::LedgerUpgradeType => gen.into_root_schema_for::<LedgerUpgradeType>(),
52552            Self::ConfigUpgradeSetKey => gen.into_root_schema_for::<ConfigUpgradeSetKey>(),
52553            Self::LedgerUpgrade => gen.into_root_schema_for::<LedgerUpgrade>(),
52554            Self::ConfigUpgradeSet => gen.into_root_schema_for::<ConfigUpgradeSet>(),
52555            Self::TxSetComponentType => gen.into_root_schema_for::<TxSetComponentType>(),
52556            Self::DependentTxCluster => gen.into_root_schema_for::<DependentTxCluster>(),
52557            Self::ParallelTxExecutionStage => {
52558                gen.into_root_schema_for::<ParallelTxExecutionStage>()
52559            }
52560            Self::ParallelTxsComponent => gen.into_root_schema_for::<ParallelTxsComponent>(),
52561            Self::TxSetComponent => gen.into_root_schema_for::<TxSetComponent>(),
52562            Self::TxSetComponentTxsMaybeDiscountedFee => {
52563                gen.into_root_schema_for::<TxSetComponentTxsMaybeDiscountedFee>()
52564            }
52565            Self::TransactionPhase => gen.into_root_schema_for::<TransactionPhase>(),
52566            Self::TransactionSet => gen.into_root_schema_for::<TransactionSet>(),
52567            Self::TransactionSetV1 => gen.into_root_schema_for::<TransactionSetV1>(),
52568            Self::GeneralizedTransactionSet => {
52569                gen.into_root_schema_for::<GeneralizedTransactionSet>()
52570            }
52571            Self::TransactionResultPair => gen.into_root_schema_for::<TransactionResultPair>(),
52572            Self::TransactionResultSet => gen.into_root_schema_for::<TransactionResultSet>(),
52573            Self::TransactionHistoryEntry => gen.into_root_schema_for::<TransactionHistoryEntry>(),
52574            Self::TransactionHistoryEntryExt => {
52575                gen.into_root_schema_for::<TransactionHistoryEntryExt>()
52576            }
52577            Self::TransactionHistoryResultEntry => {
52578                gen.into_root_schema_for::<TransactionHistoryResultEntry>()
52579            }
52580            Self::TransactionHistoryResultEntryExt => {
52581                gen.into_root_schema_for::<TransactionHistoryResultEntryExt>()
52582            }
52583            Self::LedgerHeaderHistoryEntry => {
52584                gen.into_root_schema_for::<LedgerHeaderHistoryEntry>()
52585            }
52586            Self::LedgerHeaderHistoryEntryExt => {
52587                gen.into_root_schema_for::<LedgerHeaderHistoryEntryExt>()
52588            }
52589            Self::LedgerScpMessages => gen.into_root_schema_for::<LedgerScpMessages>(),
52590            Self::ScpHistoryEntryV0 => gen.into_root_schema_for::<ScpHistoryEntryV0>(),
52591            Self::ScpHistoryEntry => gen.into_root_schema_for::<ScpHistoryEntry>(),
52592            Self::LedgerEntryChangeType => gen.into_root_schema_for::<LedgerEntryChangeType>(),
52593            Self::LedgerEntryChange => gen.into_root_schema_for::<LedgerEntryChange>(),
52594            Self::LedgerEntryChanges => gen.into_root_schema_for::<LedgerEntryChanges>(),
52595            Self::OperationMeta => gen.into_root_schema_for::<OperationMeta>(),
52596            Self::TransactionMetaV1 => gen.into_root_schema_for::<TransactionMetaV1>(),
52597            Self::TransactionMetaV2 => gen.into_root_schema_for::<TransactionMetaV2>(),
52598            Self::ContractEventType => gen.into_root_schema_for::<ContractEventType>(),
52599            Self::ContractEvent => gen.into_root_schema_for::<ContractEvent>(),
52600            Self::ContractEventBody => gen.into_root_schema_for::<ContractEventBody>(),
52601            Self::ContractEventV0 => gen.into_root_schema_for::<ContractEventV0>(),
52602            Self::DiagnosticEvent => gen.into_root_schema_for::<DiagnosticEvent>(),
52603            Self::SorobanTransactionMetaExtV1 => {
52604                gen.into_root_schema_for::<SorobanTransactionMetaExtV1>()
52605            }
52606            Self::SorobanTransactionMetaExt => {
52607                gen.into_root_schema_for::<SorobanTransactionMetaExt>()
52608            }
52609            Self::SorobanTransactionMeta => gen.into_root_schema_for::<SorobanTransactionMeta>(),
52610            Self::TransactionMetaV3 => gen.into_root_schema_for::<TransactionMetaV3>(),
52611            Self::OperationMetaV2 => gen.into_root_schema_for::<OperationMetaV2>(),
52612            Self::SorobanTransactionMetaV2 => {
52613                gen.into_root_schema_for::<SorobanTransactionMetaV2>()
52614            }
52615            Self::TransactionEventStage => gen.into_root_schema_for::<TransactionEventStage>(),
52616            Self::TransactionEvent => gen.into_root_schema_for::<TransactionEvent>(),
52617            Self::TransactionMetaV4 => gen.into_root_schema_for::<TransactionMetaV4>(),
52618            Self::InvokeHostFunctionSuccessPreImage => {
52619                gen.into_root_schema_for::<InvokeHostFunctionSuccessPreImage>()
52620            }
52621            Self::TransactionMeta => gen.into_root_schema_for::<TransactionMeta>(),
52622            Self::TransactionResultMeta => gen.into_root_schema_for::<TransactionResultMeta>(),
52623            Self::TransactionResultMetaV1 => gen.into_root_schema_for::<TransactionResultMetaV1>(),
52624            Self::UpgradeEntryMeta => gen.into_root_schema_for::<UpgradeEntryMeta>(),
52625            Self::LedgerCloseMetaV0 => gen.into_root_schema_for::<LedgerCloseMetaV0>(),
52626            Self::LedgerCloseMetaExtV1 => gen.into_root_schema_for::<LedgerCloseMetaExtV1>(),
52627            Self::LedgerCloseMetaExt => gen.into_root_schema_for::<LedgerCloseMetaExt>(),
52628            Self::LedgerCloseMetaV1 => gen.into_root_schema_for::<LedgerCloseMetaV1>(),
52629            Self::LedgerCloseMetaV2 => gen.into_root_schema_for::<LedgerCloseMetaV2>(),
52630            Self::LedgerCloseMeta => gen.into_root_schema_for::<LedgerCloseMeta>(),
52631            Self::ErrorCode => gen.into_root_schema_for::<ErrorCode>(),
52632            Self::SError => gen.into_root_schema_for::<SError>(),
52633            Self::SendMore => gen.into_root_schema_for::<SendMore>(),
52634            Self::SendMoreExtended => gen.into_root_schema_for::<SendMoreExtended>(),
52635            Self::AuthCert => gen.into_root_schema_for::<AuthCert>(),
52636            Self::Hello => gen.into_root_schema_for::<Hello>(),
52637            Self::Auth => gen.into_root_schema_for::<Auth>(),
52638            Self::IpAddrType => gen.into_root_schema_for::<IpAddrType>(),
52639            Self::PeerAddress => gen.into_root_schema_for::<PeerAddress>(),
52640            Self::PeerAddressIp => gen.into_root_schema_for::<PeerAddressIp>(),
52641            Self::MessageType => gen.into_root_schema_for::<MessageType>(),
52642            Self::DontHave => gen.into_root_schema_for::<DontHave>(),
52643            Self::SurveyMessageCommandType => {
52644                gen.into_root_schema_for::<SurveyMessageCommandType>()
52645            }
52646            Self::SurveyMessageResponseType => {
52647                gen.into_root_schema_for::<SurveyMessageResponseType>()
52648            }
52649            Self::TimeSlicedSurveyStartCollectingMessage => {
52650                gen.into_root_schema_for::<TimeSlicedSurveyStartCollectingMessage>()
52651            }
52652            Self::SignedTimeSlicedSurveyStartCollectingMessage => {
52653                gen.into_root_schema_for::<SignedTimeSlicedSurveyStartCollectingMessage>()
52654            }
52655            Self::TimeSlicedSurveyStopCollectingMessage => {
52656                gen.into_root_schema_for::<TimeSlicedSurveyStopCollectingMessage>()
52657            }
52658            Self::SignedTimeSlicedSurveyStopCollectingMessage => {
52659                gen.into_root_schema_for::<SignedTimeSlicedSurveyStopCollectingMessage>()
52660            }
52661            Self::SurveyRequestMessage => gen.into_root_schema_for::<SurveyRequestMessage>(),
52662            Self::TimeSlicedSurveyRequestMessage => {
52663                gen.into_root_schema_for::<TimeSlicedSurveyRequestMessage>()
52664            }
52665            Self::SignedTimeSlicedSurveyRequestMessage => {
52666                gen.into_root_schema_for::<SignedTimeSlicedSurveyRequestMessage>()
52667            }
52668            Self::EncryptedBody => gen.into_root_schema_for::<EncryptedBody>(),
52669            Self::SurveyResponseMessage => gen.into_root_schema_for::<SurveyResponseMessage>(),
52670            Self::TimeSlicedSurveyResponseMessage => {
52671                gen.into_root_schema_for::<TimeSlicedSurveyResponseMessage>()
52672            }
52673            Self::SignedTimeSlicedSurveyResponseMessage => {
52674                gen.into_root_schema_for::<SignedTimeSlicedSurveyResponseMessage>()
52675            }
52676            Self::PeerStats => gen.into_root_schema_for::<PeerStats>(),
52677            Self::TimeSlicedNodeData => gen.into_root_schema_for::<TimeSlicedNodeData>(),
52678            Self::TimeSlicedPeerData => gen.into_root_schema_for::<TimeSlicedPeerData>(),
52679            Self::TimeSlicedPeerDataList => gen.into_root_schema_for::<TimeSlicedPeerDataList>(),
52680            Self::TopologyResponseBodyV2 => gen.into_root_schema_for::<TopologyResponseBodyV2>(),
52681            Self::SurveyResponseBody => gen.into_root_schema_for::<SurveyResponseBody>(),
52682            Self::TxAdvertVector => gen.into_root_schema_for::<TxAdvertVector>(),
52683            Self::FloodAdvert => gen.into_root_schema_for::<FloodAdvert>(),
52684            Self::TxDemandVector => gen.into_root_schema_for::<TxDemandVector>(),
52685            Self::FloodDemand => gen.into_root_schema_for::<FloodDemand>(),
52686            Self::StellarMessage => gen.into_root_schema_for::<StellarMessage>(),
52687            Self::AuthenticatedMessage => gen.into_root_schema_for::<AuthenticatedMessage>(),
52688            Self::AuthenticatedMessageV0 => gen.into_root_schema_for::<AuthenticatedMessageV0>(),
52689            Self::LiquidityPoolParameters => gen.into_root_schema_for::<LiquidityPoolParameters>(),
52690            Self::MuxedAccount => gen.into_root_schema_for::<MuxedAccount>(),
52691            Self::MuxedAccountMed25519 => gen.into_root_schema_for::<MuxedAccountMed25519>(),
52692            Self::DecoratedSignature => gen.into_root_schema_for::<DecoratedSignature>(),
52693            Self::OperationType => gen.into_root_schema_for::<OperationType>(),
52694            Self::CreateAccountOp => gen.into_root_schema_for::<CreateAccountOp>(),
52695            Self::PaymentOp => gen.into_root_schema_for::<PaymentOp>(),
52696            Self::PathPaymentStrictReceiveOp => {
52697                gen.into_root_schema_for::<PathPaymentStrictReceiveOp>()
52698            }
52699            Self::PathPaymentStrictSendOp => gen.into_root_schema_for::<PathPaymentStrictSendOp>(),
52700            Self::ManageSellOfferOp => gen.into_root_schema_for::<ManageSellOfferOp>(),
52701            Self::ManageBuyOfferOp => gen.into_root_schema_for::<ManageBuyOfferOp>(),
52702            Self::CreatePassiveSellOfferOp => {
52703                gen.into_root_schema_for::<CreatePassiveSellOfferOp>()
52704            }
52705            Self::SetOptionsOp => gen.into_root_schema_for::<SetOptionsOp>(),
52706            Self::ChangeTrustAsset => gen.into_root_schema_for::<ChangeTrustAsset>(),
52707            Self::ChangeTrustOp => gen.into_root_schema_for::<ChangeTrustOp>(),
52708            Self::AllowTrustOp => gen.into_root_schema_for::<AllowTrustOp>(),
52709            Self::ManageDataOp => gen.into_root_schema_for::<ManageDataOp>(),
52710            Self::BumpSequenceOp => gen.into_root_schema_for::<BumpSequenceOp>(),
52711            Self::CreateClaimableBalanceOp => {
52712                gen.into_root_schema_for::<CreateClaimableBalanceOp>()
52713            }
52714            Self::ClaimClaimableBalanceOp => gen.into_root_schema_for::<ClaimClaimableBalanceOp>(),
52715            Self::BeginSponsoringFutureReservesOp => {
52716                gen.into_root_schema_for::<BeginSponsoringFutureReservesOp>()
52717            }
52718            Self::RevokeSponsorshipType => gen.into_root_schema_for::<RevokeSponsorshipType>(),
52719            Self::RevokeSponsorshipOp => gen.into_root_schema_for::<RevokeSponsorshipOp>(),
52720            Self::RevokeSponsorshipOpSigner => {
52721                gen.into_root_schema_for::<RevokeSponsorshipOpSigner>()
52722            }
52723            Self::ClawbackOp => gen.into_root_schema_for::<ClawbackOp>(),
52724            Self::ClawbackClaimableBalanceOp => {
52725                gen.into_root_schema_for::<ClawbackClaimableBalanceOp>()
52726            }
52727            Self::SetTrustLineFlagsOp => gen.into_root_schema_for::<SetTrustLineFlagsOp>(),
52728            Self::LiquidityPoolDepositOp => gen.into_root_schema_for::<LiquidityPoolDepositOp>(),
52729            Self::LiquidityPoolWithdrawOp => gen.into_root_schema_for::<LiquidityPoolWithdrawOp>(),
52730            Self::HostFunctionType => gen.into_root_schema_for::<HostFunctionType>(),
52731            Self::ContractIdPreimageType => gen.into_root_schema_for::<ContractIdPreimageType>(),
52732            Self::ContractIdPreimage => gen.into_root_schema_for::<ContractIdPreimage>(),
52733            Self::ContractIdPreimageFromAddress => {
52734                gen.into_root_schema_for::<ContractIdPreimageFromAddress>()
52735            }
52736            Self::CreateContractArgs => gen.into_root_schema_for::<CreateContractArgs>(),
52737            Self::CreateContractArgsV2 => gen.into_root_schema_for::<CreateContractArgsV2>(),
52738            Self::InvokeContractArgs => gen.into_root_schema_for::<InvokeContractArgs>(),
52739            Self::HostFunction => gen.into_root_schema_for::<HostFunction>(),
52740            Self::SorobanAuthorizedFunctionType => {
52741                gen.into_root_schema_for::<SorobanAuthorizedFunctionType>()
52742            }
52743            Self::SorobanAuthorizedFunction => {
52744                gen.into_root_schema_for::<SorobanAuthorizedFunction>()
52745            }
52746            Self::SorobanAuthorizedInvocation => {
52747                gen.into_root_schema_for::<SorobanAuthorizedInvocation>()
52748            }
52749            Self::SorobanAddressCredentials => {
52750                gen.into_root_schema_for::<SorobanAddressCredentials>()
52751            }
52752            Self::SorobanCredentialsType => gen.into_root_schema_for::<SorobanCredentialsType>(),
52753            Self::SorobanCredentials => gen.into_root_schema_for::<SorobanCredentials>(),
52754            Self::SorobanAuthorizationEntry => {
52755                gen.into_root_schema_for::<SorobanAuthorizationEntry>()
52756            }
52757            Self::SorobanAuthorizationEntries => {
52758                gen.into_root_schema_for::<SorobanAuthorizationEntries>()
52759            }
52760            Self::InvokeHostFunctionOp => gen.into_root_schema_for::<InvokeHostFunctionOp>(),
52761            Self::ExtendFootprintTtlOp => gen.into_root_schema_for::<ExtendFootprintTtlOp>(),
52762            Self::RestoreFootprintOp => gen.into_root_schema_for::<RestoreFootprintOp>(),
52763            Self::Operation => gen.into_root_schema_for::<Operation>(),
52764            Self::OperationBody => gen.into_root_schema_for::<OperationBody>(),
52765            Self::HashIdPreimage => gen.into_root_schema_for::<HashIdPreimage>(),
52766            Self::HashIdPreimageOperationId => {
52767                gen.into_root_schema_for::<HashIdPreimageOperationId>()
52768            }
52769            Self::HashIdPreimageRevokeId => gen.into_root_schema_for::<HashIdPreimageRevokeId>(),
52770            Self::HashIdPreimageContractId => {
52771                gen.into_root_schema_for::<HashIdPreimageContractId>()
52772            }
52773            Self::HashIdPreimageSorobanAuthorization => {
52774                gen.into_root_schema_for::<HashIdPreimageSorobanAuthorization>()
52775            }
52776            Self::MemoType => gen.into_root_schema_for::<MemoType>(),
52777            Self::Memo => gen.into_root_schema_for::<Memo>(),
52778            Self::TimeBounds => gen.into_root_schema_for::<TimeBounds>(),
52779            Self::LedgerBounds => gen.into_root_schema_for::<LedgerBounds>(),
52780            Self::PreconditionsV2 => gen.into_root_schema_for::<PreconditionsV2>(),
52781            Self::PreconditionType => gen.into_root_schema_for::<PreconditionType>(),
52782            Self::Preconditions => gen.into_root_schema_for::<Preconditions>(),
52783            Self::LedgerFootprint => gen.into_root_schema_for::<LedgerFootprint>(),
52784            Self::SorobanResources => gen.into_root_schema_for::<SorobanResources>(),
52785            Self::SorobanResourcesExtV0 => gen.into_root_schema_for::<SorobanResourcesExtV0>(),
52786            Self::SorobanTransactionData => gen.into_root_schema_for::<SorobanTransactionData>(),
52787            Self::SorobanTransactionDataExt => {
52788                gen.into_root_schema_for::<SorobanTransactionDataExt>()
52789            }
52790            Self::TransactionV0 => gen.into_root_schema_for::<TransactionV0>(),
52791            Self::TransactionV0Ext => gen.into_root_schema_for::<TransactionV0Ext>(),
52792            Self::TransactionV0Envelope => gen.into_root_schema_for::<TransactionV0Envelope>(),
52793            Self::Transaction => gen.into_root_schema_for::<Transaction>(),
52794            Self::TransactionExt => gen.into_root_schema_for::<TransactionExt>(),
52795            Self::TransactionV1Envelope => gen.into_root_schema_for::<TransactionV1Envelope>(),
52796            Self::FeeBumpTransaction => gen.into_root_schema_for::<FeeBumpTransaction>(),
52797            Self::FeeBumpTransactionInnerTx => {
52798                gen.into_root_schema_for::<FeeBumpTransactionInnerTx>()
52799            }
52800            Self::FeeBumpTransactionExt => gen.into_root_schema_for::<FeeBumpTransactionExt>(),
52801            Self::FeeBumpTransactionEnvelope => {
52802                gen.into_root_schema_for::<FeeBumpTransactionEnvelope>()
52803            }
52804            Self::TransactionEnvelope => gen.into_root_schema_for::<TransactionEnvelope>(),
52805            Self::TransactionSignaturePayload => {
52806                gen.into_root_schema_for::<TransactionSignaturePayload>()
52807            }
52808            Self::TransactionSignaturePayloadTaggedTransaction => {
52809                gen.into_root_schema_for::<TransactionSignaturePayloadTaggedTransaction>()
52810            }
52811            Self::ClaimAtomType => gen.into_root_schema_for::<ClaimAtomType>(),
52812            Self::ClaimOfferAtomV0 => gen.into_root_schema_for::<ClaimOfferAtomV0>(),
52813            Self::ClaimOfferAtom => gen.into_root_schema_for::<ClaimOfferAtom>(),
52814            Self::ClaimLiquidityAtom => gen.into_root_schema_for::<ClaimLiquidityAtom>(),
52815            Self::ClaimAtom => gen.into_root_schema_for::<ClaimAtom>(),
52816            Self::CreateAccountResultCode => gen.into_root_schema_for::<CreateAccountResultCode>(),
52817            Self::CreateAccountResult => gen.into_root_schema_for::<CreateAccountResult>(),
52818            Self::PaymentResultCode => gen.into_root_schema_for::<PaymentResultCode>(),
52819            Self::PaymentResult => gen.into_root_schema_for::<PaymentResult>(),
52820            Self::PathPaymentStrictReceiveResultCode => {
52821                gen.into_root_schema_for::<PathPaymentStrictReceiveResultCode>()
52822            }
52823            Self::SimplePaymentResult => gen.into_root_schema_for::<SimplePaymentResult>(),
52824            Self::PathPaymentStrictReceiveResult => {
52825                gen.into_root_schema_for::<PathPaymentStrictReceiveResult>()
52826            }
52827            Self::PathPaymentStrictReceiveResultSuccess => {
52828                gen.into_root_schema_for::<PathPaymentStrictReceiveResultSuccess>()
52829            }
52830            Self::PathPaymentStrictSendResultCode => {
52831                gen.into_root_schema_for::<PathPaymentStrictSendResultCode>()
52832            }
52833            Self::PathPaymentStrictSendResult => {
52834                gen.into_root_schema_for::<PathPaymentStrictSendResult>()
52835            }
52836            Self::PathPaymentStrictSendResultSuccess => {
52837                gen.into_root_schema_for::<PathPaymentStrictSendResultSuccess>()
52838            }
52839            Self::ManageSellOfferResultCode => {
52840                gen.into_root_schema_for::<ManageSellOfferResultCode>()
52841            }
52842            Self::ManageOfferEffect => gen.into_root_schema_for::<ManageOfferEffect>(),
52843            Self::ManageOfferSuccessResult => {
52844                gen.into_root_schema_for::<ManageOfferSuccessResult>()
52845            }
52846            Self::ManageOfferSuccessResultOffer => {
52847                gen.into_root_schema_for::<ManageOfferSuccessResultOffer>()
52848            }
52849            Self::ManageSellOfferResult => gen.into_root_schema_for::<ManageSellOfferResult>(),
52850            Self::ManageBuyOfferResultCode => {
52851                gen.into_root_schema_for::<ManageBuyOfferResultCode>()
52852            }
52853            Self::ManageBuyOfferResult => gen.into_root_schema_for::<ManageBuyOfferResult>(),
52854            Self::SetOptionsResultCode => gen.into_root_schema_for::<SetOptionsResultCode>(),
52855            Self::SetOptionsResult => gen.into_root_schema_for::<SetOptionsResult>(),
52856            Self::ChangeTrustResultCode => gen.into_root_schema_for::<ChangeTrustResultCode>(),
52857            Self::ChangeTrustResult => gen.into_root_schema_for::<ChangeTrustResult>(),
52858            Self::AllowTrustResultCode => gen.into_root_schema_for::<AllowTrustResultCode>(),
52859            Self::AllowTrustResult => gen.into_root_schema_for::<AllowTrustResult>(),
52860            Self::AccountMergeResultCode => gen.into_root_schema_for::<AccountMergeResultCode>(),
52861            Self::AccountMergeResult => gen.into_root_schema_for::<AccountMergeResult>(),
52862            Self::InflationResultCode => gen.into_root_schema_for::<InflationResultCode>(),
52863            Self::InflationPayout => gen.into_root_schema_for::<InflationPayout>(),
52864            Self::InflationResult => gen.into_root_schema_for::<InflationResult>(),
52865            Self::ManageDataResultCode => gen.into_root_schema_for::<ManageDataResultCode>(),
52866            Self::ManageDataResult => gen.into_root_schema_for::<ManageDataResult>(),
52867            Self::BumpSequenceResultCode => gen.into_root_schema_for::<BumpSequenceResultCode>(),
52868            Self::BumpSequenceResult => gen.into_root_schema_for::<BumpSequenceResult>(),
52869            Self::CreateClaimableBalanceResultCode => {
52870                gen.into_root_schema_for::<CreateClaimableBalanceResultCode>()
52871            }
52872            Self::CreateClaimableBalanceResult => {
52873                gen.into_root_schema_for::<CreateClaimableBalanceResult>()
52874            }
52875            Self::ClaimClaimableBalanceResultCode => {
52876                gen.into_root_schema_for::<ClaimClaimableBalanceResultCode>()
52877            }
52878            Self::ClaimClaimableBalanceResult => {
52879                gen.into_root_schema_for::<ClaimClaimableBalanceResult>()
52880            }
52881            Self::BeginSponsoringFutureReservesResultCode => {
52882                gen.into_root_schema_for::<BeginSponsoringFutureReservesResultCode>()
52883            }
52884            Self::BeginSponsoringFutureReservesResult => {
52885                gen.into_root_schema_for::<BeginSponsoringFutureReservesResult>()
52886            }
52887            Self::EndSponsoringFutureReservesResultCode => {
52888                gen.into_root_schema_for::<EndSponsoringFutureReservesResultCode>()
52889            }
52890            Self::EndSponsoringFutureReservesResult => {
52891                gen.into_root_schema_for::<EndSponsoringFutureReservesResult>()
52892            }
52893            Self::RevokeSponsorshipResultCode => {
52894                gen.into_root_schema_for::<RevokeSponsorshipResultCode>()
52895            }
52896            Self::RevokeSponsorshipResult => gen.into_root_schema_for::<RevokeSponsorshipResult>(),
52897            Self::ClawbackResultCode => gen.into_root_schema_for::<ClawbackResultCode>(),
52898            Self::ClawbackResult => gen.into_root_schema_for::<ClawbackResult>(),
52899            Self::ClawbackClaimableBalanceResultCode => {
52900                gen.into_root_schema_for::<ClawbackClaimableBalanceResultCode>()
52901            }
52902            Self::ClawbackClaimableBalanceResult => {
52903                gen.into_root_schema_for::<ClawbackClaimableBalanceResult>()
52904            }
52905            Self::SetTrustLineFlagsResultCode => {
52906                gen.into_root_schema_for::<SetTrustLineFlagsResultCode>()
52907            }
52908            Self::SetTrustLineFlagsResult => gen.into_root_schema_for::<SetTrustLineFlagsResult>(),
52909            Self::LiquidityPoolDepositResultCode => {
52910                gen.into_root_schema_for::<LiquidityPoolDepositResultCode>()
52911            }
52912            Self::LiquidityPoolDepositResult => {
52913                gen.into_root_schema_for::<LiquidityPoolDepositResult>()
52914            }
52915            Self::LiquidityPoolWithdrawResultCode => {
52916                gen.into_root_schema_for::<LiquidityPoolWithdrawResultCode>()
52917            }
52918            Self::LiquidityPoolWithdrawResult => {
52919                gen.into_root_schema_for::<LiquidityPoolWithdrawResult>()
52920            }
52921            Self::InvokeHostFunctionResultCode => {
52922                gen.into_root_schema_for::<InvokeHostFunctionResultCode>()
52923            }
52924            Self::InvokeHostFunctionResult => {
52925                gen.into_root_schema_for::<InvokeHostFunctionResult>()
52926            }
52927            Self::ExtendFootprintTtlResultCode => {
52928                gen.into_root_schema_for::<ExtendFootprintTtlResultCode>()
52929            }
52930            Self::ExtendFootprintTtlResult => {
52931                gen.into_root_schema_for::<ExtendFootprintTtlResult>()
52932            }
52933            Self::RestoreFootprintResultCode => {
52934                gen.into_root_schema_for::<RestoreFootprintResultCode>()
52935            }
52936            Self::RestoreFootprintResult => gen.into_root_schema_for::<RestoreFootprintResult>(),
52937            Self::OperationResultCode => gen.into_root_schema_for::<OperationResultCode>(),
52938            Self::OperationResult => gen.into_root_schema_for::<OperationResult>(),
52939            Self::OperationResultTr => gen.into_root_schema_for::<OperationResultTr>(),
52940            Self::TransactionResultCode => gen.into_root_schema_for::<TransactionResultCode>(),
52941            Self::InnerTransactionResult => gen.into_root_schema_for::<InnerTransactionResult>(),
52942            Self::InnerTransactionResultResult => {
52943                gen.into_root_schema_for::<InnerTransactionResultResult>()
52944            }
52945            Self::InnerTransactionResultExt => {
52946                gen.into_root_schema_for::<InnerTransactionResultExt>()
52947            }
52948            Self::InnerTransactionResultPair => {
52949                gen.into_root_schema_for::<InnerTransactionResultPair>()
52950            }
52951            Self::TransactionResult => gen.into_root_schema_for::<TransactionResult>(),
52952            Self::TransactionResultResult => gen.into_root_schema_for::<TransactionResultResult>(),
52953            Self::TransactionResultExt => gen.into_root_schema_for::<TransactionResultExt>(),
52954            Self::Hash => gen.into_root_schema_for::<Hash>(),
52955            Self::Uint256 => gen.into_root_schema_for::<Uint256>(),
52956            Self::Uint32 => gen.into_root_schema_for::<Uint32>(),
52957            Self::Int32 => gen.into_root_schema_for::<Int32>(),
52958            Self::Uint64 => gen.into_root_schema_for::<Uint64>(),
52959            Self::Int64 => gen.into_root_schema_for::<Int64>(),
52960            Self::TimePoint => gen.into_root_schema_for::<TimePoint>(),
52961            Self::Duration => gen.into_root_schema_for::<Duration>(),
52962            Self::ExtensionPoint => gen.into_root_schema_for::<ExtensionPoint>(),
52963            Self::CryptoKeyType => gen.into_root_schema_for::<CryptoKeyType>(),
52964            Self::PublicKeyType => gen.into_root_schema_for::<PublicKeyType>(),
52965            Self::SignerKeyType => gen.into_root_schema_for::<SignerKeyType>(),
52966            Self::PublicKey => gen.into_root_schema_for::<PublicKey>(),
52967            Self::SignerKey => gen.into_root_schema_for::<SignerKey>(),
52968            Self::SignerKeyEd25519SignedPayload => {
52969                gen.into_root_schema_for::<SignerKeyEd25519SignedPayload>()
52970            }
52971            Self::Signature => gen.into_root_schema_for::<Signature>(),
52972            Self::SignatureHint => gen.into_root_schema_for::<SignatureHint>(),
52973            Self::NodeId => gen.into_root_schema_for::<NodeId>(),
52974            Self::AccountId => gen.into_root_schema_for::<AccountId>(),
52975            Self::ContractId => gen.into_root_schema_for::<ContractId>(),
52976            Self::Curve25519Secret => gen.into_root_schema_for::<Curve25519Secret>(),
52977            Self::Curve25519Public => gen.into_root_schema_for::<Curve25519Public>(),
52978            Self::HmacSha256Key => gen.into_root_schema_for::<HmacSha256Key>(),
52979            Self::HmacSha256Mac => gen.into_root_schema_for::<HmacSha256Mac>(),
52980            Self::ShortHashSeed => gen.into_root_schema_for::<ShortHashSeed>(),
52981            Self::BinaryFuseFilterType => gen.into_root_schema_for::<BinaryFuseFilterType>(),
52982            Self::SerializedBinaryFuseFilter => {
52983                gen.into_root_schema_for::<SerializedBinaryFuseFilter>()
52984            }
52985            Self::PoolId => gen.into_root_schema_for::<PoolId>(),
52986            Self::ClaimableBalanceIdType => gen.into_root_schema_for::<ClaimableBalanceIdType>(),
52987            Self::ClaimableBalanceId => gen.into_root_schema_for::<ClaimableBalanceId>(),
52988        }
52989    }
52990}
52991
52992impl Name for TypeVariant {
52993    #[must_use]
52994    fn name(&self) -> &'static str {
52995        Self::name(self)
52996    }
52997}
52998
52999impl Variants<TypeVariant> for TypeVariant {
53000    fn variants() -> slice::Iter<'static, TypeVariant> {
53001        Self::VARIANTS.iter()
53002    }
53003}
53004
53005impl core::str::FromStr for TypeVariant {
53006    type Err = Error;
53007    #[allow(clippy::too_many_lines)]
53008    fn from_str(s: &str) -> Result<Self, Error> {
53009        match s {
53010            "Value" => Ok(Self::Value),
53011            "ScpBallot" => Ok(Self::ScpBallot),
53012            "ScpStatementType" => Ok(Self::ScpStatementType),
53013            "ScpNomination" => Ok(Self::ScpNomination),
53014            "ScpStatement" => Ok(Self::ScpStatement),
53015            "ScpStatementPledges" => Ok(Self::ScpStatementPledges),
53016            "ScpStatementPrepare" => Ok(Self::ScpStatementPrepare),
53017            "ScpStatementConfirm" => Ok(Self::ScpStatementConfirm),
53018            "ScpStatementExternalize" => Ok(Self::ScpStatementExternalize),
53019            "ScpEnvelope" => Ok(Self::ScpEnvelope),
53020            "ScpQuorumSet" => Ok(Self::ScpQuorumSet),
53021            "ConfigSettingContractExecutionLanesV0" => {
53022                Ok(Self::ConfigSettingContractExecutionLanesV0)
53023            }
53024            "ConfigSettingContractComputeV0" => Ok(Self::ConfigSettingContractComputeV0),
53025            "ConfigSettingContractParallelComputeV0" => {
53026                Ok(Self::ConfigSettingContractParallelComputeV0)
53027            }
53028            "ConfigSettingContractLedgerCostV0" => Ok(Self::ConfigSettingContractLedgerCostV0),
53029            "ConfigSettingContractLedgerCostExtV0" => {
53030                Ok(Self::ConfigSettingContractLedgerCostExtV0)
53031            }
53032            "ConfigSettingContractHistoricalDataV0" => {
53033                Ok(Self::ConfigSettingContractHistoricalDataV0)
53034            }
53035            "ConfigSettingContractEventsV0" => Ok(Self::ConfigSettingContractEventsV0),
53036            "ConfigSettingContractBandwidthV0" => Ok(Self::ConfigSettingContractBandwidthV0),
53037            "ContractCostType" => Ok(Self::ContractCostType),
53038            "ContractCostParamEntry" => Ok(Self::ContractCostParamEntry),
53039            "StateArchivalSettings" => Ok(Self::StateArchivalSettings),
53040            "EvictionIterator" => Ok(Self::EvictionIterator),
53041            "ConfigSettingScpTiming" => Ok(Self::ConfigSettingScpTiming),
53042            "ContractCostParams" => Ok(Self::ContractCostParams),
53043            "ConfigSettingId" => Ok(Self::ConfigSettingId),
53044            "ConfigSettingEntry" => Ok(Self::ConfigSettingEntry),
53045            "ScEnvMetaKind" => Ok(Self::ScEnvMetaKind),
53046            "ScEnvMetaEntry" => Ok(Self::ScEnvMetaEntry),
53047            "ScEnvMetaEntryInterfaceVersion" => Ok(Self::ScEnvMetaEntryInterfaceVersion),
53048            "ScMetaV0" => Ok(Self::ScMetaV0),
53049            "ScMetaKind" => Ok(Self::ScMetaKind),
53050            "ScMetaEntry" => Ok(Self::ScMetaEntry),
53051            "ScSpecType" => Ok(Self::ScSpecType),
53052            "ScSpecTypeOption" => Ok(Self::ScSpecTypeOption),
53053            "ScSpecTypeResult" => Ok(Self::ScSpecTypeResult),
53054            "ScSpecTypeVec" => Ok(Self::ScSpecTypeVec),
53055            "ScSpecTypeMap" => Ok(Self::ScSpecTypeMap),
53056            "ScSpecTypeTuple" => Ok(Self::ScSpecTypeTuple),
53057            "ScSpecTypeBytesN" => Ok(Self::ScSpecTypeBytesN),
53058            "ScSpecTypeUdt" => Ok(Self::ScSpecTypeUdt),
53059            "ScSpecTypeDef" => Ok(Self::ScSpecTypeDef),
53060            "ScSpecUdtStructFieldV0" => Ok(Self::ScSpecUdtStructFieldV0),
53061            "ScSpecUdtStructV0" => Ok(Self::ScSpecUdtStructV0),
53062            "ScSpecUdtUnionCaseVoidV0" => Ok(Self::ScSpecUdtUnionCaseVoidV0),
53063            "ScSpecUdtUnionCaseTupleV0" => Ok(Self::ScSpecUdtUnionCaseTupleV0),
53064            "ScSpecUdtUnionCaseV0Kind" => Ok(Self::ScSpecUdtUnionCaseV0Kind),
53065            "ScSpecUdtUnionCaseV0" => Ok(Self::ScSpecUdtUnionCaseV0),
53066            "ScSpecUdtUnionV0" => Ok(Self::ScSpecUdtUnionV0),
53067            "ScSpecUdtEnumCaseV0" => Ok(Self::ScSpecUdtEnumCaseV0),
53068            "ScSpecUdtEnumV0" => Ok(Self::ScSpecUdtEnumV0),
53069            "ScSpecUdtErrorEnumCaseV0" => Ok(Self::ScSpecUdtErrorEnumCaseV0),
53070            "ScSpecUdtErrorEnumV0" => Ok(Self::ScSpecUdtErrorEnumV0),
53071            "ScSpecFunctionInputV0" => Ok(Self::ScSpecFunctionInputV0),
53072            "ScSpecFunctionV0" => Ok(Self::ScSpecFunctionV0),
53073            "ScSpecEventParamLocationV0" => Ok(Self::ScSpecEventParamLocationV0),
53074            "ScSpecEventParamV0" => Ok(Self::ScSpecEventParamV0),
53075            "ScSpecEventDataFormat" => Ok(Self::ScSpecEventDataFormat),
53076            "ScSpecEventV0" => Ok(Self::ScSpecEventV0),
53077            "ScSpecEntryKind" => Ok(Self::ScSpecEntryKind),
53078            "ScSpecEntry" => Ok(Self::ScSpecEntry),
53079            "ScValType" => Ok(Self::ScValType),
53080            "ScErrorType" => Ok(Self::ScErrorType),
53081            "ScErrorCode" => Ok(Self::ScErrorCode),
53082            "ScError" => Ok(Self::ScError),
53083            "UInt128Parts" => Ok(Self::UInt128Parts),
53084            "Int128Parts" => Ok(Self::Int128Parts),
53085            "UInt256Parts" => Ok(Self::UInt256Parts),
53086            "Int256Parts" => Ok(Self::Int256Parts),
53087            "ContractExecutableType" => Ok(Self::ContractExecutableType),
53088            "ContractExecutable" => Ok(Self::ContractExecutable),
53089            "ScAddressType" => Ok(Self::ScAddressType),
53090            "MuxedEd25519Account" => Ok(Self::MuxedEd25519Account),
53091            "ScAddress" => Ok(Self::ScAddress),
53092            "ScVec" => Ok(Self::ScVec),
53093            "ScMap" => Ok(Self::ScMap),
53094            "ScBytes" => Ok(Self::ScBytes),
53095            "ScString" => Ok(Self::ScString),
53096            "ScSymbol" => Ok(Self::ScSymbol),
53097            "ScNonceKey" => Ok(Self::ScNonceKey),
53098            "ScContractInstance" => Ok(Self::ScContractInstance),
53099            "ScVal" => Ok(Self::ScVal),
53100            "ScMapEntry" => Ok(Self::ScMapEntry),
53101            "LedgerCloseMetaBatch" => Ok(Self::LedgerCloseMetaBatch),
53102            "StoredTransactionSet" => Ok(Self::StoredTransactionSet),
53103            "StoredDebugTransactionSet" => Ok(Self::StoredDebugTransactionSet),
53104            "PersistedScpStateV0" => Ok(Self::PersistedScpStateV0),
53105            "PersistedScpStateV1" => Ok(Self::PersistedScpStateV1),
53106            "PersistedScpState" => Ok(Self::PersistedScpState),
53107            "Thresholds" => Ok(Self::Thresholds),
53108            "String32" => Ok(Self::String32),
53109            "String64" => Ok(Self::String64),
53110            "SequenceNumber" => Ok(Self::SequenceNumber),
53111            "DataValue" => Ok(Self::DataValue),
53112            "AssetCode4" => Ok(Self::AssetCode4),
53113            "AssetCode12" => Ok(Self::AssetCode12),
53114            "AssetType" => Ok(Self::AssetType),
53115            "AssetCode" => Ok(Self::AssetCode),
53116            "AlphaNum4" => Ok(Self::AlphaNum4),
53117            "AlphaNum12" => Ok(Self::AlphaNum12),
53118            "Asset" => Ok(Self::Asset),
53119            "Price" => Ok(Self::Price),
53120            "Liabilities" => Ok(Self::Liabilities),
53121            "ThresholdIndexes" => Ok(Self::ThresholdIndexes),
53122            "LedgerEntryType" => Ok(Self::LedgerEntryType),
53123            "Signer" => Ok(Self::Signer),
53124            "AccountFlags" => Ok(Self::AccountFlags),
53125            "SponsorshipDescriptor" => Ok(Self::SponsorshipDescriptor),
53126            "AccountEntryExtensionV3" => Ok(Self::AccountEntryExtensionV3),
53127            "AccountEntryExtensionV2" => Ok(Self::AccountEntryExtensionV2),
53128            "AccountEntryExtensionV2Ext" => Ok(Self::AccountEntryExtensionV2Ext),
53129            "AccountEntryExtensionV1" => Ok(Self::AccountEntryExtensionV1),
53130            "AccountEntryExtensionV1Ext" => Ok(Self::AccountEntryExtensionV1Ext),
53131            "AccountEntry" => Ok(Self::AccountEntry),
53132            "AccountEntryExt" => Ok(Self::AccountEntryExt),
53133            "TrustLineFlags" => Ok(Self::TrustLineFlags),
53134            "LiquidityPoolType" => Ok(Self::LiquidityPoolType),
53135            "TrustLineAsset" => Ok(Self::TrustLineAsset),
53136            "TrustLineEntryExtensionV2" => Ok(Self::TrustLineEntryExtensionV2),
53137            "TrustLineEntryExtensionV2Ext" => Ok(Self::TrustLineEntryExtensionV2Ext),
53138            "TrustLineEntry" => Ok(Self::TrustLineEntry),
53139            "TrustLineEntryExt" => Ok(Self::TrustLineEntryExt),
53140            "TrustLineEntryV1" => Ok(Self::TrustLineEntryV1),
53141            "TrustLineEntryV1Ext" => Ok(Self::TrustLineEntryV1Ext),
53142            "OfferEntryFlags" => Ok(Self::OfferEntryFlags),
53143            "OfferEntry" => Ok(Self::OfferEntry),
53144            "OfferEntryExt" => Ok(Self::OfferEntryExt),
53145            "DataEntry" => Ok(Self::DataEntry),
53146            "DataEntryExt" => Ok(Self::DataEntryExt),
53147            "ClaimPredicateType" => Ok(Self::ClaimPredicateType),
53148            "ClaimPredicate" => Ok(Self::ClaimPredicate),
53149            "ClaimantType" => Ok(Self::ClaimantType),
53150            "Claimant" => Ok(Self::Claimant),
53151            "ClaimantV0" => Ok(Self::ClaimantV0),
53152            "ClaimableBalanceFlags" => Ok(Self::ClaimableBalanceFlags),
53153            "ClaimableBalanceEntryExtensionV1" => Ok(Self::ClaimableBalanceEntryExtensionV1),
53154            "ClaimableBalanceEntryExtensionV1Ext" => Ok(Self::ClaimableBalanceEntryExtensionV1Ext),
53155            "ClaimableBalanceEntry" => Ok(Self::ClaimableBalanceEntry),
53156            "ClaimableBalanceEntryExt" => Ok(Self::ClaimableBalanceEntryExt),
53157            "LiquidityPoolConstantProductParameters" => {
53158                Ok(Self::LiquidityPoolConstantProductParameters)
53159            }
53160            "LiquidityPoolEntry" => Ok(Self::LiquidityPoolEntry),
53161            "LiquidityPoolEntryBody" => Ok(Self::LiquidityPoolEntryBody),
53162            "LiquidityPoolEntryConstantProduct" => Ok(Self::LiquidityPoolEntryConstantProduct),
53163            "ContractDataDurability" => Ok(Self::ContractDataDurability),
53164            "ContractDataEntry" => Ok(Self::ContractDataEntry),
53165            "ContractCodeCostInputs" => Ok(Self::ContractCodeCostInputs),
53166            "ContractCodeEntry" => Ok(Self::ContractCodeEntry),
53167            "ContractCodeEntryExt" => Ok(Self::ContractCodeEntryExt),
53168            "ContractCodeEntryV1" => Ok(Self::ContractCodeEntryV1),
53169            "TtlEntry" => Ok(Self::TtlEntry),
53170            "LedgerEntryExtensionV1" => Ok(Self::LedgerEntryExtensionV1),
53171            "LedgerEntryExtensionV1Ext" => Ok(Self::LedgerEntryExtensionV1Ext),
53172            "LedgerEntry" => Ok(Self::LedgerEntry),
53173            "LedgerEntryData" => Ok(Self::LedgerEntryData),
53174            "LedgerEntryExt" => Ok(Self::LedgerEntryExt),
53175            "LedgerKey" => Ok(Self::LedgerKey),
53176            "LedgerKeyAccount" => Ok(Self::LedgerKeyAccount),
53177            "LedgerKeyTrustLine" => Ok(Self::LedgerKeyTrustLine),
53178            "LedgerKeyOffer" => Ok(Self::LedgerKeyOffer),
53179            "LedgerKeyData" => Ok(Self::LedgerKeyData),
53180            "LedgerKeyClaimableBalance" => Ok(Self::LedgerKeyClaimableBalance),
53181            "LedgerKeyLiquidityPool" => Ok(Self::LedgerKeyLiquidityPool),
53182            "LedgerKeyContractData" => Ok(Self::LedgerKeyContractData),
53183            "LedgerKeyContractCode" => Ok(Self::LedgerKeyContractCode),
53184            "LedgerKeyConfigSetting" => Ok(Self::LedgerKeyConfigSetting),
53185            "LedgerKeyTtl" => Ok(Self::LedgerKeyTtl),
53186            "EnvelopeType" => Ok(Self::EnvelopeType),
53187            "BucketListType" => Ok(Self::BucketListType),
53188            "BucketEntryType" => Ok(Self::BucketEntryType),
53189            "HotArchiveBucketEntryType" => Ok(Self::HotArchiveBucketEntryType),
53190            "BucketMetadata" => Ok(Self::BucketMetadata),
53191            "BucketMetadataExt" => Ok(Self::BucketMetadataExt),
53192            "BucketEntry" => Ok(Self::BucketEntry),
53193            "HotArchiveBucketEntry" => Ok(Self::HotArchiveBucketEntry),
53194            "UpgradeType" => Ok(Self::UpgradeType),
53195            "StellarValueType" => Ok(Self::StellarValueType),
53196            "LedgerCloseValueSignature" => Ok(Self::LedgerCloseValueSignature),
53197            "StellarValue" => Ok(Self::StellarValue),
53198            "StellarValueExt" => Ok(Self::StellarValueExt),
53199            "LedgerHeaderFlags" => Ok(Self::LedgerHeaderFlags),
53200            "LedgerHeaderExtensionV1" => Ok(Self::LedgerHeaderExtensionV1),
53201            "LedgerHeaderExtensionV1Ext" => Ok(Self::LedgerHeaderExtensionV1Ext),
53202            "LedgerHeader" => Ok(Self::LedgerHeader),
53203            "LedgerHeaderExt" => Ok(Self::LedgerHeaderExt),
53204            "LedgerUpgradeType" => Ok(Self::LedgerUpgradeType),
53205            "ConfigUpgradeSetKey" => Ok(Self::ConfigUpgradeSetKey),
53206            "LedgerUpgrade" => Ok(Self::LedgerUpgrade),
53207            "ConfigUpgradeSet" => Ok(Self::ConfigUpgradeSet),
53208            "TxSetComponentType" => Ok(Self::TxSetComponentType),
53209            "DependentTxCluster" => Ok(Self::DependentTxCluster),
53210            "ParallelTxExecutionStage" => Ok(Self::ParallelTxExecutionStage),
53211            "ParallelTxsComponent" => Ok(Self::ParallelTxsComponent),
53212            "TxSetComponent" => Ok(Self::TxSetComponent),
53213            "TxSetComponentTxsMaybeDiscountedFee" => Ok(Self::TxSetComponentTxsMaybeDiscountedFee),
53214            "TransactionPhase" => Ok(Self::TransactionPhase),
53215            "TransactionSet" => Ok(Self::TransactionSet),
53216            "TransactionSetV1" => Ok(Self::TransactionSetV1),
53217            "GeneralizedTransactionSet" => Ok(Self::GeneralizedTransactionSet),
53218            "TransactionResultPair" => Ok(Self::TransactionResultPair),
53219            "TransactionResultSet" => Ok(Self::TransactionResultSet),
53220            "TransactionHistoryEntry" => Ok(Self::TransactionHistoryEntry),
53221            "TransactionHistoryEntryExt" => Ok(Self::TransactionHistoryEntryExt),
53222            "TransactionHistoryResultEntry" => Ok(Self::TransactionHistoryResultEntry),
53223            "TransactionHistoryResultEntryExt" => Ok(Self::TransactionHistoryResultEntryExt),
53224            "LedgerHeaderHistoryEntry" => Ok(Self::LedgerHeaderHistoryEntry),
53225            "LedgerHeaderHistoryEntryExt" => Ok(Self::LedgerHeaderHistoryEntryExt),
53226            "LedgerScpMessages" => Ok(Self::LedgerScpMessages),
53227            "ScpHistoryEntryV0" => Ok(Self::ScpHistoryEntryV0),
53228            "ScpHistoryEntry" => Ok(Self::ScpHistoryEntry),
53229            "LedgerEntryChangeType" => Ok(Self::LedgerEntryChangeType),
53230            "LedgerEntryChange" => Ok(Self::LedgerEntryChange),
53231            "LedgerEntryChanges" => Ok(Self::LedgerEntryChanges),
53232            "OperationMeta" => Ok(Self::OperationMeta),
53233            "TransactionMetaV1" => Ok(Self::TransactionMetaV1),
53234            "TransactionMetaV2" => Ok(Self::TransactionMetaV2),
53235            "ContractEventType" => Ok(Self::ContractEventType),
53236            "ContractEvent" => Ok(Self::ContractEvent),
53237            "ContractEventBody" => Ok(Self::ContractEventBody),
53238            "ContractEventV0" => Ok(Self::ContractEventV0),
53239            "DiagnosticEvent" => Ok(Self::DiagnosticEvent),
53240            "SorobanTransactionMetaExtV1" => Ok(Self::SorobanTransactionMetaExtV1),
53241            "SorobanTransactionMetaExt" => Ok(Self::SorobanTransactionMetaExt),
53242            "SorobanTransactionMeta" => Ok(Self::SorobanTransactionMeta),
53243            "TransactionMetaV3" => Ok(Self::TransactionMetaV3),
53244            "OperationMetaV2" => Ok(Self::OperationMetaV2),
53245            "SorobanTransactionMetaV2" => Ok(Self::SorobanTransactionMetaV2),
53246            "TransactionEventStage" => Ok(Self::TransactionEventStage),
53247            "TransactionEvent" => Ok(Self::TransactionEvent),
53248            "TransactionMetaV4" => Ok(Self::TransactionMetaV4),
53249            "InvokeHostFunctionSuccessPreImage" => Ok(Self::InvokeHostFunctionSuccessPreImage),
53250            "TransactionMeta" => Ok(Self::TransactionMeta),
53251            "TransactionResultMeta" => Ok(Self::TransactionResultMeta),
53252            "TransactionResultMetaV1" => Ok(Self::TransactionResultMetaV1),
53253            "UpgradeEntryMeta" => Ok(Self::UpgradeEntryMeta),
53254            "LedgerCloseMetaV0" => Ok(Self::LedgerCloseMetaV0),
53255            "LedgerCloseMetaExtV1" => Ok(Self::LedgerCloseMetaExtV1),
53256            "LedgerCloseMetaExt" => Ok(Self::LedgerCloseMetaExt),
53257            "LedgerCloseMetaV1" => Ok(Self::LedgerCloseMetaV1),
53258            "LedgerCloseMetaV2" => Ok(Self::LedgerCloseMetaV2),
53259            "LedgerCloseMeta" => Ok(Self::LedgerCloseMeta),
53260            "ErrorCode" => Ok(Self::ErrorCode),
53261            "SError" => Ok(Self::SError),
53262            "SendMore" => Ok(Self::SendMore),
53263            "SendMoreExtended" => Ok(Self::SendMoreExtended),
53264            "AuthCert" => Ok(Self::AuthCert),
53265            "Hello" => Ok(Self::Hello),
53266            "Auth" => Ok(Self::Auth),
53267            "IpAddrType" => Ok(Self::IpAddrType),
53268            "PeerAddress" => Ok(Self::PeerAddress),
53269            "PeerAddressIp" => Ok(Self::PeerAddressIp),
53270            "MessageType" => Ok(Self::MessageType),
53271            "DontHave" => Ok(Self::DontHave),
53272            "SurveyMessageCommandType" => Ok(Self::SurveyMessageCommandType),
53273            "SurveyMessageResponseType" => Ok(Self::SurveyMessageResponseType),
53274            "TimeSlicedSurveyStartCollectingMessage" => {
53275                Ok(Self::TimeSlicedSurveyStartCollectingMessage)
53276            }
53277            "SignedTimeSlicedSurveyStartCollectingMessage" => {
53278                Ok(Self::SignedTimeSlicedSurveyStartCollectingMessage)
53279            }
53280            "TimeSlicedSurveyStopCollectingMessage" => {
53281                Ok(Self::TimeSlicedSurveyStopCollectingMessage)
53282            }
53283            "SignedTimeSlicedSurveyStopCollectingMessage" => {
53284                Ok(Self::SignedTimeSlicedSurveyStopCollectingMessage)
53285            }
53286            "SurveyRequestMessage" => Ok(Self::SurveyRequestMessage),
53287            "TimeSlicedSurveyRequestMessage" => Ok(Self::TimeSlicedSurveyRequestMessage),
53288            "SignedTimeSlicedSurveyRequestMessage" => {
53289                Ok(Self::SignedTimeSlicedSurveyRequestMessage)
53290            }
53291            "EncryptedBody" => Ok(Self::EncryptedBody),
53292            "SurveyResponseMessage" => Ok(Self::SurveyResponseMessage),
53293            "TimeSlicedSurveyResponseMessage" => Ok(Self::TimeSlicedSurveyResponseMessage),
53294            "SignedTimeSlicedSurveyResponseMessage" => {
53295                Ok(Self::SignedTimeSlicedSurveyResponseMessage)
53296            }
53297            "PeerStats" => Ok(Self::PeerStats),
53298            "TimeSlicedNodeData" => Ok(Self::TimeSlicedNodeData),
53299            "TimeSlicedPeerData" => Ok(Self::TimeSlicedPeerData),
53300            "TimeSlicedPeerDataList" => Ok(Self::TimeSlicedPeerDataList),
53301            "TopologyResponseBodyV2" => Ok(Self::TopologyResponseBodyV2),
53302            "SurveyResponseBody" => Ok(Self::SurveyResponseBody),
53303            "TxAdvertVector" => Ok(Self::TxAdvertVector),
53304            "FloodAdvert" => Ok(Self::FloodAdvert),
53305            "TxDemandVector" => Ok(Self::TxDemandVector),
53306            "FloodDemand" => Ok(Self::FloodDemand),
53307            "StellarMessage" => Ok(Self::StellarMessage),
53308            "AuthenticatedMessage" => Ok(Self::AuthenticatedMessage),
53309            "AuthenticatedMessageV0" => Ok(Self::AuthenticatedMessageV0),
53310            "LiquidityPoolParameters" => Ok(Self::LiquidityPoolParameters),
53311            "MuxedAccount" => Ok(Self::MuxedAccount),
53312            "MuxedAccountMed25519" => Ok(Self::MuxedAccountMed25519),
53313            "DecoratedSignature" => Ok(Self::DecoratedSignature),
53314            "OperationType" => Ok(Self::OperationType),
53315            "CreateAccountOp" => Ok(Self::CreateAccountOp),
53316            "PaymentOp" => Ok(Self::PaymentOp),
53317            "PathPaymentStrictReceiveOp" => Ok(Self::PathPaymentStrictReceiveOp),
53318            "PathPaymentStrictSendOp" => Ok(Self::PathPaymentStrictSendOp),
53319            "ManageSellOfferOp" => Ok(Self::ManageSellOfferOp),
53320            "ManageBuyOfferOp" => Ok(Self::ManageBuyOfferOp),
53321            "CreatePassiveSellOfferOp" => Ok(Self::CreatePassiveSellOfferOp),
53322            "SetOptionsOp" => Ok(Self::SetOptionsOp),
53323            "ChangeTrustAsset" => Ok(Self::ChangeTrustAsset),
53324            "ChangeTrustOp" => Ok(Self::ChangeTrustOp),
53325            "AllowTrustOp" => Ok(Self::AllowTrustOp),
53326            "ManageDataOp" => Ok(Self::ManageDataOp),
53327            "BumpSequenceOp" => Ok(Self::BumpSequenceOp),
53328            "CreateClaimableBalanceOp" => Ok(Self::CreateClaimableBalanceOp),
53329            "ClaimClaimableBalanceOp" => Ok(Self::ClaimClaimableBalanceOp),
53330            "BeginSponsoringFutureReservesOp" => Ok(Self::BeginSponsoringFutureReservesOp),
53331            "RevokeSponsorshipType" => Ok(Self::RevokeSponsorshipType),
53332            "RevokeSponsorshipOp" => Ok(Self::RevokeSponsorshipOp),
53333            "RevokeSponsorshipOpSigner" => Ok(Self::RevokeSponsorshipOpSigner),
53334            "ClawbackOp" => Ok(Self::ClawbackOp),
53335            "ClawbackClaimableBalanceOp" => Ok(Self::ClawbackClaimableBalanceOp),
53336            "SetTrustLineFlagsOp" => Ok(Self::SetTrustLineFlagsOp),
53337            "LiquidityPoolDepositOp" => Ok(Self::LiquidityPoolDepositOp),
53338            "LiquidityPoolWithdrawOp" => Ok(Self::LiquidityPoolWithdrawOp),
53339            "HostFunctionType" => Ok(Self::HostFunctionType),
53340            "ContractIdPreimageType" => Ok(Self::ContractIdPreimageType),
53341            "ContractIdPreimage" => Ok(Self::ContractIdPreimage),
53342            "ContractIdPreimageFromAddress" => Ok(Self::ContractIdPreimageFromAddress),
53343            "CreateContractArgs" => Ok(Self::CreateContractArgs),
53344            "CreateContractArgsV2" => Ok(Self::CreateContractArgsV2),
53345            "InvokeContractArgs" => Ok(Self::InvokeContractArgs),
53346            "HostFunction" => Ok(Self::HostFunction),
53347            "SorobanAuthorizedFunctionType" => Ok(Self::SorobanAuthorizedFunctionType),
53348            "SorobanAuthorizedFunction" => Ok(Self::SorobanAuthorizedFunction),
53349            "SorobanAuthorizedInvocation" => Ok(Self::SorobanAuthorizedInvocation),
53350            "SorobanAddressCredentials" => Ok(Self::SorobanAddressCredentials),
53351            "SorobanCredentialsType" => Ok(Self::SorobanCredentialsType),
53352            "SorobanCredentials" => Ok(Self::SorobanCredentials),
53353            "SorobanAuthorizationEntry" => Ok(Self::SorobanAuthorizationEntry),
53354            "SorobanAuthorizationEntries" => Ok(Self::SorobanAuthorizationEntries),
53355            "InvokeHostFunctionOp" => Ok(Self::InvokeHostFunctionOp),
53356            "ExtendFootprintTtlOp" => Ok(Self::ExtendFootprintTtlOp),
53357            "RestoreFootprintOp" => Ok(Self::RestoreFootprintOp),
53358            "Operation" => Ok(Self::Operation),
53359            "OperationBody" => Ok(Self::OperationBody),
53360            "HashIdPreimage" => Ok(Self::HashIdPreimage),
53361            "HashIdPreimageOperationId" => Ok(Self::HashIdPreimageOperationId),
53362            "HashIdPreimageRevokeId" => Ok(Self::HashIdPreimageRevokeId),
53363            "HashIdPreimageContractId" => Ok(Self::HashIdPreimageContractId),
53364            "HashIdPreimageSorobanAuthorization" => Ok(Self::HashIdPreimageSorobanAuthorization),
53365            "MemoType" => Ok(Self::MemoType),
53366            "Memo" => Ok(Self::Memo),
53367            "TimeBounds" => Ok(Self::TimeBounds),
53368            "LedgerBounds" => Ok(Self::LedgerBounds),
53369            "PreconditionsV2" => Ok(Self::PreconditionsV2),
53370            "PreconditionType" => Ok(Self::PreconditionType),
53371            "Preconditions" => Ok(Self::Preconditions),
53372            "LedgerFootprint" => Ok(Self::LedgerFootprint),
53373            "SorobanResources" => Ok(Self::SorobanResources),
53374            "SorobanResourcesExtV0" => Ok(Self::SorobanResourcesExtV0),
53375            "SorobanTransactionData" => Ok(Self::SorobanTransactionData),
53376            "SorobanTransactionDataExt" => Ok(Self::SorobanTransactionDataExt),
53377            "TransactionV0" => Ok(Self::TransactionV0),
53378            "TransactionV0Ext" => Ok(Self::TransactionV0Ext),
53379            "TransactionV0Envelope" => Ok(Self::TransactionV0Envelope),
53380            "Transaction" => Ok(Self::Transaction),
53381            "TransactionExt" => Ok(Self::TransactionExt),
53382            "TransactionV1Envelope" => Ok(Self::TransactionV1Envelope),
53383            "FeeBumpTransaction" => Ok(Self::FeeBumpTransaction),
53384            "FeeBumpTransactionInnerTx" => Ok(Self::FeeBumpTransactionInnerTx),
53385            "FeeBumpTransactionExt" => Ok(Self::FeeBumpTransactionExt),
53386            "FeeBumpTransactionEnvelope" => Ok(Self::FeeBumpTransactionEnvelope),
53387            "TransactionEnvelope" => Ok(Self::TransactionEnvelope),
53388            "TransactionSignaturePayload" => Ok(Self::TransactionSignaturePayload),
53389            "TransactionSignaturePayloadTaggedTransaction" => {
53390                Ok(Self::TransactionSignaturePayloadTaggedTransaction)
53391            }
53392            "ClaimAtomType" => Ok(Self::ClaimAtomType),
53393            "ClaimOfferAtomV0" => Ok(Self::ClaimOfferAtomV0),
53394            "ClaimOfferAtom" => Ok(Self::ClaimOfferAtom),
53395            "ClaimLiquidityAtom" => Ok(Self::ClaimLiquidityAtom),
53396            "ClaimAtom" => Ok(Self::ClaimAtom),
53397            "CreateAccountResultCode" => Ok(Self::CreateAccountResultCode),
53398            "CreateAccountResult" => Ok(Self::CreateAccountResult),
53399            "PaymentResultCode" => Ok(Self::PaymentResultCode),
53400            "PaymentResult" => Ok(Self::PaymentResult),
53401            "PathPaymentStrictReceiveResultCode" => Ok(Self::PathPaymentStrictReceiveResultCode),
53402            "SimplePaymentResult" => Ok(Self::SimplePaymentResult),
53403            "PathPaymentStrictReceiveResult" => Ok(Self::PathPaymentStrictReceiveResult),
53404            "PathPaymentStrictReceiveResultSuccess" => {
53405                Ok(Self::PathPaymentStrictReceiveResultSuccess)
53406            }
53407            "PathPaymentStrictSendResultCode" => Ok(Self::PathPaymentStrictSendResultCode),
53408            "PathPaymentStrictSendResult" => Ok(Self::PathPaymentStrictSendResult),
53409            "PathPaymentStrictSendResultSuccess" => Ok(Self::PathPaymentStrictSendResultSuccess),
53410            "ManageSellOfferResultCode" => Ok(Self::ManageSellOfferResultCode),
53411            "ManageOfferEffect" => Ok(Self::ManageOfferEffect),
53412            "ManageOfferSuccessResult" => Ok(Self::ManageOfferSuccessResult),
53413            "ManageOfferSuccessResultOffer" => Ok(Self::ManageOfferSuccessResultOffer),
53414            "ManageSellOfferResult" => Ok(Self::ManageSellOfferResult),
53415            "ManageBuyOfferResultCode" => Ok(Self::ManageBuyOfferResultCode),
53416            "ManageBuyOfferResult" => Ok(Self::ManageBuyOfferResult),
53417            "SetOptionsResultCode" => Ok(Self::SetOptionsResultCode),
53418            "SetOptionsResult" => Ok(Self::SetOptionsResult),
53419            "ChangeTrustResultCode" => Ok(Self::ChangeTrustResultCode),
53420            "ChangeTrustResult" => Ok(Self::ChangeTrustResult),
53421            "AllowTrustResultCode" => Ok(Self::AllowTrustResultCode),
53422            "AllowTrustResult" => Ok(Self::AllowTrustResult),
53423            "AccountMergeResultCode" => Ok(Self::AccountMergeResultCode),
53424            "AccountMergeResult" => Ok(Self::AccountMergeResult),
53425            "InflationResultCode" => Ok(Self::InflationResultCode),
53426            "InflationPayout" => Ok(Self::InflationPayout),
53427            "InflationResult" => Ok(Self::InflationResult),
53428            "ManageDataResultCode" => Ok(Self::ManageDataResultCode),
53429            "ManageDataResult" => Ok(Self::ManageDataResult),
53430            "BumpSequenceResultCode" => Ok(Self::BumpSequenceResultCode),
53431            "BumpSequenceResult" => Ok(Self::BumpSequenceResult),
53432            "CreateClaimableBalanceResultCode" => Ok(Self::CreateClaimableBalanceResultCode),
53433            "CreateClaimableBalanceResult" => Ok(Self::CreateClaimableBalanceResult),
53434            "ClaimClaimableBalanceResultCode" => Ok(Self::ClaimClaimableBalanceResultCode),
53435            "ClaimClaimableBalanceResult" => Ok(Self::ClaimClaimableBalanceResult),
53436            "BeginSponsoringFutureReservesResultCode" => {
53437                Ok(Self::BeginSponsoringFutureReservesResultCode)
53438            }
53439            "BeginSponsoringFutureReservesResult" => Ok(Self::BeginSponsoringFutureReservesResult),
53440            "EndSponsoringFutureReservesResultCode" => {
53441                Ok(Self::EndSponsoringFutureReservesResultCode)
53442            }
53443            "EndSponsoringFutureReservesResult" => Ok(Self::EndSponsoringFutureReservesResult),
53444            "RevokeSponsorshipResultCode" => Ok(Self::RevokeSponsorshipResultCode),
53445            "RevokeSponsorshipResult" => Ok(Self::RevokeSponsorshipResult),
53446            "ClawbackResultCode" => Ok(Self::ClawbackResultCode),
53447            "ClawbackResult" => Ok(Self::ClawbackResult),
53448            "ClawbackClaimableBalanceResultCode" => Ok(Self::ClawbackClaimableBalanceResultCode),
53449            "ClawbackClaimableBalanceResult" => Ok(Self::ClawbackClaimableBalanceResult),
53450            "SetTrustLineFlagsResultCode" => Ok(Self::SetTrustLineFlagsResultCode),
53451            "SetTrustLineFlagsResult" => Ok(Self::SetTrustLineFlagsResult),
53452            "LiquidityPoolDepositResultCode" => Ok(Self::LiquidityPoolDepositResultCode),
53453            "LiquidityPoolDepositResult" => Ok(Self::LiquidityPoolDepositResult),
53454            "LiquidityPoolWithdrawResultCode" => Ok(Self::LiquidityPoolWithdrawResultCode),
53455            "LiquidityPoolWithdrawResult" => Ok(Self::LiquidityPoolWithdrawResult),
53456            "InvokeHostFunctionResultCode" => Ok(Self::InvokeHostFunctionResultCode),
53457            "InvokeHostFunctionResult" => Ok(Self::InvokeHostFunctionResult),
53458            "ExtendFootprintTtlResultCode" => Ok(Self::ExtendFootprintTtlResultCode),
53459            "ExtendFootprintTtlResult" => Ok(Self::ExtendFootprintTtlResult),
53460            "RestoreFootprintResultCode" => Ok(Self::RestoreFootprintResultCode),
53461            "RestoreFootprintResult" => Ok(Self::RestoreFootprintResult),
53462            "OperationResultCode" => Ok(Self::OperationResultCode),
53463            "OperationResult" => Ok(Self::OperationResult),
53464            "OperationResultTr" => Ok(Self::OperationResultTr),
53465            "TransactionResultCode" => Ok(Self::TransactionResultCode),
53466            "InnerTransactionResult" => Ok(Self::InnerTransactionResult),
53467            "InnerTransactionResultResult" => Ok(Self::InnerTransactionResultResult),
53468            "InnerTransactionResultExt" => Ok(Self::InnerTransactionResultExt),
53469            "InnerTransactionResultPair" => Ok(Self::InnerTransactionResultPair),
53470            "TransactionResult" => Ok(Self::TransactionResult),
53471            "TransactionResultResult" => Ok(Self::TransactionResultResult),
53472            "TransactionResultExt" => Ok(Self::TransactionResultExt),
53473            "Hash" => Ok(Self::Hash),
53474            "Uint256" => Ok(Self::Uint256),
53475            "Uint32" => Ok(Self::Uint32),
53476            "Int32" => Ok(Self::Int32),
53477            "Uint64" => Ok(Self::Uint64),
53478            "Int64" => Ok(Self::Int64),
53479            "TimePoint" => Ok(Self::TimePoint),
53480            "Duration" => Ok(Self::Duration),
53481            "ExtensionPoint" => Ok(Self::ExtensionPoint),
53482            "CryptoKeyType" => Ok(Self::CryptoKeyType),
53483            "PublicKeyType" => Ok(Self::PublicKeyType),
53484            "SignerKeyType" => Ok(Self::SignerKeyType),
53485            "PublicKey" => Ok(Self::PublicKey),
53486            "SignerKey" => Ok(Self::SignerKey),
53487            "SignerKeyEd25519SignedPayload" => Ok(Self::SignerKeyEd25519SignedPayload),
53488            "Signature" => Ok(Self::Signature),
53489            "SignatureHint" => Ok(Self::SignatureHint),
53490            "NodeId" => Ok(Self::NodeId),
53491            "AccountId" => Ok(Self::AccountId),
53492            "ContractId" => Ok(Self::ContractId),
53493            "Curve25519Secret" => Ok(Self::Curve25519Secret),
53494            "Curve25519Public" => Ok(Self::Curve25519Public),
53495            "HmacSha256Key" => Ok(Self::HmacSha256Key),
53496            "HmacSha256Mac" => Ok(Self::HmacSha256Mac),
53497            "ShortHashSeed" => Ok(Self::ShortHashSeed),
53498            "BinaryFuseFilterType" => Ok(Self::BinaryFuseFilterType),
53499            "SerializedBinaryFuseFilter" => Ok(Self::SerializedBinaryFuseFilter),
53500            "PoolId" => Ok(Self::PoolId),
53501            "ClaimableBalanceIdType" => Ok(Self::ClaimableBalanceIdType),
53502            "ClaimableBalanceId" => Ok(Self::ClaimableBalanceId),
53503            _ => Err(Error::Invalid),
53504        }
53505    }
53506}
53507
53508#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
53509#[cfg_attr(
53510    all(feature = "serde", feature = "alloc"),
53511    derive(serde::Serialize, serde::Deserialize),
53512    serde(rename_all = "snake_case"),
53513    serde(untagged)
53514)]
53515#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
53516pub enum Type {
53517    Value(Box<Value>),
53518    ScpBallot(Box<ScpBallot>),
53519    ScpStatementType(Box<ScpStatementType>),
53520    ScpNomination(Box<ScpNomination>),
53521    ScpStatement(Box<ScpStatement>),
53522    ScpStatementPledges(Box<ScpStatementPledges>),
53523    ScpStatementPrepare(Box<ScpStatementPrepare>),
53524    ScpStatementConfirm(Box<ScpStatementConfirm>),
53525    ScpStatementExternalize(Box<ScpStatementExternalize>),
53526    ScpEnvelope(Box<ScpEnvelope>),
53527    ScpQuorumSet(Box<ScpQuorumSet>),
53528    ConfigSettingContractExecutionLanesV0(Box<ConfigSettingContractExecutionLanesV0>),
53529    ConfigSettingContractComputeV0(Box<ConfigSettingContractComputeV0>),
53530    ConfigSettingContractParallelComputeV0(Box<ConfigSettingContractParallelComputeV0>),
53531    ConfigSettingContractLedgerCostV0(Box<ConfigSettingContractLedgerCostV0>),
53532    ConfigSettingContractLedgerCostExtV0(Box<ConfigSettingContractLedgerCostExtV0>),
53533    ConfigSettingContractHistoricalDataV0(Box<ConfigSettingContractHistoricalDataV0>),
53534    ConfigSettingContractEventsV0(Box<ConfigSettingContractEventsV0>),
53535    ConfigSettingContractBandwidthV0(Box<ConfigSettingContractBandwidthV0>),
53536    ContractCostType(Box<ContractCostType>),
53537    ContractCostParamEntry(Box<ContractCostParamEntry>),
53538    StateArchivalSettings(Box<StateArchivalSettings>),
53539    EvictionIterator(Box<EvictionIterator>),
53540    ConfigSettingScpTiming(Box<ConfigSettingScpTiming>),
53541    ContractCostParams(Box<ContractCostParams>),
53542    ConfigSettingId(Box<ConfigSettingId>),
53543    ConfigSettingEntry(Box<ConfigSettingEntry>),
53544    ScEnvMetaKind(Box<ScEnvMetaKind>),
53545    ScEnvMetaEntry(Box<ScEnvMetaEntry>),
53546    ScEnvMetaEntryInterfaceVersion(Box<ScEnvMetaEntryInterfaceVersion>),
53547    ScMetaV0(Box<ScMetaV0>),
53548    ScMetaKind(Box<ScMetaKind>),
53549    ScMetaEntry(Box<ScMetaEntry>),
53550    ScSpecType(Box<ScSpecType>),
53551    ScSpecTypeOption(Box<ScSpecTypeOption>),
53552    ScSpecTypeResult(Box<ScSpecTypeResult>),
53553    ScSpecTypeVec(Box<ScSpecTypeVec>),
53554    ScSpecTypeMap(Box<ScSpecTypeMap>),
53555    ScSpecTypeTuple(Box<ScSpecTypeTuple>),
53556    ScSpecTypeBytesN(Box<ScSpecTypeBytesN>),
53557    ScSpecTypeUdt(Box<ScSpecTypeUdt>),
53558    ScSpecTypeDef(Box<ScSpecTypeDef>),
53559    ScSpecUdtStructFieldV0(Box<ScSpecUdtStructFieldV0>),
53560    ScSpecUdtStructV0(Box<ScSpecUdtStructV0>),
53561    ScSpecUdtUnionCaseVoidV0(Box<ScSpecUdtUnionCaseVoidV0>),
53562    ScSpecUdtUnionCaseTupleV0(Box<ScSpecUdtUnionCaseTupleV0>),
53563    ScSpecUdtUnionCaseV0Kind(Box<ScSpecUdtUnionCaseV0Kind>),
53564    ScSpecUdtUnionCaseV0(Box<ScSpecUdtUnionCaseV0>),
53565    ScSpecUdtUnionV0(Box<ScSpecUdtUnionV0>),
53566    ScSpecUdtEnumCaseV0(Box<ScSpecUdtEnumCaseV0>),
53567    ScSpecUdtEnumV0(Box<ScSpecUdtEnumV0>),
53568    ScSpecUdtErrorEnumCaseV0(Box<ScSpecUdtErrorEnumCaseV0>),
53569    ScSpecUdtErrorEnumV0(Box<ScSpecUdtErrorEnumV0>),
53570    ScSpecFunctionInputV0(Box<ScSpecFunctionInputV0>),
53571    ScSpecFunctionV0(Box<ScSpecFunctionV0>),
53572    ScSpecEventParamLocationV0(Box<ScSpecEventParamLocationV0>),
53573    ScSpecEventParamV0(Box<ScSpecEventParamV0>),
53574    ScSpecEventDataFormat(Box<ScSpecEventDataFormat>),
53575    ScSpecEventV0(Box<ScSpecEventV0>),
53576    ScSpecEntryKind(Box<ScSpecEntryKind>),
53577    ScSpecEntry(Box<ScSpecEntry>),
53578    ScValType(Box<ScValType>),
53579    ScErrorType(Box<ScErrorType>),
53580    ScErrorCode(Box<ScErrorCode>),
53581    ScError(Box<ScError>),
53582    UInt128Parts(Box<UInt128Parts>),
53583    Int128Parts(Box<Int128Parts>),
53584    UInt256Parts(Box<UInt256Parts>),
53585    Int256Parts(Box<Int256Parts>),
53586    ContractExecutableType(Box<ContractExecutableType>),
53587    ContractExecutable(Box<ContractExecutable>),
53588    ScAddressType(Box<ScAddressType>),
53589    MuxedEd25519Account(Box<MuxedEd25519Account>),
53590    ScAddress(Box<ScAddress>),
53591    ScVec(Box<ScVec>),
53592    ScMap(Box<ScMap>),
53593    ScBytes(Box<ScBytes>),
53594    ScString(Box<ScString>),
53595    ScSymbol(Box<ScSymbol>),
53596    ScNonceKey(Box<ScNonceKey>),
53597    ScContractInstance(Box<ScContractInstance>),
53598    ScVal(Box<ScVal>),
53599    ScMapEntry(Box<ScMapEntry>),
53600    LedgerCloseMetaBatch(Box<LedgerCloseMetaBatch>),
53601    StoredTransactionSet(Box<StoredTransactionSet>),
53602    StoredDebugTransactionSet(Box<StoredDebugTransactionSet>),
53603    PersistedScpStateV0(Box<PersistedScpStateV0>),
53604    PersistedScpStateV1(Box<PersistedScpStateV1>),
53605    PersistedScpState(Box<PersistedScpState>),
53606    Thresholds(Box<Thresholds>),
53607    String32(Box<String32>),
53608    String64(Box<String64>),
53609    SequenceNumber(Box<SequenceNumber>),
53610    DataValue(Box<DataValue>),
53611    AssetCode4(Box<AssetCode4>),
53612    AssetCode12(Box<AssetCode12>),
53613    AssetType(Box<AssetType>),
53614    AssetCode(Box<AssetCode>),
53615    AlphaNum4(Box<AlphaNum4>),
53616    AlphaNum12(Box<AlphaNum12>),
53617    Asset(Box<Asset>),
53618    Price(Box<Price>),
53619    Liabilities(Box<Liabilities>),
53620    ThresholdIndexes(Box<ThresholdIndexes>),
53621    LedgerEntryType(Box<LedgerEntryType>),
53622    Signer(Box<Signer>),
53623    AccountFlags(Box<AccountFlags>),
53624    SponsorshipDescriptor(Box<SponsorshipDescriptor>),
53625    AccountEntryExtensionV3(Box<AccountEntryExtensionV3>),
53626    AccountEntryExtensionV2(Box<AccountEntryExtensionV2>),
53627    AccountEntryExtensionV2Ext(Box<AccountEntryExtensionV2Ext>),
53628    AccountEntryExtensionV1(Box<AccountEntryExtensionV1>),
53629    AccountEntryExtensionV1Ext(Box<AccountEntryExtensionV1Ext>),
53630    AccountEntry(Box<AccountEntry>),
53631    AccountEntryExt(Box<AccountEntryExt>),
53632    TrustLineFlags(Box<TrustLineFlags>),
53633    LiquidityPoolType(Box<LiquidityPoolType>),
53634    TrustLineAsset(Box<TrustLineAsset>),
53635    TrustLineEntryExtensionV2(Box<TrustLineEntryExtensionV2>),
53636    TrustLineEntryExtensionV2Ext(Box<TrustLineEntryExtensionV2Ext>),
53637    TrustLineEntry(Box<TrustLineEntry>),
53638    TrustLineEntryExt(Box<TrustLineEntryExt>),
53639    TrustLineEntryV1(Box<TrustLineEntryV1>),
53640    TrustLineEntryV1Ext(Box<TrustLineEntryV1Ext>),
53641    OfferEntryFlags(Box<OfferEntryFlags>),
53642    OfferEntry(Box<OfferEntry>),
53643    OfferEntryExt(Box<OfferEntryExt>),
53644    DataEntry(Box<DataEntry>),
53645    DataEntryExt(Box<DataEntryExt>),
53646    ClaimPredicateType(Box<ClaimPredicateType>),
53647    ClaimPredicate(Box<ClaimPredicate>),
53648    ClaimantType(Box<ClaimantType>),
53649    Claimant(Box<Claimant>),
53650    ClaimantV0(Box<ClaimantV0>),
53651    ClaimableBalanceFlags(Box<ClaimableBalanceFlags>),
53652    ClaimableBalanceEntryExtensionV1(Box<ClaimableBalanceEntryExtensionV1>),
53653    ClaimableBalanceEntryExtensionV1Ext(Box<ClaimableBalanceEntryExtensionV1Ext>),
53654    ClaimableBalanceEntry(Box<ClaimableBalanceEntry>),
53655    ClaimableBalanceEntryExt(Box<ClaimableBalanceEntryExt>),
53656    LiquidityPoolConstantProductParameters(Box<LiquidityPoolConstantProductParameters>),
53657    LiquidityPoolEntry(Box<LiquidityPoolEntry>),
53658    LiquidityPoolEntryBody(Box<LiquidityPoolEntryBody>),
53659    LiquidityPoolEntryConstantProduct(Box<LiquidityPoolEntryConstantProduct>),
53660    ContractDataDurability(Box<ContractDataDurability>),
53661    ContractDataEntry(Box<ContractDataEntry>),
53662    ContractCodeCostInputs(Box<ContractCodeCostInputs>),
53663    ContractCodeEntry(Box<ContractCodeEntry>),
53664    ContractCodeEntryExt(Box<ContractCodeEntryExt>),
53665    ContractCodeEntryV1(Box<ContractCodeEntryV1>),
53666    TtlEntry(Box<TtlEntry>),
53667    LedgerEntryExtensionV1(Box<LedgerEntryExtensionV1>),
53668    LedgerEntryExtensionV1Ext(Box<LedgerEntryExtensionV1Ext>),
53669    LedgerEntry(Box<LedgerEntry>),
53670    LedgerEntryData(Box<LedgerEntryData>),
53671    LedgerEntryExt(Box<LedgerEntryExt>),
53672    LedgerKey(Box<LedgerKey>),
53673    LedgerKeyAccount(Box<LedgerKeyAccount>),
53674    LedgerKeyTrustLine(Box<LedgerKeyTrustLine>),
53675    LedgerKeyOffer(Box<LedgerKeyOffer>),
53676    LedgerKeyData(Box<LedgerKeyData>),
53677    LedgerKeyClaimableBalance(Box<LedgerKeyClaimableBalance>),
53678    LedgerKeyLiquidityPool(Box<LedgerKeyLiquidityPool>),
53679    LedgerKeyContractData(Box<LedgerKeyContractData>),
53680    LedgerKeyContractCode(Box<LedgerKeyContractCode>),
53681    LedgerKeyConfigSetting(Box<LedgerKeyConfigSetting>),
53682    LedgerKeyTtl(Box<LedgerKeyTtl>),
53683    EnvelopeType(Box<EnvelopeType>),
53684    BucketListType(Box<BucketListType>),
53685    BucketEntryType(Box<BucketEntryType>),
53686    HotArchiveBucketEntryType(Box<HotArchiveBucketEntryType>),
53687    BucketMetadata(Box<BucketMetadata>),
53688    BucketMetadataExt(Box<BucketMetadataExt>),
53689    BucketEntry(Box<BucketEntry>),
53690    HotArchiveBucketEntry(Box<HotArchiveBucketEntry>),
53691    UpgradeType(Box<UpgradeType>),
53692    StellarValueType(Box<StellarValueType>),
53693    LedgerCloseValueSignature(Box<LedgerCloseValueSignature>),
53694    StellarValue(Box<StellarValue>),
53695    StellarValueExt(Box<StellarValueExt>),
53696    LedgerHeaderFlags(Box<LedgerHeaderFlags>),
53697    LedgerHeaderExtensionV1(Box<LedgerHeaderExtensionV1>),
53698    LedgerHeaderExtensionV1Ext(Box<LedgerHeaderExtensionV1Ext>),
53699    LedgerHeader(Box<LedgerHeader>),
53700    LedgerHeaderExt(Box<LedgerHeaderExt>),
53701    LedgerUpgradeType(Box<LedgerUpgradeType>),
53702    ConfigUpgradeSetKey(Box<ConfigUpgradeSetKey>),
53703    LedgerUpgrade(Box<LedgerUpgrade>),
53704    ConfigUpgradeSet(Box<ConfigUpgradeSet>),
53705    TxSetComponentType(Box<TxSetComponentType>),
53706    DependentTxCluster(Box<DependentTxCluster>),
53707    ParallelTxExecutionStage(Box<ParallelTxExecutionStage>),
53708    ParallelTxsComponent(Box<ParallelTxsComponent>),
53709    TxSetComponent(Box<TxSetComponent>),
53710    TxSetComponentTxsMaybeDiscountedFee(Box<TxSetComponentTxsMaybeDiscountedFee>),
53711    TransactionPhase(Box<TransactionPhase>),
53712    TransactionSet(Box<TransactionSet>),
53713    TransactionSetV1(Box<TransactionSetV1>),
53714    GeneralizedTransactionSet(Box<GeneralizedTransactionSet>),
53715    TransactionResultPair(Box<TransactionResultPair>),
53716    TransactionResultSet(Box<TransactionResultSet>),
53717    TransactionHistoryEntry(Box<TransactionHistoryEntry>),
53718    TransactionHistoryEntryExt(Box<TransactionHistoryEntryExt>),
53719    TransactionHistoryResultEntry(Box<TransactionHistoryResultEntry>),
53720    TransactionHistoryResultEntryExt(Box<TransactionHistoryResultEntryExt>),
53721    LedgerHeaderHistoryEntry(Box<LedgerHeaderHistoryEntry>),
53722    LedgerHeaderHistoryEntryExt(Box<LedgerHeaderHistoryEntryExt>),
53723    LedgerScpMessages(Box<LedgerScpMessages>),
53724    ScpHistoryEntryV0(Box<ScpHistoryEntryV0>),
53725    ScpHistoryEntry(Box<ScpHistoryEntry>),
53726    LedgerEntryChangeType(Box<LedgerEntryChangeType>),
53727    LedgerEntryChange(Box<LedgerEntryChange>),
53728    LedgerEntryChanges(Box<LedgerEntryChanges>),
53729    OperationMeta(Box<OperationMeta>),
53730    TransactionMetaV1(Box<TransactionMetaV1>),
53731    TransactionMetaV2(Box<TransactionMetaV2>),
53732    ContractEventType(Box<ContractEventType>),
53733    ContractEvent(Box<ContractEvent>),
53734    ContractEventBody(Box<ContractEventBody>),
53735    ContractEventV0(Box<ContractEventV0>),
53736    DiagnosticEvent(Box<DiagnosticEvent>),
53737    SorobanTransactionMetaExtV1(Box<SorobanTransactionMetaExtV1>),
53738    SorobanTransactionMetaExt(Box<SorobanTransactionMetaExt>),
53739    SorobanTransactionMeta(Box<SorobanTransactionMeta>),
53740    TransactionMetaV3(Box<TransactionMetaV3>),
53741    OperationMetaV2(Box<OperationMetaV2>),
53742    SorobanTransactionMetaV2(Box<SorobanTransactionMetaV2>),
53743    TransactionEventStage(Box<TransactionEventStage>),
53744    TransactionEvent(Box<TransactionEvent>),
53745    TransactionMetaV4(Box<TransactionMetaV4>),
53746    InvokeHostFunctionSuccessPreImage(Box<InvokeHostFunctionSuccessPreImage>),
53747    TransactionMeta(Box<TransactionMeta>),
53748    TransactionResultMeta(Box<TransactionResultMeta>),
53749    TransactionResultMetaV1(Box<TransactionResultMetaV1>),
53750    UpgradeEntryMeta(Box<UpgradeEntryMeta>),
53751    LedgerCloseMetaV0(Box<LedgerCloseMetaV0>),
53752    LedgerCloseMetaExtV1(Box<LedgerCloseMetaExtV1>),
53753    LedgerCloseMetaExt(Box<LedgerCloseMetaExt>),
53754    LedgerCloseMetaV1(Box<LedgerCloseMetaV1>),
53755    LedgerCloseMetaV2(Box<LedgerCloseMetaV2>),
53756    LedgerCloseMeta(Box<LedgerCloseMeta>),
53757    ErrorCode(Box<ErrorCode>),
53758    SError(Box<SError>),
53759    SendMore(Box<SendMore>),
53760    SendMoreExtended(Box<SendMoreExtended>),
53761    AuthCert(Box<AuthCert>),
53762    Hello(Box<Hello>),
53763    Auth(Box<Auth>),
53764    IpAddrType(Box<IpAddrType>),
53765    PeerAddress(Box<PeerAddress>),
53766    PeerAddressIp(Box<PeerAddressIp>),
53767    MessageType(Box<MessageType>),
53768    DontHave(Box<DontHave>),
53769    SurveyMessageCommandType(Box<SurveyMessageCommandType>),
53770    SurveyMessageResponseType(Box<SurveyMessageResponseType>),
53771    TimeSlicedSurveyStartCollectingMessage(Box<TimeSlicedSurveyStartCollectingMessage>),
53772    SignedTimeSlicedSurveyStartCollectingMessage(Box<SignedTimeSlicedSurveyStartCollectingMessage>),
53773    TimeSlicedSurveyStopCollectingMessage(Box<TimeSlicedSurveyStopCollectingMessage>),
53774    SignedTimeSlicedSurveyStopCollectingMessage(Box<SignedTimeSlicedSurveyStopCollectingMessage>),
53775    SurveyRequestMessage(Box<SurveyRequestMessage>),
53776    TimeSlicedSurveyRequestMessage(Box<TimeSlicedSurveyRequestMessage>),
53777    SignedTimeSlicedSurveyRequestMessage(Box<SignedTimeSlicedSurveyRequestMessage>),
53778    EncryptedBody(Box<EncryptedBody>),
53779    SurveyResponseMessage(Box<SurveyResponseMessage>),
53780    TimeSlicedSurveyResponseMessage(Box<TimeSlicedSurveyResponseMessage>),
53781    SignedTimeSlicedSurveyResponseMessage(Box<SignedTimeSlicedSurveyResponseMessage>),
53782    PeerStats(Box<PeerStats>),
53783    TimeSlicedNodeData(Box<TimeSlicedNodeData>),
53784    TimeSlicedPeerData(Box<TimeSlicedPeerData>),
53785    TimeSlicedPeerDataList(Box<TimeSlicedPeerDataList>),
53786    TopologyResponseBodyV2(Box<TopologyResponseBodyV2>),
53787    SurveyResponseBody(Box<SurveyResponseBody>),
53788    TxAdvertVector(Box<TxAdvertVector>),
53789    FloodAdvert(Box<FloodAdvert>),
53790    TxDemandVector(Box<TxDemandVector>),
53791    FloodDemand(Box<FloodDemand>),
53792    StellarMessage(Box<StellarMessage>),
53793    AuthenticatedMessage(Box<AuthenticatedMessage>),
53794    AuthenticatedMessageV0(Box<AuthenticatedMessageV0>),
53795    LiquidityPoolParameters(Box<LiquidityPoolParameters>),
53796    MuxedAccount(Box<MuxedAccount>),
53797    MuxedAccountMed25519(Box<MuxedAccountMed25519>),
53798    DecoratedSignature(Box<DecoratedSignature>),
53799    OperationType(Box<OperationType>),
53800    CreateAccountOp(Box<CreateAccountOp>),
53801    PaymentOp(Box<PaymentOp>),
53802    PathPaymentStrictReceiveOp(Box<PathPaymentStrictReceiveOp>),
53803    PathPaymentStrictSendOp(Box<PathPaymentStrictSendOp>),
53804    ManageSellOfferOp(Box<ManageSellOfferOp>),
53805    ManageBuyOfferOp(Box<ManageBuyOfferOp>),
53806    CreatePassiveSellOfferOp(Box<CreatePassiveSellOfferOp>),
53807    SetOptionsOp(Box<SetOptionsOp>),
53808    ChangeTrustAsset(Box<ChangeTrustAsset>),
53809    ChangeTrustOp(Box<ChangeTrustOp>),
53810    AllowTrustOp(Box<AllowTrustOp>),
53811    ManageDataOp(Box<ManageDataOp>),
53812    BumpSequenceOp(Box<BumpSequenceOp>),
53813    CreateClaimableBalanceOp(Box<CreateClaimableBalanceOp>),
53814    ClaimClaimableBalanceOp(Box<ClaimClaimableBalanceOp>),
53815    BeginSponsoringFutureReservesOp(Box<BeginSponsoringFutureReservesOp>),
53816    RevokeSponsorshipType(Box<RevokeSponsorshipType>),
53817    RevokeSponsorshipOp(Box<RevokeSponsorshipOp>),
53818    RevokeSponsorshipOpSigner(Box<RevokeSponsorshipOpSigner>),
53819    ClawbackOp(Box<ClawbackOp>),
53820    ClawbackClaimableBalanceOp(Box<ClawbackClaimableBalanceOp>),
53821    SetTrustLineFlagsOp(Box<SetTrustLineFlagsOp>),
53822    LiquidityPoolDepositOp(Box<LiquidityPoolDepositOp>),
53823    LiquidityPoolWithdrawOp(Box<LiquidityPoolWithdrawOp>),
53824    HostFunctionType(Box<HostFunctionType>),
53825    ContractIdPreimageType(Box<ContractIdPreimageType>),
53826    ContractIdPreimage(Box<ContractIdPreimage>),
53827    ContractIdPreimageFromAddress(Box<ContractIdPreimageFromAddress>),
53828    CreateContractArgs(Box<CreateContractArgs>),
53829    CreateContractArgsV2(Box<CreateContractArgsV2>),
53830    InvokeContractArgs(Box<InvokeContractArgs>),
53831    HostFunction(Box<HostFunction>),
53832    SorobanAuthorizedFunctionType(Box<SorobanAuthorizedFunctionType>),
53833    SorobanAuthorizedFunction(Box<SorobanAuthorizedFunction>),
53834    SorobanAuthorizedInvocation(Box<SorobanAuthorizedInvocation>),
53835    SorobanAddressCredentials(Box<SorobanAddressCredentials>),
53836    SorobanCredentialsType(Box<SorobanCredentialsType>),
53837    SorobanCredentials(Box<SorobanCredentials>),
53838    SorobanAuthorizationEntry(Box<SorobanAuthorizationEntry>),
53839    SorobanAuthorizationEntries(Box<SorobanAuthorizationEntries>),
53840    InvokeHostFunctionOp(Box<InvokeHostFunctionOp>),
53841    ExtendFootprintTtlOp(Box<ExtendFootprintTtlOp>),
53842    RestoreFootprintOp(Box<RestoreFootprintOp>),
53843    Operation(Box<Operation>),
53844    OperationBody(Box<OperationBody>),
53845    HashIdPreimage(Box<HashIdPreimage>),
53846    HashIdPreimageOperationId(Box<HashIdPreimageOperationId>),
53847    HashIdPreimageRevokeId(Box<HashIdPreimageRevokeId>),
53848    HashIdPreimageContractId(Box<HashIdPreimageContractId>),
53849    HashIdPreimageSorobanAuthorization(Box<HashIdPreimageSorobanAuthorization>),
53850    MemoType(Box<MemoType>),
53851    Memo(Box<Memo>),
53852    TimeBounds(Box<TimeBounds>),
53853    LedgerBounds(Box<LedgerBounds>),
53854    PreconditionsV2(Box<PreconditionsV2>),
53855    PreconditionType(Box<PreconditionType>),
53856    Preconditions(Box<Preconditions>),
53857    LedgerFootprint(Box<LedgerFootprint>),
53858    SorobanResources(Box<SorobanResources>),
53859    SorobanResourcesExtV0(Box<SorobanResourcesExtV0>),
53860    SorobanTransactionData(Box<SorobanTransactionData>),
53861    SorobanTransactionDataExt(Box<SorobanTransactionDataExt>),
53862    TransactionV0(Box<TransactionV0>),
53863    TransactionV0Ext(Box<TransactionV0Ext>),
53864    TransactionV0Envelope(Box<TransactionV0Envelope>),
53865    Transaction(Box<Transaction>),
53866    TransactionExt(Box<TransactionExt>),
53867    TransactionV1Envelope(Box<TransactionV1Envelope>),
53868    FeeBumpTransaction(Box<FeeBumpTransaction>),
53869    FeeBumpTransactionInnerTx(Box<FeeBumpTransactionInnerTx>),
53870    FeeBumpTransactionExt(Box<FeeBumpTransactionExt>),
53871    FeeBumpTransactionEnvelope(Box<FeeBumpTransactionEnvelope>),
53872    TransactionEnvelope(Box<TransactionEnvelope>),
53873    TransactionSignaturePayload(Box<TransactionSignaturePayload>),
53874    TransactionSignaturePayloadTaggedTransaction(Box<TransactionSignaturePayloadTaggedTransaction>),
53875    ClaimAtomType(Box<ClaimAtomType>),
53876    ClaimOfferAtomV0(Box<ClaimOfferAtomV0>),
53877    ClaimOfferAtom(Box<ClaimOfferAtom>),
53878    ClaimLiquidityAtom(Box<ClaimLiquidityAtom>),
53879    ClaimAtom(Box<ClaimAtom>),
53880    CreateAccountResultCode(Box<CreateAccountResultCode>),
53881    CreateAccountResult(Box<CreateAccountResult>),
53882    PaymentResultCode(Box<PaymentResultCode>),
53883    PaymentResult(Box<PaymentResult>),
53884    PathPaymentStrictReceiveResultCode(Box<PathPaymentStrictReceiveResultCode>),
53885    SimplePaymentResult(Box<SimplePaymentResult>),
53886    PathPaymentStrictReceiveResult(Box<PathPaymentStrictReceiveResult>),
53887    PathPaymentStrictReceiveResultSuccess(Box<PathPaymentStrictReceiveResultSuccess>),
53888    PathPaymentStrictSendResultCode(Box<PathPaymentStrictSendResultCode>),
53889    PathPaymentStrictSendResult(Box<PathPaymentStrictSendResult>),
53890    PathPaymentStrictSendResultSuccess(Box<PathPaymentStrictSendResultSuccess>),
53891    ManageSellOfferResultCode(Box<ManageSellOfferResultCode>),
53892    ManageOfferEffect(Box<ManageOfferEffect>),
53893    ManageOfferSuccessResult(Box<ManageOfferSuccessResult>),
53894    ManageOfferSuccessResultOffer(Box<ManageOfferSuccessResultOffer>),
53895    ManageSellOfferResult(Box<ManageSellOfferResult>),
53896    ManageBuyOfferResultCode(Box<ManageBuyOfferResultCode>),
53897    ManageBuyOfferResult(Box<ManageBuyOfferResult>),
53898    SetOptionsResultCode(Box<SetOptionsResultCode>),
53899    SetOptionsResult(Box<SetOptionsResult>),
53900    ChangeTrustResultCode(Box<ChangeTrustResultCode>),
53901    ChangeTrustResult(Box<ChangeTrustResult>),
53902    AllowTrustResultCode(Box<AllowTrustResultCode>),
53903    AllowTrustResult(Box<AllowTrustResult>),
53904    AccountMergeResultCode(Box<AccountMergeResultCode>),
53905    AccountMergeResult(Box<AccountMergeResult>),
53906    InflationResultCode(Box<InflationResultCode>),
53907    InflationPayout(Box<InflationPayout>),
53908    InflationResult(Box<InflationResult>),
53909    ManageDataResultCode(Box<ManageDataResultCode>),
53910    ManageDataResult(Box<ManageDataResult>),
53911    BumpSequenceResultCode(Box<BumpSequenceResultCode>),
53912    BumpSequenceResult(Box<BumpSequenceResult>),
53913    CreateClaimableBalanceResultCode(Box<CreateClaimableBalanceResultCode>),
53914    CreateClaimableBalanceResult(Box<CreateClaimableBalanceResult>),
53915    ClaimClaimableBalanceResultCode(Box<ClaimClaimableBalanceResultCode>),
53916    ClaimClaimableBalanceResult(Box<ClaimClaimableBalanceResult>),
53917    BeginSponsoringFutureReservesResultCode(Box<BeginSponsoringFutureReservesResultCode>),
53918    BeginSponsoringFutureReservesResult(Box<BeginSponsoringFutureReservesResult>),
53919    EndSponsoringFutureReservesResultCode(Box<EndSponsoringFutureReservesResultCode>),
53920    EndSponsoringFutureReservesResult(Box<EndSponsoringFutureReservesResult>),
53921    RevokeSponsorshipResultCode(Box<RevokeSponsorshipResultCode>),
53922    RevokeSponsorshipResult(Box<RevokeSponsorshipResult>),
53923    ClawbackResultCode(Box<ClawbackResultCode>),
53924    ClawbackResult(Box<ClawbackResult>),
53925    ClawbackClaimableBalanceResultCode(Box<ClawbackClaimableBalanceResultCode>),
53926    ClawbackClaimableBalanceResult(Box<ClawbackClaimableBalanceResult>),
53927    SetTrustLineFlagsResultCode(Box<SetTrustLineFlagsResultCode>),
53928    SetTrustLineFlagsResult(Box<SetTrustLineFlagsResult>),
53929    LiquidityPoolDepositResultCode(Box<LiquidityPoolDepositResultCode>),
53930    LiquidityPoolDepositResult(Box<LiquidityPoolDepositResult>),
53931    LiquidityPoolWithdrawResultCode(Box<LiquidityPoolWithdrawResultCode>),
53932    LiquidityPoolWithdrawResult(Box<LiquidityPoolWithdrawResult>),
53933    InvokeHostFunctionResultCode(Box<InvokeHostFunctionResultCode>),
53934    InvokeHostFunctionResult(Box<InvokeHostFunctionResult>),
53935    ExtendFootprintTtlResultCode(Box<ExtendFootprintTtlResultCode>),
53936    ExtendFootprintTtlResult(Box<ExtendFootprintTtlResult>),
53937    RestoreFootprintResultCode(Box<RestoreFootprintResultCode>),
53938    RestoreFootprintResult(Box<RestoreFootprintResult>),
53939    OperationResultCode(Box<OperationResultCode>),
53940    OperationResult(Box<OperationResult>),
53941    OperationResultTr(Box<OperationResultTr>),
53942    TransactionResultCode(Box<TransactionResultCode>),
53943    InnerTransactionResult(Box<InnerTransactionResult>),
53944    InnerTransactionResultResult(Box<InnerTransactionResultResult>),
53945    InnerTransactionResultExt(Box<InnerTransactionResultExt>),
53946    InnerTransactionResultPair(Box<InnerTransactionResultPair>),
53947    TransactionResult(Box<TransactionResult>),
53948    TransactionResultResult(Box<TransactionResultResult>),
53949    TransactionResultExt(Box<TransactionResultExt>),
53950    Hash(Box<Hash>),
53951    Uint256(Box<Uint256>),
53952    Uint32(Box<Uint32>),
53953    Int32(Box<Int32>),
53954    Uint64(Box<Uint64>),
53955    Int64(Box<Int64>),
53956    TimePoint(Box<TimePoint>),
53957    Duration(Box<Duration>),
53958    ExtensionPoint(Box<ExtensionPoint>),
53959    CryptoKeyType(Box<CryptoKeyType>),
53960    PublicKeyType(Box<PublicKeyType>),
53961    SignerKeyType(Box<SignerKeyType>),
53962    PublicKey(Box<PublicKey>),
53963    SignerKey(Box<SignerKey>),
53964    SignerKeyEd25519SignedPayload(Box<SignerKeyEd25519SignedPayload>),
53965    Signature(Box<Signature>),
53966    SignatureHint(Box<SignatureHint>),
53967    NodeId(Box<NodeId>),
53968    AccountId(Box<AccountId>),
53969    ContractId(Box<ContractId>),
53970    Curve25519Secret(Box<Curve25519Secret>),
53971    Curve25519Public(Box<Curve25519Public>),
53972    HmacSha256Key(Box<HmacSha256Key>),
53973    HmacSha256Mac(Box<HmacSha256Mac>),
53974    ShortHashSeed(Box<ShortHashSeed>),
53975    BinaryFuseFilterType(Box<BinaryFuseFilterType>),
53976    SerializedBinaryFuseFilter(Box<SerializedBinaryFuseFilter>),
53977    PoolId(Box<PoolId>),
53978    ClaimableBalanceIdType(Box<ClaimableBalanceIdType>),
53979    ClaimableBalanceId(Box<ClaimableBalanceId>),
53980}
53981
53982impl Type {
53983    pub const VARIANTS: [TypeVariant; 463] = [
53984        TypeVariant::Value,
53985        TypeVariant::ScpBallot,
53986        TypeVariant::ScpStatementType,
53987        TypeVariant::ScpNomination,
53988        TypeVariant::ScpStatement,
53989        TypeVariant::ScpStatementPledges,
53990        TypeVariant::ScpStatementPrepare,
53991        TypeVariant::ScpStatementConfirm,
53992        TypeVariant::ScpStatementExternalize,
53993        TypeVariant::ScpEnvelope,
53994        TypeVariant::ScpQuorumSet,
53995        TypeVariant::ConfigSettingContractExecutionLanesV0,
53996        TypeVariant::ConfigSettingContractComputeV0,
53997        TypeVariant::ConfigSettingContractParallelComputeV0,
53998        TypeVariant::ConfigSettingContractLedgerCostV0,
53999        TypeVariant::ConfigSettingContractLedgerCostExtV0,
54000        TypeVariant::ConfigSettingContractHistoricalDataV0,
54001        TypeVariant::ConfigSettingContractEventsV0,
54002        TypeVariant::ConfigSettingContractBandwidthV0,
54003        TypeVariant::ContractCostType,
54004        TypeVariant::ContractCostParamEntry,
54005        TypeVariant::StateArchivalSettings,
54006        TypeVariant::EvictionIterator,
54007        TypeVariant::ConfigSettingScpTiming,
54008        TypeVariant::ContractCostParams,
54009        TypeVariant::ConfigSettingId,
54010        TypeVariant::ConfigSettingEntry,
54011        TypeVariant::ScEnvMetaKind,
54012        TypeVariant::ScEnvMetaEntry,
54013        TypeVariant::ScEnvMetaEntryInterfaceVersion,
54014        TypeVariant::ScMetaV0,
54015        TypeVariant::ScMetaKind,
54016        TypeVariant::ScMetaEntry,
54017        TypeVariant::ScSpecType,
54018        TypeVariant::ScSpecTypeOption,
54019        TypeVariant::ScSpecTypeResult,
54020        TypeVariant::ScSpecTypeVec,
54021        TypeVariant::ScSpecTypeMap,
54022        TypeVariant::ScSpecTypeTuple,
54023        TypeVariant::ScSpecTypeBytesN,
54024        TypeVariant::ScSpecTypeUdt,
54025        TypeVariant::ScSpecTypeDef,
54026        TypeVariant::ScSpecUdtStructFieldV0,
54027        TypeVariant::ScSpecUdtStructV0,
54028        TypeVariant::ScSpecUdtUnionCaseVoidV0,
54029        TypeVariant::ScSpecUdtUnionCaseTupleV0,
54030        TypeVariant::ScSpecUdtUnionCaseV0Kind,
54031        TypeVariant::ScSpecUdtUnionCaseV0,
54032        TypeVariant::ScSpecUdtUnionV0,
54033        TypeVariant::ScSpecUdtEnumCaseV0,
54034        TypeVariant::ScSpecUdtEnumV0,
54035        TypeVariant::ScSpecUdtErrorEnumCaseV0,
54036        TypeVariant::ScSpecUdtErrorEnumV0,
54037        TypeVariant::ScSpecFunctionInputV0,
54038        TypeVariant::ScSpecFunctionV0,
54039        TypeVariant::ScSpecEventParamLocationV0,
54040        TypeVariant::ScSpecEventParamV0,
54041        TypeVariant::ScSpecEventDataFormat,
54042        TypeVariant::ScSpecEventV0,
54043        TypeVariant::ScSpecEntryKind,
54044        TypeVariant::ScSpecEntry,
54045        TypeVariant::ScValType,
54046        TypeVariant::ScErrorType,
54047        TypeVariant::ScErrorCode,
54048        TypeVariant::ScError,
54049        TypeVariant::UInt128Parts,
54050        TypeVariant::Int128Parts,
54051        TypeVariant::UInt256Parts,
54052        TypeVariant::Int256Parts,
54053        TypeVariant::ContractExecutableType,
54054        TypeVariant::ContractExecutable,
54055        TypeVariant::ScAddressType,
54056        TypeVariant::MuxedEd25519Account,
54057        TypeVariant::ScAddress,
54058        TypeVariant::ScVec,
54059        TypeVariant::ScMap,
54060        TypeVariant::ScBytes,
54061        TypeVariant::ScString,
54062        TypeVariant::ScSymbol,
54063        TypeVariant::ScNonceKey,
54064        TypeVariant::ScContractInstance,
54065        TypeVariant::ScVal,
54066        TypeVariant::ScMapEntry,
54067        TypeVariant::LedgerCloseMetaBatch,
54068        TypeVariant::StoredTransactionSet,
54069        TypeVariant::StoredDebugTransactionSet,
54070        TypeVariant::PersistedScpStateV0,
54071        TypeVariant::PersistedScpStateV1,
54072        TypeVariant::PersistedScpState,
54073        TypeVariant::Thresholds,
54074        TypeVariant::String32,
54075        TypeVariant::String64,
54076        TypeVariant::SequenceNumber,
54077        TypeVariant::DataValue,
54078        TypeVariant::AssetCode4,
54079        TypeVariant::AssetCode12,
54080        TypeVariant::AssetType,
54081        TypeVariant::AssetCode,
54082        TypeVariant::AlphaNum4,
54083        TypeVariant::AlphaNum12,
54084        TypeVariant::Asset,
54085        TypeVariant::Price,
54086        TypeVariant::Liabilities,
54087        TypeVariant::ThresholdIndexes,
54088        TypeVariant::LedgerEntryType,
54089        TypeVariant::Signer,
54090        TypeVariant::AccountFlags,
54091        TypeVariant::SponsorshipDescriptor,
54092        TypeVariant::AccountEntryExtensionV3,
54093        TypeVariant::AccountEntryExtensionV2,
54094        TypeVariant::AccountEntryExtensionV2Ext,
54095        TypeVariant::AccountEntryExtensionV1,
54096        TypeVariant::AccountEntryExtensionV1Ext,
54097        TypeVariant::AccountEntry,
54098        TypeVariant::AccountEntryExt,
54099        TypeVariant::TrustLineFlags,
54100        TypeVariant::LiquidityPoolType,
54101        TypeVariant::TrustLineAsset,
54102        TypeVariant::TrustLineEntryExtensionV2,
54103        TypeVariant::TrustLineEntryExtensionV2Ext,
54104        TypeVariant::TrustLineEntry,
54105        TypeVariant::TrustLineEntryExt,
54106        TypeVariant::TrustLineEntryV1,
54107        TypeVariant::TrustLineEntryV1Ext,
54108        TypeVariant::OfferEntryFlags,
54109        TypeVariant::OfferEntry,
54110        TypeVariant::OfferEntryExt,
54111        TypeVariant::DataEntry,
54112        TypeVariant::DataEntryExt,
54113        TypeVariant::ClaimPredicateType,
54114        TypeVariant::ClaimPredicate,
54115        TypeVariant::ClaimantType,
54116        TypeVariant::Claimant,
54117        TypeVariant::ClaimantV0,
54118        TypeVariant::ClaimableBalanceFlags,
54119        TypeVariant::ClaimableBalanceEntryExtensionV1,
54120        TypeVariant::ClaimableBalanceEntryExtensionV1Ext,
54121        TypeVariant::ClaimableBalanceEntry,
54122        TypeVariant::ClaimableBalanceEntryExt,
54123        TypeVariant::LiquidityPoolConstantProductParameters,
54124        TypeVariant::LiquidityPoolEntry,
54125        TypeVariant::LiquidityPoolEntryBody,
54126        TypeVariant::LiquidityPoolEntryConstantProduct,
54127        TypeVariant::ContractDataDurability,
54128        TypeVariant::ContractDataEntry,
54129        TypeVariant::ContractCodeCostInputs,
54130        TypeVariant::ContractCodeEntry,
54131        TypeVariant::ContractCodeEntryExt,
54132        TypeVariant::ContractCodeEntryV1,
54133        TypeVariant::TtlEntry,
54134        TypeVariant::LedgerEntryExtensionV1,
54135        TypeVariant::LedgerEntryExtensionV1Ext,
54136        TypeVariant::LedgerEntry,
54137        TypeVariant::LedgerEntryData,
54138        TypeVariant::LedgerEntryExt,
54139        TypeVariant::LedgerKey,
54140        TypeVariant::LedgerKeyAccount,
54141        TypeVariant::LedgerKeyTrustLine,
54142        TypeVariant::LedgerKeyOffer,
54143        TypeVariant::LedgerKeyData,
54144        TypeVariant::LedgerKeyClaimableBalance,
54145        TypeVariant::LedgerKeyLiquidityPool,
54146        TypeVariant::LedgerKeyContractData,
54147        TypeVariant::LedgerKeyContractCode,
54148        TypeVariant::LedgerKeyConfigSetting,
54149        TypeVariant::LedgerKeyTtl,
54150        TypeVariant::EnvelopeType,
54151        TypeVariant::BucketListType,
54152        TypeVariant::BucketEntryType,
54153        TypeVariant::HotArchiveBucketEntryType,
54154        TypeVariant::BucketMetadata,
54155        TypeVariant::BucketMetadataExt,
54156        TypeVariant::BucketEntry,
54157        TypeVariant::HotArchiveBucketEntry,
54158        TypeVariant::UpgradeType,
54159        TypeVariant::StellarValueType,
54160        TypeVariant::LedgerCloseValueSignature,
54161        TypeVariant::StellarValue,
54162        TypeVariant::StellarValueExt,
54163        TypeVariant::LedgerHeaderFlags,
54164        TypeVariant::LedgerHeaderExtensionV1,
54165        TypeVariant::LedgerHeaderExtensionV1Ext,
54166        TypeVariant::LedgerHeader,
54167        TypeVariant::LedgerHeaderExt,
54168        TypeVariant::LedgerUpgradeType,
54169        TypeVariant::ConfigUpgradeSetKey,
54170        TypeVariant::LedgerUpgrade,
54171        TypeVariant::ConfigUpgradeSet,
54172        TypeVariant::TxSetComponentType,
54173        TypeVariant::DependentTxCluster,
54174        TypeVariant::ParallelTxExecutionStage,
54175        TypeVariant::ParallelTxsComponent,
54176        TypeVariant::TxSetComponent,
54177        TypeVariant::TxSetComponentTxsMaybeDiscountedFee,
54178        TypeVariant::TransactionPhase,
54179        TypeVariant::TransactionSet,
54180        TypeVariant::TransactionSetV1,
54181        TypeVariant::GeneralizedTransactionSet,
54182        TypeVariant::TransactionResultPair,
54183        TypeVariant::TransactionResultSet,
54184        TypeVariant::TransactionHistoryEntry,
54185        TypeVariant::TransactionHistoryEntryExt,
54186        TypeVariant::TransactionHistoryResultEntry,
54187        TypeVariant::TransactionHistoryResultEntryExt,
54188        TypeVariant::LedgerHeaderHistoryEntry,
54189        TypeVariant::LedgerHeaderHistoryEntryExt,
54190        TypeVariant::LedgerScpMessages,
54191        TypeVariant::ScpHistoryEntryV0,
54192        TypeVariant::ScpHistoryEntry,
54193        TypeVariant::LedgerEntryChangeType,
54194        TypeVariant::LedgerEntryChange,
54195        TypeVariant::LedgerEntryChanges,
54196        TypeVariant::OperationMeta,
54197        TypeVariant::TransactionMetaV1,
54198        TypeVariant::TransactionMetaV2,
54199        TypeVariant::ContractEventType,
54200        TypeVariant::ContractEvent,
54201        TypeVariant::ContractEventBody,
54202        TypeVariant::ContractEventV0,
54203        TypeVariant::DiagnosticEvent,
54204        TypeVariant::SorobanTransactionMetaExtV1,
54205        TypeVariant::SorobanTransactionMetaExt,
54206        TypeVariant::SorobanTransactionMeta,
54207        TypeVariant::TransactionMetaV3,
54208        TypeVariant::OperationMetaV2,
54209        TypeVariant::SorobanTransactionMetaV2,
54210        TypeVariant::TransactionEventStage,
54211        TypeVariant::TransactionEvent,
54212        TypeVariant::TransactionMetaV4,
54213        TypeVariant::InvokeHostFunctionSuccessPreImage,
54214        TypeVariant::TransactionMeta,
54215        TypeVariant::TransactionResultMeta,
54216        TypeVariant::TransactionResultMetaV1,
54217        TypeVariant::UpgradeEntryMeta,
54218        TypeVariant::LedgerCloseMetaV0,
54219        TypeVariant::LedgerCloseMetaExtV1,
54220        TypeVariant::LedgerCloseMetaExt,
54221        TypeVariant::LedgerCloseMetaV1,
54222        TypeVariant::LedgerCloseMetaV2,
54223        TypeVariant::LedgerCloseMeta,
54224        TypeVariant::ErrorCode,
54225        TypeVariant::SError,
54226        TypeVariant::SendMore,
54227        TypeVariant::SendMoreExtended,
54228        TypeVariant::AuthCert,
54229        TypeVariant::Hello,
54230        TypeVariant::Auth,
54231        TypeVariant::IpAddrType,
54232        TypeVariant::PeerAddress,
54233        TypeVariant::PeerAddressIp,
54234        TypeVariant::MessageType,
54235        TypeVariant::DontHave,
54236        TypeVariant::SurveyMessageCommandType,
54237        TypeVariant::SurveyMessageResponseType,
54238        TypeVariant::TimeSlicedSurveyStartCollectingMessage,
54239        TypeVariant::SignedTimeSlicedSurveyStartCollectingMessage,
54240        TypeVariant::TimeSlicedSurveyStopCollectingMessage,
54241        TypeVariant::SignedTimeSlicedSurveyStopCollectingMessage,
54242        TypeVariant::SurveyRequestMessage,
54243        TypeVariant::TimeSlicedSurveyRequestMessage,
54244        TypeVariant::SignedTimeSlicedSurveyRequestMessage,
54245        TypeVariant::EncryptedBody,
54246        TypeVariant::SurveyResponseMessage,
54247        TypeVariant::TimeSlicedSurveyResponseMessage,
54248        TypeVariant::SignedTimeSlicedSurveyResponseMessage,
54249        TypeVariant::PeerStats,
54250        TypeVariant::TimeSlicedNodeData,
54251        TypeVariant::TimeSlicedPeerData,
54252        TypeVariant::TimeSlicedPeerDataList,
54253        TypeVariant::TopologyResponseBodyV2,
54254        TypeVariant::SurveyResponseBody,
54255        TypeVariant::TxAdvertVector,
54256        TypeVariant::FloodAdvert,
54257        TypeVariant::TxDemandVector,
54258        TypeVariant::FloodDemand,
54259        TypeVariant::StellarMessage,
54260        TypeVariant::AuthenticatedMessage,
54261        TypeVariant::AuthenticatedMessageV0,
54262        TypeVariant::LiquidityPoolParameters,
54263        TypeVariant::MuxedAccount,
54264        TypeVariant::MuxedAccountMed25519,
54265        TypeVariant::DecoratedSignature,
54266        TypeVariant::OperationType,
54267        TypeVariant::CreateAccountOp,
54268        TypeVariant::PaymentOp,
54269        TypeVariant::PathPaymentStrictReceiveOp,
54270        TypeVariant::PathPaymentStrictSendOp,
54271        TypeVariant::ManageSellOfferOp,
54272        TypeVariant::ManageBuyOfferOp,
54273        TypeVariant::CreatePassiveSellOfferOp,
54274        TypeVariant::SetOptionsOp,
54275        TypeVariant::ChangeTrustAsset,
54276        TypeVariant::ChangeTrustOp,
54277        TypeVariant::AllowTrustOp,
54278        TypeVariant::ManageDataOp,
54279        TypeVariant::BumpSequenceOp,
54280        TypeVariant::CreateClaimableBalanceOp,
54281        TypeVariant::ClaimClaimableBalanceOp,
54282        TypeVariant::BeginSponsoringFutureReservesOp,
54283        TypeVariant::RevokeSponsorshipType,
54284        TypeVariant::RevokeSponsorshipOp,
54285        TypeVariant::RevokeSponsorshipOpSigner,
54286        TypeVariant::ClawbackOp,
54287        TypeVariant::ClawbackClaimableBalanceOp,
54288        TypeVariant::SetTrustLineFlagsOp,
54289        TypeVariant::LiquidityPoolDepositOp,
54290        TypeVariant::LiquidityPoolWithdrawOp,
54291        TypeVariant::HostFunctionType,
54292        TypeVariant::ContractIdPreimageType,
54293        TypeVariant::ContractIdPreimage,
54294        TypeVariant::ContractIdPreimageFromAddress,
54295        TypeVariant::CreateContractArgs,
54296        TypeVariant::CreateContractArgsV2,
54297        TypeVariant::InvokeContractArgs,
54298        TypeVariant::HostFunction,
54299        TypeVariant::SorobanAuthorizedFunctionType,
54300        TypeVariant::SorobanAuthorizedFunction,
54301        TypeVariant::SorobanAuthorizedInvocation,
54302        TypeVariant::SorobanAddressCredentials,
54303        TypeVariant::SorobanCredentialsType,
54304        TypeVariant::SorobanCredentials,
54305        TypeVariant::SorobanAuthorizationEntry,
54306        TypeVariant::SorobanAuthorizationEntries,
54307        TypeVariant::InvokeHostFunctionOp,
54308        TypeVariant::ExtendFootprintTtlOp,
54309        TypeVariant::RestoreFootprintOp,
54310        TypeVariant::Operation,
54311        TypeVariant::OperationBody,
54312        TypeVariant::HashIdPreimage,
54313        TypeVariant::HashIdPreimageOperationId,
54314        TypeVariant::HashIdPreimageRevokeId,
54315        TypeVariant::HashIdPreimageContractId,
54316        TypeVariant::HashIdPreimageSorobanAuthorization,
54317        TypeVariant::MemoType,
54318        TypeVariant::Memo,
54319        TypeVariant::TimeBounds,
54320        TypeVariant::LedgerBounds,
54321        TypeVariant::PreconditionsV2,
54322        TypeVariant::PreconditionType,
54323        TypeVariant::Preconditions,
54324        TypeVariant::LedgerFootprint,
54325        TypeVariant::SorobanResources,
54326        TypeVariant::SorobanResourcesExtV0,
54327        TypeVariant::SorobanTransactionData,
54328        TypeVariant::SorobanTransactionDataExt,
54329        TypeVariant::TransactionV0,
54330        TypeVariant::TransactionV0Ext,
54331        TypeVariant::TransactionV0Envelope,
54332        TypeVariant::Transaction,
54333        TypeVariant::TransactionExt,
54334        TypeVariant::TransactionV1Envelope,
54335        TypeVariant::FeeBumpTransaction,
54336        TypeVariant::FeeBumpTransactionInnerTx,
54337        TypeVariant::FeeBumpTransactionExt,
54338        TypeVariant::FeeBumpTransactionEnvelope,
54339        TypeVariant::TransactionEnvelope,
54340        TypeVariant::TransactionSignaturePayload,
54341        TypeVariant::TransactionSignaturePayloadTaggedTransaction,
54342        TypeVariant::ClaimAtomType,
54343        TypeVariant::ClaimOfferAtomV0,
54344        TypeVariant::ClaimOfferAtom,
54345        TypeVariant::ClaimLiquidityAtom,
54346        TypeVariant::ClaimAtom,
54347        TypeVariant::CreateAccountResultCode,
54348        TypeVariant::CreateAccountResult,
54349        TypeVariant::PaymentResultCode,
54350        TypeVariant::PaymentResult,
54351        TypeVariant::PathPaymentStrictReceiveResultCode,
54352        TypeVariant::SimplePaymentResult,
54353        TypeVariant::PathPaymentStrictReceiveResult,
54354        TypeVariant::PathPaymentStrictReceiveResultSuccess,
54355        TypeVariant::PathPaymentStrictSendResultCode,
54356        TypeVariant::PathPaymentStrictSendResult,
54357        TypeVariant::PathPaymentStrictSendResultSuccess,
54358        TypeVariant::ManageSellOfferResultCode,
54359        TypeVariant::ManageOfferEffect,
54360        TypeVariant::ManageOfferSuccessResult,
54361        TypeVariant::ManageOfferSuccessResultOffer,
54362        TypeVariant::ManageSellOfferResult,
54363        TypeVariant::ManageBuyOfferResultCode,
54364        TypeVariant::ManageBuyOfferResult,
54365        TypeVariant::SetOptionsResultCode,
54366        TypeVariant::SetOptionsResult,
54367        TypeVariant::ChangeTrustResultCode,
54368        TypeVariant::ChangeTrustResult,
54369        TypeVariant::AllowTrustResultCode,
54370        TypeVariant::AllowTrustResult,
54371        TypeVariant::AccountMergeResultCode,
54372        TypeVariant::AccountMergeResult,
54373        TypeVariant::InflationResultCode,
54374        TypeVariant::InflationPayout,
54375        TypeVariant::InflationResult,
54376        TypeVariant::ManageDataResultCode,
54377        TypeVariant::ManageDataResult,
54378        TypeVariant::BumpSequenceResultCode,
54379        TypeVariant::BumpSequenceResult,
54380        TypeVariant::CreateClaimableBalanceResultCode,
54381        TypeVariant::CreateClaimableBalanceResult,
54382        TypeVariant::ClaimClaimableBalanceResultCode,
54383        TypeVariant::ClaimClaimableBalanceResult,
54384        TypeVariant::BeginSponsoringFutureReservesResultCode,
54385        TypeVariant::BeginSponsoringFutureReservesResult,
54386        TypeVariant::EndSponsoringFutureReservesResultCode,
54387        TypeVariant::EndSponsoringFutureReservesResult,
54388        TypeVariant::RevokeSponsorshipResultCode,
54389        TypeVariant::RevokeSponsorshipResult,
54390        TypeVariant::ClawbackResultCode,
54391        TypeVariant::ClawbackResult,
54392        TypeVariant::ClawbackClaimableBalanceResultCode,
54393        TypeVariant::ClawbackClaimableBalanceResult,
54394        TypeVariant::SetTrustLineFlagsResultCode,
54395        TypeVariant::SetTrustLineFlagsResult,
54396        TypeVariant::LiquidityPoolDepositResultCode,
54397        TypeVariant::LiquidityPoolDepositResult,
54398        TypeVariant::LiquidityPoolWithdrawResultCode,
54399        TypeVariant::LiquidityPoolWithdrawResult,
54400        TypeVariant::InvokeHostFunctionResultCode,
54401        TypeVariant::InvokeHostFunctionResult,
54402        TypeVariant::ExtendFootprintTtlResultCode,
54403        TypeVariant::ExtendFootprintTtlResult,
54404        TypeVariant::RestoreFootprintResultCode,
54405        TypeVariant::RestoreFootprintResult,
54406        TypeVariant::OperationResultCode,
54407        TypeVariant::OperationResult,
54408        TypeVariant::OperationResultTr,
54409        TypeVariant::TransactionResultCode,
54410        TypeVariant::InnerTransactionResult,
54411        TypeVariant::InnerTransactionResultResult,
54412        TypeVariant::InnerTransactionResultExt,
54413        TypeVariant::InnerTransactionResultPair,
54414        TypeVariant::TransactionResult,
54415        TypeVariant::TransactionResultResult,
54416        TypeVariant::TransactionResultExt,
54417        TypeVariant::Hash,
54418        TypeVariant::Uint256,
54419        TypeVariant::Uint32,
54420        TypeVariant::Int32,
54421        TypeVariant::Uint64,
54422        TypeVariant::Int64,
54423        TypeVariant::TimePoint,
54424        TypeVariant::Duration,
54425        TypeVariant::ExtensionPoint,
54426        TypeVariant::CryptoKeyType,
54427        TypeVariant::PublicKeyType,
54428        TypeVariant::SignerKeyType,
54429        TypeVariant::PublicKey,
54430        TypeVariant::SignerKey,
54431        TypeVariant::SignerKeyEd25519SignedPayload,
54432        TypeVariant::Signature,
54433        TypeVariant::SignatureHint,
54434        TypeVariant::NodeId,
54435        TypeVariant::AccountId,
54436        TypeVariant::ContractId,
54437        TypeVariant::Curve25519Secret,
54438        TypeVariant::Curve25519Public,
54439        TypeVariant::HmacSha256Key,
54440        TypeVariant::HmacSha256Mac,
54441        TypeVariant::ShortHashSeed,
54442        TypeVariant::BinaryFuseFilterType,
54443        TypeVariant::SerializedBinaryFuseFilter,
54444        TypeVariant::PoolId,
54445        TypeVariant::ClaimableBalanceIdType,
54446        TypeVariant::ClaimableBalanceId,
54447    ];
54448    pub const VARIANTS_STR: [&'static str; 463] = [
54449        "Value",
54450        "ScpBallot",
54451        "ScpStatementType",
54452        "ScpNomination",
54453        "ScpStatement",
54454        "ScpStatementPledges",
54455        "ScpStatementPrepare",
54456        "ScpStatementConfirm",
54457        "ScpStatementExternalize",
54458        "ScpEnvelope",
54459        "ScpQuorumSet",
54460        "ConfigSettingContractExecutionLanesV0",
54461        "ConfigSettingContractComputeV0",
54462        "ConfigSettingContractParallelComputeV0",
54463        "ConfigSettingContractLedgerCostV0",
54464        "ConfigSettingContractLedgerCostExtV0",
54465        "ConfigSettingContractHistoricalDataV0",
54466        "ConfigSettingContractEventsV0",
54467        "ConfigSettingContractBandwidthV0",
54468        "ContractCostType",
54469        "ContractCostParamEntry",
54470        "StateArchivalSettings",
54471        "EvictionIterator",
54472        "ConfigSettingScpTiming",
54473        "ContractCostParams",
54474        "ConfigSettingId",
54475        "ConfigSettingEntry",
54476        "ScEnvMetaKind",
54477        "ScEnvMetaEntry",
54478        "ScEnvMetaEntryInterfaceVersion",
54479        "ScMetaV0",
54480        "ScMetaKind",
54481        "ScMetaEntry",
54482        "ScSpecType",
54483        "ScSpecTypeOption",
54484        "ScSpecTypeResult",
54485        "ScSpecTypeVec",
54486        "ScSpecTypeMap",
54487        "ScSpecTypeTuple",
54488        "ScSpecTypeBytesN",
54489        "ScSpecTypeUdt",
54490        "ScSpecTypeDef",
54491        "ScSpecUdtStructFieldV0",
54492        "ScSpecUdtStructV0",
54493        "ScSpecUdtUnionCaseVoidV0",
54494        "ScSpecUdtUnionCaseTupleV0",
54495        "ScSpecUdtUnionCaseV0Kind",
54496        "ScSpecUdtUnionCaseV0",
54497        "ScSpecUdtUnionV0",
54498        "ScSpecUdtEnumCaseV0",
54499        "ScSpecUdtEnumV0",
54500        "ScSpecUdtErrorEnumCaseV0",
54501        "ScSpecUdtErrorEnumV0",
54502        "ScSpecFunctionInputV0",
54503        "ScSpecFunctionV0",
54504        "ScSpecEventParamLocationV0",
54505        "ScSpecEventParamV0",
54506        "ScSpecEventDataFormat",
54507        "ScSpecEventV0",
54508        "ScSpecEntryKind",
54509        "ScSpecEntry",
54510        "ScValType",
54511        "ScErrorType",
54512        "ScErrorCode",
54513        "ScError",
54514        "UInt128Parts",
54515        "Int128Parts",
54516        "UInt256Parts",
54517        "Int256Parts",
54518        "ContractExecutableType",
54519        "ContractExecutable",
54520        "ScAddressType",
54521        "MuxedEd25519Account",
54522        "ScAddress",
54523        "ScVec",
54524        "ScMap",
54525        "ScBytes",
54526        "ScString",
54527        "ScSymbol",
54528        "ScNonceKey",
54529        "ScContractInstance",
54530        "ScVal",
54531        "ScMapEntry",
54532        "LedgerCloseMetaBatch",
54533        "StoredTransactionSet",
54534        "StoredDebugTransactionSet",
54535        "PersistedScpStateV0",
54536        "PersistedScpStateV1",
54537        "PersistedScpState",
54538        "Thresholds",
54539        "String32",
54540        "String64",
54541        "SequenceNumber",
54542        "DataValue",
54543        "AssetCode4",
54544        "AssetCode12",
54545        "AssetType",
54546        "AssetCode",
54547        "AlphaNum4",
54548        "AlphaNum12",
54549        "Asset",
54550        "Price",
54551        "Liabilities",
54552        "ThresholdIndexes",
54553        "LedgerEntryType",
54554        "Signer",
54555        "AccountFlags",
54556        "SponsorshipDescriptor",
54557        "AccountEntryExtensionV3",
54558        "AccountEntryExtensionV2",
54559        "AccountEntryExtensionV2Ext",
54560        "AccountEntryExtensionV1",
54561        "AccountEntryExtensionV1Ext",
54562        "AccountEntry",
54563        "AccountEntryExt",
54564        "TrustLineFlags",
54565        "LiquidityPoolType",
54566        "TrustLineAsset",
54567        "TrustLineEntryExtensionV2",
54568        "TrustLineEntryExtensionV2Ext",
54569        "TrustLineEntry",
54570        "TrustLineEntryExt",
54571        "TrustLineEntryV1",
54572        "TrustLineEntryV1Ext",
54573        "OfferEntryFlags",
54574        "OfferEntry",
54575        "OfferEntryExt",
54576        "DataEntry",
54577        "DataEntryExt",
54578        "ClaimPredicateType",
54579        "ClaimPredicate",
54580        "ClaimantType",
54581        "Claimant",
54582        "ClaimantV0",
54583        "ClaimableBalanceFlags",
54584        "ClaimableBalanceEntryExtensionV1",
54585        "ClaimableBalanceEntryExtensionV1Ext",
54586        "ClaimableBalanceEntry",
54587        "ClaimableBalanceEntryExt",
54588        "LiquidityPoolConstantProductParameters",
54589        "LiquidityPoolEntry",
54590        "LiquidityPoolEntryBody",
54591        "LiquidityPoolEntryConstantProduct",
54592        "ContractDataDurability",
54593        "ContractDataEntry",
54594        "ContractCodeCostInputs",
54595        "ContractCodeEntry",
54596        "ContractCodeEntryExt",
54597        "ContractCodeEntryV1",
54598        "TtlEntry",
54599        "LedgerEntryExtensionV1",
54600        "LedgerEntryExtensionV1Ext",
54601        "LedgerEntry",
54602        "LedgerEntryData",
54603        "LedgerEntryExt",
54604        "LedgerKey",
54605        "LedgerKeyAccount",
54606        "LedgerKeyTrustLine",
54607        "LedgerKeyOffer",
54608        "LedgerKeyData",
54609        "LedgerKeyClaimableBalance",
54610        "LedgerKeyLiquidityPool",
54611        "LedgerKeyContractData",
54612        "LedgerKeyContractCode",
54613        "LedgerKeyConfigSetting",
54614        "LedgerKeyTtl",
54615        "EnvelopeType",
54616        "BucketListType",
54617        "BucketEntryType",
54618        "HotArchiveBucketEntryType",
54619        "BucketMetadata",
54620        "BucketMetadataExt",
54621        "BucketEntry",
54622        "HotArchiveBucketEntry",
54623        "UpgradeType",
54624        "StellarValueType",
54625        "LedgerCloseValueSignature",
54626        "StellarValue",
54627        "StellarValueExt",
54628        "LedgerHeaderFlags",
54629        "LedgerHeaderExtensionV1",
54630        "LedgerHeaderExtensionV1Ext",
54631        "LedgerHeader",
54632        "LedgerHeaderExt",
54633        "LedgerUpgradeType",
54634        "ConfigUpgradeSetKey",
54635        "LedgerUpgrade",
54636        "ConfigUpgradeSet",
54637        "TxSetComponentType",
54638        "DependentTxCluster",
54639        "ParallelTxExecutionStage",
54640        "ParallelTxsComponent",
54641        "TxSetComponent",
54642        "TxSetComponentTxsMaybeDiscountedFee",
54643        "TransactionPhase",
54644        "TransactionSet",
54645        "TransactionSetV1",
54646        "GeneralizedTransactionSet",
54647        "TransactionResultPair",
54648        "TransactionResultSet",
54649        "TransactionHistoryEntry",
54650        "TransactionHistoryEntryExt",
54651        "TransactionHistoryResultEntry",
54652        "TransactionHistoryResultEntryExt",
54653        "LedgerHeaderHistoryEntry",
54654        "LedgerHeaderHistoryEntryExt",
54655        "LedgerScpMessages",
54656        "ScpHistoryEntryV0",
54657        "ScpHistoryEntry",
54658        "LedgerEntryChangeType",
54659        "LedgerEntryChange",
54660        "LedgerEntryChanges",
54661        "OperationMeta",
54662        "TransactionMetaV1",
54663        "TransactionMetaV2",
54664        "ContractEventType",
54665        "ContractEvent",
54666        "ContractEventBody",
54667        "ContractEventV0",
54668        "DiagnosticEvent",
54669        "SorobanTransactionMetaExtV1",
54670        "SorobanTransactionMetaExt",
54671        "SorobanTransactionMeta",
54672        "TransactionMetaV3",
54673        "OperationMetaV2",
54674        "SorobanTransactionMetaV2",
54675        "TransactionEventStage",
54676        "TransactionEvent",
54677        "TransactionMetaV4",
54678        "InvokeHostFunctionSuccessPreImage",
54679        "TransactionMeta",
54680        "TransactionResultMeta",
54681        "TransactionResultMetaV1",
54682        "UpgradeEntryMeta",
54683        "LedgerCloseMetaV0",
54684        "LedgerCloseMetaExtV1",
54685        "LedgerCloseMetaExt",
54686        "LedgerCloseMetaV1",
54687        "LedgerCloseMetaV2",
54688        "LedgerCloseMeta",
54689        "ErrorCode",
54690        "SError",
54691        "SendMore",
54692        "SendMoreExtended",
54693        "AuthCert",
54694        "Hello",
54695        "Auth",
54696        "IpAddrType",
54697        "PeerAddress",
54698        "PeerAddressIp",
54699        "MessageType",
54700        "DontHave",
54701        "SurveyMessageCommandType",
54702        "SurveyMessageResponseType",
54703        "TimeSlicedSurveyStartCollectingMessage",
54704        "SignedTimeSlicedSurveyStartCollectingMessage",
54705        "TimeSlicedSurveyStopCollectingMessage",
54706        "SignedTimeSlicedSurveyStopCollectingMessage",
54707        "SurveyRequestMessage",
54708        "TimeSlicedSurveyRequestMessage",
54709        "SignedTimeSlicedSurveyRequestMessage",
54710        "EncryptedBody",
54711        "SurveyResponseMessage",
54712        "TimeSlicedSurveyResponseMessage",
54713        "SignedTimeSlicedSurveyResponseMessage",
54714        "PeerStats",
54715        "TimeSlicedNodeData",
54716        "TimeSlicedPeerData",
54717        "TimeSlicedPeerDataList",
54718        "TopologyResponseBodyV2",
54719        "SurveyResponseBody",
54720        "TxAdvertVector",
54721        "FloodAdvert",
54722        "TxDemandVector",
54723        "FloodDemand",
54724        "StellarMessage",
54725        "AuthenticatedMessage",
54726        "AuthenticatedMessageV0",
54727        "LiquidityPoolParameters",
54728        "MuxedAccount",
54729        "MuxedAccountMed25519",
54730        "DecoratedSignature",
54731        "OperationType",
54732        "CreateAccountOp",
54733        "PaymentOp",
54734        "PathPaymentStrictReceiveOp",
54735        "PathPaymentStrictSendOp",
54736        "ManageSellOfferOp",
54737        "ManageBuyOfferOp",
54738        "CreatePassiveSellOfferOp",
54739        "SetOptionsOp",
54740        "ChangeTrustAsset",
54741        "ChangeTrustOp",
54742        "AllowTrustOp",
54743        "ManageDataOp",
54744        "BumpSequenceOp",
54745        "CreateClaimableBalanceOp",
54746        "ClaimClaimableBalanceOp",
54747        "BeginSponsoringFutureReservesOp",
54748        "RevokeSponsorshipType",
54749        "RevokeSponsorshipOp",
54750        "RevokeSponsorshipOpSigner",
54751        "ClawbackOp",
54752        "ClawbackClaimableBalanceOp",
54753        "SetTrustLineFlagsOp",
54754        "LiquidityPoolDepositOp",
54755        "LiquidityPoolWithdrawOp",
54756        "HostFunctionType",
54757        "ContractIdPreimageType",
54758        "ContractIdPreimage",
54759        "ContractIdPreimageFromAddress",
54760        "CreateContractArgs",
54761        "CreateContractArgsV2",
54762        "InvokeContractArgs",
54763        "HostFunction",
54764        "SorobanAuthorizedFunctionType",
54765        "SorobanAuthorizedFunction",
54766        "SorobanAuthorizedInvocation",
54767        "SorobanAddressCredentials",
54768        "SorobanCredentialsType",
54769        "SorobanCredentials",
54770        "SorobanAuthorizationEntry",
54771        "SorobanAuthorizationEntries",
54772        "InvokeHostFunctionOp",
54773        "ExtendFootprintTtlOp",
54774        "RestoreFootprintOp",
54775        "Operation",
54776        "OperationBody",
54777        "HashIdPreimage",
54778        "HashIdPreimageOperationId",
54779        "HashIdPreimageRevokeId",
54780        "HashIdPreimageContractId",
54781        "HashIdPreimageSorobanAuthorization",
54782        "MemoType",
54783        "Memo",
54784        "TimeBounds",
54785        "LedgerBounds",
54786        "PreconditionsV2",
54787        "PreconditionType",
54788        "Preconditions",
54789        "LedgerFootprint",
54790        "SorobanResources",
54791        "SorobanResourcesExtV0",
54792        "SorobanTransactionData",
54793        "SorobanTransactionDataExt",
54794        "TransactionV0",
54795        "TransactionV0Ext",
54796        "TransactionV0Envelope",
54797        "Transaction",
54798        "TransactionExt",
54799        "TransactionV1Envelope",
54800        "FeeBumpTransaction",
54801        "FeeBumpTransactionInnerTx",
54802        "FeeBumpTransactionExt",
54803        "FeeBumpTransactionEnvelope",
54804        "TransactionEnvelope",
54805        "TransactionSignaturePayload",
54806        "TransactionSignaturePayloadTaggedTransaction",
54807        "ClaimAtomType",
54808        "ClaimOfferAtomV0",
54809        "ClaimOfferAtom",
54810        "ClaimLiquidityAtom",
54811        "ClaimAtom",
54812        "CreateAccountResultCode",
54813        "CreateAccountResult",
54814        "PaymentResultCode",
54815        "PaymentResult",
54816        "PathPaymentStrictReceiveResultCode",
54817        "SimplePaymentResult",
54818        "PathPaymentStrictReceiveResult",
54819        "PathPaymentStrictReceiveResultSuccess",
54820        "PathPaymentStrictSendResultCode",
54821        "PathPaymentStrictSendResult",
54822        "PathPaymentStrictSendResultSuccess",
54823        "ManageSellOfferResultCode",
54824        "ManageOfferEffect",
54825        "ManageOfferSuccessResult",
54826        "ManageOfferSuccessResultOffer",
54827        "ManageSellOfferResult",
54828        "ManageBuyOfferResultCode",
54829        "ManageBuyOfferResult",
54830        "SetOptionsResultCode",
54831        "SetOptionsResult",
54832        "ChangeTrustResultCode",
54833        "ChangeTrustResult",
54834        "AllowTrustResultCode",
54835        "AllowTrustResult",
54836        "AccountMergeResultCode",
54837        "AccountMergeResult",
54838        "InflationResultCode",
54839        "InflationPayout",
54840        "InflationResult",
54841        "ManageDataResultCode",
54842        "ManageDataResult",
54843        "BumpSequenceResultCode",
54844        "BumpSequenceResult",
54845        "CreateClaimableBalanceResultCode",
54846        "CreateClaimableBalanceResult",
54847        "ClaimClaimableBalanceResultCode",
54848        "ClaimClaimableBalanceResult",
54849        "BeginSponsoringFutureReservesResultCode",
54850        "BeginSponsoringFutureReservesResult",
54851        "EndSponsoringFutureReservesResultCode",
54852        "EndSponsoringFutureReservesResult",
54853        "RevokeSponsorshipResultCode",
54854        "RevokeSponsorshipResult",
54855        "ClawbackResultCode",
54856        "ClawbackResult",
54857        "ClawbackClaimableBalanceResultCode",
54858        "ClawbackClaimableBalanceResult",
54859        "SetTrustLineFlagsResultCode",
54860        "SetTrustLineFlagsResult",
54861        "LiquidityPoolDepositResultCode",
54862        "LiquidityPoolDepositResult",
54863        "LiquidityPoolWithdrawResultCode",
54864        "LiquidityPoolWithdrawResult",
54865        "InvokeHostFunctionResultCode",
54866        "InvokeHostFunctionResult",
54867        "ExtendFootprintTtlResultCode",
54868        "ExtendFootprintTtlResult",
54869        "RestoreFootprintResultCode",
54870        "RestoreFootprintResult",
54871        "OperationResultCode",
54872        "OperationResult",
54873        "OperationResultTr",
54874        "TransactionResultCode",
54875        "InnerTransactionResult",
54876        "InnerTransactionResultResult",
54877        "InnerTransactionResultExt",
54878        "InnerTransactionResultPair",
54879        "TransactionResult",
54880        "TransactionResultResult",
54881        "TransactionResultExt",
54882        "Hash",
54883        "Uint256",
54884        "Uint32",
54885        "Int32",
54886        "Uint64",
54887        "Int64",
54888        "TimePoint",
54889        "Duration",
54890        "ExtensionPoint",
54891        "CryptoKeyType",
54892        "PublicKeyType",
54893        "SignerKeyType",
54894        "PublicKey",
54895        "SignerKey",
54896        "SignerKeyEd25519SignedPayload",
54897        "Signature",
54898        "SignatureHint",
54899        "NodeId",
54900        "AccountId",
54901        "ContractId",
54902        "Curve25519Secret",
54903        "Curve25519Public",
54904        "HmacSha256Key",
54905        "HmacSha256Mac",
54906        "ShortHashSeed",
54907        "BinaryFuseFilterType",
54908        "SerializedBinaryFuseFilter",
54909        "PoolId",
54910        "ClaimableBalanceIdType",
54911        "ClaimableBalanceId",
54912    ];
54913
54914    #[cfg(feature = "std")]
54915    #[allow(clippy::too_many_lines)]
54916    pub fn read_xdr<R: Read>(v: TypeVariant, r: &mut Limited<R>) -> Result<Self, Error> {
54917        match v {
54918            TypeVariant::Value => {
54919                r.with_limited_depth(|r| Ok(Self::Value(Box::new(Value::read_xdr(r)?))))
54920            }
54921            TypeVariant::ScpBallot => {
54922                r.with_limited_depth(|r| Ok(Self::ScpBallot(Box::new(ScpBallot::read_xdr(r)?))))
54923            }
54924            TypeVariant::ScpStatementType => r.with_limited_depth(|r| {
54925                Ok(Self::ScpStatementType(Box::new(
54926                    ScpStatementType::read_xdr(r)?,
54927                )))
54928            }),
54929            TypeVariant::ScpNomination => r.with_limited_depth(|r| {
54930                Ok(Self::ScpNomination(Box::new(ScpNomination::read_xdr(r)?)))
54931            }),
54932            TypeVariant::ScpStatement => r.with_limited_depth(|r| {
54933                Ok(Self::ScpStatement(Box::new(ScpStatement::read_xdr(r)?)))
54934            }),
54935            TypeVariant::ScpStatementPledges => r.with_limited_depth(|r| {
54936                Ok(Self::ScpStatementPledges(Box::new(
54937                    ScpStatementPledges::read_xdr(r)?,
54938                )))
54939            }),
54940            TypeVariant::ScpStatementPrepare => r.with_limited_depth(|r| {
54941                Ok(Self::ScpStatementPrepare(Box::new(
54942                    ScpStatementPrepare::read_xdr(r)?,
54943                )))
54944            }),
54945            TypeVariant::ScpStatementConfirm => r.with_limited_depth(|r| {
54946                Ok(Self::ScpStatementConfirm(Box::new(
54947                    ScpStatementConfirm::read_xdr(r)?,
54948                )))
54949            }),
54950            TypeVariant::ScpStatementExternalize => r.with_limited_depth(|r| {
54951                Ok(Self::ScpStatementExternalize(Box::new(
54952                    ScpStatementExternalize::read_xdr(r)?,
54953                )))
54954            }),
54955            TypeVariant::ScpEnvelope => {
54956                r.with_limited_depth(|r| Ok(Self::ScpEnvelope(Box::new(ScpEnvelope::read_xdr(r)?))))
54957            }
54958            TypeVariant::ScpQuorumSet => r.with_limited_depth(|r| {
54959                Ok(Self::ScpQuorumSet(Box::new(ScpQuorumSet::read_xdr(r)?)))
54960            }),
54961            TypeVariant::ConfigSettingContractExecutionLanesV0 => r.with_limited_depth(|r| {
54962                Ok(Self::ConfigSettingContractExecutionLanesV0(Box::new(
54963                    ConfigSettingContractExecutionLanesV0::read_xdr(r)?,
54964                )))
54965            }),
54966            TypeVariant::ConfigSettingContractComputeV0 => r.with_limited_depth(|r| {
54967                Ok(Self::ConfigSettingContractComputeV0(Box::new(
54968                    ConfigSettingContractComputeV0::read_xdr(r)?,
54969                )))
54970            }),
54971            TypeVariant::ConfigSettingContractParallelComputeV0 => r.with_limited_depth(|r| {
54972                Ok(Self::ConfigSettingContractParallelComputeV0(Box::new(
54973                    ConfigSettingContractParallelComputeV0::read_xdr(r)?,
54974                )))
54975            }),
54976            TypeVariant::ConfigSettingContractLedgerCostV0 => r.with_limited_depth(|r| {
54977                Ok(Self::ConfigSettingContractLedgerCostV0(Box::new(
54978                    ConfigSettingContractLedgerCostV0::read_xdr(r)?,
54979                )))
54980            }),
54981            TypeVariant::ConfigSettingContractLedgerCostExtV0 => r.with_limited_depth(|r| {
54982                Ok(Self::ConfigSettingContractLedgerCostExtV0(Box::new(
54983                    ConfigSettingContractLedgerCostExtV0::read_xdr(r)?,
54984                )))
54985            }),
54986            TypeVariant::ConfigSettingContractHistoricalDataV0 => r.with_limited_depth(|r| {
54987                Ok(Self::ConfigSettingContractHistoricalDataV0(Box::new(
54988                    ConfigSettingContractHistoricalDataV0::read_xdr(r)?,
54989                )))
54990            }),
54991            TypeVariant::ConfigSettingContractEventsV0 => r.with_limited_depth(|r| {
54992                Ok(Self::ConfigSettingContractEventsV0(Box::new(
54993                    ConfigSettingContractEventsV0::read_xdr(r)?,
54994                )))
54995            }),
54996            TypeVariant::ConfigSettingContractBandwidthV0 => r.with_limited_depth(|r| {
54997                Ok(Self::ConfigSettingContractBandwidthV0(Box::new(
54998                    ConfigSettingContractBandwidthV0::read_xdr(r)?,
54999                )))
55000            }),
55001            TypeVariant::ContractCostType => r.with_limited_depth(|r| {
55002                Ok(Self::ContractCostType(Box::new(
55003                    ContractCostType::read_xdr(r)?,
55004                )))
55005            }),
55006            TypeVariant::ContractCostParamEntry => r.with_limited_depth(|r| {
55007                Ok(Self::ContractCostParamEntry(Box::new(
55008                    ContractCostParamEntry::read_xdr(r)?,
55009                )))
55010            }),
55011            TypeVariant::StateArchivalSettings => r.with_limited_depth(|r| {
55012                Ok(Self::StateArchivalSettings(Box::new(
55013                    StateArchivalSettings::read_xdr(r)?,
55014                )))
55015            }),
55016            TypeVariant::EvictionIterator => r.with_limited_depth(|r| {
55017                Ok(Self::EvictionIterator(Box::new(
55018                    EvictionIterator::read_xdr(r)?,
55019                )))
55020            }),
55021            TypeVariant::ConfigSettingScpTiming => r.with_limited_depth(|r| {
55022                Ok(Self::ConfigSettingScpTiming(Box::new(
55023                    ConfigSettingScpTiming::read_xdr(r)?,
55024                )))
55025            }),
55026            TypeVariant::ContractCostParams => r.with_limited_depth(|r| {
55027                Ok(Self::ContractCostParams(Box::new(
55028                    ContractCostParams::read_xdr(r)?,
55029                )))
55030            }),
55031            TypeVariant::ConfigSettingId => r.with_limited_depth(|r| {
55032                Ok(Self::ConfigSettingId(Box::new(ConfigSettingId::read_xdr(
55033                    r,
55034                )?)))
55035            }),
55036            TypeVariant::ConfigSettingEntry => r.with_limited_depth(|r| {
55037                Ok(Self::ConfigSettingEntry(Box::new(
55038                    ConfigSettingEntry::read_xdr(r)?,
55039                )))
55040            }),
55041            TypeVariant::ScEnvMetaKind => r.with_limited_depth(|r| {
55042                Ok(Self::ScEnvMetaKind(Box::new(ScEnvMetaKind::read_xdr(r)?)))
55043            }),
55044            TypeVariant::ScEnvMetaEntry => r.with_limited_depth(|r| {
55045                Ok(Self::ScEnvMetaEntry(Box::new(ScEnvMetaEntry::read_xdr(r)?)))
55046            }),
55047            TypeVariant::ScEnvMetaEntryInterfaceVersion => r.with_limited_depth(|r| {
55048                Ok(Self::ScEnvMetaEntryInterfaceVersion(Box::new(
55049                    ScEnvMetaEntryInterfaceVersion::read_xdr(r)?,
55050                )))
55051            }),
55052            TypeVariant::ScMetaV0 => {
55053                r.with_limited_depth(|r| Ok(Self::ScMetaV0(Box::new(ScMetaV0::read_xdr(r)?))))
55054            }
55055            TypeVariant::ScMetaKind => {
55056                r.with_limited_depth(|r| Ok(Self::ScMetaKind(Box::new(ScMetaKind::read_xdr(r)?))))
55057            }
55058            TypeVariant::ScMetaEntry => {
55059                r.with_limited_depth(|r| Ok(Self::ScMetaEntry(Box::new(ScMetaEntry::read_xdr(r)?))))
55060            }
55061            TypeVariant::ScSpecType => {
55062                r.with_limited_depth(|r| Ok(Self::ScSpecType(Box::new(ScSpecType::read_xdr(r)?))))
55063            }
55064            TypeVariant::ScSpecTypeOption => r.with_limited_depth(|r| {
55065                Ok(Self::ScSpecTypeOption(Box::new(
55066                    ScSpecTypeOption::read_xdr(r)?,
55067                )))
55068            }),
55069            TypeVariant::ScSpecTypeResult => r.with_limited_depth(|r| {
55070                Ok(Self::ScSpecTypeResult(Box::new(
55071                    ScSpecTypeResult::read_xdr(r)?,
55072                )))
55073            }),
55074            TypeVariant::ScSpecTypeVec => r.with_limited_depth(|r| {
55075                Ok(Self::ScSpecTypeVec(Box::new(ScSpecTypeVec::read_xdr(r)?)))
55076            }),
55077            TypeVariant::ScSpecTypeMap => r.with_limited_depth(|r| {
55078                Ok(Self::ScSpecTypeMap(Box::new(ScSpecTypeMap::read_xdr(r)?)))
55079            }),
55080            TypeVariant::ScSpecTypeTuple => r.with_limited_depth(|r| {
55081                Ok(Self::ScSpecTypeTuple(Box::new(ScSpecTypeTuple::read_xdr(
55082                    r,
55083                )?)))
55084            }),
55085            TypeVariant::ScSpecTypeBytesN => r.with_limited_depth(|r| {
55086                Ok(Self::ScSpecTypeBytesN(Box::new(
55087                    ScSpecTypeBytesN::read_xdr(r)?,
55088                )))
55089            }),
55090            TypeVariant::ScSpecTypeUdt => r.with_limited_depth(|r| {
55091                Ok(Self::ScSpecTypeUdt(Box::new(ScSpecTypeUdt::read_xdr(r)?)))
55092            }),
55093            TypeVariant::ScSpecTypeDef => r.with_limited_depth(|r| {
55094                Ok(Self::ScSpecTypeDef(Box::new(ScSpecTypeDef::read_xdr(r)?)))
55095            }),
55096            TypeVariant::ScSpecUdtStructFieldV0 => r.with_limited_depth(|r| {
55097                Ok(Self::ScSpecUdtStructFieldV0(Box::new(
55098                    ScSpecUdtStructFieldV0::read_xdr(r)?,
55099                )))
55100            }),
55101            TypeVariant::ScSpecUdtStructV0 => r.with_limited_depth(|r| {
55102                Ok(Self::ScSpecUdtStructV0(Box::new(
55103                    ScSpecUdtStructV0::read_xdr(r)?,
55104                )))
55105            }),
55106            TypeVariant::ScSpecUdtUnionCaseVoidV0 => r.with_limited_depth(|r| {
55107                Ok(Self::ScSpecUdtUnionCaseVoidV0(Box::new(
55108                    ScSpecUdtUnionCaseVoidV0::read_xdr(r)?,
55109                )))
55110            }),
55111            TypeVariant::ScSpecUdtUnionCaseTupleV0 => r.with_limited_depth(|r| {
55112                Ok(Self::ScSpecUdtUnionCaseTupleV0(Box::new(
55113                    ScSpecUdtUnionCaseTupleV0::read_xdr(r)?,
55114                )))
55115            }),
55116            TypeVariant::ScSpecUdtUnionCaseV0Kind => r.with_limited_depth(|r| {
55117                Ok(Self::ScSpecUdtUnionCaseV0Kind(Box::new(
55118                    ScSpecUdtUnionCaseV0Kind::read_xdr(r)?,
55119                )))
55120            }),
55121            TypeVariant::ScSpecUdtUnionCaseV0 => r.with_limited_depth(|r| {
55122                Ok(Self::ScSpecUdtUnionCaseV0(Box::new(
55123                    ScSpecUdtUnionCaseV0::read_xdr(r)?,
55124                )))
55125            }),
55126            TypeVariant::ScSpecUdtUnionV0 => r.with_limited_depth(|r| {
55127                Ok(Self::ScSpecUdtUnionV0(Box::new(
55128                    ScSpecUdtUnionV0::read_xdr(r)?,
55129                )))
55130            }),
55131            TypeVariant::ScSpecUdtEnumCaseV0 => r.with_limited_depth(|r| {
55132                Ok(Self::ScSpecUdtEnumCaseV0(Box::new(
55133                    ScSpecUdtEnumCaseV0::read_xdr(r)?,
55134                )))
55135            }),
55136            TypeVariant::ScSpecUdtEnumV0 => r.with_limited_depth(|r| {
55137                Ok(Self::ScSpecUdtEnumV0(Box::new(ScSpecUdtEnumV0::read_xdr(
55138                    r,
55139                )?)))
55140            }),
55141            TypeVariant::ScSpecUdtErrorEnumCaseV0 => r.with_limited_depth(|r| {
55142                Ok(Self::ScSpecUdtErrorEnumCaseV0(Box::new(
55143                    ScSpecUdtErrorEnumCaseV0::read_xdr(r)?,
55144                )))
55145            }),
55146            TypeVariant::ScSpecUdtErrorEnumV0 => r.with_limited_depth(|r| {
55147                Ok(Self::ScSpecUdtErrorEnumV0(Box::new(
55148                    ScSpecUdtErrorEnumV0::read_xdr(r)?,
55149                )))
55150            }),
55151            TypeVariant::ScSpecFunctionInputV0 => r.with_limited_depth(|r| {
55152                Ok(Self::ScSpecFunctionInputV0(Box::new(
55153                    ScSpecFunctionInputV0::read_xdr(r)?,
55154                )))
55155            }),
55156            TypeVariant::ScSpecFunctionV0 => r.with_limited_depth(|r| {
55157                Ok(Self::ScSpecFunctionV0(Box::new(
55158                    ScSpecFunctionV0::read_xdr(r)?,
55159                )))
55160            }),
55161            TypeVariant::ScSpecEventParamLocationV0 => r.with_limited_depth(|r| {
55162                Ok(Self::ScSpecEventParamLocationV0(Box::new(
55163                    ScSpecEventParamLocationV0::read_xdr(r)?,
55164                )))
55165            }),
55166            TypeVariant::ScSpecEventParamV0 => r.with_limited_depth(|r| {
55167                Ok(Self::ScSpecEventParamV0(Box::new(
55168                    ScSpecEventParamV0::read_xdr(r)?,
55169                )))
55170            }),
55171            TypeVariant::ScSpecEventDataFormat => r.with_limited_depth(|r| {
55172                Ok(Self::ScSpecEventDataFormat(Box::new(
55173                    ScSpecEventDataFormat::read_xdr(r)?,
55174                )))
55175            }),
55176            TypeVariant::ScSpecEventV0 => r.with_limited_depth(|r| {
55177                Ok(Self::ScSpecEventV0(Box::new(ScSpecEventV0::read_xdr(r)?)))
55178            }),
55179            TypeVariant::ScSpecEntryKind => r.with_limited_depth(|r| {
55180                Ok(Self::ScSpecEntryKind(Box::new(ScSpecEntryKind::read_xdr(
55181                    r,
55182                )?)))
55183            }),
55184            TypeVariant::ScSpecEntry => {
55185                r.with_limited_depth(|r| Ok(Self::ScSpecEntry(Box::new(ScSpecEntry::read_xdr(r)?))))
55186            }
55187            TypeVariant::ScValType => {
55188                r.with_limited_depth(|r| Ok(Self::ScValType(Box::new(ScValType::read_xdr(r)?))))
55189            }
55190            TypeVariant::ScErrorType => {
55191                r.with_limited_depth(|r| Ok(Self::ScErrorType(Box::new(ScErrorType::read_xdr(r)?))))
55192            }
55193            TypeVariant::ScErrorCode => {
55194                r.with_limited_depth(|r| Ok(Self::ScErrorCode(Box::new(ScErrorCode::read_xdr(r)?))))
55195            }
55196            TypeVariant::ScError => {
55197                r.with_limited_depth(|r| Ok(Self::ScError(Box::new(ScError::read_xdr(r)?))))
55198            }
55199            TypeVariant::UInt128Parts => r.with_limited_depth(|r| {
55200                Ok(Self::UInt128Parts(Box::new(UInt128Parts::read_xdr(r)?)))
55201            }),
55202            TypeVariant::Int128Parts => {
55203                r.with_limited_depth(|r| Ok(Self::Int128Parts(Box::new(Int128Parts::read_xdr(r)?))))
55204            }
55205            TypeVariant::UInt256Parts => r.with_limited_depth(|r| {
55206                Ok(Self::UInt256Parts(Box::new(UInt256Parts::read_xdr(r)?)))
55207            }),
55208            TypeVariant::Int256Parts => {
55209                r.with_limited_depth(|r| Ok(Self::Int256Parts(Box::new(Int256Parts::read_xdr(r)?))))
55210            }
55211            TypeVariant::ContractExecutableType => r.with_limited_depth(|r| {
55212                Ok(Self::ContractExecutableType(Box::new(
55213                    ContractExecutableType::read_xdr(r)?,
55214                )))
55215            }),
55216            TypeVariant::ContractExecutable => r.with_limited_depth(|r| {
55217                Ok(Self::ContractExecutable(Box::new(
55218                    ContractExecutable::read_xdr(r)?,
55219                )))
55220            }),
55221            TypeVariant::ScAddressType => r.with_limited_depth(|r| {
55222                Ok(Self::ScAddressType(Box::new(ScAddressType::read_xdr(r)?)))
55223            }),
55224            TypeVariant::MuxedEd25519Account => r.with_limited_depth(|r| {
55225                Ok(Self::MuxedEd25519Account(Box::new(
55226                    MuxedEd25519Account::read_xdr(r)?,
55227                )))
55228            }),
55229            TypeVariant::ScAddress => {
55230                r.with_limited_depth(|r| Ok(Self::ScAddress(Box::new(ScAddress::read_xdr(r)?))))
55231            }
55232            TypeVariant::ScVec => {
55233                r.with_limited_depth(|r| Ok(Self::ScVec(Box::new(ScVec::read_xdr(r)?))))
55234            }
55235            TypeVariant::ScMap => {
55236                r.with_limited_depth(|r| Ok(Self::ScMap(Box::new(ScMap::read_xdr(r)?))))
55237            }
55238            TypeVariant::ScBytes => {
55239                r.with_limited_depth(|r| Ok(Self::ScBytes(Box::new(ScBytes::read_xdr(r)?))))
55240            }
55241            TypeVariant::ScString => {
55242                r.with_limited_depth(|r| Ok(Self::ScString(Box::new(ScString::read_xdr(r)?))))
55243            }
55244            TypeVariant::ScSymbol => {
55245                r.with_limited_depth(|r| Ok(Self::ScSymbol(Box::new(ScSymbol::read_xdr(r)?))))
55246            }
55247            TypeVariant::ScNonceKey => {
55248                r.with_limited_depth(|r| Ok(Self::ScNonceKey(Box::new(ScNonceKey::read_xdr(r)?))))
55249            }
55250            TypeVariant::ScContractInstance => r.with_limited_depth(|r| {
55251                Ok(Self::ScContractInstance(Box::new(
55252                    ScContractInstance::read_xdr(r)?,
55253                )))
55254            }),
55255            TypeVariant::ScVal => {
55256                r.with_limited_depth(|r| Ok(Self::ScVal(Box::new(ScVal::read_xdr(r)?))))
55257            }
55258            TypeVariant::ScMapEntry => {
55259                r.with_limited_depth(|r| Ok(Self::ScMapEntry(Box::new(ScMapEntry::read_xdr(r)?))))
55260            }
55261            TypeVariant::LedgerCloseMetaBatch => r.with_limited_depth(|r| {
55262                Ok(Self::LedgerCloseMetaBatch(Box::new(
55263                    LedgerCloseMetaBatch::read_xdr(r)?,
55264                )))
55265            }),
55266            TypeVariant::StoredTransactionSet => r.with_limited_depth(|r| {
55267                Ok(Self::StoredTransactionSet(Box::new(
55268                    StoredTransactionSet::read_xdr(r)?,
55269                )))
55270            }),
55271            TypeVariant::StoredDebugTransactionSet => r.with_limited_depth(|r| {
55272                Ok(Self::StoredDebugTransactionSet(Box::new(
55273                    StoredDebugTransactionSet::read_xdr(r)?,
55274                )))
55275            }),
55276            TypeVariant::PersistedScpStateV0 => r.with_limited_depth(|r| {
55277                Ok(Self::PersistedScpStateV0(Box::new(
55278                    PersistedScpStateV0::read_xdr(r)?,
55279                )))
55280            }),
55281            TypeVariant::PersistedScpStateV1 => r.with_limited_depth(|r| {
55282                Ok(Self::PersistedScpStateV1(Box::new(
55283                    PersistedScpStateV1::read_xdr(r)?,
55284                )))
55285            }),
55286            TypeVariant::PersistedScpState => r.with_limited_depth(|r| {
55287                Ok(Self::PersistedScpState(Box::new(
55288                    PersistedScpState::read_xdr(r)?,
55289                )))
55290            }),
55291            TypeVariant::Thresholds => {
55292                r.with_limited_depth(|r| Ok(Self::Thresholds(Box::new(Thresholds::read_xdr(r)?))))
55293            }
55294            TypeVariant::String32 => {
55295                r.with_limited_depth(|r| Ok(Self::String32(Box::new(String32::read_xdr(r)?))))
55296            }
55297            TypeVariant::String64 => {
55298                r.with_limited_depth(|r| Ok(Self::String64(Box::new(String64::read_xdr(r)?))))
55299            }
55300            TypeVariant::SequenceNumber => r.with_limited_depth(|r| {
55301                Ok(Self::SequenceNumber(Box::new(SequenceNumber::read_xdr(r)?)))
55302            }),
55303            TypeVariant::DataValue => {
55304                r.with_limited_depth(|r| Ok(Self::DataValue(Box::new(DataValue::read_xdr(r)?))))
55305            }
55306            TypeVariant::AssetCode4 => {
55307                r.with_limited_depth(|r| Ok(Self::AssetCode4(Box::new(AssetCode4::read_xdr(r)?))))
55308            }
55309            TypeVariant::AssetCode12 => {
55310                r.with_limited_depth(|r| Ok(Self::AssetCode12(Box::new(AssetCode12::read_xdr(r)?))))
55311            }
55312            TypeVariant::AssetType => {
55313                r.with_limited_depth(|r| Ok(Self::AssetType(Box::new(AssetType::read_xdr(r)?))))
55314            }
55315            TypeVariant::AssetCode => {
55316                r.with_limited_depth(|r| Ok(Self::AssetCode(Box::new(AssetCode::read_xdr(r)?))))
55317            }
55318            TypeVariant::AlphaNum4 => {
55319                r.with_limited_depth(|r| Ok(Self::AlphaNum4(Box::new(AlphaNum4::read_xdr(r)?))))
55320            }
55321            TypeVariant::AlphaNum12 => {
55322                r.with_limited_depth(|r| Ok(Self::AlphaNum12(Box::new(AlphaNum12::read_xdr(r)?))))
55323            }
55324            TypeVariant::Asset => {
55325                r.with_limited_depth(|r| Ok(Self::Asset(Box::new(Asset::read_xdr(r)?))))
55326            }
55327            TypeVariant::Price => {
55328                r.with_limited_depth(|r| Ok(Self::Price(Box::new(Price::read_xdr(r)?))))
55329            }
55330            TypeVariant::Liabilities => {
55331                r.with_limited_depth(|r| Ok(Self::Liabilities(Box::new(Liabilities::read_xdr(r)?))))
55332            }
55333            TypeVariant::ThresholdIndexes => r.with_limited_depth(|r| {
55334                Ok(Self::ThresholdIndexes(Box::new(
55335                    ThresholdIndexes::read_xdr(r)?,
55336                )))
55337            }),
55338            TypeVariant::LedgerEntryType => r.with_limited_depth(|r| {
55339                Ok(Self::LedgerEntryType(Box::new(LedgerEntryType::read_xdr(
55340                    r,
55341                )?)))
55342            }),
55343            TypeVariant::Signer => {
55344                r.with_limited_depth(|r| Ok(Self::Signer(Box::new(Signer::read_xdr(r)?))))
55345            }
55346            TypeVariant::AccountFlags => r.with_limited_depth(|r| {
55347                Ok(Self::AccountFlags(Box::new(AccountFlags::read_xdr(r)?)))
55348            }),
55349            TypeVariant::SponsorshipDescriptor => r.with_limited_depth(|r| {
55350                Ok(Self::SponsorshipDescriptor(Box::new(
55351                    SponsorshipDescriptor::read_xdr(r)?,
55352                )))
55353            }),
55354            TypeVariant::AccountEntryExtensionV3 => r.with_limited_depth(|r| {
55355                Ok(Self::AccountEntryExtensionV3(Box::new(
55356                    AccountEntryExtensionV3::read_xdr(r)?,
55357                )))
55358            }),
55359            TypeVariant::AccountEntryExtensionV2 => r.with_limited_depth(|r| {
55360                Ok(Self::AccountEntryExtensionV2(Box::new(
55361                    AccountEntryExtensionV2::read_xdr(r)?,
55362                )))
55363            }),
55364            TypeVariant::AccountEntryExtensionV2Ext => r.with_limited_depth(|r| {
55365                Ok(Self::AccountEntryExtensionV2Ext(Box::new(
55366                    AccountEntryExtensionV2Ext::read_xdr(r)?,
55367                )))
55368            }),
55369            TypeVariant::AccountEntryExtensionV1 => r.with_limited_depth(|r| {
55370                Ok(Self::AccountEntryExtensionV1(Box::new(
55371                    AccountEntryExtensionV1::read_xdr(r)?,
55372                )))
55373            }),
55374            TypeVariant::AccountEntryExtensionV1Ext => r.with_limited_depth(|r| {
55375                Ok(Self::AccountEntryExtensionV1Ext(Box::new(
55376                    AccountEntryExtensionV1Ext::read_xdr(r)?,
55377                )))
55378            }),
55379            TypeVariant::AccountEntry => r.with_limited_depth(|r| {
55380                Ok(Self::AccountEntry(Box::new(AccountEntry::read_xdr(r)?)))
55381            }),
55382            TypeVariant::AccountEntryExt => r.with_limited_depth(|r| {
55383                Ok(Self::AccountEntryExt(Box::new(AccountEntryExt::read_xdr(
55384                    r,
55385                )?)))
55386            }),
55387            TypeVariant::TrustLineFlags => r.with_limited_depth(|r| {
55388                Ok(Self::TrustLineFlags(Box::new(TrustLineFlags::read_xdr(r)?)))
55389            }),
55390            TypeVariant::LiquidityPoolType => r.with_limited_depth(|r| {
55391                Ok(Self::LiquidityPoolType(Box::new(
55392                    LiquidityPoolType::read_xdr(r)?,
55393                )))
55394            }),
55395            TypeVariant::TrustLineAsset => r.with_limited_depth(|r| {
55396                Ok(Self::TrustLineAsset(Box::new(TrustLineAsset::read_xdr(r)?)))
55397            }),
55398            TypeVariant::TrustLineEntryExtensionV2 => r.with_limited_depth(|r| {
55399                Ok(Self::TrustLineEntryExtensionV2(Box::new(
55400                    TrustLineEntryExtensionV2::read_xdr(r)?,
55401                )))
55402            }),
55403            TypeVariant::TrustLineEntryExtensionV2Ext => r.with_limited_depth(|r| {
55404                Ok(Self::TrustLineEntryExtensionV2Ext(Box::new(
55405                    TrustLineEntryExtensionV2Ext::read_xdr(r)?,
55406                )))
55407            }),
55408            TypeVariant::TrustLineEntry => r.with_limited_depth(|r| {
55409                Ok(Self::TrustLineEntry(Box::new(TrustLineEntry::read_xdr(r)?)))
55410            }),
55411            TypeVariant::TrustLineEntryExt => r.with_limited_depth(|r| {
55412                Ok(Self::TrustLineEntryExt(Box::new(
55413                    TrustLineEntryExt::read_xdr(r)?,
55414                )))
55415            }),
55416            TypeVariant::TrustLineEntryV1 => r.with_limited_depth(|r| {
55417                Ok(Self::TrustLineEntryV1(Box::new(
55418                    TrustLineEntryV1::read_xdr(r)?,
55419                )))
55420            }),
55421            TypeVariant::TrustLineEntryV1Ext => r.with_limited_depth(|r| {
55422                Ok(Self::TrustLineEntryV1Ext(Box::new(
55423                    TrustLineEntryV1Ext::read_xdr(r)?,
55424                )))
55425            }),
55426            TypeVariant::OfferEntryFlags => r.with_limited_depth(|r| {
55427                Ok(Self::OfferEntryFlags(Box::new(OfferEntryFlags::read_xdr(
55428                    r,
55429                )?)))
55430            }),
55431            TypeVariant::OfferEntry => {
55432                r.with_limited_depth(|r| Ok(Self::OfferEntry(Box::new(OfferEntry::read_xdr(r)?))))
55433            }
55434            TypeVariant::OfferEntryExt => r.with_limited_depth(|r| {
55435                Ok(Self::OfferEntryExt(Box::new(OfferEntryExt::read_xdr(r)?)))
55436            }),
55437            TypeVariant::DataEntry => {
55438                r.with_limited_depth(|r| Ok(Self::DataEntry(Box::new(DataEntry::read_xdr(r)?))))
55439            }
55440            TypeVariant::DataEntryExt => r.with_limited_depth(|r| {
55441                Ok(Self::DataEntryExt(Box::new(DataEntryExt::read_xdr(r)?)))
55442            }),
55443            TypeVariant::ClaimPredicateType => r.with_limited_depth(|r| {
55444                Ok(Self::ClaimPredicateType(Box::new(
55445                    ClaimPredicateType::read_xdr(r)?,
55446                )))
55447            }),
55448            TypeVariant::ClaimPredicate => r.with_limited_depth(|r| {
55449                Ok(Self::ClaimPredicate(Box::new(ClaimPredicate::read_xdr(r)?)))
55450            }),
55451            TypeVariant::ClaimantType => r.with_limited_depth(|r| {
55452                Ok(Self::ClaimantType(Box::new(ClaimantType::read_xdr(r)?)))
55453            }),
55454            TypeVariant::Claimant => {
55455                r.with_limited_depth(|r| Ok(Self::Claimant(Box::new(Claimant::read_xdr(r)?))))
55456            }
55457            TypeVariant::ClaimantV0 => {
55458                r.with_limited_depth(|r| Ok(Self::ClaimantV0(Box::new(ClaimantV0::read_xdr(r)?))))
55459            }
55460            TypeVariant::ClaimableBalanceFlags => r.with_limited_depth(|r| {
55461                Ok(Self::ClaimableBalanceFlags(Box::new(
55462                    ClaimableBalanceFlags::read_xdr(r)?,
55463                )))
55464            }),
55465            TypeVariant::ClaimableBalanceEntryExtensionV1 => r.with_limited_depth(|r| {
55466                Ok(Self::ClaimableBalanceEntryExtensionV1(Box::new(
55467                    ClaimableBalanceEntryExtensionV1::read_xdr(r)?,
55468                )))
55469            }),
55470            TypeVariant::ClaimableBalanceEntryExtensionV1Ext => r.with_limited_depth(|r| {
55471                Ok(Self::ClaimableBalanceEntryExtensionV1Ext(Box::new(
55472                    ClaimableBalanceEntryExtensionV1Ext::read_xdr(r)?,
55473                )))
55474            }),
55475            TypeVariant::ClaimableBalanceEntry => r.with_limited_depth(|r| {
55476                Ok(Self::ClaimableBalanceEntry(Box::new(
55477                    ClaimableBalanceEntry::read_xdr(r)?,
55478                )))
55479            }),
55480            TypeVariant::ClaimableBalanceEntryExt => r.with_limited_depth(|r| {
55481                Ok(Self::ClaimableBalanceEntryExt(Box::new(
55482                    ClaimableBalanceEntryExt::read_xdr(r)?,
55483                )))
55484            }),
55485            TypeVariant::LiquidityPoolConstantProductParameters => r.with_limited_depth(|r| {
55486                Ok(Self::LiquidityPoolConstantProductParameters(Box::new(
55487                    LiquidityPoolConstantProductParameters::read_xdr(r)?,
55488                )))
55489            }),
55490            TypeVariant::LiquidityPoolEntry => r.with_limited_depth(|r| {
55491                Ok(Self::LiquidityPoolEntry(Box::new(
55492                    LiquidityPoolEntry::read_xdr(r)?,
55493                )))
55494            }),
55495            TypeVariant::LiquidityPoolEntryBody => r.with_limited_depth(|r| {
55496                Ok(Self::LiquidityPoolEntryBody(Box::new(
55497                    LiquidityPoolEntryBody::read_xdr(r)?,
55498                )))
55499            }),
55500            TypeVariant::LiquidityPoolEntryConstantProduct => r.with_limited_depth(|r| {
55501                Ok(Self::LiquidityPoolEntryConstantProduct(Box::new(
55502                    LiquidityPoolEntryConstantProduct::read_xdr(r)?,
55503                )))
55504            }),
55505            TypeVariant::ContractDataDurability => r.with_limited_depth(|r| {
55506                Ok(Self::ContractDataDurability(Box::new(
55507                    ContractDataDurability::read_xdr(r)?,
55508                )))
55509            }),
55510            TypeVariant::ContractDataEntry => r.with_limited_depth(|r| {
55511                Ok(Self::ContractDataEntry(Box::new(
55512                    ContractDataEntry::read_xdr(r)?,
55513                )))
55514            }),
55515            TypeVariant::ContractCodeCostInputs => r.with_limited_depth(|r| {
55516                Ok(Self::ContractCodeCostInputs(Box::new(
55517                    ContractCodeCostInputs::read_xdr(r)?,
55518                )))
55519            }),
55520            TypeVariant::ContractCodeEntry => r.with_limited_depth(|r| {
55521                Ok(Self::ContractCodeEntry(Box::new(
55522                    ContractCodeEntry::read_xdr(r)?,
55523                )))
55524            }),
55525            TypeVariant::ContractCodeEntryExt => r.with_limited_depth(|r| {
55526                Ok(Self::ContractCodeEntryExt(Box::new(
55527                    ContractCodeEntryExt::read_xdr(r)?,
55528                )))
55529            }),
55530            TypeVariant::ContractCodeEntryV1 => r.with_limited_depth(|r| {
55531                Ok(Self::ContractCodeEntryV1(Box::new(
55532                    ContractCodeEntryV1::read_xdr(r)?,
55533                )))
55534            }),
55535            TypeVariant::TtlEntry => {
55536                r.with_limited_depth(|r| Ok(Self::TtlEntry(Box::new(TtlEntry::read_xdr(r)?))))
55537            }
55538            TypeVariant::LedgerEntryExtensionV1 => r.with_limited_depth(|r| {
55539                Ok(Self::LedgerEntryExtensionV1(Box::new(
55540                    LedgerEntryExtensionV1::read_xdr(r)?,
55541                )))
55542            }),
55543            TypeVariant::LedgerEntryExtensionV1Ext => r.with_limited_depth(|r| {
55544                Ok(Self::LedgerEntryExtensionV1Ext(Box::new(
55545                    LedgerEntryExtensionV1Ext::read_xdr(r)?,
55546                )))
55547            }),
55548            TypeVariant::LedgerEntry => {
55549                r.with_limited_depth(|r| Ok(Self::LedgerEntry(Box::new(LedgerEntry::read_xdr(r)?))))
55550            }
55551            TypeVariant::LedgerEntryData => r.with_limited_depth(|r| {
55552                Ok(Self::LedgerEntryData(Box::new(LedgerEntryData::read_xdr(
55553                    r,
55554                )?)))
55555            }),
55556            TypeVariant::LedgerEntryExt => r.with_limited_depth(|r| {
55557                Ok(Self::LedgerEntryExt(Box::new(LedgerEntryExt::read_xdr(r)?)))
55558            }),
55559            TypeVariant::LedgerKey => {
55560                r.with_limited_depth(|r| Ok(Self::LedgerKey(Box::new(LedgerKey::read_xdr(r)?))))
55561            }
55562            TypeVariant::LedgerKeyAccount => r.with_limited_depth(|r| {
55563                Ok(Self::LedgerKeyAccount(Box::new(
55564                    LedgerKeyAccount::read_xdr(r)?,
55565                )))
55566            }),
55567            TypeVariant::LedgerKeyTrustLine => r.with_limited_depth(|r| {
55568                Ok(Self::LedgerKeyTrustLine(Box::new(
55569                    LedgerKeyTrustLine::read_xdr(r)?,
55570                )))
55571            }),
55572            TypeVariant::LedgerKeyOffer => r.with_limited_depth(|r| {
55573                Ok(Self::LedgerKeyOffer(Box::new(LedgerKeyOffer::read_xdr(r)?)))
55574            }),
55575            TypeVariant::LedgerKeyData => r.with_limited_depth(|r| {
55576                Ok(Self::LedgerKeyData(Box::new(LedgerKeyData::read_xdr(r)?)))
55577            }),
55578            TypeVariant::LedgerKeyClaimableBalance => r.with_limited_depth(|r| {
55579                Ok(Self::LedgerKeyClaimableBalance(Box::new(
55580                    LedgerKeyClaimableBalance::read_xdr(r)?,
55581                )))
55582            }),
55583            TypeVariant::LedgerKeyLiquidityPool => r.with_limited_depth(|r| {
55584                Ok(Self::LedgerKeyLiquidityPool(Box::new(
55585                    LedgerKeyLiquidityPool::read_xdr(r)?,
55586                )))
55587            }),
55588            TypeVariant::LedgerKeyContractData => r.with_limited_depth(|r| {
55589                Ok(Self::LedgerKeyContractData(Box::new(
55590                    LedgerKeyContractData::read_xdr(r)?,
55591                )))
55592            }),
55593            TypeVariant::LedgerKeyContractCode => r.with_limited_depth(|r| {
55594                Ok(Self::LedgerKeyContractCode(Box::new(
55595                    LedgerKeyContractCode::read_xdr(r)?,
55596                )))
55597            }),
55598            TypeVariant::LedgerKeyConfigSetting => r.with_limited_depth(|r| {
55599                Ok(Self::LedgerKeyConfigSetting(Box::new(
55600                    LedgerKeyConfigSetting::read_xdr(r)?,
55601                )))
55602            }),
55603            TypeVariant::LedgerKeyTtl => r.with_limited_depth(|r| {
55604                Ok(Self::LedgerKeyTtl(Box::new(LedgerKeyTtl::read_xdr(r)?)))
55605            }),
55606            TypeVariant::EnvelopeType => r.with_limited_depth(|r| {
55607                Ok(Self::EnvelopeType(Box::new(EnvelopeType::read_xdr(r)?)))
55608            }),
55609            TypeVariant::BucketListType => r.with_limited_depth(|r| {
55610                Ok(Self::BucketListType(Box::new(BucketListType::read_xdr(r)?)))
55611            }),
55612            TypeVariant::BucketEntryType => r.with_limited_depth(|r| {
55613                Ok(Self::BucketEntryType(Box::new(BucketEntryType::read_xdr(
55614                    r,
55615                )?)))
55616            }),
55617            TypeVariant::HotArchiveBucketEntryType => r.with_limited_depth(|r| {
55618                Ok(Self::HotArchiveBucketEntryType(Box::new(
55619                    HotArchiveBucketEntryType::read_xdr(r)?,
55620                )))
55621            }),
55622            TypeVariant::BucketMetadata => r.with_limited_depth(|r| {
55623                Ok(Self::BucketMetadata(Box::new(BucketMetadata::read_xdr(r)?)))
55624            }),
55625            TypeVariant::BucketMetadataExt => r.with_limited_depth(|r| {
55626                Ok(Self::BucketMetadataExt(Box::new(
55627                    BucketMetadataExt::read_xdr(r)?,
55628                )))
55629            }),
55630            TypeVariant::BucketEntry => {
55631                r.with_limited_depth(|r| Ok(Self::BucketEntry(Box::new(BucketEntry::read_xdr(r)?))))
55632            }
55633            TypeVariant::HotArchiveBucketEntry => r.with_limited_depth(|r| {
55634                Ok(Self::HotArchiveBucketEntry(Box::new(
55635                    HotArchiveBucketEntry::read_xdr(r)?,
55636                )))
55637            }),
55638            TypeVariant::UpgradeType => {
55639                r.with_limited_depth(|r| Ok(Self::UpgradeType(Box::new(UpgradeType::read_xdr(r)?))))
55640            }
55641            TypeVariant::StellarValueType => r.with_limited_depth(|r| {
55642                Ok(Self::StellarValueType(Box::new(
55643                    StellarValueType::read_xdr(r)?,
55644                )))
55645            }),
55646            TypeVariant::LedgerCloseValueSignature => r.with_limited_depth(|r| {
55647                Ok(Self::LedgerCloseValueSignature(Box::new(
55648                    LedgerCloseValueSignature::read_xdr(r)?,
55649                )))
55650            }),
55651            TypeVariant::StellarValue => r.with_limited_depth(|r| {
55652                Ok(Self::StellarValue(Box::new(StellarValue::read_xdr(r)?)))
55653            }),
55654            TypeVariant::StellarValueExt => r.with_limited_depth(|r| {
55655                Ok(Self::StellarValueExt(Box::new(StellarValueExt::read_xdr(
55656                    r,
55657                )?)))
55658            }),
55659            TypeVariant::LedgerHeaderFlags => r.with_limited_depth(|r| {
55660                Ok(Self::LedgerHeaderFlags(Box::new(
55661                    LedgerHeaderFlags::read_xdr(r)?,
55662                )))
55663            }),
55664            TypeVariant::LedgerHeaderExtensionV1 => r.with_limited_depth(|r| {
55665                Ok(Self::LedgerHeaderExtensionV1(Box::new(
55666                    LedgerHeaderExtensionV1::read_xdr(r)?,
55667                )))
55668            }),
55669            TypeVariant::LedgerHeaderExtensionV1Ext => r.with_limited_depth(|r| {
55670                Ok(Self::LedgerHeaderExtensionV1Ext(Box::new(
55671                    LedgerHeaderExtensionV1Ext::read_xdr(r)?,
55672                )))
55673            }),
55674            TypeVariant::LedgerHeader => r.with_limited_depth(|r| {
55675                Ok(Self::LedgerHeader(Box::new(LedgerHeader::read_xdr(r)?)))
55676            }),
55677            TypeVariant::LedgerHeaderExt => r.with_limited_depth(|r| {
55678                Ok(Self::LedgerHeaderExt(Box::new(LedgerHeaderExt::read_xdr(
55679                    r,
55680                )?)))
55681            }),
55682            TypeVariant::LedgerUpgradeType => r.with_limited_depth(|r| {
55683                Ok(Self::LedgerUpgradeType(Box::new(
55684                    LedgerUpgradeType::read_xdr(r)?,
55685                )))
55686            }),
55687            TypeVariant::ConfigUpgradeSetKey => r.with_limited_depth(|r| {
55688                Ok(Self::ConfigUpgradeSetKey(Box::new(
55689                    ConfigUpgradeSetKey::read_xdr(r)?,
55690                )))
55691            }),
55692            TypeVariant::LedgerUpgrade => r.with_limited_depth(|r| {
55693                Ok(Self::LedgerUpgrade(Box::new(LedgerUpgrade::read_xdr(r)?)))
55694            }),
55695            TypeVariant::ConfigUpgradeSet => r.with_limited_depth(|r| {
55696                Ok(Self::ConfigUpgradeSet(Box::new(
55697                    ConfigUpgradeSet::read_xdr(r)?,
55698                )))
55699            }),
55700            TypeVariant::TxSetComponentType => r.with_limited_depth(|r| {
55701                Ok(Self::TxSetComponentType(Box::new(
55702                    TxSetComponentType::read_xdr(r)?,
55703                )))
55704            }),
55705            TypeVariant::DependentTxCluster => r.with_limited_depth(|r| {
55706                Ok(Self::DependentTxCluster(Box::new(
55707                    DependentTxCluster::read_xdr(r)?,
55708                )))
55709            }),
55710            TypeVariant::ParallelTxExecutionStage => r.with_limited_depth(|r| {
55711                Ok(Self::ParallelTxExecutionStage(Box::new(
55712                    ParallelTxExecutionStage::read_xdr(r)?,
55713                )))
55714            }),
55715            TypeVariant::ParallelTxsComponent => r.with_limited_depth(|r| {
55716                Ok(Self::ParallelTxsComponent(Box::new(
55717                    ParallelTxsComponent::read_xdr(r)?,
55718                )))
55719            }),
55720            TypeVariant::TxSetComponent => r.with_limited_depth(|r| {
55721                Ok(Self::TxSetComponent(Box::new(TxSetComponent::read_xdr(r)?)))
55722            }),
55723            TypeVariant::TxSetComponentTxsMaybeDiscountedFee => r.with_limited_depth(|r| {
55724                Ok(Self::TxSetComponentTxsMaybeDiscountedFee(Box::new(
55725                    TxSetComponentTxsMaybeDiscountedFee::read_xdr(r)?,
55726                )))
55727            }),
55728            TypeVariant::TransactionPhase => r.with_limited_depth(|r| {
55729                Ok(Self::TransactionPhase(Box::new(
55730                    TransactionPhase::read_xdr(r)?,
55731                )))
55732            }),
55733            TypeVariant::TransactionSet => r.with_limited_depth(|r| {
55734                Ok(Self::TransactionSet(Box::new(TransactionSet::read_xdr(r)?)))
55735            }),
55736            TypeVariant::TransactionSetV1 => r.with_limited_depth(|r| {
55737                Ok(Self::TransactionSetV1(Box::new(
55738                    TransactionSetV1::read_xdr(r)?,
55739                )))
55740            }),
55741            TypeVariant::GeneralizedTransactionSet => r.with_limited_depth(|r| {
55742                Ok(Self::GeneralizedTransactionSet(Box::new(
55743                    GeneralizedTransactionSet::read_xdr(r)?,
55744                )))
55745            }),
55746            TypeVariant::TransactionResultPair => r.with_limited_depth(|r| {
55747                Ok(Self::TransactionResultPair(Box::new(
55748                    TransactionResultPair::read_xdr(r)?,
55749                )))
55750            }),
55751            TypeVariant::TransactionResultSet => r.with_limited_depth(|r| {
55752                Ok(Self::TransactionResultSet(Box::new(
55753                    TransactionResultSet::read_xdr(r)?,
55754                )))
55755            }),
55756            TypeVariant::TransactionHistoryEntry => r.with_limited_depth(|r| {
55757                Ok(Self::TransactionHistoryEntry(Box::new(
55758                    TransactionHistoryEntry::read_xdr(r)?,
55759                )))
55760            }),
55761            TypeVariant::TransactionHistoryEntryExt => r.with_limited_depth(|r| {
55762                Ok(Self::TransactionHistoryEntryExt(Box::new(
55763                    TransactionHistoryEntryExt::read_xdr(r)?,
55764                )))
55765            }),
55766            TypeVariant::TransactionHistoryResultEntry => r.with_limited_depth(|r| {
55767                Ok(Self::TransactionHistoryResultEntry(Box::new(
55768                    TransactionHistoryResultEntry::read_xdr(r)?,
55769                )))
55770            }),
55771            TypeVariant::TransactionHistoryResultEntryExt => r.with_limited_depth(|r| {
55772                Ok(Self::TransactionHistoryResultEntryExt(Box::new(
55773                    TransactionHistoryResultEntryExt::read_xdr(r)?,
55774                )))
55775            }),
55776            TypeVariant::LedgerHeaderHistoryEntry => r.with_limited_depth(|r| {
55777                Ok(Self::LedgerHeaderHistoryEntry(Box::new(
55778                    LedgerHeaderHistoryEntry::read_xdr(r)?,
55779                )))
55780            }),
55781            TypeVariant::LedgerHeaderHistoryEntryExt => r.with_limited_depth(|r| {
55782                Ok(Self::LedgerHeaderHistoryEntryExt(Box::new(
55783                    LedgerHeaderHistoryEntryExt::read_xdr(r)?,
55784                )))
55785            }),
55786            TypeVariant::LedgerScpMessages => r.with_limited_depth(|r| {
55787                Ok(Self::LedgerScpMessages(Box::new(
55788                    LedgerScpMessages::read_xdr(r)?,
55789                )))
55790            }),
55791            TypeVariant::ScpHistoryEntryV0 => r.with_limited_depth(|r| {
55792                Ok(Self::ScpHistoryEntryV0(Box::new(
55793                    ScpHistoryEntryV0::read_xdr(r)?,
55794                )))
55795            }),
55796            TypeVariant::ScpHistoryEntry => r.with_limited_depth(|r| {
55797                Ok(Self::ScpHistoryEntry(Box::new(ScpHistoryEntry::read_xdr(
55798                    r,
55799                )?)))
55800            }),
55801            TypeVariant::LedgerEntryChangeType => r.with_limited_depth(|r| {
55802                Ok(Self::LedgerEntryChangeType(Box::new(
55803                    LedgerEntryChangeType::read_xdr(r)?,
55804                )))
55805            }),
55806            TypeVariant::LedgerEntryChange => r.with_limited_depth(|r| {
55807                Ok(Self::LedgerEntryChange(Box::new(
55808                    LedgerEntryChange::read_xdr(r)?,
55809                )))
55810            }),
55811            TypeVariant::LedgerEntryChanges => r.with_limited_depth(|r| {
55812                Ok(Self::LedgerEntryChanges(Box::new(
55813                    LedgerEntryChanges::read_xdr(r)?,
55814                )))
55815            }),
55816            TypeVariant::OperationMeta => r.with_limited_depth(|r| {
55817                Ok(Self::OperationMeta(Box::new(OperationMeta::read_xdr(r)?)))
55818            }),
55819            TypeVariant::TransactionMetaV1 => r.with_limited_depth(|r| {
55820                Ok(Self::TransactionMetaV1(Box::new(
55821                    TransactionMetaV1::read_xdr(r)?,
55822                )))
55823            }),
55824            TypeVariant::TransactionMetaV2 => r.with_limited_depth(|r| {
55825                Ok(Self::TransactionMetaV2(Box::new(
55826                    TransactionMetaV2::read_xdr(r)?,
55827                )))
55828            }),
55829            TypeVariant::ContractEventType => r.with_limited_depth(|r| {
55830                Ok(Self::ContractEventType(Box::new(
55831                    ContractEventType::read_xdr(r)?,
55832                )))
55833            }),
55834            TypeVariant::ContractEvent => r.with_limited_depth(|r| {
55835                Ok(Self::ContractEvent(Box::new(ContractEvent::read_xdr(r)?)))
55836            }),
55837            TypeVariant::ContractEventBody => r.with_limited_depth(|r| {
55838                Ok(Self::ContractEventBody(Box::new(
55839                    ContractEventBody::read_xdr(r)?,
55840                )))
55841            }),
55842            TypeVariant::ContractEventV0 => r.with_limited_depth(|r| {
55843                Ok(Self::ContractEventV0(Box::new(ContractEventV0::read_xdr(
55844                    r,
55845                )?)))
55846            }),
55847            TypeVariant::DiagnosticEvent => r.with_limited_depth(|r| {
55848                Ok(Self::DiagnosticEvent(Box::new(DiagnosticEvent::read_xdr(
55849                    r,
55850                )?)))
55851            }),
55852            TypeVariant::SorobanTransactionMetaExtV1 => r.with_limited_depth(|r| {
55853                Ok(Self::SorobanTransactionMetaExtV1(Box::new(
55854                    SorobanTransactionMetaExtV1::read_xdr(r)?,
55855                )))
55856            }),
55857            TypeVariant::SorobanTransactionMetaExt => r.with_limited_depth(|r| {
55858                Ok(Self::SorobanTransactionMetaExt(Box::new(
55859                    SorobanTransactionMetaExt::read_xdr(r)?,
55860                )))
55861            }),
55862            TypeVariant::SorobanTransactionMeta => r.with_limited_depth(|r| {
55863                Ok(Self::SorobanTransactionMeta(Box::new(
55864                    SorobanTransactionMeta::read_xdr(r)?,
55865                )))
55866            }),
55867            TypeVariant::TransactionMetaV3 => r.with_limited_depth(|r| {
55868                Ok(Self::TransactionMetaV3(Box::new(
55869                    TransactionMetaV3::read_xdr(r)?,
55870                )))
55871            }),
55872            TypeVariant::OperationMetaV2 => r.with_limited_depth(|r| {
55873                Ok(Self::OperationMetaV2(Box::new(OperationMetaV2::read_xdr(
55874                    r,
55875                )?)))
55876            }),
55877            TypeVariant::SorobanTransactionMetaV2 => r.with_limited_depth(|r| {
55878                Ok(Self::SorobanTransactionMetaV2(Box::new(
55879                    SorobanTransactionMetaV2::read_xdr(r)?,
55880                )))
55881            }),
55882            TypeVariant::TransactionEventStage => r.with_limited_depth(|r| {
55883                Ok(Self::TransactionEventStage(Box::new(
55884                    TransactionEventStage::read_xdr(r)?,
55885                )))
55886            }),
55887            TypeVariant::TransactionEvent => r.with_limited_depth(|r| {
55888                Ok(Self::TransactionEvent(Box::new(
55889                    TransactionEvent::read_xdr(r)?,
55890                )))
55891            }),
55892            TypeVariant::TransactionMetaV4 => r.with_limited_depth(|r| {
55893                Ok(Self::TransactionMetaV4(Box::new(
55894                    TransactionMetaV4::read_xdr(r)?,
55895                )))
55896            }),
55897            TypeVariant::InvokeHostFunctionSuccessPreImage => r.with_limited_depth(|r| {
55898                Ok(Self::InvokeHostFunctionSuccessPreImage(Box::new(
55899                    InvokeHostFunctionSuccessPreImage::read_xdr(r)?,
55900                )))
55901            }),
55902            TypeVariant::TransactionMeta => r.with_limited_depth(|r| {
55903                Ok(Self::TransactionMeta(Box::new(TransactionMeta::read_xdr(
55904                    r,
55905                )?)))
55906            }),
55907            TypeVariant::TransactionResultMeta => r.with_limited_depth(|r| {
55908                Ok(Self::TransactionResultMeta(Box::new(
55909                    TransactionResultMeta::read_xdr(r)?,
55910                )))
55911            }),
55912            TypeVariant::TransactionResultMetaV1 => r.with_limited_depth(|r| {
55913                Ok(Self::TransactionResultMetaV1(Box::new(
55914                    TransactionResultMetaV1::read_xdr(r)?,
55915                )))
55916            }),
55917            TypeVariant::UpgradeEntryMeta => r.with_limited_depth(|r| {
55918                Ok(Self::UpgradeEntryMeta(Box::new(
55919                    UpgradeEntryMeta::read_xdr(r)?,
55920                )))
55921            }),
55922            TypeVariant::LedgerCloseMetaV0 => r.with_limited_depth(|r| {
55923                Ok(Self::LedgerCloseMetaV0(Box::new(
55924                    LedgerCloseMetaV0::read_xdr(r)?,
55925                )))
55926            }),
55927            TypeVariant::LedgerCloseMetaExtV1 => r.with_limited_depth(|r| {
55928                Ok(Self::LedgerCloseMetaExtV1(Box::new(
55929                    LedgerCloseMetaExtV1::read_xdr(r)?,
55930                )))
55931            }),
55932            TypeVariant::LedgerCloseMetaExt => r.with_limited_depth(|r| {
55933                Ok(Self::LedgerCloseMetaExt(Box::new(
55934                    LedgerCloseMetaExt::read_xdr(r)?,
55935                )))
55936            }),
55937            TypeVariant::LedgerCloseMetaV1 => r.with_limited_depth(|r| {
55938                Ok(Self::LedgerCloseMetaV1(Box::new(
55939                    LedgerCloseMetaV1::read_xdr(r)?,
55940                )))
55941            }),
55942            TypeVariant::LedgerCloseMetaV2 => r.with_limited_depth(|r| {
55943                Ok(Self::LedgerCloseMetaV2(Box::new(
55944                    LedgerCloseMetaV2::read_xdr(r)?,
55945                )))
55946            }),
55947            TypeVariant::LedgerCloseMeta => r.with_limited_depth(|r| {
55948                Ok(Self::LedgerCloseMeta(Box::new(LedgerCloseMeta::read_xdr(
55949                    r,
55950                )?)))
55951            }),
55952            TypeVariant::ErrorCode => {
55953                r.with_limited_depth(|r| Ok(Self::ErrorCode(Box::new(ErrorCode::read_xdr(r)?))))
55954            }
55955            TypeVariant::SError => {
55956                r.with_limited_depth(|r| Ok(Self::SError(Box::new(SError::read_xdr(r)?))))
55957            }
55958            TypeVariant::SendMore => {
55959                r.with_limited_depth(|r| Ok(Self::SendMore(Box::new(SendMore::read_xdr(r)?))))
55960            }
55961            TypeVariant::SendMoreExtended => r.with_limited_depth(|r| {
55962                Ok(Self::SendMoreExtended(Box::new(
55963                    SendMoreExtended::read_xdr(r)?,
55964                )))
55965            }),
55966            TypeVariant::AuthCert => {
55967                r.with_limited_depth(|r| Ok(Self::AuthCert(Box::new(AuthCert::read_xdr(r)?))))
55968            }
55969            TypeVariant::Hello => {
55970                r.with_limited_depth(|r| Ok(Self::Hello(Box::new(Hello::read_xdr(r)?))))
55971            }
55972            TypeVariant::Auth => {
55973                r.with_limited_depth(|r| Ok(Self::Auth(Box::new(Auth::read_xdr(r)?))))
55974            }
55975            TypeVariant::IpAddrType => {
55976                r.with_limited_depth(|r| Ok(Self::IpAddrType(Box::new(IpAddrType::read_xdr(r)?))))
55977            }
55978            TypeVariant::PeerAddress => {
55979                r.with_limited_depth(|r| Ok(Self::PeerAddress(Box::new(PeerAddress::read_xdr(r)?))))
55980            }
55981            TypeVariant::PeerAddressIp => r.with_limited_depth(|r| {
55982                Ok(Self::PeerAddressIp(Box::new(PeerAddressIp::read_xdr(r)?)))
55983            }),
55984            TypeVariant::MessageType => {
55985                r.with_limited_depth(|r| Ok(Self::MessageType(Box::new(MessageType::read_xdr(r)?))))
55986            }
55987            TypeVariant::DontHave => {
55988                r.with_limited_depth(|r| Ok(Self::DontHave(Box::new(DontHave::read_xdr(r)?))))
55989            }
55990            TypeVariant::SurveyMessageCommandType => r.with_limited_depth(|r| {
55991                Ok(Self::SurveyMessageCommandType(Box::new(
55992                    SurveyMessageCommandType::read_xdr(r)?,
55993                )))
55994            }),
55995            TypeVariant::SurveyMessageResponseType => r.with_limited_depth(|r| {
55996                Ok(Self::SurveyMessageResponseType(Box::new(
55997                    SurveyMessageResponseType::read_xdr(r)?,
55998                )))
55999            }),
56000            TypeVariant::TimeSlicedSurveyStartCollectingMessage => r.with_limited_depth(|r| {
56001                Ok(Self::TimeSlicedSurveyStartCollectingMessage(Box::new(
56002                    TimeSlicedSurveyStartCollectingMessage::read_xdr(r)?,
56003                )))
56004            }),
56005            TypeVariant::SignedTimeSlicedSurveyStartCollectingMessage => {
56006                r.with_limited_depth(|r| {
56007                    Ok(Self::SignedTimeSlicedSurveyStartCollectingMessage(
56008                        Box::new(SignedTimeSlicedSurveyStartCollectingMessage::read_xdr(r)?),
56009                    ))
56010                })
56011            }
56012            TypeVariant::TimeSlicedSurveyStopCollectingMessage => r.with_limited_depth(|r| {
56013                Ok(Self::TimeSlicedSurveyStopCollectingMessage(Box::new(
56014                    TimeSlicedSurveyStopCollectingMessage::read_xdr(r)?,
56015                )))
56016            }),
56017            TypeVariant::SignedTimeSlicedSurveyStopCollectingMessage => r.with_limited_depth(|r| {
56018                Ok(Self::SignedTimeSlicedSurveyStopCollectingMessage(Box::new(
56019                    SignedTimeSlicedSurveyStopCollectingMessage::read_xdr(r)?,
56020                )))
56021            }),
56022            TypeVariant::SurveyRequestMessage => r.with_limited_depth(|r| {
56023                Ok(Self::SurveyRequestMessage(Box::new(
56024                    SurveyRequestMessage::read_xdr(r)?,
56025                )))
56026            }),
56027            TypeVariant::TimeSlicedSurveyRequestMessage => r.with_limited_depth(|r| {
56028                Ok(Self::TimeSlicedSurveyRequestMessage(Box::new(
56029                    TimeSlicedSurveyRequestMessage::read_xdr(r)?,
56030                )))
56031            }),
56032            TypeVariant::SignedTimeSlicedSurveyRequestMessage => r.with_limited_depth(|r| {
56033                Ok(Self::SignedTimeSlicedSurveyRequestMessage(Box::new(
56034                    SignedTimeSlicedSurveyRequestMessage::read_xdr(r)?,
56035                )))
56036            }),
56037            TypeVariant::EncryptedBody => r.with_limited_depth(|r| {
56038                Ok(Self::EncryptedBody(Box::new(EncryptedBody::read_xdr(r)?)))
56039            }),
56040            TypeVariant::SurveyResponseMessage => r.with_limited_depth(|r| {
56041                Ok(Self::SurveyResponseMessage(Box::new(
56042                    SurveyResponseMessage::read_xdr(r)?,
56043                )))
56044            }),
56045            TypeVariant::TimeSlicedSurveyResponseMessage => r.with_limited_depth(|r| {
56046                Ok(Self::TimeSlicedSurveyResponseMessage(Box::new(
56047                    TimeSlicedSurveyResponseMessage::read_xdr(r)?,
56048                )))
56049            }),
56050            TypeVariant::SignedTimeSlicedSurveyResponseMessage => r.with_limited_depth(|r| {
56051                Ok(Self::SignedTimeSlicedSurveyResponseMessage(Box::new(
56052                    SignedTimeSlicedSurveyResponseMessage::read_xdr(r)?,
56053                )))
56054            }),
56055            TypeVariant::PeerStats => {
56056                r.with_limited_depth(|r| Ok(Self::PeerStats(Box::new(PeerStats::read_xdr(r)?))))
56057            }
56058            TypeVariant::TimeSlicedNodeData => r.with_limited_depth(|r| {
56059                Ok(Self::TimeSlicedNodeData(Box::new(
56060                    TimeSlicedNodeData::read_xdr(r)?,
56061                )))
56062            }),
56063            TypeVariant::TimeSlicedPeerData => r.with_limited_depth(|r| {
56064                Ok(Self::TimeSlicedPeerData(Box::new(
56065                    TimeSlicedPeerData::read_xdr(r)?,
56066                )))
56067            }),
56068            TypeVariant::TimeSlicedPeerDataList => r.with_limited_depth(|r| {
56069                Ok(Self::TimeSlicedPeerDataList(Box::new(
56070                    TimeSlicedPeerDataList::read_xdr(r)?,
56071                )))
56072            }),
56073            TypeVariant::TopologyResponseBodyV2 => r.with_limited_depth(|r| {
56074                Ok(Self::TopologyResponseBodyV2(Box::new(
56075                    TopologyResponseBodyV2::read_xdr(r)?,
56076                )))
56077            }),
56078            TypeVariant::SurveyResponseBody => r.with_limited_depth(|r| {
56079                Ok(Self::SurveyResponseBody(Box::new(
56080                    SurveyResponseBody::read_xdr(r)?,
56081                )))
56082            }),
56083            TypeVariant::TxAdvertVector => r.with_limited_depth(|r| {
56084                Ok(Self::TxAdvertVector(Box::new(TxAdvertVector::read_xdr(r)?)))
56085            }),
56086            TypeVariant::FloodAdvert => {
56087                r.with_limited_depth(|r| Ok(Self::FloodAdvert(Box::new(FloodAdvert::read_xdr(r)?))))
56088            }
56089            TypeVariant::TxDemandVector => r.with_limited_depth(|r| {
56090                Ok(Self::TxDemandVector(Box::new(TxDemandVector::read_xdr(r)?)))
56091            }),
56092            TypeVariant::FloodDemand => {
56093                r.with_limited_depth(|r| Ok(Self::FloodDemand(Box::new(FloodDemand::read_xdr(r)?))))
56094            }
56095            TypeVariant::StellarMessage => r.with_limited_depth(|r| {
56096                Ok(Self::StellarMessage(Box::new(StellarMessage::read_xdr(r)?)))
56097            }),
56098            TypeVariant::AuthenticatedMessage => r.with_limited_depth(|r| {
56099                Ok(Self::AuthenticatedMessage(Box::new(
56100                    AuthenticatedMessage::read_xdr(r)?,
56101                )))
56102            }),
56103            TypeVariant::AuthenticatedMessageV0 => r.with_limited_depth(|r| {
56104                Ok(Self::AuthenticatedMessageV0(Box::new(
56105                    AuthenticatedMessageV0::read_xdr(r)?,
56106                )))
56107            }),
56108            TypeVariant::LiquidityPoolParameters => r.with_limited_depth(|r| {
56109                Ok(Self::LiquidityPoolParameters(Box::new(
56110                    LiquidityPoolParameters::read_xdr(r)?,
56111                )))
56112            }),
56113            TypeVariant::MuxedAccount => r.with_limited_depth(|r| {
56114                Ok(Self::MuxedAccount(Box::new(MuxedAccount::read_xdr(r)?)))
56115            }),
56116            TypeVariant::MuxedAccountMed25519 => r.with_limited_depth(|r| {
56117                Ok(Self::MuxedAccountMed25519(Box::new(
56118                    MuxedAccountMed25519::read_xdr(r)?,
56119                )))
56120            }),
56121            TypeVariant::DecoratedSignature => r.with_limited_depth(|r| {
56122                Ok(Self::DecoratedSignature(Box::new(
56123                    DecoratedSignature::read_xdr(r)?,
56124                )))
56125            }),
56126            TypeVariant::OperationType => r.with_limited_depth(|r| {
56127                Ok(Self::OperationType(Box::new(OperationType::read_xdr(r)?)))
56128            }),
56129            TypeVariant::CreateAccountOp => r.with_limited_depth(|r| {
56130                Ok(Self::CreateAccountOp(Box::new(CreateAccountOp::read_xdr(
56131                    r,
56132                )?)))
56133            }),
56134            TypeVariant::PaymentOp => {
56135                r.with_limited_depth(|r| Ok(Self::PaymentOp(Box::new(PaymentOp::read_xdr(r)?))))
56136            }
56137            TypeVariant::PathPaymentStrictReceiveOp => r.with_limited_depth(|r| {
56138                Ok(Self::PathPaymentStrictReceiveOp(Box::new(
56139                    PathPaymentStrictReceiveOp::read_xdr(r)?,
56140                )))
56141            }),
56142            TypeVariant::PathPaymentStrictSendOp => r.with_limited_depth(|r| {
56143                Ok(Self::PathPaymentStrictSendOp(Box::new(
56144                    PathPaymentStrictSendOp::read_xdr(r)?,
56145                )))
56146            }),
56147            TypeVariant::ManageSellOfferOp => r.with_limited_depth(|r| {
56148                Ok(Self::ManageSellOfferOp(Box::new(
56149                    ManageSellOfferOp::read_xdr(r)?,
56150                )))
56151            }),
56152            TypeVariant::ManageBuyOfferOp => r.with_limited_depth(|r| {
56153                Ok(Self::ManageBuyOfferOp(Box::new(
56154                    ManageBuyOfferOp::read_xdr(r)?,
56155                )))
56156            }),
56157            TypeVariant::CreatePassiveSellOfferOp => r.with_limited_depth(|r| {
56158                Ok(Self::CreatePassiveSellOfferOp(Box::new(
56159                    CreatePassiveSellOfferOp::read_xdr(r)?,
56160                )))
56161            }),
56162            TypeVariant::SetOptionsOp => r.with_limited_depth(|r| {
56163                Ok(Self::SetOptionsOp(Box::new(SetOptionsOp::read_xdr(r)?)))
56164            }),
56165            TypeVariant::ChangeTrustAsset => r.with_limited_depth(|r| {
56166                Ok(Self::ChangeTrustAsset(Box::new(
56167                    ChangeTrustAsset::read_xdr(r)?,
56168                )))
56169            }),
56170            TypeVariant::ChangeTrustOp => r.with_limited_depth(|r| {
56171                Ok(Self::ChangeTrustOp(Box::new(ChangeTrustOp::read_xdr(r)?)))
56172            }),
56173            TypeVariant::AllowTrustOp => r.with_limited_depth(|r| {
56174                Ok(Self::AllowTrustOp(Box::new(AllowTrustOp::read_xdr(r)?)))
56175            }),
56176            TypeVariant::ManageDataOp => r.with_limited_depth(|r| {
56177                Ok(Self::ManageDataOp(Box::new(ManageDataOp::read_xdr(r)?)))
56178            }),
56179            TypeVariant::BumpSequenceOp => r.with_limited_depth(|r| {
56180                Ok(Self::BumpSequenceOp(Box::new(BumpSequenceOp::read_xdr(r)?)))
56181            }),
56182            TypeVariant::CreateClaimableBalanceOp => r.with_limited_depth(|r| {
56183                Ok(Self::CreateClaimableBalanceOp(Box::new(
56184                    CreateClaimableBalanceOp::read_xdr(r)?,
56185                )))
56186            }),
56187            TypeVariant::ClaimClaimableBalanceOp => r.with_limited_depth(|r| {
56188                Ok(Self::ClaimClaimableBalanceOp(Box::new(
56189                    ClaimClaimableBalanceOp::read_xdr(r)?,
56190                )))
56191            }),
56192            TypeVariant::BeginSponsoringFutureReservesOp => r.with_limited_depth(|r| {
56193                Ok(Self::BeginSponsoringFutureReservesOp(Box::new(
56194                    BeginSponsoringFutureReservesOp::read_xdr(r)?,
56195                )))
56196            }),
56197            TypeVariant::RevokeSponsorshipType => r.with_limited_depth(|r| {
56198                Ok(Self::RevokeSponsorshipType(Box::new(
56199                    RevokeSponsorshipType::read_xdr(r)?,
56200                )))
56201            }),
56202            TypeVariant::RevokeSponsorshipOp => r.with_limited_depth(|r| {
56203                Ok(Self::RevokeSponsorshipOp(Box::new(
56204                    RevokeSponsorshipOp::read_xdr(r)?,
56205                )))
56206            }),
56207            TypeVariant::RevokeSponsorshipOpSigner => r.with_limited_depth(|r| {
56208                Ok(Self::RevokeSponsorshipOpSigner(Box::new(
56209                    RevokeSponsorshipOpSigner::read_xdr(r)?,
56210                )))
56211            }),
56212            TypeVariant::ClawbackOp => {
56213                r.with_limited_depth(|r| Ok(Self::ClawbackOp(Box::new(ClawbackOp::read_xdr(r)?))))
56214            }
56215            TypeVariant::ClawbackClaimableBalanceOp => r.with_limited_depth(|r| {
56216                Ok(Self::ClawbackClaimableBalanceOp(Box::new(
56217                    ClawbackClaimableBalanceOp::read_xdr(r)?,
56218                )))
56219            }),
56220            TypeVariant::SetTrustLineFlagsOp => r.with_limited_depth(|r| {
56221                Ok(Self::SetTrustLineFlagsOp(Box::new(
56222                    SetTrustLineFlagsOp::read_xdr(r)?,
56223                )))
56224            }),
56225            TypeVariant::LiquidityPoolDepositOp => r.with_limited_depth(|r| {
56226                Ok(Self::LiquidityPoolDepositOp(Box::new(
56227                    LiquidityPoolDepositOp::read_xdr(r)?,
56228                )))
56229            }),
56230            TypeVariant::LiquidityPoolWithdrawOp => r.with_limited_depth(|r| {
56231                Ok(Self::LiquidityPoolWithdrawOp(Box::new(
56232                    LiquidityPoolWithdrawOp::read_xdr(r)?,
56233                )))
56234            }),
56235            TypeVariant::HostFunctionType => r.with_limited_depth(|r| {
56236                Ok(Self::HostFunctionType(Box::new(
56237                    HostFunctionType::read_xdr(r)?,
56238                )))
56239            }),
56240            TypeVariant::ContractIdPreimageType => r.with_limited_depth(|r| {
56241                Ok(Self::ContractIdPreimageType(Box::new(
56242                    ContractIdPreimageType::read_xdr(r)?,
56243                )))
56244            }),
56245            TypeVariant::ContractIdPreimage => r.with_limited_depth(|r| {
56246                Ok(Self::ContractIdPreimage(Box::new(
56247                    ContractIdPreimage::read_xdr(r)?,
56248                )))
56249            }),
56250            TypeVariant::ContractIdPreimageFromAddress => r.with_limited_depth(|r| {
56251                Ok(Self::ContractIdPreimageFromAddress(Box::new(
56252                    ContractIdPreimageFromAddress::read_xdr(r)?,
56253                )))
56254            }),
56255            TypeVariant::CreateContractArgs => r.with_limited_depth(|r| {
56256                Ok(Self::CreateContractArgs(Box::new(
56257                    CreateContractArgs::read_xdr(r)?,
56258                )))
56259            }),
56260            TypeVariant::CreateContractArgsV2 => r.with_limited_depth(|r| {
56261                Ok(Self::CreateContractArgsV2(Box::new(
56262                    CreateContractArgsV2::read_xdr(r)?,
56263                )))
56264            }),
56265            TypeVariant::InvokeContractArgs => r.with_limited_depth(|r| {
56266                Ok(Self::InvokeContractArgs(Box::new(
56267                    InvokeContractArgs::read_xdr(r)?,
56268                )))
56269            }),
56270            TypeVariant::HostFunction => r.with_limited_depth(|r| {
56271                Ok(Self::HostFunction(Box::new(HostFunction::read_xdr(r)?)))
56272            }),
56273            TypeVariant::SorobanAuthorizedFunctionType => r.with_limited_depth(|r| {
56274                Ok(Self::SorobanAuthorizedFunctionType(Box::new(
56275                    SorobanAuthorizedFunctionType::read_xdr(r)?,
56276                )))
56277            }),
56278            TypeVariant::SorobanAuthorizedFunction => r.with_limited_depth(|r| {
56279                Ok(Self::SorobanAuthorizedFunction(Box::new(
56280                    SorobanAuthorizedFunction::read_xdr(r)?,
56281                )))
56282            }),
56283            TypeVariant::SorobanAuthorizedInvocation => r.with_limited_depth(|r| {
56284                Ok(Self::SorobanAuthorizedInvocation(Box::new(
56285                    SorobanAuthorizedInvocation::read_xdr(r)?,
56286                )))
56287            }),
56288            TypeVariant::SorobanAddressCredentials => r.with_limited_depth(|r| {
56289                Ok(Self::SorobanAddressCredentials(Box::new(
56290                    SorobanAddressCredentials::read_xdr(r)?,
56291                )))
56292            }),
56293            TypeVariant::SorobanCredentialsType => r.with_limited_depth(|r| {
56294                Ok(Self::SorobanCredentialsType(Box::new(
56295                    SorobanCredentialsType::read_xdr(r)?,
56296                )))
56297            }),
56298            TypeVariant::SorobanCredentials => r.with_limited_depth(|r| {
56299                Ok(Self::SorobanCredentials(Box::new(
56300                    SorobanCredentials::read_xdr(r)?,
56301                )))
56302            }),
56303            TypeVariant::SorobanAuthorizationEntry => r.with_limited_depth(|r| {
56304                Ok(Self::SorobanAuthorizationEntry(Box::new(
56305                    SorobanAuthorizationEntry::read_xdr(r)?,
56306                )))
56307            }),
56308            TypeVariant::SorobanAuthorizationEntries => r.with_limited_depth(|r| {
56309                Ok(Self::SorobanAuthorizationEntries(Box::new(
56310                    SorobanAuthorizationEntries::read_xdr(r)?,
56311                )))
56312            }),
56313            TypeVariant::InvokeHostFunctionOp => r.with_limited_depth(|r| {
56314                Ok(Self::InvokeHostFunctionOp(Box::new(
56315                    InvokeHostFunctionOp::read_xdr(r)?,
56316                )))
56317            }),
56318            TypeVariant::ExtendFootprintTtlOp => r.with_limited_depth(|r| {
56319                Ok(Self::ExtendFootprintTtlOp(Box::new(
56320                    ExtendFootprintTtlOp::read_xdr(r)?,
56321                )))
56322            }),
56323            TypeVariant::RestoreFootprintOp => r.with_limited_depth(|r| {
56324                Ok(Self::RestoreFootprintOp(Box::new(
56325                    RestoreFootprintOp::read_xdr(r)?,
56326                )))
56327            }),
56328            TypeVariant::Operation => {
56329                r.with_limited_depth(|r| Ok(Self::Operation(Box::new(Operation::read_xdr(r)?))))
56330            }
56331            TypeVariant::OperationBody => r.with_limited_depth(|r| {
56332                Ok(Self::OperationBody(Box::new(OperationBody::read_xdr(r)?)))
56333            }),
56334            TypeVariant::HashIdPreimage => r.with_limited_depth(|r| {
56335                Ok(Self::HashIdPreimage(Box::new(HashIdPreimage::read_xdr(r)?)))
56336            }),
56337            TypeVariant::HashIdPreimageOperationId => r.with_limited_depth(|r| {
56338                Ok(Self::HashIdPreimageOperationId(Box::new(
56339                    HashIdPreimageOperationId::read_xdr(r)?,
56340                )))
56341            }),
56342            TypeVariant::HashIdPreimageRevokeId => r.with_limited_depth(|r| {
56343                Ok(Self::HashIdPreimageRevokeId(Box::new(
56344                    HashIdPreimageRevokeId::read_xdr(r)?,
56345                )))
56346            }),
56347            TypeVariant::HashIdPreimageContractId => r.with_limited_depth(|r| {
56348                Ok(Self::HashIdPreimageContractId(Box::new(
56349                    HashIdPreimageContractId::read_xdr(r)?,
56350                )))
56351            }),
56352            TypeVariant::HashIdPreimageSorobanAuthorization => r.with_limited_depth(|r| {
56353                Ok(Self::HashIdPreimageSorobanAuthorization(Box::new(
56354                    HashIdPreimageSorobanAuthorization::read_xdr(r)?,
56355                )))
56356            }),
56357            TypeVariant::MemoType => {
56358                r.with_limited_depth(|r| Ok(Self::MemoType(Box::new(MemoType::read_xdr(r)?))))
56359            }
56360            TypeVariant::Memo => {
56361                r.with_limited_depth(|r| Ok(Self::Memo(Box::new(Memo::read_xdr(r)?))))
56362            }
56363            TypeVariant::TimeBounds => {
56364                r.with_limited_depth(|r| Ok(Self::TimeBounds(Box::new(TimeBounds::read_xdr(r)?))))
56365            }
56366            TypeVariant::LedgerBounds => r.with_limited_depth(|r| {
56367                Ok(Self::LedgerBounds(Box::new(LedgerBounds::read_xdr(r)?)))
56368            }),
56369            TypeVariant::PreconditionsV2 => r.with_limited_depth(|r| {
56370                Ok(Self::PreconditionsV2(Box::new(PreconditionsV2::read_xdr(
56371                    r,
56372                )?)))
56373            }),
56374            TypeVariant::PreconditionType => r.with_limited_depth(|r| {
56375                Ok(Self::PreconditionType(Box::new(
56376                    PreconditionType::read_xdr(r)?,
56377                )))
56378            }),
56379            TypeVariant::Preconditions => r.with_limited_depth(|r| {
56380                Ok(Self::Preconditions(Box::new(Preconditions::read_xdr(r)?)))
56381            }),
56382            TypeVariant::LedgerFootprint => r.with_limited_depth(|r| {
56383                Ok(Self::LedgerFootprint(Box::new(LedgerFootprint::read_xdr(
56384                    r,
56385                )?)))
56386            }),
56387            TypeVariant::SorobanResources => r.with_limited_depth(|r| {
56388                Ok(Self::SorobanResources(Box::new(
56389                    SorobanResources::read_xdr(r)?,
56390                )))
56391            }),
56392            TypeVariant::SorobanResourcesExtV0 => r.with_limited_depth(|r| {
56393                Ok(Self::SorobanResourcesExtV0(Box::new(
56394                    SorobanResourcesExtV0::read_xdr(r)?,
56395                )))
56396            }),
56397            TypeVariant::SorobanTransactionData => r.with_limited_depth(|r| {
56398                Ok(Self::SorobanTransactionData(Box::new(
56399                    SorobanTransactionData::read_xdr(r)?,
56400                )))
56401            }),
56402            TypeVariant::SorobanTransactionDataExt => r.with_limited_depth(|r| {
56403                Ok(Self::SorobanTransactionDataExt(Box::new(
56404                    SorobanTransactionDataExt::read_xdr(r)?,
56405                )))
56406            }),
56407            TypeVariant::TransactionV0 => r.with_limited_depth(|r| {
56408                Ok(Self::TransactionV0(Box::new(TransactionV0::read_xdr(r)?)))
56409            }),
56410            TypeVariant::TransactionV0Ext => r.with_limited_depth(|r| {
56411                Ok(Self::TransactionV0Ext(Box::new(
56412                    TransactionV0Ext::read_xdr(r)?,
56413                )))
56414            }),
56415            TypeVariant::TransactionV0Envelope => r.with_limited_depth(|r| {
56416                Ok(Self::TransactionV0Envelope(Box::new(
56417                    TransactionV0Envelope::read_xdr(r)?,
56418                )))
56419            }),
56420            TypeVariant::Transaction => {
56421                r.with_limited_depth(|r| Ok(Self::Transaction(Box::new(Transaction::read_xdr(r)?))))
56422            }
56423            TypeVariant::TransactionExt => r.with_limited_depth(|r| {
56424                Ok(Self::TransactionExt(Box::new(TransactionExt::read_xdr(r)?)))
56425            }),
56426            TypeVariant::TransactionV1Envelope => r.with_limited_depth(|r| {
56427                Ok(Self::TransactionV1Envelope(Box::new(
56428                    TransactionV1Envelope::read_xdr(r)?,
56429                )))
56430            }),
56431            TypeVariant::FeeBumpTransaction => r.with_limited_depth(|r| {
56432                Ok(Self::FeeBumpTransaction(Box::new(
56433                    FeeBumpTransaction::read_xdr(r)?,
56434                )))
56435            }),
56436            TypeVariant::FeeBumpTransactionInnerTx => r.with_limited_depth(|r| {
56437                Ok(Self::FeeBumpTransactionInnerTx(Box::new(
56438                    FeeBumpTransactionInnerTx::read_xdr(r)?,
56439                )))
56440            }),
56441            TypeVariant::FeeBumpTransactionExt => r.with_limited_depth(|r| {
56442                Ok(Self::FeeBumpTransactionExt(Box::new(
56443                    FeeBumpTransactionExt::read_xdr(r)?,
56444                )))
56445            }),
56446            TypeVariant::FeeBumpTransactionEnvelope => r.with_limited_depth(|r| {
56447                Ok(Self::FeeBumpTransactionEnvelope(Box::new(
56448                    FeeBumpTransactionEnvelope::read_xdr(r)?,
56449                )))
56450            }),
56451            TypeVariant::TransactionEnvelope => r.with_limited_depth(|r| {
56452                Ok(Self::TransactionEnvelope(Box::new(
56453                    TransactionEnvelope::read_xdr(r)?,
56454                )))
56455            }),
56456            TypeVariant::TransactionSignaturePayload => r.with_limited_depth(|r| {
56457                Ok(Self::TransactionSignaturePayload(Box::new(
56458                    TransactionSignaturePayload::read_xdr(r)?,
56459                )))
56460            }),
56461            TypeVariant::TransactionSignaturePayloadTaggedTransaction => {
56462                r.with_limited_depth(|r| {
56463                    Ok(Self::TransactionSignaturePayloadTaggedTransaction(
56464                        Box::new(TransactionSignaturePayloadTaggedTransaction::read_xdr(r)?),
56465                    ))
56466                })
56467            }
56468            TypeVariant::ClaimAtomType => r.with_limited_depth(|r| {
56469                Ok(Self::ClaimAtomType(Box::new(ClaimAtomType::read_xdr(r)?)))
56470            }),
56471            TypeVariant::ClaimOfferAtomV0 => r.with_limited_depth(|r| {
56472                Ok(Self::ClaimOfferAtomV0(Box::new(
56473                    ClaimOfferAtomV0::read_xdr(r)?,
56474                )))
56475            }),
56476            TypeVariant::ClaimOfferAtom => r.with_limited_depth(|r| {
56477                Ok(Self::ClaimOfferAtom(Box::new(ClaimOfferAtom::read_xdr(r)?)))
56478            }),
56479            TypeVariant::ClaimLiquidityAtom => r.with_limited_depth(|r| {
56480                Ok(Self::ClaimLiquidityAtom(Box::new(
56481                    ClaimLiquidityAtom::read_xdr(r)?,
56482                )))
56483            }),
56484            TypeVariant::ClaimAtom => {
56485                r.with_limited_depth(|r| Ok(Self::ClaimAtom(Box::new(ClaimAtom::read_xdr(r)?))))
56486            }
56487            TypeVariant::CreateAccountResultCode => r.with_limited_depth(|r| {
56488                Ok(Self::CreateAccountResultCode(Box::new(
56489                    CreateAccountResultCode::read_xdr(r)?,
56490                )))
56491            }),
56492            TypeVariant::CreateAccountResult => r.with_limited_depth(|r| {
56493                Ok(Self::CreateAccountResult(Box::new(
56494                    CreateAccountResult::read_xdr(r)?,
56495                )))
56496            }),
56497            TypeVariant::PaymentResultCode => r.with_limited_depth(|r| {
56498                Ok(Self::PaymentResultCode(Box::new(
56499                    PaymentResultCode::read_xdr(r)?,
56500                )))
56501            }),
56502            TypeVariant::PaymentResult => r.with_limited_depth(|r| {
56503                Ok(Self::PaymentResult(Box::new(PaymentResult::read_xdr(r)?)))
56504            }),
56505            TypeVariant::PathPaymentStrictReceiveResultCode => r.with_limited_depth(|r| {
56506                Ok(Self::PathPaymentStrictReceiveResultCode(Box::new(
56507                    PathPaymentStrictReceiveResultCode::read_xdr(r)?,
56508                )))
56509            }),
56510            TypeVariant::SimplePaymentResult => r.with_limited_depth(|r| {
56511                Ok(Self::SimplePaymentResult(Box::new(
56512                    SimplePaymentResult::read_xdr(r)?,
56513                )))
56514            }),
56515            TypeVariant::PathPaymentStrictReceiveResult => r.with_limited_depth(|r| {
56516                Ok(Self::PathPaymentStrictReceiveResult(Box::new(
56517                    PathPaymentStrictReceiveResult::read_xdr(r)?,
56518                )))
56519            }),
56520            TypeVariant::PathPaymentStrictReceiveResultSuccess => r.with_limited_depth(|r| {
56521                Ok(Self::PathPaymentStrictReceiveResultSuccess(Box::new(
56522                    PathPaymentStrictReceiveResultSuccess::read_xdr(r)?,
56523                )))
56524            }),
56525            TypeVariant::PathPaymentStrictSendResultCode => r.with_limited_depth(|r| {
56526                Ok(Self::PathPaymentStrictSendResultCode(Box::new(
56527                    PathPaymentStrictSendResultCode::read_xdr(r)?,
56528                )))
56529            }),
56530            TypeVariant::PathPaymentStrictSendResult => r.with_limited_depth(|r| {
56531                Ok(Self::PathPaymentStrictSendResult(Box::new(
56532                    PathPaymentStrictSendResult::read_xdr(r)?,
56533                )))
56534            }),
56535            TypeVariant::PathPaymentStrictSendResultSuccess => r.with_limited_depth(|r| {
56536                Ok(Self::PathPaymentStrictSendResultSuccess(Box::new(
56537                    PathPaymentStrictSendResultSuccess::read_xdr(r)?,
56538                )))
56539            }),
56540            TypeVariant::ManageSellOfferResultCode => r.with_limited_depth(|r| {
56541                Ok(Self::ManageSellOfferResultCode(Box::new(
56542                    ManageSellOfferResultCode::read_xdr(r)?,
56543                )))
56544            }),
56545            TypeVariant::ManageOfferEffect => r.with_limited_depth(|r| {
56546                Ok(Self::ManageOfferEffect(Box::new(
56547                    ManageOfferEffect::read_xdr(r)?,
56548                )))
56549            }),
56550            TypeVariant::ManageOfferSuccessResult => r.with_limited_depth(|r| {
56551                Ok(Self::ManageOfferSuccessResult(Box::new(
56552                    ManageOfferSuccessResult::read_xdr(r)?,
56553                )))
56554            }),
56555            TypeVariant::ManageOfferSuccessResultOffer => r.with_limited_depth(|r| {
56556                Ok(Self::ManageOfferSuccessResultOffer(Box::new(
56557                    ManageOfferSuccessResultOffer::read_xdr(r)?,
56558                )))
56559            }),
56560            TypeVariant::ManageSellOfferResult => r.with_limited_depth(|r| {
56561                Ok(Self::ManageSellOfferResult(Box::new(
56562                    ManageSellOfferResult::read_xdr(r)?,
56563                )))
56564            }),
56565            TypeVariant::ManageBuyOfferResultCode => r.with_limited_depth(|r| {
56566                Ok(Self::ManageBuyOfferResultCode(Box::new(
56567                    ManageBuyOfferResultCode::read_xdr(r)?,
56568                )))
56569            }),
56570            TypeVariant::ManageBuyOfferResult => r.with_limited_depth(|r| {
56571                Ok(Self::ManageBuyOfferResult(Box::new(
56572                    ManageBuyOfferResult::read_xdr(r)?,
56573                )))
56574            }),
56575            TypeVariant::SetOptionsResultCode => r.with_limited_depth(|r| {
56576                Ok(Self::SetOptionsResultCode(Box::new(
56577                    SetOptionsResultCode::read_xdr(r)?,
56578                )))
56579            }),
56580            TypeVariant::SetOptionsResult => r.with_limited_depth(|r| {
56581                Ok(Self::SetOptionsResult(Box::new(
56582                    SetOptionsResult::read_xdr(r)?,
56583                )))
56584            }),
56585            TypeVariant::ChangeTrustResultCode => r.with_limited_depth(|r| {
56586                Ok(Self::ChangeTrustResultCode(Box::new(
56587                    ChangeTrustResultCode::read_xdr(r)?,
56588                )))
56589            }),
56590            TypeVariant::ChangeTrustResult => r.with_limited_depth(|r| {
56591                Ok(Self::ChangeTrustResult(Box::new(
56592                    ChangeTrustResult::read_xdr(r)?,
56593                )))
56594            }),
56595            TypeVariant::AllowTrustResultCode => r.with_limited_depth(|r| {
56596                Ok(Self::AllowTrustResultCode(Box::new(
56597                    AllowTrustResultCode::read_xdr(r)?,
56598                )))
56599            }),
56600            TypeVariant::AllowTrustResult => r.with_limited_depth(|r| {
56601                Ok(Self::AllowTrustResult(Box::new(
56602                    AllowTrustResult::read_xdr(r)?,
56603                )))
56604            }),
56605            TypeVariant::AccountMergeResultCode => r.with_limited_depth(|r| {
56606                Ok(Self::AccountMergeResultCode(Box::new(
56607                    AccountMergeResultCode::read_xdr(r)?,
56608                )))
56609            }),
56610            TypeVariant::AccountMergeResult => r.with_limited_depth(|r| {
56611                Ok(Self::AccountMergeResult(Box::new(
56612                    AccountMergeResult::read_xdr(r)?,
56613                )))
56614            }),
56615            TypeVariant::InflationResultCode => r.with_limited_depth(|r| {
56616                Ok(Self::InflationResultCode(Box::new(
56617                    InflationResultCode::read_xdr(r)?,
56618                )))
56619            }),
56620            TypeVariant::InflationPayout => r.with_limited_depth(|r| {
56621                Ok(Self::InflationPayout(Box::new(InflationPayout::read_xdr(
56622                    r,
56623                )?)))
56624            }),
56625            TypeVariant::InflationResult => r.with_limited_depth(|r| {
56626                Ok(Self::InflationResult(Box::new(InflationResult::read_xdr(
56627                    r,
56628                )?)))
56629            }),
56630            TypeVariant::ManageDataResultCode => r.with_limited_depth(|r| {
56631                Ok(Self::ManageDataResultCode(Box::new(
56632                    ManageDataResultCode::read_xdr(r)?,
56633                )))
56634            }),
56635            TypeVariant::ManageDataResult => r.with_limited_depth(|r| {
56636                Ok(Self::ManageDataResult(Box::new(
56637                    ManageDataResult::read_xdr(r)?,
56638                )))
56639            }),
56640            TypeVariant::BumpSequenceResultCode => r.with_limited_depth(|r| {
56641                Ok(Self::BumpSequenceResultCode(Box::new(
56642                    BumpSequenceResultCode::read_xdr(r)?,
56643                )))
56644            }),
56645            TypeVariant::BumpSequenceResult => r.with_limited_depth(|r| {
56646                Ok(Self::BumpSequenceResult(Box::new(
56647                    BumpSequenceResult::read_xdr(r)?,
56648                )))
56649            }),
56650            TypeVariant::CreateClaimableBalanceResultCode => r.with_limited_depth(|r| {
56651                Ok(Self::CreateClaimableBalanceResultCode(Box::new(
56652                    CreateClaimableBalanceResultCode::read_xdr(r)?,
56653                )))
56654            }),
56655            TypeVariant::CreateClaimableBalanceResult => r.with_limited_depth(|r| {
56656                Ok(Self::CreateClaimableBalanceResult(Box::new(
56657                    CreateClaimableBalanceResult::read_xdr(r)?,
56658                )))
56659            }),
56660            TypeVariant::ClaimClaimableBalanceResultCode => r.with_limited_depth(|r| {
56661                Ok(Self::ClaimClaimableBalanceResultCode(Box::new(
56662                    ClaimClaimableBalanceResultCode::read_xdr(r)?,
56663                )))
56664            }),
56665            TypeVariant::ClaimClaimableBalanceResult => r.with_limited_depth(|r| {
56666                Ok(Self::ClaimClaimableBalanceResult(Box::new(
56667                    ClaimClaimableBalanceResult::read_xdr(r)?,
56668                )))
56669            }),
56670            TypeVariant::BeginSponsoringFutureReservesResultCode => r.with_limited_depth(|r| {
56671                Ok(Self::BeginSponsoringFutureReservesResultCode(Box::new(
56672                    BeginSponsoringFutureReservesResultCode::read_xdr(r)?,
56673                )))
56674            }),
56675            TypeVariant::BeginSponsoringFutureReservesResult => r.with_limited_depth(|r| {
56676                Ok(Self::BeginSponsoringFutureReservesResult(Box::new(
56677                    BeginSponsoringFutureReservesResult::read_xdr(r)?,
56678                )))
56679            }),
56680            TypeVariant::EndSponsoringFutureReservesResultCode => r.with_limited_depth(|r| {
56681                Ok(Self::EndSponsoringFutureReservesResultCode(Box::new(
56682                    EndSponsoringFutureReservesResultCode::read_xdr(r)?,
56683                )))
56684            }),
56685            TypeVariant::EndSponsoringFutureReservesResult => r.with_limited_depth(|r| {
56686                Ok(Self::EndSponsoringFutureReservesResult(Box::new(
56687                    EndSponsoringFutureReservesResult::read_xdr(r)?,
56688                )))
56689            }),
56690            TypeVariant::RevokeSponsorshipResultCode => r.with_limited_depth(|r| {
56691                Ok(Self::RevokeSponsorshipResultCode(Box::new(
56692                    RevokeSponsorshipResultCode::read_xdr(r)?,
56693                )))
56694            }),
56695            TypeVariant::RevokeSponsorshipResult => r.with_limited_depth(|r| {
56696                Ok(Self::RevokeSponsorshipResult(Box::new(
56697                    RevokeSponsorshipResult::read_xdr(r)?,
56698                )))
56699            }),
56700            TypeVariant::ClawbackResultCode => r.with_limited_depth(|r| {
56701                Ok(Self::ClawbackResultCode(Box::new(
56702                    ClawbackResultCode::read_xdr(r)?,
56703                )))
56704            }),
56705            TypeVariant::ClawbackResult => r.with_limited_depth(|r| {
56706                Ok(Self::ClawbackResult(Box::new(ClawbackResult::read_xdr(r)?)))
56707            }),
56708            TypeVariant::ClawbackClaimableBalanceResultCode => r.with_limited_depth(|r| {
56709                Ok(Self::ClawbackClaimableBalanceResultCode(Box::new(
56710                    ClawbackClaimableBalanceResultCode::read_xdr(r)?,
56711                )))
56712            }),
56713            TypeVariant::ClawbackClaimableBalanceResult => r.with_limited_depth(|r| {
56714                Ok(Self::ClawbackClaimableBalanceResult(Box::new(
56715                    ClawbackClaimableBalanceResult::read_xdr(r)?,
56716                )))
56717            }),
56718            TypeVariant::SetTrustLineFlagsResultCode => r.with_limited_depth(|r| {
56719                Ok(Self::SetTrustLineFlagsResultCode(Box::new(
56720                    SetTrustLineFlagsResultCode::read_xdr(r)?,
56721                )))
56722            }),
56723            TypeVariant::SetTrustLineFlagsResult => r.with_limited_depth(|r| {
56724                Ok(Self::SetTrustLineFlagsResult(Box::new(
56725                    SetTrustLineFlagsResult::read_xdr(r)?,
56726                )))
56727            }),
56728            TypeVariant::LiquidityPoolDepositResultCode => r.with_limited_depth(|r| {
56729                Ok(Self::LiquidityPoolDepositResultCode(Box::new(
56730                    LiquidityPoolDepositResultCode::read_xdr(r)?,
56731                )))
56732            }),
56733            TypeVariant::LiquidityPoolDepositResult => r.with_limited_depth(|r| {
56734                Ok(Self::LiquidityPoolDepositResult(Box::new(
56735                    LiquidityPoolDepositResult::read_xdr(r)?,
56736                )))
56737            }),
56738            TypeVariant::LiquidityPoolWithdrawResultCode => r.with_limited_depth(|r| {
56739                Ok(Self::LiquidityPoolWithdrawResultCode(Box::new(
56740                    LiquidityPoolWithdrawResultCode::read_xdr(r)?,
56741                )))
56742            }),
56743            TypeVariant::LiquidityPoolWithdrawResult => r.with_limited_depth(|r| {
56744                Ok(Self::LiquidityPoolWithdrawResult(Box::new(
56745                    LiquidityPoolWithdrawResult::read_xdr(r)?,
56746                )))
56747            }),
56748            TypeVariant::InvokeHostFunctionResultCode => r.with_limited_depth(|r| {
56749                Ok(Self::InvokeHostFunctionResultCode(Box::new(
56750                    InvokeHostFunctionResultCode::read_xdr(r)?,
56751                )))
56752            }),
56753            TypeVariant::InvokeHostFunctionResult => r.with_limited_depth(|r| {
56754                Ok(Self::InvokeHostFunctionResult(Box::new(
56755                    InvokeHostFunctionResult::read_xdr(r)?,
56756                )))
56757            }),
56758            TypeVariant::ExtendFootprintTtlResultCode => r.with_limited_depth(|r| {
56759                Ok(Self::ExtendFootprintTtlResultCode(Box::new(
56760                    ExtendFootprintTtlResultCode::read_xdr(r)?,
56761                )))
56762            }),
56763            TypeVariant::ExtendFootprintTtlResult => r.with_limited_depth(|r| {
56764                Ok(Self::ExtendFootprintTtlResult(Box::new(
56765                    ExtendFootprintTtlResult::read_xdr(r)?,
56766                )))
56767            }),
56768            TypeVariant::RestoreFootprintResultCode => r.with_limited_depth(|r| {
56769                Ok(Self::RestoreFootprintResultCode(Box::new(
56770                    RestoreFootprintResultCode::read_xdr(r)?,
56771                )))
56772            }),
56773            TypeVariant::RestoreFootprintResult => r.with_limited_depth(|r| {
56774                Ok(Self::RestoreFootprintResult(Box::new(
56775                    RestoreFootprintResult::read_xdr(r)?,
56776                )))
56777            }),
56778            TypeVariant::OperationResultCode => r.with_limited_depth(|r| {
56779                Ok(Self::OperationResultCode(Box::new(
56780                    OperationResultCode::read_xdr(r)?,
56781                )))
56782            }),
56783            TypeVariant::OperationResult => r.with_limited_depth(|r| {
56784                Ok(Self::OperationResult(Box::new(OperationResult::read_xdr(
56785                    r,
56786                )?)))
56787            }),
56788            TypeVariant::OperationResultTr => r.with_limited_depth(|r| {
56789                Ok(Self::OperationResultTr(Box::new(
56790                    OperationResultTr::read_xdr(r)?,
56791                )))
56792            }),
56793            TypeVariant::TransactionResultCode => r.with_limited_depth(|r| {
56794                Ok(Self::TransactionResultCode(Box::new(
56795                    TransactionResultCode::read_xdr(r)?,
56796                )))
56797            }),
56798            TypeVariant::InnerTransactionResult => r.with_limited_depth(|r| {
56799                Ok(Self::InnerTransactionResult(Box::new(
56800                    InnerTransactionResult::read_xdr(r)?,
56801                )))
56802            }),
56803            TypeVariant::InnerTransactionResultResult => r.with_limited_depth(|r| {
56804                Ok(Self::InnerTransactionResultResult(Box::new(
56805                    InnerTransactionResultResult::read_xdr(r)?,
56806                )))
56807            }),
56808            TypeVariant::InnerTransactionResultExt => r.with_limited_depth(|r| {
56809                Ok(Self::InnerTransactionResultExt(Box::new(
56810                    InnerTransactionResultExt::read_xdr(r)?,
56811                )))
56812            }),
56813            TypeVariant::InnerTransactionResultPair => r.with_limited_depth(|r| {
56814                Ok(Self::InnerTransactionResultPair(Box::new(
56815                    InnerTransactionResultPair::read_xdr(r)?,
56816                )))
56817            }),
56818            TypeVariant::TransactionResult => r.with_limited_depth(|r| {
56819                Ok(Self::TransactionResult(Box::new(
56820                    TransactionResult::read_xdr(r)?,
56821                )))
56822            }),
56823            TypeVariant::TransactionResultResult => r.with_limited_depth(|r| {
56824                Ok(Self::TransactionResultResult(Box::new(
56825                    TransactionResultResult::read_xdr(r)?,
56826                )))
56827            }),
56828            TypeVariant::TransactionResultExt => r.with_limited_depth(|r| {
56829                Ok(Self::TransactionResultExt(Box::new(
56830                    TransactionResultExt::read_xdr(r)?,
56831                )))
56832            }),
56833            TypeVariant::Hash => {
56834                r.with_limited_depth(|r| Ok(Self::Hash(Box::new(Hash::read_xdr(r)?))))
56835            }
56836            TypeVariant::Uint256 => {
56837                r.with_limited_depth(|r| Ok(Self::Uint256(Box::new(Uint256::read_xdr(r)?))))
56838            }
56839            TypeVariant::Uint32 => {
56840                r.with_limited_depth(|r| Ok(Self::Uint32(Box::new(Uint32::read_xdr(r)?))))
56841            }
56842            TypeVariant::Int32 => {
56843                r.with_limited_depth(|r| Ok(Self::Int32(Box::new(Int32::read_xdr(r)?))))
56844            }
56845            TypeVariant::Uint64 => {
56846                r.with_limited_depth(|r| Ok(Self::Uint64(Box::new(Uint64::read_xdr(r)?))))
56847            }
56848            TypeVariant::Int64 => {
56849                r.with_limited_depth(|r| Ok(Self::Int64(Box::new(Int64::read_xdr(r)?))))
56850            }
56851            TypeVariant::TimePoint => {
56852                r.with_limited_depth(|r| Ok(Self::TimePoint(Box::new(TimePoint::read_xdr(r)?))))
56853            }
56854            TypeVariant::Duration => {
56855                r.with_limited_depth(|r| Ok(Self::Duration(Box::new(Duration::read_xdr(r)?))))
56856            }
56857            TypeVariant::ExtensionPoint => r.with_limited_depth(|r| {
56858                Ok(Self::ExtensionPoint(Box::new(ExtensionPoint::read_xdr(r)?)))
56859            }),
56860            TypeVariant::CryptoKeyType => r.with_limited_depth(|r| {
56861                Ok(Self::CryptoKeyType(Box::new(CryptoKeyType::read_xdr(r)?)))
56862            }),
56863            TypeVariant::PublicKeyType => r.with_limited_depth(|r| {
56864                Ok(Self::PublicKeyType(Box::new(PublicKeyType::read_xdr(r)?)))
56865            }),
56866            TypeVariant::SignerKeyType => r.with_limited_depth(|r| {
56867                Ok(Self::SignerKeyType(Box::new(SignerKeyType::read_xdr(r)?)))
56868            }),
56869            TypeVariant::PublicKey => {
56870                r.with_limited_depth(|r| Ok(Self::PublicKey(Box::new(PublicKey::read_xdr(r)?))))
56871            }
56872            TypeVariant::SignerKey => {
56873                r.with_limited_depth(|r| Ok(Self::SignerKey(Box::new(SignerKey::read_xdr(r)?))))
56874            }
56875            TypeVariant::SignerKeyEd25519SignedPayload => r.with_limited_depth(|r| {
56876                Ok(Self::SignerKeyEd25519SignedPayload(Box::new(
56877                    SignerKeyEd25519SignedPayload::read_xdr(r)?,
56878                )))
56879            }),
56880            TypeVariant::Signature => {
56881                r.with_limited_depth(|r| Ok(Self::Signature(Box::new(Signature::read_xdr(r)?))))
56882            }
56883            TypeVariant::SignatureHint => r.with_limited_depth(|r| {
56884                Ok(Self::SignatureHint(Box::new(SignatureHint::read_xdr(r)?)))
56885            }),
56886            TypeVariant::NodeId => {
56887                r.with_limited_depth(|r| Ok(Self::NodeId(Box::new(NodeId::read_xdr(r)?))))
56888            }
56889            TypeVariant::AccountId => {
56890                r.with_limited_depth(|r| Ok(Self::AccountId(Box::new(AccountId::read_xdr(r)?))))
56891            }
56892            TypeVariant::ContractId => {
56893                r.with_limited_depth(|r| Ok(Self::ContractId(Box::new(ContractId::read_xdr(r)?))))
56894            }
56895            TypeVariant::Curve25519Secret => r.with_limited_depth(|r| {
56896                Ok(Self::Curve25519Secret(Box::new(
56897                    Curve25519Secret::read_xdr(r)?,
56898                )))
56899            }),
56900            TypeVariant::Curve25519Public => r.with_limited_depth(|r| {
56901                Ok(Self::Curve25519Public(Box::new(
56902                    Curve25519Public::read_xdr(r)?,
56903                )))
56904            }),
56905            TypeVariant::HmacSha256Key => r.with_limited_depth(|r| {
56906                Ok(Self::HmacSha256Key(Box::new(HmacSha256Key::read_xdr(r)?)))
56907            }),
56908            TypeVariant::HmacSha256Mac => r.with_limited_depth(|r| {
56909                Ok(Self::HmacSha256Mac(Box::new(HmacSha256Mac::read_xdr(r)?)))
56910            }),
56911            TypeVariant::ShortHashSeed => r.with_limited_depth(|r| {
56912                Ok(Self::ShortHashSeed(Box::new(ShortHashSeed::read_xdr(r)?)))
56913            }),
56914            TypeVariant::BinaryFuseFilterType => r.with_limited_depth(|r| {
56915                Ok(Self::BinaryFuseFilterType(Box::new(
56916                    BinaryFuseFilterType::read_xdr(r)?,
56917                )))
56918            }),
56919            TypeVariant::SerializedBinaryFuseFilter => r.with_limited_depth(|r| {
56920                Ok(Self::SerializedBinaryFuseFilter(Box::new(
56921                    SerializedBinaryFuseFilter::read_xdr(r)?,
56922                )))
56923            }),
56924            TypeVariant::PoolId => {
56925                r.with_limited_depth(|r| Ok(Self::PoolId(Box::new(PoolId::read_xdr(r)?))))
56926            }
56927            TypeVariant::ClaimableBalanceIdType => r.with_limited_depth(|r| {
56928                Ok(Self::ClaimableBalanceIdType(Box::new(
56929                    ClaimableBalanceIdType::read_xdr(r)?,
56930                )))
56931            }),
56932            TypeVariant::ClaimableBalanceId => r.with_limited_depth(|r| {
56933                Ok(Self::ClaimableBalanceId(Box::new(
56934                    ClaimableBalanceId::read_xdr(r)?,
56935                )))
56936            }),
56937        }
56938    }
56939
56940    #[cfg(feature = "base64")]
56941    pub fn read_xdr_base64<R: Read>(v: TypeVariant, r: &mut Limited<R>) -> Result<Self, Error> {
56942        let mut dec = Limited::new(
56943            base64::read::DecoderReader::new(
56944                SkipWhitespace::new(&mut r.inner),
56945                &base64::engine::general_purpose::STANDARD,
56946            ),
56947            r.limits.clone(),
56948        );
56949        let t = Self::read_xdr(v, &mut dec)?;
56950        Ok(t)
56951    }
56952
56953    #[cfg(feature = "std")]
56954    pub fn read_xdr_to_end<R: Read>(v: TypeVariant, r: &mut Limited<R>) -> Result<Self, Error> {
56955        let s = Self::read_xdr(v, r)?;
56956        // Check that any further reads, such as this read of one byte, read no
56957        // data, indicating EOF. If a byte is read the data is invalid.
56958        if r.read(&mut [0u8; 1])? == 0 {
56959            Ok(s)
56960        } else {
56961            Err(Error::Invalid)
56962        }
56963    }
56964
56965    #[cfg(feature = "base64")]
56966    pub fn read_xdr_base64_to_end<R: Read>(
56967        v: TypeVariant,
56968        r: &mut Limited<R>,
56969    ) -> Result<Self, Error> {
56970        let mut dec = Limited::new(
56971            base64::read::DecoderReader::new(
56972                SkipWhitespace::new(&mut r.inner),
56973                &base64::engine::general_purpose::STANDARD,
56974            ),
56975            r.limits.clone(),
56976        );
56977        let t = Self::read_xdr_to_end(v, &mut dec)?;
56978        Ok(t)
56979    }
56980
56981    #[cfg(feature = "std")]
56982    #[allow(clippy::too_many_lines)]
56983    pub fn read_xdr_iter<R: Read>(
56984        v: TypeVariant,
56985        r: &mut Limited<R>,
56986    ) -> Box<dyn Iterator<Item = Result<Self, Error>> + '_> {
56987        match v {
56988            TypeVariant::Value => Box::new(
56989                ReadXdrIter::<_, Value>::new(&mut r.inner, r.limits.clone())
56990                    .map(|r| r.map(|t| Self::Value(Box::new(t)))),
56991            ),
56992            TypeVariant::ScpBallot => Box::new(
56993                ReadXdrIter::<_, ScpBallot>::new(&mut r.inner, r.limits.clone())
56994                    .map(|r| r.map(|t| Self::ScpBallot(Box::new(t)))),
56995            ),
56996            TypeVariant::ScpStatementType => Box::new(
56997                ReadXdrIter::<_, ScpStatementType>::new(&mut r.inner, r.limits.clone())
56998                    .map(|r| r.map(|t| Self::ScpStatementType(Box::new(t)))),
56999            ),
57000            TypeVariant::ScpNomination => Box::new(
57001                ReadXdrIter::<_, ScpNomination>::new(&mut r.inner, r.limits.clone())
57002                    .map(|r| r.map(|t| Self::ScpNomination(Box::new(t)))),
57003            ),
57004            TypeVariant::ScpStatement => Box::new(
57005                ReadXdrIter::<_, ScpStatement>::new(&mut r.inner, r.limits.clone())
57006                    .map(|r| r.map(|t| Self::ScpStatement(Box::new(t)))),
57007            ),
57008            TypeVariant::ScpStatementPledges => Box::new(
57009                ReadXdrIter::<_, ScpStatementPledges>::new(&mut r.inner, r.limits.clone())
57010                    .map(|r| r.map(|t| Self::ScpStatementPledges(Box::new(t)))),
57011            ),
57012            TypeVariant::ScpStatementPrepare => Box::new(
57013                ReadXdrIter::<_, ScpStatementPrepare>::new(&mut r.inner, r.limits.clone())
57014                    .map(|r| r.map(|t| Self::ScpStatementPrepare(Box::new(t)))),
57015            ),
57016            TypeVariant::ScpStatementConfirm => Box::new(
57017                ReadXdrIter::<_, ScpStatementConfirm>::new(&mut r.inner, r.limits.clone())
57018                    .map(|r| r.map(|t| Self::ScpStatementConfirm(Box::new(t)))),
57019            ),
57020            TypeVariant::ScpStatementExternalize => Box::new(
57021                ReadXdrIter::<_, ScpStatementExternalize>::new(&mut r.inner, r.limits.clone())
57022                    .map(|r| r.map(|t| Self::ScpStatementExternalize(Box::new(t)))),
57023            ),
57024            TypeVariant::ScpEnvelope => Box::new(
57025                ReadXdrIter::<_, ScpEnvelope>::new(&mut r.inner, r.limits.clone())
57026                    .map(|r| r.map(|t| Self::ScpEnvelope(Box::new(t)))),
57027            ),
57028            TypeVariant::ScpQuorumSet => Box::new(
57029                ReadXdrIter::<_, ScpQuorumSet>::new(&mut r.inner, r.limits.clone())
57030                    .map(|r| r.map(|t| Self::ScpQuorumSet(Box::new(t)))),
57031            ),
57032            TypeVariant::ConfigSettingContractExecutionLanesV0 => Box::new(
57033                ReadXdrIter::<_, ConfigSettingContractExecutionLanesV0>::new(
57034                    &mut r.inner,
57035                    r.limits.clone(),
57036                )
57037                .map(|r| r.map(|t| Self::ConfigSettingContractExecutionLanesV0(Box::new(t)))),
57038            ),
57039            TypeVariant::ConfigSettingContractComputeV0 => Box::new(
57040                ReadXdrIter::<_, ConfigSettingContractComputeV0>::new(
57041                    &mut r.inner,
57042                    r.limits.clone(),
57043                )
57044                .map(|r| r.map(|t| Self::ConfigSettingContractComputeV0(Box::new(t)))),
57045            ),
57046            TypeVariant::ConfigSettingContractParallelComputeV0 => Box::new(
57047                ReadXdrIter::<_, ConfigSettingContractParallelComputeV0>::new(
57048                    &mut r.inner,
57049                    r.limits.clone(),
57050                )
57051                .map(|r| r.map(|t| Self::ConfigSettingContractParallelComputeV0(Box::new(t)))),
57052            ),
57053            TypeVariant::ConfigSettingContractLedgerCostV0 => Box::new(
57054                ReadXdrIter::<_, ConfigSettingContractLedgerCostV0>::new(
57055                    &mut r.inner,
57056                    r.limits.clone(),
57057                )
57058                .map(|r| r.map(|t| Self::ConfigSettingContractLedgerCostV0(Box::new(t)))),
57059            ),
57060            TypeVariant::ConfigSettingContractLedgerCostExtV0 => Box::new(
57061                ReadXdrIter::<_, ConfigSettingContractLedgerCostExtV0>::new(
57062                    &mut r.inner,
57063                    r.limits.clone(),
57064                )
57065                .map(|r| r.map(|t| Self::ConfigSettingContractLedgerCostExtV0(Box::new(t)))),
57066            ),
57067            TypeVariant::ConfigSettingContractHistoricalDataV0 => Box::new(
57068                ReadXdrIter::<_, ConfigSettingContractHistoricalDataV0>::new(
57069                    &mut r.inner,
57070                    r.limits.clone(),
57071                )
57072                .map(|r| r.map(|t| Self::ConfigSettingContractHistoricalDataV0(Box::new(t)))),
57073            ),
57074            TypeVariant::ConfigSettingContractEventsV0 => Box::new(
57075                ReadXdrIter::<_, ConfigSettingContractEventsV0>::new(
57076                    &mut r.inner,
57077                    r.limits.clone(),
57078                )
57079                .map(|r| r.map(|t| Self::ConfigSettingContractEventsV0(Box::new(t)))),
57080            ),
57081            TypeVariant::ConfigSettingContractBandwidthV0 => Box::new(
57082                ReadXdrIter::<_, ConfigSettingContractBandwidthV0>::new(
57083                    &mut r.inner,
57084                    r.limits.clone(),
57085                )
57086                .map(|r| r.map(|t| Self::ConfigSettingContractBandwidthV0(Box::new(t)))),
57087            ),
57088            TypeVariant::ContractCostType => Box::new(
57089                ReadXdrIter::<_, ContractCostType>::new(&mut r.inner, r.limits.clone())
57090                    .map(|r| r.map(|t| Self::ContractCostType(Box::new(t)))),
57091            ),
57092            TypeVariant::ContractCostParamEntry => Box::new(
57093                ReadXdrIter::<_, ContractCostParamEntry>::new(&mut r.inner, r.limits.clone())
57094                    .map(|r| r.map(|t| Self::ContractCostParamEntry(Box::new(t)))),
57095            ),
57096            TypeVariant::StateArchivalSettings => Box::new(
57097                ReadXdrIter::<_, StateArchivalSettings>::new(&mut r.inner, r.limits.clone())
57098                    .map(|r| r.map(|t| Self::StateArchivalSettings(Box::new(t)))),
57099            ),
57100            TypeVariant::EvictionIterator => Box::new(
57101                ReadXdrIter::<_, EvictionIterator>::new(&mut r.inner, r.limits.clone())
57102                    .map(|r| r.map(|t| Self::EvictionIterator(Box::new(t)))),
57103            ),
57104            TypeVariant::ConfigSettingScpTiming => Box::new(
57105                ReadXdrIter::<_, ConfigSettingScpTiming>::new(&mut r.inner, r.limits.clone())
57106                    .map(|r| r.map(|t| Self::ConfigSettingScpTiming(Box::new(t)))),
57107            ),
57108            TypeVariant::ContractCostParams => Box::new(
57109                ReadXdrIter::<_, ContractCostParams>::new(&mut r.inner, r.limits.clone())
57110                    .map(|r| r.map(|t| Self::ContractCostParams(Box::new(t)))),
57111            ),
57112            TypeVariant::ConfigSettingId => Box::new(
57113                ReadXdrIter::<_, ConfigSettingId>::new(&mut r.inner, r.limits.clone())
57114                    .map(|r| r.map(|t| Self::ConfigSettingId(Box::new(t)))),
57115            ),
57116            TypeVariant::ConfigSettingEntry => Box::new(
57117                ReadXdrIter::<_, ConfigSettingEntry>::new(&mut r.inner, r.limits.clone())
57118                    .map(|r| r.map(|t| Self::ConfigSettingEntry(Box::new(t)))),
57119            ),
57120            TypeVariant::ScEnvMetaKind => Box::new(
57121                ReadXdrIter::<_, ScEnvMetaKind>::new(&mut r.inner, r.limits.clone())
57122                    .map(|r| r.map(|t| Self::ScEnvMetaKind(Box::new(t)))),
57123            ),
57124            TypeVariant::ScEnvMetaEntry => Box::new(
57125                ReadXdrIter::<_, ScEnvMetaEntry>::new(&mut r.inner, r.limits.clone())
57126                    .map(|r| r.map(|t| Self::ScEnvMetaEntry(Box::new(t)))),
57127            ),
57128            TypeVariant::ScEnvMetaEntryInterfaceVersion => Box::new(
57129                ReadXdrIter::<_, ScEnvMetaEntryInterfaceVersion>::new(
57130                    &mut r.inner,
57131                    r.limits.clone(),
57132                )
57133                .map(|r| r.map(|t| Self::ScEnvMetaEntryInterfaceVersion(Box::new(t)))),
57134            ),
57135            TypeVariant::ScMetaV0 => Box::new(
57136                ReadXdrIter::<_, ScMetaV0>::new(&mut r.inner, r.limits.clone())
57137                    .map(|r| r.map(|t| Self::ScMetaV0(Box::new(t)))),
57138            ),
57139            TypeVariant::ScMetaKind => Box::new(
57140                ReadXdrIter::<_, ScMetaKind>::new(&mut r.inner, r.limits.clone())
57141                    .map(|r| r.map(|t| Self::ScMetaKind(Box::new(t)))),
57142            ),
57143            TypeVariant::ScMetaEntry => Box::new(
57144                ReadXdrIter::<_, ScMetaEntry>::new(&mut r.inner, r.limits.clone())
57145                    .map(|r| r.map(|t| Self::ScMetaEntry(Box::new(t)))),
57146            ),
57147            TypeVariant::ScSpecType => Box::new(
57148                ReadXdrIter::<_, ScSpecType>::new(&mut r.inner, r.limits.clone())
57149                    .map(|r| r.map(|t| Self::ScSpecType(Box::new(t)))),
57150            ),
57151            TypeVariant::ScSpecTypeOption => Box::new(
57152                ReadXdrIter::<_, ScSpecTypeOption>::new(&mut r.inner, r.limits.clone())
57153                    .map(|r| r.map(|t| Self::ScSpecTypeOption(Box::new(t)))),
57154            ),
57155            TypeVariant::ScSpecTypeResult => Box::new(
57156                ReadXdrIter::<_, ScSpecTypeResult>::new(&mut r.inner, r.limits.clone())
57157                    .map(|r| r.map(|t| Self::ScSpecTypeResult(Box::new(t)))),
57158            ),
57159            TypeVariant::ScSpecTypeVec => Box::new(
57160                ReadXdrIter::<_, ScSpecTypeVec>::new(&mut r.inner, r.limits.clone())
57161                    .map(|r| r.map(|t| Self::ScSpecTypeVec(Box::new(t)))),
57162            ),
57163            TypeVariant::ScSpecTypeMap => Box::new(
57164                ReadXdrIter::<_, ScSpecTypeMap>::new(&mut r.inner, r.limits.clone())
57165                    .map(|r| r.map(|t| Self::ScSpecTypeMap(Box::new(t)))),
57166            ),
57167            TypeVariant::ScSpecTypeTuple => Box::new(
57168                ReadXdrIter::<_, ScSpecTypeTuple>::new(&mut r.inner, r.limits.clone())
57169                    .map(|r| r.map(|t| Self::ScSpecTypeTuple(Box::new(t)))),
57170            ),
57171            TypeVariant::ScSpecTypeBytesN => Box::new(
57172                ReadXdrIter::<_, ScSpecTypeBytesN>::new(&mut r.inner, r.limits.clone())
57173                    .map(|r| r.map(|t| Self::ScSpecTypeBytesN(Box::new(t)))),
57174            ),
57175            TypeVariant::ScSpecTypeUdt => Box::new(
57176                ReadXdrIter::<_, ScSpecTypeUdt>::new(&mut r.inner, r.limits.clone())
57177                    .map(|r| r.map(|t| Self::ScSpecTypeUdt(Box::new(t)))),
57178            ),
57179            TypeVariant::ScSpecTypeDef => Box::new(
57180                ReadXdrIter::<_, ScSpecTypeDef>::new(&mut r.inner, r.limits.clone())
57181                    .map(|r| r.map(|t| Self::ScSpecTypeDef(Box::new(t)))),
57182            ),
57183            TypeVariant::ScSpecUdtStructFieldV0 => Box::new(
57184                ReadXdrIter::<_, ScSpecUdtStructFieldV0>::new(&mut r.inner, r.limits.clone())
57185                    .map(|r| r.map(|t| Self::ScSpecUdtStructFieldV0(Box::new(t)))),
57186            ),
57187            TypeVariant::ScSpecUdtStructV0 => Box::new(
57188                ReadXdrIter::<_, ScSpecUdtStructV0>::new(&mut r.inner, r.limits.clone())
57189                    .map(|r| r.map(|t| Self::ScSpecUdtStructV0(Box::new(t)))),
57190            ),
57191            TypeVariant::ScSpecUdtUnionCaseVoidV0 => Box::new(
57192                ReadXdrIter::<_, ScSpecUdtUnionCaseVoidV0>::new(&mut r.inner, r.limits.clone())
57193                    .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseVoidV0(Box::new(t)))),
57194            ),
57195            TypeVariant::ScSpecUdtUnionCaseTupleV0 => Box::new(
57196                ReadXdrIter::<_, ScSpecUdtUnionCaseTupleV0>::new(&mut r.inner, r.limits.clone())
57197                    .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseTupleV0(Box::new(t)))),
57198            ),
57199            TypeVariant::ScSpecUdtUnionCaseV0Kind => Box::new(
57200                ReadXdrIter::<_, ScSpecUdtUnionCaseV0Kind>::new(&mut r.inner, r.limits.clone())
57201                    .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseV0Kind(Box::new(t)))),
57202            ),
57203            TypeVariant::ScSpecUdtUnionCaseV0 => Box::new(
57204                ReadXdrIter::<_, ScSpecUdtUnionCaseV0>::new(&mut r.inner, r.limits.clone())
57205                    .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseV0(Box::new(t)))),
57206            ),
57207            TypeVariant::ScSpecUdtUnionV0 => Box::new(
57208                ReadXdrIter::<_, ScSpecUdtUnionV0>::new(&mut r.inner, r.limits.clone())
57209                    .map(|r| r.map(|t| Self::ScSpecUdtUnionV0(Box::new(t)))),
57210            ),
57211            TypeVariant::ScSpecUdtEnumCaseV0 => Box::new(
57212                ReadXdrIter::<_, ScSpecUdtEnumCaseV0>::new(&mut r.inner, r.limits.clone())
57213                    .map(|r| r.map(|t| Self::ScSpecUdtEnumCaseV0(Box::new(t)))),
57214            ),
57215            TypeVariant::ScSpecUdtEnumV0 => Box::new(
57216                ReadXdrIter::<_, ScSpecUdtEnumV0>::new(&mut r.inner, r.limits.clone())
57217                    .map(|r| r.map(|t| Self::ScSpecUdtEnumV0(Box::new(t)))),
57218            ),
57219            TypeVariant::ScSpecUdtErrorEnumCaseV0 => Box::new(
57220                ReadXdrIter::<_, ScSpecUdtErrorEnumCaseV0>::new(&mut r.inner, r.limits.clone())
57221                    .map(|r| r.map(|t| Self::ScSpecUdtErrorEnumCaseV0(Box::new(t)))),
57222            ),
57223            TypeVariant::ScSpecUdtErrorEnumV0 => Box::new(
57224                ReadXdrIter::<_, ScSpecUdtErrorEnumV0>::new(&mut r.inner, r.limits.clone())
57225                    .map(|r| r.map(|t| Self::ScSpecUdtErrorEnumV0(Box::new(t)))),
57226            ),
57227            TypeVariant::ScSpecFunctionInputV0 => Box::new(
57228                ReadXdrIter::<_, ScSpecFunctionInputV0>::new(&mut r.inner, r.limits.clone())
57229                    .map(|r| r.map(|t| Self::ScSpecFunctionInputV0(Box::new(t)))),
57230            ),
57231            TypeVariant::ScSpecFunctionV0 => Box::new(
57232                ReadXdrIter::<_, ScSpecFunctionV0>::new(&mut r.inner, r.limits.clone())
57233                    .map(|r| r.map(|t| Self::ScSpecFunctionV0(Box::new(t)))),
57234            ),
57235            TypeVariant::ScSpecEventParamLocationV0 => Box::new(
57236                ReadXdrIter::<_, ScSpecEventParamLocationV0>::new(&mut r.inner, r.limits.clone())
57237                    .map(|r| r.map(|t| Self::ScSpecEventParamLocationV0(Box::new(t)))),
57238            ),
57239            TypeVariant::ScSpecEventParamV0 => Box::new(
57240                ReadXdrIter::<_, ScSpecEventParamV0>::new(&mut r.inner, r.limits.clone())
57241                    .map(|r| r.map(|t| Self::ScSpecEventParamV0(Box::new(t)))),
57242            ),
57243            TypeVariant::ScSpecEventDataFormat => Box::new(
57244                ReadXdrIter::<_, ScSpecEventDataFormat>::new(&mut r.inner, r.limits.clone())
57245                    .map(|r| r.map(|t| Self::ScSpecEventDataFormat(Box::new(t)))),
57246            ),
57247            TypeVariant::ScSpecEventV0 => Box::new(
57248                ReadXdrIter::<_, ScSpecEventV0>::new(&mut r.inner, r.limits.clone())
57249                    .map(|r| r.map(|t| Self::ScSpecEventV0(Box::new(t)))),
57250            ),
57251            TypeVariant::ScSpecEntryKind => Box::new(
57252                ReadXdrIter::<_, ScSpecEntryKind>::new(&mut r.inner, r.limits.clone())
57253                    .map(|r| r.map(|t| Self::ScSpecEntryKind(Box::new(t)))),
57254            ),
57255            TypeVariant::ScSpecEntry => Box::new(
57256                ReadXdrIter::<_, ScSpecEntry>::new(&mut r.inner, r.limits.clone())
57257                    .map(|r| r.map(|t| Self::ScSpecEntry(Box::new(t)))),
57258            ),
57259            TypeVariant::ScValType => Box::new(
57260                ReadXdrIter::<_, ScValType>::new(&mut r.inner, r.limits.clone())
57261                    .map(|r| r.map(|t| Self::ScValType(Box::new(t)))),
57262            ),
57263            TypeVariant::ScErrorType => Box::new(
57264                ReadXdrIter::<_, ScErrorType>::new(&mut r.inner, r.limits.clone())
57265                    .map(|r| r.map(|t| Self::ScErrorType(Box::new(t)))),
57266            ),
57267            TypeVariant::ScErrorCode => Box::new(
57268                ReadXdrIter::<_, ScErrorCode>::new(&mut r.inner, r.limits.clone())
57269                    .map(|r| r.map(|t| Self::ScErrorCode(Box::new(t)))),
57270            ),
57271            TypeVariant::ScError => Box::new(
57272                ReadXdrIter::<_, ScError>::new(&mut r.inner, r.limits.clone())
57273                    .map(|r| r.map(|t| Self::ScError(Box::new(t)))),
57274            ),
57275            TypeVariant::UInt128Parts => Box::new(
57276                ReadXdrIter::<_, UInt128Parts>::new(&mut r.inner, r.limits.clone())
57277                    .map(|r| r.map(|t| Self::UInt128Parts(Box::new(t)))),
57278            ),
57279            TypeVariant::Int128Parts => Box::new(
57280                ReadXdrIter::<_, Int128Parts>::new(&mut r.inner, r.limits.clone())
57281                    .map(|r| r.map(|t| Self::Int128Parts(Box::new(t)))),
57282            ),
57283            TypeVariant::UInt256Parts => Box::new(
57284                ReadXdrIter::<_, UInt256Parts>::new(&mut r.inner, r.limits.clone())
57285                    .map(|r| r.map(|t| Self::UInt256Parts(Box::new(t)))),
57286            ),
57287            TypeVariant::Int256Parts => Box::new(
57288                ReadXdrIter::<_, Int256Parts>::new(&mut r.inner, r.limits.clone())
57289                    .map(|r| r.map(|t| Self::Int256Parts(Box::new(t)))),
57290            ),
57291            TypeVariant::ContractExecutableType => Box::new(
57292                ReadXdrIter::<_, ContractExecutableType>::new(&mut r.inner, r.limits.clone())
57293                    .map(|r| r.map(|t| Self::ContractExecutableType(Box::new(t)))),
57294            ),
57295            TypeVariant::ContractExecutable => Box::new(
57296                ReadXdrIter::<_, ContractExecutable>::new(&mut r.inner, r.limits.clone())
57297                    .map(|r| r.map(|t| Self::ContractExecutable(Box::new(t)))),
57298            ),
57299            TypeVariant::ScAddressType => Box::new(
57300                ReadXdrIter::<_, ScAddressType>::new(&mut r.inner, r.limits.clone())
57301                    .map(|r| r.map(|t| Self::ScAddressType(Box::new(t)))),
57302            ),
57303            TypeVariant::MuxedEd25519Account => Box::new(
57304                ReadXdrIter::<_, MuxedEd25519Account>::new(&mut r.inner, r.limits.clone())
57305                    .map(|r| r.map(|t| Self::MuxedEd25519Account(Box::new(t)))),
57306            ),
57307            TypeVariant::ScAddress => Box::new(
57308                ReadXdrIter::<_, ScAddress>::new(&mut r.inner, r.limits.clone())
57309                    .map(|r| r.map(|t| Self::ScAddress(Box::new(t)))),
57310            ),
57311            TypeVariant::ScVec => Box::new(
57312                ReadXdrIter::<_, ScVec>::new(&mut r.inner, r.limits.clone())
57313                    .map(|r| r.map(|t| Self::ScVec(Box::new(t)))),
57314            ),
57315            TypeVariant::ScMap => Box::new(
57316                ReadXdrIter::<_, ScMap>::new(&mut r.inner, r.limits.clone())
57317                    .map(|r| r.map(|t| Self::ScMap(Box::new(t)))),
57318            ),
57319            TypeVariant::ScBytes => Box::new(
57320                ReadXdrIter::<_, ScBytes>::new(&mut r.inner, r.limits.clone())
57321                    .map(|r| r.map(|t| Self::ScBytes(Box::new(t)))),
57322            ),
57323            TypeVariant::ScString => Box::new(
57324                ReadXdrIter::<_, ScString>::new(&mut r.inner, r.limits.clone())
57325                    .map(|r| r.map(|t| Self::ScString(Box::new(t)))),
57326            ),
57327            TypeVariant::ScSymbol => Box::new(
57328                ReadXdrIter::<_, ScSymbol>::new(&mut r.inner, r.limits.clone())
57329                    .map(|r| r.map(|t| Self::ScSymbol(Box::new(t)))),
57330            ),
57331            TypeVariant::ScNonceKey => Box::new(
57332                ReadXdrIter::<_, ScNonceKey>::new(&mut r.inner, r.limits.clone())
57333                    .map(|r| r.map(|t| Self::ScNonceKey(Box::new(t)))),
57334            ),
57335            TypeVariant::ScContractInstance => Box::new(
57336                ReadXdrIter::<_, ScContractInstance>::new(&mut r.inner, r.limits.clone())
57337                    .map(|r| r.map(|t| Self::ScContractInstance(Box::new(t)))),
57338            ),
57339            TypeVariant::ScVal => Box::new(
57340                ReadXdrIter::<_, ScVal>::new(&mut r.inner, r.limits.clone())
57341                    .map(|r| r.map(|t| Self::ScVal(Box::new(t)))),
57342            ),
57343            TypeVariant::ScMapEntry => Box::new(
57344                ReadXdrIter::<_, ScMapEntry>::new(&mut r.inner, r.limits.clone())
57345                    .map(|r| r.map(|t| Self::ScMapEntry(Box::new(t)))),
57346            ),
57347            TypeVariant::LedgerCloseMetaBatch => Box::new(
57348                ReadXdrIter::<_, LedgerCloseMetaBatch>::new(&mut r.inner, r.limits.clone())
57349                    .map(|r| r.map(|t| Self::LedgerCloseMetaBatch(Box::new(t)))),
57350            ),
57351            TypeVariant::StoredTransactionSet => Box::new(
57352                ReadXdrIter::<_, StoredTransactionSet>::new(&mut r.inner, r.limits.clone())
57353                    .map(|r| r.map(|t| Self::StoredTransactionSet(Box::new(t)))),
57354            ),
57355            TypeVariant::StoredDebugTransactionSet => Box::new(
57356                ReadXdrIter::<_, StoredDebugTransactionSet>::new(&mut r.inner, r.limits.clone())
57357                    .map(|r| r.map(|t| Self::StoredDebugTransactionSet(Box::new(t)))),
57358            ),
57359            TypeVariant::PersistedScpStateV0 => Box::new(
57360                ReadXdrIter::<_, PersistedScpStateV0>::new(&mut r.inner, r.limits.clone())
57361                    .map(|r| r.map(|t| Self::PersistedScpStateV0(Box::new(t)))),
57362            ),
57363            TypeVariant::PersistedScpStateV1 => Box::new(
57364                ReadXdrIter::<_, PersistedScpStateV1>::new(&mut r.inner, r.limits.clone())
57365                    .map(|r| r.map(|t| Self::PersistedScpStateV1(Box::new(t)))),
57366            ),
57367            TypeVariant::PersistedScpState => Box::new(
57368                ReadXdrIter::<_, PersistedScpState>::new(&mut r.inner, r.limits.clone())
57369                    .map(|r| r.map(|t| Self::PersistedScpState(Box::new(t)))),
57370            ),
57371            TypeVariant::Thresholds => Box::new(
57372                ReadXdrIter::<_, Thresholds>::new(&mut r.inner, r.limits.clone())
57373                    .map(|r| r.map(|t| Self::Thresholds(Box::new(t)))),
57374            ),
57375            TypeVariant::String32 => Box::new(
57376                ReadXdrIter::<_, String32>::new(&mut r.inner, r.limits.clone())
57377                    .map(|r| r.map(|t| Self::String32(Box::new(t)))),
57378            ),
57379            TypeVariant::String64 => Box::new(
57380                ReadXdrIter::<_, String64>::new(&mut r.inner, r.limits.clone())
57381                    .map(|r| r.map(|t| Self::String64(Box::new(t)))),
57382            ),
57383            TypeVariant::SequenceNumber => Box::new(
57384                ReadXdrIter::<_, SequenceNumber>::new(&mut r.inner, r.limits.clone())
57385                    .map(|r| r.map(|t| Self::SequenceNumber(Box::new(t)))),
57386            ),
57387            TypeVariant::DataValue => Box::new(
57388                ReadXdrIter::<_, DataValue>::new(&mut r.inner, r.limits.clone())
57389                    .map(|r| r.map(|t| Self::DataValue(Box::new(t)))),
57390            ),
57391            TypeVariant::AssetCode4 => Box::new(
57392                ReadXdrIter::<_, AssetCode4>::new(&mut r.inner, r.limits.clone())
57393                    .map(|r| r.map(|t| Self::AssetCode4(Box::new(t)))),
57394            ),
57395            TypeVariant::AssetCode12 => Box::new(
57396                ReadXdrIter::<_, AssetCode12>::new(&mut r.inner, r.limits.clone())
57397                    .map(|r| r.map(|t| Self::AssetCode12(Box::new(t)))),
57398            ),
57399            TypeVariant::AssetType => Box::new(
57400                ReadXdrIter::<_, AssetType>::new(&mut r.inner, r.limits.clone())
57401                    .map(|r| r.map(|t| Self::AssetType(Box::new(t)))),
57402            ),
57403            TypeVariant::AssetCode => Box::new(
57404                ReadXdrIter::<_, AssetCode>::new(&mut r.inner, r.limits.clone())
57405                    .map(|r| r.map(|t| Self::AssetCode(Box::new(t)))),
57406            ),
57407            TypeVariant::AlphaNum4 => Box::new(
57408                ReadXdrIter::<_, AlphaNum4>::new(&mut r.inner, r.limits.clone())
57409                    .map(|r| r.map(|t| Self::AlphaNum4(Box::new(t)))),
57410            ),
57411            TypeVariant::AlphaNum12 => Box::new(
57412                ReadXdrIter::<_, AlphaNum12>::new(&mut r.inner, r.limits.clone())
57413                    .map(|r| r.map(|t| Self::AlphaNum12(Box::new(t)))),
57414            ),
57415            TypeVariant::Asset => Box::new(
57416                ReadXdrIter::<_, Asset>::new(&mut r.inner, r.limits.clone())
57417                    .map(|r| r.map(|t| Self::Asset(Box::new(t)))),
57418            ),
57419            TypeVariant::Price => Box::new(
57420                ReadXdrIter::<_, Price>::new(&mut r.inner, r.limits.clone())
57421                    .map(|r| r.map(|t| Self::Price(Box::new(t)))),
57422            ),
57423            TypeVariant::Liabilities => Box::new(
57424                ReadXdrIter::<_, Liabilities>::new(&mut r.inner, r.limits.clone())
57425                    .map(|r| r.map(|t| Self::Liabilities(Box::new(t)))),
57426            ),
57427            TypeVariant::ThresholdIndexes => Box::new(
57428                ReadXdrIter::<_, ThresholdIndexes>::new(&mut r.inner, r.limits.clone())
57429                    .map(|r| r.map(|t| Self::ThresholdIndexes(Box::new(t)))),
57430            ),
57431            TypeVariant::LedgerEntryType => Box::new(
57432                ReadXdrIter::<_, LedgerEntryType>::new(&mut r.inner, r.limits.clone())
57433                    .map(|r| r.map(|t| Self::LedgerEntryType(Box::new(t)))),
57434            ),
57435            TypeVariant::Signer => Box::new(
57436                ReadXdrIter::<_, Signer>::new(&mut r.inner, r.limits.clone())
57437                    .map(|r| r.map(|t| Self::Signer(Box::new(t)))),
57438            ),
57439            TypeVariant::AccountFlags => Box::new(
57440                ReadXdrIter::<_, AccountFlags>::new(&mut r.inner, r.limits.clone())
57441                    .map(|r| r.map(|t| Self::AccountFlags(Box::new(t)))),
57442            ),
57443            TypeVariant::SponsorshipDescriptor => Box::new(
57444                ReadXdrIter::<_, SponsorshipDescriptor>::new(&mut r.inner, r.limits.clone())
57445                    .map(|r| r.map(|t| Self::SponsorshipDescriptor(Box::new(t)))),
57446            ),
57447            TypeVariant::AccountEntryExtensionV3 => Box::new(
57448                ReadXdrIter::<_, AccountEntryExtensionV3>::new(&mut r.inner, r.limits.clone())
57449                    .map(|r| r.map(|t| Self::AccountEntryExtensionV3(Box::new(t)))),
57450            ),
57451            TypeVariant::AccountEntryExtensionV2 => Box::new(
57452                ReadXdrIter::<_, AccountEntryExtensionV2>::new(&mut r.inner, r.limits.clone())
57453                    .map(|r| r.map(|t| Self::AccountEntryExtensionV2(Box::new(t)))),
57454            ),
57455            TypeVariant::AccountEntryExtensionV2Ext => Box::new(
57456                ReadXdrIter::<_, AccountEntryExtensionV2Ext>::new(&mut r.inner, r.limits.clone())
57457                    .map(|r| r.map(|t| Self::AccountEntryExtensionV2Ext(Box::new(t)))),
57458            ),
57459            TypeVariant::AccountEntryExtensionV1 => Box::new(
57460                ReadXdrIter::<_, AccountEntryExtensionV1>::new(&mut r.inner, r.limits.clone())
57461                    .map(|r| r.map(|t| Self::AccountEntryExtensionV1(Box::new(t)))),
57462            ),
57463            TypeVariant::AccountEntryExtensionV1Ext => Box::new(
57464                ReadXdrIter::<_, AccountEntryExtensionV1Ext>::new(&mut r.inner, r.limits.clone())
57465                    .map(|r| r.map(|t| Self::AccountEntryExtensionV1Ext(Box::new(t)))),
57466            ),
57467            TypeVariant::AccountEntry => Box::new(
57468                ReadXdrIter::<_, AccountEntry>::new(&mut r.inner, r.limits.clone())
57469                    .map(|r| r.map(|t| Self::AccountEntry(Box::new(t)))),
57470            ),
57471            TypeVariant::AccountEntryExt => Box::new(
57472                ReadXdrIter::<_, AccountEntryExt>::new(&mut r.inner, r.limits.clone())
57473                    .map(|r| r.map(|t| Self::AccountEntryExt(Box::new(t)))),
57474            ),
57475            TypeVariant::TrustLineFlags => Box::new(
57476                ReadXdrIter::<_, TrustLineFlags>::new(&mut r.inner, r.limits.clone())
57477                    .map(|r| r.map(|t| Self::TrustLineFlags(Box::new(t)))),
57478            ),
57479            TypeVariant::LiquidityPoolType => Box::new(
57480                ReadXdrIter::<_, LiquidityPoolType>::new(&mut r.inner, r.limits.clone())
57481                    .map(|r| r.map(|t| Self::LiquidityPoolType(Box::new(t)))),
57482            ),
57483            TypeVariant::TrustLineAsset => Box::new(
57484                ReadXdrIter::<_, TrustLineAsset>::new(&mut r.inner, r.limits.clone())
57485                    .map(|r| r.map(|t| Self::TrustLineAsset(Box::new(t)))),
57486            ),
57487            TypeVariant::TrustLineEntryExtensionV2 => Box::new(
57488                ReadXdrIter::<_, TrustLineEntryExtensionV2>::new(&mut r.inner, r.limits.clone())
57489                    .map(|r| r.map(|t| Self::TrustLineEntryExtensionV2(Box::new(t)))),
57490            ),
57491            TypeVariant::TrustLineEntryExtensionV2Ext => Box::new(
57492                ReadXdrIter::<_, TrustLineEntryExtensionV2Ext>::new(&mut r.inner, r.limits.clone())
57493                    .map(|r| r.map(|t| Self::TrustLineEntryExtensionV2Ext(Box::new(t)))),
57494            ),
57495            TypeVariant::TrustLineEntry => Box::new(
57496                ReadXdrIter::<_, TrustLineEntry>::new(&mut r.inner, r.limits.clone())
57497                    .map(|r| r.map(|t| Self::TrustLineEntry(Box::new(t)))),
57498            ),
57499            TypeVariant::TrustLineEntryExt => Box::new(
57500                ReadXdrIter::<_, TrustLineEntryExt>::new(&mut r.inner, r.limits.clone())
57501                    .map(|r| r.map(|t| Self::TrustLineEntryExt(Box::new(t)))),
57502            ),
57503            TypeVariant::TrustLineEntryV1 => Box::new(
57504                ReadXdrIter::<_, TrustLineEntryV1>::new(&mut r.inner, r.limits.clone())
57505                    .map(|r| r.map(|t| Self::TrustLineEntryV1(Box::new(t)))),
57506            ),
57507            TypeVariant::TrustLineEntryV1Ext => Box::new(
57508                ReadXdrIter::<_, TrustLineEntryV1Ext>::new(&mut r.inner, r.limits.clone())
57509                    .map(|r| r.map(|t| Self::TrustLineEntryV1Ext(Box::new(t)))),
57510            ),
57511            TypeVariant::OfferEntryFlags => Box::new(
57512                ReadXdrIter::<_, OfferEntryFlags>::new(&mut r.inner, r.limits.clone())
57513                    .map(|r| r.map(|t| Self::OfferEntryFlags(Box::new(t)))),
57514            ),
57515            TypeVariant::OfferEntry => Box::new(
57516                ReadXdrIter::<_, OfferEntry>::new(&mut r.inner, r.limits.clone())
57517                    .map(|r| r.map(|t| Self::OfferEntry(Box::new(t)))),
57518            ),
57519            TypeVariant::OfferEntryExt => Box::new(
57520                ReadXdrIter::<_, OfferEntryExt>::new(&mut r.inner, r.limits.clone())
57521                    .map(|r| r.map(|t| Self::OfferEntryExt(Box::new(t)))),
57522            ),
57523            TypeVariant::DataEntry => Box::new(
57524                ReadXdrIter::<_, DataEntry>::new(&mut r.inner, r.limits.clone())
57525                    .map(|r| r.map(|t| Self::DataEntry(Box::new(t)))),
57526            ),
57527            TypeVariant::DataEntryExt => Box::new(
57528                ReadXdrIter::<_, DataEntryExt>::new(&mut r.inner, r.limits.clone())
57529                    .map(|r| r.map(|t| Self::DataEntryExt(Box::new(t)))),
57530            ),
57531            TypeVariant::ClaimPredicateType => Box::new(
57532                ReadXdrIter::<_, ClaimPredicateType>::new(&mut r.inner, r.limits.clone())
57533                    .map(|r| r.map(|t| Self::ClaimPredicateType(Box::new(t)))),
57534            ),
57535            TypeVariant::ClaimPredicate => Box::new(
57536                ReadXdrIter::<_, ClaimPredicate>::new(&mut r.inner, r.limits.clone())
57537                    .map(|r| r.map(|t| Self::ClaimPredicate(Box::new(t)))),
57538            ),
57539            TypeVariant::ClaimantType => Box::new(
57540                ReadXdrIter::<_, ClaimantType>::new(&mut r.inner, r.limits.clone())
57541                    .map(|r| r.map(|t| Self::ClaimantType(Box::new(t)))),
57542            ),
57543            TypeVariant::Claimant => Box::new(
57544                ReadXdrIter::<_, Claimant>::new(&mut r.inner, r.limits.clone())
57545                    .map(|r| r.map(|t| Self::Claimant(Box::new(t)))),
57546            ),
57547            TypeVariant::ClaimantV0 => Box::new(
57548                ReadXdrIter::<_, ClaimantV0>::new(&mut r.inner, r.limits.clone())
57549                    .map(|r| r.map(|t| Self::ClaimantV0(Box::new(t)))),
57550            ),
57551            TypeVariant::ClaimableBalanceFlags => Box::new(
57552                ReadXdrIter::<_, ClaimableBalanceFlags>::new(&mut r.inner, r.limits.clone())
57553                    .map(|r| r.map(|t| Self::ClaimableBalanceFlags(Box::new(t)))),
57554            ),
57555            TypeVariant::ClaimableBalanceEntryExtensionV1 => Box::new(
57556                ReadXdrIter::<_, ClaimableBalanceEntryExtensionV1>::new(
57557                    &mut r.inner,
57558                    r.limits.clone(),
57559                )
57560                .map(|r| r.map(|t| Self::ClaimableBalanceEntryExtensionV1(Box::new(t)))),
57561            ),
57562            TypeVariant::ClaimableBalanceEntryExtensionV1Ext => Box::new(
57563                ReadXdrIter::<_, ClaimableBalanceEntryExtensionV1Ext>::new(
57564                    &mut r.inner,
57565                    r.limits.clone(),
57566                )
57567                .map(|r| r.map(|t| Self::ClaimableBalanceEntryExtensionV1Ext(Box::new(t)))),
57568            ),
57569            TypeVariant::ClaimableBalanceEntry => Box::new(
57570                ReadXdrIter::<_, ClaimableBalanceEntry>::new(&mut r.inner, r.limits.clone())
57571                    .map(|r| r.map(|t| Self::ClaimableBalanceEntry(Box::new(t)))),
57572            ),
57573            TypeVariant::ClaimableBalanceEntryExt => Box::new(
57574                ReadXdrIter::<_, ClaimableBalanceEntryExt>::new(&mut r.inner, r.limits.clone())
57575                    .map(|r| r.map(|t| Self::ClaimableBalanceEntryExt(Box::new(t)))),
57576            ),
57577            TypeVariant::LiquidityPoolConstantProductParameters => Box::new(
57578                ReadXdrIter::<_, LiquidityPoolConstantProductParameters>::new(
57579                    &mut r.inner,
57580                    r.limits.clone(),
57581                )
57582                .map(|r| r.map(|t| Self::LiquidityPoolConstantProductParameters(Box::new(t)))),
57583            ),
57584            TypeVariant::LiquidityPoolEntry => Box::new(
57585                ReadXdrIter::<_, LiquidityPoolEntry>::new(&mut r.inner, r.limits.clone())
57586                    .map(|r| r.map(|t| Self::LiquidityPoolEntry(Box::new(t)))),
57587            ),
57588            TypeVariant::LiquidityPoolEntryBody => Box::new(
57589                ReadXdrIter::<_, LiquidityPoolEntryBody>::new(&mut r.inner, r.limits.clone())
57590                    .map(|r| r.map(|t| Self::LiquidityPoolEntryBody(Box::new(t)))),
57591            ),
57592            TypeVariant::LiquidityPoolEntryConstantProduct => Box::new(
57593                ReadXdrIter::<_, LiquidityPoolEntryConstantProduct>::new(
57594                    &mut r.inner,
57595                    r.limits.clone(),
57596                )
57597                .map(|r| r.map(|t| Self::LiquidityPoolEntryConstantProduct(Box::new(t)))),
57598            ),
57599            TypeVariant::ContractDataDurability => Box::new(
57600                ReadXdrIter::<_, ContractDataDurability>::new(&mut r.inner, r.limits.clone())
57601                    .map(|r| r.map(|t| Self::ContractDataDurability(Box::new(t)))),
57602            ),
57603            TypeVariant::ContractDataEntry => Box::new(
57604                ReadXdrIter::<_, ContractDataEntry>::new(&mut r.inner, r.limits.clone())
57605                    .map(|r| r.map(|t| Self::ContractDataEntry(Box::new(t)))),
57606            ),
57607            TypeVariant::ContractCodeCostInputs => Box::new(
57608                ReadXdrIter::<_, ContractCodeCostInputs>::new(&mut r.inner, r.limits.clone())
57609                    .map(|r| r.map(|t| Self::ContractCodeCostInputs(Box::new(t)))),
57610            ),
57611            TypeVariant::ContractCodeEntry => Box::new(
57612                ReadXdrIter::<_, ContractCodeEntry>::new(&mut r.inner, r.limits.clone())
57613                    .map(|r| r.map(|t| Self::ContractCodeEntry(Box::new(t)))),
57614            ),
57615            TypeVariant::ContractCodeEntryExt => Box::new(
57616                ReadXdrIter::<_, ContractCodeEntryExt>::new(&mut r.inner, r.limits.clone())
57617                    .map(|r| r.map(|t| Self::ContractCodeEntryExt(Box::new(t)))),
57618            ),
57619            TypeVariant::ContractCodeEntryV1 => Box::new(
57620                ReadXdrIter::<_, ContractCodeEntryV1>::new(&mut r.inner, r.limits.clone())
57621                    .map(|r| r.map(|t| Self::ContractCodeEntryV1(Box::new(t)))),
57622            ),
57623            TypeVariant::TtlEntry => Box::new(
57624                ReadXdrIter::<_, TtlEntry>::new(&mut r.inner, r.limits.clone())
57625                    .map(|r| r.map(|t| Self::TtlEntry(Box::new(t)))),
57626            ),
57627            TypeVariant::LedgerEntryExtensionV1 => Box::new(
57628                ReadXdrIter::<_, LedgerEntryExtensionV1>::new(&mut r.inner, r.limits.clone())
57629                    .map(|r| r.map(|t| Self::LedgerEntryExtensionV1(Box::new(t)))),
57630            ),
57631            TypeVariant::LedgerEntryExtensionV1Ext => Box::new(
57632                ReadXdrIter::<_, LedgerEntryExtensionV1Ext>::new(&mut r.inner, r.limits.clone())
57633                    .map(|r| r.map(|t| Self::LedgerEntryExtensionV1Ext(Box::new(t)))),
57634            ),
57635            TypeVariant::LedgerEntry => Box::new(
57636                ReadXdrIter::<_, LedgerEntry>::new(&mut r.inner, r.limits.clone())
57637                    .map(|r| r.map(|t| Self::LedgerEntry(Box::new(t)))),
57638            ),
57639            TypeVariant::LedgerEntryData => Box::new(
57640                ReadXdrIter::<_, LedgerEntryData>::new(&mut r.inner, r.limits.clone())
57641                    .map(|r| r.map(|t| Self::LedgerEntryData(Box::new(t)))),
57642            ),
57643            TypeVariant::LedgerEntryExt => Box::new(
57644                ReadXdrIter::<_, LedgerEntryExt>::new(&mut r.inner, r.limits.clone())
57645                    .map(|r| r.map(|t| Self::LedgerEntryExt(Box::new(t)))),
57646            ),
57647            TypeVariant::LedgerKey => Box::new(
57648                ReadXdrIter::<_, LedgerKey>::new(&mut r.inner, r.limits.clone())
57649                    .map(|r| r.map(|t| Self::LedgerKey(Box::new(t)))),
57650            ),
57651            TypeVariant::LedgerKeyAccount => Box::new(
57652                ReadXdrIter::<_, LedgerKeyAccount>::new(&mut r.inner, r.limits.clone())
57653                    .map(|r| r.map(|t| Self::LedgerKeyAccount(Box::new(t)))),
57654            ),
57655            TypeVariant::LedgerKeyTrustLine => Box::new(
57656                ReadXdrIter::<_, LedgerKeyTrustLine>::new(&mut r.inner, r.limits.clone())
57657                    .map(|r| r.map(|t| Self::LedgerKeyTrustLine(Box::new(t)))),
57658            ),
57659            TypeVariant::LedgerKeyOffer => Box::new(
57660                ReadXdrIter::<_, LedgerKeyOffer>::new(&mut r.inner, r.limits.clone())
57661                    .map(|r| r.map(|t| Self::LedgerKeyOffer(Box::new(t)))),
57662            ),
57663            TypeVariant::LedgerKeyData => Box::new(
57664                ReadXdrIter::<_, LedgerKeyData>::new(&mut r.inner, r.limits.clone())
57665                    .map(|r| r.map(|t| Self::LedgerKeyData(Box::new(t)))),
57666            ),
57667            TypeVariant::LedgerKeyClaimableBalance => Box::new(
57668                ReadXdrIter::<_, LedgerKeyClaimableBalance>::new(&mut r.inner, r.limits.clone())
57669                    .map(|r| r.map(|t| Self::LedgerKeyClaimableBalance(Box::new(t)))),
57670            ),
57671            TypeVariant::LedgerKeyLiquidityPool => Box::new(
57672                ReadXdrIter::<_, LedgerKeyLiquidityPool>::new(&mut r.inner, r.limits.clone())
57673                    .map(|r| r.map(|t| Self::LedgerKeyLiquidityPool(Box::new(t)))),
57674            ),
57675            TypeVariant::LedgerKeyContractData => Box::new(
57676                ReadXdrIter::<_, LedgerKeyContractData>::new(&mut r.inner, r.limits.clone())
57677                    .map(|r| r.map(|t| Self::LedgerKeyContractData(Box::new(t)))),
57678            ),
57679            TypeVariant::LedgerKeyContractCode => Box::new(
57680                ReadXdrIter::<_, LedgerKeyContractCode>::new(&mut r.inner, r.limits.clone())
57681                    .map(|r| r.map(|t| Self::LedgerKeyContractCode(Box::new(t)))),
57682            ),
57683            TypeVariant::LedgerKeyConfigSetting => Box::new(
57684                ReadXdrIter::<_, LedgerKeyConfigSetting>::new(&mut r.inner, r.limits.clone())
57685                    .map(|r| r.map(|t| Self::LedgerKeyConfigSetting(Box::new(t)))),
57686            ),
57687            TypeVariant::LedgerKeyTtl => Box::new(
57688                ReadXdrIter::<_, LedgerKeyTtl>::new(&mut r.inner, r.limits.clone())
57689                    .map(|r| r.map(|t| Self::LedgerKeyTtl(Box::new(t)))),
57690            ),
57691            TypeVariant::EnvelopeType => Box::new(
57692                ReadXdrIter::<_, EnvelopeType>::new(&mut r.inner, r.limits.clone())
57693                    .map(|r| r.map(|t| Self::EnvelopeType(Box::new(t)))),
57694            ),
57695            TypeVariant::BucketListType => Box::new(
57696                ReadXdrIter::<_, BucketListType>::new(&mut r.inner, r.limits.clone())
57697                    .map(|r| r.map(|t| Self::BucketListType(Box::new(t)))),
57698            ),
57699            TypeVariant::BucketEntryType => Box::new(
57700                ReadXdrIter::<_, BucketEntryType>::new(&mut r.inner, r.limits.clone())
57701                    .map(|r| r.map(|t| Self::BucketEntryType(Box::new(t)))),
57702            ),
57703            TypeVariant::HotArchiveBucketEntryType => Box::new(
57704                ReadXdrIter::<_, HotArchiveBucketEntryType>::new(&mut r.inner, r.limits.clone())
57705                    .map(|r| r.map(|t| Self::HotArchiveBucketEntryType(Box::new(t)))),
57706            ),
57707            TypeVariant::BucketMetadata => Box::new(
57708                ReadXdrIter::<_, BucketMetadata>::new(&mut r.inner, r.limits.clone())
57709                    .map(|r| r.map(|t| Self::BucketMetadata(Box::new(t)))),
57710            ),
57711            TypeVariant::BucketMetadataExt => Box::new(
57712                ReadXdrIter::<_, BucketMetadataExt>::new(&mut r.inner, r.limits.clone())
57713                    .map(|r| r.map(|t| Self::BucketMetadataExt(Box::new(t)))),
57714            ),
57715            TypeVariant::BucketEntry => Box::new(
57716                ReadXdrIter::<_, BucketEntry>::new(&mut r.inner, r.limits.clone())
57717                    .map(|r| r.map(|t| Self::BucketEntry(Box::new(t)))),
57718            ),
57719            TypeVariant::HotArchiveBucketEntry => Box::new(
57720                ReadXdrIter::<_, HotArchiveBucketEntry>::new(&mut r.inner, r.limits.clone())
57721                    .map(|r| r.map(|t| Self::HotArchiveBucketEntry(Box::new(t)))),
57722            ),
57723            TypeVariant::UpgradeType => Box::new(
57724                ReadXdrIter::<_, UpgradeType>::new(&mut r.inner, r.limits.clone())
57725                    .map(|r| r.map(|t| Self::UpgradeType(Box::new(t)))),
57726            ),
57727            TypeVariant::StellarValueType => Box::new(
57728                ReadXdrIter::<_, StellarValueType>::new(&mut r.inner, r.limits.clone())
57729                    .map(|r| r.map(|t| Self::StellarValueType(Box::new(t)))),
57730            ),
57731            TypeVariant::LedgerCloseValueSignature => Box::new(
57732                ReadXdrIter::<_, LedgerCloseValueSignature>::new(&mut r.inner, r.limits.clone())
57733                    .map(|r| r.map(|t| Self::LedgerCloseValueSignature(Box::new(t)))),
57734            ),
57735            TypeVariant::StellarValue => Box::new(
57736                ReadXdrIter::<_, StellarValue>::new(&mut r.inner, r.limits.clone())
57737                    .map(|r| r.map(|t| Self::StellarValue(Box::new(t)))),
57738            ),
57739            TypeVariant::StellarValueExt => Box::new(
57740                ReadXdrIter::<_, StellarValueExt>::new(&mut r.inner, r.limits.clone())
57741                    .map(|r| r.map(|t| Self::StellarValueExt(Box::new(t)))),
57742            ),
57743            TypeVariant::LedgerHeaderFlags => Box::new(
57744                ReadXdrIter::<_, LedgerHeaderFlags>::new(&mut r.inner, r.limits.clone())
57745                    .map(|r| r.map(|t| Self::LedgerHeaderFlags(Box::new(t)))),
57746            ),
57747            TypeVariant::LedgerHeaderExtensionV1 => Box::new(
57748                ReadXdrIter::<_, LedgerHeaderExtensionV1>::new(&mut r.inner, r.limits.clone())
57749                    .map(|r| r.map(|t| Self::LedgerHeaderExtensionV1(Box::new(t)))),
57750            ),
57751            TypeVariant::LedgerHeaderExtensionV1Ext => Box::new(
57752                ReadXdrIter::<_, LedgerHeaderExtensionV1Ext>::new(&mut r.inner, r.limits.clone())
57753                    .map(|r| r.map(|t| Self::LedgerHeaderExtensionV1Ext(Box::new(t)))),
57754            ),
57755            TypeVariant::LedgerHeader => Box::new(
57756                ReadXdrIter::<_, LedgerHeader>::new(&mut r.inner, r.limits.clone())
57757                    .map(|r| r.map(|t| Self::LedgerHeader(Box::new(t)))),
57758            ),
57759            TypeVariant::LedgerHeaderExt => Box::new(
57760                ReadXdrIter::<_, LedgerHeaderExt>::new(&mut r.inner, r.limits.clone())
57761                    .map(|r| r.map(|t| Self::LedgerHeaderExt(Box::new(t)))),
57762            ),
57763            TypeVariant::LedgerUpgradeType => Box::new(
57764                ReadXdrIter::<_, LedgerUpgradeType>::new(&mut r.inner, r.limits.clone())
57765                    .map(|r| r.map(|t| Self::LedgerUpgradeType(Box::new(t)))),
57766            ),
57767            TypeVariant::ConfigUpgradeSetKey => Box::new(
57768                ReadXdrIter::<_, ConfigUpgradeSetKey>::new(&mut r.inner, r.limits.clone())
57769                    .map(|r| r.map(|t| Self::ConfigUpgradeSetKey(Box::new(t)))),
57770            ),
57771            TypeVariant::LedgerUpgrade => Box::new(
57772                ReadXdrIter::<_, LedgerUpgrade>::new(&mut r.inner, r.limits.clone())
57773                    .map(|r| r.map(|t| Self::LedgerUpgrade(Box::new(t)))),
57774            ),
57775            TypeVariant::ConfigUpgradeSet => Box::new(
57776                ReadXdrIter::<_, ConfigUpgradeSet>::new(&mut r.inner, r.limits.clone())
57777                    .map(|r| r.map(|t| Self::ConfigUpgradeSet(Box::new(t)))),
57778            ),
57779            TypeVariant::TxSetComponentType => Box::new(
57780                ReadXdrIter::<_, TxSetComponentType>::new(&mut r.inner, r.limits.clone())
57781                    .map(|r| r.map(|t| Self::TxSetComponentType(Box::new(t)))),
57782            ),
57783            TypeVariant::DependentTxCluster => Box::new(
57784                ReadXdrIter::<_, DependentTxCluster>::new(&mut r.inner, r.limits.clone())
57785                    .map(|r| r.map(|t| Self::DependentTxCluster(Box::new(t)))),
57786            ),
57787            TypeVariant::ParallelTxExecutionStage => Box::new(
57788                ReadXdrIter::<_, ParallelTxExecutionStage>::new(&mut r.inner, r.limits.clone())
57789                    .map(|r| r.map(|t| Self::ParallelTxExecutionStage(Box::new(t)))),
57790            ),
57791            TypeVariant::ParallelTxsComponent => Box::new(
57792                ReadXdrIter::<_, ParallelTxsComponent>::new(&mut r.inner, r.limits.clone())
57793                    .map(|r| r.map(|t| Self::ParallelTxsComponent(Box::new(t)))),
57794            ),
57795            TypeVariant::TxSetComponent => Box::new(
57796                ReadXdrIter::<_, TxSetComponent>::new(&mut r.inner, r.limits.clone())
57797                    .map(|r| r.map(|t| Self::TxSetComponent(Box::new(t)))),
57798            ),
57799            TypeVariant::TxSetComponentTxsMaybeDiscountedFee => Box::new(
57800                ReadXdrIter::<_, TxSetComponentTxsMaybeDiscountedFee>::new(
57801                    &mut r.inner,
57802                    r.limits.clone(),
57803                )
57804                .map(|r| r.map(|t| Self::TxSetComponentTxsMaybeDiscountedFee(Box::new(t)))),
57805            ),
57806            TypeVariant::TransactionPhase => Box::new(
57807                ReadXdrIter::<_, TransactionPhase>::new(&mut r.inner, r.limits.clone())
57808                    .map(|r| r.map(|t| Self::TransactionPhase(Box::new(t)))),
57809            ),
57810            TypeVariant::TransactionSet => Box::new(
57811                ReadXdrIter::<_, TransactionSet>::new(&mut r.inner, r.limits.clone())
57812                    .map(|r| r.map(|t| Self::TransactionSet(Box::new(t)))),
57813            ),
57814            TypeVariant::TransactionSetV1 => Box::new(
57815                ReadXdrIter::<_, TransactionSetV1>::new(&mut r.inner, r.limits.clone())
57816                    .map(|r| r.map(|t| Self::TransactionSetV1(Box::new(t)))),
57817            ),
57818            TypeVariant::GeneralizedTransactionSet => Box::new(
57819                ReadXdrIter::<_, GeneralizedTransactionSet>::new(&mut r.inner, r.limits.clone())
57820                    .map(|r| r.map(|t| Self::GeneralizedTransactionSet(Box::new(t)))),
57821            ),
57822            TypeVariant::TransactionResultPair => Box::new(
57823                ReadXdrIter::<_, TransactionResultPair>::new(&mut r.inner, r.limits.clone())
57824                    .map(|r| r.map(|t| Self::TransactionResultPair(Box::new(t)))),
57825            ),
57826            TypeVariant::TransactionResultSet => Box::new(
57827                ReadXdrIter::<_, TransactionResultSet>::new(&mut r.inner, r.limits.clone())
57828                    .map(|r| r.map(|t| Self::TransactionResultSet(Box::new(t)))),
57829            ),
57830            TypeVariant::TransactionHistoryEntry => Box::new(
57831                ReadXdrIter::<_, TransactionHistoryEntry>::new(&mut r.inner, r.limits.clone())
57832                    .map(|r| r.map(|t| Self::TransactionHistoryEntry(Box::new(t)))),
57833            ),
57834            TypeVariant::TransactionHistoryEntryExt => Box::new(
57835                ReadXdrIter::<_, TransactionHistoryEntryExt>::new(&mut r.inner, r.limits.clone())
57836                    .map(|r| r.map(|t| Self::TransactionHistoryEntryExt(Box::new(t)))),
57837            ),
57838            TypeVariant::TransactionHistoryResultEntry => Box::new(
57839                ReadXdrIter::<_, TransactionHistoryResultEntry>::new(
57840                    &mut r.inner,
57841                    r.limits.clone(),
57842                )
57843                .map(|r| r.map(|t| Self::TransactionHistoryResultEntry(Box::new(t)))),
57844            ),
57845            TypeVariant::TransactionHistoryResultEntryExt => Box::new(
57846                ReadXdrIter::<_, TransactionHistoryResultEntryExt>::new(
57847                    &mut r.inner,
57848                    r.limits.clone(),
57849                )
57850                .map(|r| r.map(|t| Self::TransactionHistoryResultEntryExt(Box::new(t)))),
57851            ),
57852            TypeVariant::LedgerHeaderHistoryEntry => Box::new(
57853                ReadXdrIter::<_, LedgerHeaderHistoryEntry>::new(&mut r.inner, r.limits.clone())
57854                    .map(|r| r.map(|t| Self::LedgerHeaderHistoryEntry(Box::new(t)))),
57855            ),
57856            TypeVariant::LedgerHeaderHistoryEntryExt => Box::new(
57857                ReadXdrIter::<_, LedgerHeaderHistoryEntryExt>::new(&mut r.inner, r.limits.clone())
57858                    .map(|r| r.map(|t| Self::LedgerHeaderHistoryEntryExt(Box::new(t)))),
57859            ),
57860            TypeVariant::LedgerScpMessages => Box::new(
57861                ReadXdrIter::<_, LedgerScpMessages>::new(&mut r.inner, r.limits.clone())
57862                    .map(|r| r.map(|t| Self::LedgerScpMessages(Box::new(t)))),
57863            ),
57864            TypeVariant::ScpHistoryEntryV0 => Box::new(
57865                ReadXdrIter::<_, ScpHistoryEntryV0>::new(&mut r.inner, r.limits.clone())
57866                    .map(|r| r.map(|t| Self::ScpHistoryEntryV0(Box::new(t)))),
57867            ),
57868            TypeVariant::ScpHistoryEntry => Box::new(
57869                ReadXdrIter::<_, ScpHistoryEntry>::new(&mut r.inner, r.limits.clone())
57870                    .map(|r| r.map(|t| Self::ScpHistoryEntry(Box::new(t)))),
57871            ),
57872            TypeVariant::LedgerEntryChangeType => Box::new(
57873                ReadXdrIter::<_, LedgerEntryChangeType>::new(&mut r.inner, r.limits.clone())
57874                    .map(|r| r.map(|t| Self::LedgerEntryChangeType(Box::new(t)))),
57875            ),
57876            TypeVariant::LedgerEntryChange => Box::new(
57877                ReadXdrIter::<_, LedgerEntryChange>::new(&mut r.inner, r.limits.clone())
57878                    .map(|r| r.map(|t| Self::LedgerEntryChange(Box::new(t)))),
57879            ),
57880            TypeVariant::LedgerEntryChanges => Box::new(
57881                ReadXdrIter::<_, LedgerEntryChanges>::new(&mut r.inner, r.limits.clone())
57882                    .map(|r| r.map(|t| Self::LedgerEntryChanges(Box::new(t)))),
57883            ),
57884            TypeVariant::OperationMeta => Box::new(
57885                ReadXdrIter::<_, OperationMeta>::new(&mut r.inner, r.limits.clone())
57886                    .map(|r| r.map(|t| Self::OperationMeta(Box::new(t)))),
57887            ),
57888            TypeVariant::TransactionMetaV1 => Box::new(
57889                ReadXdrIter::<_, TransactionMetaV1>::new(&mut r.inner, r.limits.clone())
57890                    .map(|r| r.map(|t| Self::TransactionMetaV1(Box::new(t)))),
57891            ),
57892            TypeVariant::TransactionMetaV2 => Box::new(
57893                ReadXdrIter::<_, TransactionMetaV2>::new(&mut r.inner, r.limits.clone())
57894                    .map(|r| r.map(|t| Self::TransactionMetaV2(Box::new(t)))),
57895            ),
57896            TypeVariant::ContractEventType => Box::new(
57897                ReadXdrIter::<_, ContractEventType>::new(&mut r.inner, r.limits.clone())
57898                    .map(|r| r.map(|t| Self::ContractEventType(Box::new(t)))),
57899            ),
57900            TypeVariant::ContractEvent => Box::new(
57901                ReadXdrIter::<_, ContractEvent>::new(&mut r.inner, r.limits.clone())
57902                    .map(|r| r.map(|t| Self::ContractEvent(Box::new(t)))),
57903            ),
57904            TypeVariant::ContractEventBody => Box::new(
57905                ReadXdrIter::<_, ContractEventBody>::new(&mut r.inner, r.limits.clone())
57906                    .map(|r| r.map(|t| Self::ContractEventBody(Box::new(t)))),
57907            ),
57908            TypeVariant::ContractEventV0 => Box::new(
57909                ReadXdrIter::<_, ContractEventV0>::new(&mut r.inner, r.limits.clone())
57910                    .map(|r| r.map(|t| Self::ContractEventV0(Box::new(t)))),
57911            ),
57912            TypeVariant::DiagnosticEvent => Box::new(
57913                ReadXdrIter::<_, DiagnosticEvent>::new(&mut r.inner, r.limits.clone())
57914                    .map(|r| r.map(|t| Self::DiagnosticEvent(Box::new(t)))),
57915            ),
57916            TypeVariant::SorobanTransactionMetaExtV1 => Box::new(
57917                ReadXdrIter::<_, SorobanTransactionMetaExtV1>::new(&mut r.inner, r.limits.clone())
57918                    .map(|r| r.map(|t| Self::SorobanTransactionMetaExtV1(Box::new(t)))),
57919            ),
57920            TypeVariant::SorobanTransactionMetaExt => Box::new(
57921                ReadXdrIter::<_, SorobanTransactionMetaExt>::new(&mut r.inner, r.limits.clone())
57922                    .map(|r| r.map(|t| Self::SorobanTransactionMetaExt(Box::new(t)))),
57923            ),
57924            TypeVariant::SorobanTransactionMeta => Box::new(
57925                ReadXdrIter::<_, SorobanTransactionMeta>::new(&mut r.inner, r.limits.clone())
57926                    .map(|r| r.map(|t| Self::SorobanTransactionMeta(Box::new(t)))),
57927            ),
57928            TypeVariant::TransactionMetaV3 => Box::new(
57929                ReadXdrIter::<_, TransactionMetaV3>::new(&mut r.inner, r.limits.clone())
57930                    .map(|r| r.map(|t| Self::TransactionMetaV3(Box::new(t)))),
57931            ),
57932            TypeVariant::OperationMetaV2 => Box::new(
57933                ReadXdrIter::<_, OperationMetaV2>::new(&mut r.inner, r.limits.clone())
57934                    .map(|r| r.map(|t| Self::OperationMetaV2(Box::new(t)))),
57935            ),
57936            TypeVariant::SorobanTransactionMetaV2 => Box::new(
57937                ReadXdrIter::<_, SorobanTransactionMetaV2>::new(&mut r.inner, r.limits.clone())
57938                    .map(|r| r.map(|t| Self::SorobanTransactionMetaV2(Box::new(t)))),
57939            ),
57940            TypeVariant::TransactionEventStage => Box::new(
57941                ReadXdrIter::<_, TransactionEventStage>::new(&mut r.inner, r.limits.clone())
57942                    .map(|r| r.map(|t| Self::TransactionEventStage(Box::new(t)))),
57943            ),
57944            TypeVariant::TransactionEvent => Box::new(
57945                ReadXdrIter::<_, TransactionEvent>::new(&mut r.inner, r.limits.clone())
57946                    .map(|r| r.map(|t| Self::TransactionEvent(Box::new(t)))),
57947            ),
57948            TypeVariant::TransactionMetaV4 => Box::new(
57949                ReadXdrIter::<_, TransactionMetaV4>::new(&mut r.inner, r.limits.clone())
57950                    .map(|r| r.map(|t| Self::TransactionMetaV4(Box::new(t)))),
57951            ),
57952            TypeVariant::InvokeHostFunctionSuccessPreImage => Box::new(
57953                ReadXdrIter::<_, InvokeHostFunctionSuccessPreImage>::new(
57954                    &mut r.inner,
57955                    r.limits.clone(),
57956                )
57957                .map(|r| r.map(|t| Self::InvokeHostFunctionSuccessPreImage(Box::new(t)))),
57958            ),
57959            TypeVariant::TransactionMeta => Box::new(
57960                ReadXdrIter::<_, TransactionMeta>::new(&mut r.inner, r.limits.clone())
57961                    .map(|r| r.map(|t| Self::TransactionMeta(Box::new(t)))),
57962            ),
57963            TypeVariant::TransactionResultMeta => Box::new(
57964                ReadXdrIter::<_, TransactionResultMeta>::new(&mut r.inner, r.limits.clone())
57965                    .map(|r| r.map(|t| Self::TransactionResultMeta(Box::new(t)))),
57966            ),
57967            TypeVariant::TransactionResultMetaV1 => Box::new(
57968                ReadXdrIter::<_, TransactionResultMetaV1>::new(&mut r.inner, r.limits.clone())
57969                    .map(|r| r.map(|t| Self::TransactionResultMetaV1(Box::new(t)))),
57970            ),
57971            TypeVariant::UpgradeEntryMeta => Box::new(
57972                ReadXdrIter::<_, UpgradeEntryMeta>::new(&mut r.inner, r.limits.clone())
57973                    .map(|r| r.map(|t| Self::UpgradeEntryMeta(Box::new(t)))),
57974            ),
57975            TypeVariant::LedgerCloseMetaV0 => Box::new(
57976                ReadXdrIter::<_, LedgerCloseMetaV0>::new(&mut r.inner, r.limits.clone())
57977                    .map(|r| r.map(|t| Self::LedgerCloseMetaV0(Box::new(t)))),
57978            ),
57979            TypeVariant::LedgerCloseMetaExtV1 => Box::new(
57980                ReadXdrIter::<_, LedgerCloseMetaExtV1>::new(&mut r.inner, r.limits.clone())
57981                    .map(|r| r.map(|t| Self::LedgerCloseMetaExtV1(Box::new(t)))),
57982            ),
57983            TypeVariant::LedgerCloseMetaExt => Box::new(
57984                ReadXdrIter::<_, LedgerCloseMetaExt>::new(&mut r.inner, r.limits.clone())
57985                    .map(|r| r.map(|t| Self::LedgerCloseMetaExt(Box::new(t)))),
57986            ),
57987            TypeVariant::LedgerCloseMetaV1 => Box::new(
57988                ReadXdrIter::<_, LedgerCloseMetaV1>::new(&mut r.inner, r.limits.clone())
57989                    .map(|r| r.map(|t| Self::LedgerCloseMetaV1(Box::new(t)))),
57990            ),
57991            TypeVariant::LedgerCloseMetaV2 => Box::new(
57992                ReadXdrIter::<_, LedgerCloseMetaV2>::new(&mut r.inner, r.limits.clone())
57993                    .map(|r| r.map(|t| Self::LedgerCloseMetaV2(Box::new(t)))),
57994            ),
57995            TypeVariant::LedgerCloseMeta => Box::new(
57996                ReadXdrIter::<_, LedgerCloseMeta>::new(&mut r.inner, r.limits.clone())
57997                    .map(|r| r.map(|t| Self::LedgerCloseMeta(Box::new(t)))),
57998            ),
57999            TypeVariant::ErrorCode => Box::new(
58000                ReadXdrIter::<_, ErrorCode>::new(&mut r.inner, r.limits.clone())
58001                    .map(|r| r.map(|t| Self::ErrorCode(Box::new(t)))),
58002            ),
58003            TypeVariant::SError => Box::new(
58004                ReadXdrIter::<_, SError>::new(&mut r.inner, r.limits.clone())
58005                    .map(|r| r.map(|t| Self::SError(Box::new(t)))),
58006            ),
58007            TypeVariant::SendMore => Box::new(
58008                ReadXdrIter::<_, SendMore>::new(&mut r.inner, r.limits.clone())
58009                    .map(|r| r.map(|t| Self::SendMore(Box::new(t)))),
58010            ),
58011            TypeVariant::SendMoreExtended => Box::new(
58012                ReadXdrIter::<_, SendMoreExtended>::new(&mut r.inner, r.limits.clone())
58013                    .map(|r| r.map(|t| Self::SendMoreExtended(Box::new(t)))),
58014            ),
58015            TypeVariant::AuthCert => Box::new(
58016                ReadXdrIter::<_, AuthCert>::new(&mut r.inner, r.limits.clone())
58017                    .map(|r| r.map(|t| Self::AuthCert(Box::new(t)))),
58018            ),
58019            TypeVariant::Hello => Box::new(
58020                ReadXdrIter::<_, Hello>::new(&mut r.inner, r.limits.clone())
58021                    .map(|r| r.map(|t| Self::Hello(Box::new(t)))),
58022            ),
58023            TypeVariant::Auth => Box::new(
58024                ReadXdrIter::<_, Auth>::new(&mut r.inner, r.limits.clone())
58025                    .map(|r| r.map(|t| Self::Auth(Box::new(t)))),
58026            ),
58027            TypeVariant::IpAddrType => Box::new(
58028                ReadXdrIter::<_, IpAddrType>::new(&mut r.inner, r.limits.clone())
58029                    .map(|r| r.map(|t| Self::IpAddrType(Box::new(t)))),
58030            ),
58031            TypeVariant::PeerAddress => Box::new(
58032                ReadXdrIter::<_, PeerAddress>::new(&mut r.inner, r.limits.clone())
58033                    .map(|r| r.map(|t| Self::PeerAddress(Box::new(t)))),
58034            ),
58035            TypeVariant::PeerAddressIp => Box::new(
58036                ReadXdrIter::<_, PeerAddressIp>::new(&mut r.inner, r.limits.clone())
58037                    .map(|r| r.map(|t| Self::PeerAddressIp(Box::new(t)))),
58038            ),
58039            TypeVariant::MessageType => Box::new(
58040                ReadXdrIter::<_, MessageType>::new(&mut r.inner, r.limits.clone())
58041                    .map(|r| r.map(|t| Self::MessageType(Box::new(t)))),
58042            ),
58043            TypeVariant::DontHave => Box::new(
58044                ReadXdrIter::<_, DontHave>::new(&mut r.inner, r.limits.clone())
58045                    .map(|r| r.map(|t| Self::DontHave(Box::new(t)))),
58046            ),
58047            TypeVariant::SurveyMessageCommandType => Box::new(
58048                ReadXdrIter::<_, SurveyMessageCommandType>::new(&mut r.inner, r.limits.clone())
58049                    .map(|r| r.map(|t| Self::SurveyMessageCommandType(Box::new(t)))),
58050            ),
58051            TypeVariant::SurveyMessageResponseType => Box::new(
58052                ReadXdrIter::<_, SurveyMessageResponseType>::new(&mut r.inner, r.limits.clone())
58053                    .map(|r| r.map(|t| Self::SurveyMessageResponseType(Box::new(t)))),
58054            ),
58055            TypeVariant::TimeSlicedSurveyStartCollectingMessage => Box::new(
58056                ReadXdrIter::<_, TimeSlicedSurveyStartCollectingMessage>::new(
58057                    &mut r.inner,
58058                    r.limits.clone(),
58059                )
58060                .map(|r| r.map(|t| Self::TimeSlicedSurveyStartCollectingMessage(Box::new(t)))),
58061            ),
58062            TypeVariant::SignedTimeSlicedSurveyStartCollectingMessage => Box::new(
58063                ReadXdrIter::<_, SignedTimeSlicedSurveyStartCollectingMessage>::new(
58064                    &mut r.inner,
58065                    r.limits.clone(),
58066                )
58067                .map(|r| {
58068                    r.map(|t| Self::SignedTimeSlicedSurveyStartCollectingMessage(Box::new(t)))
58069                }),
58070            ),
58071            TypeVariant::TimeSlicedSurveyStopCollectingMessage => Box::new(
58072                ReadXdrIter::<_, TimeSlicedSurveyStopCollectingMessage>::new(
58073                    &mut r.inner,
58074                    r.limits.clone(),
58075                )
58076                .map(|r| r.map(|t| Self::TimeSlicedSurveyStopCollectingMessage(Box::new(t)))),
58077            ),
58078            TypeVariant::SignedTimeSlicedSurveyStopCollectingMessage => Box::new(
58079                ReadXdrIter::<_, SignedTimeSlicedSurveyStopCollectingMessage>::new(
58080                    &mut r.inner,
58081                    r.limits.clone(),
58082                )
58083                .map(|r| r.map(|t| Self::SignedTimeSlicedSurveyStopCollectingMessage(Box::new(t)))),
58084            ),
58085            TypeVariant::SurveyRequestMessage => Box::new(
58086                ReadXdrIter::<_, SurveyRequestMessage>::new(&mut r.inner, r.limits.clone())
58087                    .map(|r| r.map(|t| Self::SurveyRequestMessage(Box::new(t)))),
58088            ),
58089            TypeVariant::TimeSlicedSurveyRequestMessage => Box::new(
58090                ReadXdrIter::<_, TimeSlicedSurveyRequestMessage>::new(
58091                    &mut r.inner,
58092                    r.limits.clone(),
58093                )
58094                .map(|r| r.map(|t| Self::TimeSlicedSurveyRequestMessage(Box::new(t)))),
58095            ),
58096            TypeVariant::SignedTimeSlicedSurveyRequestMessage => Box::new(
58097                ReadXdrIter::<_, SignedTimeSlicedSurveyRequestMessage>::new(
58098                    &mut r.inner,
58099                    r.limits.clone(),
58100                )
58101                .map(|r| r.map(|t| Self::SignedTimeSlicedSurveyRequestMessage(Box::new(t)))),
58102            ),
58103            TypeVariant::EncryptedBody => Box::new(
58104                ReadXdrIter::<_, EncryptedBody>::new(&mut r.inner, r.limits.clone())
58105                    .map(|r| r.map(|t| Self::EncryptedBody(Box::new(t)))),
58106            ),
58107            TypeVariant::SurveyResponseMessage => Box::new(
58108                ReadXdrIter::<_, SurveyResponseMessage>::new(&mut r.inner, r.limits.clone())
58109                    .map(|r| r.map(|t| Self::SurveyResponseMessage(Box::new(t)))),
58110            ),
58111            TypeVariant::TimeSlicedSurveyResponseMessage => Box::new(
58112                ReadXdrIter::<_, TimeSlicedSurveyResponseMessage>::new(
58113                    &mut r.inner,
58114                    r.limits.clone(),
58115                )
58116                .map(|r| r.map(|t| Self::TimeSlicedSurveyResponseMessage(Box::new(t)))),
58117            ),
58118            TypeVariant::SignedTimeSlicedSurveyResponseMessage => Box::new(
58119                ReadXdrIter::<_, SignedTimeSlicedSurveyResponseMessage>::new(
58120                    &mut r.inner,
58121                    r.limits.clone(),
58122                )
58123                .map(|r| r.map(|t| Self::SignedTimeSlicedSurveyResponseMessage(Box::new(t)))),
58124            ),
58125            TypeVariant::PeerStats => Box::new(
58126                ReadXdrIter::<_, PeerStats>::new(&mut r.inner, r.limits.clone())
58127                    .map(|r| r.map(|t| Self::PeerStats(Box::new(t)))),
58128            ),
58129            TypeVariant::TimeSlicedNodeData => Box::new(
58130                ReadXdrIter::<_, TimeSlicedNodeData>::new(&mut r.inner, r.limits.clone())
58131                    .map(|r| r.map(|t| Self::TimeSlicedNodeData(Box::new(t)))),
58132            ),
58133            TypeVariant::TimeSlicedPeerData => Box::new(
58134                ReadXdrIter::<_, TimeSlicedPeerData>::new(&mut r.inner, r.limits.clone())
58135                    .map(|r| r.map(|t| Self::TimeSlicedPeerData(Box::new(t)))),
58136            ),
58137            TypeVariant::TimeSlicedPeerDataList => Box::new(
58138                ReadXdrIter::<_, TimeSlicedPeerDataList>::new(&mut r.inner, r.limits.clone())
58139                    .map(|r| r.map(|t| Self::TimeSlicedPeerDataList(Box::new(t)))),
58140            ),
58141            TypeVariant::TopologyResponseBodyV2 => Box::new(
58142                ReadXdrIter::<_, TopologyResponseBodyV2>::new(&mut r.inner, r.limits.clone())
58143                    .map(|r| r.map(|t| Self::TopologyResponseBodyV2(Box::new(t)))),
58144            ),
58145            TypeVariant::SurveyResponseBody => Box::new(
58146                ReadXdrIter::<_, SurveyResponseBody>::new(&mut r.inner, r.limits.clone())
58147                    .map(|r| r.map(|t| Self::SurveyResponseBody(Box::new(t)))),
58148            ),
58149            TypeVariant::TxAdvertVector => Box::new(
58150                ReadXdrIter::<_, TxAdvertVector>::new(&mut r.inner, r.limits.clone())
58151                    .map(|r| r.map(|t| Self::TxAdvertVector(Box::new(t)))),
58152            ),
58153            TypeVariant::FloodAdvert => Box::new(
58154                ReadXdrIter::<_, FloodAdvert>::new(&mut r.inner, r.limits.clone())
58155                    .map(|r| r.map(|t| Self::FloodAdvert(Box::new(t)))),
58156            ),
58157            TypeVariant::TxDemandVector => Box::new(
58158                ReadXdrIter::<_, TxDemandVector>::new(&mut r.inner, r.limits.clone())
58159                    .map(|r| r.map(|t| Self::TxDemandVector(Box::new(t)))),
58160            ),
58161            TypeVariant::FloodDemand => Box::new(
58162                ReadXdrIter::<_, FloodDemand>::new(&mut r.inner, r.limits.clone())
58163                    .map(|r| r.map(|t| Self::FloodDemand(Box::new(t)))),
58164            ),
58165            TypeVariant::StellarMessage => Box::new(
58166                ReadXdrIter::<_, StellarMessage>::new(&mut r.inner, r.limits.clone())
58167                    .map(|r| r.map(|t| Self::StellarMessage(Box::new(t)))),
58168            ),
58169            TypeVariant::AuthenticatedMessage => Box::new(
58170                ReadXdrIter::<_, AuthenticatedMessage>::new(&mut r.inner, r.limits.clone())
58171                    .map(|r| r.map(|t| Self::AuthenticatedMessage(Box::new(t)))),
58172            ),
58173            TypeVariant::AuthenticatedMessageV0 => Box::new(
58174                ReadXdrIter::<_, AuthenticatedMessageV0>::new(&mut r.inner, r.limits.clone())
58175                    .map(|r| r.map(|t| Self::AuthenticatedMessageV0(Box::new(t)))),
58176            ),
58177            TypeVariant::LiquidityPoolParameters => Box::new(
58178                ReadXdrIter::<_, LiquidityPoolParameters>::new(&mut r.inner, r.limits.clone())
58179                    .map(|r| r.map(|t| Self::LiquidityPoolParameters(Box::new(t)))),
58180            ),
58181            TypeVariant::MuxedAccount => Box::new(
58182                ReadXdrIter::<_, MuxedAccount>::new(&mut r.inner, r.limits.clone())
58183                    .map(|r| r.map(|t| Self::MuxedAccount(Box::new(t)))),
58184            ),
58185            TypeVariant::MuxedAccountMed25519 => Box::new(
58186                ReadXdrIter::<_, MuxedAccountMed25519>::new(&mut r.inner, r.limits.clone())
58187                    .map(|r| r.map(|t| Self::MuxedAccountMed25519(Box::new(t)))),
58188            ),
58189            TypeVariant::DecoratedSignature => Box::new(
58190                ReadXdrIter::<_, DecoratedSignature>::new(&mut r.inner, r.limits.clone())
58191                    .map(|r| r.map(|t| Self::DecoratedSignature(Box::new(t)))),
58192            ),
58193            TypeVariant::OperationType => Box::new(
58194                ReadXdrIter::<_, OperationType>::new(&mut r.inner, r.limits.clone())
58195                    .map(|r| r.map(|t| Self::OperationType(Box::new(t)))),
58196            ),
58197            TypeVariant::CreateAccountOp => Box::new(
58198                ReadXdrIter::<_, CreateAccountOp>::new(&mut r.inner, r.limits.clone())
58199                    .map(|r| r.map(|t| Self::CreateAccountOp(Box::new(t)))),
58200            ),
58201            TypeVariant::PaymentOp => Box::new(
58202                ReadXdrIter::<_, PaymentOp>::new(&mut r.inner, r.limits.clone())
58203                    .map(|r| r.map(|t| Self::PaymentOp(Box::new(t)))),
58204            ),
58205            TypeVariant::PathPaymentStrictReceiveOp => Box::new(
58206                ReadXdrIter::<_, PathPaymentStrictReceiveOp>::new(&mut r.inner, r.limits.clone())
58207                    .map(|r| r.map(|t| Self::PathPaymentStrictReceiveOp(Box::new(t)))),
58208            ),
58209            TypeVariant::PathPaymentStrictSendOp => Box::new(
58210                ReadXdrIter::<_, PathPaymentStrictSendOp>::new(&mut r.inner, r.limits.clone())
58211                    .map(|r| r.map(|t| Self::PathPaymentStrictSendOp(Box::new(t)))),
58212            ),
58213            TypeVariant::ManageSellOfferOp => Box::new(
58214                ReadXdrIter::<_, ManageSellOfferOp>::new(&mut r.inner, r.limits.clone())
58215                    .map(|r| r.map(|t| Self::ManageSellOfferOp(Box::new(t)))),
58216            ),
58217            TypeVariant::ManageBuyOfferOp => Box::new(
58218                ReadXdrIter::<_, ManageBuyOfferOp>::new(&mut r.inner, r.limits.clone())
58219                    .map(|r| r.map(|t| Self::ManageBuyOfferOp(Box::new(t)))),
58220            ),
58221            TypeVariant::CreatePassiveSellOfferOp => Box::new(
58222                ReadXdrIter::<_, CreatePassiveSellOfferOp>::new(&mut r.inner, r.limits.clone())
58223                    .map(|r| r.map(|t| Self::CreatePassiveSellOfferOp(Box::new(t)))),
58224            ),
58225            TypeVariant::SetOptionsOp => Box::new(
58226                ReadXdrIter::<_, SetOptionsOp>::new(&mut r.inner, r.limits.clone())
58227                    .map(|r| r.map(|t| Self::SetOptionsOp(Box::new(t)))),
58228            ),
58229            TypeVariant::ChangeTrustAsset => Box::new(
58230                ReadXdrIter::<_, ChangeTrustAsset>::new(&mut r.inner, r.limits.clone())
58231                    .map(|r| r.map(|t| Self::ChangeTrustAsset(Box::new(t)))),
58232            ),
58233            TypeVariant::ChangeTrustOp => Box::new(
58234                ReadXdrIter::<_, ChangeTrustOp>::new(&mut r.inner, r.limits.clone())
58235                    .map(|r| r.map(|t| Self::ChangeTrustOp(Box::new(t)))),
58236            ),
58237            TypeVariant::AllowTrustOp => Box::new(
58238                ReadXdrIter::<_, AllowTrustOp>::new(&mut r.inner, r.limits.clone())
58239                    .map(|r| r.map(|t| Self::AllowTrustOp(Box::new(t)))),
58240            ),
58241            TypeVariant::ManageDataOp => Box::new(
58242                ReadXdrIter::<_, ManageDataOp>::new(&mut r.inner, r.limits.clone())
58243                    .map(|r| r.map(|t| Self::ManageDataOp(Box::new(t)))),
58244            ),
58245            TypeVariant::BumpSequenceOp => Box::new(
58246                ReadXdrIter::<_, BumpSequenceOp>::new(&mut r.inner, r.limits.clone())
58247                    .map(|r| r.map(|t| Self::BumpSequenceOp(Box::new(t)))),
58248            ),
58249            TypeVariant::CreateClaimableBalanceOp => Box::new(
58250                ReadXdrIter::<_, CreateClaimableBalanceOp>::new(&mut r.inner, r.limits.clone())
58251                    .map(|r| r.map(|t| Self::CreateClaimableBalanceOp(Box::new(t)))),
58252            ),
58253            TypeVariant::ClaimClaimableBalanceOp => Box::new(
58254                ReadXdrIter::<_, ClaimClaimableBalanceOp>::new(&mut r.inner, r.limits.clone())
58255                    .map(|r| r.map(|t| Self::ClaimClaimableBalanceOp(Box::new(t)))),
58256            ),
58257            TypeVariant::BeginSponsoringFutureReservesOp => Box::new(
58258                ReadXdrIter::<_, BeginSponsoringFutureReservesOp>::new(
58259                    &mut r.inner,
58260                    r.limits.clone(),
58261                )
58262                .map(|r| r.map(|t| Self::BeginSponsoringFutureReservesOp(Box::new(t)))),
58263            ),
58264            TypeVariant::RevokeSponsorshipType => Box::new(
58265                ReadXdrIter::<_, RevokeSponsorshipType>::new(&mut r.inner, r.limits.clone())
58266                    .map(|r| r.map(|t| Self::RevokeSponsorshipType(Box::new(t)))),
58267            ),
58268            TypeVariant::RevokeSponsorshipOp => Box::new(
58269                ReadXdrIter::<_, RevokeSponsorshipOp>::new(&mut r.inner, r.limits.clone())
58270                    .map(|r| r.map(|t| Self::RevokeSponsorshipOp(Box::new(t)))),
58271            ),
58272            TypeVariant::RevokeSponsorshipOpSigner => Box::new(
58273                ReadXdrIter::<_, RevokeSponsorshipOpSigner>::new(&mut r.inner, r.limits.clone())
58274                    .map(|r| r.map(|t| Self::RevokeSponsorshipOpSigner(Box::new(t)))),
58275            ),
58276            TypeVariant::ClawbackOp => Box::new(
58277                ReadXdrIter::<_, ClawbackOp>::new(&mut r.inner, r.limits.clone())
58278                    .map(|r| r.map(|t| Self::ClawbackOp(Box::new(t)))),
58279            ),
58280            TypeVariant::ClawbackClaimableBalanceOp => Box::new(
58281                ReadXdrIter::<_, ClawbackClaimableBalanceOp>::new(&mut r.inner, r.limits.clone())
58282                    .map(|r| r.map(|t| Self::ClawbackClaimableBalanceOp(Box::new(t)))),
58283            ),
58284            TypeVariant::SetTrustLineFlagsOp => Box::new(
58285                ReadXdrIter::<_, SetTrustLineFlagsOp>::new(&mut r.inner, r.limits.clone())
58286                    .map(|r| r.map(|t| Self::SetTrustLineFlagsOp(Box::new(t)))),
58287            ),
58288            TypeVariant::LiquidityPoolDepositOp => Box::new(
58289                ReadXdrIter::<_, LiquidityPoolDepositOp>::new(&mut r.inner, r.limits.clone())
58290                    .map(|r| r.map(|t| Self::LiquidityPoolDepositOp(Box::new(t)))),
58291            ),
58292            TypeVariant::LiquidityPoolWithdrawOp => Box::new(
58293                ReadXdrIter::<_, LiquidityPoolWithdrawOp>::new(&mut r.inner, r.limits.clone())
58294                    .map(|r| r.map(|t| Self::LiquidityPoolWithdrawOp(Box::new(t)))),
58295            ),
58296            TypeVariant::HostFunctionType => Box::new(
58297                ReadXdrIter::<_, HostFunctionType>::new(&mut r.inner, r.limits.clone())
58298                    .map(|r| r.map(|t| Self::HostFunctionType(Box::new(t)))),
58299            ),
58300            TypeVariant::ContractIdPreimageType => Box::new(
58301                ReadXdrIter::<_, ContractIdPreimageType>::new(&mut r.inner, r.limits.clone())
58302                    .map(|r| r.map(|t| Self::ContractIdPreimageType(Box::new(t)))),
58303            ),
58304            TypeVariant::ContractIdPreimage => Box::new(
58305                ReadXdrIter::<_, ContractIdPreimage>::new(&mut r.inner, r.limits.clone())
58306                    .map(|r| r.map(|t| Self::ContractIdPreimage(Box::new(t)))),
58307            ),
58308            TypeVariant::ContractIdPreimageFromAddress => Box::new(
58309                ReadXdrIter::<_, ContractIdPreimageFromAddress>::new(
58310                    &mut r.inner,
58311                    r.limits.clone(),
58312                )
58313                .map(|r| r.map(|t| Self::ContractIdPreimageFromAddress(Box::new(t)))),
58314            ),
58315            TypeVariant::CreateContractArgs => Box::new(
58316                ReadXdrIter::<_, CreateContractArgs>::new(&mut r.inner, r.limits.clone())
58317                    .map(|r| r.map(|t| Self::CreateContractArgs(Box::new(t)))),
58318            ),
58319            TypeVariant::CreateContractArgsV2 => Box::new(
58320                ReadXdrIter::<_, CreateContractArgsV2>::new(&mut r.inner, r.limits.clone())
58321                    .map(|r| r.map(|t| Self::CreateContractArgsV2(Box::new(t)))),
58322            ),
58323            TypeVariant::InvokeContractArgs => Box::new(
58324                ReadXdrIter::<_, InvokeContractArgs>::new(&mut r.inner, r.limits.clone())
58325                    .map(|r| r.map(|t| Self::InvokeContractArgs(Box::new(t)))),
58326            ),
58327            TypeVariant::HostFunction => Box::new(
58328                ReadXdrIter::<_, HostFunction>::new(&mut r.inner, r.limits.clone())
58329                    .map(|r| r.map(|t| Self::HostFunction(Box::new(t)))),
58330            ),
58331            TypeVariant::SorobanAuthorizedFunctionType => Box::new(
58332                ReadXdrIter::<_, SorobanAuthorizedFunctionType>::new(
58333                    &mut r.inner,
58334                    r.limits.clone(),
58335                )
58336                .map(|r| r.map(|t| Self::SorobanAuthorizedFunctionType(Box::new(t)))),
58337            ),
58338            TypeVariant::SorobanAuthorizedFunction => Box::new(
58339                ReadXdrIter::<_, SorobanAuthorizedFunction>::new(&mut r.inner, r.limits.clone())
58340                    .map(|r| r.map(|t| Self::SorobanAuthorizedFunction(Box::new(t)))),
58341            ),
58342            TypeVariant::SorobanAuthorizedInvocation => Box::new(
58343                ReadXdrIter::<_, SorobanAuthorizedInvocation>::new(&mut r.inner, r.limits.clone())
58344                    .map(|r| r.map(|t| Self::SorobanAuthorizedInvocation(Box::new(t)))),
58345            ),
58346            TypeVariant::SorobanAddressCredentials => Box::new(
58347                ReadXdrIter::<_, SorobanAddressCredentials>::new(&mut r.inner, r.limits.clone())
58348                    .map(|r| r.map(|t| Self::SorobanAddressCredentials(Box::new(t)))),
58349            ),
58350            TypeVariant::SorobanCredentialsType => Box::new(
58351                ReadXdrIter::<_, SorobanCredentialsType>::new(&mut r.inner, r.limits.clone())
58352                    .map(|r| r.map(|t| Self::SorobanCredentialsType(Box::new(t)))),
58353            ),
58354            TypeVariant::SorobanCredentials => Box::new(
58355                ReadXdrIter::<_, SorobanCredentials>::new(&mut r.inner, r.limits.clone())
58356                    .map(|r| r.map(|t| Self::SorobanCredentials(Box::new(t)))),
58357            ),
58358            TypeVariant::SorobanAuthorizationEntry => Box::new(
58359                ReadXdrIter::<_, SorobanAuthorizationEntry>::new(&mut r.inner, r.limits.clone())
58360                    .map(|r| r.map(|t| Self::SorobanAuthorizationEntry(Box::new(t)))),
58361            ),
58362            TypeVariant::SorobanAuthorizationEntries => Box::new(
58363                ReadXdrIter::<_, SorobanAuthorizationEntries>::new(&mut r.inner, r.limits.clone())
58364                    .map(|r| r.map(|t| Self::SorobanAuthorizationEntries(Box::new(t)))),
58365            ),
58366            TypeVariant::InvokeHostFunctionOp => Box::new(
58367                ReadXdrIter::<_, InvokeHostFunctionOp>::new(&mut r.inner, r.limits.clone())
58368                    .map(|r| r.map(|t| Self::InvokeHostFunctionOp(Box::new(t)))),
58369            ),
58370            TypeVariant::ExtendFootprintTtlOp => Box::new(
58371                ReadXdrIter::<_, ExtendFootprintTtlOp>::new(&mut r.inner, r.limits.clone())
58372                    .map(|r| r.map(|t| Self::ExtendFootprintTtlOp(Box::new(t)))),
58373            ),
58374            TypeVariant::RestoreFootprintOp => Box::new(
58375                ReadXdrIter::<_, RestoreFootprintOp>::new(&mut r.inner, r.limits.clone())
58376                    .map(|r| r.map(|t| Self::RestoreFootprintOp(Box::new(t)))),
58377            ),
58378            TypeVariant::Operation => Box::new(
58379                ReadXdrIter::<_, Operation>::new(&mut r.inner, r.limits.clone())
58380                    .map(|r| r.map(|t| Self::Operation(Box::new(t)))),
58381            ),
58382            TypeVariant::OperationBody => Box::new(
58383                ReadXdrIter::<_, OperationBody>::new(&mut r.inner, r.limits.clone())
58384                    .map(|r| r.map(|t| Self::OperationBody(Box::new(t)))),
58385            ),
58386            TypeVariant::HashIdPreimage => Box::new(
58387                ReadXdrIter::<_, HashIdPreimage>::new(&mut r.inner, r.limits.clone())
58388                    .map(|r| r.map(|t| Self::HashIdPreimage(Box::new(t)))),
58389            ),
58390            TypeVariant::HashIdPreimageOperationId => Box::new(
58391                ReadXdrIter::<_, HashIdPreimageOperationId>::new(&mut r.inner, r.limits.clone())
58392                    .map(|r| r.map(|t| Self::HashIdPreimageOperationId(Box::new(t)))),
58393            ),
58394            TypeVariant::HashIdPreimageRevokeId => Box::new(
58395                ReadXdrIter::<_, HashIdPreimageRevokeId>::new(&mut r.inner, r.limits.clone())
58396                    .map(|r| r.map(|t| Self::HashIdPreimageRevokeId(Box::new(t)))),
58397            ),
58398            TypeVariant::HashIdPreimageContractId => Box::new(
58399                ReadXdrIter::<_, HashIdPreimageContractId>::new(&mut r.inner, r.limits.clone())
58400                    .map(|r| r.map(|t| Self::HashIdPreimageContractId(Box::new(t)))),
58401            ),
58402            TypeVariant::HashIdPreimageSorobanAuthorization => Box::new(
58403                ReadXdrIter::<_, HashIdPreimageSorobanAuthorization>::new(
58404                    &mut r.inner,
58405                    r.limits.clone(),
58406                )
58407                .map(|r| r.map(|t| Self::HashIdPreimageSorobanAuthorization(Box::new(t)))),
58408            ),
58409            TypeVariant::MemoType => Box::new(
58410                ReadXdrIter::<_, MemoType>::new(&mut r.inner, r.limits.clone())
58411                    .map(|r| r.map(|t| Self::MemoType(Box::new(t)))),
58412            ),
58413            TypeVariant::Memo => Box::new(
58414                ReadXdrIter::<_, Memo>::new(&mut r.inner, r.limits.clone())
58415                    .map(|r| r.map(|t| Self::Memo(Box::new(t)))),
58416            ),
58417            TypeVariant::TimeBounds => Box::new(
58418                ReadXdrIter::<_, TimeBounds>::new(&mut r.inner, r.limits.clone())
58419                    .map(|r| r.map(|t| Self::TimeBounds(Box::new(t)))),
58420            ),
58421            TypeVariant::LedgerBounds => Box::new(
58422                ReadXdrIter::<_, LedgerBounds>::new(&mut r.inner, r.limits.clone())
58423                    .map(|r| r.map(|t| Self::LedgerBounds(Box::new(t)))),
58424            ),
58425            TypeVariant::PreconditionsV2 => Box::new(
58426                ReadXdrIter::<_, PreconditionsV2>::new(&mut r.inner, r.limits.clone())
58427                    .map(|r| r.map(|t| Self::PreconditionsV2(Box::new(t)))),
58428            ),
58429            TypeVariant::PreconditionType => Box::new(
58430                ReadXdrIter::<_, PreconditionType>::new(&mut r.inner, r.limits.clone())
58431                    .map(|r| r.map(|t| Self::PreconditionType(Box::new(t)))),
58432            ),
58433            TypeVariant::Preconditions => Box::new(
58434                ReadXdrIter::<_, Preconditions>::new(&mut r.inner, r.limits.clone())
58435                    .map(|r| r.map(|t| Self::Preconditions(Box::new(t)))),
58436            ),
58437            TypeVariant::LedgerFootprint => Box::new(
58438                ReadXdrIter::<_, LedgerFootprint>::new(&mut r.inner, r.limits.clone())
58439                    .map(|r| r.map(|t| Self::LedgerFootprint(Box::new(t)))),
58440            ),
58441            TypeVariant::SorobanResources => Box::new(
58442                ReadXdrIter::<_, SorobanResources>::new(&mut r.inner, r.limits.clone())
58443                    .map(|r| r.map(|t| Self::SorobanResources(Box::new(t)))),
58444            ),
58445            TypeVariant::SorobanResourcesExtV0 => Box::new(
58446                ReadXdrIter::<_, SorobanResourcesExtV0>::new(&mut r.inner, r.limits.clone())
58447                    .map(|r| r.map(|t| Self::SorobanResourcesExtV0(Box::new(t)))),
58448            ),
58449            TypeVariant::SorobanTransactionData => Box::new(
58450                ReadXdrIter::<_, SorobanTransactionData>::new(&mut r.inner, r.limits.clone())
58451                    .map(|r| r.map(|t| Self::SorobanTransactionData(Box::new(t)))),
58452            ),
58453            TypeVariant::SorobanTransactionDataExt => Box::new(
58454                ReadXdrIter::<_, SorobanTransactionDataExt>::new(&mut r.inner, r.limits.clone())
58455                    .map(|r| r.map(|t| Self::SorobanTransactionDataExt(Box::new(t)))),
58456            ),
58457            TypeVariant::TransactionV0 => Box::new(
58458                ReadXdrIter::<_, TransactionV0>::new(&mut r.inner, r.limits.clone())
58459                    .map(|r| r.map(|t| Self::TransactionV0(Box::new(t)))),
58460            ),
58461            TypeVariant::TransactionV0Ext => Box::new(
58462                ReadXdrIter::<_, TransactionV0Ext>::new(&mut r.inner, r.limits.clone())
58463                    .map(|r| r.map(|t| Self::TransactionV0Ext(Box::new(t)))),
58464            ),
58465            TypeVariant::TransactionV0Envelope => Box::new(
58466                ReadXdrIter::<_, TransactionV0Envelope>::new(&mut r.inner, r.limits.clone())
58467                    .map(|r| r.map(|t| Self::TransactionV0Envelope(Box::new(t)))),
58468            ),
58469            TypeVariant::Transaction => Box::new(
58470                ReadXdrIter::<_, Transaction>::new(&mut r.inner, r.limits.clone())
58471                    .map(|r| r.map(|t| Self::Transaction(Box::new(t)))),
58472            ),
58473            TypeVariant::TransactionExt => Box::new(
58474                ReadXdrIter::<_, TransactionExt>::new(&mut r.inner, r.limits.clone())
58475                    .map(|r| r.map(|t| Self::TransactionExt(Box::new(t)))),
58476            ),
58477            TypeVariant::TransactionV1Envelope => Box::new(
58478                ReadXdrIter::<_, TransactionV1Envelope>::new(&mut r.inner, r.limits.clone())
58479                    .map(|r| r.map(|t| Self::TransactionV1Envelope(Box::new(t)))),
58480            ),
58481            TypeVariant::FeeBumpTransaction => Box::new(
58482                ReadXdrIter::<_, FeeBumpTransaction>::new(&mut r.inner, r.limits.clone())
58483                    .map(|r| r.map(|t| Self::FeeBumpTransaction(Box::new(t)))),
58484            ),
58485            TypeVariant::FeeBumpTransactionInnerTx => Box::new(
58486                ReadXdrIter::<_, FeeBumpTransactionInnerTx>::new(&mut r.inner, r.limits.clone())
58487                    .map(|r| r.map(|t| Self::FeeBumpTransactionInnerTx(Box::new(t)))),
58488            ),
58489            TypeVariant::FeeBumpTransactionExt => Box::new(
58490                ReadXdrIter::<_, FeeBumpTransactionExt>::new(&mut r.inner, r.limits.clone())
58491                    .map(|r| r.map(|t| Self::FeeBumpTransactionExt(Box::new(t)))),
58492            ),
58493            TypeVariant::FeeBumpTransactionEnvelope => Box::new(
58494                ReadXdrIter::<_, FeeBumpTransactionEnvelope>::new(&mut r.inner, r.limits.clone())
58495                    .map(|r| r.map(|t| Self::FeeBumpTransactionEnvelope(Box::new(t)))),
58496            ),
58497            TypeVariant::TransactionEnvelope => Box::new(
58498                ReadXdrIter::<_, TransactionEnvelope>::new(&mut r.inner, r.limits.clone())
58499                    .map(|r| r.map(|t| Self::TransactionEnvelope(Box::new(t)))),
58500            ),
58501            TypeVariant::TransactionSignaturePayload => Box::new(
58502                ReadXdrIter::<_, TransactionSignaturePayload>::new(&mut r.inner, r.limits.clone())
58503                    .map(|r| r.map(|t| Self::TransactionSignaturePayload(Box::new(t)))),
58504            ),
58505            TypeVariant::TransactionSignaturePayloadTaggedTransaction => Box::new(
58506                ReadXdrIter::<_, TransactionSignaturePayloadTaggedTransaction>::new(
58507                    &mut r.inner,
58508                    r.limits.clone(),
58509                )
58510                .map(|r| {
58511                    r.map(|t| Self::TransactionSignaturePayloadTaggedTransaction(Box::new(t)))
58512                }),
58513            ),
58514            TypeVariant::ClaimAtomType => Box::new(
58515                ReadXdrIter::<_, ClaimAtomType>::new(&mut r.inner, r.limits.clone())
58516                    .map(|r| r.map(|t| Self::ClaimAtomType(Box::new(t)))),
58517            ),
58518            TypeVariant::ClaimOfferAtomV0 => Box::new(
58519                ReadXdrIter::<_, ClaimOfferAtomV0>::new(&mut r.inner, r.limits.clone())
58520                    .map(|r| r.map(|t| Self::ClaimOfferAtomV0(Box::new(t)))),
58521            ),
58522            TypeVariant::ClaimOfferAtom => Box::new(
58523                ReadXdrIter::<_, ClaimOfferAtom>::new(&mut r.inner, r.limits.clone())
58524                    .map(|r| r.map(|t| Self::ClaimOfferAtom(Box::new(t)))),
58525            ),
58526            TypeVariant::ClaimLiquidityAtom => Box::new(
58527                ReadXdrIter::<_, ClaimLiquidityAtom>::new(&mut r.inner, r.limits.clone())
58528                    .map(|r| r.map(|t| Self::ClaimLiquidityAtom(Box::new(t)))),
58529            ),
58530            TypeVariant::ClaimAtom => Box::new(
58531                ReadXdrIter::<_, ClaimAtom>::new(&mut r.inner, r.limits.clone())
58532                    .map(|r| r.map(|t| Self::ClaimAtom(Box::new(t)))),
58533            ),
58534            TypeVariant::CreateAccountResultCode => Box::new(
58535                ReadXdrIter::<_, CreateAccountResultCode>::new(&mut r.inner, r.limits.clone())
58536                    .map(|r| r.map(|t| Self::CreateAccountResultCode(Box::new(t)))),
58537            ),
58538            TypeVariant::CreateAccountResult => Box::new(
58539                ReadXdrIter::<_, CreateAccountResult>::new(&mut r.inner, r.limits.clone())
58540                    .map(|r| r.map(|t| Self::CreateAccountResult(Box::new(t)))),
58541            ),
58542            TypeVariant::PaymentResultCode => Box::new(
58543                ReadXdrIter::<_, PaymentResultCode>::new(&mut r.inner, r.limits.clone())
58544                    .map(|r| r.map(|t| Self::PaymentResultCode(Box::new(t)))),
58545            ),
58546            TypeVariant::PaymentResult => Box::new(
58547                ReadXdrIter::<_, PaymentResult>::new(&mut r.inner, r.limits.clone())
58548                    .map(|r| r.map(|t| Self::PaymentResult(Box::new(t)))),
58549            ),
58550            TypeVariant::PathPaymentStrictReceiveResultCode => Box::new(
58551                ReadXdrIter::<_, PathPaymentStrictReceiveResultCode>::new(
58552                    &mut r.inner,
58553                    r.limits.clone(),
58554                )
58555                .map(|r| r.map(|t| Self::PathPaymentStrictReceiveResultCode(Box::new(t)))),
58556            ),
58557            TypeVariant::SimplePaymentResult => Box::new(
58558                ReadXdrIter::<_, SimplePaymentResult>::new(&mut r.inner, r.limits.clone())
58559                    .map(|r| r.map(|t| Self::SimplePaymentResult(Box::new(t)))),
58560            ),
58561            TypeVariant::PathPaymentStrictReceiveResult => Box::new(
58562                ReadXdrIter::<_, PathPaymentStrictReceiveResult>::new(
58563                    &mut r.inner,
58564                    r.limits.clone(),
58565                )
58566                .map(|r| r.map(|t| Self::PathPaymentStrictReceiveResult(Box::new(t)))),
58567            ),
58568            TypeVariant::PathPaymentStrictReceiveResultSuccess => Box::new(
58569                ReadXdrIter::<_, PathPaymentStrictReceiveResultSuccess>::new(
58570                    &mut r.inner,
58571                    r.limits.clone(),
58572                )
58573                .map(|r| r.map(|t| Self::PathPaymentStrictReceiveResultSuccess(Box::new(t)))),
58574            ),
58575            TypeVariant::PathPaymentStrictSendResultCode => Box::new(
58576                ReadXdrIter::<_, PathPaymentStrictSendResultCode>::new(
58577                    &mut r.inner,
58578                    r.limits.clone(),
58579                )
58580                .map(|r| r.map(|t| Self::PathPaymentStrictSendResultCode(Box::new(t)))),
58581            ),
58582            TypeVariant::PathPaymentStrictSendResult => Box::new(
58583                ReadXdrIter::<_, PathPaymentStrictSendResult>::new(&mut r.inner, r.limits.clone())
58584                    .map(|r| r.map(|t| Self::PathPaymentStrictSendResult(Box::new(t)))),
58585            ),
58586            TypeVariant::PathPaymentStrictSendResultSuccess => Box::new(
58587                ReadXdrIter::<_, PathPaymentStrictSendResultSuccess>::new(
58588                    &mut r.inner,
58589                    r.limits.clone(),
58590                )
58591                .map(|r| r.map(|t| Self::PathPaymentStrictSendResultSuccess(Box::new(t)))),
58592            ),
58593            TypeVariant::ManageSellOfferResultCode => Box::new(
58594                ReadXdrIter::<_, ManageSellOfferResultCode>::new(&mut r.inner, r.limits.clone())
58595                    .map(|r| r.map(|t| Self::ManageSellOfferResultCode(Box::new(t)))),
58596            ),
58597            TypeVariant::ManageOfferEffect => Box::new(
58598                ReadXdrIter::<_, ManageOfferEffect>::new(&mut r.inner, r.limits.clone())
58599                    .map(|r| r.map(|t| Self::ManageOfferEffect(Box::new(t)))),
58600            ),
58601            TypeVariant::ManageOfferSuccessResult => Box::new(
58602                ReadXdrIter::<_, ManageOfferSuccessResult>::new(&mut r.inner, r.limits.clone())
58603                    .map(|r| r.map(|t| Self::ManageOfferSuccessResult(Box::new(t)))),
58604            ),
58605            TypeVariant::ManageOfferSuccessResultOffer => Box::new(
58606                ReadXdrIter::<_, ManageOfferSuccessResultOffer>::new(
58607                    &mut r.inner,
58608                    r.limits.clone(),
58609                )
58610                .map(|r| r.map(|t| Self::ManageOfferSuccessResultOffer(Box::new(t)))),
58611            ),
58612            TypeVariant::ManageSellOfferResult => Box::new(
58613                ReadXdrIter::<_, ManageSellOfferResult>::new(&mut r.inner, r.limits.clone())
58614                    .map(|r| r.map(|t| Self::ManageSellOfferResult(Box::new(t)))),
58615            ),
58616            TypeVariant::ManageBuyOfferResultCode => Box::new(
58617                ReadXdrIter::<_, ManageBuyOfferResultCode>::new(&mut r.inner, r.limits.clone())
58618                    .map(|r| r.map(|t| Self::ManageBuyOfferResultCode(Box::new(t)))),
58619            ),
58620            TypeVariant::ManageBuyOfferResult => Box::new(
58621                ReadXdrIter::<_, ManageBuyOfferResult>::new(&mut r.inner, r.limits.clone())
58622                    .map(|r| r.map(|t| Self::ManageBuyOfferResult(Box::new(t)))),
58623            ),
58624            TypeVariant::SetOptionsResultCode => Box::new(
58625                ReadXdrIter::<_, SetOptionsResultCode>::new(&mut r.inner, r.limits.clone())
58626                    .map(|r| r.map(|t| Self::SetOptionsResultCode(Box::new(t)))),
58627            ),
58628            TypeVariant::SetOptionsResult => Box::new(
58629                ReadXdrIter::<_, SetOptionsResult>::new(&mut r.inner, r.limits.clone())
58630                    .map(|r| r.map(|t| Self::SetOptionsResult(Box::new(t)))),
58631            ),
58632            TypeVariant::ChangeTrustResultCode => Box::new(
58633                ReadXdrIter::<_, ChangeTrustResultCode>::new(&mut r.inner, r.limits.clone())
58634                    .map(|r| r.map(|t| Self::ChangeTrustResultCode(Box::new(t)))),
58635            ),
58636            TypeVariant::ChangeTrustResult => Box::new(
58637                ReadXdrIter::<_, ChangeTrustResult>::new(&mut r.inner, r.limits.clone())
58638                    .map(|r| r.map(|t| Self::ChangeTrustResult(Box::new(t)))),
58639            ),
58640            TypeVariant::AllowTrustResultCode => Box::new(
58641                ReadXdrIter::<_, AllowTrustResultCode>::new(&mut r.inner, r.limits.clone())
58642                    .map(|r| r.map(|t| Self::AllowTrustResultCode(Box::new(t)))),
58643            ),
58644            TypeVariant::AllowTrustResult => Box::new(
58645                ReadXdrIter::<_, AllowTrustResult>::new(&mut r.inner, r.limits.clone())
58646                    .map(|r| r.map(|t| Self::AllowTrustResult(Box::new(t)))),
58647            ),
58648            TypeVariant::AccountMergeResultCode => Box::new(
58649                ReadXdrIter::<_, AccountMergeResultCode>::new(&mut r.inner, r.limits.clone())
58650                    .map(|r| r.map(|t| Self::AccountMergeResultCode(Box::new(t)))),
58651            ),
58652            TypeVariant::AccountMergeResult => Box::new(
58653                ReadXdrIter::<_, AccountMergeResult>::new(&mut r.inner, r.limits.clone())
58654                    .map(|r| r.map(|t| Self::AccountMergeResult(Box::new(t)))),
58655            ),
58656            TypeVariant::InflationResultCode => Box::new(
58657                ReadXdrIter::<_, InflationResultCode>::new(&mut r.inner, r.limits.clone())
58658                    .map(|r| r.map(|t| Self::InflationResultCode(Box::new(t)))),
58659            ),
58660            TypeVariant::InflationPayout => Box::new(
58661                ReadXdrIter::<_, InflationPayout>::new(&mut r.inner, r.limits.clone())
58662                    .map(|r| r.map(|t| Self::InflationPayout(Box::new(t)))),
58663            ),
58664            TypeVariant::InflationResult => Box::new(
58665                ReadXdrIter::<_, InflationResult>::new(&mut r.inner, r.limits.clone())
58666                    .map(|r| r.map(|t| Self::InflationResult(Box::new(t)))),
58667            ),
58668            TypeVariant::ManageDataResultCode => Box::new(
58669                ReadXdrIter::<_, ManageDataResultCode>::new(&mut r.inner, r.limits.clone())
58670                    .map(|r| r.map(|t| Self::ManageDataResultCode(Box::new(t)))),
58671            ),
58672            TypeVariant::ManageDataResult => Box::new(
58673                ReadXdrIter::<_, ManageDataResult>::new(&mut r.inner, r.limits.clone())
58674                    .map(|r| r.map(|t| Self::ManageDataResult(Box::new(t)))),
58675            ),
58676            TypeVariant::BumpSequenceResultCode => Box::new(
58677                ReadXdrIter::<_, BumpSequenceResultCode>::new(&mut r.inner, r.limits.clone())
58678                    .map(|r| r.map(|t| Self::BumpSequenceResultCode(Box::new(t)))),
58679            ),
58680            TypeVariant::BumpSequenceResult => Box::new(
58681                ReadXdrIter::<_, BumpSequenceResult>::new(&mut r.inner, r.limits.clone())
58682                    .map(|r| r.map(|t| Self::BumpSequenceResult(Box::new(t)))),
58683            ),
58684            TypeVariant::CreateClaimableBalanceResultCode => Box::new(
58685                ReadXdrIter::<_, CreateClaimableBalanceResultCode>::new(
58686                    &mut r.inner,
58687                    r.limits.clone(),
58688                )
58689                .map(|r| r.map(|t| Self::CreateClaimableBalanceResultCode(Box::new(t)))),
58690            ),
58691            TypeVariant::CreateClaimableBalanceResult => Box::new(
58692                ReadXdrIter::<_, CreateClaimableBalanceResult>::new(&mut r.inner, r.limits.clone())
58693                    .map(|r| r.map(|t| Self::CreateClaimableBalanceResult(Box::new(t)))),
58694            ),
58695            TypeVariant::ClaimClaimableBalanceResultCode => Box::new(
58696                ReadXdrIter::<_, ClaimClaimableBalanceResultCode>::new(
58697                    &mut r.inner,
58698                    r.limits.clone(),
58699                )
58700                .map(|r| r.map(|t| Self::ClaimClaimableBalanceResultCode(Box::new(t)))),
58701            ),
58702            TypeVariant::ClaimClaimableBalanceResult => Box::new(
58703                ReadXdrIter::<_, ClaimClaimableBalanceResult>::new(&mut r.inner, r.limits.clone())
58704                    .map(|r| r.map(|t| Self::ClaimClaimableBalanceResult(Box::new(t)))),
58705            ),
58706            TypeVariant::BeginSponsoringFutureReservesResultCode => Box::new(
58707                ReadXdrIter::<_, BeginSponsoringFutureReservesResultCode>::new(
58708                    &mut r.inner,
58709                    r.limits.clone(),
58710                )
58711                .map(|r| r.map(|t| Self::BeginSponsoringFutureReservesResultCode(Box::new(t)))),
58712            ),
58713            TypeVariant::BeginSponsoringFutureReservesResult => Box::new(
58714                ReadXdrIter::<_, BeginSponsoringFutureReservesResult>::new(
58715                    &mut r.inner,
58716                    r.limits.clone(),
58717                )
58718                .map(|r| r.map(|t| Self::BeginSponsoringFutureReservesResult(Box::new(t)))),
58719            ),
58720            TypeVariant::EndSponsoringFutureReservesResultCode => Box::new(
58721                ReadXdrIter::<_, EndSponsoringFutureReservesResultCode>::new(
58722                    &mut r.inner,
58723                    r.limits.clone(),
58724                )
58725                .map(|r| r.map(|t| Self::EndSponsoringFutureReservesResultCode(Box::new(t)))),
58726            ),
58727            TypeVariant::EndSponsoringFutureReservesResult => Box::new(
58728                ReadXdrIter::<_, EndSponsoringFutureReservesResult>::new(
58729                    &mut r.inner,
58730                    r.limits.clone(),
58731                )
58732                .map(|r| r.map(|t| Self::EndSponsoringFutureReservesResult(Box::new(t)))),
58733            ),
58734            TypeVariant::RevokeSponsorshipResultCode => Box::new(
58735                ReadXdrIter::<_, RevokeSponsorshipResultCode>::new(&mut r.inner, r.limits.clone())
58736                    .map(|r| r.map(|t| Self::RevokeSponsorshipResultCode(Box::new(t)))),
58737            ),
58738            TypeVariant::RevokeSponsorshipResult => Box::new(
58739                ReadXdrIter::<_, RevokeSponsorshipResult>::new(&mut r.inner, r.limits.clone())
58740                    .map(|r| r.map(|t| Self::RevokeSponsorshipResult(Box::new(t)))),
58741            ),
58742            TypeVariant::ClawbackResultCode => Box::new(
58743                ReadXdrIter::<_, ClawbackResultCode>::new(&mut r.inner, r.limits.clone())
58744                    .map(|r| r.map(|t| Self::ClawbackResultCode(Box::new(t)))),
58745            ),
58746            TypeVariant::ClawbackResult => Box::new(
58747                ReadXdrIter::<_, ClawbackResult>::new(&mut r.inner, r.limits.clone())
58748                    .map(|r| r.map(|t| Self::ClawbackResult(Box::new(t)))),
58749            ),
58750            TypeVariant::ClawbackClaimableBalanceResultCode => Box::new(
58751                ReadXdrIter::<_, ClawbackClaimableBalanceResultCode>::new(
58752                    &mut r.inner,
58753                    r.limits.clone(),
58754                )
58755                .map(|r| r.map(|t| Self::ClawbackClaimableBalanceResultCode(Box::new(t)))),
58756            ),
58757            TypeVariant::ClawbackClaimableBalanceResult => Box::new(
58758                ReadXdrIter::<_, ClawbackClaimableBalanceResult>::new(
58759                    &mut r.inner,
58760                    r.limits.clone(),
58761                )
58762                .map(|r| r.map(|t| Self::ClawbackClaimableBalanceResult(Box::new(t)))),
58763            ),
58764            TypeVariant::SetTrustLineFlagsResultCode => Box::new(
58765                ReadXdrIter::<_, SetTrustLineFlagsResultCode>::new(&mut r.inner, r.limits.clone())
58766                    .map(|r| r.map(|t| Self::SetTrustLineFlagsResultCode(Box::new(t)))),
58767            ),
58768            TypeVariant::SetTrustLineFlagsResult => Box::new(
58769                ReadXdrIter::<_, SetTrustLineFlagsResult>::new(&mut r.inner, r.limits.clone())
58770                    .map(|r| r.map(|t| Self::SetTrustLineFlagsResult(Box::new(t)))),
58771            ),
58772            TypeVariant::LiquidityPoolDepositResultCode => Box::new(
58773                ReadXdrIter::<_, LiquidityPoolDepositResultCode>::new(
58774                    &mut r.inner,
58775                    r.limits.clone(),
58776                )
58777                .map(|r| r.map(|t| Self::LiquidityPoolDepositResultCode(Box::new(t)))),
58778            ),
58779            TypeVariant::LiquidityPoolDepositResult => Box::new(
58780                ReadXdrIter::<_, LiquidityPoolDepositResult>::new(&mut r.inner, r.limits.clone())
58781                    .map(|r| r.map(|t| Self::LiquidityPoolDepositResult(Box::new(t)))),
58782            ),
58783            TypeVariant::LiquidityPoolWithdrawResultCode => Box::new(
58784                ReadXdrIter::<_, LiquidityPoolWithdrawResultCode>::new(
58785                    &mut r.inner,
58786                    r.limits.clone(),
58787                )
58788                .map(|r| r.map(|t| Self::LiquidityPoolWithdrawResultCode(Box::new(t)))),
58789            ),
58790            TypeVariant::LiquidityPoolWithdrawResult => Box::new(
58791                ReadXdrIter::<_, LiquidityPoolWithdrawResult>::new(&mut r.inner, r.limits.clone())
58792                    .map(|r| r.map(|t| Self::LiquidityPoolWithdrawResult(Box::new(t)))),
58793            ),
58794            TypeVariant::InvokeHostFunctionResultCode => Box::new(
58795                ReadXdrIter::<_, InvokeHostFunctionResultCode>::new(&mut r.inner, r.limits.clone())
58796                    .map(|r| r.map(|t| Self::InvokeHostFunctionResultCode(Box::new(t)))),
58797            ),
58798            TypeVariant::InvokeHostFunctionResult => Box::new(
58799                ReadXdrIter::<_, InvokeHostFunctionResult>::new(&mut r.inner, r.limits.clone())
58800                    .map(|r| r.map(|t| Self::InvokeHostFunctionResult(Box::new(t)))),
58801            ),
58802            TypeVariant::ExtendFootprintTtlResultCode => Box::new(
58803                ReadXdrIter::<_, ExtendFootprintTtlResultCode>::new(&mut r.inner, r.limits.clone())
58804                    .map(|r| r.map(|t| Self::ExtendFootprintTtlResultCode(Box::new(t)))),
58805            ),
58806            TypeVariant::ExtendFootprintTtlResult => Box::new(
58807                ReadXdrIter::<_, ExtendFootprintTtlResult>::new(&mut r.inner, r.limits.clone())
58808                    .map(|r| r.map(|t| Self::ExtendFootprintTtlResult(Box::new(t)))),
58809            ),
58810            TypeVariant::RestoreFootprintResultCode => Box::new(
58811                ReadXdrIter::<_, RestoreFootprintResultCode>::new(&mut r.inner, r.limits.clone())
58812                    .map(|r| r.map(|t| Self::RestoreFootprintResultCode(Box::new(t)))),
58813            ),
58814            TypeVariant::RestoreFootprintResult => Box::new(
58815                ReadXdrIter::<_, RestoreFootprintResult>::new(&mut r.inner, r.limits.clone())
58816                    .map(|r| r.map(|t| Self::RestoreFootprintResult(Box::new(t)))),
58817            ),
58818            TypeVariant::OperationResultCode => Box::new(
58819                ReadXdrIter::<_, OperationResultCode>::new(&mut r.inner, r.limits.clone())
58820                    .map(|r| r.map(|t| Self::OperationResultCode(Box::new(t)))),
58821            ),
58822            TypeVariant::OperationResult => Box::new(
58823                ReadXdrIter::<_, OperationResult>::new(&mut r.inner, r.limits.clone())
58824                    .map(|r| r.map(|t| Self::OperationResult(Box::new(t)))),
58825            ),
58826            TypeVariant::OperationResultTr => Box::new(
58827                ReadXdrIter::<_, OperationResultTr>::new(&mut r.inner, r.limits.clone())
58828                    .map(|r| r.map(|t| Self::OperationResultTr(Box::new(t)))),
58829            ),
58830            TypeVariant::TransactionResultCode => Box::new(
58831                ReadXdrIter::<_, TransactionResultCode>::new(&mut r.inner, r.limits.clone())
58832                    .map(|r| r.map(|t| Self::TransactionResultCode(Box::new(t)))),
58833            ),
58834            TypeVariant::InnerTransactionResult => Box::new(
58835                ReadXdrIter::<_, InnerTransactionResult>::new(&mut r.inner, r.limits.clone())
58836                    .map(|r| r.map(|t| Self::InnerTransactionResult(Box::new(t)))),
58837            ),
58838            TypeVariant::InnerTransactionResultResult => Box::new(
58839                ReadXdrIter::<_, InnerTransactionResultResult>::new(&mut r.inner, r.limits.clone())
58840                    .map(|r| r.map(|t| Self::InnerTransactionResultResult(Box::new(t)))),
58841            ),
58842            TypeVariant::InnerTransactionResultExt => Box::new(
58843                ReadXdrIter::<_, InnerTransactionResultExt>::new(&mut r.inner, r.limits.clone())
58844                    .map(|r| r.map(|t| Self::InnerTransactionResultExt(Box::new(t)))),
58845            ),
58846            TypeVariant::InnerTransactionResultPair => Box::new(
58847                ReadXdrIter::<_, InnerTransactionResultPair>::new(&mut r.inner, r.limits.clone())
58848                    .map(|r| r.map(|t| Self::InnerTransactionResultPair(Box::new(t)))),
58849            ),
58850            TypeVariant::TransactionResult => Box::new(
58851                ReadXdrIter::<_, TransactionResult>::new(&mut r.inner, r.limits.clone())
58852                    .map(|r| r.map(|t| Self::TransactionResult(Box::new(t)))),
58853            ),
58854            TypeVariant::TransactionResultResult => Box::new(
58855                ReadXdrIter::<_, TransactionResultResult>::new(&mut r.inner, r.limits.clone())
58856                    .map(|r| r.map(|t| Self::TransactionResultResult(Box::new(t)))),
58857            ),
58858            TypeVariant::TransactionResultExt => Box::new(
58859                ReadXdrIter::<_, TransactionResultExt>::new(&mut r.inner, r.limits.clone())
58860                    .map(|r| r.map(|t| Self::TransactionResultExt(Box::new(t)))),
58861            ),
58862            TypeVariant::Hash => Box::new(
58863                ReadXdrIter::<_, Hash>::new(&mut r.inner, r.limits.clone())
58864                    .map(|r| r.map(|t| Self::Hash(Box::new(t)))),
58865            ),
58866            TypeVariant::Uint256 => Box::new(
58867                ReadXdrIter::<_, Uint256>::new(&mut r.inner, r.limits.clone())
58868                    .map(|r| r.map(|t| Self::Uint256(Box::new(t)))),
58869            ),
58870            TypeVariant::Uint32 => Box::new(
58871                ReadXdrIter::<_, Uint32>::new(&mut r.inner, r.limits.clone())
58872                    .map(|r| r.map(|t| Self::Uint32(Box::new(t)))),
58873            ),
58874            TypeVariant::Int32 => Box::new(
58875                ReadXdrIter::<_, Int32>::new(&mut r.inner, r.limits.clone())
58876                    .map(|r| r.map(|t| Self::Int32(Box::new(t)))),
58877            ),
58878            TypeVariant::Uint64 => Box::new(
58879                ReadXdrIter::<_, Uint64>::new(&mut r.inner, r.limits.clone())
58880                    .map(|r| r.map(|t| Self::Uint64(Box::new(t)))),
58881            ),
58882            TypeVariant::Int64 => Box::new(
58883                ReadXdrIter::<_, Int64>::new(&mut r.inner, r.limits.clone())
58884                    .map(|r| r.map(|t| Self::Int64(Box::new(t)))),
58885            ),
58886            TypeVariant::TimePoint => Box::new(
58887                ReadXdrIter::<_, TimePoint>::new(&mut r.inner, r.limits.clone())
58888                    .map(|r| r.map(|t| Self::TimePoint(Box::new(t)))),
58889            ),
58890            TypeVariant::Duration => Box::new(
58891                ReadXdrIter::<_, Duration>::new(&mut r.inner, r.limits.clone())
58892                    .map(|r| r.map(|t| Self::Duration(Box::new(t)))),
58893            ),
58894            TypeVariant::ExtensionPoint => Box::new(
58895                ReadXdrIter::<_, ExtensionPoint>::new(&mut r.inner, r.limits.clone())
58896                    .map(|r| r.map(|t| Self::ExtensionPoint(Box::new(t)))),
58897            ),
58898            TypeVariant::CryptoKeyType => Box::new(
58899                ReadXdrIter::<_, CryptoKeyType>::new(&mut r.inner, r.limits.clone())
58900                    .map(|r| r.map(|t| Self::CryptoKeyType(Box::new(t)))),
58901            ),
58902            TypeVariant::PublicKeyType => Box::new(
58903                ReadXdrIter::<_, PublicKeyType>::new(&mut r.inner, r.limits.clone())
58904                    .map(|r| r.map(|t| Self::PublicKeyType(Box::new(t)))),
58905            ),
58906            TypeVariant::SignerKeyType => Box::new(
58907                ReadXdrIter::<_, SignerKeyType>::new(&mut r.inner, r.limits.clone())
58908                    .map(|r| r.map(|t| Self::SignerKeyType(Box::new(t)))),
58909            ),
58910            TypeVariant::PublicKey => Box::new(
58911                ReadXdrIter::<_, PublicKey>::new(&mut r.inner, r.limits.clone())
58912                    .map(|r| r.map(|t| Self::PublicKey(Box::new(t)))),
58913            ),
58914            TypeVariant::SignerKey => Box::new(
58915                ReadXdrIter::<_, SignerKey>::new(&mut r.inner, r.limits.clone())
58916                    .map(|r| r.map(|t| Self::SignerKey(Box::new(t)))),
58917            ),
58918            TypeVariant::SignerKeyEd25519SignedPayload => Box::new(
58919                ReadXdrIter::<_, SignerKeyEd25519SignedPayload>::new(
58920                    &mut r.inner,
58921                    r.limits.clone(),
58922                )
58923                .map(|r| r.map(|t| Self::SignerKeyEd25519SignedPayload(Box::new(t)))),
58924            ),
58925            TypeVariant::Signature => Box::new(
58926                ReadXdrIter::<_, Signature>::new(&mut r.inner, r.limits.clone())
58927                    .map(|r| r.map(|t| Self::Signature(Box::new(t)))),
58928            ),
58929            TypeVariant::SignatureHint => Box::new(
58930                ReadXdrIter::<_, SignatureHint>::new(&mut r.inner, r.limits.clone())
58931                    .map(|r| r.map(|t| Self::SignatureHint(Box::new(t)))),
58932            ),
58933            TypeVariant::NodeId => Box::new(
58934                ReadXdrIter::<_, NodeId>::new(&mut r.inner, r.limits.clone())
58935                    .map(|r| r.map(|t| Self::NodeId(Box::new(t)))),
58936            ),
58937            TypeVariant::AccountId => Box::new(
58938                ReadXdrIter::<_, AccountId>::new(&mut r.inner, r.limits.clone())
58939                    .map(|r| r.map(|t| Self::AccountId(Box::new(t)))),
58940            ),
58941            TypeVariant::ContractId => Box::new(
58942                ReadXdrIter::<_, ContractId>::new(&mut r.inner, r.limits.clone())
58943                    .map(|r| r.map(|t| Self::ContractId(Box::new(t)))),
58944            ),
58945            TypeVariant::Curve25519Secret => Box::new(
58946                ReadXdrIter::<_, Curve25519Secret>::new(&mut r.inner, r.limits.clone())
58947                    .map(|r| r.map(|t| Self::Curve25519Secret(Box::new(t)))),
58948            ),
58949            TypeVariant::Curve25519Public => Box::new(
58950                ReadXdrIter::<_, Curve25519Public>::new(&mut r.inner, r.limits.clone())
58951                    .map(|r| r.map(|t| Self::Curve25519Public(Box::new(t)))),
58952            ),
58953            TypeVariant::HmacSha256Key => Box::new(
58954                ReadXdrIter::<_, HmacSha256Key>::new(&mut r.inner, r.limits.clone())
58955                    .map(|r| r.map(|t| Self::HmacSha256Key(Box::new(t)))),
58956            ),
58957            TypeVariant::HmacSha256Mac => Box::new(
58958                ReadXdrIter::<_, HmacSha256Mac>::new(&mut r.inner, r.limits.clone())
58959                    .map(|r| r.map(|t| Self::HmacSha256Mac(Box::new(t)))),
58960            ),
58961            TypeVariant::ShortHashSeed => Box::new(
58962                ReadXdrIter::<_, ShortHashSeed>::new(&mut r.inner, r.limits.clone())
58963                    .map(|r| r.map(|t| Self::ShortHashSeed(Box::new(t)))),
58964            ),
58965            TypeVariant::BinaryFuseFilterType => Box::new(
58966                ReadXdrIter::<_, BinaryFuseFilterType>::new(&mut r.inner, r.limits.clone())
58967                    .map(|r| r.map(|t| Self::BinaryFuseFilterType(Box::new(t)))),
58968            ),
58969            TypeVariant::SerializedBinaryFuseFilter => Box::new(
58970                ReadXdrIter::<_, SerializedBinaryFuseFilter>::new(&mut r.inner, r.limits.clone())
58971                    .map(|r| r.map(|t| Self::SerializedBinaryFuseFilter(Box::new(t)))),
58972            ),
58973            TypeVariant::PoolId => Box::new(
58974                ReadXdrIter::<_, PoolId>::new(&mut r.inner, r.limits.clone())
58975                    .map(|r| r.map(|t| Self::PoolId(Box::new(t)))),
58976            ),
58977            TypeVariant::ClaimableBalanceIdType => Box::new(
58978                ReadXdrIter::<_, ClaimableBalanceIdType>::new(&mut r.inner, r.limits.clone())
58979                    .map(|r| r.map(|t| Self::ClaimableBalanceIdType(Box::new(t)))),
58980            ),
58981            TypeVariant::ClaimableBalanceId => Box::new(
58982                ReadXdrIter::<_, ClaimableBalanceId>::new(&mut r.inner, r.limits.clone())
58983                    .map(|r| r.map(|t| Self::ClaimableBalanceId(Box::new(t)))),
58984            ),
58985        }
58986    }
58987
58988    #[cfg(feature = "std")]
58989    #[allow(clippy::too_many_lines)]
58990    pub fn read_xdr_framed_iter<R: Read>(
58991        v: TypeVariant,
58992        r: &mut Limited<R>,
58993    ) -> Box<dyn Iterator<Item = Result<Self, Error>> + '_> {
58994        match v {
58995            TypeVariant::Value => Box::new(
58996                ReadXdrIter::<_, Frame<Value>>::new(&mut r.inner, r.limits.clone())
58997                    .map(|r| r.map(|t| Self::Value(Box::new(t.0)))),
58998            ),
58999            TypeVariant::ScpBallot => Box::new(
59000                ReadXdrIter::<_, Frame<ScpBallot>>::new(&mut r.inner, r.limits.clone())
59001                    .map(|r| r.map(|t| Self::ScpBallot(Box::new(t.0)))),
59002            ),
59003            TypeVariant::ScpStatementType => Box::new(
59004                ReadXdrIter::<_, Frame<ScpStatementType>>::new(&mut r.inner, r.limits.clone())
59005                    .map(|r| r.map(|t| Self::ScpStatementType(Box::new(t.0)))),
59006            ),
59007            TypeVariant::ScpNomination => Box::new(
59008                ReadXdrIter::<_, Frame<ScpNomination>>::new(&mut r.inner, r.limits.clone())
59009                    .map(|r| r.map(|t| Self::ScpNomination(Box::new(t.0)))),
59010            ),
59011            TypeVariant::ScpStatement => Box::new(
59012                ReadXdrIter::<_, Frame<ScpStatement>>::new(&mut r.inner, r.limits.clone())
59013                    .map(|r| r.map(|t| Self::ScpStatement(Box::new(t.0)))),
59014            ),
59015            TypeVariant::ScpStatementPledges => Box::new(
59016                ReadXdrIter::<_, Frame<ScpStatementPledges>>::new(&mut r.inner, r.limits.clone())
59017                    .map(|r| r.map(|t| Self::ScpStatementPledges(Box::new(t.0)))),
59018            ),
59019            TypeVariant::ScpStatementPrepare => Box::new(
59020                ReadXdrIter::<_, Frame<ScpStatementPrepare>>::new(&mut r.inner, r.limits.clone())
59021                    .map(|r| r.map(|t| Self::ScpStatementPrepare(Box::new(t.0)))),
59022            ),
59023            TypeVariant::ScpStatementConfirm => Box::new(
59024                ReadXdrIter::<_, Frame<ScpStatementConfirm>>::new(&mut r.inner, r.limits.clone())
59025                    .map(|r| r.map(|t| Self::ScpStatementConfirm(Box::new(t.0)))),
59026            ),
59027            TypeVariant::ScpStatementExternalize => Box::new(
59028                ReadXdrIter::<_, Frame<ScpStatementExternalize>>::new(
59029                    &mut r.inner,
59030                    r.limits.clone(),
59031                )
59032                .map(|r| r.map(|t| Self::ScpStatementExternalize(Box::new(t.0)))),
59033            ),
59034            TypeVariant::ScpEnvelope => Box::new(
59035                ReadXdrIter::<_, Frame<ScpEnvelope>>::new(&mut r.inner, r.limits.clone())
59036                    .map(|r| r.map(|t| Self::ScpEnvelope(Box::new(t.0)))),
59037            ),
59038            TypeVariant::ScpQuorumSet => Box::new(
59039                ReadXdrIter::<_, Frame<ScpQuorumSet>>::new(&mut r.inner, r.limits.clone())
59040                    .map(|r| r.map(|t| Self::ScpQuorumSet(Box::new(t.0)))),
59041            ),
59042            TypeVariant::ConfigSettingContractExecutionLanesV0 => Box::new(
59043                ReadXdrIter::<_, Frame<ConfigSettingContractExecutionLanesV0>>::new(
59044                    &mut r.inner,
59045                    r.limits.clone(),
59046                )
59047                .map(|r| r.map(|t| Self::ConfigSettingContractExecutionLanesV0(Box::new(t.0)))),
59048            ),
59049            TypeVariant::ConfigSettingContractComputeV0 => Box::new(
59050                ReadXdrIter::<_, Frame<ConfigSettingContractComputeV0>>::new(
59051                    &mut r.inner,
59052                    r.limits.clone(),
59053                )
59054                .map(|r| r.map(|t| Self::ConfigSettingContractComputeV0(Box::new(t.0)))),
59055            ),
59056            TypeVariant::ConfigSettingContractParallelComputeV0 => Box::new(
59057                ReadXdrIter::<_, Frame<ConfigSettingContractParallelComputeV0>>::new(
59058                    &mut r.inner,
59059                    r.limits.clone(),
59060                )
59061                .map(|r| r.map(|t| Self::ConfigSettingContractParallelComputeV0(Box::new(t.0)))),
59062            ),
59063            TypeVariant::ConfigSettingContractLedgerCostV0 => Box::new(
59064                ReadXdrIter::<_, Frame<ConfigSettingContractLedgerCostV0>>::new(
59065                    &mut r.inner,
59066                    r.limits.clone(),
59067                )
59068                .map(|r| r.map(|t| Self::ConfigSettingContractLedgerCostV0(Box::new(t.0)))),
59069            ),
59070            TypeVariant::ConfigSettingContractLedgerCostExtV0 => Box::new(
59071                ReadXdrIter::<_, Frame<ConfigSettingContractLedgerCostExtV0>>::new(
59072                    &mut r.inner,
59073                    r.limits.clone(),
59074                )
59075                .map(|r| r.map(|t| Self::ConfigSettingContractLedgerCostExtV0(Box::new(t.0)))),
59076            ),
59077            TypeVariant::ConfigSettingContractHistoricalDataV0 => Box::new(
59078                ReadXdrIter::<_, Frame<ConfigSettingContractHistoricalDataV0>>::new(
59079                    &mut r.inner,
59080                    r.limits.clone(),
59081                )
59082                .map(|r| r.map(|t| Self::ConfigSettingContractHistoricalDataV0(Box::new(t.0)))),
59083            ),
59084            TypeVariant::ConfigSettingContractEventsV0 => Box::new(
59085                ReadXdrIter::<_, Frame<ConfigSettingContractEventsV0>>::new(
59086                    &mut r.inner,
59087                    r.limits.clone(),
59088                )
59089                .map(|r| r.map(|t| Self::ConfigSettingContractEventsV0(Box::new(t.0)))),
59090            ),
59091            TypeVariant::ConfigSettingContractBandwidthV0 => Box::new(
59092                ReadXdrIter::<_, Frame<ConfigSettingContractBandwidthV0>>::new(
59093                    &mut r.inner,
59094                    r.limits.clone(),
59095                )
59096                .map(|r| r.map(|t| Self::ConfigSettingContractBandwidthV0(Box::new(t.0)))),
59097            ),
59098            TypeVariant::ContractCostType => Box::new(
59099                ReadXdrIter::<_, Frame<ContractCostType>>::new(&mut r.inner, r.limits.clone())
59100                    .map(|r| r.map(|t| Self::ContractCostType(Box::new(t.0)))),
59101            ),
59102            TypeVariant::ContractCostParamEntry => Box::new(
59103                ReadXdrIter::<_, Frame<ContractCostParamEntry>>::new(
59104                    &mut r.inner,
59105                    r.limits.clone(),
59106                )
59107                .map(|r| r.map(|t| Self::ContractCostParamEntry(Box::new(t.0)))),
59108            ),
59109            TypeVariant::StateArchivalSettings => Box::new(
59110                ReadXdrIter::<_, Frame<StateArchivalSettings>>::new(&mut r.inner, r.limits.clone())
59111                    .map(|r| r.map(|t| Self::StateArchivalSettings(Box::new(t.0)))),
59112            ),
59113            TypeVariant::EvictionIterator => Box::new(
59114                ReadXdrIter::<_, Frame<EvictionIterator>>::new(&mut r.inner, r.limits.clone())
59115                    .map(|r| r.map(|t| Self::EvictionIterator(Box::new(t.0)))),
59116            ),
59117            TypeVariant::ConfigSettingScpTiming => Box::new(
59118                ReadXdrIter::<_, Frame<ConfigSettingScpTiming>>::new(
59119                    &mut r.inner,
59120                    r.limits.clone(),
59121                )
59122                .map(|r| r.map(|t| Self::ConfigSettingScpTiming(Box::new(t.0)))),
59123            ),
59124            TypeVariant::ContractCostParams => Box::new(
59125                ReadXdrIter::<_, Frame<ContractCostParams>>::new(&mut r.inner, r.limits.clone())
59126                    .map(|r| r.map(|t| Self::ContractCostParams(Box::new(t.0)))),
59127            ),
59128            TypeVariant::ConfigSettingId => Box::new(
59129                ReadXdrIter::<_, Frame<ConfigSettingId>>::new(&mut r.inner, r.limits.clone())
59130                    .map(|r| r.map(|t| Self::ConfigSettingId(Box::new(t.0)))),
59131            ),
59132            TypeVariant::ConfigSettingEntry => Box::new(
59133                ReadXdrIter::<_, Frame<ConfigSettingEntry>>::new(&mut r.inner, r.limits.clone())
59134                    .map(|r| r.map(|t| Self::ConfigSettingEntry(Box::new(t.0)))),
59135            ),
59136            TypeVariant::ScEnvMetaKind => Box::new(
59137                ReadXdrIter::<_, Frame<ScEnvMetaKind>>::new(&mut r.inner, r.limits.clone())
59138                    .map(|r| r.map(|t| Self::ScEnvMetaKind(Box::new(t.0)))),
59139            ),
59140            TypeVariant::ScEnvMetaEntry => Box::new(
59141                ReadXdrIter::<_, Frame<ScEnvMetaEntry>>::new(&mut r.inner, r.limits.clone())
59142                    .map(|r| r.map(|t| Self::ScEnvMetaEntry(Box::new(t.0)))),
59143            ),
59144            TypeVariant::ScEnvMetaEntryInterfaceVersion => Box::new(
59145                ReadXdrIter::<_, Frame<ScEnvMetaEntryInterfaceVersion>>::new(
59146                    &mut r.inner,
59147                    r.limits.clone(),
59148                )
59149                .map(|r| r.map(|t| Self::ScEnvMetaEntryInterfaceVersion(Box::new(t.0)))),
59150            ),
59151            TypeVariant::ScMetaV0 => Box::new(
59152                ReadXdrIter::<_, Frame<ScMetaV0>>::new(&mut r.inner, r.limits.clone())
59153                    .map(|r| r.map(|t| Self::ScMetaV0(Box::new(t.0)))),
59154            ),
59155            TypeVariant::ScMetaKind => Box::new(
59156                ReadXdrIter::<_, Frame<ScMetaKind>>::new(&mut r.inner, r.limits.clone())
59157                    .map(|r| r.map(|t| Self::ScMetaKind(Box::new(t.0)))),
59158            ),
59159            TypeVariant::ScMetaEntry => Box::new(
59160                ReadXdrIter::<_, Frame<ScMetaEntry>>::new(&mut r.inner, r.limits.clone())
59161                    .map(|r| r.map(|t| Self::ScMetaEntry(Box::new(t.0)))),
59162            ),
59163            TypeVariant::ScSpecType => Box::new(
59164                ReadXdrIter::<_, Frame<ScSpecType>>::new(&mut r.inner, r.limits.clone())
59165                    .map(|r| r.map(|t| Self::ScSpecType(Box::new(t.0)))),
59166            ),
59167            TypeVariant::ScSpecTypeOption => Box::new(
59168                ReadXdrIter::<_, Frame<ScSpecTypeOption>>::new(&mut r.inner, r.limits.clone())
59169                    .map(|r| r.map(|t| Self::ScSpecTypeOption(Box::new(t.0)))),
59170            ),
59171            TypeVariant::ScSpecTypeResult => Box::new(
59172                ReadXdrIter::<_, Frame<ScSpecTypeResult>>::new(&mut r.inner, r.limits.clone())
59173                    .map(|r| r.map(|t| Self::ScSpecTypeResult(Box::new(t.0)))),
59174            ),
59175            TypeVariant::ScSpecTypeVec => Box::new(
59176                ReadXdrIter::<_, Frame<ScSpecTypeVec>>::new(&mut r.inner, r.limits.clone())
59177                    .map(|r| r.map(|t| Self::ScSpecTypeVec(Box::new(t.0)))),
59178            ),
59179            TypeVariant::ScSpecTypeMap => Box::new(
59180                ReadXdrIter::<_, Frame<ScSpecTypeMap>>::new(&mut r.inner, r.limits.clone())
59181                    .map(|r| r.map(|t| Self::ScSpecTypeMap(Box::new(t.0)))),
59182            ),
59183            TypeVariant::ScSpecTypeTuple => Box::new(
59184                ReadXdrIter::<_, Frame<ScSpecTypeTuple>>::new(&mut r.inner, r.limits.clone())
59185                    .map(|r| r.map(|t| Self::ScSpecTypeTuple(Box::new(t.0)))),
59186            ),
59187            TypeVariant::ScSpecTypeBytesN => Box::new(
59188                ReadXdrIter::<_, Frame<ScSpecTypeBytesN>>::new(&mut r.inner, r.limits.clone())
59189                    .map(|r| r.map(|t| Self::ScSpecTypeBytesN(Box::new(t.0)))),
59190            ),
59191            TypeVariant::ScSpecTypeUdt => Box::new(
59192                ReadXdrIter::<_, Frame<ScSpecTypeUdt>>::new(&mut r.inner, r.limits.clone())
59193                    .map(|r| r.map(|t| Self::ScSpecTypeUdt(Box::new(t.0)))),
59194            ),
59195            TypeVariant::ScSpecTypeDef => Box::new(
59196                ReadXdrIter::<_, Frame<ScSpecTypeDef>>::new(&mut r.inner, r.limits.clone())
59197                    .map(|r| r.map(|t| Self::ScSpecTypeDef(Box::new(t.0)))),
59198            ),
59199            TypeVariant::ScSpecUdtStructFieldV0 => Box::new(
59200                ReadXdrIter::<_, Frame<ScSpecUdtStructFieldV0>>::new(
59201                    &mut r.inner,
59202                    r.limits.clone(),
59203                )
59204                .map(|r| r.map(|t| Self::ScSpecUdtStructFieldV0(Box::new(t.0)))),
59205            ),
59206            TypeVariant::ScSpecUdtStructV0 => Box::new(
59207                ReadXdrIter::<_, Frame<ScSpecUdtStructV0>>::new(&mut r.inner, r.limits.clone())
59208                    .map(|r| r.map(|t| Self::ScSpecUdtStructV0(Box::new(t.0)))),
59209            ),
59210            TypeVariant::ScSpecUdtUnionCaseVoidV0 => Box::new(
59211                ReadXdrIter::<_, Frame<ScSpecUdtUnionCaseVoidV0>>::new(
59212                    &mut r.inner,
59213                    r.limits.clone(),
59214                )
59215                .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseVoidV0(Box::new(t.0)))),
59216            ),
59217            TypeVariant::ScSpecUdtUnionCaseTupleV0 => Box::new(
59218                ReadXdrIter::<_, Frame<ScSpecUdtUnionCaseTupleV0>>::new(
59219                    &mut r.inner,
59220                    r.limits.clone(),
59221                )
59222                .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseTupleV0(Box::new(t.0)))),
59223            ),
59224            TypeVariant::ScSpecUdtUnionCaseV0Kind => Box::new(
59225                ReadXdrIter::<_, Frame<ScSpecUdtUnionCaseV0Kind>>::new(
59226                    &mut r.inner,
59227                    r.limits.clone(),
59228                )
59229                .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseV0Kind(Box::new(t.0)))),
59230            ),
59231            TypeVariant::ScSpecUdtUnionCaseV0 => Box::new(
59232                ReadXdrIter::<_, Frame<ScSpecUdtUnionCaseV0>>::new(&mut r.inner, r.limits.clone())
59233                    .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseV0(Box::new(t.0)))),
59234            ),
59235            TypeVariant::ScSpecUdtUnionV0 => Box::new(
59236                ReadXdrIter::<_, Frame<ScSpecUdtUnionV0>>::new(&mut r.inner, r.limits.clone())
59237                    .map(|r| r.map(|t| Self::ScSpecUdtUnionV0(Box::new(t.0)))),
59238            ),
59239            TypeVariant::ScSpecUdtEnumCaseV0 => Box::new(
59240                ReadXdrIter::<_, Frame<ScSpecUdtEnumCaseV0>>::new(&mut r.inner, r.limits.clone())
59241                    .map(|r| r.map(|t| Self::ScSpecUdtEnumCaseV0(Box::new(t.0)))),
59242            ),
59243            TypeVariant::ScSpecUdtEnumV0 => Box::new(
59244                ReadXdrIter::<_, Frame<ScSpecUdtEnumV0>>::new(&mut r.inner, r.limits.clone())
59245                    .map(|r| r.map(|t| Self::ScSpecUdtEnumV0(Box::new(t.0)))),
59246            ),
59247            TypeVariant::ScSpecUdtErrorEnumCaseV0 => Box::new(
59248                ReadXdrIter::<_, Frame<ScSpecUdtErrorEnumCaseV0>>::new(
59249                    &mut r.inner,
59250                    r.limits.clone(),
59251                )
59252                .map(|r| r.map(|t| Self::ScSpecUdtErrorEnumCaseV0(Box::new(t.0)))),
59253            ),
59254            TypeVariant::ScSpecUdtErrorEnumV0 => Box::new(
59255                ReadXdrIter::<_, Frame<ScSpecUdtErrorEnumV0>>::new(&mut r.inner, r.limits.clone())
59256                    .map(|r| r.map(|t| Self::ScSpecUdtErrorEnumV0(Box::new(t.0)))),
59257            ),
59258            TypeVariant::ScSpecFunctionInputV0 => Box::new(
59259                ReadXdrIter::<_, Frame<ScSpecFunctionInputV0>>::new(&mut r.inner, r.limits.clone())
59260                    .map(|r| r.map(|t| Self::ScSpecFunctionInputV0(Box::new(t.0)))),
59261            ),
59262            TypeVariant::ScSpecFunctionV0 => Box::new(
59263                ReadXdrIter::<_, Frame<ScSpecFunctionV0>>::new(&mut r.inner, r.limits.clone())
59264                    .map(|r| r.map(|t| Self::ScSpecFunctionV0(Box::new(t.0)))),
59265            ),
59266            TypeVariant::ScSpecEventParamLocationV0 => Box::new(
59267                ReadXdrIter::<_, Frame<ScSpecEventParamLocationV0>>::new(
59268                    &mut r.inner,
59269                    r.limits.clone(),
59270                )
59271                .map(|r| r.map(|t| Self::ScSpecEventParamLocationV0(Box::new(t.0)))),
59272            ),
59273            TypeVariant::ScSpecEventParamV0 => Box::new(
59274                ReadXdrIter::<_, Frame<ScSpecEventParamV0>>::new(&mut r.inner, r.limits.clone())
59275                    .map(|r| r.map(|t| Self::ScSpecEventParamV0(Box::new(t.0)))),
59276            ),
59277            TypeVariant::ScSpecEventDataFormat => Box::new(
59278                ReadXdrIter::<_, Frame<ScSpecEventDataFormat>>::new(&mut r.inner, r.limits.clone())
59279                    .map(|r| r.map(|t| Self::ScSpecEventDataFormat(Box::new(t.0)))),
59280            ),
59281            TypeVariant::ScSpecEventV0 => Box::new(
59282                ReadXdrIter::<_, Frame<ScSpecEventV0>>::new(&mut r.inner, r.limits.clone())
59283                    .map(|r| r.map(|t| Self::ScSpecEventV0(Box::new(t.0)))),
59284            ),
59285            TypeVariant::ScSpecEntryKind => Box::new(
59286                ReadXdrIter::<_, Frame<ScSpecEntryKind>>::new(&mut r.inner, r.limits.clone())
59287                    .map(|r| r.map(|t| Self::ScSpecEntryKind(Box::new(t.0)))),
59288            ),
59289            TypeVariant::ScSpecEntry => Box::new(
59290                ReadXdrIter::<_, Frame<ScSpecEntry>>::new(&mut r.inner, r.limits.clone())
59291                    .map(|r| r.map(|t| Self::ScSpecEntry(Box::new(t.0)))),
59292            ),
59293            TypeVariant::ScValType => Box::new(
59294                ReadXdrIter::<_, Frame<ScValType>>::new(&mut r.inner, r.limits.clone())
59295                    .map(|r| r.map(|t| Self::ScValType(Box::new(t.0)))),
59296            ),
59297            TypeVariant::ScErrorType => Box::new(
59298                ReadXdrIter::<_, Frame<ScErrorType>>::new(&mut r.inner, r.limits.clone())
59299                    .map(|r| r.map(|t| Self::ScErrorType(Box::new(t.0)))),
59300            ),
59301            TypeVariant::ScErrorCode => Box::new(
59302                ReadXdrIter::<_, Frame<ScErrorCode>>::new(&mut r.inner, r.limits.clone())
59303                    .map(|r| r.map(|t| Self::ScErrorCode(Box::new(t.0)))),
59304            ),
59305            TypeVariant::ScError => Box::new(
59306                ReadXdrIter::<_, Frame<ScError>>::new(&mut r.inner, r.limits.clone())
59307                    .map(|r| r.map(|t| Self::ScError(Box::new(t.0)))),
59308            ),
59309            TypeVariant::UInt128Parts => Box::new(
59310                ReadXdrIter::<_, Frame<UInt128Parts>>::new(&mut r.inner, r.limits.clone())
59311                    .map(|r| r.map(|t| Self::UInt128Parts(Box::new(t.0)))),
59312            ),
59313            TypeVariant::Int128Parts => Box::new(
59314                ReadXdrIter::<_, Frame<Int128Parts>>::new(&mut r.inner, r.limits.clone())
59315                    .map(|r| r.map(|t| Self::Int128Parts(Box::new(t.0)))),
59316            ),
59317            TypeVariant::UInt256Parts => Box::new(
59318                ReadXdrIter::<_, Frame<UInt256Parts>>::new(&mut r.inner, r.limits.clone())
59319                    .map(|r| r.map(|t| Self::UInt256Parts(Box::new(t.0)))),
59320            ),
59321            TypeVariant::Int256Parts => Box::new(
59322                ReadXdrIter::<_, Frame<Int256Parts>>::new(&mut r.inner, r.limits.clone())
59323                    .map(|r| r.map(|t| Self::Int256Parts(Box::new(t.0)))),
59324            ),
59325            TypeVariant::ContractExecutableType => Box::new(
59326                ReadXdrIter::<_, Frame<ContractExecutableType>>::new(
59327                    &mut r.inner,
59328                    r.limits.clone(),
59329                )
59330                .map(|r| r.map(|t| Self::ContractExecutableType(Box::new(t.0)))),
59331            ),
59332            TypeVariant::ContractExecutable => Box::new(
59333                ReadXdrIter::<_, Frame<ContractExecutable>>::new(&mut r.inner, r.limits.clone())
59334                    .map(|r| r.map(|t| Self::ContractExecutable(Box::new(t.0)))),
59335            ),
59336            TypeVariant::ScAddressType => Box::new(
59337                ReadXdrIter::<_, Frame<ScAddressType>>::new(&mut r.inner, r.limits.clone())
59338                    .map(|r| r.map(|t| Self::ScAddressType(Box::new(t.0)))),
59339            ),
59340            TypeVariant::MuxedEd25519Account => Box::new(
59341                ReadXdrIter::<_, Frame<MuxedEd25519Account>>::new(&mut r.inner, r.limits.clone())
59342                    .map(|r| r.map(|t| Self::MuxedEd25519Account(Box::new(t.0)))),
59343            ),
59344            TypeVariant::ScAddress => Box::new(
59345                ReadXdrIter::<_, Frame<ScAddress>>::new(&mut r.inner, r.limits.clone())
59346                    .map(|r| r.map(|t| Self::ScAddress(Box::new(t.0)))),
59347            ),
59348            TypeVariant::ScVec => Box::new(
59349                ReadXdrIter::<_, Frame<ScVec>>::new(&mut r.inner, r.limits.clone())
59350                    .map(|r| r.map(|t| Self::ScVec(Box::new(t.0)))),
59351            ),
59352            TypeVariant::ScMap => Box::new(
59353                ReadXdrIter::<_, Frame<ScMap>>::new(&mut r.inner, r.limits.clone())
59354                    .map(|r| r.map(|t| Self::ScMap(Box::new(t.0)))),
59355            ),
59356            TypeVariant::ScBytes => Box::new(
59357                ReadXdrIter::<_, Frame<ScBytes>>::new(&mut r.inner, r.limits.clone())
59358                    .map(|r| r.map(|t| Self::ScBytes(Box::new(t.0)))),
59359            ),
59360            TypeVariant::ScString => Box::new(
59361                ReadXdrIter::<_, Frame<ScString>>::new(&mut r.inner, r.limits.clone())
59362                    .map(|r| r.map(|t| Self::ScString(Box::new(t.0)))),
59363            ),
59364            TypeVariant::ScSymbol => Box::new(
59365                ReadXdrIter::<_, Frame<ScSymbol>>::new(&mut r.inner, r.limits.clone())
59366                    .map(|r| r.map(|t| Self::ScSymbol(Box::new(t.0)))),
59367            ),
59368            TypeVariant::ScNonceKey => Box::new(
59369                ReadXdrIter::<_, Frame<ScNonceKey>>::new(&mut r.inner, r.limits.clone())
59370                    .map(|r| r.map(|t| Self::ScNonceKey(Box::new(t.0)))),
59371            ),
59372            TypeVariant::ScContractInstance => Box::new(
59373                ReadXdrIter::<_, Frame<ScContractInstance>>::new(&mut r.inner, r.limits.clone())
59374                    .map(|r| r.map(|t| Self::ScContractInstance(Box::new(t.0)))),
59375            ),
59376            TypeVariant::ScVal => Box::new(
59377                ReadXdrIter::<_, Frame<ScVal>>::new(&mut r.inner, r.limits.clone())
59378                    .map(|r| r.map(|t| Self::ScVal(Box::new(t.0)))),
59379            ),
59380            TypeVariant::ScMapEntry => Box::new(
59381                ReadXdrIter::<_, Frame<ScMapEntry>>::new(&mut r.inner, r.limits.clone())
59382                    .map(|r| r.map(|t| Self::ScMapEntry(Box::new(t.0)))),
59383            ),
59384            TypeVariant::LedgerCloseMetaBatch => Box::new(
59385                ReadXdrIter::<_, Frame<LedgerCloseMetaBatch>>::new(&mut r.inner, r.limits.clone())
59386                    .map(|r| r.map(|t| Self::LedgerCloseMetaBatch(Box::new(t.0)))),
59387            ),
59388            TypeVariant::StoredTransactionSet => Box::new(
59389                ReadXdrIter::<_, Frame<StoredTransactionSet>>::new(&mut r.inner, r.limits.clone())
59390                    .map(|r| r.map(|t| Self::StoredTransactionSet(Box::new(t.0)))),
59391            ),
59392            TypeVariant::StoredDebugTransactionSet => Box::new(
59393                ReadXdrIter::<_, Frame<StoredDebugTransactionSet>>::new(
59394                    &mut r.inner,
59395                    r.limits.clone(),
59396                )
59397                .map(|r| r.map(|t| Self::StoredDebugTransactionSet(Box::new(t.0)))),
59398            ),
59399            TypeVariant::PersistedScpStateV0 => Box::new(
59400                ReadXdrIter::<_, Frame<PersistedScpStateV0>>::new(&mut r.inner, r.limits.clone())
59401                    .map(|r| r.map(|t| Self::PersistedScpStateV0(Box::new(t.0)))),
59402            ),
59403            TypeVariant::PersistedScpStateV1 => Box::new(
59404                ReadXdrIter::<_, Frame<PersistedScpStateV1>>::new(&mut r.inner, r.limits.clone())
59405                    .map(|r| r.map(|t| Self::PersistedScpStateV1(Box::new(t.0)))),
59406            ),
59407            TypeVariant::PersistedScpState => Box::new(
59408                ReadXdrIter::<_, Frame<PersistedScpState>>::new(&mut r.inner, r.limits.clone())
59409                    .map(|r| r.map(|t| Self::PersistedScpState(Box::new(t.0)))),
59410            ),
59411            TypeVariant::Thresholds => Box::new(
59412                ReadXdrIter::<_, Frame<Thresholds>>::new(&mut r.inner, r.limits.clone())
59413                    .map(|r| r.map(|t| Self::Thresholds(Box::new(t.0)))),
59414            ),
59415            TypeVariant::String32 => Box::new(
59416                ReadXdrIter::<_, Frame<String32>>::new(&mut r.inner, r.limits.clone())
59417                    .map(|r| r.map(|t| Self::String32(Box::new(t.0)))),
59418            ),
59419            TypeVariant::String64 => Box::new(
59420                ReadXdrIter::<_, Frame<String64>>::new(&mut r.inner, r.limits.clone())
59421                    .map(|r| r.map(|t| Self::String64(Box::new(t.0)))),
59422            ),
59423            TypeVariant::SequenceNumber => Box::new(
59424                ReadXdrIter::<_, Frame<SequenceNumber>>::new(&mut r.inner, r.limits.clone())
59425                    .map(|r| r.map(|t| Self::SequenceNumber(Box::new(t.0)))),
59426            ),
59427            TypeVariant::DataValue => Box::new(
59428                ReadXdrIter::<_, Frame<DataValue>>::new(&mut r.inner, r.limits.clone())
59429                    .map(|r| r.map(|t| Self::DataValue(Box::new(t.0)))),
59430            ),
59431            TypeVariant::AssetCode4 => Box::new(
59432                ReadXdrIter::<_, Frame<AssetCode4>>::new(&mut r.inner, r.limits.clone())
59433                    .map(|r| r.map(|t| Self::AssetCode4(Box::new(t.0)))),
59434            ),
59435            TypeVariant::AssetCode12 => Box::new(
59436                ReadXdrIter::<_, Frame<AssetCode12>>::new(&mut r.inner, r.limits.clone())
59437                    .map(|r| r.map(|t| Self::AssetCode12(Box::new(t.0)))),
59438            ),
59439            TypeVariant::AssetType => Box::new(
59440                ReadXdrIter::<_, Frame<AssetType>>::new(&mut r.inner, r.limits.clone())
59441                    .map(|r| r.map(|t| Self::AssetType(Box::new(t.0)))),
59442            ),
59443            TypeVariant::AssetCode => Box::new(
59444                ReadXdrIter::<_, Frame<AssetCode>>::new(&mut r.inner, r.limits.clone())
59445                    .map(|r| r.map(|t| Self::AssetCode(Box::new(t.0)))),
59446            ),
59447            TypeVariant::AlphaNum4 => Box::new(
59448                ReadXdrIter::<_, Frame<AlphaNum4>>::new(&mut r.inner, r.limits.clone())
59449                    .map(|r| r.map(|t| Self::AlphaNum4(Box::new(t.0)))),
59450            ),
59451            TypeVariant::AlphaNum12 => Box::new(
59452                ReadXdrIter::<_, Frame<AlphaNum12>>::new(&mut r.inner, r.limits.clone())
59453                    .map(|r| r.map(|t| Self::AlphaNum12(Box::new(t.0)))),
59454            ),
59455            TypeVariant::Asset => Box::new(
59456                ReadXdrIter::<_, Frame<Asset>>::new(&mut r.inner, r.limits.clone())
59457                    .map(|r| r.map(|t| Self::Asset(Box::new(t.0)))),
59458            ),
59459            TypeVariant::Price => Box::new(
59460                ReadXdrIter::<_, Frame<Price>>::new(&mut r.inner, r.limits.clone())
59461                    .map(|r| r.map(|t| Self::Price(Box::new(t.0)))),
59462            ),
59463            TypeVariant::Liabilities => Box::new(
59464                ReadXdrIter::<_, Frame<Liabilities>>::new(&mut r.inner, r.limits.clone())
59465                    .map(|r| r.map(|t| Self::Liabilities(Box::new(t.0)))),
59466            ),
59467            TypeVariant::ThresholdIndexes => Box::new(
59468                ReadXdrIter::<_, Frame<ThresholdIndexes>>::new(&mut r.inner, r.limits.clone())
59469                    .map(|r| r.map(|t| Self::ThresholdIndexes(Box::new(t.0)))),
59470            ),
59471            TypeVariant::LedgerEntryType => Box::new(
59472                ReadXdrIter::<_, Frame<LedgerEntryType>>::new(&mut r.inner, r.limits.clone())
59473                    .map(|r| r.map(|t| Self::LedgerEntryType(Box::new(t.0)))),
59474            ),
59475            TypeVariant::Signer => Box::new(
59476                ReadXdrIter::<_, Frame<Signer>>::new(&mut r.inner, r.limits.clone())
59477                    .map(|r| r.map(|t| Self::Signer(Box::new(t.0)))),
59478            ),
59479            TypeVariant::AccountFlags => Box::new(
59480                ReadXdrIter::<_, Frame<AccountFlags>>::new(&mut r.inner, r.limits.clone())
59481                    .map(|r| r.map(|t| Self::AccountFlags(Box::new(t.0)))),
59482            ),
59483            TypeVariant::SponsorshipDescriptor => Box::new(
59484                ReadXdrIter::<_, Frame<SponsorshipDescriptor>>::new(&mut r.inner, r.limits.clone())
59485                    .map(|r| r.map(|t| Self::SponsorshipDescriptor(Box::new(t.0)))),
59486            ),
59487            TypeVariant::AccountEntryExtensionV3 => Box::new(
59488                ReadXdrIter::<_, Frame<AccountEntryExtensionV3>>::new(
59489                    &mut r.inner,
59490                    r.limits.clone(),
59491                )
59492                .map(|r| r.map(|t| Self::AccountEntryExtensionV3(Box::new(t.0)))),
59493            ),
59494            TypeVariant::AccountEntryExtensionV2 => Box::new(
59495                ReadXdrIter::<_, Frame<AccountEntryExtensionV2>>::new(
59496                    &mut r.inner,
59497                    r.limits.clone(),
59498                )
59499                .map(|r| r.map(|t| Self::AccountEntryExtensionV2(Box::new(t.0)))),
59500            ),
59501            TypeVariant::AccountEntryExtensionV2Ext => Box::new(
59502                ReadXdrIter::<_, Frame<AccountEntryExtensionV2Ext>>::new(
59503                    &mut r.inner,
59504                    r.limits.clone(),
59505                )
59506                .map(|r| r.map(|t| Self::AccountEntryExtensionV2Ext(Box::new(t.0)))),
59507            ),
59508            TypeVariant::AccountEntryExtensionV1 => Box::new(
59509                ReadXdrIter::<_, Frame<AccountEntryExtensionV1>>::new(
59510                    &mut r.inner,
59511                    r.limits.clone(),
59512                )
59513                .map(|r| r.map(|t| Self::AccountEntryExtensionV1(Box::new(t.0)))),
59514            ),
59515            TypeVariant::AccountEntryExtensionV1Ext => Box::new(
59516                ReadXdrIter::<_, Frame<AccountEntryExtensionV1Ext>>::new(
59517                    &mut r.inner,
59518                    r.limits.clone(),
59519                )
59520                .map(|r| r.map(|t| Self::AccountEntryExtensionV1Ext(Box::new(t.0)))),
59521            ),
59522            TypeVariant::AccountEntry => Box::new(
59523                ReadXdrIter::<_, Frame<AccountEntry>>::new(&mut r.inner, r.limits.clone())
59524                    .map(|r| r.map(|t| Self::AccountEntry(Box::new(t.0)))),
59525            ),
59526            TypeVariant::AccountEntryExt => Box::new(
59527                ReadXdrIter::<_, Frame<AccountEntryExt>>::new(&mut r.inner, r.limits.clone())
59528                    .map(|r| r.map(|t| Self::AccountEntryExt(Box::new(t.0)))),
59529            ),
59530            TypeVariant::TrustLineFlags => Box::new(
59531                ReadXdrIter::<_, Frame<TrustLineFlags>>::new(&mut r.inner, r.limits.clone())
59532                    .map(|r| r.map(|t| Self::TrustLineFlags(Box::new(t.0)))),
59533            ),
59534            TypeVariant::LiquidityPoolType => Box::new(
59535                ReadXdrIter::<_, Frame<LiquidityPoolType>>::new(&mut r.inner, r.limits.clone())
59536                    .map(|r| r.map(|t| Self::LiquidityPoolType(Box::new(t.0)))),
59537            ),
59538            TypeVariant::TrustLineAsset => Box::new(
59539                ReadXdrIter::<_, Frame<TrustLineAsset>>::new(&mut r.inner, r.limits.clone())
59540                    .map(|r| r.map(|t| Self::TrustLineAsset(Box::new(t.0)))),
59541            ),
59542            TypeVariant::TrustLineEntryExtensionV2 => Box::new(
59543                ReadXdrIter::<_, Frame<TrustLineEntryExtensionV2>>::new(
59544                    &mut r.inner,
59545                    r.limits.clone(),
59546                )
59547                .map(|r| r.map(|t| Self::TrustLineEntryExtensionV2(Box::new(t.0)))),
59548            ),
59549            TypeVariant::TrustLineEntryExtensionV2Ext => Box::new(
59550                ReadXdrIter::<_, Frame<TrustLineEntryExtensionV2Ext>>::new(
59551                    &mut r.inner,
59552                    r.limits.clone(),
59553                )
59554                .map(|r| r.map(|t| Self::TrustLineEntryExtensionV2Ext(Box::new(t.0)))),
59555            ),
59556            TypeVariant::TrustLineEntry => Box::new(
59557                ReadXdrIter::<_, Frame<TrustLineEntry>>::new(&mut r.inner, r.limits.clone())
59558                    .map(|r| r.map(|t| Self::TrustLineEntry(Box::new(t.0)))),
59559            ),
59560            TypeVariant::TrustLineEntryExt => Box::new(
59561                ReadXdrIter::<_, Frame<TrustLineEntryExt>>::new(&mut r.inner, r.limits.clone())
59562                    .map(|r| r.map(|t| Self::TrustLineEntryExt(Box::new(t.0)))),
59563            ),
59564            TypeVariant::TrustLineEntryV1 => Box::new(
59565                ReadXdrIter::<_, Frame<TrustLineEntryV1>>::new(&mut r.inner, r.limits.clone())
59566                    .map(|r| r.map(|t| Self::TrustLineEntryV1(Box::new(t.0)))),
59567            ),
59568            TypeVariant::TrustLineEntryV1Ext => Box::new(
59569                ReadXdrIter::<_, Frame<TrustLineEntryV1Ext>>::new(&mut r.inner, r.limits.clone())
59570                    .map(|r| r.map(|t| Self::TrustLineEntryV1Ext(Box::new(t.0)))),
59571            ),
59572            TypeVariant::OfferEntryFlags => Box::new(
59573                ReadXdrIter::<_, Frame<OfferEntryFlags>>::new(&mut r.inner, r.limits.clone())
59574                    .map(|r| r.map(|t| Self::OfferEntryFlags(Box::new(t.0)))),
59575            ),
59576            TypeVariant::OfferEntry => Box::new(
59577                ReadXdrIter::<_, Frame<OfferEntry>>::new(&mut r.inner, r.limits.clone())
59578                    .map(|r| r.map(|t| Self::OfferEntry(Box::new(t.0)))),
59579            ),
59580            TypeVariant::OfferEntryExt => Box::new(
59581                ReadXdrIter::<_, Frame<OfferEntryExt>>::new(&mut r.inner, r.limits.clone())
59582                    .map(|r| r.map(|t| Self::OfferEntryExt(Box::new(t.0)))),
59583            ),
59584            TypeVariant::DataEntry => Box::new(
59585                ReadXdrIter::<_, Frame<DataEntry>>::new(&mut r.inner, r.limits.clone())
59586                    .map(|r| r.map(|t| Self::DataEntry(Box::new(t.0)))),
59587            ),
59588            TypeVariant::DataEntryExt => Box::new(
59589                ReadXdrIter::<_, Frame<DataEntryExt>>::new(&mut r.inner, r.limits.clone())
59590                    .map(|r| r.map(|t| Self::DataEntryExt(Box::new(t.0)))),
59591            ),
59592            TypeVariant::ClaimPredicateType => Box::new(
59593                ReadXdrIter::<_, Frame<ClaimPredicateType>>::new(&mut r.inner, r.limits.clone())
59594                    .map(|r| r.map(|t| Self::ClaimPredicateType(Box::new(t.0)))),
59595            ),
59596            TypeVariant::ClaimPredicate => Box::new(
59597                ReadXdrIter::<_, Frame<ClaimPredicate>>::new(&mut r.inner, r.limits.clone())
59598                    .map(|r| r.map(|t| Self::ClaimPredicate(Box::new(t.0)))),
59599            ),
59600            TypeVariant::ClaimantType => Box::new(
59601                ReadXdrIter::<_, Frame<ClaimantType>>::new(&mut r.inner, r.limits.clone())
59602                    .map(|r| r.map(|t| Self::ClaimantType(Box::new(t.0)))),
59603            ),
59604            TypeVariant::Claimant => Box::new(
59605                ReadXdrIter::<_, Frame<Claimant>>::new(&mut r.inner, r.limits.clone())
59606                    .map(|r| r.map(|t| Self::Claimant(Box::new(t.0)))),
59607            ),
59608            TypeVariant::ClaimantV0 => Box::new(
59609                ReadXdrIter::<_, Frame<ClaimantV0>>::new(&mut r.inner, r.limits.clone())
59610                    .map(|r| r.map(|t| Self::ClaimantV0(Box::new(t.0)))),
59611            ),
59612            TypeVariant::ClaimableBalanceFlags => Box::new(
59613                ReadXdrIter::<_, Frame<ClaimableBalanceFlags>>::new(&mut r.inner, r.limits.clone())
59614                    .map(|r| r.map(|t| Self::ClaimableBalanceFlags(Box::new(t.0)))),
59615            ),
59616            TypeVariant::ClaimableBalanceEntryExtensionV1 => Box::new(
59617                ReadXdrIter::<_, Frame<ClaimableBalanceEntryExtensionV1>>::new(
59618                    &mut r.inner,
59619                    r.limits.clone(),
59620                )
59621                .map(|r| r.map(|t| Self::ClaimableBalanceEntryExtensionV1(Box::new(t.0)))),
59622            ),
59623            TypeVariant::ClaimableBalanceEntryExtensionV1Ext => Box::new(
59624                ReadXdrIter::<_, Frame<ClaimableBalanceEntryExtensionV1Ext>>::new(
59625                    &mut r.inner,
59626                    r.limits.clone(),
59627                )
59628                .map(|r| r.map(|t| Self::ClaimableBalanceEntryExtensionV1Ext(Box::new(t.0)))),
59629            ),
59630            TypeVariant::ClaimableBalanceEntry => Box::new(
59631                ReadXdrIter::<_, Frame<ClaimableBalanceEntry>>::new(&mut r.inner, r.limits.clone())
59632                    .map(|r| r.map(|t| Self::ClaimableBalanceEntry(Box::new(t.0)))),
59633            ),
59634            TypeVariant::ClaimableBalanceEntryExt => Box::new(
59635                ReadXdrIter::<_, Frame<ClaimableBalanceEntryExt>>::new(
59636                    &mut r.inner,
59637                    r.limits.clone(),
59638                )
59639                .map(|r| r.map(|t| Self::ClaimableBalanceEntryExt(Box::new(t.0)))),
59640            ),
59641            TypeVariant::LiquidityPoolConstantProductParameters => Box::new(
59642                ReadXdrIter::<_, Frame<LiquidityPoolConstantProductParameters>>::new(
59643                    &mut r.inner,
59644                    r.limits.clone(),
59645                )
59646                .map(|r| r.map(|t| Self::LiquidityPoolConstantProductParameters(Box::new(t.0)))),
59647            ),
59648            TypeVariant::LiquidityPoolEntry => Box::new(
59649                ReadXdrIter::<_, Frame<LiquidityPoolEntry>>::new(&mut r.inner, r.limits.clone())
59650                    .map(|r| r.map(|t| Self::LiquidityPoolEntry(Box::new(t.0)))),
59651            ),
59652            TypeVariant::LiquidityPoolEntryBody => Box::new(
59653                ReadXdrIter::<_, Frame<LiquidityPoolEntryBody>>::new(
59654                    &mut r.inner,
59655                    r.limits.clone(),
59656                )
59657                .map(|r| r.map(|t| Self::LiquidityPoolEntryBody(Box::new(t.0)))),
59658            ),
59659            TypeVariant::LiquidityPoolEntryConstantProduct => Box::new(
59660                ReadXdrIter::<_, Frame<LiquidityPoolEntryConstantProduct>>::new(
59661                    &mut r.inner,
59662                    r.limits.clone(),
59663                )
59664                .map(|r| r.map(|t| Self::LiquidityPoolEntryConstantProduct(Box::new(t.0)))),
59665            ),
59666            TypeVariant::ContractDataDurability => Box::new(
59667                ReadXdrIter::<_, Frame<ContractDataDurability>>::new(
59668                    &mut r.inner,
59669                    r.limits.clone(),
59670                )
59671                .map(|r| r.map(|t| Self::ContractDataDurability(Box::new(t.0)))),
59672            ),
59673            TypeVariant::ContractDataEntry => Box::new(
59674                ReadXdrIter::<_, Frame<ContractDataEntry>>::new(&mut r.inner, r.limits.clone())
59675                    .map(|r| r.map(|t| Self::ContractDataEntry(Box::new(t.0)))),
59676            ),
59677            TypeVariant::ContractCodeCostInputs => Box::new(
59678                ReadXdrIter::<_, Frame<ContractCodeCostInputs>>::new(
59679                    &mut r.inner,
59680                    r.limits.clone(),
59681                )
59682                .map(|r| r.map(|t| Self::ContractCodeCostInputs(Box::new(t.0)))),
59683            ),
59684            TypeVariant::ContractCodeEntry => Box::new(
59685                ReadXdrIter::<_, Frame<ContractCodeEntry>>::new(&mut r.inner, r.limits.clone())
59686                    .map(|r| r.map(|t| Self::ContractCodeEntry(Box::new(t.0)))),
59687            ),
59688            TypeVariant::ContractCodeEntryExt => Box::new(
59689                ReadXdrIter::<_, Frame<ContractCodeEntryExt>>::new(&mut r.inner, r.limits.clone())
59690                    .map(|r| r.map(|t| Self::ContractCodeEntryExt(Box::new(t.0)))),
59691            ),
59692            TypeVariant::ContractCodeEntryV1 => Box::new(
59693                ReadXdrIter::<_, Frame<ContractCodeEntryV1>>::new(&mut r.inner, r.limits.clone())
59694                    .map(|r| r.map(|t| Self::ContractCodeEntryV1(Box::new(t.0)))),
59695            ),
59696            TypeVariant::TtlEntry => Box::new(
59697                ReadXdrIter::<_, Frame<TtlEntry>>::new(&mut r.inner, r.limits.clone())
59698                    .map(|r| r.map(|t| Self::TtlEntry(Box::new(t.0)))),
59699            ),
59700            TypeVariant::LedgerEntryExtensionV1 => Box::new(
59701                ReadXdrIter::<_, Frame<LedgerEntryExtensionV1>>::new(
59702                    &mut r.inner,
59703                    r.limits.clone(),
59704                )
59705                .map(|r| r.map(|t| Self::LedgerEntryExtensionV1(Box::new(t.0)))),
59706            ),
59707            TypeVariant::LedgerEntryExtensionV1Ext => Box::new(
59708                ReadXdrIter::<_, Frame<LedgerEntryExtensionV1Ext>>::new(
59709                    &mut r.inner,
59710                    r.limits.clone(),
59711                )
59712                .map(|r| r.map(|t| Self::LedgerEntryExtensionV1Ext(Box::new(t.0)))),
59713            ),
59714            TypeVariant::LedgerEntry => Box::new(
59715                ReadXdrIter::<_, Frame<LedgerEntry>>::new(&mut r.inner, r.limits.clone())
59716                    .map(|r| r.map(|t| Self::LedgerEntry(Box::new(t.0)))),
59717            ),
59718            TypeVariant::LedgerEntryData => Box::new(
59719                ReadXdrIter::<_, Frame<LedgerEntryData>>::new(&mut r.inner, r.limits.clone())
59720                    .map(|r| r.map(|t| Self::LedgerEntryData(Box::new(t.0)))),
59721            ),
59722            TypeVariant::LedgerEntryExt => Box::new(
59723                ReadXdrIter::<_, Frame<LedgerEntryExt>>::new(&mut r.inner, r.limits.clone())
59724                    .map(|r| r.map(|t| Self::LedgerEntryExt(Box::new(t.0)))),
59725            ),
59726            TypeVariant::LedgerKey => Box::new(
59727                ReadXdrIter::<_, Frame<LedgerKey>>::new(&mut r.inner, r.limits.clone())
59728                    .map(|r| r.map(|t| Self::LedgerKey(Box::new(t.0)))),
59729            ),
59730            TypeVariant::LedgerKeyAccount => Box::new(
59731                ReadXdrIter::<_, Frame<LedgerKeyAccount>>::new(&mut r.inner, r.limits.clone())
59732                    .map(|r| r.map(|t| Self::LedgerKeyAccount(Box::new(t.0)))),
59733            ),
59734            TypeVariant::LedgerKeyTrustLine => Box::new(
59735                ReadXdrIter::<_, Frame<LedgerKeyTrustLine>>::new(&mut r.inner, r.limits.clone())
59736                    .map(|r| r.map(|t| Self::LedgerKeyTrustLine(Box::new(t.0)))),
59737            ),
59738            TypeVariant::LedgerKeyOffer => Box::new(
59739                ReadXdrIter::<_, Frame<LedgerKeyOffer>>::new(&mut r.inner, r.limits.clone())
59740                    .map(|r| r.map(|t| Self::LedgerKeyOffer(Box::new(t.0)))),
59741            ),
59742            TypeVariant::LedgerKeyData => Box::new(
59743                ReadXdrIter::<_, Frame<LedgerKeyData>>::new(&mut r.inner, r.limits.clone())
59744                    .map(|r| r.map(|t| Self::LedgerKeyData(Box::new(t.0)))),
59745            ),
59746            TypeVariant::LedgerKeyClaimableBalance => Box::new(
59747                ReadXdrIter::<_, Frame<LedgerKeyClaimableBalance>>::new(
59748                    &mut r.inner,
59749                    r.limits.clone(),
59750                )
59751                .map(|r| r.map(|t| Self::LedgerKeyClaimableBalance(Box::new(t.0)))),
59752            ),
59753            TypeVariant::LedgerKeyLiquidityPool => Box::new(
59754                ReadXdrIter::<_, Frame<LedgerKeyLiquidityPool>>::new(
59755                    &mut r.inner,
59756                    r.limits.clone(),
59757                )
59758                .map(|r| r.map(|t| Self::LedgerKeyLiquidityPool(Box::new(t.0)))),
59759            ),
59760            TypeVariant::LedgerKeyContractData => Box::new(
59761                ReadXdrIter::<_, Frame<LedgerKeyContractData>>::new(&mut r.inner, r.limits.clone())
59762                    .map(|r| r.map(|t| Self::LedgerKeyContractData(Box::new(t.0)))),
59763            ),
59764            TypeVariant::LedgerKeyContractCode => Box::new(
59765                ReadXdrIter::<_, Frame<LedgerKeyContractCode>>::new(&mut r.inner, r.limits.clone())
59766                    .map(|r| r.map(|t| Self::LedgerKeyContractCode(Box::new(t.0)))),
59767            ),
59768            TypeVariant::LedgerKeyConfigSetting => Box::new(
59769                ReadXdrIter::<_, Frame<LedgerKeyConfigSetting>>::new(
59770                    &mut r.inner,
59771                    r.limits.clone(),
59772                )
59773                .map(|r| r.map(|t| Self::LedgerKeyConfigSetting(Box::new(t.0)))),
59774            ),
59775            TypeVariant::LedgerKeyTtl => Box::new(
59776                ReadXdrIter::<_, Frame<LedgerKeyTtl>>::new(&mut r.inner, r.limits.clone())
59777                    .map(|r| r.map(|t| Self::LedgerKeyTtl(Box::new(t.0)))),
59778            ),
59779            TypeVariant::EnvelopeType => Box::new(
59780                ReadXdrIter::<_, Frame<EnvelopeType>>::new(&mut r.inner, r.limits.clone())
59781                    .map(|r| r.map(|t| Self::EnvelopeType(Box::new(t.0)))),
59782            ),
59783            TypeVariant::BucketListType => Box::new(
59784                ReadXdrIter::<_, Frame<BucketListType>>::new(&mut r.inner, r.limits.clone())
59785                    .map(|r| r.map(|t| Self::BucketListType(Box::new(t.0)))),
59786            ),
59787            TypeVariant::BucketEntryType => Box::new(
59788                ReadXdrIter::<_, Frame<BucketEntryType>>::new(&mut r.inner, r.limits.clone())
59789                    .map(|r| r.map(|t| Self::BucketEntryType(Box::new(t.0)))),
59790            ),
59791            TypeVariant::HotArchiveBucketEntryType => Box::new(
59792                ReadXdrIter::<_, Frame<HotArchiveBucketEntryType>>::new(
59793                    &mut r.inner,
59794                    r.limits.clone(),
59795                )
59796                .map(|r| r.map(|t| Self::HotArchiveBucketEntryType(Box::new(t.0)))),
59797            ),
59798            TypeVariant::BucketMetadata => Box::new(
59799                ReadXdrIter::<_, Frame<BucketMetadata>>::new(&mut r.inner, r.limits.clone())
59800                    .map(|r| r.map(|t| Self::BucketMetadata(Box::new(t.0)))),
59801            ),
59802            TypeVariant::BucketMetadataExt => Box::new(
59803                ReadXdrIter::<_, Frame<BucketMetadataExt>>::new(&mut r.inner, r.limits.clone())
59804                    .map(|r| r.map(|t| Self::BucketMetadataExt(Box::new(t.0)))),
59805            ),
59806            TypeVariant::BucketEntry => Box::new(
59807                ReadXdrIter::<_, Frame<BucketEntry>>::new(&mut r.inner, r.limits.clone())
59808                    .map(|r| r.map(|t| Self::BucketEntry(Box::new(t.0)))),
59809            ),
59810            TypeVariant::HotArchiveBucketEntry => Box::new(
59811                ReadXdrIter::<_, Frame<HotArchiveBucketEntry>>::new(&mut r.inner, r.limits.clone())
59812                    .map(|r| r.map(|t| Self::HotArchiveBucketEntry(Box::new(t.0)))),
59813            ),
59814            TypeVariant::UpgradeType => Box::new(
59815                ReadXdrIter::<_, Frame<UpgradeType>>::new(&mut r.inner, r.limits.clone())
59816                    .map(|r| r.map(|t| Self::UpgradeType(Box::new(t.0)))),
59817            ),
59818            TypeVariant::StellarValueType => Box::new(
59819                ReadXdrIter::<_, Frame<StellarValueType>>::new(&mut r.inner, r.limits.clone())
59820                    .map(|r| r.map(|t| Self::StellarValueType(Box::new(t.0)))),
59821            ),
59822            TypeVariant::LedgerCloseValueSignature => Box::new(
59823                ReadXdrIter::<_, Frame<LedgerCloseValueSignature>>::new(
59824                    &mut r.inner,
59825                    r.limits.clone(),
59826                )
59827                .map(|r| r.map(|t| Self::LedgerCloseValueSignature(Box::new(t.0)))),
59828            ),
59829            TypeVariant::StellarValue => Box::new(
59830                ReadXdrIter::<_, Frame<StellarValue>>::new(&mut r.inner, r.limits.clone())
59831                    .map(|r| r.map(|t| Self::StellarValue(Box::new(t.0)))),
59832            ),
59833            TypeVariant::StellarValueExt => Box::new(
59834                ReadXdrIter::<_, Frame<StellarValueExt>>::new(&mut r.inner, r.limits.clone())
59835                    .map(|r| r.map(|t| Self::StellarValueExt(Box::new(t.0)))),
59836            ),
59837            TypeVariant::LedgerHeaderFlags => Box::new(
59838                ReadXdrIter::<_, Frame<LedgerHeaderFlags>>::new(&mut r.inner, r.limits.clone())
59839                    .map(|r| r.map(|t| Self::LedgerHeaderFlags(Box::new(t.0)))),
59840            ),
59841            TypeVariant::LedgerHeaderExtensionV1 => Box::new(
59842                ReadXdrIter::<_, Frame<LedgerHeaderExtensionV1>>::new(
59843                    &mut r.inner,
59844                    r.limits.clone(),
59845                )
59846                .map(|r| r.map(|t| Self::LedgerHeaderExtensionV1(Box::new(t.0)))),
59847            ),
59848            TypeVariant::LedgerHeaderExtensionV1Ext => Box::new(
59849                ReadXdrIter::<_, Frame<LedgerHeaderExtensionV1Ext>>::new(
59850                    &mut r.inner,
59851                    r.limits.clone(),
59852                )
59853                .map(|r| r.map(|t| Self::LedgerHeaderExtensionV1Ext(Box::new(t.0)))),
59854            ),
59855            TypeVariant::LedgerHeader => Box::new(
59856                ReadXdrIter::<_, Frame<LedgerHeader>>::new(&mut r.inner, r.limits.clone())
59857                    .map(|r| r.map(|t| Self::LedgerHeader(Box::new(t.0)))),
59858            ),
59859            TypeVariant::LedgerHeaderExt => Box::new(
59860                ReadXdrIter::<_, Frame<LedgerHeaderExt>>::new(&mut r.inner, r.limits.clone())
59861                    .map(|r| r.map(|t| Self::LedgerHeaderExt(Box::new(t.0)))),
59862            ),
59863            TypeVariant::LedgerUpgradeType => Box::new(
59864                ReadXdrIter::<_, Frame<LedgerUpgradeType>>::new(&mut r.inner, r.limits.clone())
59865                    .map(|r| r.map(|t| Self::LedgerUpgradeType(Box::new(t.0)))),
59866            ),
59867            TypeVariant::ConfigUpgradeSetKey => Box::new(
59868                ReadXdrIter::<_, Frame<ConfigUpgradeSetKey>>::new(&mut r.inner, r.limits.clone())
59869                    .map(|r| r.map(|t| Self::ConfigUpgradeSetKey(Box::new(t.0)))),
59870            ),
59871            TypeVariant::LedgerUpgrade => Box::new(
59872                ReadXdrIter::<_, Frame<LedgerUpgrade>>::new(&mut r.inner, r.limits.clone())
59873                    .map(|r| r.map(|t| Self::LedgerUpgrade(Box::new(t.0)))),
59874            ),
59875            TypeVariant::ConfigUpgradeSet => Box::new(
59876                ReadXdrIter::<_, Frame<ConfigUpgradeSet>>::new(&mut r.inner, r.limits.clone())
59877                    .map(|r| r.map(|t| Self::ConfigUpgradeSet(Box::new(t.0)))),
59878            ),
59879            TypeVariant::TxSetComponentType => Box::new(
59880                ReadXdrIter::<_, Frame<TxSetComponentType>>::new(&mut r.inner, r.limits.clone())
59881                    .map(|r| r.map(|t| Self::TxSetComponentType(Box::new(t.0)))),
59882            ),
59883            TypeVariant::DependentTxCluster => Box::new(
59884                ReadXdrIter::<_, Frame<DependentTxCluster>>::new(&mut r.inner, r.limits.clone())
59885                    .map(|r| r.map(|t| Self::DependentTxCluster(Box::new(t.0)))),
59886            ),
59887            TypeVariant::ParallelTxExecutionStage => Box::new(
59888                ReadXdrIter::<_, Frame<ParallelTxExecutionStage>>::new(
59889                    &mut r.inner,
59890                    r.limits.clone(),
59891                )
59892                .map(|r| r.map(|t| Self::ParallelTxExecutionStage(Box::new(t.0)))),
59893            ),
59894            TypeVariant::ParallelTxsComponent => Box::new(
59895                ReadXdrIter::<_, Frame<ParallelTxsComponent>>::new(&mut r.inner, r.limits.clone())
59896                    .map(|r| r.map(|t| Self::ParallelTxsComponent(Box::new(t.0)))),
59897            ),
59898            TypeVariant::TxSetComponent => Box::new(
59899                ReadXdrIter::<_, Frame<TxSetComponent>>::new(&mut r.inner, r.limits.clone())
59900                    .map(|r| r.map(|t| Self::TxSetComponent(Box::new(t.0)))),
59901            ),
59902            TypeVariant::TxSetComponentTxsMaybeDiscountedFee => Box::new(
59903                ReadXdrIter::<_, Frame<TxSetComponentTxsMaybeDiscountedFee>>::new(
59904                    &mut r.inner,
59905                    r.limits.clone(),
59906                )
59907                .map(|r| r.map(|t| Self::TxSetComponentTxsMaybeDiscountedFee(Box::new(t.0)))),
59908            ),
59909            TypeVariant::TransactionPhase => Box::new(
59910                ReadXdrIter::<_, Frame<TransactionPhase>>::new(&mut r.inner, r.limits.clone())
59911                    .map(|r| r.map(|t| Self::TransactionPhase(Box::new(t.0)))),
59912            ),
59913            TypeVariant::TransactionSet => Box::new(
59914                ReadXdrIter::<_, Frame<TransactionSet>>::new(&mut r.inner, r.limits.clone())
59915                    .map(|r| r.map(|t| Self::TransactionSet(Box::new(t.0)))),
59916            ),
59917            TypeVariant::TransactionSetV1 => Box::new(
59918                ReadXdrIter::<_, Frame<TransactionSetV1>>::new(&mut r.inner, r.limits.clone())
59919                    .map(|r| r.map(|t| Self::TransactionSetV1(Box::new(t.0)))),
59920            ),
59921            TypeVariant::GeneralizedTransactionSet => Box::new(
59922                ReadXdrIter::<_, Frame<GeneralizedTransactionSet>>::new(
59923                    &mut r.inner,
59924                    r.limits.clone(),
59925                )
59926                .map(|r| r.map(|t| Self::GeneralizedTransactionSet(Box::new(t.0)))),
59927            ),
59928            TypeVariant::TransactionResultPair => Box::new(
59929                ReadXdrIter::<_, Frame<TransactionResultPair>>::new(&mut r.inner, r.limits.clone())
59930                    .map(|r| r.map(|t| Self::TransactionResultPair(Box::new(t.0)))),
59931            ),
59932            TypeVariant::TransactionResultSet => Box::new(
59933                ReadXdrIter::<_, Frame<TransactionResultSet>>::new(&mut r.inner, r.limits.clone())
59934                    .map(|r| r.map(|t| Self::TransactionResultSet(Box::new(t.0)))),
59935            ),
59936            TypeVariant::TransactionHistoryEntry => Box::new(
59937                ReadXdrIter::<_, Frame<TransactionHistoryEntry>>::new(
59938                    &mut r.inner,
59939                    r.limits.clone(),
59940                )
59941                .map(|r| r.map(|t| Self::TransactionHistoryEntry(Box::new(t.0)))),
59942            ),
59943            TypeVariant::TransactionHistoryEntryExt => Box::new(
59944                ReadXdrIter::<_, Frame<TransactionHistoryEntryExt>>::new(
59945                    &mut r.inner,
59946                    r.limits.clone(),
59947                )
59948                .map(|r| r.map(|t| Self::TransactionHistoryEntryExt(Box::new(t.0)))),
59949            ),
59950            TypeVariant::TransactionHistoryResultEntry => Box::new(
59951                ReadXdrIter::<_, Frame<TransactionHistoryResultEntry>>::new(
59952                    &mut r.inner,
59953                    r.limits.clone(),
59954                )
59955                .map(|r| r.map(|t| Self::TransactionHistoryResultEntry(Box::new(t.0)))),
59956            ),
59957            TypeVariant::TransactionHistoryResultEntryExt => Box::new(
59958                ReadXdrIter::<_, Frame<TransactionHistoryResultEntryExt>>::new(
59959                    &mut r.inner,
59960                    r.limits.clone(),
59961                )
59962                .map(|r| r.map(|t| Self::TransactionHistoryResultEntryExt(Box::new(t.0)))),
59963            ),
59964            TypeVariant::LedgerHeaderHistoryEntry => Box::new(
59965                ReadXdrIter::<_, Frame<LedgerHeaderHistoryEntry>>::new(
59966                    &mut r.inner,
59967                    r.limits.clone(),
59968                )
59969                .map(|r| r.map(|t| Self::LedgerHeaderHistoryEntry(Box::new(t.0)))),
59970            ),
59971            TypeVariant::LedgerHeaderHistoryEntryExt => Box::new(
59972                ReadXdrIter::<_, Frame<LedgerHeaderHistoryEntryExt>>::new(
59973                    &mut r.inner,
59974                    r.limits.clone(),
59975                )
59976                .map(|r| r.map(|t| Self::LedgerHeaderHistoryEntryExt(Box::new(t.0)))),
59977            ),
59978            TypeVariant::LedgerScpMessages => Box::new(
59979                ReadXdrIter::<_, Frame<LedgerScpMessages>>::new(&mut r.inner, r.limits.clone())
59980                    .map(|r| r.map(|t| Self::LedgerScpMessages(Box::new(t.0)))),
59981            ),
59982            TypeVariant::ScpHistoryEntryV0 => Box::new(
59983                ReadXdrIter::<_, Frame<ScpHistoryEntryV0>>::new(&mut r.inner, r.limits.clone())
59984                    .map(|r| r.map(|t| Self::ScpHistoryEntryV0(Box::new(t.0)))),
59985            ),
59986            TypeVariant::ScpHistoryEntry => Box::new(
59987                ReadXdrIter::<_, Frame<ScpHistoryEntry>>::new(&mut r.inner, r.limits.clone())
59988                    .map(|r| r.map(|t| Self::ScpHistoryEntry(Box::new(t.0)))),
59989            ),
59990            TypeVariant::LedgerEntryChangeType => Box::new(
59991                ReadXdrIter::<_, Frame<LedgerEntryChangeType>>::new(&mut r.inner, r.limits.clone())
59992                    .map(|r| r.map(|t| Self::LedgerEntryChangeType(Box::new(t.0)))),
59993            ),
59994            TypeVariant::LedgerEntryChange => Box::new(
59995                ReadXdrIter::<_, Frame<LedgerEntryChange>>::new(&mut r.inner, r.limits.clone())
59996                    .map(|r| r.map(|t| Self::LedgerEntryChange(Box::new(t.0)))),
59997            ),
59998            TypeVariant::LedgerEntryChanges => Box::new(
59999                ReadXdrIter::<_, Frame<LedgerEntryChanges>>::new(&mut r.inner, r.limits.clone())
60000                    .map(|r| r.map(|t| Self::LedgerEntryChanges(Box::new(t.0)))),
60001            ),
60002            TypeVariant::OperationMeta => Box::new(
60003                ReadXdrIter::<_, Frame<OperationMeta>>::new(&mut r.inner, r.limits.clone())
60004                    .map(|r| r.map(|t| Self::OperationMeta(Box::new(t.0)))),
60005            ),
60006            TypeVariant::TransactionMetaV1 => Box::new(
60007                ReadXdrIter::<_, Frame<TransactionMetaV1>>::new(&mut r.inner, r.limits.clone())
60008                    .map(|r| r.map(|t| Self::TransactionMetaV1(Box::new(t.0)))),
60009            ),
60010            TypeVariant::TransactionMetaV2 => Box::new(
60011                ReadXdrIter::<_, Frame<TransactionMetaV2>>::new(&mut r.inner, r.limits.clone())
60012                    .map(|r| r.map(|t| Self::TransactionMetaV2(Box::new(t.0)))),
60013            ),
60014            TypeVariant::ContractEventType => Box::new(
60015                ReadXdrIter::<_, Frame<ContractEventType>>::new(&mut r.inner, r.limits.clone())
60016                    .map(|r| r.map(|t| Self::ContractEventType(Box::new(t.0)))),
60017            ),
60018            TypeVariant::ContractEvent => Box::new(
60019                ReadXdrIter::<_, Frame<ContractEvent>>::new(&mut r.inner, r.limits.clone())
60020                    .map(|r| r.map(|t| Self::ContractEvent(Box::new(t.0)))),
60021            ),
60022            TypeVariant::ContractEventBody => Box::new(
60023                ReadXdrIter::<_, Frame<ContractEventBody>>::new(&mut r.inner, r.limits.clone())
60024                    .map(|r| r.map(|t| Self::ContractEventBody(Box::new(t.0)))),
60025            ),
60026            TypeVariant::ContractEventV0 => Box::new(
60027                ReadXdrIter::<_, Frame<ContractEventV0>>::new(&mut r.inner, r.limits.clone())
60028                    .map(|r| r.map(|t| Self::ContractEventV0(Box::new(t.0)))),
60029            ),
60030            TypeVariant::DiagnosticEvent => Box::new(
60031                ReadXdrIter::<_, Frame<DiagnosticEvent>>::new(&mut r.inner, r.limits.clone())
60032                    .map(|r| r.map(|t| Self::DiagnosticEvent(Box::new(t.0)))),
60033            ),
60034            TypeVariant::SorobanTransactionMetaExtV1 => Box::new(
60035                ReadXdrIter::<_, Frame<SorobanTransactionMetaExtV1>>::new(
60036                    &mut r.inner,
60037                    r.limits.clone(),
60038                )
60039                .map(|r| r.map(|t| Self::SorobanTransactionMetaExtV1(Box::new(t.0)))),
60040            ),
60041            TypeVariant::SorobanTransactionMetaExt => Box::new(
60042                ReadXdrIter::<_, Frame<SorobanTransactionMetaExt>>::new(
60043                    &mut r.inner,
60044                    r.limits.clone(),
60045                )
60046                .map(|r| r.map(|t| Self::SorobanTransactionMetaExt(Box::new(t.0)))),
60047            ),
60048            TypeVariant::SorobanTransactionMeta => Box::new(
60049                ReadXdrIter::<_, Frame<SorobanTransactionMeta>>::new(
60050                    &mut r.inner,
60051                    r.limits.clone(),
60052                )
60053                .map(|r| r.map(|t| Self::SorobanTransactionMeta(Box::new(t.0)))),
60054            ),
60055            TypeVariant::TransactionMetaV3 => Box::new(
60056                ReadXdrIter::<_, Frame<TransactionMetaV3>>::new(&mut r.inner, r.limits.clone())
60057                    .map(|r| r.map(|t| Self::TransactionMetaV3(Box::new(t.0)))),
60058            ),
60059            TypeVariant::OperationMetaV2 => Box::new(
60060                ReadXdrIter::<_, Frame<OperationMetaV2>>::new(&mut r.inner, r.limits.clone())
60061                    .map(|r| r.map(|t| Self::OperationMetaV2(Box::new(t.0)))),
60062            ),
60063            TypeVariant::SorobanTransactionMetaV2 => Box::new(
60064                ReadXdrIter::<_, Frame<SorobanTransactionMetaV2>>::new(
60065                    &mut r.inner,
60066                    r.limits.clone(),
60067                )
60068                .map(|r| r.map(|t| Self::SorobanTransactionMetaV2(Box::new(t.0)))),
60069            ),
60070            TypeVariant::TransactionEventStage => Box::new(
60071                ReadXdrIter::<_, Frame<TransactionEventStage>>::new(&mut r.inner, r.limits.clone())
60072                    .map(|r| r.map(|t| Self::TransactionEventStage(Box::new(t.0)))),
60073            ),
60074            TypeVariant::TransactionEvent => Box::new(
60075                ReadXdrIter::<_, Frame<TransactionEvent>>::new(&mut r.inner, r.limits.clone())
60076                    .map(|r| r.map(|t| Self::TransactionEvent(Box::new(t.0)))),
60077            ),
60078            TypeVariant::TransactionMetaV4 => Box::new(
60079                ReadXdrIter::<_, Frame<TransactionMetaV4>>::new(&mut r.inner, r.limits.clone())
60080                    .map(|r| r.map(|t| Self::TransactionMetaV4(Box::new(t.0)))),
60081            ),
60082            TypeVariant::InvokeHostFunctionSuccessPreImage => Box::new(
60083                ReadXdrIter::<_, Frame<InvokeHostFunctionSuccessPreImage>>::new(
60084                    &mut r.inner,
60085                    r.limits.clone(),
60086                )
60087                .map(|r| r.map(|t| Self::InvokeHostFunctionSuccessPreImage(Box::new(t.0)))),
60088            ),
60089            TypeVariant::TransactionMeta => Box::new(
60090                ReadXdrIter::<_, Frame<TransactionMeta>>::new(&mut r.inner, r.limits.clone())
60091                    .map(|r| r.map(|t| Self::TransactionMeta(Box::new(t.0)))),
60092            ),
60093            TypeVariant::TransactionResultMeta => Box::new(
60094                ReadXdrIter::<_, Frame<TransactionResultMeta>>::new(&mut r.inner, r.limits.clone())
60095                    .map(|r| r.map(|t| Self::TransactionResultMeta(Box::new(t.0)))),
60096            ),
60097            TypeVariant::TransactionResultMetaV1 => Box::new(
60098                ReadXdrIter::<_, Frame<TransactionResultMetaV1>>::new(
60099                    &mut r.inner,
60100                    r.limits.clone(),
60101                )
60102                .map(|r| r.map(|t| Self::TransactionResultMetaV1(Box::new(t.0)))),
60103            ),
60104            TypeVariant::UpgradeEntryMeta => Box::new(
60105                ReadXdrIter::<_, Frame<UpgradeEntryMeta>>::new(&mut r.inner, r.limits.clone())
60106                    .map(|r| r.map(|t| Self::UpgradeEntryMeta(Box::new(t.0)))),
60107            ),
60108            TypeVariant::LedgerCloseMetaV0 => Box::new(
60109                ReadXdrIter::<_, Frame<LedgerCloseMetaV0>>::new(&mut r.inner, r.limits.clone())
60110                    .map(|r| r.map(|t| Self::LedgerCloseMetaV0(Box::new(t.0)))),
60111            ),
60112            TypeVariant::LedgerCloseMetaExtV1 => Box::new(
60113                ReadXdrIter::<_, Frame<LedgerCloseMetaExtV1>>::new(&mut r.inner, r.limits.clone())
60114                    .map(|r| r.map(|t| Self::LedgerCloseMetaExtV1(Box::new(t.0)))),
60115            ),
60116            TypeVariant::LedgerCloseMetaExt => Box::new(
60117                ReadXdrIter::<_, Frame<LedgerCloseMetaExt>>::new(&mut r.inner, r.limits.clone())
60118                    .map(|r| r.map(|t| Self::LedgerCloseMetaExt(Box::new(t.0)))),
60119            ),
60120            TypeVariant::LedgerCloseMetaV1 => Box::new(
60121                ReadXdrIter::<_, Frame<LedgerCloseMetaV1>>::new(&mut r.inner, r.limits.clone())
60122                    .map(|r| r.map(|t| Self::LedgerCloseMetaV1(Box::new(t.0)))),
60123            ),
60124            TypeVariant::LedgerCloseMetaV2 => Box::new(
60125                ReadXdrIter::<_, Frame<LedgerCloseMetaV2>>::new(&mut r.inner, r.limits.clone())
60126                    .map(|r| r.map(|t| Self::LedgerCloseMetaV2(Box::new(t.0)))),
60127            ),
60128            TypeVariant::LedgerCloseMeta => Box::new(
60129                ReadXdrIter::<_, Frame<LedgerCloseMeta>>::new(&mut r.inner, r.limits.clone())
60130                    .map(|r| r.map(|t| Self::LedgerCloseMeta(Box::new(t.0)))),
60131            ),
60132            TypeVariant::ErrorCode => Box::new(
60133                ReadXdrIter::<_, Frame<ErrorCode>>::new(&mut r.inner, r.limits.clone())
60134                    .map(|r| r.map(|t| Self::ErrorCode(Box::new(t.0)))),
60135            ),
60136            TypeVariant::SError => Box::new(
60137                ReadXdrIter::<_, Frame<SError>>::new(&mut r.inner, r.limits.clone())
60138                    .map(|r| r.map(|t| Self::SError(Box::new(t.0)))),
60139            ),
60140            TypeVariant::SendMore => Box::new(
60141                ReadXdrIter::<_, Frame<SendMore>>::new(&mut r.inner, r.limits.clone())
60142                    .map(|r| r.map(|t| Self::SendMore(Box::new(t.0)))),
60143            ),
60144            TypeVariant::SendMoreExtended => Box::new(
60145                ReadXdrIter::<_, Frame<SendMoreExtended>>::new(&mut r.inner, r.limits.clone())
60146                    .map(|r| r.map(|t| Self::SendMoreExtended(Box::new(t.0)))),
60147            ),
60148            TypeVariant::AuthCert => Box::new(
60149                ReadXdrIter::<_, Frame<AuthCert>>::new(&mut r.inner, r.limits.clone())
60150                    .map(|r| r.map(|t| Self::AuthCert(Box::new(t.0)))),
60151            ),
60152            TypeVariant::Hello => Box::new(
60153                ReadXdrIter::<_, Frame<Hello>>::new(&mut r.inner, r.limits.clone())
60154                    .map(|r| r.map(|t| Self::Hello(Box::new(t.0)))),
60155            ),
60156            TypeVariant::Auth => Box::new(
60157                ReadXdrIter::<_, Frame<Auth>>::new(&mut r.inner, r.limits.clone())
60158                    .map(|r| r.map(|t| Self::Auth(Box::new(t.0)))),
60159            ),
60160            TypeVariant::IpAddrType => Box::new(
60161                ReadXdrIter::<_, Frame<IpAddrType>>::new(&mut r.inner, r.limits.clone())
60162                    .map(|r| r.map(|t| Self::IpAddrType(Box::new(t.0)))),
60163            ),
60164            TypeVariant::PeerAddress => Box::new(
60165                ReadXdrIter::<_, Frame<PeerAddress>>::new(&mut r.inner, r.limits.clone())
60166                    .map(|r| r.map(|t| Self::PeerAddress(Box::new(t.0)))),
60167            ),
60168            TypeVariant::PeerAddressIp => Box::new(
60169                ReadXdrIter::<_, Frame<PeerAddressIp>>::new(&mut r.inner, r.limits.clone())
60170                    .map(|r| r.map(|t| Self::PeerAddressIp(Box::new(t.0)))),
60171            ),
60172            TypeVariant::MessageType => Box::new(
60173                ReadXdrIter::<_, Frame<MessageType>>::new(&mut r.inner, r.limits.clone())
60174                    .map(|r| r.map(|t| Self::MessageType(Box::new(t.0)))),
60175            ),
60176            TypeVariant::DontHave => Box::new(
60177                ReadXdrIter::<_, Frame<DontHave>>::new(&mut r.inner, r.limits.clone())
60178                    .map(|r| r.map(|t| Self::DontHave(Box::new(t.0)))),
60179            ),
60180            TypeVariant::SurveyMessageCommandType => Box::new(
60181                ReadXdrIter::<_, Frame<SurveyMessageCommandType>>::new(
60182                    &mut r.inner,
60183                    r.limits.clone(),
60184                )
60185                .map(|r| r.map(|t| Self::SurveyMessageCommandType(Box::new(t.0)))),
60186            ),
60187            TypeVariant::SurveyMessageResponseType => Box::new(
60188                ReadXdrIter::<_, Frame<SurveyMessageResponseType>>::new(
60189                    &mut r.inner,
60190                    r.limits.clone(),
60191                )
60192                .map(|r| r.map(|t| Self::SurveyMessageResponseType(Box::new(t.0)))),
60193            ),
60194            TypeVariant::TimeSlicedSurveyStartCollectingMessage => Box::new(
60195                ReadXdrIter::<_, Frame<TimeSlicedSurveyStartCollectingMessage>>::new(
60196                    &mut r.inner,
60197                    r.limits.clone(),
60198                )
60199                .map(|r| r.map(|t| Self::TimeSlicedSurveyStartCollectingMessage(Box::new(t.0)))),
60200            ),
60201            TypeVariant::SignedTimeSlicedSurveyStartCollectingMessage => Box::new(
60202                ReadXdrIter::<_, Frame<SignedTimeSlicedSurveyStartCollectingMessage>>::new(
60203                    &mut r.inner,
60204                    r.limits.clone(),
60205                )
60206                .map(|r| {
60207                    r.map(|t| Self::SignedTimeSlicedSurveyStartCollectingMessage(Box::new(t.0)))
60208                }),
60209            ),
60210            TypeVariant::TimeSlicedSurveyStopCollectingMessage => Box::new(
60211                ReadXdrIter::<_, Frame<TimeSlicedSurveyStopCollectingMessage>>::new(
60212                    &mut r.inner,
60213                    r.limits.clone(),
60214                )
60215                .map(|r| r.map(|t| Self::TimeSlicedSurveyStopCollectingMessage(Box::new(t.0)))),
60216            ),
60217            TypeVariant::SignedTimeSlicedSurveyStopCollectingMessage => Box::new(
60218                ReadXdrIter::<_, Frame<SignedTimeSlicedSurveyStopCollectingMessage>>::new(
60219                    &mut r.inner,
60220                    r.limits.clone(),
60221                )
60222                .map(|r| {
60223                    r.map(|t| Self::SignedTimeSlicedSurveyStopCollectingMessage(Box::new(t.0)))
60224                }),
60225            ),
60226            TypeVariant::SurveyRequestMessage => Box::new(
60227                ReadXdrIter::<_, Frame<SurveyRequestMessage>>::new(&mut r.inner, r.limits.clone())
60228                    .map(|r| r.map(|t| Self::SurveyRequestMessage(Box::new(t.0)))),
60229            ),
60230            TypeVariant::TimeSlicedSurveyRequestMessage => Box::new(
60231                ReadXdrIter::<_, Frame<TimeSlicedSurveyRequestMessage>>::new(
60232                    &mut r.inner,
60233                    r.limits.clone(),
60234                )
60235                .map(|r| r.map(|t| Self::TimeSlicedSurveyRequestMessage(Box::new(t.0)))),
60236            ),
60237            TypeVariant::SignedTimeSlicedSurveyRequestMessage => Box::new(
60238                ReadXdrIter::<_, Frame<SignedTimeSlicedSurveyRequestMessage>>::new(
60239                    &mut r.inner,
60240                    r.limits.clone(),
60241                )
60242                .map(|r| r.map(|t| Self::SignedTimeSlicedSurveyRequestMessage(Box::new(t.0)))),
60243            ),
60244            TypeVariant::EncryptedBody => Box::new(
60245                ReadXdrIter::<_, Frame<EncryptedBody>>::new(&mut r.inner, r.limits.clone())
60246                    .map(|r| r.map(|t| Self::EncryptedBody(Box::new(t.0)))),
60247            ),
60248            TypeVariant::SurveyResponseMessage => Box::new(
60249                ReadXdrIter::<_, Frame<SurveyResponseMessage>>::new(&mut r.inner, r.limits.clone())
60250                    .map(|r| r.map(|t| Self::SurveyResponseMessage(Box::new(t.0)))),
60251            ),
60252            TypeVariant::TimeSlicedSurveyResponseMessage => Box::new(
60253                ReadXdrIter::<_, Frame<TimeSlicedSurveyResponseMessage>>::new(
60254                    &mut r.inner,
60255                    r.limits.clone(),
60256                )
60257                .map(|r| r.map(|t| Self::TimeSlicedSurveyResponseMessage(Box::new(t.0)))),
60258            ),
60259            TypeVariant::SignedTimeSlicedSurveyResponseMessage => Box::new(
60260                ReadXdrIter::<_, Frame<SignedTimeSlicedSurveyResponseMessage>>::new(
60261                    &mut r.inner,
60262                    r.limits.clone(),
60263                )
60264                .map(|r| r.map(|t| Self::SignedTimeSlicedSurveyResponseMessage(Box::new(t.0)))),
60265            ),
60266            TypeVariant::PeerStats => Box::new(
60267                ReadXdrIter::<_, Frame<PeerStats>>::new(&mut r.inner, r.limits.clone())
60268                    .map(|r| r.map(|t| Self::PeerStats(Box::new(t.0)))),
60269            ),
60270            TypeVariant::TimeSlicedNodeData => Box::new(
60271                ReadXdrIter::<_, Frame<TimeSlicedNodeData>>::new(&mut r.inner, r.limits.clone())
60272                    .map(|r| r.map(|t| Self::TimeSlicedNodeData(Box::new(t.0)))),
60273            ),
60274            TypeVariant::TimeSlicedPeerData => Box::new(
60275                ReadXdrIter::<_, Frame<TimeSlicedPeerData>>::new(&mut r.inner, r.limits.clone())
60276                    .map(|r| r.map(|t| Self::TimeSlicedPeerData(Box::new(t.0)))),
60277            ),
60278            TypeVariant::TimeSlicedPeerDataList => Box::new(
60279                ReadXdrIter::<_, Frame<TimeSlicedPeerDataList>>::new(
60280                    &mut r.inner,
60281                    r.limits.clone(),
60282                )
60283                .map(|r| r.map(|t| Self::TimeSlicedPeerDataList(Box::new(t.0)))),
60284            ),
60285            TypeVariant::TopologyResponseBodyV2 => Box::new(
60286                ReadXdrIter::<_, Frame<TopologyResponseBodyV2>>::new(
60287                    &mut r.inner,
60288                    r.limits.clone(),
60289                )
60290                .map(|r| r.map(|t| Self::TopologyResponseBodyV2(Box::new(t.0)))),
60291            ),
60292            TypeVariant::SurveyResponseBody => Box::new(
60293                ReadXdrIter::<_, Frame<SurveyResponseBody>>::new(&mut r.inner, r.limits.clone())
60294                    .map(|r| r.map(|t| Self::SurveyResponseBody(Box::new(t.0)))),
60295            ),
60296            TypeVariant::TxAdvertVector => Box::new(
60297                ReadXdrIter::<_, Frame<TxAdvertVector>>::new(&mut r.inner, r.limits.clone())
60298                    .map(|r| r.map(|t| Self::TxAdvertVector(Box::new(t.0)))),
60299            ),
60300            TypeVariant::FloodAdvert => Box::new(
60301                ReadXdrIter::<_, Frame<FloodAdvert>>::new(&mut r.inner, r.limits.clone())
60302                    .map(|r| r.map(|t| Self::FloodAdvert(Box::new(t.0)))),
60303            ),
60304            TypeVariant::TxDemandVector => Box::new(
60305                ReadXdrIter::<_, Frame<TxDemandVector>>::new(&mut r.inner, r.limits.clone())
60306                    .map(|r| r.map(|t| Self::TxDemandVector(Box::new(t.0)))),
60307            ),
60308            TypeVariant::FloodDemand => Box::new(
60309                ReadXdrIter::<_, Frame<FloodDemand>>::new(&mut r.inner, r.limits.clone())
60310                    .map(|r| r.map(|t| Self::FloodDemand(Box::new(t.0)))),
60311            ),
60312            TypeVariant::StellarMessage => Box::new(
60313                ReadXdrIter::<_, Frame<StellarMessage>>::new(&mut r.inner, r.limits.clone())
60314                    .map(|r| r.map(|t| Self::StellarMessage(Box::new(t.0)))),
60315            ),
60316            TypeVariant::AuthenticatedMessage => Box::new(
60317                ReadXdrIter::<_, Frame<AuthenticatedMessage>>::new(&mut r.inner, r.limits.clone())
60318                    .map(|r| r.map(|t| Self::AuthenticatedMessage(Box::new(t.0)))),
60319            ),
60320            TypeVariant::AuthenticatedMessageV0 => Box::new(
60321                ReadXdrIter::<_, Frame<AuthenticatedMessageV0>>::new(
60322                    &mut r.inner,
60323                    r.limits.clone(),
60324                )
60325                .map(|r| r.map(|t| Self::AuthenticatedMessageV0(Box::new(t.0)))),
60326            ),
60327            TypeVariant::LiquidityPoolParameters => Box::new(
60328                ReadXdrIter::<_, Frame<LiquidityPoolParameters>>::new(
60329                    &mut r.inner,
60330                    r.limits.clone(),
60331                )
60332                .map(|r| r.map(|t| Self::LiquidityPoolParameters(Box::new(t.0)))),
60333            ),
60334            TypeVariant::MuxedAccount => Box::new(
60335                ReadXdrIter::<_, Frame<MuxedAccount>>::new(&mut r.inner, r.limits.clone())
60336                    .map(|r| r.map(|t| Self::MuxedAccount(Box::new(t.0)))),
60337            ),
60338            TypeVariant::MuxedAccountMed25519 => Box::new(
60339                ReadXdrIter::<_, Frame<MuxedAccountMed25519>>::new(&mut r.inner, r.limits.clone())
60340                    .map(|r| r.map(|t| Self::MuxedAccountMed25519(Box::new(t.0)))),
60341            ),
60342            TypeVariant::DecoratedSignature => Box::new(
60343                ReadXdrIter::<_, Frame<DecoratedSignature>>::new(&mut r.inner, r.limits.clone())
60344                    .map(|r| r.map(|t| Self::DecoratedSignature(Box::new(t.0)))),
60345            ),
60346            TypeVariant::OperationType => Box::new(
60347                ReadXdrIter::<_, Frame<OperationType>>::new(&mut r.inner, r.limits.clone())
60348                    .map(|r| r.map(|t| Self::OperationType(Box::new(t.0)))),
60349            ),
60350            TypeVariant::CreateAccountOp => Box::new(
60351                ReadXdrIter::<_, Frame<CreateAccountOp>>::new(&mut r.inner, r.limits.clone())
60352                    .map(|r| r.map(|t| Self::CreateAccountOp(Box::new(t.0)))),
60353            ),
60354            TypeVariant::PaymentOp => Box::new(
60355                ReadXdrIter::<_, Frame<PaymentOp>>::new(&mut r.inner, r.limits.clone())
60356                    .map(|r| r.map(|t| Self::PaymentOp(Box::new(t.0)))),
60357            ),
60358            TypeVariant::PathPaymentStrictReceiveOp => Box::new(
60359                ReadXdrIter::<_, Frame<PathPaymentStrictReceiveOp>>::new(
60360                    &mut r.inner,
60361                    r.limits.clone(),
60362                )
60363                .map(|r| r.map(|t| Self::PathPaymentStrictReceiveOp(Box::new(t.0)))),
60364            ),
60365            TypeVariant::PathPaymentStrictSendOp => Box::new(
60366                ReadXdrIter::<_, Frame<PathPaymentStrictSendOp>>::new(
60367                    &mut r.inner,
60368                    r.limits.clone(),
60369                )
60370                .map(|r| r.map(|t| Self::PathPaymentStrictSendOp(Box::new(t.0)))),
60371            ),
60372            TypeVariant::ManageSellOfferOp => Box::new(
60373                ReadXdrIter::<_, Frame<ManageSellOfferOp>>::new(&mut r.inner, r.limits.clone())
60374                    .map(|r| r.map(|t| Self::ManageSellOfferOp(Box::new(t.0)))),
60375            ),
60376            TypeVariant::ManageBuyOfferOp => Box::new(
60377                ReadXdrIter::<_, Frame<ManageBuyOfferOp>>::new(&mut r.inner, r.limits.clone())
60378                    .map(|r| r.map(|t| Self::ManageBuyOfferOp(Box::new(t.0)))),
60379            ),
60380            TypeVariant::CreatePassiveSellOfferOp => Box::new(
60381                ReadXdrIter::<_, Frame<CreatePassiveSellOfferOp>>::new(
60382                    &mut r.inner,
60383                    r.limits.clone(),
60384                )
60385                .map(|r| r.map(|t| Self::CreatePassiveSellOfferOp(Box::new(t.0)))),
60386            ),
60387            TypeVariant::SetOptionsOp => Box::new(
60388                ReadXdrIter::<_, Frame<SetOptionsOp>>::new(&mut r.inner, r.limits.clone())
60389                    .map(|r| r.map(|t| Self::SetOptionsOp(Box::new(t.0)))),
60390            ),
60391            TypeVariant::ChangeTrustAsset => Box::new(
60392                ReadXdrIter::<_, Frame<ChangeTrustAsset>>::new(&mut r.inner, r.limits.clone())
60393                    .map(|r| r.map(|t| Self::ChangeTrustAsset(Box::new(t.0)))),
60394            ),
60395            TypeVariant::ChangeTrustOp => Box::new(
60396                ReadXdrIter::<_, Frame<ChangeTrustOp>>::new(&mut r.inner, r.limits.clone())
60397                    .map(|r| r.map(|t| Self::ChangeTrustOp(Box::new(t.0)))),
60398            ),
60399            TypeVariant::AllowTrustOp => Box::new(
60400                ReadXdrIter::<_, Frame<AllowTrustOp>>::new(&mut r.inner, r.limits.clone())
60401                    .map(|r| r.map(|t| Self::AllowTrustOp(Box::new(t.0)))),
60402            ),
60403            TypeVariant::ManageDataOp => Box::new(
60404                ReadXdrIter::<_, Frame<ManageDataOp>>::new(&mut r.inner, r.limits.clone())
60405                    .map(|r| r.map(|t| Self::ManageDataOp(Box::new(t.0)))),
60406            ),
60407            TypeVariant::BumpSequenceOp => Box::new(
60408                ReadXdrIter::<_, Frame<BumpSequenceOp>>::new(&mut r.inner, r.limits.clone())
60409                    .map(|r| r.map(|t| Self::BumpSequenceOp(Box::new(t.0)))),
60410            ),
60411            TypeVariant::CreateClaimableBalanceOp => Box::new(
60412                ReadXdrIter::<_, Frame<CreateClaimableBalanceOp>>::new(
60413                    &mut r.inner,
60414                    r.limits.clone(),
60415                )
60416                .map(|r| r.map(|t| Self::CreateClaimableBalanceOp(Box::new(t.0)))),
60417            ),
60418            TypeVariant::ClaimClaimableBalanceOp => Box::new(
60419                ReadXdrIter::<_, Frame<ClaimClaimableBalanceOp>>::new(
60420                    &mut r.inner,
60421                    r.limits.clone(),
60422                )
60423                .map(|r| r.map(|t| Self::ClaimClaimableBalanceOp(Box::new(t.0)))),
60424            ),
60425            TypeVariant::BeginSponsoringFutureReservesOp => Box::new(
60426                ReadXdrIter::<_, Frame<BeginSponsoringFutureReservesOp>>::new(
60427                    &mut r.inner,
60428                    r.limits.clone(),
60429                )
60430                .map(|r| r.map(|t| Self::BeginSponsoringFutureReservesOp(Box::new(t.0)))),
60431            ),
60432            TypeVariant::RevokeSponsorshipType => Box::new(
60433                ReadXdrIter::<_, Frame<RevokeSponsorshipType>>::new(&mut r.inner, r.limits.clone())
60434                    .map(|r| r.map(|t| Self::RevokeSponsorshipType(Box::new(t.0)))),
60435            ),
60436            TypeVariant::RevokeSponsorshipOp => Box::new(
60437                ReadXdrIter::<_, Frame<RevokeSponsorshipOp>>::new(&mut r.inner, r.limits.clone())
60438                    .map(|r| r.map(|t| Self::RevokeSponsorshipOp(Box::new(t.0)))),
60439            ),
60440            TypeVariant::RevokeSponsorshipOpSigner => Box::new(
60441                ReadXdrIter::<_, Frame<RevokeSponsorshipOpSigner>>::new(
60442                    &mut r.inner,
60443                    r.limits.clone(),
60444                )
60445                .map(|r| r.map(|t| Self::RevokeSponsorshipOpSigner(Box::new(t.0)))),
60446            ),
60447            TypeVariant::ClawbackOp => Box::new(
60448                ReadXdrIter::<_, Frame<ClawbackOp>>::new(&mut r.inner, r.limits.clone())
60449                    .map(|r| r.map(|t| Self::ClawbackOp(Box::new(t.0)))),
60450            ),
60451            TypeVariant::ClawbackClaimableBalanceOp => Box::new(
60452                ReadXdrIter::<_, Frame<ClawbackClaimableBalanceOp>>::new(
60453                    &mut r.inner,
60454                    r.limits.clone(),
60455                )
60456                .map(|r| r.map(|t| Self::ClawbackClaimableBalanceOp(Box::new(t.0)))),
60457            ),
60458            TypeVariant::SetTrustLineFlagsOp => Box::new(
60459                ReadXdrIter::<_, Frame<SetTrustLineFlagsOp>>::new(&mut r.inner, r.limits.clone())
60460                    .map(|r| r.map(|t| Self::SetTrustLineFlagsOp(Box::new(t.0)))),
60461            ),
60462            TypeVariant::LiquidityPoolDepositOp => Box::new(
60463                ReadXdrIter::<_, Frame<LiquidityPoolDepositOp>>::new(
60464                    &mut r.inner,
60465                    r.limits.clone(),
60466                )
60467                .map(|r| r.map(|t| Self::LiquidityPoolDepositOp(Box::new(t.0)))),
60468            ),
60469            TypeVariant::LiquidityPoolWithdrawOp => Box::new(
60470                ReadXdrIter::<_, Frame<LiquidityPoolWithdrawOp>>::new(
60471                    &mut r.inner,
60472                    r.limits.clone(),
60473                )
60474                .map(|r| r.map(|t| Self::LiquidityPoolWithdrawOp(Box::new(t.0)))),
60475            ),
60476            TypeVariant::HostFunctionType => Box::new(
60477                ReadXdrIter::<_, Frame<HostFunctionType>>::new(&mut r.inner, r.limits.clone())
60478                    .map(|r| r.map(|t| Self::HostFunctionType(Box::new(t.0)))),
60479            ),
60480            TypeVariant::ContractIdPreimageType => Box::new(
60481                ReadXdrIter::<_, Frame<ContractIdPreimageType>>::new(
60482                    &mut r.inner,
60483                    r.limits.clone(),
60484                )
60485                .map(|r| r.map(|t| Self::ContractIdPreimageType(Box::new(t.0)))),
60486            ),
60487            TypeVariant::ContractIdPreimage => Box::new(
60488                ReadXdrIter::<_, Frame<ContractIdPreimage>>::new(&mut r.inner, r.limits.clone())
60489                    .map(|r| r.map(|t| Self::ContractIdPreimage(Box::new(t.0)))),
60490            ),
60491            TypeVariant::ContractIdPreimageFromAddress => Box::new(
60492                ReadXdrIter::<_, Frame<ContractIdPreimageFromAddress>>::new(
60493                    &mut r.inner,
60494                    r.limits.clone(),
60495                )
60496                .map(|r| r.map(|t| Self::ContractIdPreimageFromAddress(Box::new(t.0)))),
60497            ),
60498            TypeVariant::CreateContractArgs => Box::new(
60499                ReadXdrIter::<_, Frame<CreateContractArgs>>::new(&mut r.inner, r.limits.clone())
60500                    .map(|r| r.map(|t| Self::CreateContractArgs(Box::new(t.0)))),
60501            ),
60502            TypeVariant::CreateContractArgsV2 => Box::new(
60503                ReadXdrIter::<_, Frame<CreateContractArgsV2>>::new(&mut r.inner, r.limits.clone())
60504                    .map(|r| r.map(|t| Self::CreateContractArgsV2(Box::new(t.0)))),
60505            ),
60506            TypeVariant::InvokeContractArgs => Box::new(
60507                ReadXdrIter::<_, Frame<InvokeContractArgs>>::new(&mut r.inner, r.limits.clone())
60508                    .map(|r| r.map(|t| Self::InvokeContractArgs(Box::new(t.0)))),
60509            ),
60510            TypeVariant::HostFunction => Box::new(
60511                ReadXdrIter::<_, Frame<HostFunction>>::new(&mut r.inner, r.limits.clone())
60512                    .map(|r| r.map(|t| Self::HostFunction(Box::new(t.0)))),
60513            ),
60514            TypeVariant::SorobanAuthorizedFunctionType => Box::new(
60515                ReadXdrIter::<_, Frame<SorobanAuthorizedFunctionType>>::new(
60516                    &mut r.inner,
60517                    r.limits.clone(),
60518                )
60519                .map(|r| r.map(|t| Self::SorobanAuthorizedFunctionType(Box::new(t.0)))),
60520            ),
60521            TypeVariant::SorobanAuthorizedFunction => Box::new(
60522                ReadXdrIter::<_, Frame<SorobanAuthorizedFunction>>::new(
60523                    &mut r.inner,
60524                    r.limits.clone(),
60525                )
60526                .map(|r| r.map(|t| Self::SorobanAuthorizedFunction(Box::new(t.0)))),
60527            ),
60528            TypeVariant::SorobanAuthorizedInvocation => Box::new(
60529                ReadXdrIter::<_, Frame<SorobanAuthorizedInvocation>>::new(
60530                    &mut r.inner,
60531                    r.limits.clone(),
60532                )
60533                .map(|r| r.map(|t| Self::SorobanAuthorizedInvocation(Box::new(t.0)))),
60534            ),
60535            TypeVariant::SorobanAddressCredentials => Box::new(
60536                ReadXdrIter::<_, Frame<SorobanAddressCredentials>>::new(
60537                    &mut r.inner,
60538                    r.limits.clone(),
60539                )
60540                .map(|r| r.map(|t| Self::SorobanAddressCredentials(Box::new(t.0)))),
60541            ),
60542            TypeVariant::SorobanCredentialsType => Box::new(
60543                ReadXdrIter::<_, Frame<SorobanCredentialsType>>::new(
60544                    &mut r.inner,
60545                    r.limits.clone(),
60546                )
60547                .map(|r| r.map(|t| Self::SorobanCredentialsType(Box::new(t.0)))),
60548            ),
60549            TypeVariant::SorobanCredentials => Box::new(
60550                ReadXdrIter::<_, Frame<SorobanCredentials>>::new(&mut r.inner, r.limits.clone())
60551                    .map(|r| r.map(|t| Self::SorobanCredentials(Box::new(t.0)))),
60552            ),
60553            TypeVariant::SorobanAuthorizationEntry => Box::new(
60554                ReadXdrIter::<_, Frame<SorobanAuthorizationEntry>>::new(
60555                    &mut r.inner,
60556                    r.limits.clone(),
60557                )
60558                .map(|r| r.map(|t| Self::SorobanAuthorizationEntry(Box::new(t.0)))),
60559            ),
60560            TypeVariant::SorobanAuthorizationEntries => Box::new(
60561                ReadXdrIter::<_, Frame<SorobanAuthorizationEntries>>::new(
60562                    &mut r.inner,
60563                    r.limits.clone(),
60564                )
60565                .map(|r| r.map(|t| Self::SorobanAuthorizationEntries(Box::new(t.0)))),
60566            ),
60567            TypeVariant::InvokeHostFunctionOp => Box::new(
60568                ReadXdrIter::<_, Frame<InvokeHostFunctionOp>>::new(&mut r.inner, r.limits.clone())
60569                    .map(|r| r.map(|t| Self::InvokeHostFunctionOp(Box::new(t.0)))),
60570            ),
60571            TypeVariant::ExtendFootprintTtlOp => Box::new(
60572                ReadXdrIter::<_, Frame<ExtendFootprintTtlOp>>::new(&mut r.inner, r.limits.clone())
60573                    .map(|r| r.map(|t| Self::ExtendFootprintTtlOp(Box::new(t.0)))),
60574            ),
60575            TypeVariant::RestoreFootprintOp => Box::new(
60576                ReadXdrIter::<_, Frame<RestoreFootprintOp>>::new(&mut r.inner, r.limits.clone())
60577                    .map(|r| r.map(|t| Self::RestoreFootprintOp(Box::new(t.0)))),
60578            ),
60579            TypeVariant::Operation => Box::new(
60580                ReadXdrIter::<_, Frame<Operation>>::new(&mut r.inner, r.limits.clone())
60581                    .map(|r| r.map(|t| Self::Operation(Box::new(t.0)))),
60582            ),
60583            TypeVariant::OperationBody => Box::new(
60584                ReadXdrIter::<_, Frame<OperationBody>>::new(&mut r.inner, r.limits.clone())
60585                    .map(|r| r.map(|t| Self::OperationBody(Box::new(t.0)))),
60586            ),
60587            TypeVariant::HashIdPreimage => Box::new(
60588                ReadXdrIter::<_, Frame<HashIdPreimage>>::new(&mut r.inner, r.limits.clone())
60589                    .map(|r| r.map(|t| Self::HashIdPreimage(Box::new(t.0)))),
60590            ),
60591            TypeVariant::HashIdPreimageOperationId => Box::new(
60592                ReadXdrIter::<_, Frame<HashIdPreimageOperationId>>::new(
60593                    &mut r.inner,
60594                    r.limits.clone(),
60595                )
60596                .map(|r| r.map(|t| Self::HashIdPreimageOperationId(Box::new(t.0)))),
60597            ),
60598            TypeVariant::HashIdPreimageRevokeId => Box::new(
60599                ReadXdrIter::<_, Frame<HashIdPreimageRevokeId>>::new(
60600                    &mut r.inner,
60601                    r.limits.clone(),
60602                )
60603                .map(|r| r.map(|t| Self::HashIdPreimageRevokeId(Box::new(t.0)))),
60604            ),
60605            TypeVariant::HashIdPreimageContractId => Box::new(
60606                ReadXdrIter::<_, Frame<HashIdPreimageContractId>>::new(
60607                    &mut r.inner,
60608                    r.limits.clone(),
60609                )
60610                .map(|r| r.map(|t| Self::HashIdPreimageContractId(Box::new(t.0)))),
60611            ),
60612            TypeVariant::HashIdPreimageSorobanAuthorization => Box::new(
60613                ReadXdrIter::<_, Frame<HashIdPreimageSorobanAuthorization>>::new(
60614                    &mut r.inner,
60615                    r.limits.clone(),
60616                )
60617                .map(|r| r.map(|t| Self::HashIdPreimageSorobanAuthorization(Box::new(t.0)))),
60618            ),
60619            TypeVariant::MemoType => Box::new(
60620                ReadXdrIter::<_, Frame<MemoType>>::new(&mut r.inner, r.limits.clone())
60621                    .map(|r| r.map(|t| Self::MemoType(Box::new(t.0)))),
60622            ),
60623            TypeVariant::Memo => Box::new(
60624                ReadXdrIter::<_, Frame<Memo>>::new(&mut r.inner, r.limits.clone())
60625                    .map(|r| r.map(|t| Self::Memo(Box::new(t.0)))),
60626            ),
60627            TypeVariant::TimeBounds => Box::new(
60628                ReadXdrIter::<_, Frame<TimeBounds>>::new(&mut r.inner, r.limits.clone())
60629                    .map(|r| r.map(|t| Self::TimeBounds(Box::new(t.0)))),
60630            ),
60631            TypeVariant::LedgerBounds => Box::new(
60632                ReadXdrIter::<_, Frame<LedgerBounds>>::new(&mut r.inner, r.limits.clone())
60633                    .map(|r| r.map(|t| Self::LedgerBounds(Box::new(t.0)))),
60634            ),
60635            TypeVariant::PreconditionsV2 => Box::new(
60636                ReadXdrIter::<_, Frame<PreconditionsV2>>::new(&mut r.inner, r.limits.clone())
60637                    .map(|r| r.map(|t| Self::PreconditionsV2(Box::new(t.0)))),
60638            ),
60639            TypeVariant::PreconditionType => Box::new(
60640                ReadXdrIter::<_, Frame<PreconditionType>>::new(&mut r.inner, r.limits.clone())
60641                    .map(|r| r.map(|t| Self::PreconditionType(Box::new(t.0)))),
60642            ),
60643            TypeVariant::Preconditions => Box::new(
60644                ReadXdrIter::<_, Frame<Preconditions>>::new(&mut r.inner, r.limits.clone())
60645                    .map(|r| r.map(|t| Self::Preconditions(Box::new(t.0)))),
60646            ),
60647            TypeVariant::LedgerFootprint => Box::new(
60648                ReadXdrIter::<_, Frame<LedgerFootprint>>::new(&mut r.inner, r.limits.clone())
60649                    .map(|r| r.map(|t| Self::LedgerFootprint(Box::new(t.0)))),
60650            ),
60651            TypeVariant::SorobanResources => Box::new(
60652                ReadXdrIter::<_, Frame<SorobanResources>>::new(&mut r.inner, r.limits.clone())
60653                    .map(|r| r.map(|t| Self::SorobanResources(Box::new(t.0)))),
60654            ),
60655            TypeVariant::SorobanResourcesExtV0 => Box::new(
60656                ReadXdrIter::<_, Frame<SorobanResourcesExtV0>>::new(&mut r.inner, r.limits.clone())
60657                    .map(|r| r.map(|t| Self::SorobanResourcesExtV0(Box::new(t.0)))),
60658            ),
60659            TypeVariant::SorobanTransactionData => Box::new(
60660                ReadXdrIter::<_, Frame<SorobanTransactionData>>::new(
60661                    &mut r.inner,
60662                    r.limits.clone(),
60663                )
60664                .map(|r| r.map(|t| Self::SorobanTransactionData(Box::new(t.0)))),
60665            ),
60666            TypeVariant::SorobanTransactionDataExt => Box::new(
60667                ReadXdrIter::<_, Frame<SorobanTransactionDataExt>>::new(
60668                    &mut r.inner,
60669                    r.limits.clone(),
60670                )
60671                .map(|r| r.map(|t| Self::SorobanTransactionDataExt(Box::new(t.0)))),
60672            ),
60673            TypeVariant::TransactionV0 => Box::new(
60674                ReadXdrIter::<_, Frame<TransactionV0>>::new(&mut r.inner, r.limits.clone())
60675                    .map(|r| r.map(|t| Self::TransactionV0(Box::new(t.0)))),
60676            ),
60677            TypeVariant::TransactionV0Ext => Box::new(
60678                ReadXdrIter::<_, Frame<TransactionV0Ext>>::new(&mut r.inner, r.limits.clone())
60679                    .map(|r| r.map(|t| Self::TransactionV0Ext(Box::new(t.0)))),
60680            ),
60681            TypeVariant::TransactionV0Envelope => Box::new(
60682                ReadXdrIter::<_, Frame<TransactionV0Envelope>>::new(&mut r.inner, r.limits.clone())
60683                    .map(|r| r.map(|t| Self::TransactionV0Envelope(Box::new(t.0)))),
60684            ),
60685            TypeVariant::Transaction => Box::new(
60686                ReadXdrIter::<_, Frame<Transaction>>::new(&mut r.inner, r.limits.clone())
60687                    .map(|r| r.map(|t| Self::Transaction(Box::new(t.0)))),
60688            ),
60689            TypeVariant::TransactionExt => Box::new(
60690                ReadXdrIter::<_, Frame<TransactionExt>>::new(&mut r.inner, r.limits.clone())
60691                    .map(|r| r.map(|t| Self::TransactionExt(Box::new(t.0)))),
60692            ),
60693            TypeVariant::TransactionV1Envelope => Box::new(
60694                ReadXdrIter::<_, Frame<TransactionV1Envelope>>::new(&mut r.inner, r.limits.clone())
60695                    .map(|r| r.map(|t| Self::TransactionV1Envelope(Box::new(t.0)))),
60696            ),
60697            TypeVariant::FeeBumpTransaction => Box::new(
60698                ReadXdrIter::<_, Frame<FeeBumpTransaction>>::new(&mut r.inner, r.limits.clone())
60699                    .map(|r| r.map(|t| Self::FeeBumpTransaction(Box::new(t.0)))),
60700            ),
60701            TypeVariant::FeeBumpTransactionInnerTx => Box::new(
60702                ReadXdrIter::<_, Frame<FeeBumpTransactionInnerTx>>::new(
60703                    &mut r.inner,
60704                    r.limits.clone(),
60705                )
60706                .map(|r| r.map(|t| Self::FeeBumpTransactionInnerTx(Box::new(t.0)))),
60707            ),
60708            TypeVariant::FeeBumpTransactionExt => Box::new(
60709                ReadXdrIter::<_, Frame<FeeBumpTransactionExt>>::new(&mut r.inner, r.limits.clone())
60710                    .map(|r| r.map(|t| Self::FeeBumpTransactionExt(Box::new(t.0)))),
60711            ),
60712            TypeVariant::FeeBumpTransactionEnvelope => Box::new(
60713                ReadXdrIter::<_, Frame<FeeBumpTransactionEnvelope>>::new(
60714                    &mut r.inner,
60715                    r.limits.clone(),
60716                )
60717                .map(|r| r.map(|t| Self::FeeBumpTransactionEnvelope(Box::new(t.0)))),
60718            ),
60719            TypeVariant::TransactionEnvelope => Box::new(
60720                ReadXdrIter::<_, Frame<TransactionEnvelope>>::new(&mut r.inner, r.limits.clone())
60721                    .map(|r| r.map(|t| Self::TransactionEnvelope(Box::new(t.0)))),
60722            ),
60723            TypeVariant::TransactionSignaturePayload => Box::new(
60724                ReadXdrIter::<_, Frame<TransactionSignaturePayload>>::new(
60725                    &mut r.inner,
60726                    r.limits.clone(),
60727                )
60728                .map(|r| r.map(|t| Self::TransactionSignaturePayload(Box::new(t.0)))),
60729            ),
60730            TypeVariant::TransactionSignaturePayloadTaggedTransaction => Box::new(
60731                ReadXdrIter::<_, Frame<TransactionSignaturePayloadTaggedTransaction>>::new(
60732                    &mut r.inner,
60733                    r.limits.clone(),
60734                )
60735                .map(|r| {
60736                    r.map(|t| Self::TransactionSignaturePayloadTaggedTransaction(Box::new(t.0)))
60737                }),
60738            ),
60739            TypeVariant::ClaimAtomType => Box::new(
60740                ReadXdrIter::<_, Frame<ClaimAtomType>>::new(&mut r.inner, r.limits.clone())
60741                    .map(|r| r.map(|t| Self::ClaimAtomType(Box::new(t.0)))),
60742            ),
60743            TypeVariant::ClaimOfferAtomV0 => Box::new(
60744                ReadXdrIter::<_, Frame<ClaimOfferAtomV0>>::new(&mut r.inner, r.limits.clone())
60745                    .map(|r| r.map(|t| Self::ClaimOfferAtomV0(Box::new(t.0)))),
60746            ),
60747            TypeVariant::ClaimOfferAtom => Box::new(
60748                ReadXdrIter::<_, Frame<ClaimOfferAtom>>::new(&mut r.inner, r.limits.clone())
60749                    .map(|r| r.map(|t| Self::ClaimOfferAtom(Box::new(t.0)))),
60750            ),
60751            TypeVariant::ClaimLiquidityAtom => Box::new(
60752                ReadXdrIter::<_, Frame<ClaimLiquidityAtom>>::new(&mut r.inner, r.limits.clone())
60753                    .map(|r| r.map(|t| Self::ClaimLiquidityAtom(Box::new(t.0)))),
60754            ),
60755            TypeVariant::ClaimAtom => Box::new(
60756                ReadXdrIter::<_, Frame<ClaimAtom>>::new(&mut r.inner, r.limits.clone())
60757                    .map(|r| r.map(|t| Self::ClaimAtom(Box::new(t.0)))),
60758            ),
60759            TypeVariant::CreateAccountResultCode => Box::new(
60760                ReadXdrIter::<_, Frame<CreateAccountResultCode>>::new(
60761                    &mut r.inner,
60762                    r.limits.clone(),
60763                )
60764                .map(|r| r.map(|t| Self::CreateAccountResultCode(Box::new(t.0)))),
60765            ),
60766            TypeVariant::CreateAccountResult => Box::new(
60767                ReadXdrIter::<_, Frame<CreateAccountResult>>::new(&mut r.inner, r.limits.clone())
60768                    .map(|r| r.map(|t| Self::CreateAccountResult(Box::new(t.0)))),
60769            ),
60770            TypeVariant::PaymentResultCode => Box::new(
60771                ReadXdrIter::<_, Frame<PaymentResultCode>>::new(&mut r.inner, r.limits.clone())
60772                    .map(|r| r.map(|t| Self::PaymentResultCode(Box::new(t.0)))),
60773            ),
60774            TypeVariant::PaymentResult => Box::new(
60775                ReadXdrIter::<_, Frame<PaymentResult>>::new(&mut r.inner, r.limits.clone())
60776                    .map(|r| r.map(|t| Self::PaymentResult(Box::new(t.0)))),
60777            ),
60778            TypeVariant::PathPaymentStrictReceiveResultCode => Box::new(
60779                ReadXdrIter::<_, Frame<PathPaymentStrictReceiveResultCode>>::new(
60780                    &mut r.inner,
60781                    r.limits.clone(),
60782                )
60783                .map(|r| r.map(|t| Self::PathPaymentStrictReceiveResultCode(Box::new(t.0)))),
60784            ),
60785            TypeVariant::SimplePaymentResult => Box::new(
60786                ReadXdrIter::<_, Frame<SimplePaymentResult>>::new(&mut r.inner, r.limits.clone())
60787                    .map(|r| r.map(|t| Self::SimplePaymentResult(Box::new(t.0)))),
60788            ),
60789            TypeVariant::PathPaymentStrictReceiveResult => Box::new(
60790                ReadXdrIter::<_, Frame<PathPaymentStrictReceiveResult>>::new(
60791                    &mut r.inner,
60792                    r.limits.clone(),
60793                )
60794                .map(|r| r.map(|t| Self::PathPaymentStrictReceiveResult(Box::new(t.0)))),
60795            ),
60796            TypeVariant::PathPaymentStrictReceiveResultSuccess => Box::new(
60797                ReadXdrIter::<_, Frame<PathPaymentStrictReceiveResultSuccess>>::new(
60798                    &mut r.inner,
60799                    r.limits.clone(),
60800                )
60801                .map(|r| r.map(|t| Self::PathPaymentStrictReceiveResultSuccess(Box::new(t.0)))),
60802            ),
60803            TypeVariant::PathPaymentStrictSendResultCode => Box::new(
60804                ReadXdrIter::<_, Frame<PathPaymentStrictSendResultCode>>::new(
60805                    &mut r.inner,
60806                    r.limits.clone(),
60807                )
60808                .map(|r| r.map(|t| Self::PathPaymentStrictSendResultCode(Box::new(t.0)))),
60809            ),
60810            TypeVariant::PathPaymentStrictSendResult => Box::new(
60811                ReadXdrIter::<_, Frame<PathPaymentStrictSendResult>>::new(
60812                    &mut r.inner,
60813                    r.limits.clone(),
60814                )
60815                .map(|r| r.map(|t| Self::PathPaymentStrictSendResult(Box::new(t.0)))),
60816            ),
60817            TypeVariant::PathPaymentStrictSendResultSuccess => Box::new(
60818                ReadXdrIter::<_, Frame<PathPaymentStrictSendResultSuccess>>::new(
60819                    &mut r.inner,
60820                    r.limits.clone(),
60821                )
60822                .map(|r| r.map(|t| Self::PathPaymentStrictSendResultSuccess(Box::new(t.0)))),
60823            ),
60824            TypeVariant::ManageSellOfferResultCode => Box::new(
60825                ReadXdrIter::<_, Frame<ManageSellOfferResultCode>>::new(
60826                    &mut r.inner,
60827                    r.limits.clone(),
60828                )
60829                .map(|r| r.map(|t| Self::ManageSellOfferResultCode(Box::new(t.0)))),
60830            ),
60831            TypeVariant::ManageOfferEffect => Box::new(
60832                ReadXdrIter::<_, Frame<ManageOfferEffect>>::new(&mut r.inner, r.limits.clone())
60833                    .map(|r| r.map(|t| Self::ManageOfferEffect(Box::new(t.0)))),
60834            ),
60835            TypeVariant::ManageOfferSuccessResult => Box::new(
60836                ReadXdrIter::<_, Frame<ManageOfferSuccessResult>>::new(
60837                    &mut r.inner,
60838                    r.limits.clone(),
60839                )
60840                .map(|r| r.map(|t| Self::ManageOfferSuccessResult(Box::new(t.0)))),
60841            ),
60842            TypeVariant::ManageOfferSuccessResultOffer => Box::new(
60843                ReadXdrIter::<_, Frame<ManageOfferSuccessResultOffer>>::new(
60844                    &mut r.inner,
60845                    r.limits.clone(),
60846                )
60847                .map(|r| r.map(|t| Self::ManageOfferSuccessResultOffer(Box::new(t.0)))),
60848            ),
60849            TypeVariant::ManageSellOfferResult => Box::new(
60850                ReadXdrIter::<_, Frame<ManageSellOfferResult>>::new(&mut r.inner, r.limits.clone())
60851                    .map(|r| r.map(|t| Self::ManageSellOfferResult(Box::new(t.0)))),
60852            ),
60853            TypeVariant::ManageBuyOfferResultCode => Box::new(
60854                ReadXdrIter::<_, Frame<ManageBuyOfferResultCode>>::new(
60855                    &mut r.inner,
60856                    r.limits.clone(),
60857                )
60858                .map(|r| r.map(|t| Self::ManageBuyOfferResultCode(Box::new(t.0)))),
60859            ),
60860            TypeVariant::ManageBuyOfferResult => Box::new(
60861                ReadXdrIter::<_, Frame<ManageBuyOfferResult>>::new(&mut r.inner, r.limits.clone())
60862                    .map(|r| r.map(|t| Self::ManageBuyOfferResult(Box::new(t.0)))),
60863            ),
60864            TypeVariant::SetOptionsResultCode => Box::new(
60865                ReadXdrIter::<_, Frame<SetOptionsResultCode>>::new(&mut r.inner, r.limits.clone())
60866                    .map(|r| r.map(|t| Self::SetOptionsResultCode(Box::new(t.0)))),
60867            ),
60868            TypeVariant::SetOptionsResult => Box::new(
60869                ReadXdrIter::<_, Frame<SetOptionsResult>>::new(&mut r.inner, r.limits.clone())
60870                    .map(|r| r.map(|t| Self::SetOptionsResult(Box::new(t.0)))),
60871            ),
60872            TypeVariant::ChangeTrustResultCode => Box::new(
60873                ReadXdrIter::<_, Frame<ChangeTrustResultCode>>::new(&mut r.inner, r.limits.clone())
60874                    .map(|r| r.map(|t| Self::ChangeTrustResultCode(Box::new(t.0)))),
60875            ),
60876            TypeVariant::ChangeTrustResult => Box::new(
60877                ReadXdrIter::<_, Frame<ChangeTrustResult>>::new(&mut r.inner, r.limits.clone())
60878                    .map(|r| r.map(|t| Self::ChangeTrustResult(Box::new(t.0)))),
60879            ),
60880            TypeVariant::AllowTrustResultCode => Box::new(
60881                ReadXdrIter::<_, Frame<AllowTrustResultCode>>::new(&mut r.inner, r.limits.clone())
60882                    .map(|r| r.map(|t| Self::AllowTrustResultCode(Box::new(t.0)))),
60883            ),
60884            TypeVariant::AllowTrustResult => Box::new(
60885                ReadXdrIter::<_, Frame<AllowTrustResult>>::new(&mut r.inner, r.limits.clone())
60886                    .map(|r| r.map(|t| Self::AllowTrustResult(Box::new(t.0)))),
60887            ),
60888            TypeVariant::AccountMergeResultCode => Box::new(
60889                ReadXdrIter::<_, Frame<AccountMergeResultCode>>::new(
60890                    &mut r.inner,
60891                    r.limits.clone(),
60892                )
60893                .map(|r| r.map(|t| Self::AccountMergeResultCode(Box::new(t.0)))),
60894            ),
60895            TypeVariant::AccountMergeResult => Box::new(
60896                ReadXdrIter::<_, Frame<AccountMergeResult>>::new(&mut r.inner, r.limits.clone())
60897                    .map(|r| r.map(|t| Self::AccountMergeResult(Box::new(t.0)))),
60898            ),
60899            TypeVariant::InflationResultCode => Box::new(
60900                ReadXdrIter::<_, Frame<InflationResultCode>>::new(&mut r.inner, r.limits.clone())
60901                    .map(|r| r.map(|t| Self::InflationResultCode(Box::new(t.0)))),
60902            ),
60903            TypeVariant::InflationPayout => Box::new(
60904                ReadXdrIter::<_, Frame<InflationPayout>>::new(&mut r.inner, r.limits.clone())
60905                    .map(|r| r.map(|t| Self::InflationPayout(Box::new(t.0)))),
60906            ),
60907            TypeVariant::InflationResult => Box::new(
60908                ReadXdrIter::<_, Frame<InflationResult>>::new(&mut r.inner, r.limits.clone())
60909                    .map(|r| r.map(|t| Self::InflationResult(Box::new(t.0)))),
60910            ),
60911            TypeVariant::ManageDataResultCode => Box::new(
60912                ReadXdrIter::<_, Frame<ManageDataResultCode>>::new(&mut r.inner, r.limits.clone())
60913                    .map(|r| r.map(|t| Self::ManageDataResultCode(Box::new(t.0)))),
60914            ),
60915            TypeVariant::ManageDataResult => Box::new(
60916                ReadXdrIter::<_, Frame<ManageDataResult>>::new(&mut r.inner, r.limits.clone())
60917                    .map(|r| r.map(|t| Self::ManageDataResult(Box::new(t.0)))),
60918            ),
60919            TypeVariant::BumpSequenceResultCode => Box::new(
60920                ReadXdrIter::<_, Frame<BumpSequenceResultCode>>::new(
60921                    &mut r.inner,
60922                    r.limits.clone(),
60923                )
60924                .map(|r| r.map(|t| Self::BumpSequenceResultCode(Box::new(t.0)))),
60925            ),
60926            TypeVariant::BumpSequenceResult => Box::new(
60927                ReadXdrIter::<_, Frame<BumpSequenceResult>>::new(&mut r.inner, r.limits.clone())
60928                    .map(|r| r.map(|t| Self::BumpSequenceResult(Box::new(t.0)))),
60929            ),
60930            TypeVariant::CreateClaimableBalanceResultCode => Box::new(
60931                ReadXdrIter::<_, Frame<CreateClaimableBalanceResultCode>>::new(
60932                    &mut r.inner,
60933                    r.limits.clone(),
60934                )
60935                .map(|r| r.map(|t| Self::CreateClaimableBalanceResultCode(Box::new(t.0)))),
60936            ),
60937            TypeVariant::CreateClaimableBalanceResult => Box::new(
60938                ReadXdrIter::<_, Frame<CreateClaimableBalanceResult>>::new(
60939                    &mut r.inner,
60940                    r.limits.clone(),
60941                )
60942                .map(|r| r.map(|t| Self::CreateClaimableBalanceResult(Box::new(t.0)))),
60943            ),
60944            TypeVariant::ClaimClaimableBalanceResultCode => Box::new(
60945                ReadXdrIter::<_, Frame<ClaimClaimableBalanceResultCode>>::new(
60946                    &mut r.inner,
60947                    r.limits.clone(),
60948                )
60949                .map(|r| r.map(|t| Self::ClaimClaimableBalanceResultCode(Box::new(t.0)))),
60950            ),
60951            TypeVariant::ClaimClaimableBalanceResult => Box::new(
60952                ReadXdrIter::<_, Frame<ClaimClaimableBalanceResult>>::new(
60953                    &mut r.inner,
60954                    r.limits.clone(),
60955                )
60956                .map(|r| r.map(|t| Self::ClaimClaimableBalanceResult(Box::new(t.0)))),
60957            ),
60958            TypeVariant::BeginSponsoringFutureReservesResultCode => Box::new(
60959                ReadXdrIter::<_, Frame<BeginSponsoringFutureReservesResultCode>>::new(
60960                    &mut r.inner,
60961                    r.limits.clone(),
60962                )
60963                .map(|r| r.map(|t| Self::BeginSponsoringFutureReservesResultCode(Box::new(t.0)))),
60964            ),
60965            TypeVariant::BeginSponsoringFutureReservesResult => Box::new(
60966                ReadXdrIter::<_, Frame<BeginSponsoringFutureReservesResult>>::new(
60967                    &mut r.inner,
60968                    r.limits.clone(),
60969                )
60970                .map(|r| r.map(|t| Self::BeginSponsoringFutureReservesResult(Box::new(t.0)))),
60971            ),
60972            TypeVariant::EndSponsoringFutureReservesResultCode => Box::new(
60973                ReadXdrIter::<_, Frame<EndSponsoringFutureReservesResultCode>>::new(
60974                    &mut r.inner,
60975                    r.limits.clone(),
60976                )
60977                .map(|r| r.map(|t| Self::EndSponsoringFutureReservesResultCode(Box::new(t.0)))),
60978            ),
60979            TypeVariant::EndSponsoringFutureReservesResult => Box::new(
60980                ReadXdrIter::<_, Frame<EndSponsoringFutureReservesResult>>::new(
60981                    &mut r.inner,
60982                    r.limits.clone(),
60983                )
60984                .map(|r| r.map(|t| Self::EndSponsoringFutureReservesResult(Box::new(t.0)))),
60985            ),
60986            TypeVariant::RevokeSponsorshipResultCode => Box::new(
60987                ReadXdrIter::<_, Frame<RevokeSponsorshipResultCode>>::new(
60988                    &mut r.inner,
60989                    r.limits.clone(),
60990                )
60991                .map(|r| r.map(|t| Self::RevokeSponsorshipResultCode(Box::new(t.0)))),
60992            ),
60993            TypeVariant::RevokeSponsorshipResult => Box::new(
60994                ReadXdrIter::<_, Frame<RevokeSponsorshipResult>>::new(
60995                    &mut r.inner,
60996                    r.limits.clone(),
60997                )
60998                .map(|r| r.map(|t| Self::RevokeSponsorshipResult(Box::new(t.0)))),
60999            ),
61000            TypeVariant::ClawbackResultCode => Box::new(
61001                ReadXdrIter::<_, Frame<ClawbackResultCode>>::new(&mut r.inner, r.limits.clone())
61002                    .map(|r| r.map(|t| Self::ClawbackResultCode(Box::new(t.0)))),
61003            ),
61004            TypeVariant::ClawbackResult => Box::new(
61005                ReadXdrIter::<_, Frame<ClawbackResult>>::new(&mut r.inner, r.limits.clone())
61006                    .map(|r| r.map(|t| Self::ClawbackResult(Box::new(t.0)))),
61007            ),
61008            TypeVariant::ClawbackClaimableBalanceResultCode => Box::new(
61009                ReadXdrIter::<_, Frame<ClawbackClaimableBalanceResultCode>>::new(
61010                    &mut r.inner,
61011                    r.limits.clone(),
61012                )
61013                .map(|r| r.map(|t| Self::ClawbackClaimableBalanceResultCode(Box::new(t.0)))),
61014            ),
61015            TypeVariant::ClawbackClaimableBalanceResult => Box::new(
61016                ReadXdrIter::<_, Frame<ClawbackClaimableBalanceResult>>::new(
61017                    &mut r.inner,
61018                    r.limits.clone(),
61019                )
61020                .map(|r| r.map(|t| Self::ClawbackClaimableBalanceResult(Box::new(t.0)))),
61021            ),
61022            TypeVariant::SetTrustLineFlagsResultCode => Box::new(
61023                ReadXdrIter::<_, Frame<SetTrustLineFlagsResultCode>>::new(
61024                    &mut r.inner,
61025                    r.limits.clone(),
61026                )
61027                .map(|r| r.map(|t| Self::SetTrustLineFlagsResultCode(Box::new(t.0)))),
61028            ),
61029            TypeVariant::SetTrustLineFlagsResult => Box::new(
61030                ReadXdrIter::<_, Frame<SetTrustLineFlagsResult>>::new(
61031                    &mut r.inner,
61032                    r.limits.clone(),
61033                )
61034                .map(|r| r.map(|t| Self::SetTrustLineFlagsResult(Box::new(t.0)))),
61035            ),
61036            TypeVariant::LiquidityPoolDepositResultCode => Box::new(
61037                ReadXdrIter::<_, Frame<LiquidityPoolDepositResultCode>>::new(
61038                    &mut r.inner,
61039                    r.limits.clone(),
61040                )
61041                .map(|r| r.map(|t| Self::LiquidityPoolDepositResultCode(Box::new(t.0)))),
61042            ),
61043            TypeVariant::LiquidityPoolDepositResult => Box::new(
61044                ReadXdrIter::<_, Frame<LiquidityPoolDepositResult>>::new(
61045                    &mut r.inner,
61046                    r.limits.clone(),
61047                )
61048                .map(|r| r.map(|t| Self::LiquidityPoolDepositResult(Box::new(t.0)))),
61049            ),
61050            TypeVariant::LiquidityPoolWithdrawResultCode => Box::new(
61051                ReadXdrIter::<_, Frame<LiquidityPoolWithdrawResultCode>>::new(
61052                    &mut r.inner,
61053                    r.limits.clone(),
61054                )
61055                .map(|r| r.map(|t| Self::LiquidityPoolWithdrawResultCode(Box::new(t.0)))),
61056            ),
61057            TypeVariant::LiquidityPoolWithdrawResult => Box::new(
61058                ReadXdrIter::<_, Frame<LiquidityPoolWithdrawResult>>::new(
61059                    &mut r.inner,
61060                    r.limits.clone(),
61061                )
61062                .map(|r| r.map(|t| Self::LiquidityPoolWithdrawResult(Box::new(t.0)))),
61063            ),
61064            TypeVariant::InvokeHostFunctionResultCode => Box::new(
61065                ReadXdrIter::<_, Frame<InvokeHostFunctionResultCode>>::new(
61066                    &mut r.inner,
61067                    r.limits.clone(),
61068                )
61069                .map(|r| r.map(|t| Self::InvokeHostFunctionResultCode(Box::new(t.0)))),
61070            ),
61071            TypeVariant::InvokeHostFunctionResult => Box::new(
61072                ReadXdrIter::<_, Frame<InvokeHostFunctionResult>>::new(
61073                    &mut r.inner,
61074                    r.limits.clone(),
61075                )
61076                .map(|r| r.map(|t| Self::InvokeHostFunctionResult(Box::new(t.0)))),
61077            ),
61078            TypeVariant::ExtendFootprintTtlResultCode => Box::new(
61079                ReadXdrIter::<_, Frame<ExtendFootprintTtlResultCode>>::new(
61080                    &mut r.inner,
61081                    r.limits.clone(),
61082                )
61083                .map(|r| r.map(|t| Self::ExtendFootprintTtlResultCode(Box::new(t.0)))),
61084            ),
61085            TypeVariant::ExtendFootprintTtlResult => Box::new(
61086                ReadXdrIter::<_, Frame<ExtendFootprintTtlResult>>::new(
61087                    &mut r.inner,
61088                    r.limits.clone(),
61089                )
61090                .map(|r| r.map(|t| Self::ExtendFootprintTtlResult(Box::new(t.0)))),
61091            ),
61092            TypeVariant::RestoreFootprintResultCode => Box::new(
61093                ReadXdrIter::<_, Frame<RestoreFootprintResultCode>>::new(
61094                    &mut r.inner,
61095                    r.limits.clone(),
61096                )
61097                .map(|r| r.map(|t| Self::RestoreFootprintResultCode(Box::new(t.0)))),
61098            ),
61099            TypeVariant::RestoreFootprintResult => Box::new(
61100                ReadXdrIter::<_, Frame<RestoreFootprintResult>>::new(
61101                    &mut r.inner,
61102                    r.limits.clone(),
61103                )
61104                .map(|r| r.map(|t| Self::RestoreFootprintResult(Box::new(t.0)))),
61105            ),
61106            TypeVariant::OperationResultCode => Box::new(
61107                ReadXdrIter::<_, Frame<OperationResultCode>>::new(&mut r.inner, r.limits.clone())
61108                    .map(|r| r.map(|t| Self::OperationResultCode(Box::new(t.0)))),
61109            ),
61110            TypeVariant::OperationResult => Box::new(
61111                ReadXdrIter::<_, Frame<OperationResult>>::new(&mut r.inner, r.limits.clone())
61112                    .map(|r| r.map(|t| Self::OperationResult(Box::new(t.0)))),
61113            ),
61114            TypeVariant::OperationResultTr => Box::new(
61115                ReadXdrIter::<_, Frame<OperationResultTr>>::new(&mut r.inner, r.limits.clone())
61116                    .map(|r| r.map(|t| Self::OperationResultTr(Box::new(t.0)))),
61117            ),
61118            TypeVariant::TransactionResultCode => Box::new(
61119                ReadXdrIter::<_, Frame<TransactionResultCode>>::new(&mut r.inner, r.limits.clone())
61120                    .map(|r| r.map(|t| Self::TransactionResultCode(Box::new(t.0)))),
61121            ),
61122            TypeVariant::InnerTransactionResult => Box::new(
61123                ReadXdrIter::<_, Frame<InnerTransactionResult>>::new(
61124                    &mut r.inner,
61125                    r.limits.clone(),
61126                )
61127                .map(|r| r.map(|t| Self::InnerTransactionResult(Box::new(t.0)))),
61128            ),
61129            TypeVariant::InnerTransactionResultResult => Box::new(
61130                ReadXdrIter::<_, Frame<InnerTransactionResultResult>>::new(
61131                    &mut r.inner,
61132                    r.limits.clone(),
61133                )
61134                .map(|r| r.map(|t| Self::InnerTransactionResultResult(Box::new(t.0)))),
61135            ),
61136            TypeVariant::InnerTransactionResultExt => Box::new(
61137                ReadXdrIter::<_, Frame<InnerTransactionResultExt>>::new(
61138                    &mut r.inner,
61139                    r.limits.clone(),
61140                )
61141                .map(|r| r.map(|t| Self::InnerTransactionResultExt(Box::new(t.0)))),
61142            ),
61143            TypeVariant::InnerTransactionResultPair => Box::new(
61144                ReadXdrIter::<_, Frame<InnerTransactionResultPair>>::new(
61145                    &mut r.inner,
61146                    r.limits.clone(),
61147                )
61148                .map(|r| r.map(|t| Self::InnerTransactionResultPair(Box::new(t.0)))),
61149            ),
61150            TypeVariant::TransactionResult => Box::new(
61151                ReadXdrIter::<_, Frame<TransactionResult>>::new(&mut r.inner, r.limits.clone())
61152                    .map(|r| r.map(|t| Self::TransactionResult(Box::new(t.0)))),
61153            ),
61154            TypeVariant::TransactionResultResult => Box::new(
61155                ReadXdrIter::<_, Frame<TransactionResultResult>>::new(
61156                    &mut r.inner,
61157                    r.limits.clone(),
61158                )
61159                .map(|r| r.map(|t| Self::TransactionResultResult(Box::new(t.0)))),
61160            ),
61161            TypeVariant::TransactionResultExt => Box::new(
61162                ReadXdrIter::<_, Frame<TransactionResultExt>>::new(&mut r.inner, r.limits.clone())
61163                    .map(|r| r.map(|t| Self::TransactionResultExt(Box::new(t.0)))),
61164            ),
61165            TypeVariant::Hash => Box::new(
61166                ReadXdrIter::<_, Frame<Hash>>::new(&mut r.inner, r.limits.clone())
61167                    .map(|r| r.map(|t| Self::Hash(Box::new(t.0)))),
61168            ),
61169            TypeVariant::Uint256 => Box::new(
61170                ReadXdrIter::<_, Frame<Uint256>>::new(&mut r.inner, r.limits.clone())
61171                    .map(|r| r.map(|t| Self::Uint256(Box::new(t.0)))),
61172            ),
61173            TypeVariant::Uint32 => Box::new(
61174                ReadXdrIter::<_, Frame<Uint32>>::new(&mut r.inner, r.limits.clone())
61175                    .map(|r| r.map(|t| Self::Uint32(Box::new(t.0)))),
61176            ),
61177            TypeVariant::Int32 => Box::new(
61178                ReadXdrIter::<_, Frame<Int32>>::new(&mut r.inner, r.limits.clone())
61179                    .map(|r| r.map(|t| Self::Int32(Box::new(t.0)))),
61180            ),
61181            TypeVariant::Uint64 => Box::new(
61182                ReadXdrIter::<_, Frame<Uint64>>::new(&mut r.inner, r.limits.clone())
61183                    .map(|r| r.map(|t| Self::Uint64(Box::new(t.0)))),
61184            ),
61185            TypeVariant::Int64 => Box::new(
61186                ReadXdrIter::<_, Frame<Int64>>::new(&mut r.inner, r.limits.clone())
61187                    .map(|r| r.map(|t| Self::Int64(Box::new(t.0)))),
61188            ),
61189            TypeVariant::TimePoint => Box::new(
61190                ReadXdrIter::<_, Frame<TimePoint>>::new(&mut r.inner, r.limits.clone())
61191                    .map(|r| r.map(|t| Self::TimePoint(Box::new(t.0)))),
61192            ),
61193            TypeVariant::Duration => Box::new(
61194                ReadXdrIter::<_, Frame<Duration>>::new(&mut r.inner, r.limits.clone())
61195                    .map(|r| r.map(|t| Self::Duration(Box::new(t.0)))),
61196            ),
61197            TypeVariant::ExtensionPoint => Box::new(
61198                ReadXdrIter::<_, Frame<ExtensionPoint>>::new(&mut r.inner, r.limits.clone())
61199                    .map(|r| r.map(|t| Self::ExtensionPoint(Box::new(t.0)))),
61200            ),
61201            TypeVariant::CryptoKeyType => Box::new(
61202                ReadXdrIter::<_, Frame<CryptoKeyType>>::new(&mut r.inner, r.limits.clone())
61203                    .map(|r| r.map(|t| Self::CryptoKeyType(Box::new(t.0)))),
61204            ),
61205            TypeVariant::PublicKeyType => Box::new(
61206                ReadXdrIter::<_, Frame<PublicKeyType>>::new(&mut r.inner, r.limits.clone())
61207                    .map(|r| r.map(|t| Self::PublicKeyType(Box::new(t.0)))),
61208            ),
61209            TypeVariant::SignerKeyType => Box::new(
61210                ReadXdrIter::<_, Frame<SignerKeyType>>::new(&mut r.inner, r.limits.clone())
61211                    .map(|r| r.map(|t| Self::SignerKeyType(Box::new(t.0)))),
61212            ),
61213            TypeVariant::PublicKey => Box::new(
61214                ReadXdrIter::<_, Frame<PublicKey>>::new(&mut r.inner, r.limits.clone())
61215                    .map(|r| r.map(|t| Self::PublicKey(Box::new(t.0)))),
61216            ),
61217            TypeVariant::SignerKey => Box::new(
61218                ReadXdrIter::<_, Frame<SignerKey>>::new(&mut r.inner, r.limits.clone())
61219                    .map(|r| r.map(|t| Self::SignerKey(Box::new(t.0)))),
61220            ),
61221            TypeVariant::SignerKeyEd25519SignedPayload => Box::new(
61222                ReadXdrIter::<_, Frame<SignerKeyEd25519SignedPayload>>::new(
61223                    &mut r.inner,
61224                    r.limits.clone(),
61225                )
61226                .map(|r| r.map(|t| Self::SignerKeyEd25519SignedPayload(Box::new(t.0)))),
61227            ),
61228            TypeVariant::Signature => Box::new(
61229                ReadXdrIter::<_, Frame<Signature>>::new(&mut r.inner, r.limits.clone())
61230                    .map(|r| r.map(|t| Self::Signature(Box::new(t.0)))),
61231            ),
61232            TypeVariant::SignatureHint => Box::new(
61233                ReadXdrIter::<_, Frame<SignatureHint>>::new(&mut r.inner, r.limits.clone())
61234                    .map(|r| r.map(|t| Self::SignatureHint(Box::new(t.0)))),
61235            ),
61236            TypeVariant::NodeId => Box::new(
61237                ReadXdrIter::<_, Frame<NodeId>>::new(&mut r.inner, r.limits.clone())
61238                    .map(|r| r.map(|t| Self::NodeId(Box::new(t.0)))),
61239            ),
61240            TypeVariant::AccountId => Box::new(
61241                ReadXdrIter::<_, Frame<AccountId>>::new(&mut r.inner, r.limits.clone())
61242                    .map(|r| r.map(|t| Self::AccountId(Box::new(t.0)))),
61243            ),
61244            TypeVariant::ContractId => Box::new(
61245                ReadXdrIter::<_, Frame<ContractId>>::new(&mut r.inner, r.limits.clone())
61246                    .map(|r| r.map(|t| Self::ContractId(Box::new(t.0)))),
61247            ),
61248            TypeVariant::Curve25519Secret => Box::new(
61249                ReadXdrIter::<_, Frame<Curve25519Secret>>::new(&mut r.inner, r.limits.clone())
61250                    .map(|r| r.map(|t| Self::Curve25519Secret(Box::new(t.0)))),
61251            ),
61252            TypeVariant::Curve25519Public => Box::new(
61253                ReadXdrIter::<_, Frame<Curve25519Public>>::new(&mut r.inner, r.limits.clone())
61254                    .map(|r| r.map(|t| Self::Curve25519Public(Box::new(t.0)))),
61255            ),
61256            TypeVariant::HmacSha256Key => Box::new(
61257                ReadXdrIter::<_, Frame<HmacSha256Key>>::new(&mut r.inner, r.limits.clone())
61258                    .map(|r| r.map(|t| Self::HmacSha256Key(Box::new(t.0)))),
61259            ),
61260            TypeVariant::HmacSha256Mac => Box::new(
61261                ReadXdrIter::<_, Frame<HmacSha256Mac>>::new(&mut r.inner, r.limits.clone())
61262                    .map(|r| r.map(|t| Self::HmacSha256Mac(Box::new(t.0)))),
61263            ),
61264            TypeVariant::ShortHashSeed => Box::new(
61265                ReadXdrIter::<_, Frame<ShortHashSeed>>::new(&mut r.inner, r.limits.clone())
61266                    .map(|r| r.map(|t| Self::ShortHashSeed(Box::new(t.0)))),
61267            ),
61268            TypeVariant::BinaryFuseFilterType => Box::new(
61269                ReadXdrIter::<_, Frame<BinaryFuseFilterType>>::new(&mut r.inner, r.limits.clone())
61270                    .map(|r| r.map(|t| Self::BinaryFuseFilterType(Box::new(t.0)))),
61271            ),
61272            TypeVariant::SerializedBinaryFuseFilter => Box::new(
61273                ReadXdrIter::<_, Frame<SerializedBinaryFuseFilter>>::new(
61274                    &mut r.inner,
61275                    r.limits.clone(),
61276                )
61277                .map(|r| r.map(|t| Self::SerializedBinaryFuseFilter(Box::new(t.0)))),
61278            ),
61279            TypeVariant::PoolId => Box::new(
61280                ReadXdrIter::<_, Frame<PoolId>>::new(&mut r.inner, r.limits.clone())
61281                    .map(|r| r.map(|t| Self::PoolId(Box::new(t.0)))),
61282            ),
61283            TypeVariant::ClaimableBalanceIdType => Box::new(
61284                ReadXdrIter::<_, Frame<ClaimableBalanceIdType>>::new(
61285                    &mut r.inner,
61286                    r.limits.clone(),
61287                )
61288                .map(|r| r.map(|t| Self::ClaimableBalanceIdType(Box::new(t.0)))),
61289            ),
61290            TypeVariant::ClaimableBalanceId => Box::new(
61291                ReadXdrIter::<_, Frame<ClaimableBalanceId>>::new(&mut r.inner, r.limits.clone())
61292                    .map(|r| r.map(|t| Self::ClaimableBalanceId(Box::new(t.0)))),
61293            ),
61294        }
61295    }
61296
61297    #[cfg(feature = "base64")]
61298    #[allow(clippy::too_many_lines)]
61299    pub fn read_xdr_base64_iter<R: Read>(
61300        v: TypeVariant,
61301        r: &mut Limited<R>,
61302    ) -> Box<dyn Iterator<Item = Result<Self, Error>> + '_> {
61303        let dec = base64::read::DecoderReader::new(
61304            SkipWhitespace::new(&mut r.inner),
61305            &base64::engine::general_purpose::STANDARD,
61306        );
61307        match v {
61308            TypeVariant::Value => Box::new(
61309                ReadXdrIter::<_, Value>::new(dec, r.limits.clone())
61310                    .map(|r| r.map(|t| Self::Value(Box::new(t)))),
61311            ),
61312            TypeVariant::ScpBallot => Box::new(
61313                ReadXdrIter::<_, ScpBallot>::new(dec, r.limits.clone())
61314                    .map(|r| r.map(|t| Self::ScpBallot(Box::new(t)))),
61315            ),
61316            TypeVariant::ScpStatementType => Box::new(
61317                ReadXdrIter::<_, ScpStatementType>::new(dec, r.limits.clone())
61318                    .map(|r| r.map(|t| Self::ScpStatementType(Box::new(t)))),
61319            ),
61320            TypeVariant::ScpNomination => Box::new(
61321                ReadXdrIter::<_, ScpNomination>::new(dec, r.limits.clone())
61322                    .map(|r| r.map(|t| Self::ScpNomination(Box::new(t)))),
61323            ),
61324            TypeVariant::ScpStatement => Box::new(
61325                ReadXdrIter::<_, ScpStatement>::new(dec, r.limits.clone())
61326                    .map(|r| r.map(|t| Self::ScpStatement(Box::new(t)))),
61327            ),
61328            TypeVariant::ScpStatementPledges => Box::new(
61329                ReadXdrIter::<_, ScpStatementPledges>::new(dec, r.limits.clone())
61330                    .map(|r| r.map(|t| Self::ScpStatementPledges(Box::new(t)))),
61331            ),
61332            TypeVariant::ScpStatementPrepare => Box::new(
61333                ReadXdrIter::<_, ScpStatementPrepare>::new(dec, r.limits.clone())
61334                    .map(|r| r.map(|t| Self::ScpStatementPrepare(Box::new(t)))),
61335            ),
61336            TypeVariant::ScpStatementConfirm => Box::new(
61337                ReadXdrIter::<_, ScpStatementConfirm>::new(dec, r.limits.clone())
61338                    .map(|r| r.map(|t| Self::ScpStatementConfirm(Box::new(t)))),
61339            ),
61340            TypeVariant::ScpStatementExternalize => Box::new(
61341                ReadXdrIter::<_, ScpStatementExternalize>::new(dec, r.limits.clone())
61342                    .map(|r| r.map(|t| Self::ScpStatementExternalize(Box::new(t)))),
61343            ),
61344            TypeVariant::ScpEnvelope => Box::new(
61345                ReadXdrIter::<_, ScpEnvelope>::new(dec, r.limits.clone())
61346                    .map(|r| r.map(|t| Self::ScpEnvelope(Box::new(t)))),
61347            ),
61348            TypeVariant::ScpQuorumSet => Box::new(
61349                ReadXdrIter::<_, ScpQuorumSet>::new(dec, r.limits.clone())
61350                    .map(|r| r.map(|t| Self::ScpQuorumSet(Box::new(t)))),
61351            ),
61352            TypeVariant::ConfigSettingContractExecutionLanesV0 => Box::new(
61353                ReadXdrIter::<_, ConfigSettingContractExecutionLanesV0>::new(dec, r.limits.clone())
61354                    .map(|r| r.map(|t| Self::ConfigSettingContractExecutionLanesV0(Box::new(t)))),
61355            ),
61356            TypeVariant::ConfigSettingContractComputeV0 => Box::new(
61357                ReadXdrIter::<_, ConfigSettingContractComputeV0>::new(dec, r.limits.clone())
61358                    .map(|r| r.map(|t| Self::ConfigSettingContractComputeV0(Box::new(t)))),
61359            ),
61360            TypeVariant::ConfigSettingContractParallelComputeV0 => Box::new(
61361                ReadXdrIter::<_, ConfigSettingContractParallelComputeV0>::new(
61362                    dec,
61363                    r.limits.clone(),
61364                )
61365                .map(|r| r.map(|t| Self::ConfigSettingContractParallelComputeV0(Box::new(t)))),
61366            ),
61367            TypeVariant::ConfigSettingContractLedgerCostV0 => Box::new(
61368                ReadXdrIter::<_, ConfigSettingContractLedgerCostV0>::new(dec, r.limits.clone())
61369                    .map(|r| r.map(|t| Self::ConfigSettingContractLedgerCostV0(Box::new(t)))),
61370            ),
61371            TypeVariant::ConfigSettingContractLedgerCostExtV0 => Box::new(
61372                ReadXdrIter::<_, ConfigSettingContractLedgerCostExtV0>::new(dec, r.limits.clone())
61373                    .map(|r| r.map(|t| Self::ConfigSettingContractLedgerCostExtV0(Box::new(t)))),
61374            ),
61375            TypeVariant::ConfigSettingContractHistoricalDataV0 => Box::new(
61376                ReadXdrIter::<_, ConfigSettingContractHistoricalDataV0>::new(dec, r.limits.clone())
61377                    .map(|r| r.map(|t| Self::ConfigSettingContractHistoricalDataV0(Box::new(t)))),
61378            ),
61379            TypeVariant::ConfigSettingContractEventsV0 => Box::new(
61380                ReadXdrIter::<_, ConfigSettingContractEventsV0>::new(dec, r.limits.clone())
61381                    .map(|r| r.map(|t| Self::ConfigSettingContractEventsV0(Box::new(t)))),
61382            ),
61383            TypeVariant::ConfigSettingContractBandwidthV0 => Box::new(
61384                ReadXdrIter::<_, ConfigSettingContractBandwidthV0>::new(dec, r.limits.clone())
61385                    .map(|r| r.map(|t| Self::ConfigSettingContractBandwidthV0(Box::new(t)))),
61386            ),
61387            TypeVariant::ContractCostType => Box::new(
61388                ReadXdrIter::<_, ContractCostType>::new(dec, r.limits.clone())
61389                    .map(|r| r.map(|t| Self::ContractCostType(Box::new(t)))),
61390            ),
61391            TypeVariant::ContractCostParamEntry => Box::new(
61392                ReadXdrIter::<_, ContractCostParamEntry>::new(dec, r.limits.clone())
61393                    .map(|r| r.map(|t| Self::ContractCostParamEntry(Box::new(t)))),
61394            ),
61395            TypeVariant::StateArchivalSettings => Box::new(
61396                ReadXdrIter::<_, StateArchivalSettings>::new(dec, r.limits.clone())
61397                    .map(|r| r.map(|t| Self::StateArchivalSettings(Box::new(t)))),
61398            ),
61399            TypeVariant::EvictionIterator => Box::new(
61400                ReadXdrIter::<_, EvictionIterator>::new(dec, r.limits.clone())
61401                    .map(|r| r.map(|t| Self::EvictionIterator(Box::new(t)))),
61402            ),
61403            TypeVariant::ConfigSettingScpTiming => Box::new(
61404                ReadXdrIter::<_, ConfigSettingScpTiming>::new(dec, r.limits.clone())
61405                    .map(|r| r.map(|t| Self::ConfigSettingScpTiming(Box::new(t)))),
61406            ),
61407            TypeVariant::ContractCostParams => Box::new(
61408                ReadXdrIter::<_, ContractCostParams>::new(dec, r.limits.clone())
61409                    .map(|r| r.map(|t| Self::ContractCostParams(Box::new(t)))),
61410            ),
61411            TypeVariant::ConfigSettingId => Box::new(
61412                ReadXdrIter::<_, ConfigSettingId>::new(dec, r.limits.clone())
61413                    .map(|r| r.map(|t| Self::ConfigSettingId(Box::new(t)))),
61414            ),
61415            TypeVariant::ConfigSettingEntry => Box::new(
61416                ReadXdrIter::<_, ConfigSettingEntry>::new(dec, r.limits.clone())
61417                    .map(|r| r.map(|t| Self::ConfigSettingEntry(Box::new(t)))),
61418            ),
61419            TypeVariant::ScEnvMetaKind => Box::new(
61420                ReadXdrIter::<_, ScEnvMetaKind>::new(dec, r.limits.clone())
61421                    .map(|r| r.map(|t| Self::ScEnvMetaKind(Box::new(t)))),
61422            ),
61423            TypeVariant::ScEnvMetaEntry => Box::new(
61424                ReadXdrIter::<_, ScEnvMetaEntry>::new(dec, r.limits.clone())
61425                    .map(|r| r.map(|t| Self::ScEnvMetaEntry(Box::new(t)))),
61426            ),
61427            TypeVariant::ScEnvMetaEntryInterfaceVersion => Box::new(
61428                ReadXdrIter::<_, ScEnvMetaEntryInterfaceVersion>::new(dec, r.limits.clone())
61429                    .map(|r| r.map(|t| Self::ScEnvMetaEntryInterfaceVersion(Box::new(t)))),
61430            ),
61431            TypeVariant::ScMetaV0 => Box::new(
61432                ReadXdrIter::<_, ScMetaV0>::new(dec, r.limits.clone())
61433                    .map(|r| r.map(|t| Self::ScMetaV0(Box::new(t)))),
61434            ),
61435            TypeVariant::ScMetaKind => Box::new(
61436                ReadXdrIter::<_, ScMetaKind>::new(dec, r.limits.clone())
61437                    .map(|r| r.map(|t| Self::ScMetaKind(Box::new(t)))),
61438            ),
61439            TypeVariant::ScMetaEntry => Box::new(
61440                ReadXdrIter::<_, ScMetaEntry>::new(dec, r.limits.clone())
61441                    .map(|r| r.map(|t| Self::ScMetaEntry(Box::new(t)))),
61442            ),
61443            TypeVariant::ScSpecType => Box::new(
61444                ReadXdrIter::<_, ScSpecType>::new(dec, r.limits.clone())
61445                    .map(|r| r.map(|t| Self::ScSpecType(Box::new(t)))),
61446            ),
61447            TypeVariant::ScSpecTypeOption => Box::new(
61448                ReadXdrIter::<_, ScSpecTypeOption>::new(dec, r.limits.clone())
61449                    .map(|r| r.map(|t| Self::ScSpecTypeOption(Box::new(t)))),
61450            ),
61451            TypeVariant::ScSpecTypeResult => Box::new(
61452                ReadXdrIter::<_, ScSpecTypeResult>::new(dec, r.limits.clone())
61453                    .map(|r| r.map(|t| Self::ScSpecTypeResult(Box::new(t)))),
61454            ),
61455            TypeVariant::ScSpecTypeVec => Box::new(
61456                ReadXdrIter::<_, ScSpecTypeVec>::new(dec, r.limits.clone())
61457                    .map(|r| r.map(|t| Self::ScSpecTypeVec(Box::new(t)))),
61458            ),
61459            TypeVariant::ScSpecTypeMap => Box::new(
61460                ReadXdrIter::<_, ScSpecTypeMap>::new(dec, r.limits.clone())
61461                    .map(|r| r.map(|t| Self::ScSpecTypeMap(Box::new(t)))),
61462            ),
61463            TypeVariant::ScSpecTypeTuple => Box::new(
61464                ReadXdrIter::<_, ScSpecTypeTuple>::new(dec, r.limits.clone())
61465                    .map(|r| r.map(|t| Self::ScSpecTypeTuple(Box::new(t)))),
61466            ),
61467            TypeVariant::ScSpecTypeBytesN => Box::new(
61468                ReadXdrIter::<_, ScSpecTypeBytesN>::new(dec, r.limits.clone())
61469                    .map(|r| r.map(|t| Self::ScSpecTypeBytesN(Box::new(t)))),
61470            ),
61471            TypeVariant::ScSpecTypeUdt => Box::new(
61472                ReadXdrIter::<_, ScSpecTypeUdt>::new(dec, r.limits.clone())
61473                    .map(|r| r.map(|t| Self::ScSpecTypeUdt(Box::new(t)))),
61474            ),
61475            TypeVariant::ScSpecTypeDef => Box::new(
61476                ReadXdrIter::<_, ScSpecTypeDef>::new(dec, r.limits.clone())
61477                    .map(|r| r.map(|t| Self::ScSpecTypeDef(Box::new(t)))),
61478            ),
61479            TypeVariant::ScSpecUdtStructFieldV0 => Box::new(
61480                ReadXdrIter::<_, ScSpecUdtStructFieldV0>::new(dec, r.limits.clone())
61481                    .map(|r| r.map(|t| Self::ScSpecUdtStructFieldV0(Box::new(t)))),
61482            ),
61483            TypeVariant::ScSpecUdtStructV0 => Box::new(
61484                ReadXdrIter::<_, ScSpecUdtStructV0>::new(dec, r.limits.clone())
61485                    .map(|r| r.map(|t| Self::ScSpecUdtStructV0(Box::new(t)))),
61486            ),
61487            TypeVariant::ScSpecUdtUnionCaseVoidV0 => Box::new(
61488                ReadXdrIter::<_, ScSpecUdtUnionCaseVoidV0>::new(dec, r.limits.clone())
61489                    .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseVoidV0(Box::new(t)))),
61490            ),
61491            TypeVariant::ScSpecUdtUnionCaseTupleV0 => Box::new(
61492                ReadXdrIter::<_, ScSpecUdtUnionCaseTupleV0>::new(dec, r.limits.clone())
61493                    .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseTupleV0(Box::new(t)))),
61494            ),
61495            TypeVariant::ScSpecUdtUnionCaseV0Kind => Box::new(
61496                ReadXdrIter::<_, ScSpecUdtUnionCaseV0Kind>::new(dec, r.limits.clone())
61497                    .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseV0Kind(Box::new(t)))),
61498            ),
61499            TypeVariant::ScSpecUdtUnionCaseV0 => Box::new(
61500                ReadXdrIter::<_, ScSpecUdtUnionCaseV0>::new(dec, r.limits.clone())
61501                    .map(|r| r.map(|t| Self::ScSpecUdtUnionCaseV0(Box::new(t)))),
61502            ),
61503            TypeVariant::ScSpecUdtUnionV0 => Box::new(
61504                ReadXdrIter::<_, ScSpecUdtUnionV0>::new(dec, r.limits.clone())
61505                    .map(|r| r.map(|t| Self::ScSpecUdtUnionV0(Box::new(t)))),
61506            ),
61507            TypeVariant::ScSpecUdtEnumCaseV0 => Box::new(
61508                ReadXdrIter::<_, ScSpecUdtEnumCaseV0>::new(dec, r.limits.clone())
61509                    .map(|r| r.map(|t| Self::ScSpecUdtEnumCaseV0(Box::new(t)))),
61510            ),
61511            TypeVariant::ScSpecUdtEnumV0 => Box::new(
61512                ReadXdrIter::<_, ScSpecUdtEnumV0>::new(dec, r.limits.clone())
61513                    .map(|r| r.map(|t| Self::ScSpecUdtEnumV0(Box::new(t)))),
61514            ),
61515            TypeVariant::ScSpecUdtErrorEnumCaseV0 => Box::new(
61516                ReadXdrIter::<_, ScSpecUdtErrorEnumCaseV0>::new(dec, r.limits.clone())
61517                    .map(|r| r.map(|t| Self::ScSpecUdtErrorEnumCaseV0(Box::new(t)))),
61518            ),
61519            TypeVariant::ScSpecUdtErrorEnumV0 => Box::new(
61520                ReadXdrIter::<_, ScSpecUdtErrorEnumV0>::new(dec, r.limits.clone())
61521                    .map(|r| r.map(|t| Self::ScSpecUdtErrorEnumV0(Box::new(t)))),
61522            ),
61523            TypeVariant::ScSpecFunctionInputV0 => Box::new(
61524                ReadXdrIter::<_, ScSpecFunctionInputV0>::new(dec, r.limits.clone())
61525                    .map(|r| r.map(|t| Self::ScSpecFunctionInputV0(Box::new(t)))),
61526            ),
61527            TypeVariant::ScSpecFunctionV0 => Box::new(
61528                ReadXdrIter::<_, ScSpecFunctionV0>::new(dec, r.limits.clone())
61529                    .map(|r| r.map(|t| Self::ScSpecFunctionV0(Box::new(t)))),
61530            ),
61531            TypeVariant::ScSpecEventParamLocationV0 => Box::new(
61532                ReadXdrIter::<_, ScSpecEventParamLocationV0>::new(dec, r.limits.clone())
61533                    .map(|r| r.map(|t| Self::ScSpecEventParamLocationV0(Box::new(t)))),
61534            ),
61535            TypeVariant::ScSpecEventParamV0 => Box::new(
61536                ReadXdrIter::<_, ScSpecEventParamV0>::new(dec, r.limits.clone())
61537                    .map(|r| r.map(|t| Self::ScSpecEventParamV0(Box::new(t)))),
61538            ),
61539            TypeVariant::ScSpecEventDataFormat => Box::new(
61540                ReadXdrIter::<_, ScSpecEventDataFormat>::new(dec, r.limits.clone())
61541                    .map(|r| r.map(|t| Self::ScSpecEventDataFormat(Box::new(t)))),
61542            ),
61543            TypeVariant::ScSpecEventV0 => Box::new(
61544                ReadXdrIter::<_, ScSpecEventV0>::new(dec, r.limits.clone())
61545                    .map(|r| r.map(|t| Self::ScSpecEventV0(Box::new(t)))),
61546            ),
61547            TypeVariant::ScSpecEntryKind => Box::new(
61548                ReadXdrIter::<_, ScSpecEntryKind>::new(dec, r.limits.clone())
61549                    .map(|r| r.map(|t| Self::ScSpecEntryKind(Box::new(t)))),
61550            ),
61551            TypeVariant::ScSpecEntry => Box::new(
61552                ReadXdrIter::<_, ScSpecEntry>::new(dec, r.limits.clone())
61553                    .map(|r| r.map(|t| Self::ScSpecEntry(Box::new(t)))),
61554            ),
61555            TypeVariant::ScValType => Box::new(
61556                ReadXdrIter::<_, ScValType>::new(dec, r.limits.clone())
61557                    .map(|r| r.map(|t| Self::ScValType(Box::new(t)))),
61558            ),
61559            TypeVariant::ScErrorType => Box::new(
61560                ReadXdrIter::<_, ScErrorType>::new(dec, r.limits.clone())
61561                    .map(|r| r.map(|t| Self::ScErrorType(Box::new(t)))),
61562            ),
61563            TypeVariant::ScErrorCode => Box::new(
61564                ReadXdrIter::<_, ScErrorCode>::new(dec, r.limits.clone())
61565                    .map(|r| r.map(|t| Self::ScErrorCode(Box::new(t)))),
61566            ),
61567            TypeVariant::ScError => Box::new(
61568                ReadXdrIter::<_, ScError>::new(dec, r.limits.clone())
61569                    .map(|r| r.map(|t| Self::ScError(Box::new(t)))),
61570            ),
61571            TypeVariant::UInt128Parts => Box::new(
61572                ReadXdrIter::<_, UInt128Parts>::new(dec, r.limits.clone())
61573                    .map(|r| r.map(|t| Self::UInt128Parts(Box::new(t)))),
61574            ),
61575            TypeVariant::Int128Parts => Box::new(
61576                ReadXdrIter::<_, Int128Parts>::new(dec, r.limits.clone())
61577                    .map(|r| r.map(|t| Self::Int128Parts(Box::new(t)))),
61578            ),
61579            TypeVariant::UInt256Parts => Box::new(
61580                ReadXdrIter::<_, UInt256Parts>::new(dec, r.limits.clone())
61581                    .map(|r| r.map(|t| Self::UInt256Parts(Box::new(t)))),
61582            ),
61583            TypeVariant::Int256Parts => Box::new(
61584                ReadXdrIter::<_, Int256Parts>::new(dec, r.limits.clone())
61585                    .map(|r| r.map(|t| Self::Int256Parts(Box::new(t)))),
61586            ),
61587            TypeVariant::ContractExecutableType => Box::new(
61588                ReadXdrIter::<_, ContractExecutableType>::new(dec, r.limits.clone())
61589                    .map(|r| r.map(|t| Self::ContractExecutableType(Box::new(t)))),
61590            ),
61591            TypeVariant::ContractExecutable => Box::new(
61592                ReadXdrIter::<_, ContractExecutable>::new(dec, r.limits.clone())
61593                    .map(|r| r.map(|t| Self::ContractExecutable(Box::new(t)))),
61594            ),
61595            TypeVariant::ScAddressType => Box::new(
61596                ReadXdrIter::<_, ScAddressType>::new(dec, r.limits.clone())
61597                    .map(|r| r.map(|t| Self::ScAddressType(Box::new(t)))),
61598            ),
61599            TypeVariant::MuxedEd25519Account => Box::new(
61600                ReadXdrIter::<_, MuxedEd25519Account>::new(dec, r.limits.clone())
61601                    .map(|r| r.map(|t| Self::MuxedEd25519Account(Box::new(t)))),
61602            ),
61603            TypeVariant::ScAddress => Box::new(
61604                ReadXdrIter::<_, ScAddress>::new(dec, r.limits.clone())
61605                    .map(|r| r.map(|t| Self::ScAddress(Box::new(t)))),
61606            ),
61607            TypeVariant::ScVec => Box::new(
61608                ReadXdrIter::<_, ScVec>::new(dec, r.limits.clone())
61609                    .map(|r| r.map(|t| Self::ScVec(Box::new(t)))),
61610            ),
61611            TypeVariant::ScMap => Box::new(
61612                ReadXdrIter::<_, ScMap>::new(dec, r.limits.clone())
61613                    .map(|r| r.map(|t| Self::ScMap(Box::new(t)))),
61614            ),
61615            TypeVariant::ScBytes => Box::new(
61616                ReadXdrIter::<_, ScBytes>::new(dec, r.limits.clone())
61617                    .map(|r| r.map(|t| Self::ScBytes(Box::new(t)))),
61618            ),
61619            TypeVariant::ScString => Box::new(
61620                ReadXdrIter::<_, ScString>::new(dec, r.limits.clone())
61621                    .map(|r| r.map(|t| Self::ScString(Box::new(t)))),
61622            ),
61623            TypeVariant::ScSymbol => Box::new(
61624                ReadXdrIter::<_, ScSymbol>::new(dec, r.limits.clone())
61625                    .map(|r| r.map(|t| Self::ScSymbol(Box::new(t)))),
61626            ),
61627            TypeVariant::ScNonceKey => Box::new(
61628                ReadXdrIter::<_, ScNonceKey>::new(dec, r.limits.clone())
61629                    .map(|r| r.map(|t| Self::ScNonceKey(Box::new(t)))),
61630            ),
61631            TypeVariant::ScContractInstance => Box::new(
61632                ReadXdrIter::<_, ScContractInstance>::new(dec, r.limits.clone())
61633                    .map(|r| r.map(|t| Self::ScContractInstance(Box::new(t)))),
61634            ),
61635            TypeVariant::ScVal => Box::new(
61636                ReadXdrIter::<_, ScVal>::new(dec, r.limits.clone())
61637                    .map(|r| r.map(|t| Self::ScVal(Box::new(t)))),
61638            ),
61639            TypeVariant::ScMapEntry => Box::new(
61640                ReadXdrIter::<_, ScMapEntry>::new(dec, r.limits.clone())
61641                    .map(|r| r.map(|t| Self::ScMapEntry(Box::new(t)))),
61642            ),
61643            TypeVariant::LedgerCloseMetaBatch => Box::new(
61644                ReadXdrIter::<_, LedgerCloseMetaBatch>::new(dec, r.limits.clone())
61645                    .map(|r| r.map(|t| Self::LedgerCloseMetaBatch(Box::new(t)))),
61646            ),
61647            TypeVariant::StoredTransactionSet => Box::new(
61648                ReadXdrIter::<_, StoredTransactionSet>::new(dec, r.limits.clone())
61649                    .map(|r| r.map(|t| Self::StoredTransactionSet(Box::new(t)))),
61650            ),
61651            TypeVariant::StoredDebugTransactionSet => Box::new(
61652                ReadXdrIter::<_, StoredDebugTransactionSet>::new(dec, r.limits.clone())
61653                    .map(|r| r.map(|t| Self::StoredDebugTransactionSet(Box::new(t)))),
61654            ),
61655            TypeVariant::PersistedScpStateV0 => Box::new(
61656                ReadXdrIter::<_, PersistedScpStateV0>::new(dec, r.limits.clone())
61657                    .map(|r| r.map(|t| Self::PersistedScpStateV0(Box::new(t)))),
61658            ),
61659            TypeVariant::PersistedScpStateV1 => Box::new(
61660                ReadXdrIter::<_, PersistedScpStateV1>::new(dec, r.limits.clone())
61661                    .map(|r| r.map(|t| Self::PersistedScpStateV1(Box::new(t)))),
61662            ),
61663            TypeVariant::PersistedScpState => Box::new(
61664                ReadXdrIter::<_, PersistedScpState>::new(dec, r.limits.clone())
61665                    .map(|r| r.map(|t| Self::PersistedScpState(Box::new(t)))),
61666            ),
61667            TypeVariant::Thresholds => Box::new(
61668                ReadXdrIter::<_, Thresholds>::new(dec, r.limits.clone())
61669                    .map(|r| r.map(|t| Self::Thresholds(Box::new(t)))),
61670            ),
61671            TypeVariant::String32 => Box::new(
61672                ReadXdrIter::<_, String32>::new(dec, r.limits.clone())
61673                    .map(|r| r.map(|t| Self::String32(Box::new(t)))),
61674            ),
61675            TypeVariant::String64 => Box::new(
61676                ReadXdrIter::<_, String64>::new(dec, r.limits.clone())
61677                    .map(|r| r.map(|t| Self::String64(Box::new(t)))),
61678            ),
61679            TypeVariant::SequenceNumber => Box::new(
61680                ReadXdrIter::<_, SequenceNumber>::new(dec, r.limits.clone())
61681                    .map(|r| r.map(|t| Self::SequenceNumber(Box::new(t)))),
61682            ),
61683            TypeVariant::DataValue => Box::new(
61684                ReadXdrIter::<_, DataValue>::new(dec, r.limits.clone())
61685                    .map(|r| r.map(|t| Self::DataValue(Box::new(t)))),
61686            ),
61687            TypeVariant::AssetCode4 => Box::new(
61688                ReadXdrIter::<_, AssetCode4>::new(dec, r.limits.clone())
61689                    .map(|r| r.map(|t| Self::AssetCode4(Box::new(t)))),
61690            ),
61691            TypeVariant::AssetCode12 => Box::new(
61692                ReadXdrIter::<_, AssetCode12>::new(dec, r.limits.clone())
61693                    .map(|r| r.map(|t| Self::AssetCode12(Box::new(t)))),
61694            ),
61695            TypeVariant::AssetType => Box::new(
61696                ReadXdrIter::<_, AssetType>::new(dec, r.limits.clone())
61697                    .map(|r| r.map(|t| Self::AssetType(Box::new(t)))),
61698            ),
61699            TypeVariant::AssetCode => Box::new(
61700                ReadXdrIter::<_, AssetCode>::new(dec, r.limits.clone())
61701                    .map(|r| r.map(|t| Self::AssetCode(Box::new(t)))),
61702            ),
61703            TypeVariant::AlphaNum4 => Box::new(
61704                ReadXdrIter::<_, AlphaNum4>::new(dec, r.limits.clone())
61705                    .map(|r| r.map(|t| Self::AlphaNum4(Box::new(t)))),
61706            ),
61707            TypeVariant::AlphaNum12 => Box::new(
61708                ReadXdrIter::<_, AlphaNum12>::new(dec, r.limits.clone())
61709                    .map(|r| r.map(|t| Self::AlphaNum12(Box::new(t)))),
61710            ),
61711            TypeVariant::Asset => Box::new(
61712                ReadXdrIter::<_, Asset>::new(dec, r.limits.clone())
61713                    .map(|r| r.map(|t| Self::Asset(Box::new(t)))),
61714            ),
61715            TypeVariant::Price => Box::new(
61716                ReadXdrIter::<_, Price>::new(dec, r.limits.clone())
61717                    .map(|r| r.map(|t| Self::Price(Box::new(t)))),
61718            ),
61719            TypeVariant::Liabilities => Box::new(
61720                ReadXdrIter::<_, Liabilities>::new(dec, r.limits.clone())
61721                    .map(|r| r.map(|t| Self::Liabilities(Box::new(t)))),
61722            ),
61723            TypeVariant::ThresholdIndexes => Box::new(
61724                ReadXdrIter::<_, ThresholdIndexes>::new(dec, r.limits.clone())
61725                    .map(|r| r.map(|t| Self::ThresholdIndexes(Box::new(t)))),
61726            ),
61727            TypeVariant::LedgerEntryType => Box::new(
61728                ReadXdrIter::<_, LedgerEntryType>::new(dec, r.limits.clone())
61729                    .map(|r| r.map(|t| Self::LedgerEntryType(Box::new(t)))),
61730            ),
61731            TypeVariant::Signer => Box::new(
61732                ReadXdrIter::<_, Signer>::new(dec, r.limits.clone())
61733                    .map(|r| r.map(|t| Self::Signer(Box::new(t)))),
61734            ),
61735            TypeVariant::AccountFlags => Box::new(
61736                ReadXdrIter::<_, AccountFlags>::new(dec, r.limits.clone())
61737                    .map(|r| r.map(|t| Self::AccountFlags(Box::new(t)))),
61738            ),
61739            TypeVariant::SponsorshipDescriptor => Box::new(
61740                ReadXdrIter::<_, SponsorshipDescriptor>::new(dec, r.limits.clone())
61741                    .map(|r| r.map(|t| Self::SponsorshipDescriptor(Box::new(t)))),
61742            ),
61743            TypeVariant::AccountEntryExtensionV3 => Box::new(
61744                ReadXdrIter::<_, AccountEntryExtensionV3>::new(dec, r.limits.clone())
61745                    .map(|r| r.map(|t| Self::AccountEntryExtensionV3(Box::new(t)))),
61746            ),
61747            TypeVariant::AccountEntryExtensionV2 => Box::new(
61748                ReadXdrIter::<_, AccountEntryExtensionV2>::new(dec, r.limits.clone())
61749                    .map(|r| r.map(|t| Self::AccountEntryExtensionV2(Box::new(t)))),
61750            ),
61751            TypeVariant::AccountEntryExtensionV2Ext => Box::new(
61752                ReadXdrIter::<_, AccountEntryExtensionV2Ext>::new(dec, r.limits.clone())
61753                    .map(|r| r.map(|t| Self::AccountEntryExtensionV2Ext(Box::new(t)))),
61754            ),
61755            TypeVariant::AccountEntryExtensionV1 => Box::new(
61756                ReadXdrIter::<_, AccountEntryExtensionV1>::new(dec, r.limits.clone())
61757                    .map(|r| r.map(|t| Self::AccountEntryExtensionV1(Box::new(t)))),
61758            ),
61759            TypeVariant::AccountEntryExtensionV1Ext => Box::new(
61760                ReadXdrIter::<_, AccountEntryExtensionV1Ext>::new(dec, r.limits.clone())
61761                    .map(|r| r.map(|t| Self::AccountEntryExtensionV1Ext(Box::new(t)))),
61762            ),
61763            TypeVariant::AccountEntry => Box::new(
61764                ReadXdrIter::<_, AccountEntry>::new(dec, r.limits.clone())
61765                    .map(|r| r.map(|t| Self::AccountEntry(Box::new(t)))),
61766            ),
61767            TypeVariant::AccountEntryExt => Box::new(
61768                ReadXdrIter::<_, AccountEntryExt>::new(dec, r.limits.clone())
61769                    .map(|r| r.map(|t| Self::AccountEntryExt(Box::new(t)))),
61770            ),
61771            TypeVariant::TrustLineFlags => Box::new(
61772                ReadXdrIter::<_, TrustLineFlags>::new(dec, r.limits.clone())
61773                    .map(|r| r.map(|t| Self::TrustLineFlags(Box::new(t)))),
61774            ),
61775            TypeVariant::LiquidityPoolType => Box::new(
61776                ReadXdrIter::<_, LiquidityPoolType>::new(dec, r.limits.clone())
61777                    .map(|r| r.map(|t| Self::LiquidityPoolType(Box::new(t)))),
61778            ),
61779            TypeVariant::TrustLineAsset => Box::new(
61780                ReadXdrIter::<_, TrustLineAsset>::new(dec, r.limits.clone())
61781                    .map(|r| r.map(|t| Self::TrustLineAsset(Box::new(t)))),
61782            ),
61783            TypeVariant::TrustLineEntryExtensionV2 => Box::new(
61784                ReadXdrIter::<_, TrustLineEntryExtensionV2>::new(dec, r.limits.clone())
61785                    .map(|r| r.map(|t| Self::TrustLineEntryExtensionV2(Box::new(t)))),
61786            ),
61787            TypeVariant::TrustLineEntryExtensionV2Ext => Box::new(
61788                ReadXdrIter::<_, TrustLineEntryExtensionV2Ext>::new(dec, r.limits.clone())
61789                    .map(|r| r.map(|t| Self::TrustLineEntryExtensionV2Ext(Box::new(t)))),
61790            ),
61791            TypeVariant::TrustLineEntry => Box::new(
61792                ReadXdrIter::<_, TrustLineEntry>::new(dec, r.limits.clone())
61793                    .map(|r| r.map(|t| Self::TrustLineEntry(Box::new(t)))),
61794            ),
61795            TypeVariant::TrustLineEntryExt => Box::new(
61796                ReadXdrIter::<_, TrustLineEntryExt>::new(dec, r.limits.clone())
61797                    .map(|r| r.map(|t| Self::TrustLineEntryExt(Box::new(t)))),
61798            ),
61799            TypeVariant::TrustLineEntryV1 => Box::new(
61800                ReadXdrIter::<_, TrustLineEntryV1>::new(dec, r.limits.clone())
61801                    .map(|r| r.map(|t| Self::TrustLineEntryV1(Box::new(t)))),
61802            ),
61803            TypeVariant::TrustLineEntryV1Ext => Box::new(
61804                ReadXdrIter::<_, TrustLineEntryV1Ext>::new(dec, r.limits.clone())
61805                    .map(|r| r.map(|t| Self::TrustLineEntryV1Ext(Box::new(t)))),
61806            ),
61807            TypeVariant::OfferEntryFlags => Box::new(
61808                ReadXdrIter::<_, OfferEntryFlags>::new(dec, r.limits.clone())
61809                    .map(|r| r.map(|t| Self::OfferEntryFlags(Box::new(t)))),
61810            ),
61811            TypeVariant::OfferEntry => Box::new(
61812                ReadXdrIter::<_, OfferEntry>::new(dec, r.limits.clone())
61813                    .map(|r| r.map(|t| Self::OfferEntry(Box::new(t)))),
61814            ),
61815            TypeVariant::OfferEntryExt => Box::new(
61816                ReadXdrIter::<_, OfferEntryExt>::new(dec, r.limits.clone())
61817                    .map(|r| r.map(|t| Self::OfferEntryExt(Box::new(t)))),
61818            ),
61819            TypeVariant::DataEntry => Box::new(
61820                ReadXdrIter::<_, DataEntry>::new(dec, r.limits.clone())
61821                    .map(|r| r.map(|t| Self::DataEntry(Box::new(t)))),
61822            ),
61823            TypeVariant::DataEntryExt => Box::new(
61824                ReadXdrIter::<_, DataEntryExt>::new(dec, r.limits.clone())
61825                    .map(|r| r.map(|t| Self::DataEntryExt(Box::new(t)))),
61826            ),
61827            TypeVariant::ClaimPredicateType => Box::new(
61828                ReadXdrIter::<_, ClaimPredicateType>::new(dec, r.limits.clone())
61829                    .map(|r| r.map(|t| Self::ClaimPredicateType(Box::new(t)))),
61830            ),
61831            TypeVariant::ClaimPredicate => Box::new(
61832                ReadXdrIter::<_, ClaimPredicate>::new(dec, r.limits.clone())
61833                    .map(|r| r.map(|t| Self::ClaimPredicate(Box::new(t)))),
61834            ),
61835            TypeVariant::ClaimantType => Box::new(
61836                ReadXdrIter::<_, ClaimantType>::new(dec, r.limits.clone())
61837                    .map(|r| r.map(|t| Self::ClaimantType(Box::new(t)))),
61838            ),
61839            TypeVariant::Claimant => Box::new(
61840                ReadXdrIter::<_, Claimant>::new(dec, r.limits.clone())
61841                    .map(|r| r.map(|t| Self::Claimant(Box::new(t)))),
61842            ),
61843            TypeVariant::ClaimantV0 => Box::new(
61844                ReadXdrIter::<_, ClaimantV0>::new(dec, r.limits.clone())
61845                    .map(|r| r.map(|t| Self::ClaimantV0(Box::new(t)))),
61846            ),
61847            TypeVariant::ClaimableBalanceFlags => Box::new(
61848                ReadXdrIter::<_, ClaimableBalanceFlags>::new(dec, r.limits.clone())
61849                    .map(|r| r.map(|t| Self::ClaimableBalanceFlags(Box::new(t)))),
61850            ),
61851            TypeVariant::ClaimableBalanceEntryExtensionV1 => Box::new(
61852                ReadXdrIter::<_, ClaimableBalanceEntryExtensionV1>::new(dec, r.limits.clone())
61853                    .map(|r| r.map(|t| Self::ClaimableBalanceEntryExtensionV1(Box::new(t)))),
61854            ),
61855            TypeVariant::ClaimableBalanceEntryExtensionV1Ext => Box::new(
61856                ReadXdrIter::<_, ClaimableBalanceEntryExtensionV1Ext>::new(dec, r.limits.clone())
61857                    .map(|r| r.map(|t| Self::ClaimableBalanceEntryExtensionV1Ext(Box::new(t)))),
61858            ),
61859            TypeVariant::ClaimableBalanceEntry => Box::new(
61860                ReadXdrIter::<_, ClaimableBalanceEntry>::new(dec, r.limits.clone())
61861                    .map(|r| r.map(|t| Self::ClaimableBalanceEntry(Box::new(t)))),
61862            ),
61863            TypeVariant::ClaimableBalanceEntryExt => Box::new(
61864                ReadXdrIter::<_, ClaimableBalanceEntryExt>::new(dec, r.limits.clone())
61865                    .map(|r| r.map(|t| Self::ClaimableBalanceEntryExt(Box::new(t)))),
61866            ),
61867            TypeVariant::LiquidityPoolConstantProductParameters => Box::new(
61868                ReadXdrIter::<_, LiquidityPoolConstantProductParameters>::new(
61869                    dec,
61870                    r.limits.clone(),
61871                )
61872                .map(|r| r.map(|t| Self::LiquidityPoolConstantProductParameters(Box::new(t)))),
61873            ),
61874            TypeVariant::LiquidityPoolEntry => Box::new(
61875                ReadXdrIter::<_, LiquidityPoolEntry>::new(dec, r.limits.clone())
61876                    .map(|r| r.map(|t| Self::LiquidityPoolEntry(Box::new(t)))),
61877            ),
61878            TypeVariant::LiquidityPoolEntryBody => Box::new(
61879                ReadXdrIter::<_, LiquidityPoolEntryBody>::new(dec, r.limits.clone())
61880                    .map(|r| r.map(|t| Self::LiquidityPoolEntryBody(Box::new(t)))),
61881            ),
61882            TypeVariant::LiquidityPoolEntryConstantProduct => Box::new(
61883                ReadXdrIter::<_, LiquidityPoolEntryConstantProduct>::new(dec, r.limits.clone())
61884                    .map(|r| r.map(|t| Self::LiquidityPoolEntryConstantProduct(Box::new(t)))),
61885            ),
61886            TypeVariant::ContractDataDurability => Box::new(
61887                ReadXdrIter::<_, ContractDataDurability>::new(dec, r.limits.clone())
61888                    .map(|r| r.map(|t| Self::ContractDataDurability(Box::new(t)))),
61889            ),
61890            TypeVariant::ContractDataEntry => Box::new(
61891                ReadXdrIter::<_, ContractDataEntry>::new(dec, r.limits.clone())
61892                    .map(|r| r.map(|t| Self::ContractDataEntry(Box::new(t)))),
61893            ),
61894            TypeVariant::ContractCodeCostInputs => Box::new(
61895                ReadXdrIter::<_, ContractCodeCostInputs>::new(dec, r.limits.clone())
61896                    .map(|r| r.map(|t| Self::ContractCodeCostInputs(Box::new(t)))),
61897            ),
61898            TypeVariant::ContractCodeEntry => Box::new(
61899                ReadXdrIter::<_, ContractCodeEntry>::new(dec, r.limits.clone())
61900                    .map(|r| r.map(|t| Self::ContractCodeEntry(Box::new(t)))),
61901            ),
61902            TypeVariant::ContractCodeEntryExt => Box::new(
61903                ReadXdrIter::<_, ContractCodeEntryExt>::new(dec, r.limits.clone())
61904                    .map(|r| r.map(|t| Self::ContractCodeEntryExt(Box::new(t)))),
61905            ),
61906            TypeVariant::ContractCodeEntryV1 => Box::new(
61907                ReadXdrIter::<_, ContractCodeEntryV1>::new(dec, r.limits.clone())
61908                    .map(|r| r.map(|t| Self::ContractCodeEntryV1(Box::new(t)))),
61909            ),
61910            TypeVariant::TtlEntry => Box::new(
61911                ReadXdrIter::<_, TtlEntry>::new(dec, r.limits.clone())
61912                    .map(|r| r.map(|t| Self::TtlEntry(Box::new(t)))),
61913            ),
61914            TypeVariant::LedgerEntryExtensionV1 => Box::new(
61915                ReadXdrIter::<_, LedgerEntryExtensionV1>::new(dec, r.limits.clone())
61916                    .map(|r| r.map(|t| Self::LedgerEntryExtensionV1(Box::new(t)))),
61917            ),
61918            TypeVariant::LedgerEntryExtensionV1Ext => Box::new(
61919                ReadXdrIter::<_, LedgerEntryExtensionV1Ext>::new(dec, r.limits.clone())
61920                    .map(|r| r.map(|t| Self::LedgerEntryExtensionV1Ext(Box::new(t)))),
61921            ),
61922            TypeVariant::LedgerEntry => Box::new(
61923                ReadXdrIter::<_, LedgerEntry>::new(dec, r.limits.clone())
61924                    .map(|r| r.map(|t| Self::LedgerEntry(Box::new(t)))),
61925            ),
61926            TypeVariant::LedgerEntryData => Box::new(
61927                ReadXdrIter::<_, LedgerEntryData>::new(dec, r.limits.clone())
61928                    .map(|r| r.map(|t| Self::LedgerEntryData(Box::new(t)))),
61929            ),
61930            TypeVariant::LedgerEntryExt => Box::new(
61931                ReadXdrIter::<_, LedgerEntryExt>::new(dec, r.limits.clone())
61932                    .map(|r| r.map(|t| Self::LedgerEntryExt(Box::new(t)))),
61933            ),
61934            TypeVariant::LedgerKey => Box::new(
61935                ReadXdrIter::<_, LedgerKey>::new(dec, r.limits.clone())
61936                    .map(|r| r.map(|t| Self::LedgerKey(Box::new(t)))),
61937            ),
61938            TypeVariant::LedgerKeyAccount => Box::new(
61939                ReadXdrIter::<_, LedgerKeyAccount>::new(dec, r.limits.clone())
61940                    .map(|r| r.map(|t| Self::LedgerKeyAccount(Box::new(t)))),
61941            ),
61942            TypeVariant::LedgerKeyTrustLine => Box::new(
61943                ReadXdrIter::<_, LedgerKeyTrustLine>::new(dec, r.limits.clone())
61944                    .map(|r| r.map(|t| Self::LedgerKeyTrustLine(Box::new(t)))),
61945            ),
61946            TypeVariant::LedgerKeyOffer => Box::new(
61947                ReadXdrIter::<_, LedgerKeyOffer>::new(dec, r.limits.clone())
61948                    .map(|r| r.map(|t| Self::LedgerKeyOffer(Box::new(t)))),
61949            ),
61950            TypeVariant::LedgerKeyData => Box::new(
61951                ReadXdrIter::<_, LedgerKeyData>::new(dec, r.limits.clone())
61952                    .map(|r| r.map(|t| Self::LedgerKeyData(Box::new(t)))),
61953            ),
61954            TypeVariant::LedgerKeyClaimableBalance => Box::new(
61955                ReadXdrIter::<_, LedgerKeyClaimableBalance>::new(dec, r.limits.clone())
61956                    .map(|r| r.map(|t| Self::LedgerKeyClaimableBalance(Box::new(t)))),
61957            ),
61958            TypeVariant::LedgerKeyLiquidityPool => Box::new(
61959                ReadXdrIter::<_, LedgerKeyLiquidityPool>::new(dec, r.limits.clone())
61960                    .map(|r| r.map(|t| Self::LedgerKeyLiquidityPool(Box::new(t)))),
61961            ),
61962            TypeVariant::LedgerKeyContractData => Box::new(
61963                ReadXdrIter::<_, LedgerKeyContractData>::new(dec, r.limits.clone())
61964                    .map(|r| r.map(|t| Self::LedgerKeyContractData(Box::new(t)))),
61965            ),
61966            TypeVariant::LedgerKeyContractCode => Box::new(
61967                ReadXdrIter::<_, LedgerKeyContractCode>::new(dec, r.limits.clone())
61968                    .map(|r| r.map(|t| Self::LedgerKeyContractCode(Box::new(t)))),
61969            ),
61970            TypeVariant::LedgerKeyConfigSetting => Box::new(
61971                ReadXdrIter::<_, LedgerKeyConfigSetting>::new(dec, r.limits.clone())
61972                    .map(|r| r.map(|t| Self::LedgerKeyConfigSetting(Box::new(t)))),
61973            ),
61974            TypeVariant::LedgerKeyTtl => Box::new(
61975                ReadXdrIter::<_, LedgerKeyTtl>::new(dec, r.limits.clone())
61976                    .map(|r| r.map(|t| Self::LedgerKeyTtl(Box::new(t)))),
61977            ),
61978            TypeVariant::EnvelopeType => Box::new(
61979                ReadXdrIter::<_, EnvelopeType>::new(dec, r.limits.clone())
61980                    .map(|r| r.map(|t| Self::EnvelopeType(Box::new(t)))),
61981            ),
61982            TypeVariant::BucketListType => Box::new(
61983                ReadXdrIter::<_, BucketListType>::new(dec, r.limits.clone())
61984                    .map(|r| r.map(|t| Self::BucketListType(Box::new(t)))),
61985            ),
61986            TypeVariant::BucketEntryType => Box::new(
61987                ReadXdrIter::<_, BucketEntryType>::new(dec, r.limits.clone())
61988                    .map(|r| r.map(|t| Self::BucketEntryType(Box::new(t)))),
61989            ),
61990            TypeVariant::HotArchiveBucketEntryType => Box::new(
61991                ReadXdrIter::<_, HotArchiveBucketEntryType>::new(dec, r.limits.clone())
61992                    .map(|r| r.map(|t| Self::HotArchiveBucketEntryType(Box::new(t)))),
61993            ),
61994            TypeVariant::BucketMetadata => Box::new(
61995                ReadXdrIter::<_, BucketMetadata>::new(dec, r.limits.clone())
61996                    .map(|r| r.map(|t| Self::BucketMetadata(Box::new(t)))),
61997            ),
61998            TypeVariant::BucketMetadataExt => Box::new(
61999                ReadXdrIter::<_, BucketMetadataExt>::new(dec, r.limits.clone())
62000                    .map(|r| r.map(|t| Self::BucketMetadataExt(Box::new(t)))),
62001            ),
62002            TypeVariant::BucketEntry => Box::new(
62003                ReadXdrIter::<_, BucketEntry>::new(dec, r.limits.clone())
62004                    .map(|r| r.map(|t| Self::BucketEntry(Box::new(t)))),
62005            ),
62006            TypeVariant::HotArchiveBucketEntry => Box::new(
62007                ReadXdrIter::<_, HotArchiveBucketEntry>::new(dec, r.limits.clone())
62008                    .map(|r| r.map(|t| Self::HotArchiveBucketEntry(Box::new(t)))),
62009            ),
62010            TypeVariant::UpgradeType => Box::new(
62011                ReadXdrIter::<_, UpgradeType>::new(dec, r.limits.clone())
62012                    .map(|r| r.map(|t| Self::UpgradeType(Box::new(t)))),
62013            ),
62014            TypeVariant::StellarValueType => Box::new(
62015                ReadXdrIter::<_, StellarValueType>::new(dec, r.limits.clone())
62016                    .map(|r| r.map(|t| Self::StellarValueType(Box::new(t)))),
62017            ),
62018            TypeVariant::LedgerCloseValueSignature => Box::new(
62019                ReadXdrIter::<_, LedgerCloseValueSignature>::new(dec, r.limits.clone())
62020                    .map(|r| r.map(|t| Self::LedgerCloseValueSignature(Box::new(t)))),
62021            ),
62022            TypeVariant::StellarValue => Box::new(
62023                ReadXdrIter::<_, StellarValue>::new(dec, r.limits.clone())
62024                    .map(|r| r.map(|t| Self::StellarValue(Box::new(t)))),
62025            ),
62026            TypeVariant::StellarValueExt => Box::new(
62027                ReadXdrIter::<_, StellarValueExt>::new(dec, r.limits.clone())
62028                    .map(|r| r.map(|t| Self::StellarValueExt(Box::new(t)))),
62029            ),
62030            TypeVariant::LedgerHeaderFlags => Box::new(
62031                ReadXdrIter::<_, LedgerHeaderFlags>::new(dec, r.limits.clone())
62032                    .map(|r| r.map(|t| Self::LedgerHeaderFlags(Box::new(t)))),
62033            ),
62034            TypeVariant::LedgerHeaderExtensionV1 => Box::new(
62035                ReadXdrIter::<_, LedgerHeaderExtensionV1>::new(dec, r.limits.clone())
62036                    .map(|r| r.map(|t| Self::LedgerHeaderExtensionV1(Box::new(t)))),
62037            ),
62038            TypeVariant::LedgerHeaderExtensionV1Ext => Box::new(
62039                ReadXdrIter::<_, LedgerHeaderExtensionV1Ext>::new(dec, r.limits.clone())
62040                    .map(|r| r.map(|t| Self::LedgerHeaderExtensionV1Ext(Box::new(t)))),
62041            ),
62042            TypeVariant::LedgerHeader => Box::new(
62043                ReadXdrIter::<_, LedgerHeader>::new(dec, r.limits.clone())
62044                    .map(|r| r.map(|t| Self::LedgerHeader(Box::new(t)))),
62045            ),
62046            TypeVariant::LedgerHeaderExt => Box::new(
62047                ReadXdrIter::<_, LedgerHeaderExt>::new(dec, r.limits.clone())
62048                    .map(|r| r.map(|t| Self::LedgerHeaderExt(Box::new(t)))),
62049            ),
62050            TypeVariant::LedgerUpgradeType => Box::new(
62051                ReadXdrIter::<_, LedgerUpgradeType>::new(dec, r.limits.clone())
62052                    .map(|r| r.map(|t| Self::LedgerUpgradeType(Box::new(t)))),
62053            ),
62054            TypeVariant::ConfigUpgradeSetKey => Box::new(
62055                ReadXdrIter::<_, ConfigUpgradeSetKey>::new(dec, r.limits.clone())
62056                    .map(|r| r.map(|t| Self::ConfigUpgradeSetKey(Box::new(t)))),
62057            ),
62058            TypeVariant::LedgerUpgrade => Box::new(
62059                ReadXdrIter::<_, LedgerUpgrade>::new(dec, r.limits.clone())
62060                    .map(|r| r.map(|t| Self::LedgerUpgrade(Box::new(t)))),
62061            ),
62062            TypeVariant::ConfigUpgradeSet => Box::new(
62063                ReadXdrIter::<_, ConfigUpgradeSet>::new(dec, r.limits.clone())
62064                    .map(|r| r.map(|t| Self::ConfigUpgradeSet(Box::new(t)))),
62065            ),
62066            TypeVariant::TxSetComponentType => Box::new(
62067                ReadXdrIter::<_, TxSetComponentType>::new(dec, r.limits.clone())
62068                    .map(|r| r.map(|t| Self::TxSetComponentType(Box::new(t)))),
62069            ),
62070            TypeVariant::DependentTxCluster => Box::new(
62071                ReadXdrIter::<_, DependentTxCluster>::new(dec, r.limits.clone())
62072                    .map(|r| r.map(|t| Self::DependentTxCluster(Box::new(t)))),
62073            ),
62074            TypeVariant::ParallelTxExecutionStage => Box::new(
62075                ReadXdrIter::<_, ParallelTxExecutionStage>::new(dec, r.limits.clone())
62076                    .map(|r| r.map(|t| Self::ParallelTxExecutionStage(Box::new(t)))),
62077            ),
62078            TypeVariant::ParallelTxsComponent => Box::new(
62079                ReadXdrIter::<_, ParallelTxsComponent>::new(dec, r.limits.clone())
62080                    .map(|r| r.map(|t| Self::ParallelTxsComponent(Box::new(t)))),
62081            ),
62082            TypeVariant::TxSetComponent => Box::new(
62083                ReadXdrIter::<_, TxSetComponent>::new(dec, r.limits.clone())
62084                    .map(|r| r.map(|t| Self::TxSetComponent(Box::new(t)))),
62085            ),
62086            TypeVariant::TxSetComponentTxsMaybeDiscountedFee => Box::new(
62087                ReadXdrIter::<_, TxSetComponentTxsMaybeDiscountedFee>::new(dec, r.limits.clone())
62088                    .map(|r| r.map(|t| Self::TxSetComponentTxsMaybeDiscountedFee(Box::new(t)))),
62089            ),
62090            TypeVariant::TransactionPhase => Box::new(
62091                ReadXdrIter::<_, TransactionPhase>::new(dec, r.limits.clone())
62092                    .map(|r| r.map(|t| Self::TransactionPhase(Box::new(t)))),
62093            ),
62094            TypeVariant::TransactionSet => Box::new(
62095                ReadXdrIter::<_, TransactionSet>::new(dec, r.limits.clone())
62096                    .map(|r| r.map(|t| Self::TransactionSet(Box::new(t)))),
62097            ),
62098            TypeVariant::TransactionSetV1 => Box::new(
62099                ReadXdrIter::<_, TransactionSetV1>::new(dec, r.limits.clone())
62100                    .map(|r| r.map(|t| Self::TransactionSetV1(Box::new(t)))),
62101            ),
62102            TypeVariant::GeneralizedTransactionSet => Box::new(
62103                ReadXdrIter::<_, GeneralizedTransactionSet>::new(dec, r.limits.clone())
62104                    .map(|r| r.map(|t| Self::GeneralizedTransactionSet(Box::new(t)))),
62105            ),
62106            TypeVariant::TransactionResultPair => Box::new(
62107                ReadXdrIter::<_, TransactionResultPair>::new(dec, r.limits.clone())
62108                    .map(|r| r.map(|t| Self::TransactionResultPair(Box::new(t)))),
62109            ),
62110            TypeVariant::TransactionResultSet => Box::new(
62111                ReadXdrIter::<_, TransactionResultSet>::new(dec, r.limits.clone())
62112                    .map(|r| r.map(|t| Self::TransactionResultSet(Box::new(t)))),
62113            ),
62114            TypeVariant::TransactionHistoryEntry => Box::new(
62115                ReadXdrIter::<_, TransactionHistoryEntry>::new(dec, r.limits.clone())
62116                    .map(|r| r.map(|t| Self::TransactionHistoryEntry(Box::new(t)))),
62117            ),
62118            TypeVariant::TransactionHistoryEntryExt => Box::new(
62119                ReadXdrIter::<_, TransactionHistoryEntryExt>::new(dec, r.limits.clone())
62120                    .map(|r| r.map(|t| Self::TransactionHistoryEntryExt(Box::new(t)))),
62121            ),
62122            TypeVariant::TransactionHistoryResultEntry => Box::new(
62123                ReadXdrIter::<_, TransactionHistoryResultEntry>::new(dec, r.limits.clone())
62124                    .map(|r| r.map(|t| Self::TransactionHistoryResultEntry(Box::new(t)))),
62125            ),
62126            TypeVariant::TransactionHistoryResultEntryExt => Box::new(
62127                ReadXdrIter::<_, TransactionHistoryResultEntryExt>::new(dec, r.limits.clone())
62128                    .map(|r| r.map(|t| Self::TransactionHistoryResultEntryExt(Box::new(t)))),
62129            ),
62130            TypeVariant::LedgerHeaderHistoryEntry => Box::new(
62131                ReadXdrIter::<_, LedgerHeaderHistoryEntry>::new(dec, r.limits.clone())
62132                    .map(|r| r.map(|t| Self::LedgerHeaderHistoryEntry(Box::new(t)))),
62133            ),
62134            TypeVariant::LedgerHeaderHistoryEntryExt => Box::new(
62135                ReadXdrIter::<_, LedgerHeaderHistoryEntryExt>::new(dec, r.limits.clone())
62136                    .map(|r| r.map(|t| Self::LedgerHeaderHistoryEntryExt(Box::new(t)))),
62137            ),
62138            TypeVariant::LedgerScpMessages => Box::new(
62139                ReadXdrIter::<_, LedgerScpMessages>::new(dec, r.limits.clone())
62140                    .map(|r| r.map(|t| Self::LedgerScpMessages(Box::new(t)))),
62141            ),
62142            TypeVariant::ScpHistoryEntryV0 => Box::new(
62143                ReadXdrIter::<_, ScpHistoryEntryV0>::new(dec, r.limits.clone())
62144                    .map(|r| r.map(|t| Self::ScpHistoryEntryV0(Box::new(t)))),
62145            ),
62146            TypeVariant::ScpHistoryEntry => Box::new(
62147                ReadXdrIter::<_, ScpHistoryEntry>::new(dec, r.limits.clone())
62148                    .map(|r| r.map(|t| Self::ScpHistoryEntry(Box::new(t)))),
62149            ),
62150            TypeVariant::LedgerEntryChangeType => Box::new(
62151                ReadXdrIter::<_, LedgerEntryChangeType>::new(dec, r.limits.clone())
62152                    .map(|r| r.map(|t| Self::LedgerEntryChangeType(Box::new(t)))),
62153            ),
62154            TypeVariant::LedgerEntryChange => Box::new(
62155                ReadXdrIter::<_, LedgerEntryChange>::new(dec, r.limits.clone())
62156                    .map(|r| r.map(|t| Self::LedgerEntryChange(Box::new(t)))),
62157            ),
62158            TypeVariant::LedgerEntryChanges => Box::new(
62159                ReadXdrIter::<_, LedgerEntryChanges>::new(dec, r.limits.clone())
62160                    .map(|r| r.map(|t| Self::LedgerEntryChanges(Box::new(t)))),
62161            ),
62162            TypeVariant::OperationMeta => Box::new(
62163                ReadXdrIter::<_, OperationMeta>::new(dec, r.limits.clone())
62164                    .map(|r| r.map(|t| Self::OperationMeta(Box::new(t)))),
62165            ),
62166            TypeVariant::TransactionMetaV1 => Box::new(
62167                ReadXdrIter::<_, TransactionMetaV1>::new(dec, r.limits.clone())
62168                    .map(|r| r.map(|t| Self::TransactionMetaV1(Box::new(t)))),
62169            ),
62170            TypeVariant::TransactionMetaV2 => Box::new(
62171                ReadXdrIter::<_, TransactionMetaV2>::new(dec, r.limits.clone())
62172                    .map(|r| r.map(|t| Self::TransactionMetaV2(Box::new(t)))),
62173            ),
62174            TypeVariant::ContractEventType => Box::new(
62175                ReadXdrIter::<_, ContractEventType>::new(dec, r.limits.clone())
62176                    .map(|r| r.map(|t| Self::ContractEventType(Box::new(t)))),
62177            ),
62178            TypeVariant::ContractEvent => Box::new(
62179                ReadXdrIter::<_, ContractEvent>::new(dec, r.limits.clone())
62180                    .map(|r| r.map(|t| Self::ContractEvent(Box::new(t)))),
62181            ),
62182            TypeVariant::ContractEventBody => Box::new(
62183                ReadXdrIter::<_, ContractEventBody>::new(dec, r.limits.clone())
62184                    .map(|r| r.map(|t| Self::ContractEventBody(Box::new(t)))),
62185            ),
62186            TypeVariant::ContractEventV0 => Box::new(
62187                ReadXdrIter::<_, ContractEventV0>::new(dec, r.limits.clone())
62188                    .map(|r| r.map(|t| Self::ContractEventV0(Box::new(t)))),
62189            ),
62190            TypeVariant::DiagnosticEvent => Box::new(
62191                ReadXdrIter::<_, DiagnosticEvent>::new(dec, r.limits.clone())
62192                    .map(|r| r.map(|t| Self::DiagnosticEvent(Box::new(t)))),
62193            ),
62194            TypeVariant::SorobanTransactionMetaExtV1 => Box::new(
62195                ReadXdrIter::<_, SorobanTransactionMetaExtV1>::new(dec, r.limits.clone())
62196                    .map(|r| r.map(|t| Self::SorobanTransactionMetaExtV1(Box::new(t)))),
62197            ),
62198            TypeVariant::SorobanTransactionMetaExt => Box::new(
62199                ReadXdrIter::<_, SorobanTransactionMetaExt>::new(dec, r.limits.clone())
62200                    .map(|r| r.map(|t| Self::SorobanTransactionMetaExt(Box::new(t)))),
62201            ),
62202            TypeVariant::SorobanTransactionMeta => Box::new(
62203                ReadXdrIter::<_, SorobanTransactionMeta>::new(dec, r.limits.clone())
62204                    .map(|r| r.map(|t| Self::SorobanTransactionMeta(Box::new(t)))),
62205            ),
62206            TypeVariant::TransactionMetaV3 => Box::new(
62207                ReadXdrIter::<_, TransactionMetaV3>::new(dec, r.limits.clone())
62208                    .map(|r| r.map(|t| Self::TransactionMetaV3(Box::new(t)))),
62209            ),
62210            TypeVariant::OperationMetaV2 => Box::new(
62211                ReadXdrIter::<_, OperationMetaV2>::new(dec, r.limits.clone())
62212                    .map(|r| r.map(|t| Self::OperationMetaV2(Box::new(t)))),
62213            ),
62214            TypeVariant::SorobanTransactionMetaV2 => Box::new(
62215                ReadXdrIter::<_, SorobanTransactionMetaV2>::new(dec, r.limits.clone())
62216                    .map(|r| r.map(|t| Self::SorobanTransactionMetaV2(Box::new(t)))),
62217            ),
62218            TypeVariant::TransactionEventStage => Box::new(
62219                ReadXdrIter::<_, TransactionEventStage>::new(dec, r.limits.clone())
62220                    .map(|r| r.map(|t| Self::TransactionEventStage(Box::new(t)))),
62221            ),
62222            TypeVariant::TransactionEvent => Box::new(
62223                ReadXdrIter::<_, TransactionEvent>::new(dec, r.limits.clone())
62224                    .map(|r| r.map(|t| Self::TransactionEvent(Box::new(t)))),
62225            ),
62226            TypeVariant::TransactionMetaV4 => Box::new(
62227                ReadXdrIter::<_, TransactionMetaV4>::new(dec, r.limits.clone())
62228                    .map(|r| r.map(|t| Self::TransactionMetaV4(Box::new(t)))),
62229            ),
62230            TypeVariant::InvokeHostFunctionSuccessPreImage => Box::new(
62231                ReadXdrIter::<_, InvokeHostFunctionSuccessPreImage>::new(dec, r.limits.clone())
62232                    .map(|r| r.map(|t| Self::InvokeHostFunctionSuccessPreImage(Box::new(t)))),
62233            ),
62234            TypeVariant::TransactionMeta => Box::new(
62235                ReadXdrIter::<_, TransactionMeta>::new(dec, r.limits.clone())
62236                    .map(|r| r.map(|t| Self::TransactionMeta(Box::new(t)))),
62237            ),
62238            TypeVariant::TransactionResultMeta => Box::new(
62239                ReadXdrIter::<_, TransactionResultMeta>::new(dec, r.limits.clone())
62240                    .map(|r| r.map(|t| Self::TransactionResultMeta(Box::new(t)))),
62241            ),
62242            TypeVariant::TransactionResultMetaV1 => Box::new(
62243                ReadXdrIter::<_, TransactionResultMetaV1>::new(dec, r.limits.clone())
62244                    .map(|r| r.map(|t| Self::TransactionResultMetaV1(Box::new(t)))),
62245            ),
62246            TypeVariant::UpgradeEntryMeta => Box::new(
62247                ReadXdrIter::<_, UpgradeEntryMeta>::new(dec, r.limits.clone())
62248                    .map(|r| r.map(|t| Self::UpgradeEntryMeta(Box::new(t)))),
62249            ),
62250            TypeVariant::LedgerCloseMetaV0 => Box::new(
62251                ReadXdrIter::<_, LedgerCloseMetaV0>::new(dec, r.limits.clone())
62252                    .map(|r| r.map(|t| Self::LedgerCloseMetaV0(Box::new(t)))),
62253            ),
62254            TypeVariant::LedgerCloseMetaExtV1 => Box::new(
62255                ReadXdrIter::<_, LedgerCloseMetaExtV1>::new(dec, r.limits.clone())
62256                    .map(|r| r.map(|t| Self::LedgerCloseMetaExtV1(Box::new(t)))),
62257            ),
62258            TypeVariant::LedgerCloseMetaExt => Box::new(
62259                ReadXdrIter::<_, LedgerCloseMetaExt>::new(dec, r.limits.clone())
62260                    .map(|r| r.map(|t| Self::LedgerCloseMetaExt(Box::new(t)))),
62261            ),
62262            TypeVariant::LedgerCloseMetaV1 => Box::new(
62263                ReadXdrIter::<_, LedgerCloseMetaV1>::new(dec, r.limits.clone())
62264                    .map(|r| r.map(|t| Self::LedgerCloseMetaV1(Box::new(t)))),
62265            ),
62266            TypeVariant::LedgerCloseMetaV2 => Box::new(
62267                ReadXdrIter::<_, LedgerCloseMetaV2>::new(dec, r.limits.clone())
62268                    .map(|r| r.map(|t| Self::LedgerCloseMetaV2(Box::new(t)))),
62269            ),
62270            TypeVariant::LedgerCloseMeta => Box::new(
62271                ReadXdrIter::<_, LedgerCloseMeta>::new(dec, r.limits.clone())
62272                    .map(|r| r.map(|t| Self::LedgerCloseMeta(Box::new(t)))),
62273            ),
62274            TypeVariant::ErrorCode => Box::new(
62275                ReadXdrIter::<_, ErrorCode>::new(dec, r.limits.clone())
62276                    .map(|r| r.map(|t| Self::ErrorCode(Box::new(t)))),
62277            ),
62278            TypeVariant::SError => Box::new(
62279                ReadXdrIter::<_, SError>::new(dec, r.limits.clone())
62280                    .map(|r| r.map(|t| Self::SError(Box::new(t)))),
62281            ),
62282            TypeVariant::SendMore => Box::new(
62283                ReadXdrIter::<_, SendMore>::new(dec, r.limits.clone())
62284                    .map(|r| r.map(|t| Self::SendMore(Box::new(t)))),
62285            ),
62286            TypeVariant::SendMoreExtended => Box::new(
62287                ReadXdrIter::<_, SendMoreExtended>::new(dec, r.limits.clone())
62288                    .map(|r| r.map(|t| Self::SendMoreExtended(Box::new(t)))),
62289            ),
62290            TypeVariant::AuthCert => Box::new(
62291                ReadXdrIter::<_, AuthCert>::new(dec, r.limits.clone())
62292                    .map(|r| r.map(|t| Self::AuthCert(Box::new(t)))),
62293            ),
62294            TypeVariant::Hello => Box::new(
62295                ReadXdrIter::<_, Hello>::new(dec, r.limits.clone())
62296                    .map(|r| r.map(|t| Self::Hello(Box::new(t)))),
62297            ),
62298            TypeVariant::Auth => Box::new(
62299                ReadXdrIter::<_, Auth>::new(dec, r.limits.clone())
62300                    .map(|r| r.map(|t| Self::Auth(Box::new(t)))),
62301            ),
62302            TypeVariant::IpAddrType => Box::new(
62303                ReadXdrIter::<_, IpAddrType>::new(dec, r.limits.clone())
62304                    .map(|r| r.map(|t| Self::IpAddrType(Box::new(t)))),
62305            ),
62306            TypeVariant::PeerAddress => Box::new(
62307                ReadXdrIter::<_, PeerAddress>::new(dec, r.limits.clone())
62308                    .map(|r| r.map(|t| Self::PeerAddress(Box::new(t)))),
62309            ),
62310            TypeVariant::PeerAddressIp => Box::new(
62311                ReadXdrIter::<_, PeerAddressIp>::new(dec, r.limits.clone())
62312                    .map(|r| r.map(|t| Self::PeerAddressIp(Box::new(t)))),
62313            ),
62314            TypeVariant::MessageType => Box::new(
62315                ReadXdrIter::<_, MessageType>::new(dec, r.limits.clone())
62316                    .map(|r| r.map(|t| Self::MessageType(Box::new(t)))),
62317            ),
62318            TypeVariant::DontHave => Box::new(
62319                ReadXdrIter::<_, DontHave>::new(dec, r.limits.clone())
62320                    .map(|r| r.map(|t| Self::DontHave(Box::new(t)))),
62321            ),
62322            TypeVariant::SurveyMessageCommandType => Box::new(
62323                ReadXdrIter::<_, SurveyMessageCommandType>::new(dec, r.limits.clone())
62324                    .map(|r| r.map(|t| Self::SurveyMessageCommandType(Box::new(t)))),
62325            ),
62326            TypeVariant::SurveyMessageResponseType => Box::new(
62327                ReadXdrIter::<_, SurveyMessageResponseType>::new(dec, r.limits.clone())
62328                    .map(|r| r.map(|t| Self::SurveyMessageResponseType(Box::new(t)))),
62329            ),
62330            TypeVariant::TimeSlicedSurveyStartCollectingMessage => Box::new(
62331                ReadXdrIter::<_, TimeSlicedSurveyStartCollectingMessage>::new(
62332                    dec,
62333                    r.limits.clone(),
62334                )
62335                .map(|r| r.map(|t| Self::TimeSlicedSurveyStartCollectingMessage(Box::new(t)))),
62336            ),
62337            TypeVariant::SignedTimeSlicedSurveyStartCollectingMessage => Box::new(
62338                ReadXdrIter::<_, SignedTimeSlicedSurveyStartCollectingMessage>::new(
62339                    dec,
62340                    r.limits.clone(),
62341                )
62342                .map(|r| {
62343                    r.map(|t| Self::SignedTimeSlicedSurveyStartCollectingMessage(Box::new(t)))
62344                }),
62345            ),
62346            TypeVariant::TimeSlicedSurveyStopCollectingMessage => Box::new(
62347                ReadXdrIter::<_, TimeSlicedSurveyStopCollectingMessage>::new(dec, r.limits.clone())
62348                    .map(|r| r.map(|t| Self::TimeSlicedSurveyStopCollectingMessage(Box::new(t)))),
62349            ),
62350            TypeVariant::SignedTimeSlicedSurveyStopCollectingMessage => Box::new(
62351                ReadXdrIter::<_, SignedTimeSlicedSurveyStopCollectingMessage>::new(
62352                    dec,
62353                    r.limits.clone(),
62354                )
62355                .map(|r| r.map(|t| Self::SignedTimeSlicedSurveyStopCollectingMessage(Box::new(t)))),
62356            ),
62357            TypeVariant::SurveyRequestMessage => Box::new(
62358                ReadXdrIter::<_, SurveyRequestMessage>::new(dec, r.limits.clone())
62359                    .map(|r| r.map(|t| Self::SurveyRequestMessage(Box::new(t)))),
62360            ),
62361            TypeVariant::TimeSlicedSurveyRequestMessage => Box::new(
62362                ReadXdrIter::<_, TimeSlicedSurveyRequestMessage>::new(dec, r.limits.clone())
62363                    .map(|r| r.map(|t| Self::TimeSlicedSurveyRequestMessage(Box::new(t)))),
62364            ),
62365            TypeVariant::SignedTimeSlicedSurveyRequestMessage => Box::new(
62366                ReadXdrIter::<_, SignedTimeSlicedSurveyRequestMessage>::new(dec, r.limits.clone())
62367                    .map(|r| r.map(|t| Self::SignedTimeSlicedSurveyRequestMessage(Box::new(t)))),
62368            ),
62369            TypeVariant::EncryptedBody => Box::new(
62370                ReadXdrIter::<_, EncryptedBody>::new(dec, r.limits.clone())
62371                    .map(|r| r.map(|t| Self::EncryptedBody(Box::new(t)))),
62372            ),
62373            TypeVariant::SurveyResponseMessage => Box::new(
62374                ReadXdrIter::<_, SurveyResponseMessage>::new(dec, r.limits.clone())
62375                    .map(|r| r.map(|t| Self::SurveyResponseMessage(Box::new(t)))),
62376            ),
62377            TypeVariant::TimeSlicedSurveyResponseMessage => Box::new(
62378                ReadXdrIter::<_, TimeSlicedSurveyResponseMessage>::new(dec, r.limits.clone())
62379                    .map(|r| r.map(|t| Self::TimeSlicedSurveyResponseMessage(Box::new(t)))),
62380            ),
62381            TypeVariant::SignedTimeSlicedSurveyResponseMessage => Box::new(
62382                ReadXdrIter::<_, SignedTimeSlicedSurveyResponseMessage>::new(dec, r.limits.clone())
62383                    .map(|r| r.map(|t| Self::SignedTimeSlicedSurveyResponseMessage(Box::new(t)))),
62384            ),
62385            TypeVariant::PeerStats => Box::new(
62386                ReadXdrIter::<_, PeerStats>::new(dec, r.limits.clone())
62387                    .map(|r| r.map(|t| Self::PeerStats(Box::new(t)))),
62388            ),
62389            TypeVariant::TimeSlicedNodeData => Box::new(
62390                ReadXdrIter::<_, TimeSlicedNodeData>::new(dec, r.limits.clone())
62391                    .map(|r| r.map(|t| Self::TimeSlicedNodeData(Box::new(t)))),
62392            ),
62393            TypeVariant::TimeSlicedPeerData => Box::new(
62394                ReadXdrIter::<_, TimeSlicedPeerData>::new(dec, r.limits.clone())
62395                    .map(|r| r.map(|t| Self::TimeSlicedPeerData(Box::new(t)))),
62396            ),
62397            TypeVariant::TimeSlicedPeerDataList => Box::new(
62398                ReadXdrIter::<_, TimeSlicedPeerDataList>::new(dec, r.limits.clone())
62399                    .map(|r| r.map(|t| Self::TimeSlicedPeerDataList(Box::new(t)))),
62400            ),
62401            TypeVariant::TopologyResponseBodyV2 => Box::new(
62402                ReadXdrIter::<_, TopologyResponseBodyV2>::new(dec, r.limits.clone())
62403                    .map(|r| r.map(|t| Self::TopologyResponseBodyV2(Box::new(t)))),
62404            ),
62405            TypeVariant::SurveyResponseBody => Box::new(
62406                ReadXdrIter::<_, SurveyResponseBody>::new(dec, r.limits.clone())
62407                    .map(|r| r.map(|t| Self::SurveyResponseBody(Box::new(t)))),
62408            ),
62409            TypeVariant::TxAdvertVector => Box::new(
62410                ReadXdrIter::<_, TxAdvertVector>::new(dec, r.limits.clone())
62411                    .map(|r| r.map(|t| Self::TxAdvertVector(Box::new(t)))),
62412            ),
62413            TypeVariant::FloodAdvert => Box::new(
62414                ReadXdrIter::<_, FloodAdvert>::new(dec, r.limits.clone())
62415                    .map(|r| r.map(|t| Self::FloodAdvert(Box::new(t)))),
62416            ),
62417            TypeVariant::TxDemandVector => Box::new(
62418                ReadXdrIter::<_, TxDemandVector>::new(dec, r.limits.clone())
62419                    .map(|r| r.map(|t| Self::TxDemandVector(Box::new(t)))),
62420            ),
62421            TypeVariant::FloodDemand => Box::new(
62422                ReadXdrIter::<_, FloodDemand>::new(dec, r.limits.clone())
62423                    .map(|r| r.map(|t| Self::FloodDemand(Box::new(t)))),
62424            ),
62425            TypeVariant::StellarMessage => Box::new(
62426                ReadXdrIter::<_, StellarMessage>::new(dec, r.limits.clone())
62427                    .map(|r| r.map(|t| Self::StellarMessage(Box::new(t)))),
62428            ),
62429            TypeVariant::AuthenticatedMessage => Box::new(
62430                ReadXdrIter::<_, AuthenticatedMessage>::new(dec, r.limits.clone())
62431                    .map(|r| r.map(|t| Self::AuthenticatedMessage(Box::new(t)))),
62432            ),
62433            TypeVariant::AuthenticatedMessageV0 => Box::new(
62434                ReadXdrIter::<_, AuthenticatedMessageV0>::new(dec, r.limits.clone())
62435                    .map(|r| r.map(|t| Self::AuthenticatedMessageV0(Box::new(t)))),
62436            ),
62437            TypeVariant::LiquidityPoolParameters => Box::new(
62438                ReadXdrIter::<_, LiquidityPoolParameters>::new(dec, r.limits.clone())
62439                    .map(|r| r.map(|t| Self::LiquidityPoolParameters(Box::new(t)))),
62440            ),
62441            TypeVariant::MuxedAccount => Box::new(
62442                ReadXdrIter::<_, MuxedAccount>::new(dec, r.limits.clone())
62443                    .map(|r| r.map(|t| Self::MuxedAccount(Box::new(t)))),
62444            ),
62445            TypeVariant::MuxedAccountMed25519 => Box::new(
62446                ReadXdrIter::<_, MuxedAccountMed25519>::new(dec, r.limits.clone())
62447                    .map(|r| r.map(|t| Self::MuxedAccountMed25519(Box::new(t)))),
62448            ),
62449            TypeVariant::DecoratedSignature => Box::new(
62450                ReadXdrIter::<_, DecoratedSignature>::new(dec, r.limits.clone())
62451                    .map(|r| r.map(|t| Self::DecoratedSignature(Box::new(t)))),
62452            ),
62453            TypeVariant::OperationType => Box::new(
62454                ReadXdrIter::<_, OperationType>::new(dec, r.limits.clone())
62455                    .map(|r| r.map(|t| Self::OperationType(Box::new(t)))),
62456            ),
62457            TypeVariant::CreateAccountOp => Box::new(
62458                ReadXdrIter::<_, CreateAccountOp>::new(dec, r.limits.clone())
62459                    .map(|r| r.map(|t| Self::CreateAccountOp(Box::new(t)))),
62460            ),
62461            TypeVariant::PaymentOp => Box::new(
62462                ReadXdrIter::<_, PaymentOp>::new(dec, r.limits.clone())
62463                    .map(|r| r.map(|t| Self::PaymentOp(Box::new(t)))),
62464            ),
62465            TypeVariant::PathPaymentStrictReceiveOp => Box::new(
62466                ReadXdrIter::<_, PathPaymentStrictReceiveOp>::new(dec, r.limits.clone())
62467                    .map(|r| r.map(|t| Self::PathPaymentStrictReceiveOp(Box::new(t)))),
62468            ),
62469            TypeVariant::PathPaymentStrictSendOp => Box::new(
62470                ReadXdrIter::<_, PathPaymentStrictSendOp>::new(dec, r.limits.clone())
62471                    .map(|r| r.map(|t| Self::PathPaymentStrictSendOp(Box::new(t)))),
62472            ),
62473            TypeVariant::ManageSellOfferOp => Box::new(
62474                ReadXdrIter::<_, ManageSellOfferOp>::new(dec, r.limits.clone())
62475                    .map(|r| r.map(|t| Self::ManageSellOfferOp(Box::new(t)))),
62476            ),
62477            TypeVariant::ManageBuyOfferOp => Box::new(
62478                ReadXdrIter::<_, ManageBuyOfferOp>::new(dec, r.limits.clone())
62479                    .map(|r| r.map(|t| Self::ManageBuyOfferOp(Box::new(t)))),
62480            ),
62481            TypeVariant::CreatePassiveSellOfferOp => Box::new(
62482                ReadXdrIter::<_, CreatePassiveSellOfferOp>::new(dec, r.limits.clone())
62483                    .map(|r| r.map(|t| Self::CreatePassiveSellOfferOp(Box::new(t)))),
62484            ),
62485            TypeVariant::SetOptionsOp => Box::new(
62486                ReadXdrIter::<_, SetOptionsOp>::new(dec, r.limits.clone())
62487                    .map(|r| r.map(|t| Self::SetOptionsOp(Box::new(t)))),
62488            ),
62489            TypeVariant::ChangeTrustAsset => Box::new(
62490                ReadXdrIter::<_, ChangeTrustAsset>::new(dec, r.limits.clone())
62491                    .map(|r| r.map(|t| Self::ChangeTrustAsset(Box::new(t)))),
62492            ),
62493            TypeVariant::ChangeTrustOp => Box::new(
62494                ReadXdrIter::<_, ChangeTrustOp>::new(dec, r.limits.clone())
62495                    .map(|r| r.map(|t| Self::ChangeTrustOp(Box::new(t)))),
62496            ),
62497            TypeVariant::AllowTrustOp => Box::new(
62498                ReadXdrIter::<_, AllowTrustOp>::new(dec, r.limits.clone())
62499                    .map(|r| r.map(|t| Self::AllowTrustOp(Box::new(t)))),
62500            ),
62501            TypeVariant::ManageDataOp => Box::new(
62502                ReadXdrIter::<_, ManageDataOp>::new(dec, r.limits.clone())
62503                    .map(|r| r.map(|t| Self::ManageDataOp(Box::new(t)))),
62504            ),
62505            TypeVariant::BumpSequenceOp => Box::new(
62506                ReadXdrIter::<_, BumpSequenceOp>::new(dec, r.limits.clone())
62507                    .map(|r| r.map(|t| Self::BumpSequenceOp(Box::new(t)))),
62508            ),
62509            TypeVariant::CreateClaimableBalanceOp => Box::new(
62510                ReadXdrIter::<_, CreateClaimableBalanceOp>::new(dec, r.limits.clone())
62511                    .map(|r| r.map(|t| Self::CreateClaimableBalanceOp(Box::new(t)))),
62512            ),
62513            TypeVariant::ClaimClaimableBalanceOp => Box::new(
62514                ReadXdrIter::<_, ClaimClaimableBalanceOp>::new(dec, r.limits.clone())
62515                    .map(|r| r.map(|t| Self::ClaimClaimableBalanceOp(Box::new(t)))),
62516            ),
62517            TypeVariant::BeginSponsoringFutureReservesOp => Box::new(
62518                ReadXdrIter::<_, BeginSponsoringFutureReservesOp>::new(dec, r.limits.clone())
62519                    .map(|r| r.map(|t| Self::BeginSponsoringFutureReservesOp(Box::new(t)))),
62520            ),
62521            TypeVariant::RevokeSponsorshipType => Box::new(
62522                ReadXdrIter::<_, RevokeSponsorshipType>::new(dec, r.limits.clone())
62523                    .map(|r| r.map(|t| Self::RevokeSponsorshipType(Box::new(t)))),
62524            ),
62525            TypeVariant::RevokeSponsorshipOp => Box::new(
62526                ReadXdrIter::<_, RevokeSponsorshipOp>::new(dec, r.limits.clone())
62527                    .map(|r| r.map(|t| Self::RevokeSponsorshipOp(Box::new(t)))),
62528            ),
62529            TypeVariant::RevokeSponsorshipOpSigner => Box::new(
62530                ReadXdrIter::<_, RevokeSponsorshipOpSigner>::new(dec, r.limits.clone())
62531                    .map(|r| r.map(|t| Self::RevokeSponsorshipOpSigner(Box::new(t)))),
62532            ),
62533            TypeVariant::ClawbackOp => Box::new(
62534                ReadXdrIter::<_, ClawbackOp>::new(dec, r.limits.clone())
62535                    .map(|r| r.map(|t| Self::ClawbackOp(Box::new(t)))),
62536            ),
62537            TypeVariant::ClawbackClaimableBalanceOp => Box::new(
62538                ReadXdrIter::<_, ClawbackClaimableBalanceOp>::new(dec, r.limits.clone())
62539                    .map(|r| r.map(|t| Self::ClawbackClaimableBalanceOp(Box::new(t)))),
62540            ),
62541            TypeVariant::SetTrustLineFlagsOp => Box::new(
62542                ReadXdrIter::<_, SetTrustLineFlagsOp>::new(dec, r.limits.clone())
62543                    .map(|r| r.map(|t| Self::SetTrustLineFlagsOp(Box::new(t)))),
62544            ),
62545            TypeVariant::LiquidityPoolDepositOp => Box::new(
62546                ReadXdrIter::<_, LiquidityPoolDepositOp>::new(dec, r.limits.clone())
62547                    .map(|r| r.map(|t| Self::LiquidityPoolDepositOp(Box::new(t)))),
62548            ),
62549            TypeVariant::LiquidityPoolWithdrawOp => Box::new(
62550                ReadXdrIter::<_, LiquidityPoolWithdrawOp>::new(dec, r.limits.clone())
62551                    .map(|r| r.map(|t| Self::LiquidityPoolWithdrawOp(Box::new(t)))),
62552            ),
62553            TypeVariant::HostFunctionType => Box::new(
62554                ReadXdrIter::<_, HostFunctionType>::new(dec, r.limits.clone())
62555                    .map(|r| r.map(|t| Self::HostFunctionType(Box::new(t)))),
62556            ),
62557            TypeVariant::ContractIdPreimageType => Box::new(
62558                ReadXdrIter::<_, ContractIdPreimageType>::new(dec, r.limits.clone())
62559                    .map(|r| r.map(|t| Self::ContractIdPreimageType(Box::new(t)))),
62560            ),
62561            TypeVariant::ContractIdPreimage => Box::new(
62562                ReadXdrIter::<_, ContractIdPreimage>::new(dec, r.limits.clone())
62563                    .map(|r| r.map(|t| Self::ContractIdPreimage(Box::new(t)))),
62564            ),
62565            TypeVariant::ContractIdPreimageFromAddress => Box::new(
62566                ReadXdrIter::<_, ContractIdPreimageFromAddress>::new(dec, r.limits.clone())
62567                    .map(|r| r.map(|t| Self::ContractIdPreimageFromAddress(Box::new(t)))),
62568            ),
62569            TypeVariant::CreateContractArgs => Box::new(
62570                ReadXdrIter::<_, CreateContractArgs>::new(dec, r.limits.clone())
62571                    .map(|r| r.map(|t| Self::CreateContractArgs(Box::new(t)))),
62572            ),
62573            TypeVariant::CreateContractArgsV2 => Box::new(
62574                ReadXdrIter::<_, CreateContractArgsV2>::new(dec, r.limits.clone())
62575                    .map(|r| r.map(|t| Self::CreateContractArgsV2(Box::new(t)))),
62576            ),
62577            TypeVariant::InvokeContractArgs => Box::new(
62578                ReadXdrIter::<_, InvokeContractArgs>::new(dec, r.limits.clone())
62579                    .map(|r| r.map(|t| Self::InvokeContractArgs(Box::new(t)))),
62580            ),
62581            TypeVariant::HostFunction => Box::new(
62582                ReadXdrIter::<_, HostFunction>::new(dec, r.limits.clone())
62583                    .map(|r| r.map(|t| Self::HostFunction(Box::new(t)))),
62584            ),
62585            TypeVariant::SorobanAuthorizedFunctionType => Box::new(
62586                ReadXdrIter::<_, SorobanAuthorizedFunctionType>::new(dec, r.limits.clone())
62587                    .map(|r| r.map(|t| Self::SorobanAuthorizedFunctionType(Box::new(t)))),
62588            ),
62589            TypeVariant::SorobanAuthorizedFunction => Box::new(
62590                ReadXdrIter::<_, SorobanAuthorizedFunction>::new(dec, r.limits.clone())
62591                    .map(|r| r.map(|t| Self::SorobanAuthorizedFunction(Box::new(t)))),
62592            ),
62593            TypeVariant::SorobanAuthorizedInvocation => Box::new(
62594                ReadXdrIter::<_, SorobanAuthorizedInvocation>::new(dec, r.limits.clone())
62595                    .map(|r| r.map(|t| Self::SorobanAuthorizedInvocation(Box::new(t)))),
62596            ),
62597            TypeVariant::SorobanAddressCredentials => Box::new(
62598                ReadXdrIter::<_, SorobanAddressCredentials>::new(dec, r.limits.clone())
62599                    .map(|r| r.map(|t| Self::SorobanAddressCredentials(Box::new(t)))),
62600            ),
62601            TypeVariant::SorobanCredentialsType => Box::new(
62602                ReadXdrIter::<_, SorobanCredentialsType>::new(dec, r.limits.clone())
62603                    .map(|r| r.map(|t| Self::SorobanCredentialsType(Box::new(t)))),
62604            ),
62605            TypeVariant::SorobanCredentials => Box::new(
62606                ReadXdrIter::<_, SorobanCredentials>::new(dec, r.limits.clone())
62607                    .map(|r| r.map(|t| Self::SorobanCredentials(Box::new(t)))),
62608            ),
62609            TypeVariant::SorobanAuthorizationEntry => Box::new(
62610                ReadXdrIter::<_, SorobanAuthorizationEntry>::new(dec, r.limits.clone())
62611                    .map(|r| r.map(|t| Self::SorobanAuthorizationEntry(Box::new(t)))),
62612            ),
62613            TypeVariant::SorobanAuthorizationEntries => Box::new(
62614                ReadXdrIter::<_, SorobanAuthorizationEntries>::new(dec, r.limits.clone())
62615                    .map(|r| r.map(|t| Self::SorobanAuthorizationEntries(Box::new(t)))),
62616            ),
62617            TypeVariant::InvokeHostFunctionOp => Box::new(
62618                ReadXdrIter::<_, InvokeHostFunctionOp>::new(dec, r.limits.clone())
62619                    .map(|r| r.map(|t| Self::InvokeHostFunctionOp(Box::new(t)))),
62620            ),
62621            TypeVariant::ExtendFootprintTtlOp => Box::new(
62622                ReadXdrIter::<_, ExtendFootprintTtlOp>::new(dec, r.limits.clone())
62623                    .map(|r| r.map(|t| Self::ExtendFootprintTtlOp(Box::new(t)))),
62624            ),
62625            TypeVariant::RestoreFootprintOp => Box::new(
62626                ReadXdrIter::<_, RestoreFootprintOp>::new(dec, r.limits.clone())
62627                    .map(|r| r.map(|t| Self::RestoreFootprintOp(Box::new(t)))),
62628            ),
62629            TypeVariant::Operation => Box::new(
62630                ReadXdrIter::<_, Operation>::new(dec, r.limits.clone())
62631                    .map(|r| r.map(|t| Self::Operation(Box::new(t)))),
62632            ),
62633            TypeVariant::OperationBody => Box::new(
62634                ReadXdrIter::<_, OperationBody>::new(dec, r.limits.clone())
62635                    .map(|r| r.map(|t| Self::OperationBody(Box::new(t)))),
62636            ),
62637            TypeVariant::HashIdPreimage => Box::new(
62638                ReadXdrIter::<_, HashIdPreimage>::new(dec, r.limits.clone())
62639                    .map(|r| r.map(|t| Self::HashIdPreimage(Box::new(t)))),
62640            ),
62641            TypeVariant::HashIdPreimageOperationId => Box::new(
62642                ReadXdrIter::<_, HashIdPreimageOperationId>::new(dec, r.limits.clone())
62643                    .map(|r| r.map(|t| Self::HashIdPreimageOperationId(Box::new(t)))),
62644            ),
62645            TypeVariant::HashIdPreimageRevokeId => Box::new(
62646                ReadXdrIter::<_, HashIdPreimageRevokeId>::new(dec, r.limits.clone())
62647                    .map(|r| r.map(|t| Self::HashIdPreimageRevokeId(Box::new(t)))),
62648            ),
62649            TypeVariant::HashIdPreimageContractId => Box::new(
62650                ReadXdrIter::<_, HashIdPreimageContractId>::new(dec, r.limits.clone())
62651                    .map(|r| r.map(|t| Self::HashIdPreimageContractId(Box::new(t)))),
62652            ),
62653            TypeVariant::HashIdPreimageSorobanAuthorization => Box::new(
62654                ReadXdrIter::<_, HashIdPreimageSorobanAuthorization>::new(dec, r.limits.clone())
62655                    .map(|r| r.map(|t| Self::HashIdPreimageSorobanAuthorization(Box::new(t)))),
62656            ),
62657            TypeVariant::MemoType => Box::new(
62658                ReadXdrIter::<_, MemoType>::new(dec, r.limits.clone())
62659                    .map(|r| r.map(|t| Self::MemoType(Box::new(t)))),
62660            ),
62661            TypeVariant::Memo => Box::new(
62662                ReadXdrIter::<_, Memo>::new(dec, r.limits.clone())
62663                    .map(|r| r.map(|t| Self::Memo(Box::new(t)))),
62664            ),
62665            TypeVariant::TimeBounds => Box::new(
62666                ReadXdrIter::<_, TimeBounds>::new(dec, r.limits.clone())
62667                    .map(|r| r.map(|t| Self::TimeBounds(Box::new(t)))),
62668            ),
62669            TypeVariant::LedgerBounds => Box::new(
62670                ReadXdrIter::<_, LedgerBounds>::new(dec, r.limits.clone())
62671                    .map(|r| r.map(|t| Self::LedgerBounds(Box::new(t)))),
62672            ),
62673            TypeVariant::PreconditionsV2 => Box::new(
62674                ReadXdrIter::<_, PreconditionsV2>::new(dec, r.limits.clone())
62675                    .map(|r| r.map(|t| Self::PreconditionsV2(Box::new(t)))),
62676            ),
62677            TypeVariant::PreconditionType => Box::new(
62678                ReadXdrIter::<_, PreconditionType>::new(dec, r.limits.clone())
62679                    .map(|r| r.map(|t| Self::PreconditionType(Box::new(t)))),
62680            ),
62681            TypeVariant::Preconditions => Box::new(
62682                ReadXdrIter::<_, Preconditions>::new(dec, r.limits.clone())
62683                    .map(|r| r.map(|t| Self::Preconditions(Box::new(t)))),
62684            ),
62685            TypeVariant::LedgerFootprint => Box::new(
62686                ReadXdrIter::<_, LedgerFootprint>::new(dec, r.limits.clone())
62687                    .map(|r| r.map(|t| Self::LedgerFootprint(Box::new(t)))),
62688            ),
62689            TypeVariant::SorobanResources => Box::new(
62690                ReadXdrIter::<_, SorobanResources>::new(dec, r.limits.clone())
62691                    .map(|r| r.map(|t| Self::SorobanResources(Box::new(t)))),
62692            ),
62693            TypeVariant::SorobanResourcesExtV0 => Box::new(
62694                ReadXdrIter::<_, SorobanResourcesExtV0>::new(dec, r.limits.clone())
62695                    .map(|r| r.map(|t| Self::SorobanResourcesExtV0(Box::new(t)))),
62696            ),
62697            TypeVariant::SorobanTransactionData => Box::new(
62698                ReadXdrIter::<_, SorobanTransactionData>::new(dec, r.limits.clone())
62699                    .map(|r| r.map(|t| Self::SorobanTransactionData(Box::new(t)))),
62700            ),
62701            TypeVariant::SorobanTransactionDataExt => Box::new(
62702                ReadXdrIter::<_, SorobanTransactionDataExt>::new(dec, r.limits.clone())
62703                    .map(|r| r.map(|t| Self::SorobanTransactionDataExt(Box::new(t)))),
62704            ),
62705            TypeVariant::TransactionV0 => Box::new(
62706                ReadXdrIter::<_, TransactionV0>::new(dec, r.limits.clone())
62707                    .map(|r| r.map(|t| Self::TransactionV0(Box::new(t)))),
62708            ),
62709            TypeVariant::TransactionV0Ext => Box::new(
62710                ReadXdrIter::<_, TransactionV0Ext>::new(dec, r.limits.clone())
62711                    .map(|r| r.map(|t| Self::TransactionV0Ext(Box::new(t)))),
62712            ),
62713            TypeVariant::TransactionV0Envelope => Box::new(
62714                ReadXdrIter::<_, TransactionV0Envelope>::new(dec, r.limits.clone())
62715                    .map(|r| r.map(|t| Self::TransactionV0Envelope(Box::new(t)))),
62716            ),
62717            TypeVariant::Transaction => Box::new(
62718                ReadXdrIter::<_, Transaction>::new(dec, r.limits.clone())
62719                    .map(|r| r.map(|t| Self::Transaction(Box::new(t)))),
62720            ),
62721            TypeVariant::TransactionExt => Box::new(
62722                ReadXdrIter::<_, TransactionExt>::new(dec, r.limits.clone())
62723                    .map(|r| r.map(|t| Self::TransactionExt(Box::new(t)))),
62724            ),
62725            TypeVariant::TransactionV1Envelope => Box::new(
62726                ReadXdrIter::<_, TransactionV1Envelope>::new(dec, r.limits.clone())
62727                    .map(|r| r.map(|t| Self::TransactionV1Envelope(Box::new(t)))),
62728            ),
62729            TypeVariant::FeeBumpTransaction => Box::new(
62730                ReadXdrIter::<_, FeeBumpTransaction>::new(dec, r.limits.clone())
62731                    .map(|r| r.map(|t| Self::FeeBumpTransaction(Box::new(t)))),
62732            ),
62733            TypeVariant::FeeBumpTransactionInnerTx => Box::new(
62734                ReadXdrIter::<_, FeeBumpTransactionInnerTx>::new(dec, r.limits.clone())
62735                    .map(|r| r.map(|t| Self::FeeBumpTransactionInnerTx(Box::new(t)))),
62736            ),
62737            TypeVariant::FeeBumpTransactionExt => Box::new(
62738                ReadXdrIter::<_, FeeBumpTransactionExt>::new(dec, r.limits.clone())
62739                    .map(|r| r.map(|t| Self::FeeBumpTransactionExt(Box::new(t)))),
62740            ),
62741            TypeVariant::FeeBumpTransactionEnvelope => Box::new(
62742                ReadXdrIter::<_, FeeBumpTransactionEnvelope>::new(dec, r.limits.clone())
62743                    .map(|r| r.map(|t| Self::FeeBumpTransactionEnvelope(Box::new(t)))),
62744            ),
62745            TypeVariant::TransactionEnvelope => Box::new(
62746                ReadXdrIter::<_, TransactionEnvelope>::new(dec, r.limits.clone())
62747                    .map(|r| r.map(|t| Self::TransactionEnvelope(Box::new(t)))),
62748            ),
62749            TypeVariant::TransactionSignaturePayload => Box::new(
62750                ReadXdrIter::<_, TransactionSignaturePayload>::new(dec, r.limits.clone())
62751                    .map(|r| r.map(|t| Self::TransactionSignaturePayload(Box::new(t)))),
62752            ),
62753            TypeVariant::TransactionSignaturePayloadTaggedTransaction => Box::new(
62754                ReadXdrIter::<_, TransactionSignaturePayloadTaggedTransaction>::new(
62755                    dec,
62756                    r.limits.clone(),
62757                )
62758                .map(|r| {
62759                    r.map(|t| Self::TransactionSignaturePayloadTaggedTransaction(Box::new(t)))
62760                }),
62761            ),
62762            TypeVariant::ClaimAtomType => Box::new(
62763                ReadXdrIter::<_, ClaimAtomType>::new(dec, r.limits.clone())
62764                    .map(|r| r.map(|t| Self::ClaimAtomType(Box::new(t)))),
62765            ),
62766            TypeVariant::ClaimOfferAtomV0 => Box::new(
62767                ReadXdrIter::<_, ClaimOfferAtomV0>::new(dec, r.limits.clone())
62768                    .map(|r| r.map(|t| Self::ClaimOfferAtomV0(Box::new(t)))),
62769            ),
62770            TypeVariant::ClaimOfferAtom => Box::new(
62771                ReadXdrIter::<_, ClaimOfferAtom>::new(dec, r.limits.clone())
62772                    .map(|r| r.map(|t| Self::ClaimOfferAtom(Box::new(t)))),
62773            ),
62774            TypeVariant::ClaimLiquidityAtom => Box::new(
62775                ReadXdrIter::<_, ClaimLiquidityAtom>::new(dec, r.limits.clone())
62776                    .map(|r| r.map(|t| Self::ClaimLiquidityAtom(Box::new(t)))),
62777            ),
62778            TypeVariant::ClaimAtom => Box::new(
62779                ReadXdrIter::<_, ClaimAtom>::new(dec, r.limits.clone())
62780                    .map(|r| r.map(|t| Self::ClaimAtom(Box::new(t)))),
62781            ),
62782            TypeVariant::CreateAccountResultCode => Box::new(
62783                ReadXdrIter::<_, CreateAccountResultCode>::new(dec, r.limits.clone())
62784                    .map(|r| r.map(|t| Self::CreateAccountResultCode(Box::new(t)))),
62785            ),
62786            TypeVariant::CreateAccountResult => Box::new(
62787                ReadXdrIter::<_, CreateAccountResult>::new(dec, r.limits.clone())
62788                    .map(|r| r.map(|t| Self::CreateAccountResult(Box::new(t)))),
62789            ),
62790            TypeVariant::PaymentResultCode => Box::new(
62791                ReadXdrIter::<_, PaymentResultCode>::new(dec, r.limits.clone())
62792                    .map(|r| r.map(|t| Self::PaymentResultCode(Box::new(t)))),
62793            ),
62794            TypeVariant::PaymentResult => Box::new(
62795                ReadXdrIter::<_, PaymentResult>::new(dec, r.limits.clone())
62796                    .map(|r| r.map(|t| Self::PaymentResult(Box::new(t)))),
62797            ),
62798            TypeVariant::PathPaymentStrictReceiveResultCode => Box::new(
62799                ReadXdrIter::<_, PathPaymentStrictReceiveResultCode>::new(dec, r.limits.clone())
62800                    .map(|r| r.map(|t| Self::PathPaymentStrictReceiveResultCode(Box::new(t)))),
62801            ),
62802            TypeVariant::SimplePaymentResult => Box::new(
62803                ReadXdrIter::<_, SimplePaymentResult>::new(dec, r.limits.clone())
62804                    .map(|r| r.map(|t| Self::SimplePaymentResult(Box::new(t)))),
62805            ),
62806            TypeVariant::PathPaymentStrictReceiveResult => Box::new(
62807                ReadXdrIter::<_, PathPaymentStrictReceiveResult>::new(dec, r.limits.clone())
62808                    .map(|r| r.map(|t| Self::PathPaymentStrictReceiveResult(Box::new(t)))),
62809            ),
62810            TypeVariant::PathPaymentStrictReceiveResultSuccess => Box::new(
62811                ReadXdrIter::<_, PathPaymentStrictReceiveResultSuccess>::new(dec, r.limits.clone())
62812                    .map(|r| r.map(|t| Self::PathPaymentStrictReceiveResultSuccess(Box::new(t)))),
62813            ),
62814            TypeVariant::PathPaymentStrictSendResultCode => Box::new(
62815                ReadXdrIter::<_, PathPaymentStrictSendResultCode>::new(dec, r.limits.clone())
62816                    .map(|r| r.map(|t| Self::PathPaymentStrictSendResultCode(Box::new(t)))),
62817            ),
62818            TypeVariant::PathPaymentStrictSendResult => Box::new(
62819                ReadXdrIter::<_, PathPaymentStrictSendResult>::new(dec, r.limits.clone())
62820                    .map(|r| r.map(|t| Self::PathPaymentStrictSendResult(Box::new(t)))),
62821            ),
62822            TypeVariant::PathPaymentStrictSendResultSuccess => Box::new(
62823                ReadXdrIter::<_, PathPaymentStrictSendResultSuccess>::new(dec, r.limits.clone())
62824                    .map(|r| r.map(|t| Self::PathPaymentStrictSendResultSuccess(Box::new(t)))),
62825            ),
62826            TypeVariant::ManageSellOfferResultCode => Box::new(
62827                ReadXdrIter::<_, ManageSellOfferResultCode>::new(dec, r.limits.clone())
62828                    .map(|r| r.map(|t| Self::ManageSellOfferResultCode(Box::new(t)))),
62829            ),
62830            TypeVariant::ManageOfferEffect => Box::new(
62831                ReadXdrIter::<_, ManageOfferEffect>::new(dec, r.limits.clone())
62832                    .map(|r| r.map(|t| Self::ManageOfferEffect(Box::new(t)))),
62833            ),
62834            TypeVariant::ManageOfferSuccessResult => Box::new(
62835                ReadXdrIter::<_, ManageOfferSuccessResult>::new(dec, r.limits.clone())
62836                    .map(|r| r.map(|t| Self::ManageOfferSuccessResult(Box::new(t)))),
62837            ),
62838            TypeVariant::ManageOfferSuccessResultOffer => Box::new(
62839                ReadXdrIter::<_, ManageOfferSuccessResultOffer>::new(dec, r.limits.clone())
62840                    .map(|r| r.map(|t| Self::ManageOfferSuccessResultOffer(Box::new(t)))),
62841            ),
62842            TypeVariant::ManageSellOfferResult => Box::new(
62843                ReadXdrIter::<_, ManageSellOfferResult>::new(dec, r.limits.clone())
62844                    .map(|r| r.map(|t| Self::ManageSellOfferResult(Box::new(t)))),
62845            ),
62846            TypeVariant::ManageBuyOfferResultCode => Box::new(
62847                ReadXdrIter::<_, ManageBuyOfferResultCode>::new(dec, r.limits.clone())
62848                    .map(|r| r.map(|t| Self::ManageBuyOfferResultCode(Box::new(t)))),
62849            ),
62850            TypeVariant::ManageBuyOfferResult => Box::new(
62851                ReadXdrIter::<_, ManageBuyOfferResult>::new(dec, r.limits.clone())
62852                    .map(|r| r.map(|t| Self::ManageBuyOfferResult(Box::new(t)))),
62853            ),
62854            TypeVariant::SetOptionsResultCode => Box::new(
62855                ReadXdrIter::<_, SetOptionsResultCode>::new(dec, r.limits.clone())
62856                    .map(|r| r.map(|t| Self::SetOptionsResultCode(Box::new(t)))),
62857            ),
62858            TypeVariant::SetOptionsResult => Box::new(
62859                ReadXdrIter::<_, SetOptionsResult>::new(dec, r.limits.clone())
62860                    .map(|r| r.map(|t| Self::SetOptionsResult(Box::new(t)))),
62861            ),
62862            TypeVariant::ChangeTrustResultCode => Box::new(
62863                ReadXdrIter::<_, ChangeTrustResultCode>::new(dec, r.limits.clone())
62864                    .map(|r| r.map(|t| Self::ChangeTrustResultCode(Box::new(t)))),
62865            ),
62866            TypeVariant::ChangeTrustResult => Box::new(
62867                ReadXdrIter::<_, ChangeTrustResult>::new(dec, r.limits.clone())
62868                    .map(|r| r.map(|t| Self::ChangeTrustResult(Box::new(t)))),
62869            ),
62870            TypeVariant::AllowTrustResultCode => Box::new(
62871                ReadXdrIter::<_, AllowTrustResultCode>::new(dec, r.limits.clone())
62872                    .map(|r| r.map(|t| Self::AllowTrustResultCode(Box::new(t)))),
62873            ),
62874            TypeVariant::AllowTrustResult => Box::new(
62875                ReadXdrIter::<_, AllowTrustResult>::new(dec, r.limits.clone())
62876                    .map(|r| r.map(|t| Self::AllowTrustResult(Box::new(t)))),
62877            ),
62878            TypeVariant::AccountMergeResultCode => Box::new(
62879                ReadXdrIter::<_, AccountMergeResultCode>::new(dec, r.limits.clone())
62880                    .map(|r| r.map(|t| Self::AccountMergeResultCode(Box::new(t)))),
62881            ),
62882            TypeVariant::AccountMergeResult => Box::new(
62883                ReadXdrIter::<_, AccountMergeResult>::new(dec, r.limits.clone())
62884                    .map(|r| r.map(|t| Self::AccountMergeResult(Box::new(t)))),
62885            ),
62886            TypeVariant::InflationResultCode => Box::new(
62887                ReadXdrIter::<_, InflationResultCode>::new(dec, r.limits.clone())
62888                    .map(|r| r.map(|t| Self::InflationResultCode(Box::new(t)))),
62889            ),
62890            TypeVariant::InflationPayout => Box::new(
62891                ReadXdrIter::<_, InflationPayout>::new(dec, r.limits.clone())
62892                    .map(|r| r.map(|t| Self::InflationPayout(Box::new(t)))),
62893            ),
62894            TypeVariant::InflationResult => Box::new(
62895                ReadXdrIter::<_, InflationResult>::new(dec, r.limits.clone())
62896                    .map(|r| r.map(|t| Self::InflationResult(Box::new(t)))),
62897            ),
62898            TypeVariant::ManageDataResultCode => Box::new(
62899                ReadXdrIter::<_, ManageDataResultCode>::new(dec, r.limits.clone())
62900                    .map(|r| r.map(|t| Self::ManageDataResultCode(Box::new(t)))),
62901            ),
62902            TypeVariant::ManageDataResult => Box::new(
62903                ReadXdrIter::<_, ManageDataResult>::new(dec, r.limits.clone())
62904                    .map(|r| r.map(|t| Self::ManageDataResult(Box::new(t)))),
62905            ),
62906            TypeVariant::BumpSequenceResultCode => Box::new(
62907                ReadXdrIter::<_, BumpSequenceResultCode>::new(dec, r.limits.clone())
62908                    .map(|r| r.map(|t| Self::BumpSequenceResultCode(Box::new(t)))),
62909            ),
62910            TypeVariant::BumpSequenceResult => Box::new(
62911                ReadXdrIter::<_, BumpSequenceResult>::new(dec, r.limits.clone())
62912                    .map(|r| r.map(|t| Self::BumpSequenceResult(Box::new(t)))),
62913            ),
62914            TypeVariant::CreateClaimableBalanceResultCode => Box::new(
62915                ReadXdrIter::<_, CreateClaimableBalanceResultCode>::new(dec, r.limits.clone())
62916                    .map(|r| r.map(|t| Self::CreateClaimableBalanceResultCode(Box::new(t)))),
62917            ),
62918            TypeVariant::CreateClaimableBalanceResult => Box::new(
62919                ReadXdrIter::<_, CreateClaimableBalanceResult>::new(dec, r.limits.clone())
62920                    .map(|r| r.map(|t| Self::CreateClaimableBalanceResult(Box::new(t)))),
62921            ),
62922            TypeVariant::ClaimClaimableBalanceResultCode => Box::new(
62923                ReadXdrIter::<_, ClaimClaimableBalanceResultCode>::new(dec, r.limits.clone())
62924                    .map(|r| r.map(|t| Self::ClaimClaimableBalanceResultCode(Box::new(t)))),
62925            ),
62926            TypeVariant::ClaimClaimableBalanceResult => Box::new(
62927                ReadXdrIter::<_, ClaimClaimableBalanceResult>::new(dec, r.limits.clone())
62928                    .map(|r| r.map(|t| Self::ClaimClaimableBalanceResult(Box::new(t)))),
62929            ),
62930            TypeVariant::BeginSponsoringFutureReservesResultCode => Box::new(
62931                ReadXdrIter::<_, BeginSponsoringFutureReservesResultCode>::new(
62932                    dec,
62933                    r.limits.clone(),
62934                )
62935                .map(|r| r.map(|t| Self::BeginSponsoringFutureReservesResultCode(Box::new(t)))),
62936            ),
62937            TypeVariant::BeginSponsoringFutureReservesResult => Box::new(
62938                ReadXdrIter::<_, BeginSponsoringFutureReservesResult>::new(dec, r.limits.clone())
62939                    .map(|r| r.map(|t| Self::BeginSponsoringFutureReservesResult(Box::new(t)))),
62940            ),
62941            TypeVariant::EndSponsoringFutureReservesResultCode => Box::new(
62942                ReadXdrIter::<_, EndSponsoringFutureReservesResultCode>::new(dec, r.limits.clone())
62943                    .map(|r| r.map(|t| Self::EndSponsoringFutureReservesResultCode(Box::new(t)))),
62944            ),
62945            TypeVariant::EndSponsoringFutureReservesResult => Box::new(
62946                ReadXdrIter::<_, EndSponsoringFutureReservesResult>::new(dec, r.limits.clone())
62947                    .map(|r| r.map(|t| Self::EndSponsoringFutureReservesResult(Box::new(t)))),
62948            ),
62949            TypeVariant::RevokeSponsorshipResultCode => Box::new(
62950                ReadXdrIter::<_, RevokeSponsorshipResultCode>::new(dec, r.limits.clone())
62951                    .map(|r| r.map(|t| Self::RevokeSponsorshipResultCode(Box::new(t)))),
62952            ),
62953            TypeVariant::RevokeSponsorshipResult => Box::new(
62954                ReadXdrIter::<_, RevokeSponsorshipResult>::new(dec, r.limits.clone())
62955                    .map(|r| r.map(|t| Self::RevokeSponsorshipResult(Box::new(t)))),
62956            ),
62957            TypeVariant::ClawbackResultCode => Box::new(
62958                ReadXdrIter::<_, ClawbackResultCode>::new(dec, r.limits.clone())
62959                    .map(|r| r.map(|t| Self::ClawbackResultCode(Box::new(t)))),
62960            ),
62961            TypeVariant::ClawbackResult => Box::new(
62962                ReadXdrIter::<_, ClawbackResult>::new(dec, r.limits.clone())
62963                    .map(|r| r.map(|t| Self::ClawbackResult(Box::new(t)))),
62964            ),
62965            TypeVariant::ClawbackClaimableBalanceResultCode => Box::new(
62966                ReadXdrIter::<_, ClawbackClaimableBalanceResultCode>::new(dec, r.limits.clone())
62967                    .map(|r| r.map(|t| Self::ClawbackClaimableBalanceResultCode(Box::new(t)))),
62968            ),
62969            TypeVariant::ClawbackClaimableBalanceResult => Box::new(
62970                ReadXdrIter::<_, ClawbackClaimableBalanceResult>::new(dec, r.limits.clone())
62971                    .map(|r| r.map(|t| Self::ClawbackClaimableBalanceResult(Box::new(t)))),
62972            ),
62973            TypeVariant::SetTrustLineFlagsResultCode => Box::new(
62974                ReadXdrIter::<_, SetTrustLineFlagsResultCode>::new(dec, r.limits.clone())
62975                    .map(|r| r.map(|t| Self::SetTrustLineFlagsResultCode(Box::new(t)))),
62976            ),
62977            TypeVariant::SetTrustLineFlagsResult => Box::new(
62978                ReadXdrIter::<_, SetTrustLineFlagsResult>::new(dec, r.limits.clone())
62979                    .map(|r| r.map(|t| Self::SetTrustLineFlagsResult(Box::new(t)))),
62980            ),
62981            TypeVariant::LiquidityPoolDepositResultCode => Box::new(
62982                ReadXdrIter::<_, LiquidityPoolDepositResultCode>::new(dec, r.limits.clone())
62983                    .map(|r| r.map(|t| Self::LiquidityPoolDepositResultCode(Box::new(t)))),
62984            ),
62985            TypeVariant::LiquidityPoolDepositResult => Box::new(
62986                ReadXdrIter::<_, LiquidityPoolDepositResult>::new(dec, r.limits.clone())
62987                    .map(|r| r.map(|t| Self::LiquidityPoolDepositResult(Box::new(t)))),
62988            ),
62989            TypeVariant::LiquidityPoolWithdrawResultCode => Box::new(
62990                ReadXdrIter::<_, LiquidityPoolWithdrawResultCode>::new(dec, r.limits.clone())
62991                    .map(|r| r.map(|t| Self::LiquidityPoolWithdrawResultCode(Box::new(t)))),
62992            ),
62993            TypeVariant::LiquidityPoolWithdrawResult => Box::new(
62994                ReadXdrIter::<_, LiquidityPoolWithdrawResult>::new(dec, r.limits.clone())
62995                    .map(|r| r.map(|t| Self::LiquidityPoolWithdrawResult(Box::new(t)))),
62996            ),
62997            TypeVariant::InvokeHostFunctionResultCode => Box::new(
62998                ReadXdrIter::<_, InvokeHostFunctionResultCode>::new(dec, r.limits.clone())
62999                    .map(|r| r.map(|t| Self::InvokeHostFunctionResultCode(Box::new(t)))),
63000            ),
63001            TypeVariant::InvokeHostFunctionResult => Box::new(
63002                ReadXdrIter::<_, InvokeHostFunctionResult>::new(dec, r.limits.clone())
63003                    .map(|r| r.map(|t| Self::InvokeHostFunctionResult(Box::new(t)))),
63004            ),
63005            TypeVariant::ExtendFootprintTtlResultCode => Box::new(
63006                ReadXdrIter::<_, ExtendFootprintTtlResultCode>::new(dec, r.limits.clone())
63007                    .map(|r| r.map(|t| Self::ExtendFootprintTtlResultCode(Box::new(t)))),
63008            ),
63009            TypeVariant::ExtendFootprintTtlResult => Box::new(
63010                ReadXdrIter::<_, ExtendFootprintTtlResult>::new(dec, r.limits.clone())
63011                    .map(|r| r.map(|t| Self::ExtendFootprintTtlResult(Box::new(t)))),
63012            ),
63013            TypeVariant::RestoreFootprintResultCode => Box::new(
63014                ReadXdrIter::<_, RestoreFootprintResultCode>::new(dec, r.limits.clone())
63015                    .map(|r| r.map(|t| Self::RestoreFootprintResultCode(Box::new(t)))),
63016            ),
63017            TypeVariant::RestoreFootprintResult => Box::new(
63018                ReadXdrIter::<_, RestoreFootprintResult>::new(dec, r.limits.clone())
63019                    .map(|r| r.map(|t| Self::RestoreFootprintResult(Box::new(t)))),
63020            ),
63021            TypeVariant::OperationResultCode => Box::new(
63022                ReadXdrIter::<_, OperationResultCode>::new(dec, r.limits.clone())
63023                    .map(|r| r.map(|t| Self::OperationResultCode(Box::new(t)))),
63024            ),
63025            TypeVariant::OperationResult => Box::new(
63026                ReadXdrIter::<_, OperationResult>::new(dec, r.limits.clone())
63027                    .map(|r| r.map(|t| Self::OperationResult(Box::new(t)))),
63028            ),
63029            TypeVariant::OperationResultTr => Box::new(
63030                ReadXdrIter::<_, OperationResultTr>::new(dec, r.limits.clone())
63031                    .map(|r| r.map(|t| Self::OperationResultTr(Box::new(t)))),
63032            ),
63033            TypeVariant::TransactionResultCode => Box::new(
63034                ReadXdrIter::<_, TransactionResultCode>::new(dec, r.limits.clone())
63035                    .map(|r| r.map(|t| Self::TransactionResultCode(Box::new(t)))),
63036            ),
63037            TypeVariant::InnerTransactionResult => Box::new(
63038                ReadXdrIter::<_, InnerTransactionResult>::new(dec, r.limits.clone())
63039                    .map(|r| r.map(|t| Self::InnerTransactionResult(Box::new(t)))),
63040            ),
63041            TypeVariant::InnerTransactionResultResult => Box::new(
63042                ReadXdrIter::<_, InnerTransactionResultResult>::new(dec, r.limits.clone())
63043                    .map(|r| r.map(|t| Self::InnerTransactionResultResult(Box::new(t)))),
63044            ),
63045            TypeVariant::InnerTransactionResultExt => Box::new(
63046                ReadXdrIter::<_, InnerTransactionResultExt>::new(dec, r.limits.clone())
63047                    .map(|r| r.map(|t| Self::InnerTransactionResultExt(Box::new(t)))),
63048            ),
63049            TypeVariant::InnerTransactionResultPair => Box::new(
63050                ReadXdrIter::<_, InnerTransactionResultPair>::new(dec, r.limits.clone())
63051                    .map(|r| r.map(|t| Self::InnerTransactionResultPair(Box::new(t)))),
63052            ),
63053            TypeVariant::TransactionResult => Box::new(
63054                ReadXdrIter::<_, TransactionResult>::new(dec, r.limits.clone())
63055                    .map(|r| r.map(|t| Self::TransactionResult(Box::new(t)))),
63056            ),
63057            TypeVariant::TransactionResultResult => Box::new(
63058                ReadXdrIter::<_, TransactionResultResult>::new(dec, r.limits.clone())
63059                    .map(|r| r.map(|t| Self::TransactionResultResult(Box::new(t)))),
63060            ),
63061            TypeVariant::TransactionResultExt => Box::new(
63062                ReadXdrIter::<_, TransactionResultExt>::new(dec, r.limits.clone())
63063                    .map(|r| r.map(|t| Self::TransactionResultExt(Box::new(t)))),
63064            ),
63065            TypeVariant::Hash => Box::new(
63066                ReadXdrIter::<_, Hash>::new(dec, r.limits.clone())
63067                    .map(|r| r.map(|t| Self::Hash(Box::new(t)))),
63068            ),
63069            TypeVariant::Uint256 => Box::new(
63070                ReadXdrIter::<_, Uint256>::new(dec, r.limits.clone())
63071                    .map(|r| r.map(|t| Self::Uint256(Box::new(t)))),
63072            ),
63073            TypeVariant::Uint32 => Box::new(
63074                ReadXdrIter::<_, Uint32>::new(dec, r.limits.clone())
63075                    .map(|r| r.map(|t| Self::Uint32(Box::new(t)))),
63076            ),
63077            TypeVariant::Int32 => Box::new(
63078                ReadXdrIter::<_, Int32>::new(dec, r.limits.clone())
63079                    .map(|r| r.map(|t| Self::Int32(Box::new(t)))),
63080            ),
63081            TypeVariant::Uint64 => Box::new(
63082                ReadXdrIter::<_, Uint64>::new(dec, r.limits.clone())
63083                    .map(|r| r.map(|t| Self::Uint64(Box::new(t)))),
63084            ),
63085            TypeVariant::Int64 => Box::new(
63086                ReadXdrIter::<_, Int64>::new(dec, r.limits.clone())
63087                    .map(|r| r.map(|t| Self::Int64(Box::new(t)))),
63088            ),
63089            TypeVariant::TimePoint => Box::new(
63090                ReadXdrIter::<_, TimePoint>::new(dec, r.limits.clone())
63091                    .map(|r| r.map(|t| Self::TimePoint(Box::new(t)))),
63092            ),
63093            TypeVariant::Duration => Box::new(
63094                ReadXdrIter::<_, Duration>::new(dec, r.limits.clone())
63095                    .map(|r| r.map(|t| Self::Duration(Box::new(t)))),
63096            ),
63097            TypeVariant::ExtensionPoint => Box::new(
63098                ReadXdrIter::<_, ExtensionPoint>::new(dec, r.limits.clone())
63099                    .map(|r| r.map(|t| Self::ExtensionPoint(Box::new(t)))),
63100            ),
63101            TypeVariant::CryptoKeyType => Box::new(
63102                ReadXdrIter::<_, CryptoKeyType>::new(dec, r.limits.clone())
63103                    .map(|r| r.map(|t| Self::CryptoKeyType(Box::new(t)))),
63104            ),
63105            TypeVariant::PublicKeyType => Box::new(
63106                ReadXdrIter::<_, PublicKeyType>::new(dec, r.limits.clone())
63107                    .map(|r| r.map(|t| Self::PublicKeyType(Box::new(t)))),
63108            ),
63109            TypeVariant::SignerKeyType => Box::new(
63110                ReadXdrIter::<_, SignerKeyType>::new(dec, r.limits.clone())
63111                    .map(|r| r.map(|t| Self::SignerKeyType(Box::new(t)))),
63112            ),
63113            TypeVariant::PublicKey => Box::new(
63114                ReadXdrIter::<_, PublicKey>::new(dec, r.limits.clone())
63115                    .map(|r| r.map(|t| Self::PublicKey(Box::new(t)))),
63116            ),
63117            TypeVariant::SignerKey => Box::new(
63118                ReadXdrIter::<_, SignerKey>::new(dec, r.limits.clone())
63119                    .map(|r| r.map(|t| Self::SignerKey(Box::new(t)))),
63120            ),
63121            TypeVariant::SignerKeyEd25519SignedPayload => Box::new(
63122                ReadXdrIter::<_, SignerKeyEd25519SignedPayload>::new(dec, r.limits.clone())
63123                    .map(|r| r.map(|t| Self::SignerKeyEd25519SignedPayload(Box::new(t)))),
63124            ),
63125            TypeVariant::Signature => Box::new(
63126                ReadXdrIter::<_, Signature>::new(dec, r.limits.clone())
63127                    .map(|r| r.map(|t| Self::Signature(Box::new(t)))),
63128            ),
63129            TypeVariant::SignatureHint => Box::new(
63130                ReadXdrIter::<_, SignatureHint>::new(dec, r.limits.clone())
63131                    .map(|r| r.map(|t| Self::SignatureHint(Box::new(t)))),
63132            ),
63133            TypeVariant::NodeId => Box::new(
63134                ReadXdrIter::<_, NodeId>::new(dec, r.limits.clone())
63135                    .map(|r| r.map(|t| Self::NodeId(Box::new(t)))),
63136            ),
63137            TypeVariant::AccountId => Box::new(
63138                ReadXdrIter::<_, AccountId>::new(dec, r.limits.clone())
63139                    .map(|r| r.map(|t| Self::AccountId(Box::new(t)))),
63140            ),
63141            TypeVariant::ContractId => Box::new(
63142                ReadXdrIter::<_, ContractId>::new(dec, r.limits.clone())
63143                    .map(|r| r.map(|t| Self::ContractId(Box::new(t)))),
63144            ),
63145            TypeVariant::Curve25519Secret => Box::new(
63146                ReadXdrIter::<_, Curve25519Secret>::new(dec, r.limits.clone())
63147                    .map(|r| r.map(|t| Self::Curve25519Secret(Box::new(t)))),
63148            ),
63149            TypeVariant::Curve25519Public => Box::new(
63150                ReadXdrIter::<_, Curve25519Public>::new(dec, r.limits.clone())
63151                    .map(|r| r.map(|t| Self::Curve25519Public(Box::new(t)))),
63152            ),
63153            TypeVariant::HmacSha256Key => Box::new(
63154                ReadXdrIter::<_, HmacSha256Key>::new(dec, r.limits.clone())
63155                    .map(|r| r.map(|t| Self::HmacSha256Key(Box::new(t)))),
63156            ),
63157            TypeVariant::HmacSha256Mac => Box::new(
63158                ReadXdrIter::<_, HmacSha256Mac>::new(dec, r.limits.clone())
63159                    .map(|r| r.map(|t| Self::HmacSha256Mac(Box::new(t)))),
63160            ),
63161            TypeVariant::ShortHashSeed => Box::new(
63162                ReadXdrIter::<_, ShortHashSeed>::new(dec, r.limits.clone())
63163                    .map(|r| r.map(|t| Self::ShortHashSeed(Box::new(t)))),
63164            ),
63165            TypeVariant::BinaryFuseFilterType => Box::new(
63166                ReadXdrIter::<_, BinaryFuseFilterType>::new(dec, r.limits.clone())
63167                    .map(|r| r.map(|t| Self::BinaryFuseFilterType(Box::new(t)))),
63168            ),
63169            TypeVariant::SerializedBinaryFuseFilter => Box::new(
63170                ReadXdrIter::<_, SerializedBinaryFuseFilter>::new(dec, r.limits.clone())
63171                    .map(|r| r.map(|t| Self::SerializedBinaryFuseFilter(Box::new(t)))),
63172            ),
63173            TypeVariant::PoolId => Box::new(
63174                ReadXdrIter::<_, PoolId>::new(dec, r.limits.clone())
63175                    .map(|r| r.map(|t| Self::PoolId(Box::new(t)))),
63176            ),
63177            TypeVariant::ClaimableBalanceIdType => Box::new(
63178                ReadXdrIter::<_, ClaimableBalanceIdType>::new(dec, r.limits.clone())
63179                    .map(|r| r.map(|t| Self::ClaimableBalanceIdType(Box::new(t)))),
63180            ),
63181            TypeVariant::ClaimableBalanceId => Box::new(
63182                ReadXdrIter::<_, ClaimableBalanceId>::new(dec, r.limits.clone())
63183                    .map(|r| r.map(|t| Self::ClaimableBalanceId(Box::new(t)))),
63184            ),
63185        }
63186    }
63187
63188    #[cfg(feature = "std")]
63189    pub fn from_xdr<B: AsRef<[u8]>>(
63190        v: TypeVariant,
63191        bytes: B,
63192        limits: Limits,
63193    ) -> Result<Self, Error> {
63194        let mut cursor = Limited::new(Cursor::new(bytes.as_ref()), limits);
63195        let t = Self::read_xdr_to_end(v, &mut cursor)?;
63196        Ok(t)
63197    }
63198
63199    #[cfg(feature = "base64")]
63200    pub fn from_xdr_base64(
63201        v: TypeVariant,
63202        b64: impl AsRef<[u8]>,
63203        limits: Limits,
63204    ) -> Result<Self, Error> {
63205        let mut dec = Limited::new(
63206            base64::read::DecoderReader::new(
63207                SkipWhitespace::new(Cursor::new(b64)),
63208                &base64::engine::general_purpose::STANDARD,
63209            ),
63210            limits,
63211        );
63212        let t = Self::read_xdr_to_end(v, &mut dec)?;
63213        Ok(t)
63214    }
63215
63216    #[cfg(all(feature = "std", feature = "serde_json"))]
63217    #[deprecated(note = "use from_json")]
63218    pub fn read_json(v: TypeVariant, r: impl Read) -> Result<Self, Error> {
63219        Self::from_json(v, r)
63220    }
63221
63222    #[cfg(all(feature = "std", feature = "serde_json"))]
63223    #[allow(clippy::too_many_lines)]
63224    pub fn from_json(v: TypeVariant, r: impl Read) -> Result<Self, Error> {
63225        match v {
63226            TypeVariant::Value => Ok(Self::Value(Box::new(serde_json::from_reader(r)?))),
63227            TypeVariant::ScpBallot => Ok(Self::ScpBallot(Box::new(serde_json::from_reader(r)?))),
63228            TypeVariant::ScpStatementType => Ok(Self::ScpStatementType(Box::new(
63229                serde_json::from_reader(r)?,
63230            ))),
63231            TypeVariant::ScpNomination => {
63232                Ok(Self::ScpNomination(Box::new(serde_json::from_reader(r)?)))
63233            }
63234            TypeVariant::ScpStatement => {
63235                Ok(Self::ScpStatement(Box::new(serde_json::from_reader(r)?)))
63236            }
63237            TypeVariant::ScpStatementPledges => Ok(Self::ScpStatementPledges(Box::new(
63238                serde_json::from_reader(r)?,
63239            ))),
63240            TypeVariant::ScpStatementPrepare => Ok(Self::ScpStatementPrepare(Box::new(
63241                serde_json::from_reader(r)?,
63242            ))),
63243            TypeVariant::ScpStatementConfirm => Ok(Self::ScpStatementConfirm(Box::new(
63244                serde_json::from_reader(r)?,
63245            ))),
63246            TypeVariant::ScpStatementExternalize => Ok(Self::ScpStatementExternalize(Box::new(
63247                serde_json::from_reader(r)?,
63248            ))),
63249            TypeVariant::ScpEnvelope => {
63250                Ok(Self::ScpEnvelope(Box::new(serde_json::from_reader(r)?)))
63251            }
63252            TypeVariant::ScpQuorumSet => {
63253                Ok(Self::ScpQuorumSet(Box::new(serde_json::from_reader(r)?)))
63254            }
63255            TypeVariant::ConfigSettingContractExecutionLanesV0 => Ok(
63256                Self::ConfigSettingContractExecutionLanesV0(Box::new(serde_json::from_reader(r)?)),
63257            ),
63258            TypeVariant::ConfigSettingContractComputeV0 => Ok(
63259                Self::ConfigSettingContractComputeV0(Box::new(serde_json::from_reader(r)?)),
63260            ),
63261            TypeVariant::ConfigSettingContractParallelComputeV0 => Ok(
63262                Self::ConfigSettingContractParallelComputeV0(Box::new(serde_json::from_reader(r)?)),
63263            ),
63264            TypeVariant::ConfigSettingContractLedgerCostV0 => Ok(
63265                Self::ConfigSettingContractLedgerCostV0(Box::new(serde_json::from_reader(r)?)),
63266            ),
63267            TypeVariant::ConfigSettingContractLedgerCostExtV0 => Ok(
63268                Self::ConfigSettingContractLedgerCostExtV0(Box::new(serde_json::from_reader(r)?)),
63269            ),
63270            TypeVariant::ConfigSettingContractHistoricalDataV0 => Ok(
63271                Self::ConfigSettingContractHistoricalDataV0(Box::new(serde_json::from_reader(r)?)),
63272            ),
63273            TypeVariant::ConfigSettingContractEventsV0 => Ok(Self::ConfigSettingContractEventsV0(
63274                Box::new(serde_json::from_reader(r)?),
63275            )),
63276            TypeVariant::ConfigSettingContractBandwidthV0 => Ok(
63277                Self::ConfigSettingContractBandwidthV0(Box::new(serde_json::from_reader(r)?)),
63278            ),
63279            TypeVariant::ContractCostType => Ok(Self::ContractCostType(Box::new(
63280                serde_json::from_reader(r)?,
63281            ))),
63282            TypeVariant::ContractCostParamEntry => Ok(Self::ContractCostParamEntry(Box::new(
63283                serde_json::from_reader(r)?,
63284            ))),
63285            TypeVariant::StateArchivalSettings => Ok(Self::StateArchivalSettings(Box::new(
63286                serde_json::from_reader(r)?,
63287            ))),
63288            TypeVariant::EvictionIterator => Ok(Self::EvictionIterator(Box::new(
63289                serde_json::from_reader(r)?,
63290            ))),
63291            TypeVariant::ConfigSettingScpTiming => Ok(Self::ConfigSettingScpTiming(Box::new(
63292                serde_json::from_reader(r)?,
63293            ))),
63294            TypeVariant::ContractCostParams => Ok(Self::ContractCostParams(Box::new(
63295                serde_json::from_reader(r)?,
63296            ))),
63297            TypeVariant::ConfigSettingId => {
63298                Ok(Self::ConfigSettingId(Box::new(serde_json::from_reader(r)?)))
63299            }
63300            TypeVariant::ConfigSettingEntry => Ok(Self::ConfigSettingEntry(Box::new(
63301                serde_json::from_reader(r)?,
63302            ))),
63303            TypeVariant::ScEnvMetaKind => {
63304                Ok(Self::ScEnvMetaKind(Box::new(serde_json::from_reader(r)?)))
63305            }
63306            TypeVariant::ScEnvMetaEntry => {
63307                Ok(Self::ScEnvMetaEntry(Box::new(serde_json::from_reader(r)?)))
63308            }
63309            TypeVariant::ScEnvMetaEntryInterfaceVersion => Ok(
63310                Self::ScEnvMetaEntryInterfaceVersion(Box::new(serde_json::from_reader(r)?)),
63311            ),
63312            TypeVariant::ScMetaV0 => Ok(Self::ScMetaV0(Box::new(serde_json::from_reader(r)?))),
63313            TypeVariant::ScMetaKind => Ok(Self::ScMetaKind(Box::new(serde_json::from_reader(r)?))),
63314            TypeVariant::ScMetaEntry => {
63315                Ok(Self::ScMetaEntry(Box::new(serde_json::from_reader(r)?)))
63316            }
63317            TypeVariant::ScSpecType => Ok(Self::ScSpecType(Box::new(serde_json::from_reader(r)?))),
63318            TypeVariant::ScSpecTypeOption => Ok(Self::ScSpecTypeOption(Box::new(
63319                serde_json::from_reader(r)?,
63320            ))),
63321            TypeVariant::ScSpecTypeResult => Ok(Self::ScSpecTypeResult(Box::new(
63322                serde_json::from_reader(r)?,
63323            ))),
63324            TypeVariant::ScSpecTypeVec => {
63325                Ok(Self::ScSpecTypeVec(Box::new(serde_json::from_reader(r)?)))
63326            }
63327            TypeVariant::ScSpecTypeMap => {
63328                Ok(Self::ScSpecTypeMap(Box::new(serde_json::from_reader(r)?)))
63329            }
63330            TypeVariant::ScSpecTypeTuple => {
63331                Ok(Self::ScSpecTypeTuple(Box::new(serde_json::from_reader(r)?)))
63332            }
63333            TypeVariant::ScSpecTypeBytesN => Ok(Self::ScSpecTypeBytesN(Box::new(
63334                serde_json::from_reader(r)?,
63335            ))),
63336            TypeVariant::ScSpecTypeUdt => {
63337                Ok(Self::ScSpecTypeUdt(Box::new(serde_json::from_reader(r)?)))
63338            }
63339            TypeVariant::ScSpecTypeDef => {
63340                Ok(Self::ScSpecTypeDef(Box::new(serde_json::from_reader(r)?)))
63341            }
63342            TypeVariant::ScSpecUdtStructFieldV0 => Ok(Self::ScSpecUdtStructFieldV0(Box::new(
63343                serde_json::from_reader(r)?,
63344            ))),
63345            TypeVariant::ScSpecUdtStructV0 => Ok(Self::ScSpecUdtStructV0(Box::new(
63346                serde_json::from_reader(r)?,
63347            ))),
63348            TypeVariant::ScSpecUdtUnionCaseVoidV0 => Ok(Self::ScSpecUdtUnionCaseVoidV0(Box::new(
63349                serde_json::from_reader(r)?,
63350            ))),
63351            TypeVariant::ScSpecUdtUnionCaseTupleV0 => Ok(Self::ScSpecUdtUnionCaseTupleV0(
63352                Box::new(serde_json::from_reader(r)?),
63353            )),
63354            TypeVariant::ScSpecUdtUnionCaseV0Kind => Ok(Self::ScSpecUdtUnionCaseV0Kind(Box::new(
63355                serde_json::from_reader(r)?,
63356            ))),
63357            TypeVariant::ScSpecUdtUnionCaseV0 => Ok(Self::ScSpecUdtUnionCaseV0(Box::new(
63358                serde_json::from_reader(r)?,
63359            ))),
63360            TypeVariant::ScSpecUdtUnionV0 => Ok(Self::ScSpecUdtUnionV0(Box::new(
63361                serde_json::from_reader(r)?,
63362            ))),
63363            TypeVariant::ScSpecUdtEnumCaseV0 => Ok(Self::ScSpecUdtEnumCaseV0(Box::new(
63364                serde_json::from_reader(r)?,
63365            ))),
63366            TypeVariant::ScSpecUdtEnumV0 => {
63367                Ok(Self::ScSpecUdtEnumV0(Box::new(serde_json::from_reader(r)?)))
63368            }
63369            TypeVariant::ScSpecUdtErrorEnumCaseV0 => Ok(Self::ScSpecUdtErrorEnumCaseV0(Box::new(
63370                serde_json::from_reader(r)?,
63371            ))),
63372            TypeVariant::ScSpecUdtErrorEnumV0 => Ok(Self::ScSpecUdtErrorEnumV0(Box::new(
63373                serde_json::from_reader(r)?,
63374            ))),
63375            TypeVariant::ScSpecFunctionInputV0 => Ok(Self::ScSpecFunctionInputV0(Box::new(
63376                serde_json::from_reader(r)?,
63377            ))),
63378            TypeVariant::ScSpecFunctionV0 => Ok(Self::ScSpecFunctionV0(Box::new(
63379                serde_json::from_reader(r)?,
63380            ))),
63381            TypeVariant::ScSpecEventParamLocationV0 => Ok(Self::ScSpecEventParamLocationV0(
63382                Box::new(serde_json::from_reader(r)?),
63383            )),
63384            TypeVariant::ScSpecEventParamV0 => Ok(Self::ScSpecEventParamV0(Box::new(
63385                serde_json::from_reader(r)?,
63386            ))),
63387            TypeVariant::ScSpecEventDataFormat => Ok(Self::ScSpecEventDataFormat(Box::new(
63388                serde_json::from_reader(r)?,
63389            ))),
63390            TypeVariant::ScSpecEventV0 => {
63391                Ok(Self::ScSpecEventV0(Box::new(serde_json::from_reader(r)?)))
63392            }
63393            TypeVariant::ScSpecEntryKind => {
63394                Ok(Self::ScSpecEntryKind(Box::new(serde_json::from_reader(r)?)))
63395            }
63396            TypeVariant::ScSpecEntry => {
63397                Ok(Self::ScSpecEntry(Box::new(serde_json::from_reader(r)?)))
63398            }
63399            TypeVariant::ScValType => Ok(Self::ScValType(Box::new(serde_json::from_reader(r)?))),
63400            TypeVariant::ScErrorType => {
63401                Ok(Self::ScErrorType(Box::new(serde_json::from_reader(r)?)))
63402            }
63403            TypeVariant::ScErrorCode => {
63404                Ok(Self::ScErrorCode(Box::new(serde_json::from_reader(r)?)))
63405            }
63406            TypeVariant::ScError => Ok(Self::ScError(Box::new(serde_json::from_reader(r)?))),
63407            TypeVariant::UInt128Parts => {
63408                Ok(Self::UInt128Parts(Box::new(serde_json::from_reader(r)?)))
63409            }
63410            TypeVariant::Int128Parts => {
63411                Ok(Self::Int128Parts(Box::new(serde_json::from_reader(r)?)))
63412            }
63413            TypeVariant::UInt256Parts => {
63414                Ok(Self::UInt256Parts(Box::new(serde_json::from_reader(r)?)))
63415            }
63416            TypeVariant::Int256Parts => {
63417                Ok(Self::Int256Parts(Box::new(serde_json::from_reader(r)?)))
63418            }
63419            TypeVariant::ContractExecutableType => Ok(Self::ContractExecutableType(Box::new(
63420                serde_json::from_reader(r)?,
63421            ))),
63422            TypeVariant::ContractExecutable => Ok(Self::ContractExecutable(Box::new(
63423                serde_json::from_reader(r)?,
63424            ))),
63425            TypeVariant::ScAddressType => {
63426                Ok(Self::ScAddressType(Box::new(serde_json::from_reader(r)?)))
63427            }
63428            TypeVariant::MuxedEd25519Account => Ok(Self::MuxedEd25519Account(Box::new(
63429                serde_json::from_reader(r)?,
63430            ))),
63431            TypeVariant::ScAddress => Ok(Self::ScAddress(Box::new(serde_json::from_reader(r)?))),
63432            TypeVariant::ScVec => Ok(Self::ScVec(Box::new(serde_json::from_reader(r)?))),
63433            TypeVariant::ScMap => Ok(Self::ScMap(Box::new(serde_json::from_reader(r)?))),
63434            TypeVariant::ScBytes => Ok(Self::ScBytes(Box::new(serde_json::from_reader(r)?))),
63435            TypeVariant::ScString => Ok(Self::ScString(Box::new(serde_json::from_reader(r)?))),
63436            TypeVariant::ScSymbol => Ok(Self::ScSymbol(Box::new(serde_json::from_reader(r)?))),
63437            TypeVariant::ScNonceKey => Ok(Self::ScNonceKey(Box::new(serde_json::from_reader(r)?))),
63438            TypeVariant::ScContractInstance => Ok(Self::ScContractInstance(Box::new(
63439                serde_json::from_reader(r)?,
63440            ))),
63441            TypeVariant::ScVal => Ok(Self::ScVal(Box::new(serde_json::from_reader(r)?))),
63442            TypeVariant::ScMapEntry => Ok(Self::ScMapEntry(Box::new(serde_json::from_reader(r)?))),
63443            TypeVariant::LedgerCloseMetaBatch => Ok(Self::LedgerCloseMetaBatch(Box::new(
63444                serde_json::from_reader(r)?,
63445            ))),
63446            TypeVariant::StoredTransactionSet => Ok(Self::StoredTransactionSet(Box::new(
63447                serde_json::from_reader(r)?,
63448            ))),
63449            TypeVariant::StoredDebugTransactionSet => Ok(Self::StoredDebugTransactionSet(
63450                Box::new(serde_json::from_reader(r)?),
63451            )),
63452            TypeVariant::PersistedScpStateV0 => Ok(Self::PersistedScpStateV0(Box::new(
63453                serde_json::from_reader(r)?,
63454            ))),
63455            TypeVariant::PersistedScpStateV1 => Ok(Self::PersistedScpStateV1(Box::new(
63456                serde_json::from_reader(r)?,
63457            ))),
63458            TypeVariant::PersistedScpState => Ok(Self::PersistedScpState(Box::new(
63459                serde_json::from_reader(r)?,
63460            ))),
63461            TypeVariant::Thresholds => Ok(Self::Thresholds(Box::new(serde_json::from_reader(r)?))),
63462            TypeVariant::String32 => Ok(Self::String32(Box::new(serde_json::from_reader(r)?))),
63463            TypeVariant::String64 => Ok(Self::String64(Box::new(serde_json::from_reader(r)?))),
63464            TypeVariant::SequenceNumber => {
63465                Ok(Self::SequenceNumber(Box::new(serde_json::from_reader(r)?)))
63466            }
63467            TypeVariant::DataValue => Ok(Self::DataValue(Box::new(serde_json::from_reader(r)?))),
63468            TypeVariant::AssetCode4 => Ok(Self::AssetCode4(Box::new(serde_json::from_reader(r)?))),
63469            TypeVariant::AssetCode12 => {
63470                Ok(Self::AssetCode12(Box::new(serde_json::from_reader(r)?)))
63471            }
63472            TypeVariant::AssetType => Ok(Self::AssetType(Box::new(serde_json::from_reader(r)?))),
63473            TypeVariant::AssetCode => Ok(Self::AssetCode(Box::new(serde_json::from_reader(r)?))),
63474            TypeVariant::AlphaNum4 => Ok(Self::AlphaNum4(Box::new(serde_json::from_reader(r)?))),
63475            TypeVariant::AlphaNum12 => Ok(Self::AlphaNum12(Box::new(serde_json::from_reader(r)?))),
63476            TypeVariant::Asset => Ok(Self::Asset(Box::new(serde_json::from_reader(r)?))),
63477            TypeVariant::Price => Ok(Self::Price(Box::new(serde_json::from_reader(r)?))),
63478            TypeVariant::Liabilities => {
63479                Ok(Self::Liabilities(Box::new(serde_json::from_reader(r)?)))
63480            }
63481            TypeVariant::ThresholdIndexes => Ok(Self::ThresholdIndexes(Box::new(
63482                serde_json::from_reader(r)?,
63483            ))),
63484            TypeVariant::LedgerEntryType => {
63485                Ok(Self::LedgerEntryType(Box::new(serde_json::from_reader(r)?)))
63486            }
63487            TypeVariant::Signer => Ok(Self::Signer(Box::new(serde_json::from_reader(r)?))),
63488            TypeVariant::AccountFlags => {
63489                Ok(Self::AccountFlags(Box::new(serde_json::from_reader(r)?)))
63490            }
63491            TypeVariant::SponsorshipDescriptor => Ok(Self::SponsorshipDescriptor(Box::new(
63492                serde_json::from_reader(r)?,
63493            ))),
63494            TypeVariant::AccountEntryExtensionV3 => Ok(Self::AccountEntryExtensionV3(Box::new(
63495                serde_json::from_reader(r)?,
63496            ))),
63497            TypeVariant::AccountEntryExtensionV2 => Ok(Self::AccountEntryExtensionV2(Box::new(
63498                serde_json::from_reader(r)?,
63499            ))),
63500            TypeVariant::AccountEntryExtensionV2Ext => Ok(Self::AccountEntryExtensionV2Ext(
63501                Box::new(serde_json::from_reader(r)?),
63502            )),
63503            TypeVariant::AccountEntryExtensionV1 => Ok(Self::AccountEntryExtensionV1(Box::new(
63504                serde_json::from_reader(r)?,
63505            ))),
63506            TypeVariant::AccountEntryExtensionV1Ext => Ok(Self::AccountEntryExtensionV1Ext(
63507                Box::new(serde_json::from_reader(r)?),
63508            )),
63509            TypeVariant::AccountEntry => {
63510                Ok(Self::AccountEntry(Box::new(serde_json::from_reader(r)?)))
63511            }
63512            TypeVariant::AccountEntryExt => {
63513                Ok(Self::AccountEntryExt(Box::new(serde_json::from_reader(r)?)))
63514            }
63515            TypeVariant::TrustLineFlags => {
63516                Ok(Self::TrustLineFlags(Box::new(serde_json::from_reader(r)?)))
63517            }
63518            TypeVariant::LiquidityPoolType => Ok(Self::LiquidityPoolType(Box::new(
63519                serde_json::from_reader(r)?,
63520            ))),
63521            TypeVariant::TrustLineAsset => {
63522                Ok(Self::TrustLineAsset(Box::new(serde_json::from_reader(r)?)))
63523            }
63524            TypeVariant::TrustLineEntryExtensionV2 => Ok(Self::TrustLineEntryExtensionV2(
63525                Box::new(serde_json::from_reader(r)?),
63526            )),
63527            TypeVariant::TrustLineEntryExtensionV2Ext => Ok(Self::TrustLineEntryExtensionV2Ext(
63528                Box::new(serde_json::from_reader(r)?),
63529            )),
63530            TypeVariant::TrustLineEntry => {
63531                Ok(Self::TrustLineEntry(Box::new(serde_json::from_reader(r)?)))
63532            }
63533            TypeVariant::TrustLineEntryExt => Ok(Self::TrustLineEntryExt(Box::new(
63534                serde_json::from_reader(r)?,
63535            ))),
63536            TypeVariant::TrustLineEntryV1 => Ok(Self::TrustLineEntryV1(Box::new(
63537                serde_json::from_reader(r)?,
63538            ))),
63539            TypeVariant::TrustLineEntryV1Ext => Ok(Self::TrustLineEntryV1Ext(Box::new(
63540                serde_json::from_reader(r)?,
63541            ))),
63542            TypeVariant::OfferEntryFlags => {
63543                Ok(Self::OfferEntryFlags(Box::new(serde_json::from_reader(r)?)))
63544            }
63545            TypeVariant::OfferEntry => Ok(Self::OfferEntry(Box::new(serde_json::from_reader(r)?))),
63546            TypeVariant::OfferEntryExt => {
63547                Ok(Self::OfferEntryExt(Box::new(serde_json::from_reader(r)?)))
63548            }
63549            TypeVariant::DataEntry => Ok(Self::DataEntry(Box::new(serde_json::from_reader(r)?))),
63550            TypeVariant::DataEntryExt => {
63551                Ok(Self::DataEntryExt(Box::new(serde_json::from_reader(r)?)))
63552            }
63553            TypeVariant::ClaimPredicateType => Ok(Self::ClaimPredicateType(Box::new(
63554                serde_json::from_reader(r)?,
63555            ))),
63556            TypeVariant::ClaimPredicate => {
63557                Ok(Self::ClaimPredicate(Box::new(serde_json::from_reader(r)?)))
63558            }
63559            TypeVariant::ClaimantType => {
63560                Ok(Self::ClaimantType(Box::new(serde_json::from_reader(r)?)))
63561            }
63562            TypeVariant::Claimant => Ok(Self::Claimant(Box::new(serde_json::from_reader(r)?))),
63563            TypeVariant::ClaimantV0 => Ok(Self::ClaimantV0(Box::new(serde_json::from_reader(r)?))),
63564            TypeVariant::ClaimableBalanceFlags => Ok(Self::ClaimableBalanceFlags(Box::new(
63565                serde_json::from_reader(r)?,
63566            ))),
63567            TypeVariant::ClaimableBalanceEntryExtensionV1 => Ok(
63568                Self::ClaimableBalanceEntryExtensionV1(Box::new(serde_json::from_reader(r)?)),
63569            ),
63570            TypeVariant::ClaimableBalanceEntryExtensionV1Ext => Ok(
63571                Self::ClaimableBalanceEntryExtensionV1Ext(Box::new(serde_json::from_reader(r)?)),
63572            ),
63573            TypeVariant::ClaimableBalanceEntry => Ok(Self::ClaimableBalanceEntry(Box::new(
63574                serde_json::from_reader(r)?,
63575            ))),
63576            TypeVariant::ClaimableBalanceEntryExt => Ok(Self::ClaimableBalanceEntryExt(Box::new(
63577                serde_json::from_reader(r)?,
63578            ))),
63579            TypeVariant::LiquidityPoolConstantProductParameters => Ok(
63580                Self::LiquidityPoolConstantProductParameters(Box::new(serde_json::from_reader(r)?)),
63581            ),
63582            TypeVariant::LiquidityPoolEntry => Ok(Self::LiquidityPoolEntry(Box::new(
63583                serde_json::from_reader(r)?,
63584            ))),
63585            TypeVariant::LiquidityPoolEntryBody => Ok(Self::LiquidityPoolEntryBody(Box::new(
63586                serde_json::from_reader(r)?,
63587            ))),
63588            TypeVariant::LiquidityPoolEntryConstantProduct => Ok(
63589                Self::LiquidityPoolEntryConstantProduct(Box::new(serde_json::from_reader(r)?)),
63590            ),
63591            TypeVariant::ContractDataDurability => Ok(Self::ContractDataDurability(Box::new(
63592                serde_json::from_reader(r)?,
63593            ))),
63594            TypeVariant::ContractDataEntry => Ok(Self::ContractDataEntry(Box::new(
63595                serde_json::from_reader(r)?,
63596            ))),
63597            TypeVariant::ContractCodeCostInputs => Ok(Self::ContractCodeCostInputs(Box::new(
63598                serde_json::from_reader(r)?,
63599            ))),
63600            TypeVariant::ContractCodeEntry => Ok(Self::ContractCodeEntry(Box::new(
63601                serde_json::from_reader(r)?,
63602            ))),
63603            TypeVariant::ContractCodeEntryExt => Ok(Self::ContractCodeEntryExt(Box::new(
63604                serde_json::from_reader(r)?,
63605            ))),
63606            TypeVariant::ContractCodeEntryV1 => Ok(Self::ContractCodeEntryV1(Box::new(
63607                serde_json::from_reader(r)?,
63608            ))),
63609            TypeVariant::TtlEntry => Ok(Self::TtlEntry(Box::new(serde_json::from_reader(r)?))),
63610            TypeVariant::LedgerEntryExtensionV1 => Ok(Self::LedgerEntryExtensionV1(Box::new(
63611                serde_json::from_reader(r)?,
63612            ))),
63613            TypeVariant::LedgerEntryExtensionV1Ext => Ok(Self::LedgerEntryExtensionV1Ext(
63614                Box::new(serde_json::from_reader(r)?),
63615            )),
63616            TypeVariant::LedgerEntry => {
63617                Ok(Self::LedgerEntry(Box::new(serde_json::from_reader(r)?)))
63618            }
63619            TypeVariant::LedgerEntryData => {
63620                Ok(Self::LedgerEntryData(Box::new(serde_json::from_reader(r)?)))
63621            }
63622            TypeVariant::LedgerEntryExt => {
63623                Ok(Self::LedgerEntryExt(Box::new(serde_json::from_reader(r)?)))
63624            }
63625            TypeVariant::LedgerKey => Ok(Self::LedgerKey(Box::new(serde_json::from_reader(r)?))),
63626            TypeVariant::LedgerKeyAccount => Ok(Self::LedgerKeyAccount(Box::new(
63627                serde_json::from_reader(r)?,
63628            ))),
63629            TypeVariant::LedgerKeyTrustLine => Ok(Self::LedgerKeyTrustLine(Box::new(
63630                serde_json::from_reader(r)?,
63631            ))),
63632            TypeVariant::LedgerKeyOffer => {
63633                Ok(Self::LedgerKeyOffer(Box::new(serde_json::from_reader(r)?)))
63634            }
63635            TypeVariant::LedgerKeyData => {
63636                Ok(Self::LedgerKeyData(Box::new(serde_json::from_reader(r)?)))
63637            }
63638            TypeVariant::LedgerKeyClaimableBalance => Ok(Self::LedgerKeyClaimableBalance(
63639                Box::new(serde_json::from_reader(r)?),
63640            )),
63641            TypeVariant::LedgerKeyLiquidityPool => Ok(Self::LedgerKeyLiquidityPool(Box::new(
63642                serde_json::from_reader(r)?,
63643            ))),
63644            TypeVariant::LedgerKeyContractData => Ok(Self::LedgerKeyContractData(Box::new(
63645                serde_json::from_reader(r)?,
63646            ))),
63647            TypeVariant::LedgerKeyContractCode => Ok(Self::LedgerKeyContractCode(Box::new(
63648                serde_json::from_reader(r)?,
63649            ))),
63650            TypeVariant::LedgerKeyConfigSetting => Ok(Self::LedgerKeyConfigSetting(Box::new(
63651                serde_json::from_reader(r)?,
63652            ))),
63653            TypeVariant::LedgerKeyTtl => {
63654                Ok(Self::LedgerKeyTtl(Box::new(serde_json::from_reader(r)?)))
63655            }
63656            TypeVariant::EnvelopeType => {
63657                Ok(Self::EnvelopeType(Box::new(serde_json::from_reader(r)?)))
63658            }
63659            TypeVariant::BucketListType => {
63660                Ok(Self::BucketListType(Box::new(serde_json::from_reader(r)?)))
63661            }
63662            TypeVariant::BucketEntryType => {
63663                Ok(Self::BucketEntryType(Box::new(serde_json::from_reader(r)?)))
63664            }
63665            TypeVariant::HotArchiveBucketEntryType => Ok(Self::HotArchiveBucketEntryType(
63666                Box::new(serde_json::from_reader(r)?),
63667            )),
63668            TypeVariant::BucketMetadata => {
63669                Ok(Self::BucketMetadata(Box::new(serde_json::from_reader(r)?)))
63670            }
63671            TypeVariant::BucketMetadataExt => Ok(Self::BucketMetadataExt(Box::new(
63672                serde_json::from_reader(r)?,
63673            ))),
63674            TypeVariant::BucketEntry => {
63675                Ok(Self::BucketEntry(Box::new(serde_json::from_reader(r)?)))
63676            }
63677            TypeVariant::HotArchiveBucketEntry => Ok(Self::HotArchiveBucketEntry(Box::new(
63678                serde_json::from_reader(r)?,
63679            ))),
63680            TypeVariant::UpgradeType => {
63681                Ok(Self::UpgradeType(Box::new(serde_json::from_reader(r)?)))
63682            }
63683            TypeVariant::StellarValueType => Ok(Self::StellarValueType(Box::new(
63684                serde_json::from_reader(r)?,
63685            ))),
63686            TypeVariant::LedgerCloseValueSignature => Ok(Self::LedgerCloseValueSignature(
63687                Box::new(serde_json::from_reader(r)?),
63688            )),
63689            TypeVariant::StellarValue => {
63690                Ok(Self::StellarValue(Box::new(serde_json::from_reader(r)?)))
63691            }
63692            TypeVariant::StellarValueExt => {
63693                Ok(Self::StellarValueExt(Box::new(serde_json::from_reader(r)?)))
63694            }
63695            TypeVariant::LedgerHeaderFlags => Ok(Self::LedgerHeaderFlags(Box::new(
63696                serde_json::from_reader(r)?,
63697            ))),
63698            TypeVariant::LedgerHeaderExtensionV1 => Ok(Self::LedgerHeaderExtensionV1(Box::new(
63699                serde_json::from_reader(r)?,
63700            ))),
63701            TypeVariant::LedgerHeaderExtensionV1Ext => Ok(Self::LedgerHeaderExtensionV1Ext(
63702                Box::new(serde_json::from_reader(r)?),
63703            )),
63704            TypeVariant::LedgerHeader => {
63705                Ok(Self::LedgerHeader(Box::new(serde_json::from_reader(r)?)))
63706            }
63707            TypeVariant::LedgerHeaderExt => {
63708                Ok(Self::LedgerHeaderExt(Box::new(serde_json::from_reader(r)?)))
63709            }
63710            TypeVariant::LedgerUpgradeType => Ok(Self::LedgerUpgradeType(Box::new(
63711                serde_json::from_reader(r)?,
63712            ))),
63713            TypeVariant::ConfigUpgradeSetKey => Ok(Self::ConfigUpgradeSetKey(Box::new(
63714                serde_json::from_reader(r)?,
63715            ))),
63716            TypeVariant::LedgerUpgrade => {
63717                Ok(Self::LedgerUpgrade(Box::new(serde_json::from_reader(r)?)))
63718            }
63719            TypeVariant::ConfigUpgradeSet => Ok(Self::ConfigUpgradeSet(Box::new(
63720                serde_json::from_reader(r)?,
63721            ))),
63722            TypeVariant::TxSetComponentType => Ok(Self::TxSetComponentType(Box::new(
63723                serde_json::from_reader(r)?,
63724            ))),
63725            TypeVariant::DependentTxCluster => Ok(Self::DependentTxCluster(Box::new(
63726                serde_json::from_reader(r)?,
63727            ))),
63728            TypeVariant::ParallelTxExecutionStage => Ok(Self::ParallelTxExecutionStage(Box::new(
63729                serde_json::from_reader(r)?,
63730            ))),
63731            TypeVariant::ParallelTxsComponent => Ok(Self::ParallelTxsComponent(Box::new(
63732                serde_json::from_reader(r)?,
63733            ))),
63734            TypeVariant::TxSetComponent => {
63735                Ok(Self::TxSetComponent(Box::new(serde_json::from_reader(r)?)))
63736            }
63737            TypeVariant::TxSetComponentTxsMaybeDiscountedFee => Ok(
63738                Self::TxSetComponentTxsMaybeDiscountedFee(Box::new(serde_json::from_reader(r)?)),
63739            ),
63740            TypeVariant::TransactionPhase => Ok(Self::TransactionPhase(Box::new(
63741                serde_json::from_reader(r)?,
63742            ))),
63743            TypeVariant::TransactionSet => {
63744                Ok(Self::TransactionSet(Box::new(serde_json::from_reader(r)?)))
63745            }
63746            TypeVariant::TransactionSetV1 => Ok(Self::TransactionSetV1(Box::new(
63747                serde_json::from_reader(r)?,
63748            ))),
63749            TypeVariant::GeneralizedTransactionSet => Ok(Self::GeneralizedTransactionSet(
63750                Box::new(serde_json::from_reader(r)?),
63751            )),
63752            TypeVariant::TransactionResultPair => Ok(Self::TransactionResultPair(Box::new(
63753                serde_json::from_reader(r)?,
63754            ))),
63755            TypeVariant::TransactionResultSet => Ok(Self::TransactionResultSet(Box::new(
63756                serde_json::from_reader(r)?,
63757            ))),
63758            TypeVariant::TransactionHistoryEntry => Ok(Self::TransactionHistoryEntry(Box::new(
63759                serde_json::from_reader(r)?,
63760            ))),
63761            TypeVariant::TransactionHistoryEntryExt => Ok(Self::TransactionHistoryEntryExt(
63762                Box::new(serde_json::from_reader(r)?),
63763            )),
63764            TypeVariant::TransactionHistoryResultEntry => Ok(Self::TransactionHistoryResultEntry(
63765                Box::new(serde_json::from_reader(r)?),
63766            )),
63767            TypeVariant::TransactionHistoryResultEntryExt => Ok(
63768                Self::TransactionHistoryResultEntryExt(Box::new(serde_json::from_reader(r)?)),
63769            ),
63770            TypeVariant::LedgerHeaderHistoryEntry => Ok(Self::LedgerHeaderHistoryEntry(Box::new(
63771                serde_json::from_reader(r)?,
63772            ))),
63773            TypeVariant::LedgerHeaderHistoryEntryExt => Ok(Self::LedgerHeaderHistoryEntryExt(
63774                Box::new(serde_json::from_reader(r)?),
63775            )),
63776            TypeVariant::LedgerScpMessages => Ok(Self::LedgerScpMessages(Box::new(
63777                serde_json::from_reader(r)?,
63778            ))),
63779            TypeVariant::ScpHistoryEntryV0 => Ok(Self::ScpHistoryEntryV0(Box::new(
63780                serde_json::from_reader(r)?,
63781            ))),
63782            TypeVariant::ScpHistoryEntry => {
63783                Ok(Self::ScpHistoryEntry(Box::new(serde_json::from_reader(r)?)))
63784            }
63785            TypeVariant::LedgerEntryChangeType => Ok(Self::LedgerEntryChangeType(Box::new(
63786                serde_json::from_reader(r)?,
63787            ))),
63788            TypeVariant::LedgerEntryChange => Ok(Self::LedgerEntryChange(Box::new(
63789                serde_json::from_reader(r)?,
63790            ))),
63791            TypeVariant::LedgerEntryChanges => Ok(Self::LedgerEntryChanges(Box::new(
63792                serde_json::from_reader(r)?,
63793            ))),
63794            TypeVariant::OperationMeta => {
63795                Ok(Self::OperationMeta(Box::new(serde_json::from_reader(r)?)))
63796            }
63797            TypeVariant::TransactionMetaV1 => Ok(Self::TransactionMetaV1(Box::new(
63798                serde_json::from_reader(r)?,
63799            ))),
63800            TypeVariant::TransactionMetaV2 => Ok(Self::TransactionMetaV2(Box::new(
63801                serde_json::from_reader(r)?,
63802            ))),
63803            TypeVariant::ContractEventType => Ok(Self::ContractEventType(Box::new(
63804                serde_json::from_reader(r)?,
63805            ))),
63806            TypeVariant::ContractEvent => {
63807                Ok(Self::ContractEvent(Box::new(serde_json::from_reader(r)?)))
63808            }
63809            TypeVariant::ContractEventBody => Ok(Self::ContractEventBody(Box::new(
63810                serde_json::from_reader(r)?,
63811            ))),
63812            TypeVariant::ContractEventV0 => {
63813                Ok(Self::ContractEventV0(Box::new(serde_json::from_reader(r)?)))
63814            }
63815            TypeVariant::DiagnosticEvent => {
63816                Ok(Self::DiagnosticEvent(Box::new(serde_json::from_reader(r)?)))
63817            }
63818            TypeVariant::SorobanTransactionMetaExtV1 => Ok(Self::SorobanTransactionMetaExtV1(
63819                Box::new(serde_json::from_reader(r)?),
63820            )),
63821            TypeVariant::SorobanTransactionMetaExt => Ok(Self::SorobanTransactionMetaExt(
63822                Box::new(serde_json::from_reader(r)?),
63823            )),
63824            TypeVariant::SorobanTransactionMeta => Ok(Self::SorobanTransactionMeta(Box::new(
63825                serde_json::from_reader(r)?,
63826            ))),
63827            TypeVariant::TransactionMetaV3 => Ok(Self::TransactionMetaV3(Box::new(
63828                serde_json::from_reader(r)?,
63829            ))),
63830            TypeVariant::OperationMetaV2 => {
63831                Ok(Self::OperationMetaV2(Box::new(serde_json::from_reader(r)?)))
63832            }
63833            TypeVariant::SorobanTransactionMetaV2 => Ok(Self::SorobanTransactionMetaV2(Box::new(
63834                serde_json::from_reader(r)?,
63835            ))),
63836            TypeVariant::TransactionEventStage => Ok(Self::TransactionEventStage(Box::new(
63837                serde_json::from_reader(r)?,
63838            ))),
63839            TypeVariant::TransactionEvent => Ok(Self::TransactionEvent(Box::new(
63840                serde_json::from_reader(r)?,
63841            ))),
63842            TypeVariant::TransactionMetaV4 => Ok(Self::TransactionMetaV4(Box::new(
63843                serde_json::from_reader(r)?,
63844            ))),
63845            TypeVariant::InvokeHostFunctionSuccessPreImage => Ok(
63846                Self::InvokeHostFunctionSuccessPreImage(Box::new(serde_json::from_reader(r)?)),
63847            ),
63848            TypeVariant::TransactionMeta => {
63849                Ok(Self::TransactionMeta(Box::new(serde_json::from_reader(r)?)))
63850            }
63851            TypeVariant::TransactionResultMeta => Ok(Self::TransactionResultMeta(Box::new(
63852                serde_json::from_reader(r)?,
63853            ))),
63854            TypeVariant::TransactionResultMetaV1 => Ok(Self::TransactionResultMetaV1(Box::new(
63855                serde_json::from_reader(r)?,
63856            ))),
63857            TypeVariant::UpgradeEntryMeta => Ok(Self::UpgradeEntryMeta(Box::new(
63858                serde_json::from_reader(r)?,
63859            ))),
63860            TypeVariant::LedgerCloseMetaV0 => Ok(Self::LedgerCloseMetaV0(Box::new(
63861                serde_json::from_reader(r)?,
63862            ))),
63863            TypeVariant::LedgerCloseMetaExtV1 => Ok(Self::LedgerCloseMetaExtV1(Box::new(
63864                serde_json::from_reader(r)?,
63865            ))),
63866            TypeVariant::LedgerCloseMetaExt => Ok(Self::LedgerCloseMetaExt(Box::new(
63867                serde_json::from_reader(r)?,
63868            ))),
63869            TypeVariant::LedgerCloseMetaV1 => Ok(Self::LedgerCloseMetaV1(Box::new(
63870                serde_json::from_reader(r)?,
63871            ))),
63872            TypeVariant::LedgerCloseMetaV2 => Ok(Self::LedgerCloseMetaV2(Box::new(
63873                serde_json::from_reader(r)?,
63874            ))),
63875            TypeVariant::LedgerCloseMeta => {
63876                Ok(Self::LedgerCloseMeta(Box::new(serde_json::from_reader(r)?)))
63877            }
63878            TypeVariant::ErrorCode => Ok(Self::ErrorCode(Box::new(serde_json::from_reader(r)?))),
63879            TypeVariant::SError => Ok(Self::SError(Box::new(serde_json::from_reader(r)?))),
63880            TypeVariant::SendMore => Ok(Self::SendMore(Box::new(serde_json::from_reader(r)?))),
63881            TypeVariant::SendMoreExtended => Ok(Self::SendMoreExtended(Box::new(
63882                serde_json::from_reader(r)?,
63883            ))),
63884            TypeVariant::AuthCert => Ok(Self::AuthCert(Box::new(serde_json::from_reader(r)?))),
63885            TypeVariant::Hello => Ok(Self::Hello(Box::new(serde_json::from_reader(r)?))),
63886            TypeVariant::Auth => Ok(Self::Auth(Box::new(serde_json::from_reader(r)?))),
63887            TypeVariant::IpAddrType => Ok(Self::IpAddrType(Box::new(serde_json::from_reader(r)?))),
63888            TypeVariant::PeerAddress => {
63889                Ok(Self::PeerAddress(Box::new(serde_json::from_reader(r)?)))
63890            }
63891            TypeVariant::PeerAddressIp => {
63892                Ok(Self::PeerAddressIp(Box::new(serde_json::from_reader(r)?)))
63893            }
63894            TypeVariant::MessageType => {
63895                Ok(Self::MessageType(Box::new(serde_json::from_reader(r)?)))
63896            }
63897            TypeVariant::DontHave => Ok(Self::DontHave(Box::new(serde_json::from_reader(r)?))),
63898            TypeVariant::SurveyMessageCommandType => Ok(Self::SurveyMessageCommandType(Box::new(
63899                serde_json::from_reader(r)?,
63900            ))),
63901            TypeVariant::SurveyMessageResponseType => Ok(Self::SurveyMessageResponseType(
63902                Box::new(serde_json::from_reader(r)?),
63903            )),
63904            TypeVariant::TimeSlicedSurveyStartCollectingMessage => Ok(
63905                Self::TimeSlicedSurveyStartCollectingMessage(Box::new(serde_json::from_reader(r)?)),
63906            ),
63907            TypeVariant::SignedTimeSlicedSurveyStartCollectingMessage => {
63908                Ok(Self::SignedTimeSlicedSurveyStartCollectingMessage(
63909                    Box::new(serde_json::from_reader(r)?),
63910                ))
63911            }
63912            TypeVariant::TimeSlicedSurveyStopCollectingMessage => Ok(
63913                Self::TimeSlicedSurveyStopCollectingMessage(Box::new(serde_json::from_reader(r)?)),
63914            ),
63915            TypeVariant::SignedTimeSlicedSurveyStopCollectingMessage => {
63916                Ok(Self::SignedTimeSlicedSurveyStopCollectingMessage(Box::new(
63917                    serde_json::from_reader(r)?,
63918                )))
63919            }
63920            TypeVariant::SurveyRequestMessage => Ok(Self::SurveyRequestMessage(Box::new(
63921                serde_json::from_reader(r)?,
63922            ))),
63923            TypeVariant::TimeSlicedSurveyRequestMessage => Ok(
63924                Self::TimeSlicedSurveyRequestMessage(Box::new(serde_json::from_reader(r)?)),
63925            ),
63926            TypeVariant::SignedTimeSlicedSurveyRequestMessage => Ok(
63927                Self::SignedTimeSlicedSurveyRequestMessage(Box::new(serde_json::from_reader(r)?)),
63928            ),
63929            TypeVariant::EncryptedBody => {
63930                Ok(Self::EncryptedBody(Box::new(serde_json::from_reader(r)?)))
63931            }
63932            TypeVariant::SurveyResponseMessage => Ok(Self::SurveyResponseMessage(Box::new(
63933                serde_json::from_reader(r)?,
63934            ))),
63935            TypeVariant::TimeSlicedSurveyResponseMessage => Ok(
63936                Self::TimeSlicedSurveyResponseMessage(Box::new(serde_json::from_reader(r)?)),
63937            ),
63938            TypeVariant::SignedTimeSlicedSurveyResponseMessage => Ok(
63939                Self::SignedTimeSlicedSurveyResponseMessage(Box::new(serde_json::from_reader(r)?)),
63940            ),
63941            TypeVariant::PeerStats => Ok(Self::PeerStats(Box::new(serde_json::from_reader(r)?))),
63942            TypeVariant::TimeSlicedNodeData => Ok(Self::TimeSlicedNodeData(Box::new(
63943                serde_json::from_reader(r)?,
63944            ))),
63945            TypeVariant::TimeSlicedPeerData => Ok(Self::TimeSlicedPeerData(Box::new(
63946                serde_json::from_reader(r)?,
63947            ))),
63948            TypeVariant::TimeSlicedPeerDataList => Ok(Self::TimeSlicedPeerDataList(Box::new(
63949                serde_json::from_reader(r)?,
63950            ))),
63951            TypeVariant::TopologyResponseBodyV2 => Ok(Self::TopologyResponseBodyV2(Box::new(
63952                serde_json::from_reader(r)?,
63953            ))),
63954            TypeVariant::SurveyResponseBody => Ok(Self::SurveyResponseBody(Box::new(
63955                serde_json::from_reader(r)?,
63956            ))),
63957            TypeVariant::TxAdvertVector => {
63958                Ok(Self::TxAdvertVector(Box::new(serde_json::from_reader(r)?)))
63959            }
63960            TypeVariant::FloodAdvert => {
63961                Ok(Self::FloodAdvert(Box::new(serde_json::from_reader(r)?)))
63962            }
63963            TypeVariant::TxDemandVector => {
63964                Ok(Self::TxDemandVector(Box::new(serde_json::from_reader(r)?)))
63965            }
63966            TypeVariant::FloodDemand => {
63967                Ok(Self::FloodDemand(Box::new(serde_json::from_reader(r)?)))
63968            }
63969            TypeVariant::StellarMessage => {
63970                Ok(Self::StellarMessage(Box::new(serde_json::from_reader(r)?)))
63971            }
63972            TypeVariant::AuthenticatedMessage => Ok(Self::AuthenticatedMessage(Box::new(
63973                serde_json::from_reader(r)?,
63974            ))),
63975            TypeVariant::AuthenticatedMessageV0 => Ok(Self::AuthenticatedMessageV0(Box::new(
63976                serde_json::from_reader(r)?,
63977            ))),
63978            TypeVariant::LiquidityPoolParameters => Ok(Self::LiquidityPoolParameters(Box::new(
63979                serde_json::from_reader(r)?,
63980            ))),
63981            TypeVariant::MuxedAccount => {
63982                Ok(Self::MuxedAccount(Box::new(serde_json::from_reader(r)?)))
63983            }
63984            TypeVariant::MuxedAccountMed25519 => Ok(Self::MuxedAccountMed25519(Box::new(
63985                serde_json::from_reader(r)?,
63986            ))),
63987            TypeVariant::DecoratedSignature => Ok(Self::DecoratedSignature(Box::new(
63988                serde_json::from_reader(r)?,
63989            ))),
63990            TypeVariant::OperationType => {
63991                Ok(Self::OperationType(Box::new(serde_json::from_reader(r)?)))
63992            }
63993            TypeVariant::CreateAccountOp => {
63994                Ok(Self::CreateAccountOp(Box::new(serde_json::from_reader(r)?)))
63995            }
63996            TypeVariant::PaymentOp => Ok(Self::PaymentOp(Box::new(serde_json::from_reader(r)?))),
63997            TypeVariant::PathPaymentStrictReceiveOp => Ok(Self::PathPaymentStrictReceiveOp(
63998                Box::new(serde_json::from_reader(r)?),
63999            )),
64000            TypeVariant::PathPaymentStrictSendOp => Ok(Self::PathPaymentStrictSendOp(Box::new(
64001                serde_json::from_reader(r)?,
64002            ))),
64003            TypeVariant::ManageSellOfferOp => Ok(Self::ManageSellOfferOp(Box::new(
64004                serde_json::from_reader(r)?,
64005            ))),
64006            TypeVariant::ManageBuyOfferOp => Ok(Self::ManageBuyOfferOp(Box::new(
64007                serde_json::from_reader(r)?,
64008            ))),
64009            TypeVariant::CreatePassiveSellOfferOp => Ok(Self::CreatePassiveSellOfferOp(Box::new(
64010                serde_json::from_reader(r)?,
64011            ))),
64012            TypeVariant::SetOptionsOp => {
64013                Ok(Self::SetOptionsOp(Box::new(serde_json::from_reader(r)?)))
64014            }
64015            TypeVariant::ChangeTrustAsset => Ok(Self::ChangeTrustAsset(Box::new(
64016                serde_json::from_reader(r)?,
64017            ))),
64018            TypeVariant::ChangeTrustOp => {
64019                Ok(Self::ChangeTrustOp(Box::new(serde_json::from_reader(r)?)))
64020            }
64021            TypeVariant::AllowTrustOp => {
64022                Ok(Self::AllowTrustOp(Box::new(serde_json::from_reader(r)?)))
64023            }
64024            TypeVariant::ManageDataOp => {
64025                Ok(Self::ManageDataOp(Box::new(serde_json::from_reader(r)?)))
64026            }
64027            TypeVariant::BumpSequenceOp => {
64028                Ok(Self::BumpSequenceOp(Box::new(serde_json::from_reader(r)?)))
64029            }
64030            TypeVariant::CreateClaimableBalanceOp => Ok(Self::CreateClaimableBalanceOp(Box::new(
64031                serde_json::from_reader(r)?,
64032            ))),
64033            TypeVariant::ClaimClaimableBalanceOp => Ok(Self::ClaimClaimableBalanceOp(Box::new(
64034                serde_json::from_reader(r)?,
64035            ))),
64036            TypeVariant::BeginSponsoringFutureReservesOp => Ok(
64037                Self::BeginSponsoringFutureReservesOp(Box::new(serde_json::from_reader(r)?)),
64038            ),
64039            TypeVariant::RevokeSponsorshipType => Ok(Self::RevokeSponsorshipType(Box::new(
64040                serde_json::from_reader(r)?,
64041            ))),
64042            TypeVariant::RevokeSponsorshipOp => Ok(Self::RevokeSponsorshipOp(Box::new(
64043                serde_json::from_reader(r)?,
64044            ))),
64045            TypeVariant::RevokeSponsorshipOpSigner => Ok(Self::RevokeSponsorshipOpSigner(
64046                Box::new(serde_json::from_reader(r)?),
64047            )),
64048            TypeVariant::ClawbackOp => Ok(Self::ClawbackOp(Box::new(serde_json::from_reader(r)?))),
64049            TypeVariant::ClawbackClaimableBalanceOp => Ok(Self::ClawbackClaimableBalanceOp(
64050                Box::new(serde_json::from_reader(r)?),
64051            )),
64052            TypeVariant::SetTrustLineFlagsOp => Ok(Self::SetTrustLineFlagsOp(Box::new(
64053                serde_json::from_reader(r)?,
64054            ))),
64055            TypeVariant::LiquidityPoolDepositOp => Ok(Self::LiquidityPoolDepositOp(Box::new(
64056                serde_json::from_reader(r)?,
64057            ))),
64058            TypeVariant::LiquidityPoolWithdrawOp => Ok(Self::LiquidityPoolWithdrawOp(Box::new(
64059                serde_json::from_reader(r)?,
64060            ))),
64061            TypeVariant::HostFunctionType => Ok(Self::HostFunctionType(Box::new(
64062                serde_json::from_reader(r)?,
64063            ))),
64064            TypeVariant::ContractIdPreimageType => Ok(Self::ContractIdPreimageType(Box::new(
64065                serde_json::from_reader(r)?,
64066            ))),
64067            TypeVariant::ContractIdPreimage => Ok(Self::ContractIdPreimage(Box::new(
64068                serde_json::from_reader(r)?,
64069            ))),
64070            TypeVariant::ContractIdPreimageFromAddress => Ok(Self::ContractIdPreimageFromAddress(
64071                Box::new(serde_json::from_reader(r)?),
64072            )),
64073            TypeVariant::CreateContractArgs => Ok(Self::CreateContractArgs(Box::new(
64074                serde_json::from_reader(r)?,
64075            ))),
64076            TypeVariant::CreateContractArgsV2 => Ok(Self::CreateContractArgsV2(Box::new(
64077                serde_json::from_reader(r)?,
64078            ))),
64079            TypeVariant::InvokeContractArgs => Ok(Self::InvokeContractArgs(Box::new(
64080                serde_json::from_reader(r)?,
64081            ))),
64082            TypeVariant::HostFunction => {
64083                Ok(Self::HostFunction(Box::new(serde_json::from_reader(r)?)))
64084            }
64085            TypeVariant::SorobanAuthorizedFunctionType => Ok(Self::SorobanAuthorizedFunctionType(
64086                Box::new(serde_json::from_reader(r)?),
64087            )),
64088            TypeVariant::SorobanAuthorizedFunction => Ok(Self::SorobanAuthorizedFunction(
64089                Box::new(serde_json::from_reader(r)?),
64090            )),
64091            TypeVariant::SorobanAuthorizedInvocation => Ok(Self::SorobanAuthorizedInvocation(
64092                Box::new(serde_json::from_reader(r)?),
64093            )),
64094            TypeVariant::SorobanAddressCredentials => Ok(Self::SorobanAddressCredentials(
64095                Box::new(serde_json::from_reader(r)?),
64096            )),
64097            TypeVariant::SorobanCredentialsType => Ok(Self::SorobanCredentialsType(Box::new(
64098                serde_json::from_reader(r)?,
64099            ))),
64100            TypeVariant::SorobanCredentials => Ok(Self::SorobanCredentials(Box::new(
64101                serde_json::from_reader(r)?,
64102            ))),
64103            TypeVariant::SorobanAuthorizationEntry => Ok(Self::SorobanAuthorizationEntry(
64104                Box::new(serde_json::from_reader(r)?),
64105            )),
64106            TypeVariant::SorobanAuthorizationEntries => Ok(Self::SorobanAuthorizationEntries(
64107                Box::new(serde_json::from_reader(r)?),
64108            )),
64109            TypeVariant::InvokeHostFunctionOp => Ok(Self::InvokeHostFunctionOp(Box::new(
64110                serde_json::from_reader(r)?,
64111            ))),
64112            TypeVariant::ExtendFootprintTtlOp => Ok(Self::ExtendFootprintTtlOp(Box::new(
64113                serde_json::from_reader(r)?,
64114            ))),
64115            TypeVariant::RestoreFootprintOp => Ok(Self::RestoreFootprintOp(Box::new(
64116                serde_json::from_reader(r)?,
64117            ))),
64118            TypeVariant::Operation => Ok(Self::Operation(Box::new(serde_json::from_reader(r)?))),
64119            TypeVariant::OperationBody => {
64120                Ok(Self::OperationBody(Box::new(serde_json::from_reader(r)?)))
64121            }
64122            TypeVariant::HashIdPreimage => {
64123                Ok(Self::HashIdPreimage(Box::new(serde_json::from_reader(r)?)))
64124            }
64125            TypeVariant::HashIdPreimageOperationId => Ok(Self::HashIdPreimageOperationId(
64126                Box::new(serde_json::from_reader(r)?),
64127            )),
64128            TypeVariant::HashIdPreimageRevokeId => Ok(Self::HashIdPreimageRevokeId(Box::new(
64129                serde_json::from_reader(r)?,
64130            ))),
64131            TypeVariant::HashIdPreimageContractId => Ok(Self::HashIdPreimageContractId(Box::new(
64132                serde_json::from_reader(r)?,
64133            ))),
64134            TypeVariant::HashIdPreimageSorobanAuthorization => Ok(
64135                Self::HashIdPreimageSorobanAuthorization(Box::new(serde_json::from_reader(r)?)),
64136            ),
64137            TypeVariant::MemoType => Ok(Self::MemoType(Box::new(serde_json::from_reader(r)?))),
64138            TypeVariant::Memo => Ok(Self::Memo(Box::new(serde_json::from_reader(r)?))),
64139            TypeVariant::TimeBounds => Ok(Self::TimeBounds(Box::new(serde_json::from_reader(r)?))),
64140            TypeVariant::LedgerBounds => {
64141                Ok(Self::LedgerBounds(Box::new(serde_json::from_reader(r)?)))
64142            }
64143            TypeVariant::PreconditionsV2 => {
64144                Ok(Self::PreconditionsV2(Box::new(serde_json::from_reader(r)?)))
64145            }
64146            TypeVariant::PreconditionType => Ok(Self::PreconditionType(Box::new(
64147                serde_json::from_reader(r)?,
64148            ))),
64149            TypeVariant::Preconditions => {
64150                Ok(Self::Preconditions(Box::new(serde_json::from_reader(r)?)))
64151            }
64152            TypeVariant::LedgerFootprint => {
64153                Ok(Self::LedgerFootprint(Box::new(serde_json::from_reader(r)?)))
64154            }
64155            TypeVariant::SorobanResources => Ok(Self::SorobanResources(Box::new(
64156                serde_json::from_reader(r)?,
64157            ))),
64158            TypeVariant::SorobanResourcesExtV0 => Ok(Self::SorobanResourcesExtV0(Box::new(
64159                serde_json::from_reader(r)?,
64160            ))),
64161            TypeVariant::SorobanTransactionData => Ok(Self::SorobanTransactionData(Box::new(
64162                serde_json::from_reader(r)?,
64163            ))),
64164            TypeVariant::SorobanTransactionDataExt => Ok(Self::SorobanTransactionDataExt(
64165                Box::new(serde_json::from_reader(r)?),
64166            )),
64167            TypeVariant::TransactionV0 => {
64168                Ok(Self::TransactionV0(Box::new(serde_json::from_reader(r)?)))
64169            }
64170            TypeVariant::TransactionV0Ext => Ok(Self::TransactionV0Ext(Box::new(
64171                serde_json::from_reader(r)?,
64172            ))),
64173            TypeVariant::TransactionV0Envelope => Ok(Self::TransactionV0Envelope(Box::new(
64174                serde_json::from_reader(r)?,
64175            ))),
64176            TypeVariant::Transaction => {
64177                Ok(Self::Transaction(Box::new(serde_json::from_reader(r)?)))
64178            }
64179            TypeVariant::TransactionExt => {
64180                Ok(Self::TransactionExt(Box::new(serde_json::from_reader(r)?)))
64181            }
64182            TypeVariant::TransactionV1Envelope => Ok(Self::TransactionV1Envelope(Box::new(
64183                serde_json::from_reader(r)?,
64184            ))),
64185            TypeVariant::FeeBumpTransaction => Ok(Self::FeeBumpTransaction(Box::new(
64186                serde_json::from_reader(r)?,
64187            ))),
64188            TypeVariant::FeeBumpTransactionInnerTx => Ok(Self::FeeBumpTransactionInnerTx(
64189                Box::new(serde_json::from_reader(r)?),
64190            )),
64191            TypeVariant::FeeBumpTransactionExt => Ok(Self::FeeBumpTransactionExt(Box::new(
64192                serde_json::from_reader(r)?,
64193            ))),
64194            TypeVariant::FeeBumpTransactionEnvelope => Ok(Self::FeeBumpTransactionEnvelope(
64195                Box::new(serde_json::from_reader(r)?),
64196            )),
64197            TypeVariant::TransactionEnvelope => Ok(Self::TransactionEnvelope(Box::new(
64198                serde_json::from_reader(r)?,
64199            ))),
64200            TypeVariant::TransactionSignaturePayload => Ok(Self::TransactionSignaturePayload(
64201                Box::new(serde_json::from_reader(r)?),
64202            )),
64203            TypeVariant::TransactionSignaturePayloadTaggedTransaction => {
64204                Ok(Self::TransactionSignaturePayloadTaggedTransaction(
64205                    Box::new(serde_json::from_reader(r)?),
64206                ))
64207            }
64208            TypeVariant::ClaimAtomType => {
64209                Ok(Self::ClaimAtomType(Box::new(serde_json::from_reader(r)?)))
64210            }
64211            TypeVariant::ClaimOfferAtomV0 => Ok(Self::ClaimOfferAtomV0(Box::new(
64212                serde_json::from_reader(r)?,
64213            ))),
64214            TypeVariant::ClaimOfferAtom => {
64215                Ok(Self::ClaimOfferAtom(Box::new(serde_json::from_reader(r)?)))
64216            }
64217            TypeVariant::ClaimLiquidityAtom => Ok(Self::ClaimLiquidityAtom(Box::new(
64218                serde_json::from_reader(r)?,
64219            ))),
64220            TypeVariant::ClaimAtom => Ok(Self::ClaimAtom(Box::new(serde_json::from_reader(r)?))),
64221            TypeVariant::CreateAccountResultCode => Ok(Self::CreateAccountResultCode(Box::new(
64222                serde_json::from_reader(r)?,
64223            ))),
64224            TypeVariant::CreateAccountResult => Ok(Self::CreateAccountResult(Box::new(
64225                serde_json::from_reader(r)?,
64226            ))),
64227            TypeVariant::PaymentResultCode => Ok(Self::PaymentResultCode(Box::new(
64228                serde_json::from_reader(r)?,
64229            ))),
64230            TypeVariant::PaymentResult => {
64231                Ok(Self::PaymentResult(Box::new(serde_json::from_reader(r)?)))
64232            }
64233            TypeVariant::PathPaymentStrictReceiveResultCode => Ok(
64234                Self::PathPaymentStrictReceiveResultCode(Box::new(serde_json::from_reader(r)?)),
64235            ),
64236            TypeVariant::SimplePaymentResult => Ok(Self::SimplePaymentResult(Box::new(
64237                serde_json::from_reader(r)?,
64238            ))),
64239            TypeVariant::PathPaymentStrictReceiveResult => Ok(
64240                Self::PathPaymentStrictReceiveResult(Box::new(serde_json::from_reader(r)?)),
64241            ),
64242            TypeVariant::PathPaymentStrictReceiveResultSuccess => Ok(
64243                Self::PathPaymentStrictReceiveResultSuccess(Box::new(serde_json::from_reader(r)?)),
64244            ),
64245            TypeVariant::PathPaymentStrictSendResultCode => Ok(
64246                Self::PathPaymentStrictSendResultCode(Box::new(serde_json::from_reader(r)?)),
64247            ),
64248            TypeVariant::PathPaymentStrictSendResult => Ok(Self::PathPaymentStrictSendResult(
64249                Box::new(serde_json::from_reader(r)?),
64250            )),
64251            TypeVariant::PathPaymentStrictSendResultSuccess => Ok(
64252                Self::PathPaymentStrictSendResultSuccess(Box::new(serde_json::from_reader(r)?)),
64253            ),
64254            TypeVariant::ManageSellOfferResultCode => Ok(Self::ManageSellOfferResultCode(
64255                Box::new(serde_json::from_reader(r)?),
64256            )),
64257            TypeVariant::ManageOfferEffect => Ok(Self::ManageOfferEffect(Box::new(
64258                serde_json::from_reader(r)?,
64259            ))),
64260            TypeVariant::ManageOfferSuccessResult => Ok(Self::ManageOfferSuccessResult(Box::new(
64261                serde_json::from_reader(r)?,
64262            ))),
64263            TypeVariant::ManageOfferSuccessResultOffer => Ok(Self::ManageOfferSuccessResultOffer(
64264                Box::new(serde_json::from_reader(r)?),
64265            )),
64266            TypeVariant::ManageSellOfferResult => Ok(Self::ManageSellOfferResult(Box::new(
64267                serde_json::from_reader(r)?,
64268            ))),
64269            TypeVariant::ManageBuyOfferResultCode => Ok(Self::ManageBuyOfferResultCode(Box::new(
64270                serde_json::from_reader(r)?,
64271            ))),
64272            TypeVariant::ManageBuyOfferResult => Ok(Self::ManageBuyOfferResult(Box::new(
64273                serde_json::from_reader(r)?,
64274            ))),
64275            TypeVariant::SetOptionsResultCode => Ok(Self::SetOptionsResultCode(Box::new(
64276                serde_json::from_reader(r)?,
64277            ))),
64278            TypeVariant::SetOptionsResult => Ok(Self::SetOptionsResult(Box::new(
64279                serde_json::from_reader(r)?,
64280            ))),
64281            TypeVariant::ChangeTrustResultCode => Ok(Self::ChangeTrustResultCode(Box::new(
64282                serde_json::from_reader(r)?,
64283            ))),
64284            TypeVariant::ChangeTrustResult => Ok(Self::ChangeTrustResult(Box::new(
64285                serde_json::from_reader(r)?,
64286            ))),
64287            TypeVariant::AllowTrustResultCode => Ok(Self::AllowTrustResultCode(Box::new(
64288                serde_json::from_reader(r)?,
64289            ))),
64290            TypeVariant::AllowTrustResult => Ok(Self::AllowTrustResult(Box::new(
64291                serde_json::from_reader(r)?,
64292            ))),
64293            TypeVariant::AccountMergeResultCode => Ok(Self::AccountMergeResultCode(Box::new(
64294                serde_json::from_reader(r)?,
64295            ))),
64296            TypeVariant::AccountMergeResult => Ok(Self::AccountMergeResult(Box::new(
64297                serde_json::from_reader(r)?,
64298            ))),
64299            TypeVariant::InflationResultCode => Ok(Self::InflationResultCode(Box::new(
64300                serde_json::from_reader(r)?,
64301            ))),
64302            TypeVariant::InflationPayout => {
64303                Ok(Self::InflationPayout(Box::new(serde_json::from_reader(r)?)))
64304            }
64305            TypeVariant::InflationResult => {
64306                Ok(Self::InflationResult(Box::new(serde_json::from_reader(r)?)))
64307            }
64308            TypeVariant::ManageDataResultCode => Ok(Self::ManageDataResultCode(Box::new(
64309                serde_json::from_reader(r)?,
64310            ))),
64311            TypeVariant::ManageDataResult => Ok(Self::ManageDataResult(Box::new(
64312                serde_json::from_reader(r)?,
64313            ))),
64314            TypeVariant::BumpSequenceResultCode => Ok(Self::BumpSequenceResultCode(Box::new(
64315                serde_json::from_reader(r)?,
64316            ))),
64317            TypeVariant::BumpSequenceResult => Ok(Self::BumpSequenceResult(Box::new(
64318                serde_json::from_reader(r)?,
64319            ))),
64320            TypeVariant::CreateClaimableBalanceResultCode => Ok(
64321                Self::CreateClaimableBalanceResultCode(Box::new(serde_json::from_reader(r)?)),
64322            ),
64323            TypeVariant::CreateClaimableBalanceResult => Ok(Self::CreateClaimableBalanceResult(
64324                Box::new(serde_json::from_reader(r)?),
64325            )),
64326            TypeVariant::ClaimClaimableBalanceResultCode => Ok(
64327                Self::ClaimClaimableBalanceResultCode(Box::new(serde_json::from_reader(r)?)),
64328            ),
64329            TypeVariant::ClaimClaimableBalanceResult => Ok(Self::ClaimClaimableBalanceResult(
64330                Box::new(serde_json::from_reader(r)?),
64331            )),
64332            TypeVariant::BeginSponsoringFutureReservesResultCode => {
64333                Ok(Self::BeginSponsoringFutureReservesResultCode(Box::new(
64334                    serde_json::from_reader(r)?,
64335                )))
64336            }
64337            TypeVariant::BeginSponsoringFutureReservesResult => Ok(
64338                Self::BeginSponsoringFutureReservesResult(Box::new(serde_json::from_reader(r)?)),
64339            ),
64340            TypeVariant::EndSponsoringFutureReservesResultCode => Ok(
64341                Self::EndSponsoringFutureReservesResultCode(Box::new(serde_json::from_reader(r)?)),
64342            ),
64343            TypeVariant::EndSponsoringFutureReservesResult => Ok(
64344                Self::EndSponsoringFutureReservesResult(Box::new(serde_json::from_reader(r)?)),
64345            ),
64346            TypeVariant::RevokeSponsorshipResultCode => Ok(Self::RevokeSponsorshipResultCode(
64347                Box::new(serde_json::from_reader(r)?),
64348            )),
64349            TypeVariant::RevokeSponsorshipResult => Ok(Self::RevokeSponsorshipResult(Box::new(
64350                serde_json::from_reader(r)?,
64351            ))),
64352            TypeVariant::ClawbackResultCode => Ok(Self::ClawbackResultCode(Box::new(
64353                serde_json::from_reader(r)?,
64354            ))),
64355            TypeVariant::ClawbackResult => {
64356                Ok(Self::ClawbackResult(Box::new(serde_json::from_reader(r)?)))
64357            }
64358            TypeVariant::ClawbackClaimableBalanceResultCode => Ok(
64359                Self::ClawbackClaimableBalanceResultCode(Box::new(serde_json::from_reader(r)?)),
64360            ),
64361            TypeVariant::ClawbackClaimableBalanceResult => Ok(
64362                Self::ClawbackClaimableBalanceResult(Box::new(serde_json::from_reader(r)?)),
64363            ),
64364            TypeVariant::SetTrustLineFlagsResultCode => Ok(Self::SetTrustLineFlagsResultCode(
64365                Box::new(serde_json::from_reader(r)?),
64366            )),
64367            TypeVariant::SetTrustLineFlagsResult => Ok(Self::SetTrustLineFlagsResult(Box::new(
64368                serde_json::from_reader(r)?,
64369            ))),
64370            TypeVariant::LiquidityPoolDepositResultCode => Ok(
64371                Self::LiquidityPoolDepositResultCode(Box::new(serde_json::from_reader(r)?)),
64372            ),
64373            TypeVariant::LiquidityPoolDepositResult => Ok(Self::LiquidityPoolDepositResult(
64374                Box::new(serde_json::from_reader(r)?),
64375            )),
64376            TypeVariant::LiquidityPoolWithdrawResultCode => Ok(
64377                Self::LiquidityPoolWithdrawResultCode(Box::new(serde_json::from_reader(r)?)),
64378            ),
64379            TypeVariant::LiquidityPoolWithdrawResult => Ok(Self::LiquidityPoolWithdrawResult(
64380                Box::new(serde_json::from_reader(r)?),
64381            )),
64382            TypeVariant::InvokeHostFunctionResultCode => Ok(Self::InvokeHostFunctionResultCode(
64383                Box::new(serde_json::from_reader(r)?),
64384            )),
64385            TypeVariant::InvokeHostFunctionResult => Ok(Self::InvokeHostFunctionResult(Box::new(
64386                serde_json::from_reader(r)?,
64387            ))),
64388            TypeVariant::ExtendFootprintTtlResultCode => Ok(Self::ExtendFootprintTtlResultCode(
64389                Box::new(serde_json::from_reader(r)?),
64390            )),
64391            TypeVariant::ExtendFootprintTtlResult => Ok(Self::ExtendFootprintTtlResult(Box::new(
64392                serde_json::from_reader(r)?,
64393            ))),
64394            TypeVariant::RestoreFootprintResultCode => Ok(Self::RestoreFootprintResultCode(
64395                Box::new(serde_json::from_reader(r)?),
64396            )),
64397            TypeVariant::RestoreFootprintResult => Ok(Self::RestoreFootprintResult(Box::new(
64398                serde_json::from_reader(r)?,
64399            ))),
64400            TypeVariant::OperationResultCode => Ok(Self::OperationResultCode(Box::new(
64401                serde_json::from_reader(r)?,
64402            ))),
64403            TypeVariant::OperationResult => {
64404                Ok(Self::OperationResult(Box::new(serde_json::from_reader(r)?)))
64405            }
64406            TypeVariant::OperationResultTr => Ok(Self::OperationResultTr(Box::new(
64407                serde_json::from_reader(r)?,
64408            ))),
64409            TypeVariant::TransactionResultCode => Ok(Self::TransactionResultCode(Box::new(
64410                serde_json::from_reader(r)?,
64411            ))),
64412            TypeVariant::InnerTransactionResult => Ok(Self::InnerTransactionResult(Box::new(
64413                serde_json::from_reader(r)?,
64414            ))),
64415            TypeVariant::InnerTransactionResultResult => Ok(Self::InnerTransactionResultResult(
64416                Box::new(serde_json::from_reader(r)?),
64417            )),
64418            TypeVariant::InnerTransactionResultExt => Ok(Self::InnerTransactionResultExt(
64419                Box::new(serde_json::from_reader(r)?),
64420            )),
64421            TypeVariant::InnerTransactionResultPair => Ok(Self::InnerTransactionResultPair(
64422                Box::new(serde_json::from_reader(r)?),
64423            )),
64424            TypeVariant::TransactionResult => Ok(Self::TransactionResult(Box::new(
64425                serde_json::from_reader(r)?,
64426            ))),
64427            TypeVariant::TransactionResultResult => Ok(Self::TransactionResultResult(Box::new(
64428                serde_json::from_reader(r)?,
64429            ))),
64430            TypeVariant::TransactionResultExt => Ok(Self::TransactionResultExt(Box::new(
64431                serde_json::from_reader(r)?,
64432            ))),
64433            TypeVariant::Hash => Ok(Self::Hash(Box::new(serde_json::from_reader(r)?))),
64434            TypeVariant::Uint256 => Ok(Self::Uint256(Box::new(serde_json::from_reader(r)?))),
64435            TypeVariant::Uint32 => Ok(Self::Uint32(Box::new(serde_json::from_reader(r)?))),
64436            TypeVariant::Int32 => Ok(Self::Int32(Box::new(serde_json::from_reader(r)?))),
64437            TypeVariant::Uint64 => Ok(Self::Uint64(Box::new(serde_json::from_reader(r)?))),
64438            TypeVariant::Int64 => Ok(Self::Int64(Box::new(serde_json::from_reader(r)?))),
64439            TypeVariant::TimePoint => Ok(Self::TimePoint(Box::new(serde_json::from_reader(r)?))),
64440            TypeVariant::Duration => Ok(Self::Duration(Box::new(serde_json::from_reader(r)?))),
64441            TypeVariant::ExtensionPoint => {
64442                Ok(Self::ExtensionPoint(Box::new(serde_json::from_reader(r)?)))
64443            }
64444            TypeVariant::CryptoKeyType => {
64445                Ok(Self::CryptoKeyType(Box::new(serde_json::from_reader(r)?)))
64446            }
64447            TypeVariant::PublicKeyType => {
64448                Ok(Self::PublicKeyType(Box::new(serde_json::from_reader(r)?)))
64449            }
64450            TypeVariant::SignerKeyType => {
64451                Ok(Self::SignerKeyType(Box::new(serde_json::from_reader(r)?)))
64452            }
64453            TypeVariant::PublicKey => Ok(Self::PublicKey(Box::new(serde_json::from_reader(r)?))),
64454            TypeVariant::SignerKey => Ok(Self::SignerKey(Box::new(serde_json::from_reader(r)?))),
64455            TypeVariant::SignerKeyEd25519SignedPayload => Ok(Self::SignerKeyEd25519SignedPayload(
64456                Box::new(serde_json::from_reader(r)?),
64457            )),
64458            TypeVariant::Signature => Ok(Self::Signature(Box::new(serde_json::from_reader(r)?))),
64459            TypeVariant::SignatureHint => {
64460                Ok(Self::SignatureHint(Box::new(serde_json::from_reader(r)?)))
64461            }
64462            TypeVariant::NodeId => Ok(Self::NodeId(Box::new(serde_json::from_reader(r)?))),
64463            TypeVariant::AccountId => Ok(Self::AccountId(Box::new(serde_json::from_reader(r)?))),
64464            TypeVariant::ContractId => Ok(Self::ContractId(Box::new(serde_json::from_reader(r)?))),
64465            TypeVariant::Curve25519Secret => Ok(Self::Curve25519Secret(Box::new(
64466                serde_json::from_reader(r)?,
64467            ))),
64468            TypeVariant::Curve25519Public => Ok(Self::Curve25519Public(Box::new(
64469                serde_json::from_reader(r)?,
64470            ))),
64471            TypeVariant::HmacSha256Key => {
64472                Ok(Self::HmacSha256Key(Box::new(serde_json::from_reader(r)?)))
64473            }
64474            TypeVariant::HmacSha256Mac => {
64475                Ok(Self::HmacSha256Mac(Box::new(serde_json::from_reader(r)?)))
64476            }
64477            TypeVariant::ShortHashSeed => {
64478                Ok(Self::ShortHashSeed(Box::new(serde_json::from_reader(r)?)))
64479            }
64480            TypeVariant::BinaryFuseFilterType => Ok(Self::BinaryFuseFilterType(Box::new(
64481                serde_json::from_reader(r)?,
64482            ))),
64483            TypeVariant::SerializedBinaryFuseFilter => Ok(Self::SerializedBinaryFuseFilter(
64484                Box::new(serde_json::from_reader(r)?),
64485            )),
64486            TypeVariant::PoolId => Ok(Self::PoolId(Box::new(serde_json::from_reader(r)?))),
64487            TypeVariant::ClaimableBalanceIdType => Ok(Self::ClaimableBalanceIdType(Box::new(
64488                serde_json::from_reader(r)?,
64489            ))),
64490            TypeVariant::ClaimableBalanceId => Ok(Self::ClaimableBalanceId(Box::new(
64491                serde_json::from_reader(r)?,
64492            ))),
64493        }
64494    }
64495
64496    #[cfg(all(feature = "std", feature = "serde_json"))]
64497    #[allow(clippy::too_many_lines)]
64498    pub fn deserialize_json<'r, R: serde_json::de::Read<'r>>(
64499        v: TypeVariant,
64500        r: &mut serde_json::de::Deserializer<R>,
64501    ) -> Result<Self, Error> {
64502        match v {
64503            TypeVariant::Value => Ok(Self::Value(Box::new(serde::de::Deserialize::deserialize(
64504                r,
64505            )?))),
64506            TypeVariant::ScpBallot => Ok(Self::ScpBallot(Box::new(
64507                serde::de::Deserialize::deserialize(r)?,
64508            ))),
64509            TypeVariant::ScpStatementType => Ok(Self::ScpStatementType(Box::new(
64510                serde::de::Deserialize::deserialize(r)?,
64511            ))),
64512            TypeVariant::ScpNomination => Ok(Self::ScpNomination(Box::new(
64513                serde::de::Deserialize::deserialize(r)?,
64514            ))),
64515            TypeVariant::ScpStatement => Ok(Self::ScpStatement(Box::new(
64516                serde::de::Deserialize::deserialize(r)?,
64517            ))),
64518            TypeVariant::ScpStatementPledges => Ok(Self::ScpStatementPledges(Box::new(
64519                serde::de::Deserialize::deserialize(r)?,
64520            ))),
64521            TypeVariant::ScpStatementPrepare => Ok(Self::ScpStatementPrepare(Box::new(
64522                serde::de::Deserialize::deserialize(r)?,
64523            ))),
64524            TypeVariant::ScpStatementConfirm => Ok(Self::ScpStatementConfirm(Box::new(
64525                serde::de::Deserialize::deserialize(r)?,
64526            ))),
64527            TypeVariant::ScpStatementExternalize => Ok(Self::ScpStatementExternalize(Box::new(
64528                serde::de::Deserialize::deserialize(r)?,
64529            ))),
64530            TypeVariant::ScpEnvelope => Ok(Self::ScpEnvelope(Box::new(
64531                serde::de::Deserialize::deserialize(r)?,
64532            ))),
64533            TypeVariant::ScpQuorumSet => Ok(Self::ScpQuorumSet(Box::new(
64534                serde::de::Deserialize::deserialize(r)?,
64535            ))),
64536            TypeVariant::ConfigSettingContractExecutionLanesV0 => {
64537                Ok(Self::ConfigSettingContractExecutionLanesV0(Box::new(
64538                    serde::de::Deserialize::deserialize(r)?,
64539                )))
64540            }
64541            TypeVariant::ConfigSettingContractComputeV0 => {
64542                Ok(Self::ConfigSettingContractComputeV0(Box::new(
64543                    serde::de::Deserialize::deserialize(r)?,
64544                )))
64545            }
64546            TypeVariant::ConfigSettingContractParallelComputeV0 => {
64547                Ok(Self::ConfigSettingContractParallelComputeV0(Box::new(
64548                    serde::de::Deserialize::deserialize(r)?,
64549                )))
64550            }
64551            TypeVariant::ConfigSettingContractLedgerCostV0 => {
64552                Ok(Self::ConfigSettingContractLedgerCostV0(Box::new(
64553                    serde::de::Deserialize::deserialize(r)?,
64554                )))
64555            }
64556            TypeVariant::ConfigSettingContractLedgerCostExtV0 => {
64557                Ok(Self::ConfigSettingContractLedgerCostExtV0(Box::new(
64558                    serde::de::Deserialize::deserialize(r)?,
64559                )))
64560            }
64561            TypeVariant::ConfigSettingContractHistoricalDataV0 => {
64562                Ok(Self::ConfigSettingContractHistoricalDataV0(Box::new(
64563                    serde::de::Deserialize::deserialize(r)?,
64564                )))
64565            }
64566            TypeVariant::ConfigSettingContractEventsV0 => Ok(Self::ConfigSettingContractEventsV0(
64567                Box::new(serde::de::Deserialize::deserialize(r)?),
64568            )),
64569            TypeVariant::ConfigSettingContractBandwidthV0 => {
64570                Ok(Self::ConfigSettingContractBandwidthV0(Box::new(
64571                    serde::de::Deserialize::deserialize(r)?,
64572                )))
64573            }
64574            TypeVariant::ContractCostType => Ok(Self::ContractCostType(Box::new(
64575                serde::de::Deserialize::deserialize(r)?,
64576            ))),
64577            TypeVariant::ContractCostParamEntry => Ok(Self::ContractCostParamEntry(Box::new(
64578                serde::de::Deserialize::deserialize(r)?,
64579            ))),
64580            TypeVariant::StateArchivalSettings => Ok(Self::StateArchivalSettings(Box::new(
64581                serde::de::Deserialize::deserialize(r)?,
64582            ))),
64583            TypeVariant::EvictionIterator => Ok(Self::EvictionIterator(Box::new(
64584                serde::de::Deserialize::deserialize(r)?,
64585            ))),
64586            TypeVariant::ConfigSettingScpTiming => Ok(Self::ConfigSettingScpTiming(Box::new(
64587                serde::de::Deserialize::deserialize(r)?,
64588            ))),
64589            TypeVariant::ContractCostParams => Ok(Self::ContractCostParams(Box::new(
64590                serde::de::Deserialize::deserialize(r)?,
64591            ))),
64592            TypeVariant::ConfigSettingId => Ok(Self::ConfigSettingId(Box::new(
64593                serde::de::Deserialize::deserialize(r)?,
64594            ))),
64595            TypeVariant::ConfigSettingEntry => Ok(Self::ConfigSettingEntry(Box::new(
64596                serde::de::Deserialize::deserialize(r)?,
64597            ))),
64598            TypeVariant::ScEnvMetaKind => Ok(Self::ScEnvMetaKind(Box::new(
64599                serde::de::Deserialize::deserialize(r)?,
64600            ))),
64601            TypeVariant::ScEnvMetaEntry => Ok(Self::ScEnvMetaEntry(Box::new(
64602                serde::de::Deserialize::deserialize(r)?,
64603            ))),
64604            TypeVariant::ScEnvMetaEntryInterfaceVersion => {
64605                Ok(Self::ScEnvMetaEntryInterfaceVersion(Box::new(
64606                    serde::de::Deserialize::deserialize(r)?,
64607                )))
64608            }
64609            TypeVariant::ScMetaV0 => Ok(Self::ScMetaV0(Box::new(
64610                serde::de::Deserialize::deserialize(r)?,
64611            ))),
64612            TypeVariant::ScMetaKind => Ok(Self::ScMetaKind(Box::new(
64613                serde::de::Deserialize::deserialize(r)?,
64614            ))),
64615            TypeVariant::ScMetaEntry => Ok(Self::ScMetaEntry(Box::new(
64616                serde::de::Deserialize::deserialize(r)?,
64617            ))),
64618            TypeVariant::ScSpecType => Ok(Self::ScSpecType(Box::new(
64619                serde::de::Deserialize::deserialize(r)?,
64620            ))),
64621            TypeVariant::ScSpecTypeOption => Ok(Self::ScSpecTypeOption(Box::new(
64622                serde::de::Deserialize::deserialize(r)?,
64623            ))),
64624            TypeVariant::ScSpecTypeResult => Ok(Self::ScSpecTypeResult(Box::new(
64625                serde::de::Deserialize::deserialize(r)?,
64626            ))),
64627            TypeVariant::ScSpecTypeVec => Ok(Self::ScSpecTypeVec(Box::new(
64628                serde::de::Deserialize::deserialize(r)?,
64629            ))),
64630            TypeVariant::ScSpecTypeMap => Ok(Self::ScSpecTypeMap(Box::new(
64631                serde::de::Deserialize::deserialize(r)?,
64632            ))),
64633            TypeVariant::ScSpecTypeTuple => Ok(Self::ScSpecTypeTuple(Box::new(
64634                serde::de::Deserialize::deserialize(r)?,
64635            ))),
64636            TypeVariant::ScSpecTypeBytesN => Ok(Self::ScSpecTypeBytesN(Box::new(
64637                serde::de::Deserialize::deserialize(r)?,
64638            ))),
64639            TypeVariant::ScSpecTypeUdt => Ok(Self::ScSpecTypeUdt(Box::new(
64640                serde::de::Deserialize::deserialize(r)?,
64641            ))),
64642            TypeVariant::ScSpecTypeDef => Ok(Self::ScSpecTypeDef(Box::new(
64643                serde::de::Deserialize::deserialize(r)?,
64644            ))),
64645            TypeVariant::ScSpecUdtStructFieldV0 => Ok(Self::ScSpecUdtStructFieldV0(Box::new(
64646                serde::de::Deserialize::deserialize(r)?,
64647            ))),
64648            TypeVariant::ScSpecUdtStructV0 => Ok(Self::ScSpecUdtStructV0(Box::new(
64649                serde::de::Deserialize::deserialize(r)?,
64650            ))),
64651            TypeVariant::ScSpecUdtUnionCaseVoidV0 => Ok(Self::ScSpecUdtUnionCaseVoidV0(Box::new(
64652                serde::de::Deserialize::deserialize(r)?,
64653            ))),
64654            TypeVariant::ScSpecUdtUnionCaseTupleV0 => Ok(Self::ScSpecUdtUnionCaseTupleV0(
64655                Box::new(serde::de::Deserialize::deserialize(r)?),
64656            )),
64657            TypeVariant::ScSpecUdtUnionCaseV0Kind => Ok(Self::ScSpecUdtUnionCaseV0Kind(Box::new(
64658                serde::de::Deserialize::deserialize(r)?,
64659            ))),
64660            TypeVariant::ScSpecUdtUnionCaseV0 => Ok(Self::ScSpecUdtUnionCaseV0(Box::new(
64661                serde::de::Deserialize::deserialize(r)?,
64662            ))),
64663            TypeVariant::ScSpecUdtUnionV0 => Ok(Self::ScSpecUdtUnionV0(Box::new(
64664                serde::de::Deserialize::deserialize(r)?,
64665            ))),
64666            TypeVariant::ScSpecUdtEnumCaseV0 => Ok(Self::ScSpecUdtEnumCaseV0(Box::new(
64667                serde::de::Deserialize::deserialize(r)?,
64668            ))),
64669            TypeVariant::ScSpecUdtEnumV0 => Ok(Self::ScSpecUdtEnumV0(Box::new(
64670                serde::de::Deserialize::deserialize(r)?,
64671            ))),
64672            TypeVariant::ScSpecUdtErrorEnumCaseV0 => Ok(Self::ScSpecUdtErrorEnumCaseV0(Box::new(
64673                serde::de::Deserialize::deserialize(r)?,
64674            ))),
64675            TypeVariant::ScSpecUdtErrorEnumV0 => Ok(Self::ScSpecUdtErrorEnumV0(Box::new(
64676                serde::de::Deserialize::deserialize(r)?,
64677            ))),
64678            TypeVariant::ScSpecFunctionInputV0 => Ok(Self::ScSpecFunctionInputV0(Box::new(
64679                serde::de::Deserialize::deserialize(r)?,
64680            ))),
64681            TypeVariant::ScSpecFunctionV0 => Ok(Self::ScSpecFunctionV0(Box::new(
64682                serde::de::Deserialize::deserialize(r)?,
64683            ))),
64684            TypeVariant::ScSpecEventParamLocationV0 => Ok(Self::ScSpecEventParamLocationV0(
64685                Box::new(serde::de::Deserialize::deserialize(r)?),
64686            )),
64687            TypeVariant::ScSpecEventParamV0 => Ok(Self::ScSpecEventParamV0(Box::new(
64688                serde::de::Deserialize::deserialize(r)?,
64689            ))),
64690            TypeVariant::ScSpecEventDataFormat => Ok(Self::ScSpecEventDataFormat(Box::new(
64691                serde::de::Deserialize::deserialize(r)?,
64692            ))),
64693            TypeVariant::ScSpecEventV0 => Ok(Self::ScSpecEventV0(Box::new(
64694                serde::de::Deserialize::deserialize(r)?,
64695            ))),
64696            TypeVariant::ScSpecEntryKind => Ok(Self::ScSpecEntryKind(Box::new(
64697                serde::de::Deserialize::deserialize(r)?,
64698            ))),
64699            TypeVariant::ScSpecEntry => Ok(Self::ScSpecEntry(Box::new(
64700                serde::de::Deserialize::deserialize(r)?,
64701            ))),
64702            TypeVariant::ScValType => Ok(Self::ScValType(Box::new(
64703                serde::de::Deserialize::deserialize(r)?,
64704            ))),
64705            TypeVariant::ScErrorType => Ok(Self::ScErrorType(Box::new(
64706                serde::de::Deserialize::deserialize(r)?,
64707            ))),
64708            TypeVariant::ScErrorCode => Ok(Self::ScErrorCode(Box::new(
64709                serde::de::Deserialize::deserialize(r)?,
64710            ))),
64711            TypeVariant::ScError => Ok(Self::ScError(Box::new(
64712                serde::de::Deserialize::deserialize(r)?,
64713            ))),
64714            TypeVariant::UInt128Parts => Ok(Self::UInt128Parts(Box::new(
64715                serde::de::Deserialize::deserialize(r)?,
64716            ))),
64717            TypeVariant::Int128Parts => Ok(Self::Int128Parts(Box::new(
64718                serde::de::Deserialize::deserialize(r)?,
64719            ))),
64720            TypeVariant::UInt256Parts => Ok(Self::UInt256Parts(Box::new(
64721                serde::de::Deserialize::deserialize(r)?,
64722            ))),
64723            TypeVariant::Int256Parts => Ok(Self::Int256Parts(Box::new(
64724                serde::de::Deserialize::deserialize(r)?,
64725            ))),
64726            TypeVariant::ContractExecutableType => Ok(Self::ContractExecutableType(Box::new(
64727                serde::de::Deserialize::deserialize(r)?,
64728            ))),
64729            TypeVariant::ContractExecutable => Ok(Self::ContractExecutable(Box::new(
64730                serde::de::Deserialize::deserialize(r)?,
64731            ))),
64732            TypeVariant::ScAddressType => Ok(Self::ScAddressType(Box::new(
64733                serde::de::Deserialize::deserialize(r)?,
64734            ))),
64735            TypeVariant::MuxedEd25519Account => Ok(Self::MuxedEd25519Account(Box::new(
64736                serde::de::Deserialize::deserialize(r)?,
64737            ))),
64738            TypeVariant::ScAddress => Ok(Self::ScAddress(Box::new(
64739                serde::de::Deserialize::deserialize(r)?,
64740            ))),
64741            TypeVariant::ScVec => Ok(Self::ScVec(Box::new(serde::de::Deserialize::deserialize(
64742                r,
64743            )?))),
64744            TypeVariant::ScMap => Ok(Self::ScMap(Box::new(serde::de::Deserialize::deserialize(
64745                r,
64746            )?))),
64747            TypeVariant::ScBytes => Ok(Self::ScBytes(Box::new(
64748                serde::de::Deserialize::deserialize(r)?,
64749            ))),
64750            TypeVariant::ScString => Ok(Self::ScString(Box::new(
64751                serde::de::Deserialize::deserialize(r)?,
64752            ))),
64753            TypeVariant::ScSymbol => Ok(Self::ScSymbol(Box::new(
64754                serde::de::Deserialize::deserialize(r)?,
64755            ))),
64756            TypeVariant::ScNonceKey => Ok(Self::ScNonceKey(Box::new(
64757                serde::de::Deserialize::deserialize(r)?,
64758            ))),
64759            TypeVariant::ScContractInstance => Ok(Self::ScContractInstance(Box::new(
64760                serde::de::Deserialize::deserialize(r)?,
64761            ))),
64762            TypeVariant::ScVal => Ok(Self::ScVal(Box::new(serde::de::Deserialize::deserialize(
64763                r,
64764            )?))),
64765            TypeVariant::ScMapEntry => Ok(Self::ScMapEntry(Box::new(
64766                serde::de::Deserialize::deserialize(r)?,
64767            ))),
64768            TypeVariant::LedgerCloseMetaBatch => Ok(Self::LedgerCloseMetaBatch(Box::new(
64769                serde::de::Deserialize::deserialize(r)?,
64770            ))),
64771            TypeVariant::StoredTransactionSet => Ok(Self::StoredTransactionSet(Box::new(
64772                serde::de::Deserialize::deserialize(r)?,
64773            ))),
64774            TypeVariant::StoredDebugTransactionSet => Ok(Self::StoredDebugTransactionSet(
64775                Box::new(serde::de::Deserialize::deserialize(r)?),
64776            )),
64777            TypeVariant::PersistedScpStateV0 => Ok(Self::PersistedScpStateV0(Box::new(
64778                serde::de::Deserialize::deserialize(r)?,
64779            ))),
64780            TypeVariant::PersistedScpStateV1 => Ok(Self::PersistedScpStateV1(Box::new(
64781                serde::de::Deserialize::deserialize(r)?,
64782            ))),
64783            TypeVariant::PersistedScpState => Ok(Self::PersistedScpState(Box::new(
64784                serde::de::Deserialize::deserialize(r)?,
64785            ))),
64786            TypeVariant::Thresholds => Ok(Self::Thresholds(Box::new(
64787                serde::de::Deserialize::deserialize(r)?,
64788            ))),
64789            TypeVariant::String32 => Ok(Self::String32(Box::new(
64790                serde::de::Deserialize::deserialize(r)?,
64791            ))),
64792            TypeVariant::String64 => Ok(Self::String64(Box::new(
64793                serde::de::Deserialize::deserialize(r)?,
64794            ))),
64795            TypeVariant::SequenceNumber => Ok(Self::SequenceNumber(Box::new(
64796                serde::de::Deserialize::deserialize(r)?,
64797            ))),
64798            TypeVariant::DataValue => Ok(Self::DataValue(Box::new(
64799                serde::de::Deserialize::deserialize(r)?,
64800            ))),
64801            TypeVariant::AssetCode4 => Ok(Self::AssetCode4(Box::new(
64802                serde::de::Deserialize::deserialize(r)?,
64803            ))),
64804            TypeVariant::AssetCode12 => Ok(Self::AssetCode12(Box::new(
64805                serde::de::Deserialize::deserialize(r)?,
64806            ))),
64807            TypeVariant::AssetType => Ok(Self::AssetType(Box::new(
64808                serde::de::Deserialize::deserialize(r)?,
64809            ))),
64810            TypeVariant::AssetCode => Ok(Self::AssetCode(Box::new(
64811                serde::de::Deserialize::deserialize(r)?,
64812            ))),
64813            TypeVariant::AlphaNum4 => Ok(Self::AlphaNum4(Box::new(
64814                serde::de::Deserialize::deserialize(r)?,
64815            ))),
64816            TypeVariant::AlphaNum12 => Ok(Self::AlphaNum12(Box::new(
64817                serde::de::Deserialize::deserialize(r)?,
64818            ))),
64819            TypeVariant::Asset => Ok(Self::Asset(Box::new(serde::de::Deserialize::deserialize(
64820                r,
64821            )?))),
64822            TypeVariant::Price => Ok(Self::Price(Box::new(serde::de::Deserialize::deserialize(
64823                r,
64824            )?))),
64825            TypeVariant::Liabilities => Ok(Self::Liabilities(Box::new(
64826                serde::de::Deserialize::deserialize(r)?,
64827            ))),
64828            TypeVariant::ThresholdIndexes => Ok(Self::ThresholdIndexes(Box::new(
64829                serde::de::Deserialize::deserialize(r)?,
64830            ))),
64831            TypeVariant::LedgerEntryType => Ok(Self::LedgerEntryType(Box::new(
64832                serde::de::Deserialize::deserialize(r)?,
64833            ))),
64834            TypeVariant::Signer => Ok(Self::Signer(Box::new(serde::de::Deserialize::deserialize(
64835                r,
64836            )?))),
64837            TypeVariant::AccountFlags => Ok(Self::AccountFlags(Box::new(
64838                serde::de::Deserialize::deserialize(r)?,
64839            ))),
64840            TypeVariant::SponsorshipDescriptor => Ok(Self::SponsorshipDescriptor(Box::new(
64841                serde::de::Deserialize::deserialize(r)?,
64842            ))),
64843            TypeVariant::AccountEntryExtensionV3 => Ok(Self::AccountEntryExtensionV3(Box::new(
64844                serde::de::Deserialize::deserialize(r)?,
64845            ))),
64846            TypeVariant::AccountEntryExtensionV2 => Ok(Self::AccountEntryExtensionV2(Box::new(
64847                serde::de::Deserialize::deserialize(r)?,
64848            ))),
64849            TypeVariant::AccountEntryExtensionV2Ext => Ok(Self::AccountEntryExtensionV2Ext(
64850                Box::new(serde::de::Deserialize::deserialize(r)?),
64851            )),
64852            TypeVariant::AccountEntryExtensionV1 => Ok(Self::AccountEntryExtensionV1(Box::new(
64853                serde::de::Deserialize::deserialize(r)?,
64854            ))),
64855            TypeVariant::AccountEntryExtensionV1Ext => Ok(Self::AccountEntryExtensionV1Ext(
64856                Box::new(serde::de::Deserialize::deserialize(r)?),
64857            )),
64858            TypeVariant::AccountEntry => Ok(Self::AccountEntry(Box::new(
64859                serde::de::Deserialize::deserialize(r)?,
64860            ))),
64861            TypeVariant::AccountEntryExt => Ok(Self::AccountEntryExt(Box::new(
64862                serde::de::Deserialize::deserialize(r)?,
64863            ))),
64864            TypeVariant::TrustLineFlags => Ok(Self::TrustLineFlags(Box::new(
64865                serde::de::Deserialize::deserialize(r)?,
64866            ))),
64867            TypeVariant::LiquidityPoolType => Ok(Self::LiquidityPoolType(Box::new(
64868                serde::de::Deserialize::deserialize(r)?,
64869            ))),
64870            TypeVariant::TrustLineAsset => Ok(Self::TrustLineAsset(Box::new(
64871                serde::de::Deserialize::deserialize(r)?,
64872            ))),
64873            TypeVariant::TrustLineEntryExtensionV2 => Ok(Self::TrustLineEntryExtensionV2(
64874                Box::new(serde::de::Deserialize::deserialize(r)?),
64875            )),
64876            TypeVariant::TrustLineEntryExtensionV2Ext => Ok(Self::TrustLineEntryExtensionV2Ext(
64877                Box::new(serde::de::Deserialize::deserialize(r)?),
64878            )),
64879            TypeVariant::TrustLineEntry => Ok(Self::TrustLineEntry(Box::new(
64880                serde::de::Deserialize::deserialize(r)?,
64881            ))),
64882            TypeVariant::TrustLineEntryExt => Ok(Self::TrustLineEntryExt(Box::new(
64883                serde::de::Deserialize::deserialize(r)?,
64884            ))),
64885            TypeVariant::TrustLineEntryV1 => Ok(Self::TrustLineEntryV1(Box::new(
64886                serde::de::Deserialize::deserialize(r)?,
64887            ))),
64888            TypeVariant::TrustLineEntryV1Ext => Ok(Self::TrustLineEntryV1Ext(Box::new(
64889                serde::de::Deserialize::deserialize(r)?,
64890            ))),
64891            TypeVariant::OfferEntryFlags => Ok(Self::OfferEntryFlags(Box::new(
64892                serde::de::Deserialize::deserialize(r)?,
64893            ))),
64894            TypeVariant::OfferEntry => Ok(Self::OfferEntry(Box::new(
64895                serde::de::Deserialize::deserialize(r)?,
64896            ))),
64897            TypeVariant::OfferEntryExt => Ok(Self::OfferEntryExt(Box::new(
64898                serde::de::Deserialize::deserialize(r)?,
64899            ))),
64900            TypeVariant::DataEntry => Ok(Self::DataEntry(Box::new(
64901                serde::de::Deserialize::deserialize(r)?,
64902            ))),
64903            TypeVariant::DataEntryExt => Ok(Self::DataEntryExt(Box::new(
64904                serde::de::Deserialize::deserialize(r)?,
64905            ))),
64906            TypeVariant::ClaimPredicateType => Ok(Self::ClaimPredicateType(Box::new(
64907                serde::de::Deserialize::deserialize(r)?,
64908            ))),
64909            TypeVariant::ClaimPredicate => Ok(Self::ClaimPredicate(Box::new(
64910                serde::de::Deserialize::deserialize(r)?,
64911            ))),
64912            TypeVariant::ClaimantType => Ok(Self::ClaimantType(Box::new(
64913                serde::de::Deserialize::deserialize(r)?,
64914            ))),
64915            TypeVariant::Claimant => Ok(Self::Claimant(Box::new(
64916                serde::de::Deserialize::deserialize(r)?,
64917            ))),
64918            TypeVariant::ClaimantV0 => Ok(Self::ClaimantV0(Box::new(
64919                serde::de::Deserialize::deserialize(r)?,
64920            ))),
64921            TypeVariant::ClaimableBalanceFlags => Ok(Self::ClaimableBalanceFlags(Box::new(
64922                serde::de::Deserialize::deserialize(r)?,
64923            ))),
64924            TypeVariant::ClaimableBalanceEntryExtensionV1 => {
64925                Ok(Self::ClaimableBalanceEntryExtensionV1(Box::new(
64926                    serde::de::Deserialize::deserialize(r)?,
64927                )))
64928            }
64929            TypeVariant::ClaimableBalanceEntryExtensionV1Ext => {
64930                Ok(Self::ClaimableBalanceEntryExtensionV1Ext(Box::new(
64931                    serde::de::Deserialize::deserialize(r)?,
64932                )))
64933            }
64934            TypeVariant::ClaimableBalanceEntry => Ok(Self::ClaimableBalanceEntry(Box::new(
64935                serde::de::Deserialize::deserialize(r)?,
64936            ))),
64937            TypeVariant::ClaimableBalanceEntryExt => Ok(Self::ClaimableBalanceEntryExt(Box::new(
64938                serde::de::Deserialize::deserialize(r)?,
64939            ))),
64940            TypeVariant::LiquidityPoolConstantProductParameters => {
64941                Ok(Self::LiquidityPoolConstantProductParameters(Box::new(
64942                    serde::de::Deserialize::deserialize(r)?,
64943                )))
64944            }
64945            TypeVariant::LiquidityPoolEntry => Ok(Self::LiquidityPoolEntry(Box::new(
64946                serde::de::Deserialize::deserialize(r)?,
64947            ))),
64948            TypeVariant::LiquidityPoolEntryBody => Ok(Self::LiquidityPoolEntryBody(Box::new(
64949                serde::de::Deserialize::deserialize(r)?,
64950            ))),
64951            TypeVariant::LiquidityPoolEntryConstantProduct => {
64952                Ok(Self::LiquidityPoolEntryConstantProduct(Box::new(
64953                    serde::de::Deserialize::deserialize(r)?,
64954                )))
64955            }
64956            TypeVariant::ContractDataDurability => Ok(Self::ContractDataDurability(Box::new(
64957                serde::de::Deserialize::deserialize(r)?,
64958            ))),
64959            TypeVariant::ContractDataEntry => Ok(Self::ContractDataEntry(Box::new(
64960                serde::de::Deserialize::deserialize(r)?,
64961            ))),
64962            TypeVariant::ContractCodeCostInputs => Ok(Self::ContractCodeCostInputs(Box::new(
64963                serde::de::Deserialize::deserialize(r)?,
64964            ))),
64965            TypeVariant::ContractCodeEntry => Ok(Self::ContractCodeEntry(Box::new(
64966                serde::de::Deserialize::deserialize(r)?,
64967            ))),
64968            TypeVariant::ContractCodeEntryExt => Ok(Self::ContractCodeEntryExt(Box::new(
64969                serde::de::Deserialize::deserialize(r)?,
64970            ))),
64971            TypeVariant::ContractCodeEntryV1 => Ok(Self::ContractCodeEntryV1(Box::new(
64972                serde::de::Deserialize::deserialize(r)?,
64973            ))),
64974            TypeVariant::TtlEntry => Ok(Self::TtlEntry(Box::new(
64975                serde::de::Deserialize::deserialize(r)?,
64976            ))),
64977            TypeVariant::LedgerEntryExtensionV1 => Ok(Self::LedgerEntryExtensionV1(Box::new(
64978                serde::de::Deserialize::deserialize(r)?,
64979            ))),
64980            TypeVariant::LedgerEntryExtensionV1Ext => Ok(Self::LedgerEntryExtensionV1Ext(
64981                Box::new(serde::de::Deserialize::deserialize(r)?),
64982            )),
64983            TypeVariant::LedgerEntry => Ok(Self::LedgerEntry(Box::new(
64984                serde::de::Deserialize::deserialize(r)?,
64985            ))),
64986            TypeVariant::LedgerEntryData => Ok(Self::LedgerEntryData(Box::new(
64987                serde::de::Deserialize::deserialize(r)?,
64988            ))),
64989            TypeVariant::LedgerEntryExt => Ok(Self::LedgerEntryExt(Box::new(
64990                serde::de::Deserialize::deserialize(r)?,
64991            ))),
64992            TypeVariant::LedgerKey => Ok(Self::LedgerKey(Box::new(
64993                serde::de::Deserialize::deserialize(r)?,
64994            ))),
64995            TypeVariant::LedgerKeyAccount => Ok(Self::LedgerKeyAccount(Box::new(
64996                serde::de::Deserialize::deserialize(r)?,
64997            ))),
64998            TypeVariant::LedgerKeyTrustLine => Ok(Self::LedgerKeyTrustLine(Box::new(
64999                serde::de::Deserialize::deserialize(r)?,
65000            ))),
65001            TypeVariant::LedgerKeyOffer => Ok(Self::LedgerKeyOffer(Box::new(
65002                serde::de::Deserialize::deserialize(r)?,
65003            ))),
65004            TypeVariant::LedgerKeyData => Ok(Self::LedgerKeyData(Box::new(
65005                serde::de::Deserialize::deserialize(r)?,
65006            ))),
65007            TypeVariant::LedgerKeyClaimableBalance => Ok(Self::LedgerKeyClaimableBalance(
65008                Box::new(serde::de::Deserialize::deserialize(r)?),
65009            )),
65010            TypeVariant::LedgerKeyLiquidityPool => Ok(Self::LedgerKeyLiquidityPool(Box::new(
65011                serde::de::Deserialize::deserialize(r)?,
65012            ))),
65013            TypeVariant::LedgerKeyContractData => Ok(Self::LedgerKeyContractData(Box::new(
65014                serde::de::Deserialize::deserialize(r)?,
65015            ))),
65016            TypeVariant::LedgerKeyContractCode => Ok(Self::LedgerKeyContractCode(Box::new(
65017                serde::de::Deserialize::deserialize(r)?,
65018            ))),
65019            TypeVariant::LedgerKeyConfigSetting => Ok(Self::LedgerKeyConfigSetting(Box::new(
65020                serde::de::Deserialize::deserialize(r)?,
65021            ))),
65022            TypeVariant::LedgerKeyTtl => Ok(Self::LedgerKeyTtl(Box::new(
65023                serde::de::Deserialize::deserialize(r)?,
65024            ))),
65025            TypeVariant::EnvelopeType => Ok(Self::EnvelopeType(Box::new(
65026                serde::de::Deserialize::deserialize(r)?,
65027            ))),
65028            TypeVariant::BucketListType => Ok(Self::BucketListType(Box::new(
65029                serde::de::Deserialize::deserialize(r)?,
65030            ))),
65031            TypeVariant::BucketEntryType => Ok(Self::BucketEntryType(Box::new(
65032                serde::de::Deserialize::deserialize(r)?,
65033            ))),
65034            TypeVariant::HotArchiveBucketEntryType => Ok(Self::HotArchiveBucketEntryType(
65035                Box::new(serde::de::Deserialize::deserialize(r)?),
65036            )),
65037            TypeVariant::BucketMetadata => Ok(Self::BucketMetadata(Box::new(
65038                serde::de::Deserialize::deserialize(r)?,
65039            ))),
65040            TypeVariant::BucketMetadataExt => Ok(Self::BucketMetadataExt(Box::new(
65041                serde::de::Deserialize::deserialize(r)?,
65042            ))),
65043            TypeVariant::BucketEntry => Ok(Self::BucketEntry(Box::new(
65044                serde::de::Deserialize::deserialize(r)?,
65045            ))),
65046            TypeVariant::HotArchiveBucketEntry => Ok(Self::HotArchiveBucketEntry(Box::new(
65047                serde::de::Deserialize::deserialize(r)?,
65048            ))),
65049            TypeVariant::UpgradeType => Ok(Self::UpgradeType(Box::new(
65050                serde::de::Deserialize::deserialize(r)?,
65051            ))),
65052            TypeVariant::StellarValueType => Ok(Self::StellarValueType(Box::new(
65053                serde::de::Deserialize::deserialize(r)?,
65054            ))),
65055            TypeVariant::LedgerCloseValueSignature => Ok(Self::LedgerCloseValueSignature(
65056                Box::new(serde::de::Deserialize::deserialize(r)?),
65057            )),
65058            TypeVariant::StellarValue => Ok(Self::StellarValue(Box::new(
65059                serde::de::Deserialize::deserialize(r)?,
65060            ))),
65061            TypeVariant::StellarValueExt => Ok(Self::StellarValueExt(Box::new(
65062                serde::de::Deserialize::deserialize(r)?,
65063            ))),
65064            TypeVariant::LedgerHeaderFlags => Ok(Self::LedgerHeaderFlags(Box::new(
65065                serde::de::Deserialize::deserialize(r)?,
65066            ))),
65067            TypeVariant::LedgerHeaderExtensionV1 => Ok(Self::LedgerHeaderExtensionV1(Box::new(
65068                serde::de::Deserialize::deserialize(r)?,
65069            ))),
65070            TypeVariant::LedgerHeaderExtensionV1Ext => Ok(Self::LedgerHeaderExtensionV1Ext(
65071                Box::new(serde::de::Deserialize::deserialize(r)?),
65072            )),
65073            TypeVariant::LedgerHeader => Ok(Self::LedgerHeader(Box::new(
65074                serde::de::Deserialize::deserialize(r)?,
65075            ))),
65076            TypeVariant::LedgerHeaderExt => Ok(Self::LedgerHeaderExt(Box::new(
65077                serde::de::Deserialize::deserialize(r)?,
65078            ))),
65079            TypeVariant::LedgerUpgradeType => Ok(Self::LedgerUpgradeType(Box::new(
65080                serde::de::Deserialize::deserialize(r)?,
65081            ))),
65082            TypeVariant::ConfigUpgradeSetKey => Ok(Self::ConfigUpgradeSetKey(Box::new(
65083                serde::de::Deserialize::deserialize(r)?,
65084            ))),
65085            TypeVariant::LedgerUpgrade => Ok(Self::LedgerUpgrade(Box::new(
65086                serde::de::Deserialize::deserialize(r)?,
65087            ))),
65088            TypeVariant::ConfigUpgradeSet => Ok(Self::ConfigUpgradeSet(Box::new(
65089                serde::de::Deserialize::deserialize(r)?,
65090            ))),
65091            TypeVariant::TxSetComponentType => Ok(Self::TxSetComponentType(Box::new(
65092                serde::de::Deserialize::deserialize(r)?,
65093            ))),
65094            TypeVariant::DependentTxCluster => Ok(Self::DependentTxCluster(Box::new(
65095                serde::de::Deserialize::deserialize(r)?,
65096            ))),
65097            TypeVariant::ParallelTxExecutionStage => Ok(Self::ParallelTxExecutionStage(Box::new(
65098                serde::de::Deserialize::deserialize(r)?,
65099            ))),
65100            TypeVariant::ParallelTxsComponent => Ok(Self::ParallelTxsComponent(Box::new(
65101                serde::de::Deserialize::deserialize(r)?,
65102            ))),
65103            TypeVariant::TxSetComponent => Ok(Self::TxSetComponent(Box::new(
65104                serde::de::Deserialize::deserialize(r)?,
65105            ))),
65106            TypeVariant::TxSetComponentTxsMaybeDiscountedFee => {
65107                Ok(Self::TxSetComponentTxsMaybeDiscountedFee(Box::new(
65108                    serde::de::Deserialize::deserialize(r)?,
65109                )))
65110            }
65111            TypeVariant::TransactionPhase => Ok(Self::TransactionPhase(Box::new(
65112                serde::de::Deserialize::deserialize(r)?,
65113            ))),
65114            TypeVariant::TransactionSet => Ok(Self::TransactionSet(Box::new(
65115                serde::de::Deserialize::deserialize(r)?,
65116            ))),
65117            TypeVariant::TransactionSetV1 => Ok(Self::TransactionSetV1(Box::new(
65118                serde::de::Deserialize::deserialize(r)?,
65119            ))),
65120            TypeVariant::GeneralizedTransactionSet => Ok(Self::GeneralizedTransactionSet(
65121                Box::new(serde::de::Deserialize::deserialize(r)?),
65122            )),
65123            TypeVariant::TransactionResultPair => Ok(Self::TransactionResultPair(Box::new(
65124                serde::de::Deserialize::deserialize(r)?,
65125            ))),
65126            TypeVariant::TransactionResultSet => Ok(Self::TransactionResultSet(Box::new(
65127                serde::de::Deserialize::deserialize(r)?,
65128            ))),
65129            TypeVariant::TransactionHistoryEntry => Ok(Self::TransactionHistoryEntry(Box::new(
65130                serde::de::Deserialize::deserialize(r)?,
65131            ))),
65132            TypeVariant::TransactionHistoryEntryExt => Ok(Self::TransactionHistoryEntryExt(
65133                Box::new(serde::de::Deserialize::deserialize(r)?),
65134            )),
65135            TypeVariant::TransactionHistoryResultEntry => Ok(Self::TransactionHistoryResultEntry(
65136                Box::new(serde::de::Deserialize::deserialize(r)?),
65137            )),
65138            TypeVariant::TransactionHistoryResultEntryExt => {
65139                Ok(Self::TransactionHistoryResultEntryExt(Box::new(
65140                    serde::de::Deserialize::deserialize(r)?,
65141                )))
65142            }
65143            TypeVariant::LedgerHeaderHistoryEntry => Ok(Self::LedgerHeaderHistoryEntry(Box::new(
65144                serde::de::Deserialize::deserialize(r)?,
65145            ))),
65146            TypeVariant::LedgerHeaderHistoryEntryExt => Ok(Self::LedgerHeaderHistoryEntryExt(
65147                Box::new(serde::de::Deserialize::deserialize(r)?),
65148            )),
65149            TypeVariant::LedgerScpMessages => Ok(Self::LedgerScpMessages(Box::new(
65150                serde::de::Deserialize::deserialize(r)?,
65151            ))),
65152            TypeVariant::ScpHistoryEntryV0 => Ok(Self::ScpHistoryEntryV0(Box::new(
65153                serde::de::Deserialize::deserialize(r)?,
65154            ))),
65155            TypeVariant::ScpHistoryEntry => Ok(Self::ScpHistoryEntry(Box::new(
65156                serde::de::Deserialize::deserialize(r)?,
65157            ))),
65158            TypeVariant::LedgerEntryChangeType => Ok(Self::LedgerEntryChangeType(Box::new(
65159                serde::de::Deserialize::deserialize(r)?,
65160            ))),
65161            TypeVariant::LedgerEntryChange => Ok(Self::LedgerEntryChange(Box::new(
65162                serde::de::Deserialize::deserialize(r)?,
65163            ))),
65164            TypeVariant::LedgerEntryChanges => Ok(Self::LedgerEntryChanges(Box::new(
65165                serde::de::Deserialize::deserialize(r)?,
65166            ))),
65167            TypeVariant::OperationMeta => Ok(Self::OperationMeta(Box::new(
65168                serde::de::Deserialize::deserialize(r)?,
65169            ))),
65170            TypeVariant::TransactionMetaV1 => Ok(Self::TransactionMetaV1(Box::new(
65171                serde::de::Deserialize::deserialize(r)?,
65172            ))),
65173            TypeVariant::TransactionMetaV2 => Ok(Self::TransactionMetaV2(Box::new(
65174                serde::de::Deserialize::deserialize(r)?,
65175            ))),
65176            TypeVariant::ContractEventType => Ok(Self::ContractEventType(Box::new(
65177                serde::de::Deserialize::deserialize(r)?,
65178            ))),
65179            TypeVariant::ContractEvent => Ok(Self::ContractEvent(Box::new(
65180                serde::de::Deserialize::deserialize(r)?,
65181            ))),
65182            TypeVariant::ContractEventBody => Ok(Self::ContractEventBody(Box::new(
65183                serde::de::Deserialize::deserialize(r)?,
65184            ))),
65185            TypeVariant::ContractEventV0 => Ok(Self::ContractEventV0(Box::new(
65186                serde::de::Deserialize::deserialize(r)?,
65187            ))),
65188            TypeVariant::DiagnosticEvent => Ok(Self::DiagnosticEvent(Box::new(
65189                serde::de::Deserialize::deserialize(r)?,
65190            ))),
65191            TypeVariant::SorobanTransactionMetaExtV1 => Ok(Self::SorobanTransactionMetaExtV1(
65192                Box::new(serde::de::Deserialize::deserialize(r)?),
65193            )),
65194            TypeVariant::SorobanTransactionMetaExt => Ok(Self::SorobanTransactionMetaExt(
65195                Box::new(serde::de::Deserialize::deserialize(r)?),
65196            )),
65197            TypeVariant::SorobanTransactionMeta => Ok(Self::SorobanTransactionMeta(Box::new(
65198                serde::de::Deserialize::deserialize(r)?,
65199            ))),
65200            TypeVariant::TransactionMetaV3 => Ok(Self::TransactionMetaV3(Box::new(
65201                serde::de::Deserialize::deserialize(r)?,
65202            ))),
65203            TypeVariant::OperationMetaV2 => Ok(Self::OperationMetaV2(Box::new(
65204                serde::de::Deserialize::deserialize(r)?,
65205            ))),
65206            TypeVariant::SorobanTransactionMetaV2 => Ok(Self::SorobanTransactionMetaV2(Box::new(
65207                serde::de::Deserialize::deserialize(r)?,
65208            ))),
65209            TypeVariant::TransactionEventStage => Ok(Self::TransactionEventStage(Box::new(
65210                serde::de::Deserialize::deserialize(r)?,
65211            ))),
65212            TypeVariant::TransactionEvent => Ok(Self::TransactionEvent(Box::new(
65213                serde::de::Deserialize::deserialize(r)?,
65214            ))),
65215            TypeVariant::TransactionMetaV4 => Ok(Self::TransactionMetaV4(Box::new(
65216                serde::de::Deserialize::deserialize(r)?,
65217            ))),
65218            TypeVariant::InvokeHostFunctionSuccessPreImage => {
65219                Ok(Self::InvokeHostFunctionSuccessPreImage(Box::new(
65220                    serde::de::Deserialize::deserialize(r)?,
65221                )))
65222            }
65223            TypeVariant::TransactionMeta => Ok(Self::TransactionMeta(Box::new(
65224                serde::de::Deserialize::deserialize(r)?,
65225            ))),
65226            TypeVariant::TransactionResultMeta => Ok(Self::TransactionResultMeta(Box::new(
65227                serde::de::Deserialize::deserialize(r)?,
65228            ))),
65229            TypeVariant::TransactionResultMetaV1 => Ok(Self::TransactionResultMetaV1(Box::new(
65230                serde::de::Deserialize::deserialize(r)?,
65231            ))),
65232            TypeVariant::UpgradeEntryMeta => Ok(Self::UpgradeEntryMeta(Box::new(
65233                serde::de::Deserialize::deserialize(r)?,
65234            ))),
65235            TypeVariant::LedgerCloseMetaV0 => Ok(Self::LedgerCloseMetaV0(Box::new(
65236                serde::de::Deserialize::deserialize(r)?,
65237            ))),
65238            TypeVariant::LedgerCloseMetaExtV1 => Ok(Self::LedgerCloseMetaExtV1(Box::new(
65239                serde::de::Deserialize::deserialize(r)?,
65240            ))),
65241            TypeVariant::LedgerCloseMetaExt => Ok(Self::LedgerCloseMetaExt(Box::new(
65242                serde::de::Deserialize::deserialize(r)?,
65243            ))),
65244            TypeVariant::LedgerCloseMetaV1 => Ok(Self::LedgerCloseMetaV1(Box::new(
65245                serde::de::Deserialize::deserialize(r)?,
65246            ))),
65247            TypeVariant::LedgerCloseMetaV2 => Ok(Self::LedgerCloseMetaV2(Box::new(
65248                serde::de::Deserialize::deserialize(r)?,
65249            ))),
65250            TypeVariant::LedgerCloseMeta => Ok(Self::LedgerCloseMeta(Box::new(
65251                serde::de::Deserialize::deserialize(r)?,
65252            ))),
65253            TypeVariant::ErrorCode => Ok(Self::ErrorCode(Box::new(
65254                serde::de::Deserialize::deserialize(r)?,
65255            ))),
65256            TypeVariant::SError => Ok(Self::SError(Box::new(serde::de::Deserialize::deserialize(
65257                r,
65258            )?))),
65259            TypeVariant::SendMore => Ok(Self::SendMore(Box::new(
65260                serde::de::Deserialize::deserialize(r)?,
65261            ))),
65262            TypeVariant::SendMoreExtended => Ok(Self::SendMoreExtended(Box::new(
65263                serde::de::Deserialize::deserialize(r)?,
65264            ))),
65265            TypeVariant::AuthCert => Ok(Self::AuthCert(Box::new(
65266                serde::de::Deserialize::deserialize(r)?,
65267            ))),
65268            TypeVariant::Hello => Ok(Self::Hello(Box::new(serde::de::Deserialize::deserialize(
65269                r,
65270            )?))),
65271            TypeVariant::Auth => Ok(Self::Auth(Box::new(serde::de::Deserialize::deserialize(
65272                r,
65273            )?))),
65274            TypeVariant::IpAddrType => Ok(Self::IpAddrType(Box::new(
65275                serde::de::Deserialize::deserialize(r)?,
65276            ))),
65277            TypeVariant::PeerAddress => Ok(Self::PeerAddress(Box::new(
65278                serde::de::Deserialize::deserialize(r)?,
65279            ))),
65280            TypeVariant::PeerAddressIp => Ok(Self::PeerAddressIp(Box::new(
65281                serde::de::Deserialize::deserialize(r)?,
65282            ))),
65283            TypeVariant::MessageType => Ok(Self::MessageType(Box::new(
65284                serde::de::Deserialize::deserialize(r)?,
65285            ))),
65286            TypeVariant::DontHave => Ok(Self::DontHave(Box::new(
65287                serde::de::Deserialize::deserialize(r)?,
65288            ))),
65289            TypeVariant::SurveyMessageCommandType => Ok(Self::SurveyMessageCommandType(Box::new(
65290                serde::de::Deserialize::deserialize(r)?,
65291            ))),
65292            TypeVariant::SurveyMessageResponseType => Ok(Self::SurveyMessageResponseType(
65293                Box::new(serde::de::Deserialize::deserialize(r)?),
65294            )),
65295            TypeVariant::TimeSlicedSurveyStartCollectingMessage => {
65296                Ok(Self::TimeSlicedSurveyStartCollectingMessage(Box::new(
65297                    serde::de::Deserialize::deserialize(r)?,
65298                )))
65299            }
65300            TypeVariant::SignedTimeSlicedSurveyStartCollectingMessage => {
65301                Ok(Self::SignedTimeSlicedSurveyStartCollectingMessage(
65302                    Box::new(serde::de::Deserialize::deserialize(r)?),
65303                ))
65304            }
65305            TypeVariant::TimeSlicedSurveyStopCollectingMessage => {
65306                Ok(Self::TimeSlicedSurveyStopCollectingMessage(Box::new(
65307                    serde::de::Deserialize::deserialize(r)?,
65308                )))
65309            }
65310            TypeVariant::SignedTimeSlicedSurveyStopCollectingMessage => {
65311                Ok(Self::SignedTimeSlicedSurveyStopCollectingMessage(Box::new(
65312                    serde::de::Deserialize::deserialize(r)?,
65313                )))
65314            }
65315            TypeVariant::SurveyRequestMessage => Ok(Self::SurveyRequestMessage(Box::new(
65316                serde::de::Deserialize::deserialize(r)?,
65317            ))),
65318            TypeVariant::TimeSlicedSurveyRequestMessage => {
65319                Ok(Self::TimeSlicedSurveyRequestMessage(Box::new(
65320                    serde::de::Deserialize::deserialize(r)?,
65321                )))
65322            }
65323            TypeVariant::SignedTimeSlicedSurveyRequestMessage => {
65324                Ok(Self::SignedTimeSlicedSurveyRequestMessage(Box::new(
65325                    serde::de::Deserialize::deserialize(r)?,
65326                )))
65327            }
65328            TypeVariant::EncryptedBody => Ok(Self::EncryptedBody(Box::new(
65329                serde::de::Deserialize::deserialize(r)?,
65330            ))),
65331            TypeVariant::SurveyResponseMessage => Ok(Self::SurveyResponseMessage(Box::new(
65332                serde::de::Deserialize::deserialize(r)?,
65333            ))),
65334            TypeVariant::TimeSlicedSurveyResponseMessage => {
65335                Ok(Self::TimeSlicedSurveyResponseMessage(Box::new(
65336                    serde::de::Deserialize::deserialize(r)?,
65337                )))
65338            }
65339            TypeVariant::SignedTimeSlicedSurveyResponseMessage => {
65340                Ok(Self::SignedTimeSlicedSurveyResponseMessage(Box::new(
65341                    serde::de::Deserialize::deserialize(r)?,
65342                )))
65343            }
65344            TypeVariant::PeerStats => Ok(Self::PeerStats(Box::new(
65345                serde::de::Deserialize::deserialize(r)?,
65346            ))),
65347            TypeVariant::TimeSlicedNodeData => Ok(Self::TimeSlicedNodeData(Box::new(
65348                serde::de::Deserialize::deserialize(r)?,
65349            ))),
65350            TypeVariant::TimeSlicedPeerData => Ok(Self::TimeSlicedPeerData(Box::new(
65351                serde::de::Deserialize::deserialize(r)?,
65352            ))),
65353            TypeVariant::TimeSlicedPeerDataList => Ok(Self::TimeSlicedPeerDataList(Box::new(
65354                serde::de::Deserialize::deserialize(r)?,
65355            ))),
65356            TypeVariant::TopologyResponseBodyV2 => Ok(Self::TopologyResponseBodyV2(Box::new(
65357                serde::de::Deserialize::deserialize(r)?,
65358            ))),
65359            TypeVariant::SurveyResponseBody => Ok(Self::SurveyResponseBody(Box::new(
65360                serde::de::Deserialize::deserialize(r)?,
65361            ))),
65362            TypeVariant::TxAdvertVector => Ok(Self::TxAdvertVector(Box::new(
65363                serde::de::Deserialize::deserialize(r)?,
65364            ))),
65365            TypeVariant::FloodAdvert => Ok(Self::FloodAdvert(Box::new(
65366                serde::de::Deserialize::deserialize(r)?,
65367            ))),
65368            TypeVariant::TxDemandVector => Ok(Self::TxDemandVector(Box::new(
65369                serde::de::Deserialize::deserialize(r)?,
65370            ))),
65371            TypeVariant::FloodDemand => Ok(Self::FloodDemand(Box::new(
65372                serde::de::Deserialize::deserialize(r)?,
65373            ))),
65374            TypeVariant::StellarMessage => Ok(Self::StellarMessage(Box::new(
65375                serde::de::Deserialize::deserialize(r)?,
65376            ))),
65377            TypeVariant::AuthenticatedMessage => Ok(Self::AuthenticatedMessage(Box::new(
65378                serde::de::Deserialize::deserialize(r)?,
65379            ))),
65380            TypeVariant::AuthenticatedMessageV0 => Ok(Self::AuthenticatedMessageV0(Box::new(
65381                serde::de::Deserialize::deserialize(r)?,
65382            ))),
65383            TypeVariant::LiquidityPoolParameters => Ok(Self::LiquidityPoolParameters(Box::new(
65384                serde::de::Deserialize::deserialize(r)?,
65385            ))),
65386            TypeVariant::MuxedAccount => Ok(Self::MuxedAccount(Box::new(
65387                serde::de::Deserialize::deserialize(r)?,
65388            ))),
65389            TypeVariant::MuxedAccountMed25519 => Ok(Self::MuxedAccountMed25519(Box::new(
65390                serde::de::Deserialize::deserialize(r)?,
65391            ))),
65392            TypeVariant::DecoratedSignature => Ok(Self::DecoratedSignature(Box::new(
65393                serde::de::Deserialize::deserialize(r)?,
65394            ))),
65395            TypeVariant::OperationType => Ok(Self::OperationType(Box::new(
65396                serde::de::Deserialize::deserialize(r)?,
65397            ))),
65398            TypeVariant::CreateAccountOp => Ok(Self::CreateAccountOp(Box::new(
65399                serde::de::Deserialize::deserialize(r)?,
65400            ))),
65401            TypeVariant::PaymentOp => Ok(Self::PaymentOp(Box::new(
65402                serde::de::Deserialize::deserialize(r)?,
65403            ))),
65404            TypeVariant::PathPaymentStrictReceiveOp => Ok(Self::PathPaymentStrictReceiveOp(
65405                Box::new(serde::de::Deserialize::deserialize(r)?),
65406            )),
65407            TypeVariant::PathPaymentStrictSendOp => Ok(Self::PathPaymentStrictSendOp(Box::new(
65408                serde::de::Deserialize::deserialize(r)?,
65409            ))),
65410            TypeVariant::ManageSellOfferOp => Ok(Self::ManageSellOfferOp(Box::new(
65411                serde::de::Deserialize::deserialize(r)?,
65412            ))),
65413            TypeVariant::ManageBuyOfferOp => Ok(Self::ManageBuyOfferOp(Box::new(
65414                serde::de::Deserialize::deserialize(r)?,
65415            ))),
65416            TypeVariant::CreatePassiveSellOfferOp => Ok(Self::CreatePassiveSellOfferOp(Box::new(
65417                serde::de::Deserialize::deserialize(r)?,
65418            ))),
65419            TypeVariant::SetOptionsOp => Ok(Self::SetOptionsOp(Box::new(
65420                serde::de::Deserialize::deserialize(r)?,
65421            ))),
65422            TypeVariant::ChangeTrustAsset => Ok(Self::ChangeTrustAsset(Box::new(
65423                serde::de::Deserialize::deserialize(r)?,
65424            ))),
65425            TypeVariant::ChangeTrustOp => Ok(Self::ChangeTrustOp(Box::new(
65426                serde::de::Deserialize::deserialize(r)?,
65427            ))),
65428            TypeVariant::AllowTrustOp => Ok(Self::AllowTrustOp(Box::new(
65429                serde::de::Deserialize::deserialize(r)?,
65430            ))),
65431            TypeVariant::ManageDataOp => Ok(Self::ManageDataOp(Box::new(
65432                serde::de::Deserialize::deserialize(r)?,
65433            ))),
65434            TypeVariant::BumpSequenceOp => Ok(Self::BumpSequenceOp(Box::new(
65435                serde::de::Deserialize::deserialize(r)?,
65436            ))),
65437            TypeVariant::CreateClaimableBalanceOp => Ok(Self::CreateClaimableBalanceOp(Box::new(
65438                serde::de::Deserialize::deserialize(r)?,
65439            ))),
65440            TypeVariant::ClaimClaimableBalanceOp => Ok(Self::ClaimClaimableBalanceOp(Box::new(
65441                serde::de::Deserialize::deserialize(r)?,
65442            ))),
65443            TypeVariant::BeginSponsoringFutureReservesOp => {
65444                Ok(Self::BeginSponsoringFutureReservesOp(Box::new(
65445                    serde::de::Deserialize::deserialize(r)?,
65446                )))
65447            }
65448            TypeVariant::RevokeSponsorshipType => Ok(Self::RevokeSponsorshipType(Box::new(
65449                serde::de::Deserialize::deserialize(r)?,
65450            ))),
65451            TypeVariant::RevokeSponsorshipOp => Ok(Self::RevokeSponsorshipOp(Box::new(
65452                serde::de::Deserialize::deserialize(r)?,
65453            ))),
65454            TypeVariant::RevokeSponsorshipOpSigner => Ok(Self::RevokeSponsorshipOpSigner(
65455                Box::new(serde::de::Deserialize::deserialize(r)?),
65456            )),
65457            TypeVariant::ClawbackOp => Ok(Self::ClawbackOp(Box::new(
65458                serde::de::Deserialize::deserialize(r)?,
65459            ))),
65460            TypeVariant::ClawbackClaimableBalanceOp => Ok(Self::ClawbackClaimableBalanceOp(
65461                Box::new(serde::de::Deserialize::deserialize(r)?),
65462            )),
65463            TypeVariant::SetTrustLineFlagsOp => Ok(Self::SetTrustLineFlagsOp(Box::new(
65464                serde::de::Deserialize::deserialize(r)?,
65465            ))),
65466            TypeVariant::LiquidityPoolDepositOp => Ok(Self::LiquidityPoolDepositOp(Box::new(
65467                serde::de::Deserialize::deserialize(r)?,
65468            ))),
65469            TypeVariant::LiquidityPoolWithdrawOp => Ok(Self::LiquidityPoolWithdrawOp(Box::new(
65470                serde::de::Deserialize::deserialize(r)?,
65471            ))),
65472            TypeVariant::HostFunctionType => Ok(Self::HostFunctionType(Box::new(
65473                serde::de::Deserialize::deserialize(r)?,
65474            ))),
65475            TypeVariant::ContractIdPreimageType => Ok(Self::ContractIdPreimageType(Box::new(
65476                serde::de::Deserialize::deserialize(r)?,
65477            ))),
65478            TypeVariant::ContractIdPreimage => Ok(Self::ContractIdPreimage(Box::new(
65479                serde::de::Deserialize::deserialize(r)?,
65480            ))),
65481            TypeVariant::ContractIdPreimageFromAddress => Ok(Self::ContractIdPreimageFromAddress(
65482                Box::new(serde::de::Deserialize::deserialize(r)?),
65483            )),
65484            TypeVariant::CreateContractArgs => Ok(Self::CreateContractArgs(Box::new(
65485                serde::de::Deserialize::deserialize(r)?,
65486            ))),
65487            TypeVariant::CreateContractArgsV2 => Ok(Self::CreateContractArgsV2(Box::new(
65488                serde::de::Deserialize::deserialize(r)?,
65489            ))),
65490            TypeVariant::InvokeContractArgs => Ok(Self::InvokeContractArgs(Box::new(
65491                serde::de::Deserialize::deserialize(r)?,
65492            ))),
65493            TypeVariant::HostFunction => Ok(Self::HostFunction(Box::new(
65494                serde::de::Deserialize::deserialize(r)?,
65495            ))),
65496            TypeVariant::SorobanAuthorizedFunctionType => Ok(Self::SorobanAuthorizedFunctionType(
65497                Box::new(serde::de::Deserialize::deserialize(r)?),
65498            )),
65499            TypeVariant::SorobanAuthorizedFunction => Ok(Self::SorobanAuthorizedFunction(
65500                Box::new(serde::de::Deserialize::deserialize(r)?),
65501            )),
65502            TypeVariant::SorobanAuthorizedInvocation => Ok(Self::SorobanAuthorizedInvocation(
65503                Box::new(serde::de::Deserialize::deserialize(r)?),
65504            )),
65505            TypeVariant::SorobanAddressCredentials => Ok(Self::SorobanAddressCredentials(
65506                Box::new(serde::de::Deserialize::deserialize(r)?),
65507            )),
65508            TypeVariant::SorobanCredentialsType => Ok(Self::SorobanCredentialsType(Box::new(
65509                serde::de::Deserialize::deserialize(r)?,
65510            ))),
65511            TypeVariant::SorobanCredentials => Ok(Self::SorobanCredentials(Box::new(
65512                serde::de::Deserialize::deserialize(r)?,
65513            ))),
65514            TypeVariant::SorobanAuthorizationEntry => Ok(Self::SorobanAuthorizationEntry(
65515                Box::new(serde::de::Deserialize::deserialize(r)?),
65516            )),
65517            TypeVariant::SorobanAuthorizationEntries => Ok(Self::SorobanAuthorizationEntries(
65518                Box::new(serde::de::Deserialize::deserialize(r)?),
65519            )),
65520            TypeVariant::InvokeHostFunctionOp => Ok(Self::InvokeHostFunctionOp(Box::new(
65521                serde::de::Deserialize::deserialize(r)?,
65522            ))),
65523            TypeVariant::ExtendFootprintTtlOp => Ok(Self::ExtendFootprintTtlOp(Box::new(
65524                serde::de::Deserialize::deserialize(r)?,
65525            ))),
65526            TypeVariant::RestoreFootprintOp => Ok(Self::RestoreFootprintOp(Box::new(
65527                serde::de::Deserialize::deserialize(r)?,
65528            ))),
65529            TypeVariant::Operation => Ok(Self::Operation(Box::new(
65530                serde::de::Deserialize::deserialize(r)?,
65531            ))),
65532            TypeVariant::OperationBody => Ok(Self::OperationBody(Box::new(
65533                serde::de::Deserialize::deserialize(r)?,
65534            ))),
65535            TypeVariant::HashIdPreimage => Ok(Self::HashIdPreimage(Box::new(
65536                serde::de::Deserialize::deserialize(r)?,
65537            ))),
65538            TypeVariant::HashIdPreimageOperationId => Ok(Self::HashIdPreimageOperationId(
65539                Box::new(serde::de::Deserialize::deserialize(r)?),
65540            )),
65541            TypeVariant::HashIdPreimageRevokeId => Ok(Self::HashIdPreimageRevokeId(Box::new(
65542                serde::de::Deserialize::deserialize(r)?,
65543            ))),
65544            TypeVariant::HashIdPreimageContractId => Ok(Self::HashIdPreimageContractId(Box::new(
65545                serde::de::Deserialize::deserialize(r)?,
65546            ))),
65547            TypeVariant::HashIdPreimageSorobanAuthorization => {
65548                Ok(Self::HashIdPreimageSorobanAuthorization(Box::new(
65549                    serde::de::Deserialize::deserialize(r)?,
65550                )))
65551            }
65552            TypeVariant::MemoType => Ok(Self::MemoType(Box::new(
65553                serde::de::Deserialize::deserialize(r)?,
65554            ))),
65555            TypeVariant::Memo => Ok(Self::Memo(Box::new(serde::de::Deserialize::deserialize(
65556                r,
65557            )?))),
65558            TypeVariant::TimeBounds => Ok(Self::TimeBounds(Box::new(
65559                serde::de::Deserialize::deserialize(r)?,
65560            ))),
65561            TypeVariant::LedgerBounds => Ok(Self::LedgerBounds(Box::new(
65562                serde::de::Deserialize::deserialize(r)?,
65563            ))),
65564            TypeVariant::PreconditionsV2 => Ok(Self::PreconditionsV2(Box::new(
65565                serde::de::Deserialize::deserialize(r)?,
65566            ))),
65567            TypeVariant::PreconditionType => Ok(Self::PreconditionType(Box::new(
65568                serde::de::Deserialize::deserialize(r)?,
65569            ))),
65570            TypeVariant::Preconditions => Ok(Self::Preconditions(Box::new(
65571                serde::de::Deserialize::deserialize(r)?,
65572            ))),
65573            TypeVariant::LedgerFootprint => Ok(Self::LedgerFootprint(Box::new(
65574                serde::de::Deserialize::deserialize(r)?,
65575            ))),
65576            TypeVariant::SorobanResources => Ok(Self::SorobanResources(Box::new(
65577                serde::de::Deserialize::deserialize(r)?,
65578            ))),
65579            TypeVariant::SorobanResourcesExtV0 => Ok(Self::SorobanResourcesExtV0(Box::new(
65580                serde::de::Deserialize::deserialize(r)?,
65581            ))),
65582            TypeVariant::SorobanTransactionData => Ok(Self::SorobanTransactionData(Box::new(
65583                serde::de::Deserialize::deserialize(r)?,
65584            ))),
65585            TypeVariant::SorobanTransactionDataExt => Ok(Self::SorobanTransactionDataExt(
65586                Box::new(serde::de::Deserialize::deserialize(r)?),
65587            )),
65588            TypeVariant::TransactionV0 => Ok(Self::TransactionV0(Box::new(
65589                serde::de::Deserialize::deserialize(r)?,
65590            ))),
65591            TypeVariant::TransactionV0Ext => Ok(Self::TransactionV0Ext(Box::new(
65592                serde::de::Deserialize::deserialize(r)?,
65593            ))),
65594            TypeVariant::TransactionV0Envelope => Ok(Self::TransactionV0Envelope(Box::new(
65595                serde::de::Deserialize::deserialize(r)?,
65596            ))),
65597            TypeVariant::Transaction => Ok(Self::Transaction(Box::new(
65598                serde::de::Deserialize::deserialize(r)?,
65599            ))),
65600            TypeVariant::TransactionExt => Ok(Self::TransactionExt(Box::new(
65601                serde::de::Deserialize::deserialize(r)?,
65602            ))),
65603            TypeVariant::TransactionV1Envelope => Ok(Self::TransactionV1Envelope(Box::new(
65604                serde::de::Deserialize::deserialize(r)?,
65605            ))),
65606            TypeVariant::FeeBumpTransaction => Ok(Self::FeeBumpTransaction(Box::new(
65607                serde::de::Deserialize::deserialize(r)?,
65608            ))),
65609            TypeVariant::FeeBumpTransactionInnerTx => Ok(Self::FeeBumpTransactionInnerTx(
65610                Box::new(serde::de::Deserialize::deserialize(r)?),
65611            )),
65612            TypeVariant::FeeBumpTransactionExt => Ok(Self::FeeBumpTransactionExt(Box::new(
65613                serde::de::Deserialize::deserialize(r)?,
65614            ))),
65615            TypeVariant::FeeBumpTransactionEnvelope => Ok(Self::FeeBumpTransactionEnvelope(
65616                Box::new(serde::de::Deserialize::deserialize(r)?),
65617            )),
65618            TypeVariant::TransactionEnvelope => Ok(Self::TransactionEnvelope(Box::new(
65619                serde::de::Deserialize::deserialize(r)?,
65620            ))),
65621            TypeVariant::TransactionSignaturePayload => Ok(Self::TransactionSignaturePayload(
65622                Box::new(serde::de::Deserialize::deserialize(r)?),
65623            )),
65624            TypeVariant::TransactionSignaturePayloadTaggedTransaction => {
65625                Ok(Self::TransactionSignaturePayloadTaggedTransaction(
65626                    Box::new(serde::de::Deserialize::deserialize(r)?),
65627                ))
65628            }
65629            TypeVariant::ClaimAtomType => Ok(Self::ClaimAtomType(Box::new(
65630                serde::de::Deserialize::deserialize(r)?,
65631            ))),
65632            TypeVariant::ClaimOfferAtomV0 => Ok(Self::ClaimOfferAtomV0(Box::new(
65633                serde::de::Deserialize::deserialize(r)?,
65634            ))),
65635            TypeVariant::ClaimOfferAtom => Ok(Self::ClaimOfferAtom(Box::new(
65636                serde::de::Deserialize::deserialize(r)?,
65637            ))),
65638            TypeVariant::ClaimLiquidityAtom => Ok(Self::ClaimLiquidityAtom(Box::new(
65639                serde::de::Deserialize::deserialize(r)?,
65640            ))),
65641            TypeVariant::ClaimAtom => Ok(Self::ClaimAtom(Box::new(
65642                serde::de::Deserialize::deserialize(r)?,
65643            ))),
65644            TypeVariant::CreateAccountResultCode => Ok(Self::CreateAccountResultCode(Box::new(
65645                serde::de::Deserialize::deserialize(r)?,
65646            ))),
65647            TypeVariant::CreateAccountResult => Ok(Self::CreateAccountResult(Box::new(
65648                serde::de::Deserialize::deserialize(r)?,
65649            ))),
65650            TypeVariant::PaymentResultCode => Ok(Self::PaymentResultCode(Box::new(
65651                serde::de::Deserialize::deserialize(r)?,
65652            ))),
65653            TypeVariant::PaymentResult => Ok(Self::PaymentResult(Box::new(
65654                serde::de::Deserialize::deserialize(r)?,
65655            ))),
65656            TypeVariant::PathPaymentStrictReceiveResultCode => {
65657                Ok(Self::PathPaymentStrictReceiveResultCode(Box::new(
65658                    serde::de::Deserialize::deserialize(r)?,
65659                )))
65660            }
65661            TypeVariant::SimplePaymentResult => Ok(Self::SimplePaymentResult(Box::new(
65662                serde::de::Deserialize::deserialize(r)?,
65663            ))),
65664            TypeVariant::PathPaymentStrictReceiveResult => {
65665                Ok(Self::PathPaymentStrictReceiveResult(Box::new(
65666                    serde::de::Deserialize::deserialize(r)?,
65667                )))
65668            }
65669            TypeVariant::PathPaymentStrictReceiveResultSuccess => {
65670                Ok(Self::PathPaymentStrictReceiveResultSuccess(Box::new(
65671                    serde::de::Deserialize::deserialize(r)?,
65672                )))
65673            }
65674            TypeVariant::PathPaymentStrictSendResultCode => {
65675                Ok(Self::PathPaymentStrictSendResultCode(Box::new(
65676                    serde::de::Deserialize::deserialize(r)?,
65677                )))
65678            }
65679            TypeVariant::PathPaymentStrictSendResult => Ok(Self::PathPaymentStrictSendResult(
65680                Box::new(serde::de::Deserialize::deserialize(r)?),
65681            )),
65682            TypeVariant::PathPaymentStrictSendResultSuccess => {
65683                Ok(Self::PathPaymentStrictSendResultSuccess(Box::new(
65684                    serde::de::Deserialize::deserialize(r)?,
65685                )))
65686            }
65687            TypeVariant::ManageSellOfferResultCode => Ok(Self::ManageSellOfferResultCode(
65688                Box::new(serde::de::Deserialize::deserialize(r)?),
65689            )),
65690            TypeVariant::ManageOfferEffect => Ok(Self::ManageOfferEffect(Box::new(
65691                serde::de::Deserialize::deserialize(r)?,
65692            ))),
65693            TypeVariant::ManageOfferSuccessResult => Ok(Self::ManageOfferSuccessResult(Box::new(
65694                serde::de::Deserialize::deserialize(r)?,
65695            ))),
65696            TypeVariant::ManageOfferSuccessResultOffer => Ok(Self::ManageOfferSuccessResultOffer(
65697                Box::new(serde::de::Deserialize::deserialize(r)?),
65698            )),
65699            TypeVariant::ManageSellOfferResult => Ok(Self::ManageSellOfferResult(Box::new(
65700                serde::de::Deserialize::deserialize(r)?,
65701            ))),
65702            TypeVariant::ManageBuyOfferResultCode => Ok(Self::ManageBuyOfferResultCode(Box::new(
65703                serde::de::Deserialize::deserialize(r)?,
65704            ))),
65705            TypeVariant::ManageBuyOfferResult => Ok(Self::ManageBuyOfferResult(Box::new(
65706                serde::de::Deserialize::deserialize(r)?,
65707            ))),
65708            TypeVariant::SetOptionsResultCode => Ok(Self::SetOptionsResultCode(Box::new(
65709                serde::de::Deserialize::deserialize(r)?,
65710            ))),
65711            TypeVariant::SetOptionsResult => Ok(Self::SetOptionsResult(Box::new(
65712                serde::de::Deserialize::deserialize(r)?,
65713            ))),
65714            TypeVariant::ChangeTrustResultCode => Ok(Self::ChangeTrustResultCode(Box::new(
65715                serde::de::Deserialize::deserialize(r)?,
65716            ))),
65717            TypeVariant::ChangeTrustResult => Ok(Self::ChangeTrustResult(Box::new(
65718                serde::de::Deserialize::deserialize(r)?,
65719            ))),
65720            TypeVariant::AllowTrustResultCode => Ok(Self::AllowTrustResultCode(Box::new(
65721                serde::de::Deserialize::deserialize(r)?,
65722            ))),
65723            TypeVariant::AllowTrustResult => Ok(Self::AllowTrustResult(Box::new(
65724                serde::de::Deserialize::deserialize(r)?,
65725            ))),
65726            TypeVariant::AccountMergeResultCode => Ok(Self::AccountMergeResultCode(Box::new(
65727                serde::de::Deserialize::deserialize(r)?,
65728            ))),
65729            TypeVariant::AccountMergeResult => Ok(Self::AccountMergeResult(Box::new(
65730                serde::de::Deserialize::deserialize(r)?,
65731            ))),
65732            TypeVariant::InflationResultCode => Ok(Self::InflationResultCode(Box::new(
65733                serde::de::Deserialize::deserialize(r)?,
65734            ))),
65735            TypeVariant::InflationPayout => Ok(Self::InflationPayout(Box::new(
65736                serde::de::Deserialize::deserialize(r)?,
65737            ))),
65738            TypeVariant::InflationResult => Ok(Self::InflationResult(Box::new(
65739                serde::de::Deserialize::deserialize(r)?,
65740            ))),
65741            TypeVariant::ManageDataResultCode => Ok(Self::ManageDataResultCode(Box::new(
65742                serde::de::Deserialize::deserialize(r)?,
65743            ))),
65744            TypeVariant::ManageDataResult => Ok(Self::ManageDataResult(Box::new(
65745                serde::de::Deserialize::deserialize(r)?,
65746            ))),
65747            TypeVariant::BumpSequenceResultCode => Ok(Self::BumpSequenceResultCode(Box::new(
65748                serde::de::Deserialize::deserialize(r)?,
65749            ))),
65750            TypeVariant::BumpSequenceResult => Ok(Self::BumpSequenceResult(Box::new(
65751                serde::de::Deserialize::deserialize(r)?,
65752            ))),
65753            TypeVariant::CreateClaimableBalanceResultCode => {
65754                Ok(Self::CreateClaimableBalanceResultCode(Box::new(
65755                    serde::de::Deserialize::deserialize(r)?,
65756                )))
65757            }
65758            TypeVariant::CreateClaimableBalanceResult => Ok(Self::CreateClaimableBalanceResult(
65759                Box::new(serde::de::Deserialize::deserialize(r)?),
65760            )),
65761            TypeVariant::ClaimClaimableBalanceResultCode => {
65762                Ok(Self::ClaimClaimableBalanceResultCode(Box::new(
65763                    serde::de::Deserialize::deserialize(r)?,
65764                )))
65765            }
65766            TypeVariant::ClaimClaimableBalanceResult => Ok(Self::ClaimClaimableBalanceResult(
65767                Box::new(serde::de::Deserialize::deserialize(r)?),
65768            )),
65769            TypeVariant::BeginSponsoringFutureReservesResultCode => {
65770                Ok(Self::BeginSponsoringFutureReservesResultCode(Box::new(
65771                    serde::de::Deserialize::deserialize(r)?,
65772                )))
65773            }
65774            TypeVariant::BeginSponsoringFutureReservesResult => {
65775                Ok(Self::BeginSponsoringFutureReservesResult(Box::new(
65776                    serde::de::Deserialize::deserialize(r)?,
65777                )))
65778            }
65779            TypeVariant::EndSponsoringFutureReservesResultCode => {
65780                Ok(Self::EndSponsoringFutureReservesResultCode(Box::new(
65781                    serde::de::Deserialize::deserialize(r)?,
65782                )))
65783            }
65784            TypeVariant::EndSponsoringFutureReservesResult => {
65785                Ok(Self::EndSponsoringFutureReservesResult(Box::new(
65786                    serde::de::Deserialize::deserialize(r)?,
65787                )))
65788            }
65789            TypeVariant::RevokeSponsorshipResultCode => Ok(Self::RevokeSponsorshipResultCode(
65790                Box::new(serde::de::Deserialize::deserialize(r)?),
65791            )),
65792            TypeVariant::RevokeSponsorshipResult => Ok(Self::RevokeSponsorshipResult(Box::new(
65793                serde::de::Deserialize::deserialize(r)?,
65794            ))),
65795            TypeVariant::ClawbackResultCode => Ok(Self::ClawbackResultCode(Box::new(
65796                serde::de::Deserialize::deserialize(r)?,
65797            ))),
65798            TypeVariant::ClawbackResult => Ok(Self::ClawbackResult(Box::new(
65799                serde::de::Deserialize::deserialize(r)?,
65800            ))),
65801            TypeVariant::ClawbackClaimableBalanceResultCode => {
65802                Ok(Self::ClawbackClaimableBalanceResultCode(Box::new(
65803                    serde::de::Deserialize::deserialize(r)?,
65804                )))
65805            }
65806            TypeVariant::ClawbackClaimableBalanceResult => {
65807                Ok(Self::ClawbackClaimableBalanceResult(Box::new(
65808                    serde::de::Deserialize::deserialize(r)?,
65809                )))
65810            }
65811            TypeVariant::SetTrustLineFlagsResultCode => Ok(Self::SetTrustLineFlagsResultCode(
65812                Box::new(serde::de::Deserialize::deserialize(r)?),
65813            )),
65814            TypeVariant::SetTrustLineFlagsResult => Ok(Self::SetTrustLineFlagsResult(Box::new(
65815                serde::de::Deserialize::deserialize(r)?,
65816            ))),
65817            TypeVariant::LiquidityPoolDepositResultCode => {
65818                Ok(Self::LiquidityPoolDepositResultCode(Box::new(
65819                    serde::de::Deserialize::deserialize(r)?,
65820                )))
65821            }
65822            TypeVariant::LiquidityPoolDepositResult => Ok(Self::LiquidityPoolDepositResult(
65823                Box::new(serde::de::Deserialize::deserialize(r)?),
65824            )),
65825            TypeVariant::LiquidityPoolWithdrawResultCode => {
65826                Ok(Self::LiquidityPoolWithdrawResultCode(Box::new(
65827                    serde::de::Deserialize::deserialize(r)?,
65828                )))
65829            }
65830            TypeVariant::LiquidityPoolWithdrawResult => Ok(Self::LiquidityPoolWithdrawResult(
65831                Box::new(serde::de::Deserialize::deserialize(r)?),
65832            )),
65833            TypeVariant::InvokeHostFunctionResultCode => Ok(Self::InvokeHostFunctionResultCode(
65834                Box::new(serde::de::Deserialize::deserialize(r)?),
65835            )),
65836            TypeVariant::InvokeHostFunctionResult => Ok(Self::InvokeHostFunctionResult(Box::new(
65837                serde::de::Deserialize::deserialize(r)?,
65838            ))),
65839            TypeVariant::ExtendFootprintTtlResultCode => Ok(Self::ExtendFootprintTtlResultCode(
65840                Box::new(serde::de::Deserialize::deserialize(r)?),
65841            )),
65842            TypeVariant::ExtendFootprintTtlResult => Ok(Self::ExtendFootprintTtlResult(Box::new(
65843                serde::de::Deserialize::deserialize(r)?,
65844            ))),
65845            TypeVariant::RestoreFootprintResultCode => Ok(Self::RestoreFootprintResultCode(
65846                Box::new(serde::de::Deserialize::deserialize(r)?),
65847            )),
65848            TypeVariant::RestoreFootprintResult => Ok(Self::RestoreFootprintResult(Box::new(
65849                serde::de::Deserialize::deserialize(r)?,
65850            ))),
65851            TypeVariant::OperationResultCode => Ok(Self::OperationResultCode(Box::new(
65852                serde::de::Deserialize::deserialize(r)?,
65853            ))),
65854            TypeVariant::OperationResult => Ok(Self::OperationResult(Box::new(
65855                serde::de::Deserialize::deserialize(r)?,
65856            ))),
65857            TypeVariant::OperationResultTr => Ok(Self::OperationResultTr(Box::new(
65858                serde::de::Deserialize::deserialize(r)?,
65859            ))),
65860            TypeVariant::TransactionResultCode => Ok(Self::TransactionResultCode(Box::new(
65861                serde::de::Deserialize::deserialize(r)?,
65862            ))),
65863            TypeVariant::InnerTransactionResult => Ok(Self::InnerTransactionResult(Box::new(
65864                serde::de::Deserialize::deserialize(r)?,
65865            ))),
65866            TypeVariant::InnerTransactionResultResult => Ok(Self::InnerTransactionResultResult(
65867                Box::new(serde::de::Deserialize::deserialize(r)?),
65868            )),
65869            TypeVariant::InnerTransactionResultExt => Ok(Self::InnerTransactionResultExt(
65870                Box::new(serde::de::Deserialize::deserialize(r)?),
65871            )),
65872            TypeVariant::InnerTransactionResultPair => Ok(Self::InnerTransactionResultPair(
65873                Box::new(serde::de::Deserialize::deserialize(r)?),
65874            )),
65875            TypeVariant::TransactionResult => Ok(Self::TransactionResult(Box::new(
65876                serde::de::Deserialize::deserialize(r)?,
65877            ))),
65878            TypeVariant::TransactionResultResult => Ok(Self::TransactionResultResult(Box::new(
65879                serde::de::Deserialize::deserialize(r)?,
65880            ))),
65881            TypeVariant::TransactionResultExt => Ok(Self::TransactionResultExt(Box::new(
65882                serde::de::Deserialize::deserialize(r)?,
65883            ))),
65884            TypeVariant::Hash => Ok(Self::Hash(Box::new(serde::de::Deserialize::deserialize(
65885                r,
65886            )?))),
65887            TypeVariant::Uint256 => Ok(Self::Uint256(Box::new(
65888                serde::de::Deserialize::deserialize(r)?,
65889            ))),
65890            TypeVariant::Uint32 => Ok(Self::Uint32(Box::new(serde::de::Deserialize::deserialize(
65891                r,
65892            )?))),
65893            TypeVariant::Int32 => Ok(Self::Int32(Box::new(serde::de::Deserialize::deserialize(
65894                r,
65895            )?))),
65896            TypeVariant::Uint64 => Ok(Self::Uint64(Box::new(serde::de::Deserialize::deserialize(
65897                r,
65898            )?))),
65899            TypeVariant::Int64 => Ok(Self::Int64(Box::new(serde::de::Deserialize::deserialize(
65900                r,
65901            )?))),
65902            TypeVariant::TimePoint => Ok(Self::TimePoint(Box::new(
65903                serde::de::Deserialize::deserialize(r)?,
65904            ))),
65905            TypeVariant::Duration => Ok(Self::Duration(Box::new(
65906                serde::de::Deserialize::deserialize(r)?,
65907            ))),
65908            TypeVariant::ExtensionPoint => Ok(Self::ExtensionPoint(Box::new(
65909                serde::de::Deserialize::deserialize(r)?,
65910            ))),
65911            TypeVariant::CryptoKeyType => Ok(Self::CryptoKeyType(Box::new(
65912                serde::de::Deserialize::deserialize(r)?,
65913            ))),
65914            TypeVariant::PublicKeyType => Ok(Self::PublicKeyType(Box::new(
65915                serde::de::Deserialize::deserialize(r)?,
65916            ))),
65917            TypeVariant::SignerKeyType => Ok(Self::SignerKeyType(Box::new(
65918                serde::de::Deserialize::deserialize(r)?,
65919            ))),
65920            TypeVariant::PublicKey => Ok(Self::PublicKey(Box::new(
65921                serde::de::Deserialize::deserialize(r)?,
65922            ))),
65923            TypeVariant::SignerKey => Ok(Self::SignerKey(Box::new(
65924                serde::de::Deserialize::deserialize(r)?,
65925            ))),
65926            TypeVariant::SignerKeyEd25519SignedPayload => Ok(Self::SignerKeyEd25519SignedPayload(
65927                Box::new(serde::de::Deserialize::deserialize(r)?),
65928            )),
65929            TypeVariant::Signature => Ok(Self::Signature(Box::new(
65930                serde::de::Deserialize::deserialize(r)?,
65931            ))),
65932            TypeVariant::SignatureHint => Ok(Self::SignatureHint(Box::new(
65933                serde::de::Deserialize::deserialize(r)?,
65934            ))),
65935            TypeVariant::NodeId => Ok(Self::NodeId(Box::new(serde::de::Deserialize::deserialize(
65936                r,
65937            )?))),
65938            TypeVariant::AccountId => Ok(Self::AccountId(Box::new(
65939                serde::de::Deserialize::deserialize(r)?,
65940            ))),
65941            TypeVariant::ContractId => Ok(Self::ContractId(Box::new(
65942                serde::de::Deserialize::deserialize(r)?,
65943            ))),
65944            TypeVariant::Curve25519Secret => Ok(Self::Curve25519Secret(Box::new(
65945                serde::de::Deserialize::deserialize(r)?,
65946            ))),
65947            TypeVariant::Curve25519Public => Ok(Self::Curve25519Public(Box::new(
65948                serde::de::Deserialize::deserialize(r)?,
65949            ))),
65950            TypeVariant::HmacSha256Key => Ok(Self::HmacSha256Key(Box::new(
65951                serde::de::Deserialize::deserialize(r)?,
65952            ))),
65953            TypeVariant::HmacSha256Mac => Ok(Self::HmacSha256Mac(Box::new(
65954                serde::de::Deserialize::deserialize(r)?,
65955            ))),
65956            TypeVariant::ShortHashSeed => Ok(Self::ShortHashSeed(Box::new(
65957                serde::de::Deserialize::deserialize(r)?,
65958            ))),
65959            TypeVariant::BinaryFuseFilterType => Ok(Self::BinaryFuseFilterType(Box::new(
65960                serde::de::Deserialize::deserialize(r)?,
65961            ))),
65962            TypeVariant::SerializedBinaryFuseFilter => Ok(Self::SerializedBinaryFuseFilter(
65963                Box::new(serde::de::Deserialize::deserialize(r)?),
65964            )),
65965            TypeVariant::PoolId => Ok(Self::PoolId(Box::new(serde::de::Deserialize::deserialize(
65966                r,
65967            )?))),
65968            TypeVariant::ClaimableBalanceIdType => Ok(Self::ClaimableBalanceIdType(Box::new(
65969                serde::de::Deserialize::deserialize(r)?,
65970            ))),
65971            TypeVariant::ClaimableBalanceId => Ok(Self::ClaimableBalanceId(Box::new(
65972                serde::de::Deserialize::deserialize(r)?,
65973            ))),
65974        }
65975    }
65976
65977    #[cfg(feature = "arbitrary")]
65978    #[allow(clippy::too_many_lines)]
65979    pub fn arbitrary(v: TypeVariant, u: &mut arbitrary::Unstructured<'_>) -> Result<Self, Error> {
65980        match v {
65981            TypeVariant::Value => Ok(Self::Value(Box::new(Value::arbitrary(u)?))),
65982            TypeVariant::ScpBallot => Ok(Self::ScpBallot(Box::new(ScpBallot::arbitrary(u)?))),
65983            TypeVariant::ScpStatementType => Ok(Self::ScpStatementType(Box::new(
65984                ScpStatementType::arbitrary(u)?,
65985            ))),
65986            TypeVariant::ScpNomination => {
65987                Ok(Self::ScpNomination(Box::new(ScpNomination::arbitrary(u)?)))
65988            }
65989            TypeVariant::ScpStatement => {
65990                Ok(Self::ScpStatement(Box::new(ScpStatement::arbitrary(u)?)))
65991            }
65992            TypeVariant::ScpStatementPledges => Ok(Self::ScpStatementPledges(Box::new(
65993                ScpStatementPledges::arbitrary(u)?,
65994            ))),
65995            TypeVariant::ScpStatementPrepare => Ok(Self::ScpStatementPrepare(Box::new(
65996                ScpStatementPrepare::arbitrary(u)?,
65997            ))),
65998            TypeVariant::ScpStatementConfirm => Ok(Self::ScpStatementConfirm(Box::new(
65999                ScpStatementConfirm::arbitrary(u)?,
66000            ))),
66001            TypeVariant::ScpStatementExternalize => Ok(Self::ScpStatementExternalize(Box::new(
66002                ScpStatementExternalize::arbitrary(u)?,
66003            ))),
66004            TypeVariant::ScpEnvelope => Ok(Self::ScpEnvelope(Box::new(ScpEnvelope::arbitrary(u)?))),
66005            TypeVariant::ScpQuorumSet => {
66006                Ok(Self::ScpQuorumSet(Box::new(ScpQuorumSet::arbitrary(u)?)))
66007            }
66008            TypeVariant::ConfigSettingContractExecutionLanesV0 => {
66009                Ok(Self::ConfigSettingContractExecutionLanesV0(Box::new(
66010                    ConfigSettingContractExecutionLanesV0::arbitrary(u)?,
66011                )))
66012            }
66013            TypeVariant::ConfigSettingContractComputeV0 => {
66014                Ok(Self::ConfigSettingContractComputeV0(Box::new(
66015                    ConfigSettingContractComputeV0::arbitrary(u)?,
66016                )))
66017            }
66018            TypeVariant::ConfigSettingContractParallelComputeV0 => {
66019                Ok(Self::ConfigSettingContractParallelComputeV0(Box::new(
66020                    ConfigSettingContractParallelComputeV0::arbitrary(u)?,
66021                )))
66022            }
66023            TypeVariant::ConfigSettingContractLedgerCostV0 => {
66024                Ok(Self::ConfigSettingContractLedgerCostV0(Box::new(
66025                    ConfigSettingContractLedgerCostV0::arbitrary(u)?,
66026                )))
66027            }
66028            TypeVariant::ConfigSettingContractLedgerCostExtV0 => {
66029                Ok(Self::ConfigSettingContractLedgerCostExtV0(Box::new(
66030                    ConfigSettingContractLedgerCostExtV0::arbitrary(u)?,
66031                )))
66032            }
66033            TypeVariant::ConfigSettingContractHistoricalDataV0 => {
66034                Ok(Self::ConfigSettingContractHistoricalDataV0(Box::new(
66035                    ConfigSettingContractHistoricalDataV0::arbitrary(u)?,
66036                )))
66037            }
66038            TypeVariant::ConfigSettingContractEventsV0 => Ok(Self::ConfigSettingContractEventsV0(
66039                Box::new(ConfigSettingContractEventsV0::arbitrary(u)?),
66040            )),
66041            TypeVariant::ConfigSettingContractBandwidthV0 => {
66042                Ok(Self::ConfigSettingContractBandwidthV0(Box::new(
66043                    ConfigSettingContractBandwidthV0::arbitrary(u)?,
66044                )))
66045            }
66046            TypeVariant::ContractCostType => Ok(Self::ContractCostType(Box::new(
66047                ContractCostType::arbitrary(u)?,
66048            ))),
66049            TypeVariant::ContractCostParamEntry => Ok(Self::ContractCostParamEntry(Box::new(
66050                ContractCostParamEntry::arbitrary(u)?,
66051            ))),
66052            TypeVariant::StateArchivalSettings => Ok(Self::StateArchivalSettings(Box::new(
66053                StateArchivalSettings::arbitrary(u)?,
66054            ))),
66055            TypeVariant::EvictionIterator => Ok(Self::EvictionIterator(Box::new(
66056                EvictionIterator::arbitrary(u)?,
66057            ))),
66058            TypeVariant::ConfigSettingScpTiming => Ok(Self::ConfigSettingScpTiming(Box::new(
66059                ConfigSettingScpTiming::arbitrary(u)?,
66060            ))),
66061            TypeVariant::ContractCostParams => Ok(Self::ContractCostParams(Box::new(
66062                ContractCostParams::arbitrary(u)?,
66063            ))),
66064            TypeVariant::ConfigSettingId => Ok(Self::ConfigSettingId(Box::new(
66065                ConfigSettingId::arbitrary(u)?,
66066            ))),
66067            TypeVariant::ConfigSettingEntry => Ok(Self::ConfigSettingEntry(Box::new(
66068                ConfigSettingEntry::arbitrary(u)?,
66069            ))),
66070            TypeVariant::ScEnvMetaKind => {
66071                Ok(Self::ScEnvMetaKind(Box::new(ScEnvMetaKind::arbitrary(u)?)))
66072            }
66073            TypeVariant::ScEnvMetaEntry => Ok(Self::ScEnvMetaEntry(Box::new(
66074                ScEnvMetaEntry::arbitrary(u)?,
66075            ))),
66076            TypeVariant::ScEnvMetaEntryInterfaceVersion => {
66077                Ok(Self::ScEnvMetaEntryInterfaceVersion(Box::new(
66078                    ScEnvMetaEntryInterfaceVersion::arbitrary(u)?,
66079                )))
66080            }
66081            TypeVariant::ScMetaV0 => Ok(Self::ScMetaV0(Box::new(ScMetaV0::arbitrary(u)?))),
66082            TypeVariant::ScMetaKind => Ok(Self::ScMetaKind(Box::new(ScMetaKind::arbitrary(u)?))),
66083            TypeVariant::ScMetaEntry => Ok(Self::ScMetaEntry(Box::new(ScMetaEntry::arbitrary(u)?))),
66084            TypeVariant::ScSpecType => Ok(Self::ScSpecType(Box::new(ScSpecType::arbitrary(u)?))),
66085            TypeVariant::ScSpecTypeOption => Ok(Self::ScSpecTypeOption(Box::new(
66086                ScSpecTypeOption::arbitrary(u)?,
66087            ))),
66088            TypeVariant::ScSpecTypeResult => Ok(Self::ScSpecTypeResult(Box::new(
66089                ScSpecTypeResult::arbitrary(u)?,
66090            ))),
66091            TypeVariant::ScSpecTypeVec => {
66092                Ok(Self::ScSpecTypeVec(Box::new(ScSpecTypeVec::arbitrary(u)?)))
66093            }
66094            TypeVariant::ScSpecTypeMap => {
66095                Ok(Self::ScSpecTypeMap(Box::new(ScSpecTypeMap::arbitrary(u)?)))
66096            }
66097            TypeVariant::ScSpecTypeTuple => Ok(Self::ScSpecTypeTuple(Box::new(
66098                ScSpecTypeTuple::arbitrary(u)?,
66099            ))),
66100            TypeVariant::ScSpecTypeBytesN => Ok(Self::ScSpecTypeBytesN(Box::new(
66101                ScSpecTypeBytesN::arbitrary(u)?,
66102            ))),
66103            TypeVariant::ScSpecTypeUdt => {
66104                Ok(Self::ScSpecTypeUdt(Box::new(ScSpecTypeUdt::arbitrary(u)?)))
66105            }
66106            TypeVariant::ScSpecTypeDef => {
66107                Ok(Self::ScSpecTypeDef(Box::new(ScSpecTypeDef::arbitrary(u)?)))
66108            }
66109            TypeVariant::ScSpecUdtStructFieldV0 => Ok(Self::ScSpecUdtStructFieldV0(Box::new(
66110                ScSpecUdtStructFieldV0::arbitrary(u)?,
66111            ))),
66112            TypeVariant::ScSpecUdtStructV0 => Ok(Self::ScSpecUdtStructV0(Box::new(
66113                ScSpecUdtStructV0::arbitrary(u)?,
66114            ))),
66115            TypeVariant::ScSpecUdtUnionCaseVoidV0 => Ok(Self::ScSpecUdtUnionCaseVoidV0(Box::new(
66116                ScSpecUdtUnionCaseVoidV0::arbitrary(u)?,
66117            ))),
66118            TypeVariant::ScSpecUdtUnionCaseTupleV0 => Ok(Self::ScSpecUdtUnionCaseTupleV0(
66119                Box::new(ScSpecUdtUnionCaseTupleV0::arbitrary(u)?),
66120            )),
66121            TypeVariant::ScSpecUdtUnionCaseV0Kind => Ok(Self::ScSpecUdtUnionCaseV0Kind(Box::new(
66122                ScSpecUdtUnionCaseV0Kind::arbitrary(u)?,
66123            ))),
66124            TypeVariant::ScSpecUdtUnionCaseV0 => Ok(Self::ScSpecUdtUnionCaseV0(Box::new(
66125                ScSpecUdtUnionCaseV0::arbitrary(u)?,
66126            ))),
66127            TypeVariant::ScSpecUdtUnionV0 => Ok(Self::ScSpecUdtUnionV0(Box::new(
66128                ScSpecUdtUnionV0::arbitrary(u)?,
66129            ))),
66130            TypeVariant::ScSpecUdtEnumCaseV0 => Ok(Self::ScSpecUdtEnumCaseV0(Box::new(
66131                ScSpecUdtEnumCaseV0::arbitrary(u)?,
66132            ))),
66133            TypeVariant::ScSpecUdtEnumV0 => Ok(Self::ScSpecUdtEnumV0(Box::new(
66134                ScSpecUdtEnumV0::arbitrary(u)?,
66135            ))),
66136            TypeVariant::ScSpecUdtErrorEnumCaseV0 => Ok(Self::ScSpecUdtErrorEnumCaseV0(Box::new(
66137                ScSpecUdtErrorEnumCaseV0::arbitrary(u)?,
66138            ))),
66139            TypeVariant::ScSpecUdtErrorEnumV0 => Ok(Self::ScSpecUdtErrorEnumV0(Box::new(
66140                ScSpecUdtErrorEnumV0::arbitrary(u)?,
66141            ))),
66142            TypeVariant::ScSpecFunctionInputV0 => Ok(Self::ScSpecFunctionInputV0(Box::new(
66143                ScSpecFunctionInputV0::arbitrary(u)?,
66144            ))),
66145            TypeVariant::ScSpecFunctionV0 => Ok(Self::ScSpecFunctionV0(Box::new(
66146                ScSpecFunctionV0::arbitrary(u)?,
66147            ))),
66148            TypeVariant::ScSpecEventParamLocationV0 => Ok(Self::ScSpecEventParamLocationV0(
66149                Box::new(ScSpecEventParamLocationV0::arbitrary(u)?),
66150            )),
66151            TypeVariant::ScSpecEventParamV0 => Ok(Self::ScSpecEventParamV0(Box::new(
66152                ScSpecEventParamV0::arbitrary(u)?,
66153            ))),
66154            TypeVariant::ScSpecEventDataFormat => Ok(Self::ScSpecEventDataFormat(Box::new(
66155                ScSpecEventDataFormat::arbitrary(u)?,
66156            ))),
66157            TypeVariant::ScSpecEventV0 => {
66158                Ok(Self::ScSpecEventV0(Box::new(ScSpecEventV0::arbitrary(u)?)))
66159            }
66160            TypeVariant::ScSpecEntryKind => Ok(Self::ScSpecEntryKind(Box::new(
66161                ScSpecEntryKind::arbitrary(u)?,
66162            ))),
66163            TypeVariant::ScSpecEntry => Ok(Self::ScSpecEntry(Box::new(ScSpecEntry::arbitrary(u)?))),
66164            TypeVariant::ScValType => Ok(Self::ScValType(Box::new(ScValType::arbitrary(u)?))),
66165            TypeVariant::ScErrorType => Ok(Self::ScErrorType(Box::new(ScErrorType::arbitrary(u)?))),
66166            TypeVariant::ScErrorCode => Ok(Self::ScErrorCode(Box::new(ScErrorCode::arbitrary(u)?))),
66167            TypeVariant::ScError => Ok(Self::ScError(Box::new(ScError::arbitrary(u)?))),
66168            TypeVariant::UInt128Parts => {
66169                Ok(Self::UInt128Parts(Box::new(UInt128Parts::arbitrary(u)?)))
66170            }
66171            TypeVariant::Int128Parts => Ok(Self::Int128Parts(Box::new(Int128Parts::arbitrary(u)?))),
66172            TypeVariant::UInt256Parts => {
66173                Ok(Self::UInt256Parts(Box::new(UInt256Parts::arbitrary(u)?)))
66174            }
66175            TypeVariant::Int256Parts => Ok(Self::Int256Parts(Box::new(Int256Parts::arbitrary(u)?))),
66176            TypeVariant::ContractExecutableType => Ok(Self::ContractExecutableType(Box::new(
66177                ContractExecutableType::arbitrary(u)?,
66178            ))),
66179            TypeVariant::ContractExecutable => Ok(Self::ContractExecutable(Box::new(
66180                ContractExecutable::arbitrary(u)?,
66181            ))),
66182            TypeVariant::ScAddressType => {
66183                Ok(Self::ScAddressType(Box::new(ScAddressType::arbitrary(u)?)))
66184            }
66185            TypeVariant::MuxedEd25519Account => Ok(Self::MuxedEd25519Account(Box::new(
66186                MuxedEd25519Account::arbitrary(u)?,
66187            ))),
66188            TypeVariant::ScAddress => Ok(Self::ScAddress(Box::new(ScAddress::arbitrary(u)?))),
66189            TypeVariant::ScVec => Ok(Self::ScVec(Box::new(ScVec::arbitrary(u)?))),
66190            TypeVariant::ScMap => Ok(Self::ScMap(Box::new(ScMap::arbitrary(u)?))),
66191            TypeVariant::ScBytes => Ok(Self::ScBytes(Box::new(ScBytes::arbitrary(u)?))),
66192            TypeVariant::ScString => Ok(Self::ScString(Box::new(ScString::arbitrary(u)?))),
66193            TypeVariant::ScSymbol => Ok(Self::ScSymbol(Box::new(ScSymbol::arbitrary(u)?))),
66194            TypeVariant::ScNonceKey => Ok(Self::ScNonceKey(Box::new(ScNonceKey::arbitrary(u)?))),
66195            TypeVariant::ScContractInstance => Ok(Self::ScContractInstance(Box::new(
66196                ScContractInstance::arbitrary(u)?,
66197            ))),
66198            TypeVariant::ScVal => Ok(Self::ScVal(Box::new(ScVal::arbitrary(u)?))),
66199            TypeVariant::ScMapEntry => Ok(Self::ScMapEntry(Box::new(ScMapEntry::arbitrary(u)?))),
66200            TypeVariant::LedgerCloseMetaBatch => Ok(Self::LedgerCloseMetaBatch(Box::new(
66201                LedgerCloseMetaBatch::arbitrary(u)?,
66202            ))),
66203            TypeVariant::StoredTransactionSet => Ok(Self::StoredTransactionSet(Box::new(
66204                StoredTransactionSet::arbitrary(u)?,
66205            ))),
66206            TypeVariant::StoredDebugTransactionSet => Ok(Self::StoredDebugTransactionSet(
66207                Box::new(StoredDebugTransactionSet::arbitrary(u)?),
66208            )),
66209            TypeVariant::PersistedScpStateV0 => Ok(Self::PersistedScpStateV0(Box::new(
66210                PersistedScpStateV0::arbitrary(u)?,
66211            ))),
66212            TypeVariant::PersistedScpStateV1 => Ok(Self::PersistedScpStateV1(Box::new(
66213                PersistedScpStateV1::arbitrary(u)?,
66214            ))),
66215            TypeVariant::PersistedScpState => Ok(Self::PersistedScpState(Box::new(
66216                PersistedScpState::arbitrary(u)?,
66217            ))),
66218            TypeVariant::Thresholds => Ok(Self::Thresholds(Box::new(Thresholds::arbitrary(u)?))),
66219            TypeVariant::String32 => Ok(Self::String32(Box::new(String32::arbitrary(u)?))),
66220            TypeVariant::String64 => Ok(Self::String64(Box::new(String64::arbitrary(u)?))),
66221            TypeVariant::SequenceNumber => Ok(Self::SequenceNumber(Box::new(
66222                SequenceNumber::arbitrary(u)?,
66223            ))),
66224            TypeVariant::DataValue => Ok(Self::DataValue(Box::new(DataValue::arbitrary(u)?))),
66225            TypeVariant::AssetCode4 => Ok(Self::AssetCode4(Box::new(AssetCode4::arbitrary(u)?))),
66226            TypeVariant::AssetCode12 => Ok(Self::AssetCode12(Box::new(AssetCode12::arbitrary(u)?))),
66227            TypeVariant::AssetType => Ok(Self::AssetType(Box::new(AssetType::arbitrary(u)?))),
66228            TypeVariant::AssetCode => Ok(Self::AssetCode(Box::new(AssetCode::arbitrary(u)?))),
66229            TypeVariant::AlphaNum4 => Ok(Self::AlphaNum4(Box::new(AlphaNum4::arbitrary(u)?))),
66230            TypeVariant::AlphaNum12 => Ok(Self::AlphaNum12(Box::new(AlphaNum12::arbitrary(u)?))),
66231            TypeVariant::Asset => Ok(Self::Asset(Box::new(Asset::arbitrary(u)?))),
66232            TypeVariant::Price => Ok(Self::Price(Box::new(Price::arbitrary(u)?))),
66233            TypeVariant::Liabilities => Ok(Self::Liabilities(Box::new(Liabilities::arbitrary(u)?))),
66234            TypeVariant::ThresholdIndexes => Ok(Self::ThresholdIndexes(Box::new(
66235                ThresholdIndexes::arbitrary(u)?,
66236            ))),
66237            TypeVariant::LedgerEntryType => Ok(Self::LedgerEntryType(Box::new(
66238                LedgerEntryType::arbitrary(u)?,
66239            ))),
66240            TypeVariant::Signer => Ok(Self::Signer(Box::new(Signer::arbitrary(u)?))),
66241            TypeVariant::AccountFlags => {
66242                Ok(Self::AccountFlags(Box::new(AccountFlags::arbitrary(u)?)))
66243            }
66244            TypeVariant::SponsorshipDescriptor => Ok(Self::SponsorshipDescriptor(Box::new(
66245                SponsorshipDescriptor::arbitrary(u)?,
66246            ))),
66247            TypeVariant::AccountEntryExtensionV3 => Ok(Self::AccountEntryExtensionV3(Box::new(
66248                AccountEntryExtensionV3::arbitrary(u)?,
66249            ))),
66250            TypeVariant::AccountEntryExtensionV2 => Ok(Self::AccountEntryExtensionV2(Box::new(
66251                AccountEntryExtensionV2::arbitrary(u)?,
66252            ))),
66253            TypeVariant::AccountEntryExtensionV2Ext => Ok(Self::AccountEntryExtensionV2Ext(
66254                Box::new(AccountEntryExtensionV2Ext::arbitrary(u)?),
66255            )),
66256            TypeVariant::AccountEntryExtensionV1 => Ok(Self::AccountEntryExtensionV1(Box::new(
66257                AccountEntryExtensionV1::arbitrary(u)?,
66258            ))),
66259            TypeVariant::AccountEntryExtensionV1Ext => Ok(Self::AccountEntryExtensionV1Ext(
66260                Box::new(AccountEntryExtensionV1Ext::arbitrary(u)?),
66261            )),
66262            TypeVariant::AccountEntry => {
66263                Ok(Self::AccountEntry(Box::new(AccountEntry::arbitrary(u)?)))
66264            }
66265            TypeVariant::AccountEntryExt => Ok(Self::AccountEntryExt(Box::new(
66266                AccountEntryExt::arbitrary(u)?,
66267            ))),
66268            TypeVariant::TrustLineFlags => Ok(Self::TrustLineFlags(Box::new(
66269                TrustLineFlags::arbitrary(u)?,
66270            ))),
66271            TypeVariant::LiquidityPoolType => Ok(Self::LiquidityPoolType(Box::new(
66272                LiquidityPoolType::arbitrary(u)?,
66273            ))),
66274            TypeVariant::TrustLineAsset => Ok(Self::TrustLineAsset(Box::new(
66275                TrustLineAsset::arbitrary(u)?,
66276            ))),
66277            TypeVariant::TrustLineEntryExtensionV2 => Ok(Self::TrustLineEntryExtensionV2(
66278                Box::new(TrustLineEntryExtensionV2::arbitrary(u)?),
66279            )),
66280            TypeVariant::TrustLineEntryExtensionV2Ext => Ok(Self::TrustLineEntryExtensionV2Ext(
66281                Box::new(TrustLineEntryExtensionV2Ext::arbitrary(u)?),
66282            )),
66283            TypeVariant::TrustLineEntry => Ok(Self::TrustLineEntry(Box::new(
66284                TrustLineEntry::arbitrary(u)?,
66285            ))),
66286            TypeVariant::TrustLineEntryExt => Ok(Self::TrustLineEntryExt(Box::new(
66287                TrustLineEntryExt::arbitrary(u)?,
66288            ))),
66289            TypeVariant::TrustLineEntryV1 => Ok(Self::TrustLineEntryV1(Box::new(
66290                TrustLineEntryV1::arbitrary(u)?,
66291            ))),
66292            TypeVariant::TrustLineEntryV1Ext => Ok(Self::TrustLineEntryV1Ext(Box::new(
66293                TrustLineEntryV1Ext::arbitrary(u)?,
66294            ))),
66295            TypeVariant::OfferEntryFlags => Ok(Self::OfferEntryFlags(Box::new(
66296                OfferEntryFlags::arbitrary(u)?,
66297            ))),
66298            TypeVariant::OfferEntry => Ok(Self::OfferEntry(Box::new(OfferEntry::arbitrary(u)?))),
66299            TypeVariant::OfferEntryExt => {
66300                Ok(Self::OfferEntryExt(Box::new(OfferEntryExt::arbitrary(u)?)))
66301            }
66302            TypeVariant::DataEntry => Ok(Self::DataEntry(Box::new(DataEntry::arbitrary(u)?))),
66303            TypeVariant::DataEntryExt => {
66304                Ok(Self::DataEntryExt(Box::new(DataEntryExt::arbitrary(u)?)))
66305            }
66306            TypeVariant::ClaimPredicateType => Ok(Self::ClaimPredicateType(Box::new(
66307                ClaimPredicateType::arbitrary(u)?,
66308            ))),
66309            TypeVariant::ClaimPredicate => Ok(Self::ClaimPredicate(Box::new(
66310                ClaimPredicate::arbitrary(u)?,
66311            ))),
66312            TypeVariant::ClaimantType => {
66313                Ok(Self::ClaimantType(Box::new(ClaimantType::arbitrary(u)?)))
66314            }
66315            TypeVariant::Claimant => Ok(Self::Claimant(Box::new(Claimant::arbitrary(u)?))),
66316            TypeVariant::ClaimantV0 => Ok(Self::ClaimantV0(Box::new(ClaimantV0::arbitrary(u)?))),
66317            TypeVariant::ClaimableBalanceFlags => Ok(Self::ClaimableBalanceFlags(Box::new(
66318                ClaimableBalanceFlags::arbitrary(u)?,
66319            ))),
66320            TypeVariant::ClaimableBalanceEntryExtensionV1 => {
66321                Ok(Self::ClaimableBalanceEntryExtensionV1(Box::new(
66322                    ClaimableBalanceEntryExtensionV1::arbitrary(u)?,
66323                )))
66324            }
66325            TypeVariant::ClaimableBalanceEntryExtensionV1Ext => {
66326                Ok(Self::ClaimableBalanceEntryExtensionV1Ext(Box::new(
66327                    ClaimableBalanceEntryExtensionV1Ext::arbitrary(u)?,
66328                )))
66329            }
66330            TypeVariant::ClaimableBalanceEntry => Ok(Self::ClaimableBalanceEntry(Box::new(
66331                ClaimableBalanceEntry::arbitrary(u)?,
66332            ))),
66333            TypeVariant::ClaimableBalanceEntryExt => Ok(Self::ClaimableBalanceEntryExt(Box::new(
66334                ClaimableBalanceEntryExt::arbitrary(u)?,
66335            ))),
66336            TypeVariant::LiquidityPoolConstantProductParameters => {
66337                Ok(Self::LiquidityPoolConstantProductParameters(Box::new(
66338                    LiquidityPoolConstantProductParameters::arbitrary(u)?,
66339                )))
66340            }
66341            TypeVariant::LiquidityPoolEntry => Ok(Self::LiquidityPoolEntry(Box::new(
66342                LiquidityPoolEntry::arbitrary(u)?,
66343            ))),
66344            TypeVariant::LiquidityPoolEntryBody => Ok(Self::LiquidityPoolEntryBody(Box::new(
66345                LiquidityPoolEntryBody::arbitrary(u)?,
66346            ))),
66347            TypeVariant::LiquidityPoolEntryConstantProduct => {
66348                Ok(Self::LiquidityPoolEntryConstantProduct(Box::new(
66349                    LiquidityPoolEntryConstantProduct::arbitrary(u)?,
66350                )))
66351            }
66352            TypeVariant::ContractDataDurability => Ok(Self::ContractDataDurability(Box::new(
66353                ContractDataDurability::arbitrary(u)?,
66354            ))),
66355            TypeVariant::ContractDataEntry => Ok(Self::ContractDataEntry(Box::new(
66356                ContractDataEntry::arbitrary(u)?,
66357            ))),
66358            TypeVariant::ContractCodeCostInputs => Ok(Self::ContractCodeCostInputs(Box::new(
66359                ContractCodeCostInputs::arbitrary(u)?,
66360            ))),
66361            TypeVariant::ContractCodeEntry => Ok(Self::ContractCodeEntry(Box::new(
66362                ContractCodeEntry::arbitrary(u)?,
66363            ))),
66364            TypeVariant::ContractCodeEntryExt => Ok(Self::ContractCodeEntryExt(Box::new(
66365                ContractCodeEntryExt::arbitrary(u)?,
66366            ))),
66367            TypeVariant::ContractCodeEntryV1 => Ok(Self::ContractCodeEntryV1(Box::new(
66368                ContractCodeEntryV1::arbitrary(u)?,
66369            ))),
66370            TypeVariant::TtlEntry => Ok(Self::TtlEntry(Box::new(TtlEntry::arbitrary(u)?))),
66371            TypeVariant::LedgerEntryExtensionV1 => Ok(Self::LedgerEntryExtensionV1(Box::new(
66372                LedgerEntryExtensionV1::arbitrary(u)?,
66373            ))),
66374            TypeVariant::LedgerEntryExtensionV1Ext => Ok(Self::LedgerEntryExtensionV1Ext(
66375                Box::new(LedgerEntryExtensionV1Ext::arbitrary(u)?),
66376            )),
66377            TypeVariant::LedgerEntry => Ok(Self::LedgerEntry(Box::new(LedgerEntry::arbitrary(u)?))),
66378            TypeVariant::LedgerEntryData => Ok(Self::LedgerEntryData(Box::new(
66379                LedgerEntryData::arbitrary(u)?,
66380            ))),
66381            TypeVariant::LedgerEntryExt => Ok(Self::LedgerEntryExt(Box::new(
66382                LedgerEntryExt::arbitrary(u)?,
66383            ))),
66384            TypeVariant::LedgerKey => Ok(Self::LedgerKey(Box::new(LedgerKey::arbitrary(u)?))),
66385            TypeVariant::LedgerKeyAccount => Ok(Self::LedgerKeyAccount(Box::new(
66386                LedgerKeyAccount::arbitrary(u)?,
66387            ))),
66388            TypeVariant::LedgerKeyTrustLine => Ok(Self::LedgerKeyTrustLine(Box::new(
66389                LedgerKeyTrustLine::arbitrary(u)?,
66390            ))),
66391            TypeVariant::LedgerKeyOffer => Ok(Self::LedgerKeyOffer(Box::new(
66392                LedgerKeyOffer::arbitrary(u)?,
66393            ))),
66394            TypeVariant::LedgerKeyData => {
66395                Ok(Self::LedgerKeyData(Box::new(LedgerKeyData::arbitrary(u)?)))
66396            }
66397            TypeVariant::LedgerKeyClaimableBalance => Ok(Self::LedgerKeyClaimableBalance(
66398                Box::new(LedgerKeyClaimableBalance::arbitrary(u)?),
66399            )),
66400            TypeVariant::LedgerKeyLiquidityPool => Ok(Self::LedgerKeyLiquidityPool(Box::new(
66401                LedgerKeyLiquidityPool::arbitrary(u)?,
66402            ))),
66403            TypeVariant::LedgerKeyContractData => Ok(Self::LedgerKeyContractData(Box::new(
66404                LedgerKeyContractData::arbitrary(u)?,
66405            ))),
66406            TypeVariant::LedgerKeyContractCode => Ok(Self::LedgerKeyContractCode(Box::new(
66407                LedgerKeyContractCode::arbitrary(u)?,
66408            ))),
66409            TypeVariant::LedgerKeyConfigSetting => Ok(Self::LedgerKeyConfigSetting(Box::new(
66410                LedgerKeyConfigSetting::arbitrary(u)?,
66411            ))),
66412            TypeVariant::LedgerKeyTtl => {
66413                Ok(Self::LedgerKeyTtl(Box::new(LedgerKeyTtl::arbitrary(u)?)))
66414            }
66415            TypeVariant::EnvelopeType => {
66416                Ok(Self::EnvelopeType(Box::new(EnvelopeType::arbitrary(u)?)))
66417            }
66418            TypeVariant::BucketListType => Ok(Self::BucketListType(Box::new(
66419                BucketListType::arbitrary(u)?,
66420            ))),
66421            TypeVariant::BucketEntryType => Ok(Self::BucketEntryType(Box::new(
66422                BucketEntryType::arbitrary(u)?,
66423            ))),
66424            TypeVariant::HotArchiveBucketEntryType => Ok(Self::HotArchiveBucketEntryType(
66425                Box::new(HotArchiveBucketEntryType::arbitrary(u)?),
66426            )),
66427            TypeVariant::BucketMetadata => Ok(Self::BucketMetadata(Box::new(
66428                BucketMetadata::arbitrary(u)?,
66429            ))),
66430            TypeVariant::BucketMetadataExt => Ok(Self::BucketMetadataExt(Box::new(
66431                BucketMetadataExt::arbitrary(u)?,
66432            ))),
66433            TypeVariant::BucketEntry => Ok(Self::BucketEntry(Box::new(BucketEntry::arbitrary(u)?))),
66434            TypeVariant::HotArchiveBucketEntry => Ok(Self::HotArchiveBucketEntry(Box::new(
66435                HotArchiveBucketEntry::arbitrary(u)?,
66436            ))),
66437            TypeVariant::UpgradeType => Ok(Self::UpgradeType(Box::new(UpgradeType::arbitrary(u)?))),
66438            TypeVariant::StellarValueType => Ok(Self::StellarValueType(Box::new(
66439                StellarValueType::arbitrary(u)?,
66440            ))),
66441            TypeVariant::LedgerCloseValueSignature => Ok(Self::LedgerCloseValueSignature(
66442                Box::new(LedgerCloseValueSignature::arbitrary(u)?),
66443            )),
66444            TypeVariant::StellarValue => {
66445                Ok(Self::StellarValue(Box::new(StellarValue::arbitrary(u)?)))
66446            }
66447            TypeVariant::StellarValueExt => Ok(Self::StellarValueExt(Box::new(
66448                StellarValueExt::arbitrary(u)?,
66449            ))),
66450            TypeVariant::LedgerHeaderFlags => Ok(Self::LedgerHeaderFlags(Box::new(
66451                LedgerHeaderFlags::arbitrary(u)?,
66452            ))),
66453            TypeVariant::LedgerHeaderExtensionV1 => Ok(Self::LedgerHeaderExtensionV1(Box::new(
66454                LedgerHeaderExtensionV1::arbitrary(u)?,
66455            ))),
66456            TypeVariant::LedgerHeaderExtensionV1Ext => Ok(Self::LedgerHeaderExtensionV1Ext(
66457                Box::new(LedgerHeaderExtensionV1Ext::arbitrary(u)?),
66458            )),
66459            TypeVariant::LedgerHeader => {
66460                Ok(Self::LedgerHeader(Box::new(LedgerHeader::arbitrary(u)?)))
66461            }
66462            TypeVariant::LedgerHeaderExt => Ok(Self::LedgerHeaderExt(Box::new(
66463                LedgerHeaderExt::arbitrary(u)?,
66464            ))),
66465            TypeVariant::LedgerUpgradeType => Ok(Self::LedgerUpgradeType(Box::new(
66466                LedgerUpgradeType::arbitrary(u)?,
66467            ))),
66468            TypeVariant::ConfigUpgradeSetKey => Ok(Self::ConfigUpgradeSetKey(Box::new(
66469                ConfigUpgradeSetKey::arbitrary(u)?,
66470            ))),
66471            TypeVariant::LedgerUpgrade => {
66472                Ok(Self::LedgerUpgrade(Box::new(LedgerUpgrade::arbitrary(u)?)))
66473            }
66474            TypeVariant::ConfigUpgradeSet => Ok(Self::ConfigUpgradeSet(Box::new(
66475                ConfigUpgradeSet::arbitrary(u)?,
66476            ))),
66477            TypeVariant::TxSetComponentType => Ok(Self::TxSetComponentType(Box::new(
66478                TxSetComponentType::arbitrary(u)?,
66479            ))),
66480            TypeVariant::DependentTxCluster => Ok(Self::DependentTxCluster(Box::new(
66481                DependentTxCluster::arbitrary(u)?,
66482            ))),
66483            TypeVariant::ParallelTxExecutionStage => Ok(Self::ParallelTxExecutionStage(Box::new(
66484                ParallelTxExecutionStage::arbitrary(u)?,
66485            ))),
66486            TypeVariant::ParallelTxsComponent => Ok(Self::ParallelTxsComponent(Box::new(
66487                ParallelTxsComponent::arbitrary(u)?,
66488            ))),
66489            TypeVariant::TxSetComponent => Ok(Self::TxSetComponent(Box::new(
66490                TxSetComponent::arbitrary(u)?,
66491            ))),
66492            TypeVariant::TxSetComponentTxsMaybeDiscountedFee => {
66493                Ok(Self::TxSetComponentTxsMaybeDiscountedFee(Box::new(
66494                    TxSetComponentTxsMaybeDiscountedFee::arbitrary(u)?,
66495                )))
66496            }
66497            TypeVariant::TransactionPhase => Ok(Self::TransactionPhase(Box::new(
66498                TransactionPhase::arbitrary(u)?,
66499            ))),
66500            TypeVariant::TransactionSet => Ok(Self::TransactionSet(Box::new(
66501                TransactionSet::arbitrary(u)?,
66502            ))),
66503            TypeVariant::TransactionSetV1 => Ok(Self::TransactionSetV1(Box::new(
66504                TransactionSetV1::arbitrary(u)?,
66505            ))),
66506            TypeVariant::GeneralizedTransactionSet => Ok(Self::GeneralizedTransactionSet(
66507                Box::new(GeneralizedTransactionSet::arbitrary(u)?),
66508            )),
66509            TypeVariant::TransactionResultPair => Ok(Self::TransactionResultPair(Box::new(
66510                TransactionResultPair::arbitrary(u)?,
66511            ))),
66512            TypeVariant::TransactionResultSet => Ok(Self::TransactionResultSet(Box::new(
66513                TransactionResultSet::arbitrary(u)?,
66514            ))),
66515            TypeVariant::TransactionHistoryEntry => Ok(Self::TransactionHistoryEntry(Box::new(
66516                TransactionHistoryEntry::arbitrary(u)?,
66517            ))),
66518            TypeVariant::TransactionHistoryEntryExt => Ok(Self::TransactionHistoryEntryExt(
66519                Box::new(TransactionHistoryEntryExt::arbitrary(u)?),
66520            )),
66521            TypeVariant::TransactionHistoryResultEntry => Ok(Self::TransactionHistoryResultEntry(
66522                Box::new(TransactionHistoryResultEntry::arbitrary(u)?),
66523            )),
66524            TypeVariant::TransactionHistoryResultEntryExt => {
66525                Ok(Self::TransactionHistoryResultEntryExt(Box::new(
66526                    TransactionHistoryResultEntryExt::arbitrary(u)?,
66527                )))
66528            }
66529            TypeVariant::LedgerHeaderHistoryEntry => Ok(Self::LedgerHeaderHistoryEntry(Box::new(
66530                LedgerHeaderHistoryEntry::arbitrary(u)?,
66531            ))),
66532            TypeVariant::LedgerHeaderHistoryEntryExt => Ok(Self::LedgerHeaderHistoryEntryExt(
66533                Box::new(LedgerHeaderHistoryEntryExt::arbitrary(u)?),
66534            )),
66535            TypeVariant::LedgerScpMessages => Ok(Self::LedgerScpMessages(Box::new(
66536                LedgerScpMessages::arbitrary(u)?,
66537            ))),
66538            TypeVariant::ScpHistoryEntryV0 => Ok(Self::ScpHistoryEntryV0(Box::new(
66539                ScpHistoryEntryV0::arbitrary(u)?,
66540            ))),
66541            TypeVariant::ScpHistoryEntry => Ok(Self::ScpHistoryEntry(Box::new(
66542                ScpHistoryEntry::arbitrary(u)?,
66543            ))),
66544            TypeVariant::LedgerEntryChangeType => Ok(Self::LedgerEntryChangeType(Box::new(
66545                LedgerEntryChangeType::arbitrary(u)?,
66546            ))),
66547            TypeVariant::LedgerEntryChange => Ok(Self::LedgerEntryChange(Box::new(
66548                LedgerEntryChange::arbitrary(u)?,
66549            ))),
66550            TypeVariant::LedgerEntryChanges => Ok(Self::LedgerEntryChanges(Box::new(
66551                LedgerEntryChanges::arbitrary(u)?,
66552            ))),
66553            TypeVariant::OperationMeta => {
66554                Ok(Self::OperationMeta(Box::new(OperationMeta::arbitrary(u)?)))
66555            }
66556            TypeVariant::TransactionMetaV1 => Ok(Self::TransactionMetaV1(Box::new(
66557                TransactionMetaV1::arbitrary(u)?,
66558            ))),
66559            TypeVariant::TransactionMetaV2 => Ok(Self::TransactionMetaV2(Box::new(
66560                TransactionMetaV2::arbitrary(u)?,
66561            ))),
66562            TypeVariant::ContractEventType => Ok(Self::ContractEventType(Box::new(
66563                ContractEventType::arbitrary(u)?,
66564            ))),
66565            TypeVariant::ContractEvent => {
66566                Ok(Self::ContractEvent(Box::new(ContractEvent::arbitrary(u)?)))
66567            }
66568            TypeVariant::ContractEventBody => Ok(Self::ContractEventBody(Box::new(
66569                ContractEventBody::arbitrary(u)?,
66570            ))),
66571            TypeVariant::ContractEventV0 => Ok(Self::ContractEventV0(Box::new(
66572                ContractEventV0::arbitrary(u)?,
66573            ))),
66574            TypeVariant::DiagnosticEvent => Ok(Self::DiagnosticEvent(Box::new(
66575                DiagnosticEvent::arbitrary(u)?,
66576            ))),
66577            TypeVariant::SorobanTransactionMetaExtV1 => Ok(Self::SorobanTransactionMetaExtV1(
66578                Box::new(SorobanTransactionMetaExtV1::arbitrary(u)?),
66579            )),
66580            TypeVariant::SorobanTransactionMetaExt => Ok(Self::SorobanTransactionMetaExt(
66581                Box::new(SorobanTransactionMetaExt::arbitrary(u)?),
66582            )),
66583            TypeVariant::SorobanTransactionMeta => Ok(Self::SorobanTransactionMeta(Box::new(
66584                SorobanTransactionMeta::arbitrary(u)?,
66585            ))),
66586            TypeVariant::TransactionMetaV3 => Ok(Self::TransactionMetaV3(Box::new(
66587                TransactionMetaV3::arbitrary(u)?,
66588            ))),
66589            TypeVariant::OperationMetaV2 => Ok(Self::OperationMetaV2(Box::new(
66590                OperationMetaV2::arbitrary(u)?,
66591            ))),
66592            TypeVariant::SorobanTransactionMetaV2 => Ok(Self::SorobanTransactionMetaV2(Box::new(
66593                SorobanTransactionMetaV2::arbitrary(u)?,
66594            ))),
66595            TypeVariant::TransactionEventStage => Ok(Self::TransactionEventStage(Box::new(
66596                TransactionEventStage::arbitrary(u)?,
66597            ))),
66598            TypeVariant::TransactionEvent => Ok(Self::TransactionEvent(Box::new(
66599                TransactionEvent::arbitrary(u)?,
66600            ))),
66601            TypeVariant::TransactionMetaV4 => Ok(Self::TransactionMetaV4(Box::new(
66602                TransactionMetaV4::arbitrary(u)?,
66603            ))),
66604            TypeVariant::InvokeHostFunctionSuccessPreImage => {
66605                Ok(Self::InvokeHostFunctionSuccessPreImage(Box::new(
66606                    InvokeHostFunctionSuccessPreImage::arbitrary(u)?,
66607                )))
66608            }
66609            TypeVariant::TransactionMeta => Ok(Self::TransactionMeta(Box::new(
66610                TransactionMeta::arbitrary(u)?,
66611            ))),
66612            TypeVariant::TransactionResultMeta => Ok(Self::TransactionResultMeta(Box::new(
66613                TransactionResultMeta::arbitrary(u)?,
66614            ))),
66615            TypeVariant::TransactionResultMetaV1 => Ok(Self::TransactionResultMetaV1(Box::new(
66616                TransactionResultMetaV1::arbitrary(u)?,
66617            ))),
66618            TypeVariant::UpgradeEntryMeta => Ok(Self::UpgradeEntryMeta(Box::new(
66619                UpgradeEntryMeta::arbitrary(u)?,
66620            ))),
66621            TypeVariant::LedgerCloseMetaV0 => Ok(Self::LedgerCloseMetaV0(Box::new(
66622                LedgerCloseMetaV0::arbitrary(u)?,
66623            ))),
66624            TypeVariant::LedgerCloseMetaExtV1 => Ok(Self::LedgerCloseMetaExtV1(Box::new(
66625                LedgerCloseMetaExtV1::arbitrary(u)?,
66626            ))),
66627            TypeVariant::LedgerCloseMetaExt => Ok(Self::LedgerCloseMetaExt(Box::new(
66628                LedgerCloseMetaExt::arbitrary(u)?,
66629            ))),
66630            TypeVariant::LedgerCloseMetaV1 => Ok(Self::LedgerCloseMetaV1(Box::new(
66631                LedgerCloseMetaV1::arbitrary(u)?,
66632            ))),
66633            TypeVariant::LedgerCloseMetaV2 => Ok(Self::LedgerCloseMetaV2(Box::new(
66634                LedgerCloseMetaV2::arbitrary(u)?,
66635            ))),
66636            TypeVariant::LedgerCloseMeta => Ok(Self::LedgerCloseMeta(Box::new(
66637                LedgerCloseMeta::arbitrary(u)?,
66638            ))),
66639            TypeVariant::ErrorCode => Ok(Self::ErrorCode(Box::new(ErrorCode::arbitrary(u)?))),
66640            TypeVariant::SError => Ok(Self::SError(Box::new(SError::arbitrary(u)?))),
66641            TypeVariant::SendMore => Ok(Self::SendMore(Box::new(SendMore::arbitrary(u)?))),
66642            TypeVariant::SendMoreExtended => Ok(Self::SendMoreExtended(Box::new(
66643                SendMoreExtended::arbitrary(u)?,
66644            ))),
66645            TypeVariant::AuthCert => Ok(Self::AuthCert(Box::new(AuthCert::arbitrary(u)?))),
66646            TypeVariant::Hello => Ok(Self::Hello(Box::new(Hello::arbitrary(u)?))),
66647            TypeVariant::Auth => Ok(Self::Auth(Box::new(Auth::arbitrary(u)?))),
66648            TypeVariant::IpAddrType => Ok(Self::IpAddrType(Box::new(IpAddrType::arbitrary(u)?))),
66649            TypeVariant::PeerAddress => Ok(Self::PeerAddress(Box::new(PeerAddress::arbitrary(u)?))),
66650            TypeVariant::PeerAddressIp => {
66651                Ok(Self::PeerAddressIp(Box::new(PeerAddressIp::arbitrary(u)?)))
66652            }
66653            TypeVariant::MessageType => Ok(Self::MessageType(Box::new(MessageType::arbitrary(u)?))),
66654            TypeVariant::DontHave => Ok(Self::DontHave(Box::new(DontHave::arbitrary(u)?))),
66655            TypeVariant::SurveyMessageCommandType => Ok(Self::SurveyMessageCommandType(Box::new(
66656                SurveyMessageCommandType::arbitrary(u)?,
66657            ))),
66658            TypeVariant::SurveyMessageResponseType => Ok(Self::SurveyMessageResponseType(
66659                Box::new(SurveyMessageResponseType::arbitrary(u)?),
66660            )),
66661            TypeVariant::TimeSlicedSurveyStartCollectingMessage => {
66662                Ok(Self::TimeSlicedSurveyStartCollectingMessage(Box::new(
66663                    TimeSlicedSurveyStartCollectingMessage::arbitrary(u)?,
66664                )))
66665            }
66666            TypeVariant::SignedTimeSlicedSurveyStartCollectingMessage => {
66667                Ok(Self::SignedTimeSlicedSurveyStartCollectingMessage(
66668                    Box::new(SignedTimeSlicedSurveyStartCollectingMessage::arbitrary(u)?),
66669                ))
66670            }
66671            TypeVariant::TimeSlicedSurveyStopCollectingMessage => {
66672                Ok(Self::TimeSlicedSurveyStopCollectingMessage(Box::new(
66673                    TimeSlicedSurveyStopCollectingMessage::arbitrary(u)?,
66674                )))
66675            }
66676            TypeVariant::SignedTimeSlicedSurveyStopCollectingMessage => {
66677                Ok(Self::SignedTimeSlicedSurveyStopCollectingMessage(Box::new(
66678                    SignedTimeSlicedSurveyStopCollectingMessage::arbitrary(u)?,
66679                )))
66680            }
66681            TypeVariant::SurveyRequestMessage => Ok(Self::SurveyRequestMessage(Box::new(
66682                SurveyRequestMessage::arbitrary(u)?,
66683            ))),
66684            TypeVariant::TimeSlicedSurveyRequestMessage => {
66685                Ok(Self::TimeSlicedSurveyRequestMessage(Box::new(
66686                    TimeSlicedSurveyRequestMessage::arbitrary(u)?,
66687                )))
66688            }
66689            TypeVariant::SignedTimeSlicedSurveyRequestMessage => {
66690                Ok(Self::SignedTimeSlicedSurveyRequestMessage(Box::new(
66691                    SignedTimeSlicedSurveyRequestMessage::arbitrary(u)?,
66692                )))
66693            }
66694            TypeVariant::EncryptedBody => {
66695                Ok(Self::EncryptedBody(Box::new(EncryptedBody::arbitrary(u)?)))
66696            }
66697            TypeVariant::SurveyResponseMessage => Ok(Self::SurveyResponseMessage(Box::new(
66698                SurveyResponseMessage::arbitrary(u)?,
66699            ))),
66700            TypeVariant::TimeSlicedSurveyResponseMessage => {
66701                Ok(Self::TimeSlicedSurveyResponseMessage(Box::new(
66702                    TimeSlicedSurveyResponseMessage::arbitrary(u)?,
66703                )))
66704            }
66705            TypeVariant::SignedTimeSlicedSurveyResponseMessage => {
66706                Ok(Self::SignedTimeSlicedSurveyResponseMessage(Box::new(
66707                    SignedTimeSlicedSurveyResponseMessage::arbitrary(u)?,
66708                )))
66709            }
66710            TypeVariant::PeerStats => Ok(Self::PeerStats(Box::new(PeerStats::arbitrary(u)?))),
66711            TypeVariant::TimeSlicedNodeData => Ok(Self::TimeSlicedNodeData(Box::new(
66712                TimeSlicedNodeData::arbitrary(u)?,
66713            ))),
66714            TypeVariant::TimeSlicedPeerData => Ok(Self::TimeSlicedPeerData(Box::new(
66715                TimeSlicedPeerData::arbitrary(u)?,
66716            ))),
66717            TypeVariant::TimeSlicedPeerDataList => Ok(Self::TimeSlicedPeerDataList(Box::new(
66718                TimeSlicedPeerDataList::arbitrary(u)?,
66719            ))),
66720            TypeVariant::TopologyResponseBodyV2 => Ok(Self::TopologyResponseBodyV2(Box::new(
66721                TopologyResponseBodyV2::arbitrary(u)?,
66722            ))),
66723            TypeVariant::SurveyResponseBody => Ok(Self::SurveyResponseBody(Box::new(
66724                SurveyResponseBody::arbitrary(u)?,
66725            ))),
66726            TypeVariant::TxAdvertVector => Ok(Self::TxAdvertVector(Box::new(
66727                TxAdvertVector::arbitrary(u)?,
66728            ))),
66729            TypeVariant::FloodAdvert => Ok(Self::FloodAdvert(Box::new(FloodAdvert::arbitrary(u)?))),
66730            TypeVariant::TxDemandVector => Ok(Self::TxDemandVector(Box::new(
66731                TxDemandVector::arbitrary(u)?,
66732            ))),
66733            TypeVariant::FloodDemand => Ok(Self::FloodDemand(Box::new(FloodDemand::arbitrary(u)?))),
66734            TypeVariant::StellarMessage => Ok(Self::StellarMessage(Box::new(
66735                StellarMessage::arbitrary(u)?,
66736            ))),
66737            TypeVariant::AuthenticatedMessage => Ok(Self::AuthenticatedMessage(Box::new(
66738                AuthenticatedMessage::arbitrary(u)?,
66739            ))),
66740            TypeVariant::AuthenticatedMessageV0 => Ok(Self::AuthenticatedMessageV0(Box::new(
66741                AuthenticatedMessageV0::arbitrary(u)?,
66742            ))),
66743            TypeVariant::LiquidityPoolParameters => Ok(Self::LiquidityPoolParameters(Box::new(
66744                LiquidityPoolParameters::arbitrary(u)?,
66745            ))),
66746            TypeVariant::MuxedAccount => {
66747                Ok(Self::MuxedAccount(Box::new(MuxedAccount::arbitrary(u)?)))
66748            }
66749            TypeVariant::MuxedAccountMed25519 => Ok(Self::MuxedAccountMed25519(Box::new(
66750                MuxedAccountMed25519::arbitrary(u)?,
66751            ))),
66752            TypeVariant::DecoratedSignature => Ok(Self::DecoratedSignature(Box::new(
66753                DecoratedSignature::arbitrary(u)?,
66754            ))),
66755            TypeVariant::OperationType => {
66756                Ok(Self::OperationType(Box::new(OperationType::arbitrary(u)?)))
66757            }
66758            TypeVariant::CreateAccountOp => Ok(Self::CreateAccountOp(Box::new(
66759                CreateAccountOp::arbitrary(u)?,
66760            ))),
66761            TypeVariant::PaymentOp => Ok(Self::PaymentOp(Box::new(PaymentOp::arbitrary(u)?))),
66762            TypeVariant::PathPaymentStrictReceiveOp => Ok(Self::PathPaymentStrictReceiveOp(
66763                Box::new(PathPaymentStrictReceiveOp::arbitrary(u)?),
66764            )),
66765            TypeVariant::PathPaymentStrictSendOp => Ok(Self::PathPaymentStrictSendOp(Box::new(
66766                PathPaymentStrictSendOp::arbitrary(u)?,
66767            ))),
66768            TypeVariant::ManageSellOfferOp => Ok(Self::ManageSellOfferOp(Box::new(
66769                ManageSellOfferOp::arbitrary(u)?,
66770            ))),
66771            TypeVariant::ManageBuyOfferOp => Ok(Self::ManageBuyOfferOp(Box::new(
66772                ManageBuyOfferOp::arbitrary(u)?,
66773            ))),
66774            TypeVariant::CreatePassiveSellOfferOp => Ok(Self::CreatePassiveSellOfferOp(Box::new(
66775                CreatePassiveSellOfferOp::arbitrary(u)?,
66776            ))),
66777            TypeVariant::SetOptionsOp => {
66778                Ok(Self::SetOptionsOp(Box::new(SetOptionsOp::arbitrary(u)?)))
66779            }
66780            TypeVariant::ChangeTrustAsset => Ok(Self::ChangeTrustAsset(Box::new(
66781                ChangeTrustAsset::arbitrary(u)?,
66782            ))),
66783            TypeVariant::ChangeTrustOp => {
66784                Ok(Self::ChangeTrustOp(Box::new(ChangeTrustOp::arbitrary(u)?)))
66785            }
66786            TypeVariant::AllowTrustOp => {
66787                Ok(Self::AllowTrustOp(Box::new(AllowTrustOp::arbitrary(u)?)))
66788            }
66789            TypeVariant::ManageDataOp => {
66790                Ok(Self::ManageDataOp(Box::new(ManageDataOp::arbitrary(u)?)))
66791            }
66792            TypeVariant::BumpSequenceOp => Ok(Self::BumpSequenceOp(Box::new(
66793                BumpSequenceOp::arbitrary(u)?,
66794            ))),
66795            TypeVariant::CreateClaimableBalanceOp => Ok(Self::CreateClaimableBalanceOp(Box::new(
66796                CreateClaimableBalanceOp::arbitrary(u)?,
66797            ))),
66798            TypeVariant::ClaimClaimableBalanceOp => Ok(Self::ClaimClaimableBalanceOp(Box::new(
66799                ClaimClaimableBalanceOp::arbitrary(u)?,
66800            ))),
66801            TypeVariant::BeginSponsoringFutureReservesOp => {
66802                Ok(Self::BeginSponsoringFutureReservesOp(Box::new(
66803                    BeginSponsoringFutureReservesOp::arbitrary(u)?,
66804                )))
66805            }
66806            TypeVariant::RevokeSponsorshipType => Ok(Self::RevokeSponsorshipType(Box::new(
66807                RevokeSponsorshipType::arbitrary(u)?,
66808            ))),
66809            TypeVariant::RevokeSponsorshipOp => Ok(Self::RevokeSponsorshipOp(Box::new(
66810                RevokeSponsorshipOp::arbitrary(u)?,
66811            ))),
66812            TypeVariant::RevokeSponsorshipOpSigner => Ok(Self::RevokeSponsorshipOpSigner(
66813                Box::new(RevokeSponsorshipOpSigner::arbitrary(u)?),
66814            )),
66815            TypeVariant::ClawbackOp => Ok(Self::ClawbackOp(Box::new(ClawbackOp::arbitrary(u)?))),
66816            TypeVariant::ClawbackClaimableBalanceOp => Ok(Self::ClawbackClaimableBalanceOp(
66817                Box::new(ClawbackClaimableBalanceOp::arbitrary(u)?),
66818            )),
66819            TypeVariant::SetTrustLineFlagsOp => Ok(Self::SetTrustLineFlagsOp(Box::new(
66820                SetTrustLineFlagsOp::arbitrary(u)?,
66821            ))),
66822            TypeVariant::LiquidityPoolDepositOp => Ok(Self::LiquidityPoolDepositOp(Box::new(
66823                LiquidityPoolDepositOp::arbitrary(u)?,
66824            ))),
66825            TypeVariant::LiquidityPoolWithdrawOp => Ok(Self::LiquidityPoolWithdrawOp(Box::new(
66826                LiquidityPoolWithdrawOp::arbitrary(u)?,
66827            ))),
66828            TypeVariant::HostFunctionType => Ok(Self::HostFunctionType(Box::new(
66829                HostFunctionType::arbitrary(u)?,
66830            ))),
66831            TypeVariant::ContractIdPreimageType => Ok(Self::ContractIdPreimageType(Box::new(
66832                ContractIdPreimageType::arbitrary(u)?,
66833            ))),
66834            TypeVariant::ContractIdPreimage => Ok(Self::ContractIdPreimage(Box::new(
66835                ContractIdPreimage::arbitrary(u)?,
66836            ))),
66837            TypeVariant::ContractIdPreimageFromAddress => Ok(Self::ContractIdPreimageFromAddress(
66838                Box::new(ContractIdPreimageFromAddress::arbitrary(u)?),
66839            )),
66840            TypeVariant::CreateContractArgs => Ok(Self::CreateContractArgs(Box::new(
66841                CreateContractArgs::arbitrary(u)?,
66842            ))),
66843            TypeVariant::CreateContractArgsV2 => Ok(Self::CreateContractArgsV2(Box::new(
66844                CreateContractArgsV2::arbitrary(u)?,
66845            ))),
66846            TypeVariant::InvokeContractArgs => Ok(Self::InvokeContractArgs(Box::new(
66847                InvokeContractArgs::arbitrary(u)?,
66848            ))),
66849            TypeVariant::HostFunction => {
66850                Ok(Self::HostFunction(Box::new(HostFunction::arbitrary(u)?)))
66851            }
66852            TypeVariant::SorobanAuthorizedFunctionType => Ok(Self::SorobanAuthorizedFunctionType(
66853                Box::new(SorobanAuthorizedFunctionType::arbitrary(u)?),
66854            )),
66855            TypeVariant::SorobanAuthorizedFunction => Ok(Self::SorobanAuthorizedFunction(
66856                Box::new(SorobanAuthorizedFunction::arbitrary(u)?),
66857            )),
66858            TypeVariant::SorobanAuthorizedInvocation => Ok(Self::SorobanAuthorizedInvocation(
66859                Box::new(SorobanAuthorizedInvocation::arbitrary(u)?),
66860            )),
66861            TypeVariant::SorobanAddressCredentials => Ok(Self::SorobanAddressCredentials(
66862                Box::new(SorobanAddressCredentials::arbitrary(u)?),
66863            )),
66864            TypeVariant::SorobanCredentialsType => Ok(Self::SorobanCredentialsType(Box::new(
66865                SorobanCredentialsType::arbitrary(u)?,
66866            ))),
66867            TypeVariant::SorobanCredentials => Ok(Self::SorobanCredentials(Box::new(
66868                SorobanCredentials::arbitrary(u)?,
66869            ))),
66870            TypeVariant::SorobanAuthorizationEntry => Ok(Self::SorobanAuthorizationEntry(
66871                Box::new(SorobanAuthorizationEntry::arbitrary(u)?),
66872            )),
66873            TypeVariant::SorobanAuthorizationEntries => Ok(Self::SorobanAuthorizationEntries(
66874                Box::new(SorobanAuthorizationEntries::arbitrary(u)?),
66875            )),
66876            TypeVariant::InvokeHostFunctionOp => Ok(Self::InvokeHostFunctionOp(Box::new(
66877                InvokeHostFunctionOp::arbitrary(u)?,
66878            ))),
66879            TypeVariant::ExtendFootprintTtlOp => Ok(Self::ExtendFootprintTtlOp(Box::new(
66880                ExtendFootprintTtlOp::arbitrary(u)?,
66881            ))),
66882            TypeVariant::RestoreFootprintOp => Ok(Self::RestoreFootprintOp(Box::new(
66883                RestoreFootprintOp::arbitrary(u)?,
66884            ))),
66885            TypeVariant::Operation => Ok(Self::Operation(Box::new(Operation::arbitrary(u)?))),
66886            TypeVariant::OperationBody => {
66887                Ok(Self::OperationBody(Box::new(OperationBody::arbitrary(u)?)))
66888            }
66889            TypeVariant::HashIdPreimage => Ok(Self::HashIdPreimage(Box::new(
66890                HashIdPreimage::arbitrary(u)?,
66891            ))),
66892            TypeVariant::HashIdPreimageOperationId => Ok(Self::HashIdPreimageOperationId(
66893                Box::new(HashIdPreimageOperationId::arbitrary(u)?),
66894            )),
66895            TypeVariant::HashIdPreimageRevokeId => Ok(Self::HashIdPreimageRevokeId(Box::new(
66896                HashIdPreimageRevokeId::arbitrary(u)?,
66897            ))),
66898            TypeVariant::HashIdPreimageContractId => Ok(Self::HashIdPreimageContractId(Box::new(
66899                HashIdPreimageContractId::arbitrary(u)?,
66900            ))),
66901            TypeVariant::HashIdPreimageSorobanAuthorization => {
66902                Ok(Self::HashIdPreimageSorobanAuthorization(Box::new(
66903                    HashIdPreimageSorobanAuthorization::arbitrary(u)?,
66904                )))
66905            }
66906            TypeVariant::MemoType => Ok(Self::MemoType(Box::new(MemoType::arbitrary(u)?))),
66907            TypeVariant::Memo => Ok(Self::Memo(Box::new(Memo::arbitrary(u)?))),
66908            TypeVariant::TimeBounds => Ok(Self::TimeBounds(Box::new(TimeBounds::arbitrary(u)?))),
66909            TypeVariant::LedgerBounds => {
66910                Ok(Self::LedgerBounds(Box::new(LedgerBounds::arbitrary(u)?)))
66911            }
66912            TypeVariant::PreconditionsV2 => Ok(Self::PreconditionsV2(Box::new(
66913                PreconditionsV2::arbitrary(u)?,
66914            ))),
66915            TypeVariant::PreconditionType => Ok(Self::PreconditionType(Box::new(
66916                PreconditionType::arbitrary(u)?,
66917            ))),
66918            TypeVariant::Preconditions => {
66919                Ok(Self::Preconditions(Box::new(Preconditions::arbitrary(u)?)))
66920            }
66921            TypeVariant::LedgerFootprint => Ok(Self::LedgerFootprint(Box::new(
66922                LedgerFootprint::arbitrary(u)?,
66923            ))),
66924            TypeVariant::SorobanResources => Ok(Self::SorobanResources(Box::new(
66925                SorobanResources::arbitrary(u)?,
66926            ))),
66927            TypeVariant::SorobanResourcesExtV0 => Ok(Self::SorobanResourcesExtV0(Box::new(
66928                SorobanResourcesExtV0::arbitrary(u)?,
66929            ))),
66930            TypeVariant::SorobanTransactionData => Ok(Self::SorobanTransactionData(Box::new(
66931                SorobanTransactionData::arbitrary(u)?,
66932            ))),
66933            TypeVariant::SorobanTransactionDataExt => Ok(Self::SorobanTransactionDataExt(
66934                Box::new(SorobanTransactionDataExt::arbitrary(u)?),
66935            )),
66936            TypeVariant::TransactionV0 => {
66937                Ok(Self::TransactionV0(Box::new(TransactionV0::arbitrary(u)?)))
66938            }
66939            TypeVariant::TransactionV0Ext => Ok(Self::TransactionV0Ext(Box::new(
66940                TransactionV0Ext::arbitrary(u)?,
66941            ))),
66942            TypeVariant::TransactionV0Envelope => Ok(Self::TransactionV0Envelope(Box::new(
66943                TransactionV0Envelope::arbitrary(u)?,
66944            ))),
66945            TypeVariant::Transaction => Ok(Self::Transaction(Box::new(Transaction::arbitrary(u)?))),
66946            TypeVariant::TransactionExt => Ok(Self::TransactionExt(Box::new(
66947                TransactionExt::arbitrary(u)?,
66948            ))),
66949            TypeVariant::TransactionV1Envelope => Ok(Self::TransactionV1Envelope(Box::new(
66950                TransactionV1Envelope::arbitrary(u)?,
66951            ))),
66952            TypeVariant::FeeBumpTransaction => Ok(Self::FeeBumpTransaction(Box::new(
66953                FeeBumpTransaction::arbitrary(u)?,
66954            ))),
66955            TypeVariant::FeeBumpTransactionInnerTx => Ok(Self::FeeBumpTransactionInnerTx(
66956                Box::new(FeeBumpTransactionInnerTx::arbitrary(u)?),
66957            )),
66958            TypeVariant::FeeBumpTransactionExt => Ok(Self::FeeBumpTransactionExt(Box::new(
66959                FeeBumpTransactionExt::arbitrary(u)?,
66960            ))),
66961            TypeVariant::FeeBumpTransactionEnvelope => Ok(Self::FeeBumpTransactionEnvelope(
66962                Box::new(FeeBumpTransactionEnvelope::arbitrary(u)?),
66963            )),
66964            TypeVariant::TransactionEnvelope => Ok(Self::TransactionEnvelope(Box::new(
66965                TransactionEnvelope::arbitrary(u)?,
66966            ))),
66967            TypeVariant::TransactionSignaturePayload => Ok(Self::TransactionSignaturePayload(
66968                Box::new(TransactionSignaturePayload::arbitrary(u)?),
66969            )),
66970            TypeVariant::TransactionSignaturePayloadTaggedTransaction => {
66971                Ok(Self::TransactionSignaturePayloadTaggedTransaction(
66972                    Box::new(TransactionSignaturePayloadTaggedTransaction::arbitrary(u)?),
66973                ))
66974            }
66975            TypeVariant::ClaimAtomType => {
66976                Ok(Self::ClaimAtomType(Box::new(ClaimAtomType::arbitrary(u)?)))
66977            }
66978            TypeVariant::ClaimOfferAtomV0 => Ok(Self::ClaimOfferAtomV0(Box::new(
66979                ClaimOfferAtomV0::arbitrary(u)?,
66980            ))),
66981            TypeVariant::ClaimOfferAtom => Ok(Self::ClaimOfferAtom(Box::new(
66982                ClaimOfferAtom::arbitrary(u)?,
66983            ))),
66984            TypeVariant::ClaimLiquidityAtom => Ok(Self::ClaimLiquidityAtom(Box::new(
66985                ClaimLiquidityAtom::arbitrary(u)?,
66986            ))),
66987            TypeVariant::ClaimAtom => Ok(Self::ClaimAtom(Box::new(ClaimAtom::arbitrary(u)?))),
66988            TypeVariant::CreateAccountResultCode => Ok(Self::CreateAccountResultCode(Box::new(
66989                CreateAccountResultCode::arbitrary(u)?,
66990            ))),
66991            TypeVariant::CreateAccountResult => Ok(Self::CreateAccountResult(Box::new(
66992                CreateAccountResult::arbitrary(u)?,
66993            ))),
66994            TypeVariant::PaymentResultCode => Ok(Self::PaymentResultCode(Box::new(
66995                PaymentResultCode::arbitrary(u)?,
66996            ))),
66997            TypeVariant::PaymentResult => {
66998                Ok(Self::PaymentResult(Box::new(PaymentResult::arbitrary(u)?)))
66999            }
67000            TypeVariant::PathPaymentStrictReceiveResultCode => {
67001                Ok(Self::PathPaymentStrictReceiveResultCode(Box::new(
67002                    PathPaymentStrictReceiveResultCode::arbitrary(u)?,
67003                )))
67004            }
67005            TypeVariant::SimplePaymentResult => Ok(Self::SimplePaymentResult(Box::new(
67006                SimplePaymentResult::arbitrary(u)?,
67007            ))),
67008            TypeVariant::PathPaymentStrictReceiveResult => {
67009                Ok(Self::PathPaymentStrictReceiveResult(Box::new(
67010                    PathPaymentStrictReceiveResult::arbitrary(u)?,
67011                )))
67012            }
67013            TypeVariant::PathPaymentStrictReceiveResultSuccess => {
67014                Ok(Self::PathPaymentStrictReceiveResultSuccess(Box::new(
67015                    PathPaymentStrictReceiveResultSuccess::arbitrary(u)?,
67016                )))
67017            }
67018            TypeVariant::PathPaymentStrictSendResultCode => {
67019                Ok(Self::PathPaymentStrictSendResultCode(Box::new(
67020                    PathPaymentStrictSendResultCode::arbitrary(u)?,
67021                )))
67022            }
67023            TypeVariant::PathPaymentStrictSendResult => Ok(Self::PathPaymentStrictSendResult(
67024                Box::new(PathPaymentStrictSendResult::arbitrary(u)?),
67025            )),
67026            TypeVariant::PathPaymentStrictSendResultSuccess => {
67027                Ok(Self::PathPaymentStrictSendResultSuccess(Box::new(
67028                    PathPaymentStrictSendResultSuccess::arbitrary(u)?,
67029                )))
67030            }
67031            TypeVariant::ManageSellOfferResultCode => Ok(Self::ManageSellOfferResultCode(
67032                Box::new(ManageSellOfferResultCode::arbitrary(u)?),
67033            )),
67034            TypeVariant::ManageOfferEffect => Ok(Self::ManageOfferEffect(Box::new(
67035                ManageOfferEffect::arbitrary(u)?,
67036            ))),
67037            TypeVariant::ManageOfferSuccessResult => Ok(Self::ManageOfferSuccessResult(Box::new(
67038                ManageOfferSuccessResult::arbitrary(u)?,
67039            ))),
67040            TypeVariant::ManageOfferSuccessResultOffer => Ok(Self::ManageOfferSuccessResultOffer(
67041                Box::new(ManageOfferSuccessResultOffer::arbitrary(u)?),
67042            )),
67043            TypeVariant::ManageSellOfferResult => Ok(Self::ManageSellOfferResult(Box::new(
67044                ManageSellOfferResult::arbitrary(u)?,
67045            ))),
67046            TypeVariant::ManageBuyOfferResultCode => Ok(Self::ManageBuyOfferResultCode(Box::new(
67047                ManageBuyOfferResultCode::arbitrary(u)?,
67048            ))),
67049            TypeVariant::ManageBuyOfferResult => Ok(Self::ManageBuyOfferResult(Box::new(
67050                ManageBuyOfferResult::arbitrary(u)?,
67051            ))),
67052            TypeVariant::SetOptionsResultCode => Ok(Self::SetOptionsResultCode(Box::new(
67053                SetOptionsResultCode::arbitrary(u)?,
67054            ))),
67055            TypeVariant::SetOptionsResult => Ok(Self::SetOptionsResult(Box::new(
67056                SetOptionsResult::arbitrary(u)?,
67057            ))),
67058            TypeVariant::ChangeTrustResultCode => Ok(Self::ChangeTrustResultCode(Box::new(
67059                ChangeTrustResultCode::arbitrary(u)?,
67060            ))),
67061            TypeVariant::ChangeTrustResult => Ok(Self::ChangeTrustResult(Box::new(
67062                ChangeTrustResult::arbitrary(u)?,
67063            ))),
67064            TypeVariant::AllowTrustResultCode => Ok(Self::AllowTrustResultCode(Box::new(
67065                AllowTrustResultCode::arbitrary(u)?,
67066            ))),
67067            TypeVariant::AllowTrustResult => Ok(Self::AllowTrustResult(Box::new(
67068                AllowTrustResult::arbitrary(u)?,
67069            ))),
67070            TypeVariant::AccountMergeResultCode => Ok(Self::AccountMergeResultCode(Box::new(
67071                AccountMergeResultCode::arbitrary(u)?,
67072            ))),
67073            TypeVariant::AccountMergeResult => Ok(Self::AccountMergeResult(Box::new(
67074                AccountMergeResult::arbitrary(u)?,
67075            ))),
67076            TypeVariant::InflationResultCode => Ok(Self::InflationResultCode(Box::new(
67077                InflationResultCode::arbitrary(u)?,
67078            ))),
67079            TypeVariant::InflationPayout => Ok(Self::InflationPayout(Box::new(
67080                InflationPayout::arbitrary(u)?,
67081            ))),
67082            TypeVariant::InflationResult => Ok(Self::InflationResult(Box::new(
67083                InflationResult::arbitrary(u)?,
67084            ))),
67085            TypeVariant::ManageDataResultCode => Ok(Self::ManageDataResultCode(Box::new(
67086                ManageDataResultCode::arbitrary(u)?,
67087            ))),
67088            TypeVariant::ManageDataResult => Ok(Self::ManageDataResult(Box::new(
67089                ManageDataResult::arbitrary(u)?,
67090            ))),
67091            TypeVariant::BumpSequenceResultCode => Ok(Self::BumpSequenceResultCode(Box::new(
67092                BumpSequenceResultCode::arbitrary(u)?,
67093            ))),
67094            TypeVariant::BumpSequenceResult => Ok(Self::BumpSequenceResult(Box::new(
67095                BumpSequenceResult::arbitrary(u)?,
67096            ))),
67097            TypeVariant::CreateClaimableBalanceResultCode => {
67098                Ok(Self::CreateClaimableBalanceResultCode(Box::new(
67099                    CreateClaimableBalanceResultCode::arbitrary(u)?,
67100                )))
67101            }
67102            TypeVariant::CreateClaimableBalanceResult => Ok(Self::CreateClaimableBalanceResult(
67103                Box::new(CreateClaimableBalanceResult::arbitrary(u)?),
67104            )),
67105            TypeVariant::ClaimClaimableBalanceResultCode => {
67106                Ok(Self::ClaimClaimableBalanceResultCode(Box::new(
67107                    ClaimClaimableBalanceResultCode::arbitrary(u)?,
67108                )))
67109            }
67110            TypeVariant::ClaimClaimableBalanceResult => Ok(Self::ClaimClaimableBalanceResult(
67111                Box::new(ClaimClaimableBalanceResult::arbitrary(u)?),
67112            )),
67113            TypeVariant::BeginSponsoringFutureReservesResultCode => {
67114                Ok(Self::BeginSponsoringFutureReservesResultCode(Box::new(
67115                    BeginSponsoringFutureReservesResultCode::arbitrary(u)?,
67116                )))
67117            }
67118            TypeVariant::BeginSponsoringFutureReservesResult => {
67119                Ok(Self::BeginSponsoringFutureReservesResult(Box::new(
67120                    BeginSponsoringFutureReservesResult::arbitrary(u)?,
67121                )))
67122            }
67123            TypeVariant::EndSponsoringFutureReservesResultCode => {
67124                Ok(Self::EndSponsoringFutureReservesResultCode(Box::new(
67125                    EndSponsoringFutureReservesResultCode::arbitrary(u)?,
67126                )))
67127            }
67128            TypeVariant::EndSponsoringFutureReservesResult => {
67129                Ok(Self::EndSponsoringFutureReservesResult(Box::new(
67130                    EndSponsoringFutureReservesResult::arbitrary(u)?,
67131                )))
67132            }
67133            TypeVariant::RevokeSponsorshipResultCode => Ok(Self::RevokeSponsorshipResultCode(
67134                Box::new(RevokeSponsorshipResultCode::arbitrary(u)?),
67135            )),
67136            TypeVariant::RevokeSponsorshipResult => Ok(Self::RevokeSponsorshipResult(Box::new(
67137                RevokeSponsorshipResult::arbitrary(u)?,
67138            ))),
67139            TypeVariant::ClawbackResultCode => Ok(Self::ClawbackResultCode(Box::new(
67140                ClawbackResultCode::arbitrary(u)?,
67141            ))),
67142            TypeVariant::ClawbackResult => Ok(Self::ClawbackResult(Box::new(
67143                ClawbackResult::arbitrary(u)?,
67144            ))),
67145            TypeVariant::ClawbackClaimableBalanceResultCode => {
67146                Ok(Self::ClawbackClaimableBalanceResultCode(Box::new(
67147                    ClawbackClaimableBalanceResultCode::arbitrary(u)?,
67148                )))
67149            }
67150            TypeVariant::ClawbackClaimableBalanceResult => {
67151                Ok(Self::ClawbackClaimableBalanceResult(Box::new(
67152                    ClawbackClaimableBalanceResult::arbitrary(u)?,
67153                )))
67154            }
67155            TypeVariant::SetTrustLineFlagsResultCode => Ok(Self::SetTrustLineFlagsResultCode(
67156                Box::new(SetTrustLineFlagsResultCode::arbitrary(u)?),
67157            )),
67158            TypeVariant::SetTrustLineFlagsResult => Ok(Self::SetTrustLineFlagsResult(Box::new(
67159                SetTrustLineFlagsResult::arbitrary(u)?,
67160            ))),
67161            TypeVariant::LiquidityPoolDepositResultCode => {
67162                Ok(Self::LiquidityPoolDepositResultCode(Box::new(
67163                    LiquidityPoolDepositResultCode::arbitrary(u)?,
67164                )))
67165            }
67166            TypeVariant::LiquidityPoolDepositResult => Ok(Self::LiquidityPoolDepositResult(
67167                Box::new(LiquidityPoolDepositResult::arbitrary(u)?),
67168            )),
67169            TypeVariant::LiquidityPoolWithdrawResultCode => {
67170                Ok(Self::LiquidityPoolWithdrawResultCode(Box::new(
67171                    LiquidityPoolWithdrawResultCode::arbitrary(u)?,
67172                )))
67173            }
67174            TypeVariant::LiquidityPoolWithdrawResult => Ok(Self::LiquidityPoolWithdrawResult(
67175                Box::new(LiquidityPoolWithdrawResult::arbitrary(u)?),
67176            )),
67177            TypeVariant::InvokeHostFunctionResultCode => Ok(Self::InvokeHostFunctionResultCode(
67178                Box::new(InvokeHostFunctionResultCode::arbitrary(u)?),
67179            )),
67180            TypeVariant::InvokeHostFunctionResult => Ok(Self::InvokeHostFunctionResult(Box::new(
67181                InvokeHostFunctionResult::arbitrary(u)?,
67182            ))),
67183            TypeVariant::ExtendFootprintTtlResultCode => Ok(Self::ExtendFootprintTtlResultCode(
67184                Box::new(ExtendFootprintTtlResultCode::arbitrary(u)?),
67185            )),
67186            TypeVariant::ExtendFootprintTtlResult => Ok(Self::ExtendFootprintTtlResult(Box::new(
67187                ExtendFootprintTtlResult::arbitrary(u)?,
67188            ))),
67189            TypeVariant::RestoreFootprintResultCode => Ok(Self::RestoreFootprintResultCode(
67190                Box::new(RestoreFootprintResultCode::arbitrary(u)?),
67191            )),
67192            TypeVariant::RestoreFootprintResult => Ok(Self::RestoreFootprintResult(Box::new(
67193                RestoreFootprintResult::arbitrary(u)?,
67194            ))),
67195            TypeVariant::OperationResultCode => Ok(Self::OperationResultCode(Box::new(
67196                OperationResultCode::arbitrary(u)?,
67197            ))),
67198            TypeVariant::OperationResult => Ok(Self::OperationResult(Box::new(
67199                OperationResult::arbitrary(u)?,
67200            ))),
67201            TypeVariant::OperationResultTr => Ok(Self::OperationResultTr(Box::new(
67202                OperationResultTr::arbitrary(u)?,
67203            ))),
67204            TypeVariant::TransactionResultCode => Ok(Self::TransactionResultCode(Box::new(
67205                TransactionResultCode::arbitrary(u)?,
67206            ))),
67207            TypeVariant::InnerTransactionResult => Ok(Self::InnerTransactionResult(Box::new(
67208                InnerTransactionResult::arbitrary(u)?,
67209            ))),
67210            TypeVariant::InnerTransactionResultResult => Ok(Self::InnerTransactionResultResult(
67211                Box::new(InnerTransactionResultResult::arbitrary(u)?),
67212            )),
67213            TypeVariant::InnerTransactionResultExt => Ok(Self::InnerTransactionResultExt(
67214                Box::new(InnerTransactionResultExt::arbitrary(u)?),
67215            )),
67216            TypeVariant::InnerTransactionResultPair => Ok(Self::InnerTransactionResultPair(
67217                Box::new(InnerTransactionResultPair::arbitrary(u)?),
67218            )),
67219            TypeVariant::TransactionResult => Ok(Self::TransactionResult(Box::new(
67220                TransactionResult::arbitrary(u)?,
67221            ))),
67222            TypeVariant::TransactionResultResult => Ok(Self::TransactionResultResult(Box::new(
67223                TransactionResultResult::arbitrary(u)?,
67224            ))),
67225            TypeVariant::TransactionResultExt => Ok(Self::TransactionResultExt(Box::new(
67226                TransactionResultExt::arbitrary(u)?,
67227            ))),
67228            TypeVariant::Hash => Ok(Self::Hash(Box::new(Hash::arbitrary(u)?))),
67229            TypeVariant::Uint256 => Ok(Self::Uint256(Box::new(Uint256::arbitrary(u)?))),
67230            TypeVariant::Uint32 => Ok(Self::Uint32(Box::new(Uint32::arbitrary(u)?))),
67231            TypeVariant::Int32 => Ok(Self::Int32(Box::new(Int32::arbitrary(u)?))),
67232            TypeVariant::Uint64 => Ok(Self::Uint64(Box::new(Uint64::arbitrary(u)?))),
67233            TypeVariant::Int64 => Ok(Self::Int64(Box::new(Int64::arbitrary(u)?))),
67234            TypeVariant::TimePoint => Ok(Self::TimePoint(Box::new(TimePoint::arbitrary(u)?))),
67235            TypeVariant::Duration => Ok(Self::Duration(Box::new(Duration::arbitrary(u)?))),
67236            TypeVariant::ExtensionPoint => Ok(Self::ExtensionPoint(Box::new(
67237                ExtensionPoint::arbitrary(u)?,
67238            ))),
67239            TypeVariant::CryptoKeyType => {
67240                Ok(Self::CryptoKeyType(Box::new(CryptoKeyType::arbitrary(u)?)))
67241            }
67242            TypeVariant::PublicKeyType => {
67243                Ok(Self::PublicKeyType(Box::new(PublicKeyType::arbitrary(u)?)))
67244            }
67245            TypeVariant::SignerKeyType => {
67246                Ok(Self::SignerKeyType(Box::new(SignerKeyType::arbitrary(u)?)))
67247            }
67248            TypeVariant::PublicKey => Ok(Self::PublicKey(Box::new(PublicKey::arbitrary(u)?))),
67249            TypeVariant::SignerKey => Ok(Self::SignerKey(Box::new(SignerKey::arbitrary(u)?))),
67250            TypeVariant::SignerKeyEd25519SignedPayload => Ok(Self::SignerKeyEd25519SignedPayload(
67251                Box::new(SignerKeyEd25519SignedPayload::arbitrary(u)?),
67252            )),
67253            TypeVariant::Signature => Ok(Self::Signature(Box::new(Signature::arbitrary(u)?))),
67254            TypeVariant::SignatureHint => {
67255                Ok(Self::SignatureHint(Box::new(SignatureHint::arbitrary(u)?)))
67256            }
67257            TypeVariant::NodeId => Ok(Self::NodeId(Box::new(NodeId::arbitrary(u)?))),
67258            TypeVariant::AccountId => Ok(Self::AccountId(Box::new(AccountId::arbitrary(u)?))),
67259            TypeVariant::ContractId => Ok(Self::ContractId(Box::new(ContractId::arbitrary(u)?))),
67260            TypeVariant::Curve25519Secret => Ok(Self::Curve25519Secret(Box::new(
67261                Curve25519Secret::arbitrary(u)?,
67262            ))),
67263            TypeVariant::Curve25519Public => Ok(Self::Curve25519Public(Box::new(
67264                Curve25519Public::arbitrary(u)?,
67265            ))),
67266            TypeVariant::HmacSha256Key => {
67267                Ok(Self::HmacSha256Key(Box::new(HmacSha256Key::arbitrary(u)?)))
67268            }
67269            TypeVariant::HmacSha256Mac => {
67270                Ok(Self::HmacSha256Mac(Box::new(HmacSha256Mac::arbitrary(u)?)))
67271            }
67272            TypeVariant::ShortHashSeed => {
67273                Ok(Self::ShortHashSeed(Box::new(ShortHashSeed::arbitrary(u)?)))
67274            }
67275            TypeVariant::BinaryFuseFilterType => Ok(Self::BinaryFuseFilterType(Box::new(
67276                BinaryFuseFilterType::arbitrary(u)?,
67277            ))),
67278            TypeVariant::SerializedBinaryFuseFilter => Ok(Self::SerializedBinaryFuseFilter(
67279                Box::new(SerializedBinaryFuseFilter::arbitrary(u)?),
67280            )),
67281            TypeVariant::PoolId => Ok(Self::PoolId(Box::new(PoolId::arbitrary(u)?))),
67282            TypeVariant::ClaimableBalanceIdType => Ok(Self::ClaimableBalanceIdType(Box::new(
67283                ClaimableBalanceIdType::arbitrary(u)?,
67284            ))),
67285            TypeVariant::ClaimableBalanceId => Ok(Self::ClaimableBalanceId(Box::new(
67286                ClaimableBalanceId::arbitrary(u)?,
67287            ))),
67288        }
67289    }
67290
67291    #[cfg(feature = "alloc")]
67292    #[must_use]
67293    #[allow(clippy::too_many_lines)]
67294    pub fn default(v: TypeVariant) -> Self {
67295        match v {
67296            TypeVariant::Value => Self::Value(Box::default()),
67297            TypeVariant::ScpBallot => Self::ScpBallot(Box::default()),
67298            TypeVariant::ScpStatementType => Self::ScpStatementType(Box::default()),
67299            TypeVariant::ScpNomination => Self::ScpNomination(Box::default()),
67300            TypeVariant::ScpStatement => Self::ScpStatement(Box::default()),
67301            TypeVariant::ScpStatementPledges => Self::ScpStatementPledges(Box::default()),
67302            TypeVariant::ScpStatementPrepare => Self::ScpStatementPrepare(Box::default()),
67303            TypeVariant::ScpStatementConfirm => Self::ScpStatementConfirm(Box::default()),
67304            TypeVariant::ScpStatementExternalize => Self::ScpStatementExternalize(Box::default()),
67305            TypeVariant::ScpEnvelope => Self::ScpEnvelope(Box::default()),
67306            TypeVariant::ScpQuorumSet => Self::ScpQuorumSet(Box::default()),
67307            TypeVariant::ConfigSettingContractExecutionLanesV0 => {
67308                Self::ConfigSettingContractExecutionLanesV0(Box::default())
67309            }
67310            TypeVariant::ConfigSettingContractComputeV0 => {
67311                Self::ConfigSettingContractComputeV0(Box::default())
67312            }
67313            TypeVariant::ConfigSettingContractParallelComputeV0 => {
67314                Self::ConfigSettingContractParallelComputeV0(Box::default())
67315            }
67316            TypeVariant::ConfigSettingContractLedgerCostV0 => {
67317                Self::ConfigSettingContractLedgerCostV0(Box::default())
67318            }
67319            TypeVariant::ConfigSettingContractLedgerCostExtV0 => {
67320                Self::ConfigSettingContractLedgerCostExtV0(Box::default())
67321            }
67322            TypeVariant::ConfigSettingContractHistoricalDataV0 => {
67323                Self::ConfigSettingContractHistoricalDataV0(Box::default())
67324            }
67325            TypeVariant::ConfigSettingContractEventsV0 => {
67326                Self::ConfigSettingContractEventsV0(Box::default())
67327            }
67328            TypeVariant::ConfigSettingContractBandwidthV0 => {
67329                Self::ConfigSettingContractBandwidthV0(Box::default())
67330            }
67331            TypeVariant::ContractCostType => Self::ContractCostType(Box::default()),
67332            TypeVariant::ContractCostParamEntry => Self::ContractCostParamEntry(Box::default()),
67333            TypeVariant::StateArchivalSettings => Self::StateArchivalSettings(Box::default()),
67334            TypeVariant::EvictionIterator => Self::EvictionIterator(Box::default()),
67335            TypeVariant::ConfigSettingScpTiming => Self::ConfigSettingScpTiming(Box::default()),
67336            TypeVariant::ContractCostParams => Self::ContractCostParams(Box::default()),
67337            TypeVariant::ConfigSettingId => Self::ConfigSettingId(Box::default()),
67338            TypeVariant::ConfigSettingEntry => Self::ConfigSettingEntry(Box::default()),
67339            TypeVariant::ScEnvMetaKind => Self::ScEnvMetaKind(Box::default()),
67340            TypeVariant::ScEnvMetaEntry => Self::ScEnvMetaEntry(Box::default()),
67341            TypeVariant::ScEnvMetaEntryInterfaceVersion => {
67342                Self::ScEnvMetaEntryInterfaceVersion(Box::default())
67343            }
67344            TypeVariant::ScMetaV0 => Self::ScMetaV0(Box::default()),
67345            TypeVariant::ScMetaKind => Self::ScMetaKind(Box::default()),
67346            TypeVariant::ScMetaEntry => Self::ScMetaEntry(Box::default()),
67347            TypeVariant::ScSpecType => Self::ScSpecType(Box::default()),
67348            TypeVariant::ScSpecTypeOption => Self::ScSpecTypeOption(Box::default()),
67349            TypeVariant::ScSpecTypeResult => Self::ScSpecTypeResult(Box::default()),
67350            TypeVariant::ScSpecTypeVec => Self::ScSpecTypeVec(Box::default()),
67351            TypeVariant::ScSpecTypeMap => Self::ScSpecTypeMap(Box::default()),
67352            TypeVariant::ScSpecTypeTuple => Self::ScSpecTypeTuple(Box::default()),
67353            TypeVariant::ScSpecTypeBytesN => Self::ScSpecTypeBytesN(Box::default()),
67354            TypeVariant::ScSpecTypeUdt => Self::ScSpecTypeUdt(Box::default()),
67355            TypeVariant::ScSpecTypeDef => Self::ScSpecTypeDef(Box::default()),
67356            TypeVariant::ScSpecUdtStructFieldV0 => Self::ScSpecUdtStructFieldV0(Box::default()),
67357            TypeVariant::ScSpecUdtStructV0 => Self::ScSpecUdtStructV0(Box::default()),
67358            TypeVariant::ScSpecUdtUnionCaseVoidV0 => Self::ScSpecUdtUnionCaseVoidV0(Box::default()),
67359            TypeVariant::ScSpecUdtUnionCaseTupleV0 => {
67360                Self::ScSpecUdtUnionCaseTupleV0(Box::default())
67361            }
67362            TypeVariant::ScSpecUdtUnionCaseV0Kind => Self::ScSpecUdtUnionCaseV0Kind(Box::default()),
67363            TypeVariant::ScSpecUdtUnionCaseV0 => Self::ScSpecUdtUnionCaseV0(Box::default()),
67364            TypeVariant::ScSpecUdtUnionV0 => Self::ScSpecUdtUnionV0(Box::default()),
67365            TypeVariant::ScSpecUdtEnumCaseV0 => Self::ScSpecUdtEnumCaseV0(Box::default()),
67366            TypeVariant::ScSpecUdtEnumV0 => Self::ScSpecUdtEnumV0(Box::default()),
67367            TypeVariant::ScSpecUdtErrorEnumCaseV0 => Self::ScSpecUdtErrorEnumCaseV0(Box::default()),
67368            TypeVariant::ScSpecUdtErrorEnumV0 => Self::ScSpecUdtErrorEnumV0(Box::default()),
67369            TypeVariant::ScSpecFunctionInputV0 => Self::ScSpecFunctionInputV0(Box::default()),
67370            TypeVariant::ScSpecFunctionV0 => Self::ScSpecFunctionV0(Box::default()),
67371            TypeVariant::ScSpecEventParamLocationV0 => {
67372                Self::ScSpecEventParamLocationV0(Box::default())
67373            }
67374            TypeVariant::ScSpecEventParamV0 => Self::ScSpecEventParamV0(Box::default()),
67375            TypeVariant::ScSpecEventDataFormat => Self::ScSpecEventDataFormat(Box::default()),
67376            TypeVariant::ScSpecEventV0 => Self::ScSpecEventV0(Box::default()),
67377            TypeVariant::ScSpecEntryKind => Self::ScSpecEntryKind(Box::default()),
67378            TypeVariant::ScSpecEntry => Self::ScSpecEntry(Box::default()),
67379            TypeVariant::ScValType => Self::ScValType(Box::default()),
67380            TypeVariant::ScErrorType => Self::ScErrorType(Box::default()),
67381            TypeVariant::ScErrorCode => Self::ScErrorCode(Box::default()),
67382            TypeVariant::ScError => Self::ScError(Box::default()),
67383            TypeVariant::UInt128Parts => Self::UInt128Parts(Box::default()),
67384            TypeVariant::Int128Parts => Self::Int128Parts(Box::default()),
67385            TypeVariant::UInt256Parts => Self::UInt256Parts(Box::default()),
67386            TypeVariant::Int256Parts => Self::Int256Parts(Box::default()),
67387            TypeVariant::ContractExecutableType => Self::ContractExecutableType(Box::default()),
67388            TypeVariant::ContractExecutable => Self::ContractExecutable(Box::default()),
67389            TypeVariant::ScAddressType => Self::ScAddressType(Box::default()),
67390            TypeVariant::MuxedEd25519Account => Self::MuxedEd25519Account(Box::default()),
67391            TypeVariant::ScAddress => Self::ScAddress(Box::default()),
67392            TypeVariant::ScVec => Self::ScVec(Box::default()),
67393            TypeVariant::ScMap => Self::ScMap(Box::default()),
67394            TypeVariant::ScBytes => Self::ScBytes(Box::default()),
67395            TypeVariant::ScString => Self::ScString(Box::default()),
67396            TypeVariant::ScSymbol => Self::ScSymbol(Box::default()),
67397            TypeVariant::ScNonceKey => Self::ScNonceKey(Box::default()),
67398            TypeVariant::ScContractInstance => Self::ScContractInstance(Box::default()),
67399            TypeVariant::ScVal => Self::ScVal(Box::default()),
67400            TypeVariant::ScMapEntry => Self::ScMapEntry(Box::default()),
67401            TypeVariant::LedgerCloseMetaBatch => Self::LedgerCloseMetaBatch(Box::default()),
67402            TypeVariant::StoredTransactionSet => Self::StoredTransactionSet(Box::default()),
67403            TypeVariant::StoredDebugTransactionSet => {
67404                Self::StoredDebugTransactionSet(Box::default())
67405            }
67406            TypeVariant::PersistedScpStateV0 => Self::PersistedScpStateV0(Box::default()),
67407            TypeVariant::PersistedScpStateV1 => Self::PersistedScpStateV1(Box::default()),
67408            TypeVariant::PersistedScpState => Self::PersistedScpState(Box::default()),
67409            TypeVariant::Thresholds => Self::Thresholds(Box::default()),
67410            TypeVariant::String32 => Self::String32(Box::default()),
67411            TypeVariant::String64 => Self::String64(Box::default()),
67412            TypeVariant::SequenceNumber => Self::SequenceNumber(Box::default()),
67413            TypeVariant::DataValue => Self::DataValue(Box::default()),
67414            TypeVariant::AssetCode4 => Self::AssetCode4(Box::default()),
67415            TypeVariant::AssetCode12 => Self::AssetCode12(Box::default()),
67416            TypeVariant::AssetType => Self::AssetType(Box::default()),
67417            TypeVariant::AssetCode => Self::AssetCode(Box::default()),
67418            TypeVariant::AlphaNum4 => Self::AlphaNum4(Box::default()),
67419            TypeVariant::AlphaNum12 => Self::AlphaNum12(Box::default()),
67420            TypeVariant::Asset => Self::Asset(Box::default()),
67421            TypeVariant::Price => Self::Price(Box::default()),
67422            TypeVariant::Liabilities => Self::Liabilities(Box::default()),
67423            TypeVariant::ThresholdIndexes => Self::ThresholdIndexes(Box::default()),
67424            TypeVariant::LedgerEntryType => Self::LedgerEntryType(Box::default()),
67425            TypeVariant::Signer => Self::Signer(Box::default()),
67426            TypeVariant::AccountFlags => Self::AccountFlags(Box::default()),
67427            TypeVariant::SponsorshipDescriptor => Self::SponsorshipDescriptor(Box::default()),
67428            TypeVariant::AccountEntryExtensionV3 => Self::AccountEntryExtensionV3(Box::default()),
67429            TypeVariant::AccountEntryExtensionV2 => Self::AccountEntryExtensionV2(Box::default()),
67430            TypeVariant::AccountEntryExtensionV2Ext => {
67431                Self::AccountEntryExtensionV2Ext(Box::default())
67432            }
67433            TypeVariant::AccountEntryExtensionV1 => Self::AccountEntryExtensionV1(Box::default()),
67434            TypeVariant::AccountEntryExtensionV1Ext => {
67435                Self::AccountEntryExtensionV1Ext(Box::default())
67436            }
67437            TypeVariant::AccountEntry => Self::AccountEntry(Box::default()),
67438            TypeVariant::AccountEntryExt => Self::AccountEntryExt(Box::default()),
67439            TypeVariant::TrustLineFlags => Self::TrustLineFlags(Box::default()),
67440            TypeVariant::LiquidityPoolType => Self::LiquidityPoolType(Box::default()),
67441            TypeVariant::TrustLineAsset => Self::TrustLineAsset(Box::default()),
67442            TypeVariant::TrustLineEntryExtensionV2 => {
67443                Self::TrustLineEntryExtensionV2(Box::default())
67444            }
67445            TypeVariant::TrustLineEntryExtensionV2Ext => {
67446                Self::TrustLineEntryExtensionV2Ext(Box::default())
67447            }
67448            TypeVariant::TrustLineEntry => Self::TrustLineEntry(Box::default()),
67449            TypeVariant::TrustLineEntryExt => Self::TrustLineEntryExt(Box::default()),
67450            TypeVariant::TrustLineEntryV1 => Self::TrustLineEntryV1(Box::default()),
67451            TypeVariant::TrustLineEntryV1Ext => Self::TrustLineEntryV1Ext(Box::default()),
67452            TypeVariant::OfferEntryFlags => Self::OfferEntryFlags(Box::default()),
67453            TypeVariant::OfferEntry => Self::OfferEntry(Box::default()),
67454            TypeVariant::OfferEntryExt => Self::OfferEntryExt(Box::default()),
67455            TypeVariant::DataEntry => Self::DataEntry(Box::default()),
67456            TypeVariant::DataEntryExt => Self::DataEntryExt(Box::default()),
67457            TypeVariant::ClaimPredicateType => Self::ClaimPredicateType(Box::default()),
67458            TypeVariant::ClaimPredicate => Self::ClaimPredicate(Box::default()),
67459            TypeVariant::ClaimantType => Self::ClaimantType(Box::default()),
67460            TypeVariant::Claimant => Self::Claimant(Box::default()),
67461            TypeVariant::ClaimantV0 => Self::ClaimantV0(Box::default()),
67462            TypeVariant::ClaimableBalanceFlags => Self::ClaimableBalanceFlags(Box::default()),
67463            TypeVariant::ClaimableBalanceEntryExtensionV1 => {
67464                Self::ClaimableBalanceEntryExtensionV1(Box::default())
67465            }
67466            TypeVariant::ClaimableBalanceEntryExtensionV1Ext => {
67467                Self::ClaimableBalanceEntryExtensionV1Ext(Box::default())
67468            }
67469            TypeVariant::ClaimableBalanceEntry => Self::ClaimableBalanceEntry(Box::default()),
67470            TypeVariant::ClaimableBalanceEntryExt => Self::ClaimableBalanceEntryExt(Box::default()),
67471            TypeVariant::LiquidityPoolConstantProductParameters => {
67472                Self::LiquidityPoolConstantProductParameters(Box::default())
67473            }
67474            TypeVariant::LiquidityPoolEntry => Self::LiquidityPoolEntry(Box::default()),
67475            TypeVariant::LiquidityPoolEntryBody => Self::LiquidityPoolEntryBody(Box::default()),
67476            TypeVariant::LiquidityPoolEntryConstantProduct => {
67477                Self::LiquidityPoolEntryConstantProduct(Box::default())
67478            }
67479            TypeVariant::ContractDataDurability => Self::ContractDataDurability(Box::default()),
67480            TypeVariant::ContractDataEntry => Self::ContractDataEntry(Box::default()),
67481            TypeVariant::ContractCodeCostInputs => Self::ContractCodeCostInputs(Box::default()),
67482            TypeVariant::ContractCodeEntry => Self::ContractCodeEntry(Box::default()),
67483            TypeVariant::ContractCodeEntryExt => Self::ContractCodeEntryExt(Box::default()),
67484            TypeVariant::ContractCodeEntryV1 => Self::ContractCodeEntryV1(Box::default()),
67485            TypeVariant::TtlEntry => Self::TtlEntry(Box::default()),
67486            TypeVariant::LedgerEntryExtensionV1 => Self::LedgerEntryExtensionV1(Box::default()),
67487            TypeVariant::LedgerEntryExtensionV1Ext => {
67488                Self::LedgerEntryExtensionV1Ext(Box::default())
67489            }
67490            TypeVariant::LedgerEntry => Self::LedgerEntry(Box::default()),
67491            TypeVariant::LedgerEntryData => Self::LedgerEntryData(Box::default()),
67492            TypeVariant::LedgerEntryExt => Self::LedgerEntryExt(Box::default()),
67493            TypeVariant::LedgerKey => Self::LedgerKey(Box::default()),
67494            TypeVariant::LedgerKeyAccount => Self::LedgerKeyAccount(Box::default()),
67495            TypeVariant::LedgerKeyTrustLine => Self::LedgerKeyTrustLine(Box::default()),
67496            TypeVariant::LedgerKeyOffer => Self::LedgerKeyOffer(Box::default()),
67497            TypeVariant::LedgerKeyData => Self::LedgerKeyData(Box::default()),
67498            TypeVariant::LedgerKeyClaimableBalance => {
67499                Self::LedgerKeyClaimableBalance(Box::default())
67500            }
67501            TypeVariant::LedgerKeyLiquidityPool => Self::LedgerKeyLiquidityPool(Box::default()),
67502            TypeVariant::LedgerKeyContractData => Self::LedgerKeyContractData(Box::default()),
67503            TypeVariant::LedgerKeyContractCode => Self::LedgerKeyContractCode(Box::default()),
67504            TypeVariant::LedgerKeyConfigSetting => Self::LedgerKeyConfigSetting(Box::default()),
67505            TypeVariant::LedgerKeyTtl => Self::LedgerKeyTtl(Box::default()),
67506            TypeVariant::EnvelopeType => Self::EnvelopeType(Box::default()),
67507            TypeVariant::BucketListType => Self::BucketListType(Box::default()),
67508            TypeVariant::BucketEntryType => Self::BucketEntryType(Box::default()),
67509            TypeVariant::HotArchiveBucketEntryType => {
67510                Self::HotArchiveBucketEntryType(Box::default())
67511            }
67512            TypeVariant::BucketMetadata => Self::BucketMetadata(Box::default()),
67513            TypeVariant::BucketMetadataExt => Self::BucketMetadataExt(Box::default()),
67514            TypeVariant::BucketEntry => Self::BucketEntry(Box::default()),
67515            TypeVariant::HotArchiveBucketEntry => Self::HotArchiveBucketEntry(Box::default()),
67516            TypeVariant::UpgradeType => Self::UpgradeType(Box::default()),
67517            TypeVariant::StellarValueType => Self::StellarValueType(Box::default()),
67518            TypeVariant::LedgerCloseValueSignature => {
67519                Self::LedgerCloseValueSignature(Box::default())
67520            }
67521            TypeVariant::StellarValue => Self::StellarValue(Box::default()),
67522            TypeVariant::StellarValueExt => Self::StellarValueExt(Box::default()),
67523            TypeVariant::LedgerHeaderFlags => Self::LedgerHeaderFlags(Box::default()),
67524            TypeVariant::LedgerHeaderExtensionV1 => Self::LedgerHeaderExtensionV1(Box::default()),
67525            TypeVariant::LedgerHeaderExtensionV1Ext => {
67526                Self::LedgerHeaderExtensionV1Ext(Box::default())
67527            }
67528            TypeVariant::LedgerHeader => Self::LedgerHeader(Box::default()),
67529            TypeVariant::LedgerHeaderExt => Self::LedgerHeaderExt(Box::default()),
67530            TypeVariant::LedgerUpgradeType => Self::LedgerUpgradeType(Box::default()),
67531            TypeVariant::ConfigUpgradeSetKey => Self::ConfigUpgradeSetKey(Box::default()),
67532            TypeVariant::LedgerUpgrade => Self::LedgerUpgrade(Box::default()),
67533            TypeVariant::ConfigUpgradeSet => Self::ConfigUpgradeSet(Box::default()),
67534            TypeVariant::TxSetComponentType => Self::TxSetComponentType(Box::default()),
67535            TypeVariant::DependentTxCluster => Self::DependentTxCluster(Box::default()),
67536            TypeVariant::ParallelTxExecutionStage => Self::ParallelTxExecutionStage(Box::default()),
67537            TypeVariant::ParallelTxsComponent => Self::ParallelTxsComponent(Box::default()),
67538            TypeVariant::TxSetComponent => Self::TxSetComponent(Box::default()),
67539            TypeVariant::TxSetComponentTxsMaybeDiscountedFee => {
67540                Self::TxSetComponentTxsMaybeDiscountedFee(Box::default())
67541            }
67542            TypeVariant::TransactionPhase => Self::TransactionPhase(Box::default()),
67543            TypeVariant::TransactionSet => Self::TransactionSet(Box::default()),
67544            TypeVariant::TransactionSetV1 => Self::TransactionSetV1(Box::default()),
67545            TypeVariant::GeneralizedTransactionSet => {
67546                Self::GeneralizedTransactionSet(Box::default())
67547            }
67548            TypeVariant::TransactionResultPair => Self::TransactionResultPair(Box::default()),
67549            TypeVariant::TransactionResultSet => Self::TransactionResultSet(Box::default()),
67550            TypeVariant::TransactionHistoryEntry => Self::TransactionHistoryEntry(Box::default()),
67551            TypeVariant::TransactionHistoryEntryExt => {
67552                Self::TransactionHistoryEntryExt(Box::default())
67553            }
67554            TypeVariant::TransactionHistoryResultEntry => {
67555                Self::TransactionHistoryResultEntry(Box::default())
67556            }
67557            TypeVariant::TransactionHistoryResultEntryExt => {
67558                Self::TransactionHistoryResultEntryExt(Box::default())
67559            }
67560            TypeVariant::LedgerHeaderHistoryEntry => Self::LedgerHeaderHistoryEntry(Box::default()),
67561            TypeVariant::LedgerHeaderHistoryEntryExt => {
67562                Self::LedgerHeaderHistoryEntryExt(Box::default())
67563            }
67564            TypeVariant::LedgerScpMessages => Self::LedgerScpMessages(Box::default()),
67565            TypeVariant::ScpHistoryEntryV0 => Self::ScpHistoryEntryV0(Box::default()),
67566            TypeVariant::ScpHistoryEntry => Self::ScpHistoryEntry(Box::default()),
67567            TypeVariant::LedgerEntryChangeType => Self::LedgerEntryChangeType(Box::default()),
67568            TypeVariant::LedgerEntryChange => Self::LedgerEntryChange(Box::default()),
67569            TypeVariant::LedgerEntryChanges => Self::LedgerEntryChanges(Box::default()),
67570            TypeVariant::OperationMeta => Self::OperationMeta(Box::default()),
67571            TypeVariant::TransactionMetaV1 => Self::TransactionMetaV1(Box::default()),
67572            TypeVariant::TransactionMetaV2 => Self::TransactionMetaV2(Box::default()),
67573            TypeVariant::ContractEventType => Self::ContractEventType(Box::default()),
67574            TypeVariant::ContractEvent => Self::ContractEvent(Box::default()),
67575            TypeVariant::ContractEventBody => Self::ContractEventBody(Box::default()),
67576            TypeVariant::ContractEventV0 => Self::ContractEventV0(Box::default()),
67577            TypeVariant::DiagnosticEvent => Self::DiagnosticEvent(Box::default()),
67578            TypeVariant::SorobanTransactionMetaExtV1 => {
67579                Self::SorobanTransactionMetaExtV1(Box::default())
67580            }
67581            TypeVariant::SorobanTransactionMetaExt => {
67582                Self::SorobanTransactionMetaExt(Box::default())
67583            }
67584            TypeVariant::SorobanTransactionMeta => Self::SorobanTransactionMeta(Box::default()),
67585            TypeVariant::TransactionMetaV3 => Self::TransactionMetaV3(Box::default()),
67586            TypeVariant::OperationMetaV2 => Self::OperationMetaV2(Box::default()),
67587            TypeVariant::SorobanTransactionMetaV2 => Self::SorobanTransactionMetaV2(Box::default()),
67588            TypeVariant::TransactionEventStage => Self::TransactionEventStage(Box::default()),
67589            TypeVariant::TransactionEvent => Self::TransactionEvent(Box::default()),
67590            TypeVariant::TransactionMetaV4 => Self::TransactionMetaV4(Box::default()),
67591            TypeVariant::InvokeHostFunctionSuccessPreImage => {
67592                Self::InvokeHostFunctionSuccessPreImage(Box::default())
67593            }
67594            TypeVariant::TransactionMeta => Self::TransactionMeta(Box::default()),
67595            TypeVariant::TransactionResultMeta => Self::TransactionResultMeta(Box::default()),
67596            TypeVariant::TransactionResultMetaV1 => Self::TransactionResultMetaV1(Box::default()),
67597            TypeVariant::UpgradeEntryMeta => Self::UpgradeEntryMeta(Box::default()),
67598            TypeVariant::LedgerCloseMetaV0 => Self::LedgerCloseMetaV0(Box::default()),
67599            TypeVariant::LedgerCloseMetaExtV1 => Self::LedgerCloseMetaExtV1(Box::default()),
67600            TypeVariant::LedgerCloseMetaExt => Self::LedgerCloseMetaExt(Box::default()),
67601            TypeVariant::LedgerCloseMetaV1 => Self::LedgerCloseMetaV1(Box::default()),
67602            TypeVariant::LedgerCloseMetaV2 => Self::LedgerCloseMetaV2(Box::default()),
67603            TypeVariant::LedgerCloseMeta => Self::LedgerCloseMeta(Box::default()),
67604            TypeVariant::ErrorCode => Self::ErrorCode(Box::default()),
67605            TypeVariant::SError => Self::SError(Box::default()),
67606            TypeVariant::SendMore => Self::SendMore(Box::default()),
67607            TypeVariant::SendMoreExtended => Self::SendMoreExtended(Box::default()),
67608            TypeVariant::AuthCert => Self::AuthCert(Box::default()),
67609            TypeVariant::Hello => Self::Hello(Box::default()),
67610            TypeVariant::Auth => Self::Auth(Box::default()),
67611            TypeVariant::IpAddrType => Self::IpAddrType(Box::default()),
67612            TypeVariant::PeerAddress => Self::PeerAddress(Box::default()),
67613            TypeVariant::PeerAddressIp => Self::PeerAddressIp(Box::default()),
67614            TypeVariant::MessageType => Self::MessageType(Box::default()),
67615            TypeVariant::DontHave => Self::DontHave(Box::default()),
67616            TypeVariant::SurveyMessageCommandType => Self::SurveyMessageCommandType(Box::default()),
67617            TypeVariant::SurveyMessageResponseType => {
67618                Self::SurveyMessageResponseType(Box::default())
67619            }
67620            TypeVariant::TimeSlicedSurveyStartCollectingMessage => {
67621                Self::TimeSlicedSurveyStartCollectingMessage(Box::default())
67622            }
67623            TypeVariant::SignedTimeSlicedSurveyStartCollectingMessage => {
67624                Self::SignedTimeSlicedSurveyStartCollectingMessage(Box::default())
67625            }
67626            TypeVariant::TimeSlicedSurveyStopCollectingMessage => {
67627                Self::TimeSlicedSurveyStopCollectingMessage(Box::default())
67628            }
67629            TypeVariant::SignedTimeSlicedSurveyStopCollectingMessage => {
67630                Self::SignedTimeSlicedSurveyStopCollectingMessage(Box::default())
67631            }
67632            TypeVariant::SurveyRequestMessage => Self::SurveyRequestMessage(Box::default()),
67633            TypeVariant::TimeSlicedSurveyRequestMessage => {
67634                Self::TimeSlicedSurveyRequestMessage(Box::default())
67635            }
67636            TypeVariant::SignedTimeSlicedSurveyRequestMessage => {
67637                Self::SignedTimeSlicedSurveyRequestMessage(Box::default())
67638            }
67639            TypeVariant::EncryptedBody => Self::EncryptedBody(Box::default()),
67640            TypeVariant::SurveyResponseMessage => Self::SurveyResponseMessage(Box::default()),
67641            TypeVariant::TimeSlicedSurveyResponseMessage => {
67642                Self::TimeSlicedSurveyResponseMessage(Box::default())
67643            }
67644            TypeVariant::SignedTimeSlicedSurveyResponseMessage => {
67645                Self::SignedTimeSlicedSurveyResponseMessage(Box::default())
67646            }
67647            TypeVariant::PeerStats => Self::PeerStats(Box::default()),
67648            TypeVariant::TimeSlicedNodeData => Self::TimeSlicedNodeData(Box::default()),
67649            TypeVariant::TimeSlicedPeerData => Self::TimeSlicedPeerData(Box::default()),
67650            TypeVariant::TimeSlicedPeerDataList => Self::TimeSlicedPeerDataList(Box::default()),
67651            TypeVariant::TopologyResponseBodyV2 => Self::TopologyResponseBodyV2(Box::default()),
67652            TypeVariant::SurveyResponseBody => Self::SurveyResponseBody(Box::default()),
67653            TypeVariant::TxAdvertVector => Self::TxAdvertVector(Box::default()),
67654            TypeVariant::FloodAdvert => Self::FloodAdvert(Box::default()),
67655            TypeVariant::TxDemandVector => Self::TxDemandVector(Box::default()),
67656            TypeVariant::FloodDemand => Self::FloodDemand(Box::default()),
67657            TypeVariant::StellarMessage => Self::StellarMessage(Box::default()),
67658            TypeVariant::AuthenticatedMessage => Self::AuthenticatedMessage(Box::default()),
67659            TypeVariant::AuthenticatedMessageV0 => Self::AuthenticatedMessageV0(Box::default()),
67660            TypeVariant::LiquidityPoolParameters => Self::LiquidityPoolParameters(Box::default()),
67661            TypeVariant::MuxedAccount => Self::MuxedAccount(Box::default()),
67662            TypeVariant::MuxedAccountMed25519 => Self::MuxedAccountMed25519(Box::default()),
67663            TypeVariant::DecoratedSignature => Self::DecoratedSignature(Box::default()),
67664            TypeVariant::OperationType => Self::OperationType(Box::default()),
67665            TypeVariant::CreateAccountOp => Self::CreateAccountOp(Box::default()),
67666            TypeVariant::PaymentOp => Self::PaymentOp(Box::default()),
67667            TypeVariant::PathPaymentStrictReceiveOp => {
67668                Self::PathPaymentStrictReceiveOp(Box::default())
67669            }
67670            TypeVariant::PathPaymentStrictSendOp => Self::PathPaymentStrictSendOp(Box::default()),
67671            TypeVariant::ManageSellOfferOp => Self::ManageSellOfferOp(Box::default()),
67672            TypeVariant::ManageBuyOfferOp => Self::ManageBuyOfferOp(Box::default()),
67673            TypeVariant::CreatePassiveSellOfferOp => Self::CreatePassiveSellOfferOp(Box::default()),
67674            TypeVariant::SetOptionsOp => Self::SetOptionsOp(Box::default()),
67675            TypeVariant::ChangeTrustAsset => Self::ChangeTrustAsset(Box::default()),
67676            TypeVariant::ChangeTrustOp => Self::ChangeTrustOp(Box::default()),
67677            TypeVariant::AllowTrustOp => Self::AllowTrustOp(Box::default()),
67678            TypeVariant::ManageDataOp => Self::ManageDataOp(Box::default()),
67679            TypeVariant::BumpSequenceOp => Self::BumpSequenceOp(Box::default()),
67680            TypeVariant::CreateClaimableBalanceOp => Self::CreateClaimableBalanceOp(Box::default()),
67681            TypeVariant::ClaimClaimableBalanceOp => Self::ClaimClaimableBalanceOp(Box::default()),
67682            TypeVariant::BeginSponsoringFutureReservesOp => {
67683                Self::BeginSponsoringFutureReservesOp(Box::default())
67684            }
67685            TypeVariant::RevokeSponsorshipType => Self::RevokeSponsorshipType(Box::default()),
67686            TypeVariant::RevokeSponsorshipOp => Self::RevokeSponsorshipOp(Box::default()),
67687            TypeVariant::RevokeSponsorshipOpSigner => {
67688                Self::RevokeSponsorshipOpSigner(Box::default())
67689            }
67690            TypeVariant::ClawbackOp => Self::ClawbackOp(Box::default()),
67691            TypeVariant::ClawbackClaimableBalanceOp => {
67692                Self::ClawbackClaimableBalanceOp(Box::default())
67693            }
67694            TypeVariant::SetTrustLineFlagsOp => Self::SetTrustLineFlagsOp(Box::default()),
67695            TypeVariant::LiquidityPoolDepositOp => Self::LiquidityPoolDepositOp(Box::default()),
67696            TypeVariant::LiquidityPoolWithdrawOp => Self::LiquidityPoolWithdrawOp(Box::default()),
67697            TypeVariant::HostFunctionType => Self::HostFunctionType(Box::default()),
67698            TypeVariant::ContractIdPreimageType => Self::ContractIdPreimageType(Box::default()),
67699            TypeVariant::ContractIdPreimage => Self::ContractIdPreimage(Box::default()),
67700            TypeVariant::ContractIdPreimageFromAddress => {
67701                Self::ContractIdPreimageFromAddress(Box::default())
67702            }
67703            TypeVariant::CreateContractArgs => Self::CreateContractArgs(Box::default()),
67704            TypeVariant::CreateContractArgsV2 => Self::CreateContractArgsV2(Box::default()),
67705            TypeVariant::InvokeContractArgs => Self::InvokeContractArgs(Box::default()),
67706            TypeVariant::HostFunction => Self::HostFunction(Box::default()),
67707            TypeVariant::SorobanAuthorizedFunctionType => {
67708                Self::SorobanAuthorizedFunctionType(Box::default())
67709            }
67710            TypeVariant::SorobanAuthorizedFunction => {
67711                Self::SorobanAuthorizedFunction(Box::default())
67712            }
67713            TypeVariant::SorobanAuthorizedInvocation => {
67714                Self::SorobanAuthorizedInvocation(Box::default())
67715            }
67716            TypeVariant::SorobanAddressCredentials => {
67717                Self::SorobanAddressCredentials(Box::default())
67718            }
67719            TypeVariant::SorobanCredentialsType => Self::SorobanCredentialsType(Box::default()),
67720            TypeVariant::SorobanCredentials => Self::SorobanCredentials(Box::default()),
67721            TypeVariant::SorobanAuthorizationEntry => {
67722                Self::SorobanAuthorizationEntry(Box::default())
67723            }
67724            TypeVariant::SorobanAuthorizationEntries => {
67725                Self::SorobanAuthorizationEntries(Box::default())
67726            }
67727            TypeVariant::InvokeHostFunctionOp => Self::InvokeHostFunctionOp(Box::default()),
67728            TypeVariant::ExtendFootprintTtlOp => Self::ExtendFootprintTtlOp(Box::default()),
67729            TypeVariant::RestoreFootprintOp => Self::RestoreFootprintOp(Box::default()),
67730            TypeVariant::Operation => Self::Operation(Box::default()),
67731            TypeVariant::OperationBody => Self::OperationBody(Box::default()),
67732            TypeVariant::HashIdPreimage => Self::HashIdPreimage(Box::default()),
67733            TypeVariant::HashIdPreimageOperationId => {
67734                Self::HashIdPreimageOperationId(Box::default())
67735            }
67736            TypeVariant::HashIdPreimageRevokeId => Self::HashIdPreimageRevokeId(Box::default()),
67737            TypeVariant::HashIdPreimageContractId => Self::HashIdPreimageContractId(Box::default()),
67738            TypeVariant::HashIdPreimageSorobanAuthorization => {
67739                Self::HashIdPreimageSorobanAuthorization(Box::default())
67740            }
67741            TypeVariant::MemoType => Self::MemoType(Box::default()),
67742            TypeVariant::Memo => Self::Memo(Box::default()),
67743            TypeVariant::TimeBounds => Self::TimeBounds(Box::default()),
67744            TypeVariant::LedgerBounds => Self::LedgerBounds(Box::default()),
67745            TypeVariant::PreconditionsV2 => Self::PreconditionsV2(Box::default()),
67746            TypeVariant::PreconditionType => Self::PreconditionType(Box::default()),
67747            TypeVariant::Preconditions => Self::Preconditions(Box::default()),
67748            TypeVariant::LedgerFootprint => Self::LedgerFootprint(Box::default()),
67749            TypeVariant::SorobanResources => Self::SorobanResources(Box::default()),
67750            TypeVariant::SorobanResourcesExtV0 => Self::SorobanResourcesExtV0(Box::default()),
67751            TypeVariant::SorobanTransactionData => Self::SorobanTransactionData(Box::default()),
67752            TypeVariant::SorobanTransactionDataExt => {
67753                Self::SorobanTransactionDataExt(Box::default())
67754            }
67755            TypeVariant::TransactionV0 => Self::TransactionV0(Box::default()),
67756            TypeVariant::TransactionV0Ext => Self::TransactionV0Ext(Box::default()),
67757            TypeVariant::TransactionV0Envelope => Self::TransactionV0Envelope(Box::default()),
67758            TypeVariant::Transaction => Self::Transaction(Box::default()),
67759            TypeVariant::TransactionExt => Self::TransactionExt(Box::default()),
67760            TypeVariant::TransactionV1Envelope => Self::TransactionV1Envelope(Box::default()),
67761            TypeVariant::FeeBumpTransaction => Self::FeeBumpTransaction(Box::default()),
67762            TypeVariant::FeeBumpTransactionInnerTx => {
67763                Self::FeeBumpTransactionInnerTx(Box::default())
67764            }
67765            TypeVariant::FeeBumpTransactionExt => Self::FeeBumpTransactionExt(Box::default()),
67766            TypeVariant::FeeBumpTransactionEnvelope => {
67767                Self::FeeBumpTransactionEnvelope(Box::default())
67768            }
67769            TypeVariant::TransactionEnvelope => Self::TransactionEnvelope(Box::default()),
67770            TypeVariant::TransactionSignaturePayload => {
67771                Self::TransactionSignaturePayload(Box::default())
67772            }
67773            TypeVariant::TransactionSignaturePayloadTaggedTransaction => {
67774                Self::TransactionSignaturePayloadTaggedTransaction(Box::default())
67775            }
67776            TypeVariant::ClaimAtomType => Self::ClaimAtomType(Box::default()),
67777            TypeVariant::ClaimOfferAtomV0 => Self::ClaimOfferAtomV0(Box::default()),
67778            TypeVariant::ClaimOfferAtom => Self::ClaimOfferAtom(Box::default()),
67779            TypeVariant::ClaimLiquidityAtom => Self::ClaimLiquidityAtom(Box::default()),
67780            TypeVariant::ClaimAtom => Self::ClaimAtom(Box::default()),
67781            TypeVariant::CreateAccountResultCode => Self::CreateAccountResultCode(Box::default()),
67782            TypeVariant::CreateAccountResult => Self::CreateAccountResult(Box::default()),
67783            TypeVariant::PaymentResultCode => Self::PaymentResultCode(Box::default()),
67784            TypeVariant::PaymentResult => Self::PaymentResult(Box::default()),
67785            TypeVariant::PathPaymentStrictReceiveResultCode => {
67786                Self::PathPaymentStrictReceiveResultCode(Box::default())
67787            }
67788            TypeVariant::SimplePaymentResult => Self::SimplePaymentResult(Box::default()),
67789            TypeVariant::PathPaymentStrictReceiveResult => {
67790                Self::PathPaymentStrictReceiveResult(Box::default())
67791            }
67792            TypeVariant::PathPaymentStrictReceiveResultSuccess => {
67793                Self::PathPaymentStrictReceiveResultSuccess(Box::default())
67794            }
67795            TypeVariant::PathPaymentStrictSendResultCode => {
67796                Self::PathPaymentStrictSendResultCode(Box::default())
67797            }
67798            TypeVariant::PathPaymentStrictSendResult => {
67799                Self::PathPaymentStrictSendResult(Box::default())
67800            }
67801            TypeVariant::PathPaymentStrictSendResultSuccess => {
67802                Self::PathPaymentStrictSendResultSuccess(Box::default())
67803            }
67804            TypeVariant::ManageSellOfferResultCode => {
67805                Self::ManageSellOfferResultCode(Box::default())
67806            }
67807            TypeVariant::ManageOfferEffect => Self::ManageOfferEffect(Box::default()),
67808            TypeVariant::ManageOfferSuccessResult => Self::ManageOfferSuccessResult(Box::default()),
67809            TypeVariant::ManageOfferSuccessResultOffer => {
67810                Self::ManageOfferSuccessResultOffer(Box::default())
67811            }
67812            TypeVariant::ManageSellOfferResult => Self::ManageSellOfferResult(Box::default()),
67813            TypeVariant::ManageBuyOfferResultCode => Self::ManageBuyOfferResultCode(Box::default()),
67814            TypeVariant::ManageBuyOfferResult => Self::ManageBuyOfferResult(Box::default()),
67815            TypeVariant::SetOptionsResultCode => Self::SetOptionsResultCode(Box::default()),
67816            TypeVariant::SetOptionsResult => Self::SetOptionsResult(Box::default()),
67817            TypeVariant::ChangeTrustResultCode => Self::ChangeTrustResultCode(Box::default()),
67818            TypeVariant::ChangeTrustResult => Self::ChangeTrustResult(Box::default()),
67819            TypeVariant::AllowTrustResultCode => Self::AllowTrustResultCode(Box::default()),
67820            TypeVariant::AllowTrustResult => Self::AllowTrustResult(Box::default()),
67821            TypeVariant::AccountMergeResultCode => Self::AccountMergeResultCode(Box::default()),
67822            TypeVariant::AccountMergeResult => Self::AccountMergeResult(Box::default()),
67823            TypeVariant::InflationResultCode => Self::InflationResultCode(Box::default()),
67824            TypeVariant::InflationPayout => Self::InflationPayout(Box::default()),
67825            TypeVariant::InflationResult => Self::InflationResult(Box::default()),
67826            TypeVariant::ManageDataResultCode => Self::ManageDataResultCode(Box::default()),
67827            TypeVariant::ManageDataResult => Self::ManageDataResult(Box::default()),
67828            TypeVariant::BumpSequenceResultCode => Self::BumpSequenceResultCode(Box::default()),
67829            TypeVariant::BumpSequenceResult => Self::BumpSequenceResult(Box::default()),
67830            TypeVariant::CreateClaimableBalanceResultCode => {
67831                Self::CreateClaimableBalanceResultCode(Box::default())
67832            }
67833            TypeVariant::CreateClaimableBalanceResult => {
67834                Self::CreateClaimableBalanceResult(Box::default())
67835            }
67836            TypeVariant::ClaimClaimableBalanceResultCode => {
67837                Self::ClaimClaimableBalanceResultCode(Box::default())
67838            }
67839            TypeVariant::ClaimClaimableBalanceResult => {
67840                Self::ClaimClaimableBalanceResult(Box::default())
67841            }
67842            TypeVariant::BeginSponsoringFutureReservesResultCode => {
67843                Self::BeginSponsoringFutureReservesResultCode(Box::default())
67844            }
67845            TypeVariant::BeginSponsoringFutureReservesResult => {
67846                Self::BeginSponsoringFutureReservesResult(Box::default())
67847            }
67848            TypeVariant::EndSponsoringFutureReservesResultCode => {
67849                Self::EndSponsoringFutureReservesResultCode(Box::default())
67850            }
67851            TypeVariant::EndSponsoringFutureReservesResult => {
67852                Self::EndSponsoringFutureReservesResult(Box::default())
67853            }
67854            TypeVariant::RevokeSponsorshipResultCode => {
67855                Self::RevokeSponsorshipResultCode(Box::default())
67856            }
67857            TypeVariant::RevokeSponsorshipResult => Self::RevokeSponsorshipResult(Box::default()),
67858            TypeVariant::ClawbackResultCode => Self::ClawbackResultCode(Box::default()),
67859            TypeVariant::ClawbackResult => Self::ClawbackResult(Box::default()),
67860            TypeVariant::ClawbackClaimableBalanceResultCode => {
67861                Self::ClawbackClaimableBalanceResultCode(Box::default())
67862            }
67863            TypeVariant::ClawbackClaimableBalanceResult => {
67864                Self::ClawbackClaimableBalanceResult(Box::default())
67865            }
67866            TypeVariant::SetTrustLineFlagsResultCode => {
67867                Self::SetTrustLineFlagsResultCode(Box::default())
67868            }
67869            TypeVariant::SetTrustLineFlagsResult => Self::SetTrustLineFlagsResult(Box::default()),
67870            TypeVariant::LiquidityPoolDepositResultCode => {
67871                Self::LiquidityPoolDepositResultCode(Box::default())
67872            }
67873            TypeVariant::LiquidityPoolDepositResult => {
67874                Self::LiquidityPoolDepositResult(Box::default())
67875            }
67876            TypeVariant::LiquidityPoolWithdrawResultCode => {
67877                Self::LiquidityPoolWithdrawResultCode(Box::default())
67878            }
67879            TypeVariant::LiquidityPoolWithdrawResult => {
67880                Self::LiquidityPoolWithdrawResult(Box::default())
67881            }
67882            TypeVariant::InvokeHostFunctionResultCode => {
67883                Self::InvokeHostFunctionResultCode(Box::default())
67884            }
67885            TypeVariant::InvokeHostFunctionResult => Self::InvokeHostFunctionResult(Box::default()),
67886            TypeVariant::ExtendFootprintTtlResultCode => {
67887                Self::ExtendFootprintTtlResultCode(Box::default())
67888            }
67889            TypeVariant::ExtendFootprintTtlResult => Self::ExtendFootprintTtlResult(Box::default()),
67890            TypeVariant::RestoreFootprintResultCode => {
67891                Self::RestoreFootprintResultCode(Box::default())
67892            }
67893            TypeVariant::RestoreFootprintResult => Self::RestoreFootprintResult(Box::default()),
67894            TypeVariant::OperationResultCode => Self::OperationResultCode(Box::default()),
67895            TypeVariant::OperationResult => Self::OperationResult(Box::default()),
67896            TypeVariant::OperationResultTr => Self::OperationResultTr(Box::default()),
67897            TypeVariant::TransactionResultCode => Self::TransactionResultCode(Box::default()),
67898            TypeVariant::InnerTransactionResult => Self::InnerTransactionResult(Box::default()),
67899            TypeVariant::InnerTransactionResultResult => {
67900                Self::InnerTransactionResultResult(Box::default())
67901            }
67902            TypeVariant::InnerTransactionResultExt => {
67903                Self::InnerTransactionResultExt(Box::default())
67904            }
67905            TypeVariant::InnerTransactionResultPair => {
67906                Self::InnerTransactionResultPair(Box::default())
67907            }
67908            TypeVariant::TransactionResult => Self::TransactionResult(Box::default()),
67909            TypeVariant::TransactionResultResult => Self::TransactionResultResult(Box::default()),
67910            TypeVariant::TransactionResultExt => Self::TransactionResultExt(Box::default()),
67911            TypeVariant::Hash => Self::Hash(Box::default()),
67912            TypeVariant::Uint256 => Self::Uint256(Box::default()),
67913            TypeVariant::Uint32 => Self::Uint32(Box::default()),
67914            TypeVariant::Int32 => Self::Int32(Box::default()),
67915            TypeVariant::Uint64 => Self::Uint64(Box::default()),
67916            TypeVariant::Int64 => Self::Int64(Box::default()),
67917            TypeVariant::TimePoint => Self::TimePoint(Box::default()),
67918            TypeVariant::Duration => Self::Duration(Box::default()),
67919            TypeVariant::ExtensionPoint => Self::ExtensionPoint(Box::default()),
67920            TypeVariant::CryptoKeyType => Self::CryptoKeyType(Box::default()),
67921            TypeVariant::PublicKeyType => Self::PublicKeyType(Box::default()),
67922            TypeVariant::SignerKeyType => Self::SignerKeyType(Box::default()),
67923            TypeVariant::PublicKey => Self::PublicKey(Box::default()),
67924            TypeVariant::SignerKey => Self::SignerKey(Box::default()),
67925            TypeVariant::SignerKeyEd25519SignedPayload => {
67926                Self::SignerKeyEd25519SignedPayload(Box::default())
67927            }
67928            TypeVariant::Signature => Self::Signature(Box::default()),
67929            TypeVariant::SignatureHint => Self::SignatureHint(Box::default()),
67930            TypeVariant::NodeId => Self::NodeId(Box::default()),
67931            TypeVariant::AccountId => Self::AccountId(Box::default()),
67932            TypeVariant::ContractId => Self::ContractId(Box::default()),
67933            TypeVariant::Curve25519Secret => Self::Curve25519Secret(Box::default()),
67934            TypeVariant::Curve25519Public => Self::Curve25519Public(Box::default()),
67935            TypeVariant::HmacSha256Key => Self::HmacSha256Key(Box::default()),
67936            TypeVariant::HmacSha256Mac => Self::HmacSha256Mac(Box::default()),
67937            TypeVariant::ShortHashSeed => Self::ShortHashSeed(Box::default()),
67938            TypeVariant::BinaryFuseFilterType => Self::BinaryFuseFilterType(Box::default()),
67939            TypeVariant::SerializedBinaryFuseFilter => {
67940                Self::SerializedBinaryFuseFilter(Box::default())
67941            }
67942            TypeVariant::PoolId => Self::PoolId(Box::default()),
67943            TypeVariant::ClaimableBalanceIdType => Self::ClaimableBalanceIdType(Box::default()),
67944            TypeVariant::ClaimableBalanceId => Self::ClaimableBalanceId(Box::default()),
67945        }
67946    }
67947
67948    #[cfg(feature = "alloc")]
67949    #[must_use]
67950    #[allow(clippy::too_many_lines)]
67951    pub fn value(&self) -> &dyn core::any::Any {
67952        #[allow(clippy::match_same_arms)]
67953        match self {
67954            Self::Value(ref v) => v.as_ref(),
67955            Self::ScpBallot(ref v) => v.as_ref(),
67956            Self::ScpStatementType(ref v) => v.as_ref(),
67957            Self::ScpNomination(ref v) => v.as_ref(),
67958            Self::ScpStatement(ref v) => v.as_ref(),
67959            Self::ScpStatementPledges(ref v) => v.as_ref(),
67960            Self::ScpStatementPrepare(ref v) => v.as_ref(),
67961            Self::ScpStatementConfirm(ref v) => v.as_ref(),
67962            Self::ScpStatementExternalize(ref v) => v.as_ref(),
67963            Self::ScpEnvelope(ref v) => v.as_ref(),
67964            Self::ScpQuorumSet(ref v) => v.as_ref(),
67965            Self::ConfigSettingContractExecutionLanesV0(ref v) => v.as_ref(),
67966            Self::ConfigSettingContractComputeV0(ref v) => v.as_ref(),
67967            Self::ConfigSettingContractParallelComputeV0(ref v) => v.as_ref(),
67968            Self::ConfigSettingContractLedgerCostV0(ref v) => v.as_ref(),
67969            Self::ConfigSettingContractLedgerCostExtV0(ref v) => v.as_ref(),
67970            Self::ConfigSettingContractHistoricalDataV0(ref v) => v.as_ref(),
67971            Self::ConfigSettingContractEventsV0(ref v) => v.as_ref(),
67972            Self::ConfigSettingContractBandwidthV0(ref v) => v.as_ref(),
67973            Self::ContractCostType(ref v) => v.as_ref(),
67974            Self::ContractCostParamEntry(ref v) => v.as_ref(),
67975            Self::StateArchivalSettings(ref v) => v.as_ref(),
67976            Self::EvictionIterator(ref v) => v.as_ref(),
67977            Self::ConfigSettingScpTiming(ref v) => v.as_ref(),
67978            Self::ContractCostParams(ref v) => v.as_ref(),
67979            Self::ConfigSettingId(ref v) => v.as_ref(),
67980            Self::ConfigSettingEntry(ref v) => v.as_ref(),
67981            Self::ScEnvMetaKind(ref v) => v.as_ref(),
67982            Self::ScEnvMetaEntry(ref v) => v.as_ref(),
67983            Self::ScEnvMetaEntryInterfaceVersion(ref v) => v.as_ref(),
67984            Self::ScMetaV0(ref v) => v.as_ref(),
67985            Self::ScMetaKind(ref v) => v.as_ref(),
67986            Self::ScMetaEntry(ref v) => v.as_ref(),
67987            Self::ScSpecType(ref v) => v.as_ref(),
67988            Self::ScSpecTypeOption(ref v) => v.as_ref(),
67989            Self::ScSpecTypeResult(ref v) => v.as_ref(),
67990            Self::ScSpecTypeVec(ref v) => v.as_ref(),
67991            Self::ScSpecTypeMap(ref v) => v.as_ref(),
67992            Self::ScSpecTypeTuple(ref v) => v.as_ref(),
67993            Self::ScSpecTypeBytesN(ref v) => v.as_ref(),
67994            Self::ScSpecTypeUdt(ref v) => v.as_ref(),
67995            Self::ScSpecTypeDef(ref v) => v.as_ref(),
67996            Self::ScSpecUdtStructFieldV0(ref v) => v.as_ref(),
67997            Self::ScSpecUdtStructV0(ref v) => v.as_ref(),
67998            Self::ScSpecUdtUnionCaseVoidV0(ref v) => v.as_ref(),
67999            Self::ScSpecUdtUnionCaseTupleV0(ref v) => v.as_ref(),
68000            Self::ScSpecUdtUnionCaseV0Kind(ref v) => v.as_ref(),
68001            Self::ScSpecUdtUnionCaseV0(ref v) => v.as_ref(),
68002            Self::ScSpecUdtUnionV0(ref v) => v.as_ref(),
68003            Self::ScSpecUdtEnumCaseV0(ref v) => v.as_ref(),
68004            Self::ScSpecUdtEnumV0(ref v) => v.as_ref(),
68005            Self::ScSpecUdtErrorEnumCaseV0(ref v) => v.as_ref(),
68006            Self::ScSpecUdtErrorEnumV0(ref v) => v.as_ref(),
68007            Self::ScSpecFunctionInputV0(ref v) => v.as_ref(),
68008            Self::ScSpecFunctionV0(ref v) => v.as_ref(),
68009            Self::ScSpecEventParamLocationV0(ref v) => v.as_ref(),
68010            Self::ScSpecEventParamV0(ref v) => v.as_ref(),
68011            Self::ScSpecEventDataFormat(ref v) => v.as_ref(),
68012            Self::ScSpecEventV0(ref v) => v.as_ref(),
68013            Self::ScSpecEntryKind(ref v) => v.as_ref(),
68014            Self::ScSpecEntry(ref v) => v.as_ref(),
68015            Self::ScValType(ref v) => v.as_ref(),
68016            Self::ScErrorType(ref v) => v.as_ref(),
68017            Self::ScErrorCode(ref v) => v.as_ref(),
68018            Self::ScError(ref v) => v.as_ref(),
68019            Self::UInt128Parts(ref v) => v.as_ref(),
68020            Self::Int128Parts(ref v) => v.as_ref(),
68021            Self::UInt256Parts(ref v) => v.as_ref(),
68022            Self::Int256Parts(ref v) => v.as_ref(),
68023            Self::ContractExecutableType(ref v) => v.as_ref(),
68024            Self::ContractExecutable(ref v) => v.as_ref(),
68025            Self::ScAddressType(ref v) => v.as_ref(),
68026            Self::MuxedEd25519Account(ref v) => v.as_ref(),
68027            Self::ScAddress(ref v) => v.as_ref(),
68028            Self::ScVec(ref v) => v.as_ref(),
68029            Self::ScMap(ref v) => v.as_ref(),
68030            Self::ScBytes(ref v) => v.as_ref(),
68031            Self::ScString(ref v) => v.as_ref(),
68032            Self::ScSymbol(ref v) => v.as_ref(),
68033            Self::ScNonceKey(ref v) => v.as_ref(),
68034            Self::ScContractInstance(ref v) => v.as_ref(),
68035            Self::ScVal(ref v) => v.as_ref(),
68036            Self::ScMapEntry(ref v) => v.as_ref(),
68037            Self::LedgerCloseMetaBatch(ref v) => v.as_ref(),
68038            Self::StoredTransactionSet(ref v) => v.as_ref(),
68039            Self::StoredDebugTransactionSet(ref v) => v.as_ref(),
68040            Self::PersistedScpStateV0(ref v) => v.as_ref(),
68041            Self::PersistedScpStateV1(ref v) => v.as_ref(),
68042            Self::PersistedScpState(ref v) => v.as_ref(),
68043            Self::Thresholds(ref v) => v.as_ref(),
68044            Self::String32(ref v) => v.as_ref(),
68045            Self::String64(ref v) => v.as_ref(),
68046            Self::SequenceNumber(ref v) => v.as_ref(),
68047            Self::DataValue(ref v) => v.as_ref(),
68048            Self::AssetCode4(ref v) => v.as_ref(),
68049            Self::AssetCode12(ref v) => v.as_ref(),
68050            Self::AssetType(ref v) => v.as_ref(),
68051            Self::AssetCode(ref v) => v.as_ref(),
68052            Self::AlphaNum4(ref v) => v.as_ref(),
68053            Self::AlphaNum12(ref v) => v.as_ref(),
68054            Self::Asset(ref v) => v.as_ref(),
68055            Self::Price(ref v) => v.as_ref(),
68056            Self::Liabilities(ref v) => v.as_ref(),
68057            Self::ThresholdIndexes(ref v) => v.as_ref(),
68058            Self::LedgerEntryType(ref v) => v.as_ref(),
68059            Self::Signer(ref v) => v.as_ref(),
68060            Self::AccountFlags(ref v) => v.as_ref(),
68061            Self::SponsorshipDescriptor(ref v) => v.as_ref(),
68062            Self::AccountEntryExtensionV3(ref v) => v.as_ref(),
68063            Self::AccountEntryExtensionV2(ref v) => v.as_ref(),
68064            Self::AccountEntryExtensionV2Ext(ref v) => v.as_ref(),
68065            Self::AccountEntryExtensionV1(ref v) => v.as_ref(),
68066            Self::AccountEntryExtensionV1Ext(ref v) => v.as_ref(),
68067            Self::AccountEntry(ref v) => v.as_ref(),
68068            Self::AccountEntryExt(ref v) => v.as_ref(),
68069            Self::TrustLineFlags(ref v) => v.as_ref(),
68070            Self::LiquidityPoolType(ref v) => v.as_ref(),
68071            Self::TrustLineAsset(ref v) => v.as_ref(),
68072            Self::TrustLineEntryExtensionV2(ref v) => v.as_ref(),
68073            Self::TrustLineEntryExtensionV2Ext(ref v) => v.as_ref(),
68074            Self::TrustLineEntry(ref v) => v.as_ref(),
68075            Self::TrustLineEntryExt(ref v) => v.as_ref(),
68076            Self::TrustLineEntryV1(ref v) => v.as_ref(),
68077            Self::TrustLineEntryV1Ext(ref v) => v.as_ref(),
68078            Self::OfferEntryFlags(ref v) => v.as_ref(),
68079            Self::OfferEntry(ref v) => v.as_ref(),
68080            Self::OfferEntryExt(ref v) => v.as_ref(),
68081            Self::DataEntry(ref v) => v.as_ref(),
68082            Self::DataEntryExt(ref v) => v.as_ref(),
68083            Self::ClaimPredicateType(ref v) => v.as_ref(),
68084            Self::ClaimPredicate(ref v) => v.as_ref(),
68085            Self::ClaimantType(ref v) => v.as_ref(),
68086            Self::Claimant(ref v) => v.as_ref(),
68087            Self::ClaimantV0(ref v) => v.as_ref(),
68088            Self::ClaimableBalanceFlags(ref v) => v.as_ref(),
68089            Self::ClaimableBalanceEntryExtensionV1(ref v) => v.as_ref(),
68090            Self::ClaimableBalanceEntryExtensionV1Ext(ref v) => v.as_ref(),
68091            Self::ClaimableBalanceEntry(ref v) => v.as_ref(),
68092            Self::ClaimableBalanceEntryExt(ref v) => v.as_ref(),
68093            Self::LiquidityPoolConstantProductParameters(ref v) => v.as_ref(),
68094            Self::LiquidityPoolEntry(ref v) => v.as_ref(),
68095            Self::LiquidityPoolEntryBody(ref v) => v.as_ref(),
68096            Self::LiquidityPoolEntryConstantProduct(ref v) => v.as_ref(),
68097            Self::ContractDataDurability(ref v) => v.as_ref(),
68098            Self::ContractDataEntry(ref v) => v.as_ref(),
68099            Self::ContractCodeCostInputs(ref v) => v.as_ref(),
68100            Self::ContractCodeEntry(ref v) => v.as_ref(),
68101            Self::ContractCodeEntryExt(ref v) => v.as_ref(),
68102            Self::ContractCodeEntryV1(ref v) => v.as_ref(),
68103            Self::TtlEntry(ref v) => v.as_ref(),
68104            Self::LedgerEntryExtensionV1(ref v) => v.as_ref(),
68105            Self::LedgerEntryExtensionV1Ext(ref v) => v.as_ref(),
68106            Self::LedgerEntry(ref v) => v.as_ref(),
68107            Self::LedgerEntryData(ref v) => v.as_ref(),
68108            Self::LedgerEntryExt(ref v) => v.as_ref(),
68109            Self::LedgerKey(ref v) => v.as_ref(),
68110            Self::LedgerKeyAccount(ref v) => v.as_ref(),
68111            Self::LedgerKeyTrustLine(ref v) => v.as_ref(),
68112            Self::LedgerKeyOffer(ref v) => v.as_ref(),
68113            Self::LedgerKeyData(ref v) => v.as_ref(),
68114            Self::LedgerKeyClaimableBalance(ref v) => v.as_ref(),
68115            Self::LedgerKeyLiquidityPool(ref v) => v.as_ref(),
68116            Self::LedgerKeyContractData(ref v) => v.as_ref(),
68117            Self::LedgerKeyContractCode(ref v) => v.as_ref(),
68118            Self::LedgerKeyConfigSetting(ref v) => v.as_ref(),
68119            Self::LedgerKeyTtl(ref v) => v.as_ref(),
68120            Self::EnvelopeType(ref v) => v.as_ref(),
68121            Self::BucketListType(ref v) => v.as_ref(),
68122            Self::BucketEntryType(ref v) => v.as_ref(),
68123            Self::HotArchiveBucketEntryType(ref v) => v.as_ref(),
68124            Self::BucketMetadata(ref v) => v.as_ref(),
68125            Self::BucketMetadataExt(ref v) => v.as_ref(),
68126            Self::BucketEntry(ref v) => v.as_ref(),
68127            Self::HotArchiveBucketEntry(ref v) => v.as_ref(),
68128            Self::UpgradeType(ref v) => v.as_ref(),
68129            Self::StellarValueType(ref v) => v.as_ref(),
68130            Self::LedgerCloseValueSignature(ref v) => v.as_ref(),
68131            Self::StellarValue(ref v) => v.as_ref(),
68132            Self::StellarValueExt(ref v) => v.as_ref(),
68133            Self::LedgerHeaderFlags(ref v) => v.as_ref(),
68134            Self::LedgerHeaderExtensionV1(ref v) => v.as_ref(),
68135            Self::LedgerHeaderExtensionV1Ext(ref v) => v.as_ref(),
68136            Self::LedgerHeader(ref v) => v.as_ref(),
68137            Self::LedgerHeaderExt(ref v) => v.as_ref(),
68138            Self::LedgerUpgradeType(ref v) => v.as_ref(),
68139            Self::ConfigUpgradeSetKey(ref v) => v.as_ref(),
68140            Self::LedgerUpgrade(ref v) => v.as_ref(),
68141            Self::ConfigUpgradeSet(ref v) => v.as_ref(),
68142            Self::TxSetComponentType(ref v) => v.as_ref(),
68143            Self::DependentTxCluster(ref v) => v.as_ref(),
68144            Self::ParallelTxExecutionStage(ref v) => v.as_ref(),
68145            Self::ParallelTxsComponent(ref v) => v.as_ref(),
68146            Self::TxSetComponent(ref v) => v.as_ref(),
68147            Self::TxSetComponentTxsMaybeDiscountedFee(ref v) => v.as_ref(),
68148            Self::TransactionPhase(ref v) => v.as_ref(),
68149            Self::TransactionSet(ref v) => v.as_ref(),
68150            Self::TransactionSetV1(ref v) => v.as_ref(),
68151            Self::GeneralizedTransactionSet(ref v) => v.as_ref(),
68152            Self::TransactionResultPair(ref v) => v.as_ref(),
68153            Self::TransactionResultSet(ref v) => v.as_ref(),
68154            Self::TransactionHistoryEntry(ref v) => v.as_ref(),
68155            Self::TransactionHistoryEntryExt(ref v) => v.as_ref(),
68156            Self::TransactionHistoryResultEntry(ref v) => v.as_ref(),
68157            Self::TransactionHistoryResultEntryExt(ref v) => v.as_ref(),
68158            Self::LedgerHeaderHistoryEntry(ref v) => v.as_ref(),
68159            Self::LedgerHeaderHistoryEntryExt(ref v) => v.as_ref(),
68160            Self::LedgerScpMessages(ref v) => v.as_ref(),
68161            Self::ScpHistoryEntryV0(ref v) => v.as_ref(),
68162            Self::ScpHistoryEntry(ref v) => v.as_ref(),
68163            Self::LedgerEntryChangeType(ref v) => v.as_ref(),
68164            Self::LedgerEntryChange(ref v) => v.as_ref(),
68165            Self::LedgerEntryChanges(ref v) => v.as_ref(),
68166            Self::OperationMeta(ref v) => v.as_ref(),
68167            Self::TransactionMetaV1(ref v) => v.as_ref(),
68168            Self::TransactionMetaV2(ref v) => v.as_ref(),
68169            Self::ContractEventType(ref v) => v.as_ref(),
68170            Self::ContractEvent(ref v) => v.as_ref(),
68171            Self::ContractEventBody(ref v) => v.as_ref(),
68172            Self::ContractEventV0(ref v) => v.as_ref(),
68173            Self::DiagnosticEvent(ref v) => v.as_ref(),
68174            Self::SorobanTransactionMetaExtV1(ref v) => v.as_ref(),
68175            Self::SorobanTransactionMetaExt(ref v) => v.as_ref(),
68176            Self::SorobanTransactionMeta(ref v) => v.as_ref(),
68177            Self::TransactionMetaV3(ref v) => v.as_ref(),
68178            Self::OperationMetaV2(ref v) => v.as_ref(),
68179            Self::SorobanTransactionMetaV2(ref v) => v.as_ref(),
68180            Self::TransactionEventStage(ref v) => v.as_ref(),
68181            Self::TransactionEvent(ref v) => v.as_ref(),
68182            Self::TransactionMetaV4(ref v) => v.as_ref(),
68183            Self::InvokeHostFunctionSuccessPreImage(ref v) => v.as_ref(),
68184            Self::TransactionMeta(ref v) => v.as_ref(),
68185            Self::TransactionResultMeta(ref v) => v.as_ref(),
68186            Self::TransactionResultMetaV1(ref v) => v.as_ref(),
68187            Self::UpgradeEntryMeta(ref v) => v.as_ref(),
68188            Self::LedgerCloseMetaV0(ref v) => v.as_ref(),
68189            Self::LedgerCloseMetaExtV1(ref v) => v.as_ref(),
68190            Self::LedgerCloseMetaExt(ref v) => v.as_ref(),
68191            Self::LedgerCloseMetaV1(ref v) => v.as_ref(),
68192            Self::LedgerCloseMetaV2(ref v) => v.as_ref(),
68193            Self::LedgerCloseMeta(ref v) => v.as_ref(),
68194            Self::ErrorCode(ref v) => v.as_ref(),
68195            Self::SError(ref v) => v.as_ref(),
68196            Self::SendMore(ref v) => v.as_ref(),
68197            Self::SendMoreExtended(ref v) => v.as_ref(),
68198            Self::AuthCert(ref v) => v.as_ref(),
68199            Self::Hello(ref v) => v.as_ref(),
68200            Self::Auth(ref v) => v.as_ref(),
68201            Self::IpAddrType(ref v) => v.as_ref(),
68202            Self::PeerAddress(ref v) => v.as_ref(),
68203            Self::PeerAddressIp(ref v) => v.as_ref(),
68204            Self::MessageType(ref v) => v.as_ref(),
68205            Self::DontHave(ref v) => v.as_ref(),
68206            Self::SurveyMessageCommandType(ref v) => v.as_ref(),
68207            Self::SurveyMessageResponseType(ref v) => v.as_ref(),
68208            Self::TimeSlicedSurveyStartCollectingMessage(ref v) => v.as_ref(),
68209            Self::SignedTimeSlicedSurveyStartCollectingMessage(ref v) => v.as_ref(),
68210            Self::TimeSlicedSurveyStopCollectingMessage(ref v) => v.as_ref(),
68211            Self::SignedTimeSlicedSurveyStopCollectingMessage(ref v) => v.as_ref(),
68212            Self::SurveyRequestMessage(ref v) => v.as_ref(),
68213            Self::TimeSlicedSurveyRequestMessage(ref v) => v.as_ref(),
68214            Self::SignedTimeSlicedSurveyRequestMessage(ref v) => v.as_ref(),
68215            Self::EncryptedBody(ref v) => v.as_ref(),
68216            Self::SurveyResponseMessage(ref v) => v.as_ref(),
68217            Self::TimeSlicedSurveyResponseMessage(ref v) => v.as_ref(),
68218            Self::SignedTimeSlicedSurveyResponseMessage(ref v) => v.as_ref(),
68219            Self::PeerStats(ref v) => v.as_ref(),
68220            Self::TimeSlicedNodeData(ref v) => v.as_ref(),
68221            Self::TimeSlicedPeerData(ref v) => v.as_ref(),
68222            Self::TimeSlicedPeerDataList(ref v) => v.as_ref(),
68223            Self::TopologyResponseBodyV2(ref v) => v.as_ref(),
68224            Self::SurveyResponseBody(ref v) => v.as_ref(),
68225            Self::TxAdvertVector(ref v) => v.as_ref(),
68226            Self::FloodAdvert(ref v) => v.as_ref(),
68227            Self::TxDemandVector(ref v) => v.as_ref(),
68228            Self::FloodDemand(ref v) => v.as_ref(),
68229            Self::StellarMessage(ref v) => v.as_ref(),
68230            Self::AuthenticatedMessage(ref v) => v.as_ref(),
68231            Self::AuthenticatedMessageV0(ref v) => v.as_ref(),
68232            Self::LiquidityPoolParameters(ref v) => v.as_ref(),
68233            Self::MuxedAccount(ref v) => v.as_ref(),
68234            Self::MuxedAccountMed25519(ref v) => v.as_ref(),
68235            Self::DecoratedSignature(ref v) => v.as_ref(),
68236            Self::OperationType(ref v) => v.as_ref(),
68237            Self::CreateAccountOp(ref v) => v.as_ref(),
68238            Self::PaymentOp(ref v) => v.as_ref(),
68239            Self::PathPaymentStrictReceiveOp(ref v) => v.as_ref(),
68240            Self::PathPaymentStrictSendOp(ref v) => v.as_ref(),
68241            Self::ManageSellOfferOp(ref v) => v.as_ref(),
68242            Self::ManageBuyOfferOp(ref v) => v.as_ref(),
68243            Self::CreatePassiveSellOfferOp(ref v) => v.as_ref(),
68244            Self::SetOptionsOp(ref v) => v.as_ref(),
68245            Self::ChangeTrustAsset(ref v) => v.as_ref(),
68246            Self::ChangeTrustOp(ref v) => v.as_ref(),
68247            Self::AllowTrustOp(ref v) => v.as_ref(),
68248            Self::ManageDataOp(ref v) => v.as_ref(),
68249            Self::BumpSequenceOp(ref v) => v.as_ref(),
68250            Self::CreateClaimableBalanceOp(ref v) => v.as_ref(),
68251            Self::ClaimClaimableBalanceOp(ref v) => v.as_ref(),
68252            Self::BeginSponsoringFutureReservesOp(ref v) => v.as_ref(),
68253            Self::RevokeSponsorshipType(ref v) => v.as_ref(),
68254            Self::RevokeSponsorshipOp(ref v) => v.as_ref(),
68255            Self::RevokeSponsorshipOpSigner(ref v) => v.as_ref(),
68256            Self::ClawbackOp(ref v) => v.as_ref(),
68257            Self::ClawbackClaimableBalanceOp(ref v) => v.as_ref(),
68258            Self::SetTrustLineFlagsOp(ref v) => v.as_ref(),
68259            Self::LiquidityPoolDepositOp(ref v) => v.as_ref(),
68260            Self::LiquidityPoolWithdrawOp(ref v) => v.as_ref(),
68261            Self::HostFunctionType(ref v) => v.as_ref(),
68262            Self::ContractIdPreimageType(ref v) => v.as_ref(),
68263            Self::ContractIdPreimage(ref v) => v.as_ref(),
68264            Self::ContractIdPreimageFromAddress(ref v) => v.as_ref(),
68265            Self::CreateContractArgs(ref v) => v.as_ref(),
68266            Self::CreateContractArgsV2(ref v) => v.as_ref(),
68267            Self::InvokeContractArgs(ref v) => v.as_ref(),
68268            Self::HostFunction(ref v) => v.as_ref(),
68269            Self::SorobanAuthorizedFunctionType(ref v) => v.as_ref(),
68270            Self::SorobanAuthorizedFunction(ref v) => v.as_ref(),
68271            Self::SorobanAuthorizedInvocation(ref v) => v.as_ref(),
68272            Self::SorobanAddressCredentials(ref v) => v.as_ref(),
68273            Self::SorobanCredentialsType(ref v) => v.as_ref(),
68274            Self::SorobanCredentials(ref v) => v.as_ref(),
68275            Self::SorobanAuthorizationEntry(ref v) => v.as_ref(),
68276            Self::SorobanAuthorizationEntries(ref v) => v.as_ref(),
68277            Self::InvokeHostFunctionOp(ref v) => v.as_ref(),
68278            Self::ExtendFootprintTtlOp(ref v) => v.as_ref(),
68279            Self::RestoreFootprintOp(ref v) => v.as_ref(),
68280            Self::Operation(ref v) => v.as_ref(),
68281            Self::OperationBody(ref v) => v.as_ref(),
68282            Self::HashIdPreimage(ref v) => v.as_ref(),
68283            Self::HashIdPreimageOperationId(ref v) => v.as_ref(),
68284            Self::HashIdPreimageRevokeId(ref v) => v.as_ref(),
68285            Self::HashIdPreimageContractId(ref v) => v.as_ref(),
68286            Self::HashIdPreimageSorobanAuthorization(ref v) => v.as_ref(),
68287            Self::MemoType(ref v) => v.as_ref(),
68288            Self::Memo(ref v) => v.as_ref(),
68289            Self::TimeBounds(ref v) => v.as_ref(),
68290            Self::LedgerBounds(ref v) => v.as_ref(),
68291            Self::PreconditionsV2(ref v) => v.as_ref(),
68292            Self::PreconditionType(ref v) => v.as_ref(),
68293            Self::Preconditions(ref v) => v.as_ref(),
68294            Self::LedgerFootprint(ref v) => v.as_ref(),
68295            Self::SorobanResources(ref v) => v.as_ref(),
68296            Self::SorobanResourcesExtV0(ref v) => v.as_ref(),
68297            Self::SorobanTransactionData(ref v) => v.as_ref(),
68298            Self::SorobanTransactionDataExt(ref v) => v.as_ref(),
68299            Self::TransactionV0(ref v) => v.as_ref(),
68300            Self::TransactionV0Ext(ref v) => v.as_ref(),
68301            Self::TransactionV0Envelope(ref v) => v.as_ref(),
68302            Self::Transaction(ref v) => v.as_ref(),
68303            Self::TransactionExt(ref v) => v.as_ref(),
68304            Self::TransactionV1Envelope(ref v) => v.as_ref(),
68305            Self::FeeBumpTransaction(ref v) => v.as_ref(),
68306            Self::FeeBumpTransactionInnerTx(ref v) => v.as_ref(),
68307            Self::FeeBumpTransactionExt(ref v) => v.as_ref(),
68308            Self::FeeBumpTransactionEnvelope(ref v) => v.as_ref(),
68309            Self::TransactionEnvelope(ref v) => v.as_ref(),
68310            Self::TransactionSignaturePayload(ref v) => v.as_ref(),
68311            Self::TransactionSignaturePayloadTaggedTransaction(ref v) => v.as_ref(),
68312            Self::ClaimAtomType(ref v) => v.as_ref(),
68313            Self::ClaimOfferAtomV0(ref v) => v.as_ref(),
68314            Self::ClaimOfferAtom(ref v) => v.as_ref(),
68315            Self::ClaimLiquidityAtom(ref v) => v.as_ref(),
68316            Self::ClaimAtom(ref v) => v.as_ref(),
68317            Self::CreateAccountResultCode(ref v) => v.as_ref(),
68318            Self::CreateAccountResult(ref v) => v.as_ref(),
68319            Self::PaymentResultCode(ref v) => v.as_ref(),
68320            Self::PaymentResult(ref v) => v.as_ref(),
68321            Self::PathPaymentStrictReceiveResultCode(ref v) => v.as_ref(),
68322            Self::SimplePaymentResult(ref v) => v.as_ref(),
68323            Self::PathPaymentStrictReceiveResult(ref v) => v.as_ref(),
68324            Self::PathPaymentStrictReceiveResultSuccess(ref v) => v.as_ref(),
68325            Self::PathPaymentStrictSendResultCode(ref v) => v.as_ref(),
68326            Self::PathPaymentStrictSendResult(ref v) => v.as_ref(),
68327            Self::PathPaymentStrictSendResultSuccess(ref v) => v.as_ref(),
68328            Self::ManageSellOfferResultCode(ref v) => v.as_ref(),
68329            Self::ManageOfferEffect(ref v) => v.as_ref(),
68330            Self::ManageOfferSuccessResult(ref v) => v.as_ref(),
68331            Self::ManageOfferSuccessResultOffer(ref v) => v.as_ref(),
68332            Self::ManageSellOfferResult(ref v) => v.as_ref(),
68333            Self::ManageBuyOfferResultCode(ref v) => v.as_ref(),
68334            Self::ManageBuyOfferResult(ref v) => v.as_ref(),
68335            Self::SetOptionsResultCode(ref v) => v.as_ref(),
68336            Self::SetOptionsResult(ref v) => v.as_ref(),
68337            Self::ChangeTrustResultCode(ref v) => v.as_ref(),
68338            Self::ChangeTrustResult(ref v) => v.as_ref(),
68339            Self::AllowTrustResultCode(ref v) => v.as_ref(),
68340            Self::AllowTrustResult(ref v) => v.as_ref(),
68341            Self::AccountMergeResultCode(ref v) => v.as_ref(),
68342            Self::AccountMergeResult(ref v) => v.as_ref(),
68343            Self::InflationResultCode(ref v) => v.as_ref(),
68344            Self::InflationPayout(ref v) => v.as_ref(),
68345            Self::InflationResult(ref v) => v.as_ref(),
68346            Self::ManageDataResultCode(ref v) => v.as_ref(),
68347            Self::ManageDataResult(ref v) => v.as_ref(),
68348            Self::BumpSequenceResultCode(ref v) => v.as_ref(),
68349            Self::BumpSequenceResult(ref v) => v.as_ref(),
68350            Self::CreateClaimableBalanceResultCode(ref v) => v.as_ref(),
68351            Self::CreateClaimableBalanceResult(ref v) => v.as_ref(),
68352            Self::ClaimClaimableBalanceResultCode(ref v) => v.as_ref(),
68353            Self::ClaimClaimableBalanceResult(ref v) => v.as_ref(),
68354            Self::BeginSponsoringFutureReservesResultCode(ref v) => v.as_ref(),
68355            Self::BeginSponsoringFutureReservesResult(ref v) => v.as_ref(),
68356            Self::EndSponsoringFutureReservesResultCode(ref v) => v.as_ref(),
68357            Self::EndSponsoringFutureReservesResult(ref v) => v.as_ref(),
68358            Self::RevokeSponsorshipResultCode(ref v) => v.as_ref(),
68359            Self::RevokeSponsorshipResult(ref v) => v.as_ref(),
68360            Self::ClawbackResultCode(ref v) => v.as_ref(),
68361            Self::ClawbackResult(ref v) => v.as_ref(),
68362            Self::ClawbackClaimableBalanceResultCode(ref v) => v.as_ref(),
68363            Self::ClawbackClaimableBalanceResult(ref v) => v.as_ref(),
68364            Self::SetTrustLineFlagsResultCode(ref v) => v.as_ref(),
68365            Self::SetTrustLineFlagsResult(ref v) => v.as_ref(),
68366            Self::LiquidityPoolDepositResultCode(ref v) => v.as_ref(),
68367            Self::LiquidityPoolDepositResult(ref v) => v.as_ref(),
68368            Self::LiquidityPoolWithdrawResultCode(ref v) => v.as_ref(),
68369            Self::LiquidityPoolWithdrawResult(ref v) => v.as_ref(),
68370            Self::InvokeHostFunctionResultCode(ref v) => v.as_ref(),
68371            Self::InvokeHostFunctionResult(ref v) => v.as_ref(),
68372            Self::ExtendFootprintTtlResultCode(ref v) => v.as_ref(),
68373            Self::ExtendFootprintTtlResult(ref v) => v.as_ref(),
68374            Self::RestoreFootprintResultCode(ref v) => v.as_ref(),
68375            Self::RestoreFootprintResult(ref v) => v.as_ref(),
68376            Self::OperationResultCode(ref v) => v.as_ref(),
68377            Self::OperationResult(ref v) => v.as_ref(),
68378            Self::OperationResultTr(ref v) => v.as_ref(),
68379            Self::TransactionResultCode(ref v) => v.as_ref(),
68380            Self::InnerTransactionResult(ref v) => v.as_ref(),
68381            Self::InnerTransactionResultResult(ref v) => v.as_ref(),
68382            Self::InnerTransactionResultExt(ref v) => v.as_ref(),
68383            Self::InnerTransactionResultPair(ref v) => v.as_ref(),
68384            Self::TransactionResult(ref v) => v.as_ref(),
68385            Self::TransactionResultResult(ref v) => v.as_ref(),
68386            Self::TransactionResultExt(ref v) => v.as_ref(),
68387            Self::Hash(ref v) => v.as_ref(),
68388            Self::Uint256(ref v) => v.as_ref(),
68389            Self::Uint32(ref v) => v.as_ref(),
68390            Self::Int32(ref v) => v.as_ref(),
68391            Self::Uint64(ref v) => v.as_ref(),
68392            Self::Int64(ref v) => v.as_ref(),
68393            Self::TimePoint(ref v) => v.as_ref(),
68394            Self::Duration(ref v) => v.as_ref(),
68395            Self::ExtensionPoint(ref v) => v.as_ref(),
68396            Self::CryptoKeyType(ref v) => v.as_ref(),
68397            Self::PublicKeyType(ref v) => v.as_ref(),
68398            Self::SignerKeyType(ref v) => v.as_ref(),
68399            Self::PublicKey(ref v) => v.as_ref(),
68400            Self::SignerKey(ref v) => v.as_ref(),
68401            Self::SignerKeyEd25519SignedPayload(ref v) => v.as_ref(),
68402            Self::Signature(ref v) => v.as_ref(),
68403            Self::SignatureHint(ref v) => v.as_ref(),
68404            Self::NodeId(ref v) => v.as_ref(),
68405            Self::AccountId(ref v) => v.as_ref(),
68406            Self::ContractId(ref v) => v.as_ref(),
68407            Self::Curve25519Secret(ref v) => v.as_ref(),
68408            Self::Curve25519Public(ref v) => v.as_ref(),
68409            Self::HmacSha256Key(ref v) => v.as_ref(),
68410            Self::HmacSha256Mac(ref v) => v.as_ref(),
68411            Self::ShortHashSeed(ref v) => v.as_ref(),
68412            Self::BinaryFuseFilterType(ref v) => v.as_ref(),
68413            Self::SerializedBinaryFuseFilter(ref v) => v.as_ref(),
68414            Self::PoolId(ref v) => v.as_ref(),
68415            Self::ClaimableBalanceIdType(ref v) => v.as_ref(),
68416            Self::ClaimableBalanceId(ref v) => v.as_ref(),
68417        }
68418    }
68419
68420    #[must_use]
68421    #[allow(clippy::too_many_lines)]
68422    pub const fn name(&self) -> &'static str {
68423        match self {
68424            Self::Value(_) => "Value",
68425            Self::ScpBallot(_) => "ScpBallot",
68426            Self::ScpStatementType(_) => "ScpStatementType",
68427            Self::ScpNomination(_) => "ScpNomination",
68428            Self::ScpStatement(_) => "ScpStatement",
68429            Self::ScpStatementPledges(_) => "ScpStatementPledges",
68430            Self::ScpStatementPrepare(_) => "ScpStatementPrepare",
68431            Self::ScpStatementConfirm(_) => "ScpStatementConfirm",
68432            Self::ScpStatementExternalize(_) => "ScpStatementExternalize",
68433            Self::ScpEnvelope(_) => "ScpEnvelope",
68434            Self::ScpQuorumSet(_) => "ScpQuorumSet",
68435            Self::ConfigSettingContractExecutionLanesV0(_) => {
68436                "ConfigSettingContractExecutionLanesV0"
68437            }
68438            Self::ConfigSettingContractComputeV0(_) => "ConfigSettingContractComputeV0",
68439            Self::ConfigSettingContractParallelComputeV0(_) => {
68440                "ConfigSettingContractParallelComputeV0"
68441            }
68442            Self::ConfigSettingContractLedgerCostV0(_) => "ConfigSettingContractLedgerCostV0",
68443            Self::ConfigSettingContractLedgerCostExtV0(_) => "ConfigSettingContractLedgerCostExtV0",
68444            Self::ConfigSettingContractHistoricalDataV0(_) => {
68445                "ConfigSettingContractHistoricalDataV0"
68446            }
68447            Self::ConfigSettingContractEventsV0(_) => "ConfigSettingContractEventsV0",
68448            Self::ConfigSettingContractBandwidthV0(_) => "ConfigSettingContractBandwidthV0",
68449            Self::ContractCostType(_) => "ContractCostType",
68450            Self::ContractCostParamEntry(_) => "ContractCostParamEntry",
68451            Self::StateArchivalSettings(_) => "StateArchivalSettings",
68452            Self::EvictionIterator(_) => "EvictionIterator",
68453            Self::ConfigSettingScpTiming(_) => "ConfigSettingScpTiming",
68454            Self::ContractCostParams(_) => "ContractCostParams",
68455            Self::ConfigSettingId(_) => "ConfigSettingId",
68456            Self::ConfigSettingEntry(_) => "ConfigSettingEntry",
68457            Self::ScEnvMetaKind(_) => "ScEnvMetaKind",
68458            Self::ScEnvMetaEntry(_) => "ScEnvMetaEntry",
68459            Self::ScEnvMetaEntryInterfaceVersion(_) => "ScEnvMetaEntryInterfaceVersion",
68460            Self::ScMetaV0(_) => "ScMetaV0",
68461            Self::ScMetaKind(_) => "ScMetaKind",
68462            Self::ScMetaEntry(_) => "ScMetaEntry",
68463            Self::ScSpecType(_) => "ScSpecType",
68464            Self::ScSpecTypeOption(_) => "ScSpecTypeOption",
68465            Self::ScSpecTypeResult(_) => "ScSpecTypeResult",
68466            Self::ScSpecTypeVec(_) => "ScSpecTypeVec",
68467            Self::ScSpecTypeMap(_) => "ScSpecTypeMap",
68468            Self::ScSpecTypeTuple(_) => "ScSpecTypeTuple",
68469            Self::ScSpecTypeBytesN(_) => "ScSpecTypeBytesN",
68470            Self::ScSpecTypeUdt(_) => "ScSpecTypeUdt",
68471            Self::ScSpecTypeDef(_) => "ScSpecTypeDef",
68472            Self::ScSpecUdtStructFieldV0(_) => "ScSpecUdtStructFieldV0",
68473            Self::ScSpecUdtStructV0(_) => "ScSpecUdtStructV0",
68474            Self::ScSpecUdtUnionCaseVoidV0(_) => "ScSpecUdtUnionCaseVoidV0",
68475            Self::ScSpecUdtUnionCaseTupleV0(_) => "ScSpecUdtUnionCaseTupleV0",
68476            Self::ScSpecUdtUnionCaseV0Kind(_) => "ScSpecUdtUnionCaseV0Kind",
68477            Self::ScSpecUdtUnionCaseV0(_) => "ScSpecUdtUnionCaseV0",
68478            Self::ScSpecUdtUnionV0(_) => "ScSpecUdtUnionV0",
68479            Self::ScSpecUdtEnumCaseV0(_) => "ScSpecUdtEnumCaseV0",
68480            Self::ScSpecUdtEnumV0(_) => "ScSpecUdtEnumV0",
68481            Self::ScSpecUdtErrorEnumCaseV0(_) => "ScSpecUdtErrorEnumCaseV0",
68482            Self::ScSpecUdtErrorEnumV0(_) => "ScSpecUdtErrorEnumV0",
68483            Self::ScSpecFunctionInputV0(_) => "ScSpecFunctionInputV0",
68484            Self::ScSpecFunctionV0(_) => "ScSpecFunctionV0",
68485            Self::ScSpecEventParamLocationV0(_) => "ScSpecEventParamLocationV0",
68486            Self::ScSpecEventParamV0(_) => "ScSpecEventParamV0",
68487            Self::ScSpecEventDataFormat(_) => "ScSpecEventDataFormat",
68488            Self::ScSpecEventV0(_) => "ScSpecEventV0",
68489            Self::ScSpecEntryKind(_) => "ScSpecEntryKind",
68490            Self::ScSpecEntry(_) => "ScSpecEntry",
68491            Self::ScValType(_) => "ScValType",
68492            Self::ScErrorType(_) => "ScErrorType",
68493            Self::ScErrorCode(_) => "ScErrorCode",
68494            Self::ScError(_) => "ScError",
68495            Self::UInt128Parts(_) => "UInt128Parts",
68496            Self::Int128Parts(_) => "Int128Parts",
68497            Self::UInt256Parts(_) => "UInt256Parts",
68498            Self::Int256Parts(_) => "Int256Parts",
68499            Self::ContractExecutableType(_) => "ContractExecutableType",
68500            Self::ContractExecutable(_) => "ContractExecutable",
68501            Self::ScAddressType(_) => "ScAddressType",
68502            Self::MuxedEd25519Account(_) => "MuxedEd25519Account",
68503            Self::ScAddress(_) => "ScAddress",
68504            Self::ScVec(_) => "ScVec",
68505            Self::ScMap(_) => "ScMap",
68506            Self::ScBytes(_) => "ScBytes",
68507            Self::ScString(_) => "ScString",
68508            Self::ScSymbol(_) => "ScSymbol",
68509            Self::ScNonceKey(_) => "ScNonceKey",
68510            Self::ScContractInstance(_) => "ScContractInstance",
68511            Self::ScVal(_) => "ScVal",
68512            Self::ScMapEntry(_) => "ScMapEntry",
68513            Self::LedgerCloseMetaBatch(_) => "LedgerCloseMetaBatch",
68514            Self::StoredTransactionSet(_) => "StoredTransactionSet",
68515            Self::StoredDebugTransactionSet(_) => "StoredDebugTransactionSet",
68516            Self::PersistedScpStateV0(_) => "PersistedScpStateV0",
68517            Self::PersistedScpStateV1(_) => "PersistedScpStateV1",
68518            Self::PersistedScpState(_) => "PersistedScpState",
68519            Self::Thresholds(_) => "Thresholds",
68520            Self::String32(_) => "String32",
68521            Self::String64(_) => "String64",
68522            Self::SequenceNumber(_) => "SequenceNumber",
68523            Self::DataValue(_) => "DataValue",
68524            Self::AssetCode4(_) => "AssetCode4",
68525            Self::AssetCode12(_) => "AssetCode12",
68526            Self::AssetType(_) => "AssetType",
68527            Self::AssetCode(_) => "AssetCode",
68528            Self::AlphaNum4(_) => "AlphaNum4",
68529            Self::AlphaNum12(_) => "AlphaNum12",
68530            Self::Asset(_) => "Asset",
68531            Self::Price(_) => "Price",
68532            Self::Liabilities(_) => "Liabilities",
68533            Self::ThresholdIndexes(_) => "ThresholdIndexes",
68534            Self::LedgerEntryType(_) => "LedgerEntryType",
68535            Self::Signer(_) => "Signer",
68536            Self::AccountFlags(_) => "AccountFlags",
68537            Self::SponsorshipDescriptor(_) => "SponsorshipDescriptor",
68538            Self::AccountEntryExtensionV3(_) => "AccountEntryExtensionV3",
68539            Self::AccountEntryExtensionV2(_) => "AccountEntryExtensionV2",
68540            Self::AccountEntryExtensionV2Ext(_) => "AccountEntryExtensionV2Ext",
68541            Self::AccountEntryExtensionV1(_) => "AccountEntryExtensionV1",
68542            Self::AccountEntryExtensionV1Ext(_) => "AccountEntryExtensionV1Ext",
68543            Self::AccountEntry(_) => "AccountEntry",
68544            Self::AccountEntryExt(_) => "AccountEntryExt",
68545            Self::TrustLineFlags(_) => "TrustLineFlags",
68546            Self::LiquidityPoolType(_) => "LiquidityPoolType",
68547            Self::TrustLineAsset(_) => "TrustLineAsset",
68548            Self::TrustLineEntryExtensionV2(_) => "TrustLineEntryExtensionV2",
68549            Self::TrustLineEntryExtensionV2Ext(_) => "TrustLineEntryExtensionV2Ext",
68550            Self::TrustLineEntry(_) => "TrustLineEntry",
68551            Self::TrustLineEntryExt(_) => "TrustLineEntryExt",
68552            Self::TrustLineEntryV1(_) => "TrustLineEntryV1",
68553            Self::TrustLineEntryV1Ext(_) => "TrustLineEntryV1Ext",
68554            Self::OfferEntryFlags(_) => "OfferEntryFlags",
68555            Self::OfferEntry(_) => "OfferEntry",
68556            Self::OfferEntryExt(_) => "OfferEntryExt",
68557            Self::DataEntry(_) => "DataEntry",
68558            Self::DataEntryExt(_) => "DataEntryExt",
68559            Self::ClaimPredicateType(_) => "ClaimPredicateType",
68560            Self::ClaimPredicate(_) => "ClaimPredicate",
68561            Self::ClaimantType(_) => "ClaimantType",
68562            Self::Claimant(_) => "Claimant",
68563            Self::ClaimantV0(_) => "ClaimantV0",
68564            Self::ClaimableBalanceFlags(_) => "ClaimableBalanceFlags",
68565            Self::ClaimableBalanceEntryExtensionV1(_) => "ClaimableBalanceEntryExtensionV1",
68566            Self::ClaimableBalanceEntryExtensionV1Ext(_) => "ClaimableBalanceEntryExtensionV1Ext",
68567            Self::ClaimableBalanceEntry(_) => "ClaimableBalanceEntry",
68568            Self::ClaimableBalanceEntryExt(_) => "ClaimableBalanceEntryExt",
68569            Self::LiquidityPoolConstantProductParameters(_) => {
68570                "LiquidityPoolConstantProductParameters"
68571            }
68572            Self::LiquidityPoolEntry(_) => "LiquidityPoolEntry",
68573            Self::LiquidityPoolEntryBody(_) => "LiquidityPoolEntryBody",
68574            Self::LiquidityPoolEntryConstantProduct(_) => "LiquidityPoolEntryConstantProduct",
68575            Self::ContractDataDurability(_) => "ContractDataDurability",
68576            Self::ContractDataEntry(_) => "ContractDataEntry",
68577            Self::ContractCodeCostInputs(_) => "ContractCodeCostInputs",
68578            Self::ContractCodeEntry(_) => "ContractCodeEntry",
68579            Self::ContractCodeEntryExt(_) => "ContractCodeEntryExt",
68580            Self::ContractCodeEntryV1(_) => "ContractCodeEntryV1",
68581            Self::TtlEntry(_) => "TtlEntry",
68582            Self::LedgerEntryExtensionV1(_) => "LedgerEntryExtensionV1",
68583            Self::LedgerEntryExtensionV1Ext(_) => "LedgerEntryExtensionV1Ext",
68584            Self::LedgerEntry(_) => "LedgerEntry",
68585            Self::LedgerEntryData(_) => "LedgerEntryData",
68586            Self::LedgerEntryExt(_) => "LedgerEntryExt",
68587            Self::LedgerKey(_) => "LedgerKey",
68588            Self::LedgerKeyAccount(_) => "LedgerKeyAccount",
68589            Self::LedgerKeyTrustLine(_) => "LedgerKeyTrustLine",
68590            Self::LedgerKeyOffer(_) => "LedgerKeyOffer",
68591            Self::LedgerKeyData(_) => "LedgerKeyData",
68592            Self::LedgerKeyClaimableBalance(_) => "LedgerKeyClaimableBalance",
68593            Self::LedgerKeyLiquidityPool(_) => "LedgerKeyLiquidityPool",
68594            Self::LedgerKeyContractData(_) => "LedgerKeyContractData",
68595            Self::LedgerKeyContractCode(_) => "LedgerKeyContractCode",
68596            Self::LedgerKeyConfigSetting(_) => "LedgerKeyConfigSetting",
68597            Self::LedgerKeyTtl(_) => "LedgerKeyTtl",
68598            Self::EnvelopeType(_) => "EnvelopeType",
68599            Self::BucketListType(_) => "BucketListType",
68600            Self::BucketEntryType(_) => "BucketEntryType",
68601            Self::HotArchiveBucketEntryType(_) => "HotArchiveBucketEntryType",
68602            Self::BucketMetadata(_) => "BucketMetadata",
68603            Self::BucketMetadataExt(_) => "BucketMetadataExt",
68604            Self::BucketEntry(_) => "BucketEntry",
68605            Self::HotArchiveBucketEntry(_) => "HotArchiveBucketEntry",
68606            Self::UpgradeType(_) => "UpgradeType",
68607            Self::StellarValueType(_) => "StellarValueType",
68608            Self::LedgerCloseValueSignature(_) => "LedgerCloseValueSignature",
68609            Self::StellarValue(_) => "StellarValue",
68610            Self::StellarValueExt(_) => "StellarValueExt",
68611            Self::LedgerHeaderFlags(_) => "LedgerHeaderFlags",
68612            Self::LedgerHeaderExtensionV1(_) => "LedgerHeaderExtensionV1",
68613            Self::LedgerHeaderExtensionV1Ext(_) => "LedgerHeaderExtensionV1Ext",
68614            Self::LedgerHeader(_) => "LedgerHeader",
68615            Self::LedgerHeaderExt(_) => "LedgerHeaderExt",
68616            Self::LedgerUpgradeType(_) => "LedgerUpgradeType",
68617            Self::ConfigUpgradeSetKey(_) => "ConfigUpgradeSetKey",
68618            Self::LedgerUpgrade(_) => "LedgerUpgrade",
68619            Self::ConfigUpgradeSet(_) => "ConfigUpgradeSet",
68620            Self::TxSetComponentType(_) => "TxSetComponentType",
68621            Self::DependentTxCluster(_) => "DependentTxCluster",
68622            Self::ParallelTxExecutionStage(_) => "ParallelTxExecutionStage",
68623            Self::ParallelTxsComponent(_) => "ParallelTxsComponent",
68624            Self::TxSetComponent(_) => "TxSetComponent",
68625            Self::TxSetComponentTxsMaybeDiscountedFee(_) => "TxSetComponentTxsMaybeDiscountedFee",
68626            Self::TransactionPhase(_) => "TransactionPhase",
68627            Self::TransactionSet(_) => "TransactionSet",
68628            Self::TransactionSetV1(_) => "TransactionSetV1",
68629            Self::GeneralizedTransactionSet(_) => "GeneralizedTransactionSet",
68630            Self::TransactionResultPair(_) => "TransactionResultPair",
68631            Self::TransactionResultSet(_) => "TransactionResultSet",
68632            Self::TransactionHistoryEntry(_) => "TransactionHistoryEntry",
68633            Self::TransactionHistoryEntryExt(_) => "TransactionHistoryEntryExt",
68634            Self::TransactionHistoryResultEntry(_) => "TransactionHistoryResultEntry",
68635            Self::TransactionHistoryResultEntryExt(_) => "TransactionHistoryResultEntryExt",
68636            Self::LedgerHeaderHistoryEntry(_) => "LedgerHeaderHistoryEntry",
68637            Self::LedgerHeaderHistoryEntryExt(_) => "LedgerHeaderHistoryEntryExt",
68638            Self::LedgerScpMessages(_) => "LedgerScpMessages",
68639            Self::ScpHistoryEntryV0(_) => "ScpHistoryEntryV0",
68640            Self::ScpHistoryEntry(_) => "ScpHistoryEntry",
68641            Self::LedgerEntryChangeType(_) => "LedgerEntryChangeType",
68642            Self::LedgerEntryChange(_) => "LedgerEntryChange",
68643            Self::LedgerEntryChanges(_) => "LedgerEntryChanges",
68644            Self::OperationMeta(_) => "OperationMeta",
68645            Self::TransactionMetaV1(_) => "TransactionMetaV1",
68646            Self::TransactionMetaV2(_) => "TransactionMetaV2",
68647            Self::ContractEventType(_) => "ContractEventType",
68648            Self::ContractEvent(_) => "ContractEvent",
68649            Self::ContractEventBody(_) => "ContractEventBody",
68650            Self::ContractEventV0(_) => "ContractEventV0",
68651            Self::DiagnosticEvent(_) => "DiagnosticEvent",
68652            Self::SorobanTransactionMetaExtV1(_) => "SorobanTransactionMetaExtV1",
68653            Self::SorobanTransactionMetaExt(_) => "SorobanTransactionMetaExt",
68654            Self::SorobanTransactionMeta(_) => "SorobanTransactionMeta",
68655            Self::TransactionMetaV3(_) => "TransactionMetaV3",
68656            Self::OperationMetaV2(_) => "OperationMetaV2",
68657            Self::SorobanTransactionMetaV2(_) => "SorobanTransactionMetaV2",
68658            Self::TransactionEventStage(_) => "TransactionEventStage",
68659            Self::TransactionEvent(_) => "TransactionEvent",
68660            Self::TransactionMetaV4(_) => "TransactionMetaV4",
68661            Self::InvokeHostFunctionSuccessPreImage(_) => "InvokeHostFunctionSuccessPreImage",
68662            Self::TransactionMeta(_) => "TransactionMeta",
68663            Self::TransactionResultMeta(_) => "TransactionResultMeta",
68664            Self::TransactionResultMetaV1(_) => "TransactionResultMetaV1",
68665            Self::UpgradeEntryMeta(_) => "UpgradeEntryMeta",
68666            Self::LedgerCloseMetaV0(_) => "LedgerCloseMetaV0",
68667            Self::LedgerCloseMetaExtV1(_) => "LedgerCloseMetaExtV1",
68668            Self::LedgerCloseMetaExt(_) => "LedgerCloseMetaExt",
68669            Self::LedgerCloseMetaV1(_) => "LedgerCloseMetaV1",
68670            Self::LedgerCloseMetaV2(_) => "LedgerCloseMetaV2",
68671            Self::LedgerCloseMeta(_) => "LedgerCloseMeta",
68672            Self::ErrorCode(_) => "ErrorCode",
68673            Self::SError(_) => "SError",
68674            Self::SendMore(_) => "SendMore",
68675            Self::SendMoreExtended(_) => "SendMoreExtended",
68676            Self::AuthCert(_) => "AuthCert",
68677            Self::Hello(_) => "Hello",
68678            Self::Auth(_) => "Auth",
68679            Self::IpAddrType(_) => "IpAddrType",
68680            Self::PeerAddress(_) => "PeerAddress",
68681            Self::PeerAddressIp(_) => "PeerAddressIp",
68682            Self::MessageType(_) => "MessageType",
68683            Self::DontHave(_) => "DontHave",
68684            Self::SurveyMessageCommandType(_) => "SurveyMessageCommandType",
68685            Self::SurveyMessageResponseType(_) => "SurveyMessageResponseType",
68686            Self::TimeSlicedSurveyStartCollectingMessage(_) => {
68687                "TimeSlicedSurveyStartCollectingMessage"
68688            }
68689            Self::SignedTimeSlicedSurveyStartCollectingMessage(_) => {
68690                "SignedTimeSlicedSurveyStartCollectingMessage"
68691            }
68692            Self::TimeSlicedSurveyStopCollectingMessage(_) => {
68693                "TimeSlicedSurveyStopCollectingMessage"
68694            }
68695            Self::SignedTimeSlicedSurveyStopCollectingMessage(_) => {
68696                "SignedTimeSlicedSurveyStopCollectingMessage"
68697            }
68698            Self::SurveyRequestMessage(_) => "SurveyRequestMessage",
68699            Self::TimeSlicedSurveyRequestMessage(_) => "TimeSlicedSurveyRequestMessage",
68700            Self::SignedTimeSlicedSurveyRequestMessage(_) => "SignedTimeSlicedSurveyRequestMessage",
68701            Self::EncryptedBody(_) => "EncryptedBody",
68702            Self::SurveyResponseMessage(_) => "SurveyResponseMessage",
68703            Self::TimeSlicedSurveyResponseMessage(_) => "TimeSlicedSurveyResponseMessage",
68704            Self::SignedTimeSlicedSurveyResponseMessage(_) => {
68705                "SignedTimeSlicedSurveyResponseMessage"
68706            }
68707            Self::PeerStats(_) => "PeerStats",
68708            Self::TimeSlicedNodeData(_) => "TimeSlicedNodeData",
68709            Self::TimeSlicedPeerData(_) => "TimeSlicedPeerData",
68710            Self::TimeSlicedPeerDataList(_) => "TimeSlicedPeerDataList",
68711            Self::TopologyResponseBodyV2(_) => "TopologyResponseBodyV2",
68712            Self::SurveyResponseBody(_) => "SurveyResponseBody",
68713            Self::TxAdvertVector(_) => "TxAdvertVector",
68714            Self::FloodAdvert(_) => "FloodAdvert",
68715            Self::TxDemandVector(_) => "TxDemandVector",
68716            Self::FloodDemand(_) => "FloodDemand",
68717            Self::StellarMessage(_) => "StellarMessage",
68718            Self::AuthenticatedMessage(_) => "AuthenticatedMessage",
68719            Self::AuthenticatedMessageV0(_) => "AuthenticatedMessageV0",
68720            Self::LiquidityPoolParameters(_) => "LiquidityPoolParameters",
68721            Self::MuxedAccount(_) => "MuxedAccount",
68722            Self::MuxedAccountMed25519(_) => "MuxedAccountMed25519",
68723            Self::DecoratedSignature(_) => "DecoratedSignature",
68724            Self::OperationType(_) => "OperationType",
68725            Self::CreateAccountOp(_) => "CreateAccountOp",
68726            Self::PaymentOp(_) => "PaymentOp",
68727            Self::PathPaymentStrictReceiveOp(_) => "PathPaymentStrictReceiveOp",
68728            Self::PathPaymentStrictSendOp(_) => "PathPaymentStrictSendOp",
68729            Self::ManageSellOfferOp(_) => "ManageSellOfferOp",
68730            Self::ManageBuyOfferOp(_) => "ManageBuyOfferOp",
68731            Self::CreatePassiveSellOfferOp(_) => "CreatePassiveSellOfferOp",
68732            Self::SetOptionsOp(_) => "SetOptionsOp",
68733            Self::ChangeTrustAsset(_) => "ChangeTrustAsset",
68734            Self::ChangeTrustOp(_) => "ChangeTrustOp",
68735            Self::AllowTrustOp(_) => "AllowTrustOp",
68736            Self::ManageDataOp(_) => "ManageDataOp",
68737            Self::BumpSequenceOp(_) => "BumpSequenceOp",
68738            Self::CreateClaimableBalanceOp(_) => "CreateClaimableBalanceOp",
68739            Self::ClaimClaimableBalanceOp(_) => "ClaimClaimableBalanceOp",
68740            Self::BeginSponsoringFutureReservesOp(_) => "BeginSponsoringFutureReservesOp",
68741            Self::RevokeSponsorshipType(_) => "RevokeSponsorshipType",
68742            Self::RevokeSponsorshipOp(_) => "RevokeSponsorshipOp",
68743            Self::RevokeSponsorshipOpSigner(_) => "RevokeSponsorshipOpSigner",
68744            Self::ClawbackOp(_) => "ClawbackOp",
68745            Self::ClawbackClaimableBalanceOp(_) => "ClawbackClaimableBalanceOp",
68746            Self::SetTrustLineFlagsOp(_) => "SetTrustLineFlagsOp",
68747            Self::LiquidityPoolDepositOp(_) => "LiquidityPoolDepositOp",
68748            Self::LiquidityPoolWithdrawOp(_) => "LiquidityPoolWithdrawOp",
68749            Self::HostFunctionType(_) => "HostFunctionType",
68750            Self::ContractIdPreimageType(_) => "ContractIdPreimageType",
68751            Self::ContractIdPreimage(_) => "ContractIdPreimage",
68752            Self::ContractIdPreimageFromAddress(_) => "ContractIdPreimageFromAddress",
68753            Self::CreateContractArgs(_) => "CreateContractArgs",
68754            Self::CreateContractArgsV2(_) => "CreateContractArgsV2",
68755            Self::InvokeContractArgs(_) => "InvokeContractArgs",
68756            Self::HostFunction(_) => "HostFunction",
68757            Self::SorobanAuthorizedFunctionType(_) => "SorobanAuthorizedFunctionType",
68758            Self::SorobanAuthorizedFunction(_) => "SorobanAuthorizedFunction",
68759            Self::SorobanAuthorizedInvocation(_) => "SorobanAuthorizedInvocation",
68760            Self::SorobanAddressCredentials(_) => "SorobanAddressCredentials",
68761            Self::SorobanCredentialsType(_) => "SorobanCredentialsType",
68762            Self::SorobanCredentials(_) => "SorobanCredentials",
68763            Self::SorobanAuthorizationEntry(_) => "SorobanAuthorizationEntry",
68764            Self::SorobanAuthorizationEntries(_) => "SorobanAuthorizationEntries",
68765            Self::InvokeHostFunctionOp(_) => "InvokeHostFunctionOp",
68766            Self::ExtendFootprintTtlOp(_) => "ExtendFootprintTtlOp",
68767            Self::RestoreFootprintOp(_) => "RestoreFootprintOp",
68768            Self::Operation(_) => "Operation",
68769            Self::OperationBody(_) => "OperationBody",
68770            Self::HashIdPreimage(_) => "HashIdPreimage",
68771            Self::HashIdPreimageOperationId(_) => "HashIdPreimageOperationId",
68772            Self::HashIdPreimageRevokeId(_) => "HashIdPreimageRevokeId",
68773            Self::HashIdPreimageContractId(_) => "HashIdPreimageContractId",
68774            Self::HashIdPreimageSorobanAuthorization(_) => "HashIdPreimageSorobanAuthorization",
68775            Self::MemoType(_) => "MemoType",
68776            Self::Memo(_) => "Memo",
68777            Self::TimeBounds(_) => "TimeBounds",
68778            Self::LedgerBounds(_) => "LedgerBounds",
68779            Self::PreconditionsV2(_) => "PreconditionsV2",
68780            Self::PreconditionType(_) => "PreconditionType",
68781            Self::Preconditions(_) => "Preconditions",
68782            Self::LedgerFootprint(_) => "LedgerFootprint",
68783            Self::SorobanResources(_) => "SorobanResources",
68784            Self::SorobanResourcesExtV0(_) => "SorobanResourcesExtV0",
68785            Self::SorobanTransactionData(_) => "SorobanTransactionData",
68786            Self::SorobanTransactionDataExt(_) => "SorobanTransactionDataExt",
68787            Self::TransactionV0(_) => "TransactionV0",
68788            Self::TransactionV0Ext(_) => "TransactionV0Ext",
68789            Self::TransactionV0Envelope(_) => "TransactionV0Envelope",
68790            Self::Transaction(_) => "Transaction",
68791            Self::TransactionExt(_) => "TransactionExt",
68792            Self::TransactionV1Envelope(_) => "TransactionV1Envelope",
68793            Self::FeeBumpTransaction(_) => "FeeBumpTransaction",
68794            Self::FeeBumpTransactionInnerTx(_) => "FeeBumpTransactionInnerTx",
68795            Self::FeeBumpTransactionExt(_) => "FeeBumpTransactionExt",
68796            Self::FeeBumpTransactionEnvelope(_) => "FeeBumpTransactionEnvelope",
68797            Self::TransactionEnvelope(_) => "TransactionEnvelope",
68798            Self::TransactionSignaturePayload(_) => "TransactionSignaturePayload",
68799            Self::TransactionSignaturePayloadTaggedTransaction(_) => {
68800                "TransactionSignaturePayloadTaggedTransaction"
68801            }
68802            Self::ClaimAtomType(_) => "ClaimAtomType",
68803            Self::ClaimOfferAtomV0(_) => "ClaimOfferAtomV0",
68804            Self::ClaimOfferAtom(_) => "ClaimOfferAtom",
68805            Self::ClaimLiquidityAtom(_) => "ClaimLiquidityAtom",
68806            Self::ClaimAtom(_) => "ClaimAtom",
68807            Self::CreateAccountResultCode(_) => "CreateAccountResultCode",
68808            Self::CreateAccountResult(_) => "CreateAccountResult",
68809            Self::PaymentResultCode(_) => "PaymentResultCode",
68810            Self::PaymentResult(_) => "PaymentResult",
68811            Self::PathPaymentStrictReceiveResultCode(_) => "PathPaymentStrictReceiveResultCode",
68812            Self::SimplePaymentResult(_) => "SimplePaymentResult",
68813            Self::PathPaymentStrictReceiveResult(_) => "PathPaymentStrictReceiveResult",
68814            Self::PathPaymentStrictReceiveResultSuccess(_) => {
68815                "PathPaymentStrictReceiveResultSuccess"
68816            }
68817            Self::PathPaymentStrictSendResultCode(_) => "PathPaymentStrictSendResultCode",
68818            Self::PathPaymentStrictSendResult(_) => "PathPaymentStrictSendResult",
68819            Self::PathPaymentStrictSendResultSuccess(_) => "PathPaymentStrictSendResultSuccess",
68820            Self::ManageSellOfferResultCode(_) => "ManageSellOfferResultCode",
68821            Self::ManageOfferEffect(_) => "ManageOfferEffect",
68822            Self::ManageOfferSuccessResult(_) => "ManageOfferSuccessResult",
68823            Self::ManageOfferSuccessResultOffer(_) => "ManageOfferSuccessResultOffer",
68824            Self::ManageSellOfferResult(_) => "ManageSellOfferResult",
68825            Self::ManageBuyOfferResultCode(_) => "ManageBuyOfferResultCode",
68826            Self::ManageBuyOfferResult(_) => "ManageBuyOfferResult",
68827            Self::SetOptionsResultCode(_) => "SetOptionsResultCode",
68828            Self::SetOptionsResult(_) => "SetOptionsResult",
68829            Self::ChangeTrustResultCode(_) => "ChangeTrustResultCode",
68830            Self::ChangeTrustResult(_) => "ChangeTrustResult",
68831            Self::AllowTrustResultCode(_) => "AllowTrustResultCode",
68832            Self::AllowTrustResult(_) => "AllowTrustResult",
68833            Self::AccountMergeResultCode(_) => "AccountMergeResultCode",
68834            Self::AccountMergeResult(_) => "AccountMergeResult",
68835            Self::InflationResultCode(_) => "InflationResultCode",
68836            Self::InflationPayout(_) => "InflationPayout",
68837            Self::InflationResult(_) => "InflationResult",
68838            Self::ManageDataResultCode(_) => "ManageDataResultCode",
68839            Self::ManageDataResult(_) => "ManageDataResult",
68840            Self::BumpSequenceResultCode(_) => "BumpSequenceResultCode",
68841            Self::BumpSequenceResult(_) => "BumpSequenceResult",
68842            Self::CreateClaimableBalanceResultCode(_) => "CreateClaimableBalanceResultCode",
68843            Self::CreateClaimableBalanceResult(_) => "CreateClaimableBalanceResult",
68844            Self::ClaimClaimableBalanceResultCode(_) => "ClaimClaimableBalanceResultCode",
68845            Self::ClaimClaimableBalanceResult(_) => "ClaimClaimableBalanceResult",
68846            Self::BeginSponsoringFutureReservesResultCode(_) => {
68847                "BeginSponsoringFutureReservesResultCode"
68848            }
68849            Self::BeginSponsoringFutureReservesResult(_) => "BeginSponsoringFutureReservesResult",
68850            Self::EndSponsoringFutureReservesResultCode(_) => {
68851                "EndSponsoringFutureReservesResultCode"
68852            }
68853            Self::EndSponsoringFutureReservesResult(_) => "EndSponsoringFutureReservesResult",
68854            Self::RevokeSponsorshipResultCode(_) => "RevokeSponsorshipResultCode",
68855            Self::RevokeSponsorshipResult(_) => "RevokeSponsorshipResult",
68856            Self::ClawbackResultCode(_) => "ClawbackResultCode",
68857            Self::ClawbackResult(_) => "ClawbackResult",
68858            Self::ClawbackClaimableBalanceResultCode(_) => "ClawbackClaimableBalanceResultCode",
68859            Self::ClawbackClaimableBalanceResult(_) => "ClawbackClaimableBalanceResult",
68860            Self::SetTrustLineFlagsResultCode(_) => "SetTrustLineFlagsResultCode",
68861            Self::SetTrustLineFlagsResult(_) => "SetTrustLineFlagsResult",
68862            Self::LiquidityPoolDepositResultCode(_) => "LiquidityPoolDepositResultCode",
68863            Self::LiquidityPoolDepositResult(_) => "LiquidityPoolDepositResult",
68864            Self::LiquidityPoolWithdrawResultCode(_) => "LiquidityPoolWithdrawResultCode",
68865            Self::LiquidityPoolWithdrawResult(_) => "LiquidityPoolWithdrawResult",
68866            Self::InvokeHostFunctionResultCode(_) => "InvokeHostFunctionResultCode",
68867            Self::InvokeHostFunctionResult(_) => "InvokeHostFunctionResult",
68868            Self::ExtendFootprintTtlResultCode(_) => "ExtendFootprintTtlResultCode",
68869            Self::ExtendFootprintTtlResult(_) => "ExtendFootprintTtlResult",
68870            Self::RestoreFootprintResultCode(_) => "RestoreFootprintResultCode",
68871            Self::RestoreFootprintResult(_) => "RestoreFootprintResult",
68872            Self::OperationResultCode(_) => "OperationResultCode",
68873            Self::OperationResult(_) => "OperationResult",
68874            Self::OperationResultTr(_) => "OperationResultTr",
68875            Self::TransactionResultCode(_) => "TransactionResultCode",
68876            Self::InnerTransactionResult(_) => "InnerTransactionResult",
68877            Self::InnerTransactionResultResult(_) => "InnerTransactionResultResult",
68878            Self::InnerTransactionResultExt(_) => "InnerTransactionResultExt",
68879            Self::InnerTransactionResultPair(_) => "InnerTransactionResultPair",
68880            Self::TransactionResult(_) => "TransactionResult",
68881            Self::TransactionResultResult(_) => "TransactionResultResult",
68882            Self::TransactionResultExt(_) => "TransactionResultExt",
68883            Self::Hash(_) => "Hash",
68884            Self::Uint256(_) => "Uint256",
68885            Self::Uint32(_) => "Uint32",
68886            Self::Int32(_) => "Int32",
68887            Self::Uint64(_) => "Uint64",
68888            Self::Int64(_) => "Int64",
68889            Self::TimePoint(_) => "TimePoint",
68890            Self::Duration(_) => "Duration",
68891            Self::ExtensionPoint(_) => "ExtensionPoint",
68892            Self::CryptoKeyType(_) => "CryptoKeyType",
68893            Self::PublicKeyType(_) => "PublicKeyType",
68894            Self::SignerKeyType(_) => "SignerKeyType",
68895            Self::PublicKey(_) => "PublicKey",
68896            Self::SignerKey(_) => "SignerKey",
68897            Self::SignerKeyEd25519SignedPayload(_) => "SignerKeyEd25519SignedPayload",
68898            Self::Signature(_) => "Signature",
68899            Self::SignatureHint(_) => "SignatureHint",
68900            Self::NodeId(_) => "NodeId",
68901            Self::AccountId(_) => "AccountId",
68902            Self::ContractId(_) => "ContractId",
68903            Self::Curve25519Secret(_) => "Curve25519Secret",
68904            Self::Curve25519Public(_) => "Curve25519Public",
68905            Self::HmacSha256Key(_) => "HmacSha256Key",
68906            Self::HmacSha256Mac(_) => "HmacSha256Mac",
68907            Self::ShortHashSeed(_) => "ShortHashSeed",
68908            Self::BinaryFuseFilterType(_) => "BinaryFuseFilterType",
68909            Self::SerializedBinaryFuseFilter(_) => "SerializedBinaryFuseFilter",
68910            Self::PoolId(_) => "PoolId",
68911            Self::ClaimableBalanceIdType(_) => "ClaimableBalanceIdType",
68912            Self::ClaimableBalanceId(_) => "ClaimableBalanceId",
68913        }
68914    }
68915
68916    #[must_use]
68917    #[allow(clippy::too_many_lines)]
68918    pub const fn variants() -> [TypeVariant; 463] {
68919        Self::VARIANTS
68920    }
68921
68922    #[must_use]
68923    #[allow(clippy::too_many_lines)]
68924    pub const fn variant(&self) -> TypeVariant {
68925        match self {
68926            Self::Value(_) => TypeVariant::Value,
68927            Self::ScpBallot(_) => TypeVariant::ScpBallot,
68928            Self::ScpStatementType(_) => TypeVariant::ScpStatementType,
68929            Self::ScpNomination(_) => TypeVariant::ScpNomination,
68930            Self::ScpStatement(_) => TypeVariant::ScpStatement,
68931            Self::ScpStatementPledges(_) => TypeVariant::ScpStatementPledges,
68932            Self::ScpStatementPrepare(_) => TypeVariant::ScpStatementPrepare,
68933            Self::ScpStatementConfirm(_) => TypeVariant::ScpStatementConfirm,
68934            Self::ScpStatementExternalize(_) => TypeVariant::ScpStatementExternalize,
68935            Self::ScpEnvelope(_) => TypeVariant::ScpEnvelope,
68936            Self::ScpQuorumSet(_) => TypeVariant::ScpQuorumSet,
68937            Self::ConfigSettingContractExecutionLanesV0(_) => {
68938                TypeVariant::ConfigSettingContractExecutionLanesV0
68939            }
68940            Self::ConfigSettingContractComputeV0(_) => TypeVariant::ConfigSettingContractComputeV0,
68941            Self::ConfigSettingContractParallelComputeV0(_) => {
68942                TypeVariant::ConfigSettingContractParallelComputeV0
68943            }
68944            Self::ConfigSettingContractLedgerCostV0(_) => {
68945                TypeVariant::ConfigSettingContractLedgerCostV0
68946            }
68947            Self::ConfigSettingContractLedgerCostExtV0(_) => {
68948                TypeVariant::ConfigSettingContractLedgerCostExtV0
68949            }
68950            Self::ConfigSettingContractHistoricalDataV0(_) => {
68951                TypeVariant::ConfigSettingContractHistoricalDataV0
68952            }
68953            Self::ConfigSettingContractEventsV0(_) => TypeVariant::ConfigSettingContractEventsV0,
68954            Self::ConfigSettingContractBandwidthV0(_) => {
68955                TypeVariant::ConfigSettingContractBandwidthV0
68956            }
68957            Self::ContractCostType(_) => TypeVariant::ContractCostType,
68958            Self::ContractCostParamEntry(_) => TypeVariant::ContractCostParamEntry,
68959            Self::StateArchivalSettings(_) => TypeVariant::StateArchivalSettings,
68960            Self::EvictionIterator(_) => TypeVariant::EvictionIterator,
68961            Self::ConfigSettingScpTiming(_) => TypeVariant::ConfigSettingScpTiming,
68962            Self::ContractCostParams(_) => TypeVariant::ContractCostParams,
68963            Self::ConfigSettingId(_) => TypeVariant::ConfigSettingId,
68964            Self::ConfigSettingEntry(_) => TypeVariant::ConfigSettingEntry,
68965            Self::ScEnvMetaKind(_) => TypeVariant::ScEnvMetaKind,
68966            Self::ScEnvMetaEntry(_) => TypeVariant::ScEnvMetaEntry,
68967            Self::ScEnvMetaEntryInterfaceVersion(_) => TypeVariant::ScEnvMetaEntryInterfaceVersion,
68968            Self::ScMetaV0(_) => TypeVariant::ScMetaV0,
68969            Self::ScMetaKind(_) => TypeVariant::ScMetaKind,
68970            Self::ScMetaEntry(_) => TypeVariant::ScMetaEntry,
68971            Self::ScSpecType(_) => TypeVariant::ScSpecType,
68972            Self::ScSpecTypeOption(_) => TypeVariant::ScSpecTypeOption,
68973            Self::ScSpecTypeResult(_) => TypeVariant::ScSpecTypeResult,
68974            Self::ScSpecTypeVec(_) => TypeVariant::ScSpecTypeVec,
68975            Self::ScSpecTypeMap(_) => TypeVariant::ScSpecTypeMap,
68976            Self::ScSpecTypeTuple(_) => TypeVariant::ScSpecTypeTuple,
68977            Self::ScSpecTypeBytesN(_) => TypeVariant::ScSpecTypeBytesN,
68978            Self::ScSpecTypeUdt(_) => TypeVariant::ScSpecTypeUdt,
68979            Self::ScSpecTypeDef(_) => TypeVariant::ScSpecTypeDef,
68980            Self::ScSpecUdtStructFieldV0(_) => TypeVariant::ScSpecUdtStructFieldV0,
68981            Self::ScSpecUdtStructV0(_) => TypeVariant::ScSpecUdtStructV0,
68982            Self::ScSpecUdtUnionCaseVoidV0(_) => TypeVariant::ScSpecUdtUnionCaseVoidV0,
68983            Self::ScSpecUdtUnionCaseTupleV0(_) => TypeVariant::ScSpecUdtUnionCaseTupleV0,
68984            Self::ScSpecUdtUnionCaseV0Kind(_) => TypeVariant::ScSpecUdtUnionCaseV0Kind,
68985            Self::ScSpecUdtUnionCaseV0(_) => TypeVariant::ScSpecUdtUnionCaseV0,
68986            Self::ScSpecUdtUnionV0(_) => TypeVariant::ScSpecUdtUnionV0,
68987            Self::ScSpecUdtEnumCaseV0(_) => TypeVariant::ScSpecUdtEnumCaseV0,
68988            Self::ScSpecUdtEnumV0(_) => TypeVariant::ScSpecUdtEnumV0,
68989            Self::ScSpecUdtErrorEnumCaseV0(_) => TypeVariant::ScSpecUdtErrorEnumCaseV0,
68990            Self::ScSpecUdtErrorEnumV0(_) => TypeVariant::ScSpecUdtErrorEnumV0,
68991            Self::ScSpecFunctionInputV0(_) => TypeVariant::ScSpecFunctionInputV0,
68992            Self::ScSpecFunctionV0(_) => TypeVariant::ScSpecFunctionV0,
68993            Self::ScSpecEventParamLocationV0(_) => TypeVariant::ScSpecEventParamLocationV0,
68994            Self::ScSpecEventParamV0(_) => TypeVariant::ScSpecEventParamV0,
68995            Self::ScSpecEventDataFormat(_) => TypeVariant::ScSpecEventDataFormat,
68996            Self::ScSpecEventV0(_) => TypeVariant::ScSpecEventV0,
68997            Self::ScSpecEntryKind(_) => TypeVariant::ScSpecEntryKind,
68998            Self::ScSpecEntry(_) => TypeVariant::ScSpecEntry,
68999            Self::ScValType(_) => TypeVariant::ScValType,
69000            Self::ScErrorType(_) => TypeVariant::ScErrorType,
69001            Self::ScErrorCode(_) => TypeVariant::ScErrorCode,
69002            Self::ScError(_) => TypeVariant::ScError,
69003            Self::UInt128Parts(_) => TypeVariant::UInt128Parts,
69004            Self::Int128Parts(_) => TypeVariant::Int128Parts,
69005            Self::UInt256Parts(_) => TypeVariant::UInt256Parts,
69006            Self::Int256Parts(_) => TypeVariant::Int256Parts,
69007            Self::ContractExecutableType(_) => TypeVariant::ContractExecutableType,
69008            Self::ContractExecutable(_) => TypeVariant::ContractExecutable,
69009            Self::ScAddressType(_) => TypeVariant::ScAddressType,
69010            Self::MuxedEd25519Account(_) => TypeVariant::MuxedEd25519Account,
69011            Self::ScAddress(_) => TypeVariant::ScAddress,
69012            Self::ScVec(_) => TypeVariant::ScVec,
69013            Self::ScMap(_) => TypeVariant::ScMap,
69014            Self::ScBytes(_) => TypeVariant::ScBytes,
69015            Self::ScString(_) => TypeVariant::ScString,
69016            Self::ScSymbol(_) => TypeVariant::ScSymbol,
69017            Self::ScNonceKey(_) => TypeVariant::ScNonceKey,
69018            Self::ScContractInstance(_) => TypeVariant::ScContractInstance,
69019            Self::ScVal(_) => TypeVariant::ScVal,
69020            Self::ScMapEntry(_) => TypeVariant::ScMapEntry,
69021            Self::LedgerCloseMetaBatch(_) => TypeVariant::LedgerCloseMetaBatch,
69022            Self::StoredTransactionSet(_) => TypeVariant::StoredTransactionSet,
69023            Self::StoredDebugTransactionSet(_) => TypeVariant::StoredDebugTransactionSet,
69024            Self::PersistedScpStateV0(_) => TypeVariant::PersistedScpStateV0,
69025            Self::PersistedScpStateV1(_) => TypeVariant::PersistedScpStateV1,
69026            Self::PersistedScpState(_) => TypeVariant::PersistedScpState,
69027            Self::Thresholds(_) => TypeVariant::Thresholds,
69028            Self::String32(_) => TypeVariant::String32,
69029            Self::String64(_) => TypeVariant::String64,
69030            Self::SequenceNumber(_) => TypeVariant::SequenceNumber,
69031            Self::DataValue(_) => TypeVariant::DataValue,
69032            Self::AssetCode4(_) => TypeVariant::AssetCode4,
69033            Self::AssetCode12(_) => TypeVariant::AssetCode12,
69034            Self::AssetType(_) => TypeVariant::AssetType,
69035            Self::AssetCode(_) => TypeVariant::AssetCode,
69036            Self::AlphaNum4(_) => TypeVariant::AlphaNum4,
69037            Self::AlphaNum12(_) => TypeVariant::AlphaNum12,
69038            Self::Asset(_) => TypeVariant::Asset,
69039            Self::Price(_) => TypeVariant::Price,
69040            Self::Liabilities(_) => TypeVariant::Liabilities,
69041            Self::ThresholdIndexes(_) => TypeVariant::ThresholdIndexes,
69042            Self::LedgerEntryType(_) => TypeVariant::LedgerEntryType,
69043            Self::Signer(_) => TypeVariant::Signer,
69044            Self::AccountFlags(_) => TypeVariant::AccountFlags,
69045            Self::SponsorshipDescriptor(_) => TypeVariant::SponsorshipDescriptor,
69046            Self::AccountEntryExtensionV3(_) => TypeVariant::AccountEntryExtensionV3,
69047            Self::AccountEntryExtensionV2(_) => TypeVariant::AccountEntryExtensionV2,
69048            Self::AccountEntryExtensionV2Ext(_) => TypeVariant::AccountEntryExtensionV2Ext,
69049            Self::AccountEntryExtensionV1(_) => TypeVariant::AccountEntryExtensionV1,
69050            Self::AccountEntryExtensionV1Ext(_) => TypeVariant::AccountEntryExtensionV1Ext,
69051            Self::AccountEntry(_) => TypeVariant::AccountEntry,
69052            Self::AccountEntryExt(_) => TypeVariant::AccountEntryExt,
69053            Self::TrustLineFlags(_) => TypeVariant::TrustLineFlags,
69054            Self::LiquidityPoolType(_) => TypeVariant::LiquidityPoolType,
69055            Self::TrustLineAsset(_) => TypeVariant::TrustLineAsset,
69056            Self::TrustLineEntryExtensionV2(_) => TypeVariant::TrustLineEntryExtensionV2,
69057            Self::TrustLineEntryExtensionV2Ext(_) => TypeVariant::TrustLineEntryExtensionV2Ext,
69058            Self::TrustLineEntry(_) => TypeVariant::TrustLineEntry,
69059            Self::TrustLineEntryExt(_) => TypeVariant::TrustLineEntryExt,
69060            Self::TrustLineEntryV1(_) => TypeVariant::TrustLineEntryV1,
69061            Self::TrustLineEntryV1Ext(_) => TypeVariant::TrustLineEntryV1Ext,
69062            Self::OfferEntryFlags(_) => TypeVariant::OfferEntryFlags,
69063            Self::OfferEntry(_) => TypeVariant::OfferEntry,
69064            Self::OfferEntryExt(_) => TypeVariant::OfferEntryExt,
69065            Self::DataEntry(_) => TypeVariant::DataEntry,
69066            Self::DataEntryExt(_) => TypeVariant::DataEntryExt,
69067            Self::ClaimPredicateType(_) => TypeVariant::ClaimPredicateType,
69068            Self::ClaimPredicate(_) => TypeVariant::ClaimPredicate,
69069            Self::ClaimantType(_) => TypeVariant::ClaimantType,
69070            Self::Claimant(_) => TypeVariant::Claimant,
69071            Self::ClaimantV0(_) => TypeVariant::ClaimantV0,
69072            Self::ClaimableBalanceFlags(_) => TypeVariant::ClaimableBalanceFlags,
69073            Self::ClaimableBalanceEntryExtensionV1(_) => {
69074                TypeVariant::ClaimableBalanceEntryExtensionV1
69075            }
69076            Self::ClaimableBalanceEntryExtensionV1Ext(_) => {
69077                TypeVariant::ClaimableBalanceEntryExtensionV1Ext
69078            }
69079            Self::ClaimableBalanceEntry(_) => TypeVariant::ClaimableBalanceEntry,
69080            Self::ClaimableBalanceEntryExt(_) => TypeVariant::ClaimableBalanceEntryExt,
69081            Self::LiquidityPoolConstantProductParameters(_) => {
69082                TypeVariant::LiquidityPoolConstantProductParameters
69083            }
69084            Self::LiquidityPoolEntry(_) => TypeVariant::LiquidityPoolEntry,
69085            Self::LiquidityPoolEntryBody(_) => TypeVariant::LiquidityPoolEntryBody,
69086            Self::LiquidityPoolEntryConstantProduct(_) => {
69087                TypeVariant::LiquidityPoolEntryConstantProduct
69088            }
69089            Self::ContractDataDurability(_) => TypeVariant::ContractDataDurability,
69090            Self::ContractDataEntry(_) => TypeVariant::ContractDataEntry,
69091            Self::ContractCodeCostInputs(_) => TypeVariant::ContractCodeCostInputs,
69092            Self::ContractCodeEntry(_) => TypeVariant::ContractCodeEntry,
69093            Self::ContractCodeEntryExt(_) => TypeVariant::ContractCodeEntryExt,
69094            Self::ContractCodeEntryV1(_) => TypeVariant::ContractCodeEntryV1,
69095            Self::TtlEntry(_) => TypeVariant::TtlEntry,
69096            Self::LedgerEntryExtensionV1(_) => TypeVariant::LedgerEntryExtensionV1,
69097            Self::LedgerEntryExtensionV1Ext(_) => TypeVariant::LedgerEntryExtensionV1Ext,
69098            Self::LedgerEntry(_) => TypeVariant::LedgerEntry,
69099            Self::LedgerEntryData(_) => TypeVariant::LedgerEntryData,
69100            Self::LedgerEntryExt(_) => TypeVariant::LedgerEntryExt,
69101            Self::LedgerKey(_) => TypeVariant::LedgerKey,
69102            Self::LedgerKeyAccount(_) => TypeVariant::LedgerKeyAccount,
69103            Self::LedgerKeyTrustLine(_) => TypeVariant::LedgerKeyTrustLine,
69104            Self::LedgerKeyOffer(_) => TypeVariant::LedgerKeyOffer,
69105            Self::LedgerKeyData(_) => TypeVariant::LedgerKeyData,
69106            Self::LedgerKeyClaimableBalance(_) => TypeVariant::LedgerKeyClaimableBalance,
69107            Self::LedgerKeyLiquidityPool(_) => TypeVariant::LedgerKeyLiquidityPool,
69108            Self::LedgerKeyContractData(_) => TypeVariant::LedgerKeyContractData,
69109            Self::LedgerKeyContractCode(_) => TypeVariant::LedgerKeyContractCode,
69110            Self::LedgerKeyConfigSetting(_) => TypeVariant::LedgerKeyConfigSetting,
69111            Self::LedgerKeyTtl(_) => TypeVariant::LedgerKeyTtl,
69112            Self::EnvelopeType(_) => TypeVariant::EnvelopeType,
69113            Self::BucketListType(_) => TypeVariant::BucketListType,
69114            Self::BucketEntryType(_) => TypeVariant::BucketEntryType,
69115            Self::HotArchiveBucketEntryType(_) => TypeVariant::HotArchiveBucketEntryType,
69116            Self::BucketMetadata(_) => TypeVariant::BucketMetadata,
69117            Self::BucketMetadataExt(_) => TypeVariant::BucketMetadataExt,
69118            Self::BucketEntry(_) => TypeVariant::BucketEntry,
69119            Self::HotArchiveBucketEntry(_) => TypeVariant::HotArchiveBucketEntry,
69120            Self::UpgradeType(_) => TypeVariant::UpgradeType,
69121            Self::StellarValueType(_) => TypeVariant::StellarValueType,
69122            Self::LedgerCloseValueSignature(_) => TypeVariant::LedgerCloseValueSignature,
69123            Self::StellarValue(_) => TypeVariant::StellarValue,
69124            Self::StellarValueExt(_) => TypeVariant::StellarValueExt,
69125            Self::LedgerHeaderFlags(_) => TypeVariant::LedgerHeaderFlags,
69126            Self::LedgerHeaderExtensionV1(_) => TypeVariant::LedgerHeaderExtensionV1,
69127            Self::LedgerHeaderExtensionV1Ext(_) => TypeVariant::LedgerHeaderExtensionV1Ext,
69128            Self::LedgerHeader(_) => TypeVariant::LedgerHeader,
69129            Self::LedgerHeaderExt(_) => TypeVariant::LedgerHeaderExt,
69130            Self::LedgerUpgradeType(_) => TypeVariant::LedgerUpgradeType,
69131            Self::ConfigUpgradeSetKey(_) => TypeVariant::ConfigUpgradeSetKey,
69132            Self::LedgerUpgrade(_) => TypeVariant::LedgerUpgrade,
69133            Self::ConfigUpgradeSet(_) => TypeVariant::ConfigUpgradeSet,
69134            Self::TxSetComponentType(_) => TypeVariant::TxSetComponentType,
69135            Self::DependentTxCluster(_) => TypeVariant::DependentTxCluster,
69136            Self::ParallelTxExecutionStage(_) => TypeVariant::ParallelTxExecutionStage,
69137            Self::ParallelTxsComponent(_) => TypeVariant::ParallelTxsComponent,
69138            Self::TxSetComponent(_) => TypeVariant::TxSetComponent,
69139            Self::TxSetComponentTxsMaybeDiscountedFee(_) => {
69140                TypeVariant::TxSetComponentTxsMaybeDiscountedFee
69141            }
69142            Self::TransactionPhase(_) => TypeVariant::TransactionPhase,
69143            Self::TransactionSet(_) => TypeVariant::TransactionSet,
69144            Self::TransactionSetV1(_) => TypeVariant::TransactionSetV1,
69145            Self::GeneralizedTransactionSet(_) => TypeVariant::GeneralizedTransactionSet,
69146            Self::TransactionResultPair(_) => TypeVariant::TransactionResultPair,
69147            Self::TransactionResultSet(_) => TypeVariant::TransactionResultSet,
69148            Self::TransactionHistoryEntry(_) => TypeVariant::TransactionHistoryEntry,
69149            Self::TransactionHistoryEntryExt(_) => TypeVariant::TransactionHistoryEntryExt,
69150            Self::TransactionHistoryResultEntry(_) => TypeVariant::TransactionHistoryResultEntry,
69151            Self::TransactionHistoryResultEntryExt(_) => {
69152                TypeVariant::TransactionHistoryResultEntryExt
69153            }
69154            Self::LedgerHeaderHistoryEntry(_) => TypeVariant::LedgerHeaderHistoryEntry,
69155            Self::LedgerHeaderHistoryEntryExt(_) => TypeVariant::LedgerHeaderHistoryEntryExt,
69156            Self::LedgerScpMessages(_) => TypeVariant::LedgerScpMessages,
69157            Self::ScpHistoryEntryV0(_) => TypeVariant::ScpHistoryEntryV0,
69158            Self::ScpHistoryEntry(_) => TypeVariant::ScpHistoryEntry,
69159            Self::LedgerEntryChangeType(_) => TypeVariant::LedgerEntryChangeType,
69160            Self::LedgerEntryChange(_) => TypeVariant::LedgerEntryChange,
69161            Self::LedgerEntryChanges(_) => TypeVariant::LedgerEntryChanges,
69162            Self::OperationMeta(_) => TypeVariant::OperationMeta,
69163            Self::TransactionMetaV1(_) => TypeVariant::TransactionMetaV1,
69164            Self::TransactionMetaV2(_) => TypeVariant::TransactionMetaV2,
69165            Self::ContractEventType(_) => TypeVariant::ContractEventType,
69166            Self::ContractEvent(_) => TypeVariant::ContractEvent,
69167            Self::ContractEventBody(_) => TypeVariant::ContractEventBody,
69168            Self::ContractEventV0(_) => TypeVariant::ContractEventV0,
69169            Self::DiagnosticEvent(_) => TypeVariant::DiagnosticEvent,
69170            Self::SorobanTransactionMetaExtV1(_) => TypeVariant::SorobanTransactionMetaExtV1,
69171            Self::SorobanTransactionMetaExt(_) => TypeVariant::SorobanTransactionMetaExt,
69172            Self::SorobanTransactionMeta(_) => TypeVariant::SorobanTransactionMeta,
69173            Self::TransactionMetaV3(_) => TypeVariant::TransactionMetaV3,
69174            Self::OperationMetaV2(_) => TypeVariant::OperationMetaV2,
69175            Self::SorobanTransactionMetaV2(_) => TypeVariant::SorobanTransactionMetaV2,
69176            Self::TransactionEventStage(_) => TypeVariant::TransactionEventStage,
69177            Self::TransactionEvent(_) => TypeVariant::TransactionEvent,
69178            Self::TransactionMetaV4(_) => TypeVariant::TransactionMetaV4,
69179            Self::InvokeHostFunctionSuccessPreImage(_) => {
69180                TypeVariant::InvokeHostFunctionSuccessPreImage
69181            }
69182            Self::TransactionMeta(_) => TypeVariant::TransactionMeta,
69183            Self::TransactionResultMeta(_) => TypeVariant::TransactionResultMeta,
69184            Self::TransactionResultMetaV1(_) => TypeVariant::TransactionResultMetaV1,
69185            Self::UpgradeEntryMeta(_) => TypeVariant::UpgradeEntryMeta,
69186            Self::LedgerCloseMetaV0(_) => TypeVariant::LedgerCloseMetaV0,
69187            Self::LedgerCloseMetaExtV1(_) => TypeVariant::LedgerCloseMetaExtV1,
69188            Self::LedgerCloseMetaExt(_) => TypeVariant::LedgerCloseMetaExt,
69189            Self::LedgerCloseMetaV1(_) => TypeVariant::LedgerCloseMetaV1,
69190            Self::LedgerCloseMetaV2(_) => TypeVariant::LedgerCloseMetaV2,
69191            Self::LedgerCloseMeta(_) => TypeVariant::LedgerCloseMeta,
69192            Self::ErrorCode(_) => TypeVariant::ErrorCode,
69193            Self::SError(_) => TypeVariant::SError,
69194            Self::SendMore(_) => TypeVariant::SendMore,
69195            Self::SendMoreExtended(_) => TypeVariant::SendMoreExtended,
69196            Self::AuthCert(_) => TypeVariant::AuthCert,
69197            Self::Hello(_) => TypeVariant::Hello,
69198            Self::Auth(_) => TypeVariant::Auth,
69199            Self::IpAddrType(_) => TypeVariant::IpAddrType,
69200            Self::PeerAddress(_) => TypeVariant::PeerAddress,
69201            Self::PeerAddressIp(_) => TypeVariant::PeerAddressIp,
69202            Self::MessageType(_) => TypeVariant::MessageType,
69203            Self::DontHave(_) => TypeVariant::DontHave,
69204            Self::SurveyMessageCommandType(_) => TypeVariant::SurveyMessageCommandType,
69205            Self::SurveyMessageResponseType(_) => TypeVariant::SurveyMessageResponseType,
69206            Self::TimeSlicedSurveyStartCollectingMessage(_) => {
69207                TypeVariant::TimeSlicedSurveyStartCollectingMessage
69208            }
69209            Self::SignedTimeSlicedSurveyStartCollectingMessage(_) => {
69210                TypeVariant::SignedTimeSlicedSurveyStartCollectingMessage
69211            }
69212            Self::TimeSlicedSurveyStopCollectingMessage(_) => {
69213                TypeVariant::TimeSlicedSurveyStopCollectingMessage
69214            }
69215            Self::SignedTimeSlicedSurveyStopCollectingMessage(_) => {
69216                TypeVariant::SignedTimeSlicedSurveyStopCollectingMessage
69217            }
69218            Self::SurveyRequestMessage(_) => TypeVariant::SurveyRequestMessage,
69219            Self::TimeSlicedSurveyRequestMessage(_) => TypeVariant::TimeSlicedSurveyRequestMessage,
69220            Self::SignedTimeSlicedSurveyRequestMessage(_) => {
69221                TypeVariant::SignedTimeSlicedSurveyRequestMessage
69222            }
69223            Self::EncryptedBody(_) => TypeVariant::EncryptedBody,
69224            Self::SurveyResponseMessage(_) => TypeVariant::SurveyResponseMessage,
69225            Self::TimeSlicedSurveyResponseMessage(_) => {
69226                TypeVariant::TimeSlicedSurveyResponseMessage
69227            }
69228            Self::SignedTimeSlicedSurveyResponseMessage(_) => {
69229                TypeVariant::SignedTimeSlicedSurveyResponseMessage
69230            }
69231            Self::PeerStats(_) => TypeVariant::PeerStats,
69232            Self::TimeSlicedNodeData(_) => TypeVariant::TimeSlicedNodeData,
69233            Self::TimeSlicedPeerData(_) => TypeVariant::TimeSlicedPeerData,
69234            Self::TimeSlicedPeerDataList(_) => TypeVariant::TimeSlicedPeerDataList,
69235            Self::TopologyResponseBodyV2(_) => TypeVariant::TopologyResponseBodyV2,
69236            Self::SurveyResponseBody(_) => TypeVariant::SurveyResponseBody,
69237            Self::TxAdvertVector(_) => TypeVariant::TxAdvertVector,
69238            Self::FloodAdvert(_) => TypeVariant::FloodAdvert,
69239            Self::TxDemandVector(_) => TypeVariant::TxDemandVector,
69240            Self::FloodDemand(_) => TypeVariant::FloodDemand,
69241            Self::StellarMessage(_) => TypeVariant::StellarMessage,
69242            Self::AuthenticatedMessage(_) => TypeVariant::AuthenticatedMessage,
69243            Self::AuthenticatedMessageV0(_) => TypeVariant::AuthenticatedMessageV0,
69244            Self::LiquidityPoolParameters(_) => TypeVariant::LiquidityPoolParameters,
69245            Self::MuxedAccount(_) => TypeVariant::MuxedAccount,
69246            Self::MuxedAccountMed25519(_) => TypeVariant::MuxedAccountMed25519,
69247            Self::DecoratedSignature(_) => TypeVariant::DecoratedSignature,
69248            Self::OperationType(_) => TypeVariant::OperationType,
69249            Self::CreateAccountOp(_) => TypeVariant::CreateAccountOp,
69250            Self::PaymentOp(_) => TypeVariant::PaymentOp,
69251            Self::PathPaymentStrictReceiveOp(_) => TypeVariant::PathPaymentStrictReceiveOp,
69252            Self::PathPaymentStrictSendOp(_) => TypeVariant::PathPaymentStrictSendOp,
69253            Self::ManageSellOfferOp(_) => TypeVariant::ManageSellOfferOp,
69254            Self::ManageBuyOfferOp(_) => TypeVariant::ManageBuyOfferOp,
69255            Self::CreatePassiveSellOfferOp(_) => TypeVariant::CreatePassiveSellOfferOp,
69256            Self::SetOptionsOp(_) => TypeVariant::SetOptionsOp,
69257            Self::ChangeTrustAsset(_) => TypeVariant::ChangeTrustAsset,
69258            Self::ChangeTrustOp(_) => TypeVariant::ChangeTrustOp,
69259            Self::AllowTrustOp(_) => TypeVariant::AllowTrustOp,
69260            Self::ManageDataOp(_) => TypeVariant::ManageDataOp,
69261            Self::BumpSequenceOp(_) => TypeVariant::BumpSequenceOp,
69262            Self::CreateClaimableBalanceOp(_) => TypeVariant::CreateClaimableBalanceOp,
69263            Self::ClaimClaimableBalanceOp(_) => TypeVariant::ClaimClaimableBalanceOp,
69264            Self::BeginSponsoringFutureReservesOp(_) => {
69265                TypeVariant::BeginSponsoringFutureReservesOp
69266            }
69267            Self::RevokeSponsorshipType(_) => TypeVariant::RevokeSponsorshipType,
69268            Self::RevokeSponsorshipOp(_) => TypeVariant::RevokeSponsorshipOp,
69269            Self::RevokeSponsorshipOpSigner(_) => TypeVariant::RevokeSponsorshipOpSigner,
69270            Self::ClawbackOp(_) => TypeVariant::ClawbackOp,
69271            Self::ClawbackClaimableBalanceOp(_) => TypeVariant::ClawbackClaimableBalanceOp,
69272            Self::SetTrustLineFlagsOp(_) => TypeVariant::SetTrustLineFlagsOp,
69273            Self::LiquidityPoolDepositOp(_) => TypeVariant::LiquidityPoolDepositOp,
69274            Self::LiquidityPoolWithdrawOp(_) => TypeVariant::LiquidityPoolWithdrawOp,
69275            Self::HostFunctionType(_) => TypeVariant::HostFunctionType,
69276            Self::ContractIdPreimageType(_) => TypeVariant::ContractIdPreimageType,
69277            Self::ContractIdPreimage(_) => TypeVariant::ContractIdPreimage,
69278            Self::ContractIdPreimageFromAddress(_) => TypeVariant::ContractIdPreimageFromAddress,
69279            Self::CreateContractArgs(_) => TypeVariant::CreateContractArgs,
69280            Self::CreateContractArgsV2(_) => TypeVariant::CreateContractArgsV2,
69281            Self::InvokeContractArgs(_) => TypeVariant::InvokeContractArgs,
69282            Self::HostFunction(_) => TypeVariant::HostFunction,
69283            Self::SorobanAuthorizedFunctionType(_) => TypeVariant::SorobanAuthorizedFunctionType,
69284            Self::SorobanAuthorizedFunction(_) => TypeVariant::SorobanAuthorizedFunction,
69285            Self::SorobanAuthorizedInvocation(_) => TypeVariant::SorobanAuthorizedInvocation,
69286            Self::SorobanAddressCredentials(_) => TypeVariant::SorobanAddressCredentials,
69287            Self::SorobanCredentialsType(_) => TypeVariant::SorobanCredentialsType,
69288            Self::SorobanCredentials(_) => TypeVariant::SorobanCredentials,
69289            Self::SorobanAuthorizationEntry(_) => TypeVariant::SorobanAuthorizationEntry,
69290            Self::SorobanAuthorizationEntries(_) => TypeVariant::SorobanAuthorizationEntries,
69291            Self::InvokeHostFunctionOp(_) => TypeVariant::InvokeHostFunctionOp,
69292            Self::ExtendFootprintTtlOp(_) => TypeVariant::ExtendFootprintTtlOp,
69293            Self::RestoreFootprintOp(_) => TypeVariant::RestoreFootprintOp,
69294            Self::Operation(_) => TypeVariant::Operation,
69295            Self::OperationBody(_) => TypeVariant::OperationBody,
69296            Self::HashIdPreimage(_) => TypeVariant::HashIdPreimage,
69297            Self::HashIdPreimageOperationId(_) => TypeVariant::HashIdPreimageOperationId,
69298            Self::HashIdPreimageRevokeId(_) => TypeVariant::HashIdPreimageRevokeId,
69299            Self::HashIdPreimageContractId(_) => TypeVariant::HashIdPreimageContractId,
69300            Self::HashIdPreimageSorobanAuthorization(_) => {
69301                TypeVariant::HashIdPreimageSorobanAuthorization
69302            }
69303            Self::MemoType(_) => TypeVariant::MemoType,
69304            Self::Memo(_) => TypeVariant::Memo,
69305            Self::TimeBounds(_) => TypeVariant::TimeBounds,
69306            Self::LedgerBounds(_) => TypeVariant::LedgerBounds,
69307            Self::PreconditionsV2(_) => TypeVariant::PreconditionsV2,
69308            Self::PreconditionType(_) => TypeVariant::PreconditionType,
69309            Self::Preconditions(_) => TypeVariant::Preconditions,
69310            Self::LedgerFootprint(_) => TypeVariant::LedgerFootprint,
69311            Self::SorobanResources(_) => TypeVariant::SorobanResources,
69312            Self::SorobanResourcesExtV0(_) => TypeVariant::SorobanResourcesExtV0,
69313            Self::SorobanTransactionData(_) => TypeVariant::SorobanTransactionData,
69314            Self::SorobanTransactionDataExt(_) => TypeVariant::SorobanTransactionDataExt,
69315            Self::TransactionV0(_) => TypeVariant::TransactionV0,
69316            Self::TransactionV0Ext(_) => TypeVariant::TransactionV0Ext,
69317            Self::TransactionV0Envelope(_) => TypeVariant::TransactionV0Envelope,
69318            Self::Transaction(_) => TypeVariant::Transaction,
69319            Self::TransactionExt(_) => TypeVariant::TransactionExt,
69320            Self::TransactionV1Envelope(_) => TypeVariant::TransactionV1Envelope,
69321            Self::FeeBumpTransaction(_) => TypeVariant::FeeBumpTransaction,
69322            Self::FeeBumpTransactionInnerTx(_) => TypeVariant::FeeBumpTransactionInnerTx,
69323            Self::FeeBumpTransactionExt(_) => TypeVariant::FeeBumpTransactionExt,
69324            Self::FeeBumpTransactionEnvelope(_) => TypeVariant::FeeBumpTransactionEnvelope,
69325            Self::TransactionEnvelope(_) => TypeVariant::TransactionEnvelope,
69326            Self::TransactionSignaturePayload(_) => TypeVariant::TransactionSignaturePayload,
69327            Self::TransactionSignaturePayloadTaggedTransaction(_) => {
69328                TypeVariant::TransactionSignaturePayloadTaggedTransaction
69329            }
69330            Self::ClaimAtomType(_) => TypeVariant::ClaimAtomType,
69331            Self::ClaimOfferAtomV0(_) => TypeVariant::ClaimOfferAtomV0,
69332            Self::ClaimOfferAtom(_) => TypeVariant::ClaimOfferAtom,
69333            Self::ClaimLiquidityAtom(_) => TypeVariant::ClaimLiquidityAtom,
69334            Self::ClaimAtom(_) => TypeVariant::ClaimAtom,
69335            Self::CreateAccountResultCode(_) => TypeVariant::CreateAccountResultCode,
69336            Self::CreateAccountResult(_) => TypeVariant::CreateAccountResult,
69337            Self::PaymentResultCode(_) => TypeVariant::PaymentResultCode,
69338            Self::PaymentResult(_) => TypeVariant::PaymentResult,
69339            Self::PathPaymentStrictReceiveResultCode(_) => {
69340                TypeVariant::PathPaymentStrictReceiveResultCode
69341            }
69342            Self::SimplePaymentResult(_) => TypeVariant::SimplePaymentResult,
69343            Self::PathPaymentStrictReceiveResult(_) => TypeVariant::PathPaymentStrictReceiveResult,
69344            Self::PathPaymentStrictReceiveResultSuccess(_) => {
69345                TypeVariant::PathPaymentStrictReceiveResultSuccess
69346            }
69347            Self::PathPaymentStrictSendResultCode(_) => {
69348                TypeVariant::PathPaymentStrictSendResultCode
69349            }
69350            Self::PathPaymentStrictSendResult(_) => TypeVariant::PathPaymentStrictSendResult,
69351            Self::PathPaymentStrictSendResultSuccess(_) => {
69352                TypeVariant::PathPaymentStrictSendResultSuccess
69353            }
69354            Self::ManageSellOfferResultCode(_) => TypeVariant::ManageSellOfferResultCode,
69355            Self::ManageOfferEffect(_) => TypeVariant::ManageOfferEffect,
69356            Self::ManageOfferSuccessResult(_) => TypeVariant::ManageOfferSuccessResult,
69357            Self::ManageOfferSuccessResultOffer(_) => TypeVariant::ManageOfferSuccessResultOffer,
69358            Self::ManageSellOfferResult(_) => TypeVariant::ManageSellOfferResult,
69359            Self::ManageBuyOfferResultCode(_) => TypeVariant::ManageBuyOfferResultCode,
69360            Self::ManageBuyOfferResult(_) => TypeVariant::ManageBuyOfferResult,
69361            Self::SetOptionsResultCode(_) => TypeVariant::SetOptionsResultCode,
69362            Self::SetOptionsResult(_) => TypeVariant::SetOptionsResult,
69363            Self::ChangeTrustResultCode(_) => TypeVariant::ChangeTrustResultCode,
69364            Self::ChangeTrustResult(_) => TypeVariant::ChangeTrustResult,
69365            Self::AllowTrustResultCode(_) => TypeVariant::AllowTrustResultCode,
69366            Self::AllowTrustResult(_) => TypeVariant::AllowTrustResult,
69367            Self::AccountMergeResultCode(_) => TypeVariant::AccountMergeResultCode,
69368            Self::AccountMergeResult(_) => TypeVariant::AccountMergeResult,
69369            Self::InflationResultCode(_) => TypeVariant::InflationResultCode,
69370            Self::InflationPayout(_) => TypeVariant::InflationPayout,
69371            Self::InflationResult(_) => TypeVariant::InflationResult,
69372            Self::ManageDataResultCode(_) => TypeVariant::ManageDataResultCode,
69373            Self::ManageDataResult(_) => TypeVariant::ManageDataResult,
69374            Self::BumpSequenceResultCode(_) => TypeVariant::BumpSequenceResultCode,
69375            Self::BumpSequenceResult(_) => TypeVariant::BumpSequenceResult,
69376            Self::CreateClaimableBalanceResultCode(_) => {
69377                TypeVariant::CreateClaimableBalanceResultCode
69378            }
69379            Self::CreateClaimableBalanceResult(_) => TypeVariant::CreateClaimableBalanceResult,
69380            Self::ClaimClaimableBalanceResultCode(_) => {
69381                TypeVariant::ClaimClaimableBalanceResultCode
69382            }
69383            Self::ClaimClaimableBalanceResult(_) => TypeVariant::ClaimClaimableBalanceResult,
69384            Self::BeginSponsoringFutureReservesResultCode(_) => {
69385                TypeVariant::BeginSponsoringFutureReservesResultCode
69386            }
69387            Self::BeginSponsoringFutureReservesResult(_) => {
69388                TypeVariant::BeginSponsoringFutureReservesResult
69389            }
69390            Self::EndSponsoringFutureReservesResultCode(_) => {
69391                TypeVariant::EndSponsoringFutureReservesResultCode
69392            }
69393            Self::EndSponsoringFutureReservesResult(_) => {
69394                TypeVariant::EndSponsoringFutureReservesResult
69395            }
69396            Self::RevokeSponsorshipResultCode(_) => TypeVariant::RevokeSponsorshipResultCode,
69397            Self::RevokeSponsorshipResult(_) => TypeVariant::RevokeSponsorshipResult,
69398            Self::ClawbackResultCode(_) => TypeVariant::ClawbackResultCode,
69399            Self::ClawbackResult(_) => TypeVariant::ClawbackResult,
69400            Self::ClawbackClaimableBalanceResultCode(_) => {
69401                TypeVariant::ClawbackClaimableBalanceResultCode
69402            }
69403            Self::ClawbackClaimableBalanceResult(_) => TypeVariant::ClawbackClaimableBalanceResult,
69404            Self::SetTrustLineFlagsResultCode(_) => TypeVariant::SetTrustLineFlagsResultCode,
69405            Self::SetTrustLineFlagsResult(_) => TypeVariant::SetTrustLineFlagsResult,
69406            Self::LiquidityPoolDepositResultCode(_) => TypeVariant::LiquidityPoolDepositResultCode,
69407            Self::LiquidityPoolDepositResult(_) => TypeVariant::LiquidityPoolDepositResult,
69408            Self::LiquidityPoolWithdrawResultCode(_) => {
69409                TypeVariant::LiquidityPoolWithdrawResultCode
69410            }
69411            Self::LiquidityPoolWithdrawResult(_) => TypeVariant::LiquidityPoolWithdrawResult,
69412            Self::InvokeHostFunctionResultCode(_) => TypeVariant::InvokeHostFunctionResultCode,
69413            Self::InvokeHostFunctionResult(_) => TypeVariant::InvokeHostFunctionResult,
69414            Self::ExtendFootprintTtlResultCode(_) => TypeVariant::ExtendFootprintTtlResultCode,
69415            Self::ExtendFootprintTtlResult(_) => TypeVariant::ExtendFootprintTtlResult,
69416            Self::RestoreFootprintResultCode(_) => TypeVariant::RestoreFootprintResultCode,
69417            Self::RestoreFootprintResult(_) => TypeVariant::RestoreFootprintResult,
69418            Self::OperationResultCode(_) => TypeVariant::OperationResultCode,
69419            Self::OperationResult(_) => TypeVariant::OperationResult,
69420            Self::OperationResultTr(_) => TypeVariant::OperationResultTr,
69421            Self::TransactionResultCode(_) => TypeVariant::TransactionResultCode,
69422            Self::InnerTransactionResult(_) => TypeVariant::InnerTransactionResult,
69423            Self::InnerTransactionResultResult(_) => TypeVariant::InnerTransactionResultResult,
69424            Self::InnerTransactionResultExt(_) => TypeVariant::InnerTransactionResultExt,
69425            Self::InnerTransactionResultPair(_) => TypeVariant::InnerTransactionResultPair,
69426            Self::TransactionResult(_) => TypeVariant::TransactionResult,
69427            Self::TransactionResultResult(_) => TypeVariant::TransactionResultResult,
69428            Self::TransactionResultExt(_) => TypeVariant::TransactionResultExt,
69429            Self::Hash(_) => TypeVariant::Hash,
69430            Self::Uint256(_) => TypeVariant::Uint256,
69431            Self::Uint32(_) => TypeVariant::Uint32,
69432            Self::Int32(_) => TypeVariant::Int32,
69433            Self::Uint64(_) => TypeVariant::Uint64,
69434            Self::Int64(_) => TypeVariant::Int64,
69435            Self::TimePoint(_) => TypeVariant::TimePoint,
69436            Self::Duration(_) => TypeVariant::Duration,
69437            Self::ExtensionPoint(_) => TypeVariant::ExtensionPoint,
69438            Self::CryptoKeyType(_) => TypeVariant::CryptoKeyType,
69439            Self::PublicKeyType(_) => TypeVariant::PublicKeyType,
69440            Self::SignerKeyType(_) => TypeVariant::SignerKeyType,
69441            Self::PublicKey(_) => TypeVariant::PublicKey,
69442            Self::SignerKey(_) => TypeVariant::SignerKey,
69443            Self::SignerKeyEd25519SignedPayload(_) => TypeVariant::SignerKeyEd25519SignedPayload,
69444            Self::Signature(_) => TypeVariant::Signature,
69445            Self::SignatureHint(_) => TypeVariant::SignatureHint,
69446            Self::NodeId(_) => TypeVariant::NodeId,
69447            Self::AccountId(_) => TypeVariant::AccountId,
69448            Self::ContractId(_) => TypeVariant::ContractId,
69449            Self::Curve25519Secret(_) => TypeVariant::Curve25519Secret,
69450            Self::Curve25519Public(_) => TypeVariant::Curve25519Public,
69451            Self::HmacSha256Key(_) => TypeVariant::HmacSha256Key,
69452            Self::HmacSha256Mac(_) => TypeVariant::HmacSha256Mac,
69453            Self::ShortHashSeed(_) => TypeVariant::ShortHashSeed,
69454            Self::BinaryFuseFilterType(_) => TypeVariant::BinaryFuseFilterType,
69455            Self::SerializedBinaryFuseFilter(_) => TypeVariant::SerializedBinaryFuseFilter,
69456            Self::PoolId(_) => TypeVariant::PoolId,
69457            Self::ClaimableBalanceIdType(_) => TypeVariant::ClaimableBalanceIdType,
69458            Self::ClaimableBalanceId(_) => TypeVariant::ClaimableBalanceId,
69459        }
69460    }
69461}
69462
69463impl Name for Type {
69464    #[must_use]
69465    fn name(&self) -> &'static str {
69466        Self::name(self)
69467    }
69468}
69469
69470impl Variants<TypeVariant> for Type {
69471    fn variants() -> slice::Iter<'static, TypeVariant> {
69472        Self::VARIANTS.iter()
69473    }
69474}
69475
69476impl WriteXdr for Type {
69477    #[cfg(feature = "std")]
69478    #[allow(clippy::too_many_lines)]
69479    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
69480        match self {
69481            Self::Value(v) => v.write_xdr(w),
69482            Self::ScpBallot(v) => v.write_xdr(w),
69483            Self::ScpStatementType(v) => v.write_xdr(w),
69484            Self::ScpNomination(v) => v.write_xdr(w),
69485            Self::ScpStatement(v) => v.write_xdr(w),
69486            Self::ScpStatementPledges(v) => v.write_xdr(w),
69487            Self::ScpStatementPrepare(v) => v.write_xdr(w),
69488            Self::ScpStatementConfirm(v) => v.write_xdr(w),
69489            Self::ScpStatementExternalize(v) => v.write_xdr(w),
69490            Self::ScpEnvelope(v) => v.write_xdr(w),
69491            Self::ScpQuorumSet(v) => v.write_xdr(w),
69492            Self::ConfigSettingContractExecutionLanesV0(v) => v.write_xdr(w),
69493            Self::ConfigSettingContractComputeV0(v) => v.write_xdr(w),
69494            Self::ConfigSettingContractParallelComputeV0(v) => v.write_xdr(w),
69495            Self::ConfigSettingContractLedgerCostV0(v) => v.write_xdr(w),
69496            Self::ConfigSettingContractLedgerCostExtV0(v) => v.write_xdr(w),
69497            Self::ConfigSettingContractHistoricalDataV0(v) => v.write_xdr(w),
69498            Self::ConfigSettingContractEventsV0(v) => v.write_xdr(w),
69499            Self::ConfigSettingContractBandwidthV0(v) => v.write_xdr(w),
69500            Self::ContractCostType(v) => v.write_xdr(w),
69501            Self::ContractCostParamEntry(v) => v.write_xdr(w),
69502            Self::StateArchivalSettings(v) => v.write_xdr(w),
69503            Self::EvictionIterator(v) => v.write_xdr(w),
69504            Self::ConfigSettingScpTiming(v) => v.write_xdr(w),
69505            Self::ContractCostParams(v) => v.write_xdr(w),
69506            Self::ConfigSettingId(v) => v.write_xdr(w),
69507            Self::ConfigSettingEntry(v) => v.write_xdr(w),
69508            Self::ScEnvMetaKind(v) => v.write_xdr(w),
69509            Self::ScEnvMetaEntry(v) => v.write_xdr(w),
69510            Self::ScEnvMetaEntryInterfaceVersion(v) => v.write_xdr(w),
69511            Self::ScMetaV0(v) => v.write_xdr(w),
69512            Self::ScMetaKind(v) => v.write_xdr(w),
69513            Self::ScMetaEntry(v) => v.write_xdr(w),
69514            Self::ScSpecType(v) => v.write_xdr(w),
69515            Self::ScSpecTypeOption(v) => v.write_xdr(w),
69516            Self::ScSpecTypeResult(v) => v.write_xdr(w),
69517            Self::ScSpecTypeVec(v) => v.write_xdr(w),
69518            Self::ScSpecTypeMap(v) => v.write_xdr(w),
69519            Self::ScSpecTypeTuple(v) => v.write_xdr(w),
69520            Self::ScSpecTypeBytesN(v) => v.write_xdr(w),
69521            Self::ScSpecTypeUdt(v) => v.write_xdr(w),
69522            Self::ScSpecTypeDef(v) => v.write_xdr(w),
69523            Self::ScSpecUdtStructFieldV0(v) => v.write_xdr(w),
69524            Self::ScSpecUdtStructV0(v) => v.write_xdr(w),
69525            Self::ScSpecUdtUnionCaseVoidV0(v) => v.write_xdr(w),
69526            Self::ScSpecUdtUnionCaseTupleV0(v) => v.write_xdr(w),
69527            Self::ScSpecUdtUnionCaseV0Kind(v) => v.write_xdr(w),
69528            Self::ScSpecUdtUnionCaseV0(v) => v.write_xdr(w),
69529            Self::ScSpecUdtUnionV0(v) => v.write_xdr(w),
69530            Self::ScSpecUdtEnumCaseV0(v) => v.write_xdr(w),
69531            Self::ScSpecUdtEnumV0(v) => v.write_xdr(w),
69532            Self::ScSpecUdtErrorEnumCaseV0(v) => v.write_xdr(w),
69533            Self::ScSpecUdtErrorEnumV0(v) => v.write_xdr(w),
69534            Self::ScSpecFunctionInputV0(v) => v.write_xdr(w),
69535            Self::ScSpecFunctionV0(v) => v.write_xdr(w),
69536            Self::ScSpecEventParamLocationV0(v) => v.write_xdr(w),
69537            Self::ScSpecEventParamV0(v) => v.write_xdr(w),
69538            Self::ScSpecEventDataFormat(v) => v.write_xdr(w),
69539            Self::ScSpecEventV0(v) => v.write_xdr(w),
69540            Self::ScSpecEntryKind(v) => v.write_xdr(w),
69541            Self::ScSpecEntry(v) => v.write_xdr(w),
69542            Self::ScValType(v) => v.write_xdr(w),
69543            Self::ScErrorType(v) => v.write_xdr(w),
69544            Self::ScErrorCode(v) => v.write_xdr(w),
69545            Self::ScError(v) => v.write_xdr(w),
69546            Self::UInt128Parts(v) => v.write_xdr(w),
69547            Self::Int128Parts(v) => v.write_xdr(w),
69548            Self::UInt256Parts(v) => v.write_xdr(w),
69549            Self::Int256Parts(v) => v.write_xdr(w),
69550            Self::ContractExecutableType(v) => v.write_xdr(w),
69551            Self::ContractExecutable(v) => v.write_xdr(w),
69552            Self::ScAddressType(v) => v.write_xdr(w),
69553            Self::MuxedEd25519Account(v) => v.write_xdr(w),
69554            Self::ScAddress(v) => v.write_xdr(w),
69555            Self::ScVec(v) => v.write_xdr(w),
69556            Self::ScMap(v) => v.write_xdr(w),
69557            Self::ScBytes(v) => v.write_xdr(w),
69558            Self::ScString(v) => v.write_xdr(w),
69559            Self::ScSymbol(v) => v.write_xdr(w),
69560            Self::ScNonceKey(v) => v.write_xdr(w),
69561            Self::ScContractInstance(v) => v.write_xdr(w),
69562            Self::ScVal(v) => v.write_xdr(w),
69563            Self::ScMapEntry(v) => v.write_xdr(w),
69564            Self::LedgerCloseMetaBatch(v) => v.write_xdr(w),
69565            Self::StoredTransactionSet(v) => v.write_xdr(w),
69566            Self::StoredDebugTransactionSet(v) => v.write_xdr(w),
69567            Self::PersistedScpStateV0(v) => v.write_xdr(w),
69568            Self::PersistedScpStateV1(v) => v.write_xdr(w),
69569            Self::PersistedScpState(v) => v.write_xdr(w),
69570            Self::Thresholds(v) => v.write_xdr(w),
69571            Self::String32(v) => v.write_xdr(w),
69572            Self::String64(v) => v.write_xdr(w),
69573            Self::SequenceNumber(v) => v.write_xdr(w),
69574            Self::DataValue(v) => v.write_xdr(w),
69575            Self::AssetCode4(v) => v.write_xdr(w),
69576            Self::AssetCode12(v) => v.write_xdr(w),
69577            Self::AssetType(v) => v.write_xdr(w),
69578            Self::AssetCode(v) => v.write_xdr(w),
69579            Self::AlphaNum4(v) => v.write_xdr(w),
69580            Self::AlphaNum12(v) => v.write_xdr(w),
69581            Self::Asset(v) => v.write_xdr(w),
69582            Self::Price(v) => v.write_xdr(w),
69583            Self::Liabilities(v) => v.write_xdr(w),
69584            Self::ThresholdIndexes(v) => v.write_xdr(w),
69585            Self::LedgerEntryType(v) => v.write_xdr(w),
69586            Self::Signer(v) => v.write_xdr(w),
69587            Self::AccountFlags(v) => v.write_xdr(w),
69588            Self::SponsorshipDescriptor(v) => v.write_xdr(w),
69589            Self::AccountEntryExtensionV3(v) => v.write_xdr(w),
69590            Self::AccountEntryExtensionV2(v) => v.write_xdr(w),
69591            Self::AccountEntryExtensionV2Ext(v) => v.write_xdr(w),
69592            Self::AccountEntryExtensionV1(v) => v.write_xdr(w),
69593            Self::AccountEntryExtensionV1Ext(v) => v.write_xdr(w),
69594            Self::AccountEntry(v) => v.write_xdr(w),
69595            Self::AccountEntryExt(v) => v.write_xdr(w),
69596            Self::TrustLineFlags(v) => v.write_xdr(w),
69597            Self::LiquidityPoolType(v) => v.write_xdr(w),
69598            Self::TrustLineAsset(v) => v.write_xdr(w),
69599            Self::TrustLineEntryExtensionV2(v) => v.write_xdr(w),
69600            Self::TrustLineEntryExtensionV2Ext(v) => v.write_xdr(w),
69601            Self::TrustLineEntry(v) => v.write_xdr(w),
69602            Self::TrustLineEntryExt(v) => v.write_xdr(w),
69603            Self::TrustLineEntryV1(v) => v.write_xdr(w),
69604            Self::TrustLineEntryV1Ext(v) => v.write_xdr(w),
69605            Self::OfferEntryFlags(v) => v.write_xdr(w),
69606            Self::OfferEntry(v) => v.write_xdr(w),
69607            Self::OfferEntryExt(v) => v.write_xdr(w),
69608            Self::DataEntry(v) => v.write_xdr(w),
69609            Self::DataEntryExt(v) => v.write_xdr(w),
69610            Self::ClaimPredicateType(v) => v.write_xdr(w),
69611            Self::ClaimPredicate(v) => v.write_xdr(w),
69612            Self::ClaimantType(v) => v.write_xdr(w),
69613            Self::Claimant(v) => v.write_xdr(w),
69614            Self::ClaimantV0(v) => v.write_xdr(w),
69615            Self::ClaimableBalanceFlags(v) => v.write_xdr(w),
69616            Self::ClaimableBalanceEntryExtensionV1(v) => v.write_xdr(w),
69617            Self::ClaimableBalanceEntryExtensionV1Ext(v) => v.write_xdr(w),
69618            Self::ClaimableBalanceEntry(v) => v.write_xdr(w),
69619            Self::ClaimableBalanceEntryExt(v) => v.write_xdr(w),
69620            Self::LiquidityPoolConstantProductParameters(v) => v.write_xdr(w),
69621            Self::LiquidityPoolEntry(v) => v.write_xdr(w),
69622            Self::LiquidityPoolEntryBody(v) => v.write_xdr(w),
69623            Self::LiquidityPoolEntryConstantProduct(v) => v.write_xdr(w),
69624            Self::ContractDataDurability(v) => v.write_xdr(w),
69625            Self::ContractDataEntry(v) => v.write_xdr(w),
69626            Self::ContractCodeCostInputs(v) => v.write_xdr(w),
69627            Self::ContractCodeEntry(v) => v.write_xdr(w),
69628            Self::ContractCodeEntryExt(v) => v.write_xdr(w),
69629            Self::ContractCodeEntryV1(v) => v.write_xdr(w),
69630            Self::TtlEntry(v) => v.write_xdr(w),
69631            Self::LedgerEntryExtensionV1(v) => v.write_xdr(w),
69632            Self::LedgerEntryExtensionV1Ext(v) => v.write_xdr(w),
69633            Self::LedgerEntry(v) => v.write_xdr(w),
69634            Self::LedgerEntryData(v) => v.write_xdr(w),
69635            Self::LedgerEntryExt(v) => v.write_xdr(w),
69636            Self::LedgerKey(v) => v.write_xdr(w),
69637            Self::LedgerKeyAccount(v) => v.write_xdr(w),
69638            Self::LedgerKeyTrustLine(v) => v.write_xdr(w),
69639            Self::LedgerKeyOffer(v) => v.write_xdr(w),
69640            Self::LedgerKeyData(v) => v.write_xdr(w),
69641            Self::LedgerKeyClaimableBalance(v) => v.write_xdr(w),
69642            Self::LedgerKeyLiquidityPool(v) => v.write_xdr(w),
69643            Self::LedgerKeyContractData(v) => v.write_xdr(w),
69644            Self::LedgerKeyContractCode(v) => v.write_xdr(w),
69645            Self::LedgerKeyConfigSetting(v) => v.write_xdr(w),
69646            Self::LedgerKeyTtl(v) => v.write_xdr(w),
69647            Self::EnvelopeType(v) => v.write_xdr(w),
69648            Self::BucketListType(v) => v.write_xdr(w),
69649            Self::BucketEntryType(v) => v.write_xdr(w),
69650            Self::HotArchiveBucketEntryType(v) => v.write_xdr(w),
69651            Self::BucketMetadata(v) => v.write_xdr(w),
69652            Self::BucketMetadataExt(v) => v.write_xdr(w),
69653            Self::BucketEntry(v) => v.write_xdr(w),
69654            Self::HotArchiveBucketEntry(v) => v.write_xdr(w),
69655            Self::UpgradeType(v) => v.write_xdr(w),
69656            Self::StellarValueType(v) => v.write_xdr(w),
69657            Self::LedgerCloseValueSignature(v) => v.write_xdr(w),
69658            Self::StellarValue(v) => v.write_xdr(w),
69659            Self::StellarValueExt(v) => v.write_xdr(w),
69660            Self::LedgerHeaderFlags(v) => v.write_xdr(w),
69661            Self::LedgerHeaderExtensionV1(v) => v.write_xdr(w),
69662            Self::LedgerHeaderExtensionV1Ext(v) => v.write_xdr(w),
69663            Self::LedgerHeader(v) => v.write_xdr(w),
69664            Self::LedgerHeaderExt(v) => v.write_xdr(w),
69665            Self::LedgerUpgradeType(v) => v.write_xdr(w),
69666            Self::ConfigUpgradeSetKey(v) => v.write_xdr(w),
69667            Self::LedgerUpgrade(v) => v.write_xdr(w),
69668            Self::ConfigUpgradeSet(v) => v.write_xdr(w),
69669            Self::TxSetComponentType(v) => v.write_xdr(w),
69670            Self::DependentTxCluster(v) => v.write_xdr(w),
69671            Self::ParallelTxExecutionStage(v) => v.write_xdr(w),
69672            Self::ParallelTxsComponent(v) => v.write_xdr(w),
69673            Self::TxSetComponent(v) => v.write_xdr(w),
69674            Self::TxSetComponentTxsMaybeDiscountedFee(v) => v.write_xdr(w),
69675            Self::TransactionPhase(v) => v.write_xdr(w),
69676            Self::TransactionSet(v) => v.write_xdr(w),
69677            Self::TransactionSetV1(v) => v.write_xdr(w),
69678            Self::GeneralizedTransactionSet(v) => v.write_xdr(w),
69679            Self::TransactionResultPair(v) => v.write_xdr(w),
69680            Self::TransactionResultSet(v) => v.write_xdr(w),
69681            Self::TransactionHistoryEntry(v) => v.write_xdr(w),
69682            Self::TransactionHistoryEntryExt(v) => v.write_xdr(w),
69683            Self::TransactionHistoryResultEntry(v) => v.write_xdr(w),
69684            Self::TransactionHistoryResultEntryExt(v) => v.write_xdr(w),
69685            Self::LedgerHeaderHistoryEntry(v) => v.write_xdr(w),
69686            Self::LedgerHeaderHistoryEntryExt(v) => v.write_xdr(w),
69687            Self::LedgerScpMessages(v) => v.write_xdr(w),
69688            Self::ScpHistoryEntryV0(v) => v.write_xdr(w),
69689            Self::ScpHistoryEntry(v) => v.write_xdr(w),
69690            Self::LedgerEntryChangeType(v) => v.write_xdr(w),
69691            Self::LedgerEntryChange(v) => v.write_xdr(w),
69692            Self::LedgerEntryChanges(v) => v.write_xdr(w),
69693            Self::OperationMeta(v) => v.write_xdr(w),
69694            Self::TransactionMetaV1(v) => v.write_xdr(w),
69695            Self::TransactionMetaV2(v) => v.write_xdr(w),
69696            Self::ContractEventType(v) => v.write_xdr(w),
69697            Self::ContractEvent(v) => v.write_xdr(w),
69698            Self::ContractEventBody(v) => v.write_xdr(w),
69699            Self::ContractEventV0(v) => v.write_xdr(w),
69700            Self::DiagnosticEvent(v) => v.write_xdr(w),
69701            Self::SorobanTransactionMetaExtV1(v) => v.write_xdr(w),
69702            Self::SorobanTransactionMetaExt(v) => v.write_xdr(w),
69703            Self::SorobanTransactionMeta(v) => v.write_xdr(w),
69704            Self::TransactionMetaV3(v) => v.write_xdr(w),
69705            Self::OperationMetaV2(v) => v.write_xdr(w),
69706            Self::SorobanTransactionMetaV2(v) => v.write_xdr(w),
69707            Self::TransactionEventStage(v) => v.write_xdr(w),
69708            Self::TransactionEvent(v) => v.write_xdr(w),
69709            Self::TransactionMetaV4(v) => v.write_xdr(w),
69710            Self::InvokeHostFunctionSuccessPreImage(v) => v.write_xdr(w),
69711            Self::TransactionMeta(v) => v.write_xdr(w),
69712            Self::TransactionResultMeta(v) => v.write_xdr(w),
69713            Self::TransactionResultMetaV1(v) => v.write_xdr(w),
69714            Self::UpgradeEntryMeta(v) => v.write_xdr(w),
69715            Self::LedgerCloseMetaV0(v) => v.write_xdr(w),
69716            Self::LedgerCloseMetaExtV1(v) => v.write_xdr(w),
69717            Self::LedgerCloseMetaExt(v) => v.write_xdr(w),
69718            Self::LedgerCloseMetaV1(v) => v.write_xdr(w),
69719            Self::LedgerCloseMetaV2(v) => v.write_xdr(w),
69720            Self::LedgerCloseMeta(v) => v.write_xdr(w),
69721            Self::ErrorCode(v) => v.write_xdr(w),
69722            Self::SError(v) => v.write_xdr(w),
69723            Self::SendMore(v) => v.write_xdr(w),
69724            Self::SendMoreExtended(v) => v.write_xdr(w),
69725            Self::AuthCert(v) => v.write_xdr(w),
69726            Self::Hello(v) => v.write_xdr(w),
69727            Self::Auth(v) => v.write_xdr(w),
69728            Self::IpAddrType(v) => v.write_xdr(w),
69729            Self::PeerAddress(v) => v.write_xdr(w),
69730            Self::PeerAddressIp(v) => v.write_xdr(w),
69731            Self::MessageType(v) => v.write_xdr(w),
69732            Self::DontHave(v) => v.write_xdr(w),
69733            Self::SurveyMessageCommandType(v) => v.write_xdr(w),
69734            Self::SurveyMessageResponseType(v) => v.write_xdr(w),
69735            Self::TimeSlicedSurveyStartCollectingMessage(v) => v.write_xdr(w),
69736            Self::SignedTimeSlicedSurveyStartCollectingMessage(v) => v.write_xdr(w),
69737            Self::TimeSlicedSurveyStopCollectingMessage(v) => v.write_xdr(w),
69738            Self::SignedTimeSlicedSurveyStopCollectingMessage(v) => v.write_xdr(w),
69739            Self::SurveyRequestMessage(v) => v.write_xdr(w),
69740            Self::TimeSlicedSurveyRequestMessage(v) => v.write_xdr(w),
69741            Self::SignedTimeSlicedSurveyRequestMessage(v) => v.write_xdr(w),
69742            Self::EncryptedBody(v) => v.write_xdr(w),
69743            Self::SurveyResponseMessage(v) => v.write_xdr(w),
69744            Self::TimeSlicedSurveyResponseMessage(v) => v.write_xdr(w),
69745            Self::SignedTimeSlicedSurveyResponseMessage(v) => v.write_xdr(w),
69746            Self::PeerStats(v) => v.write_xdr(w),
69747            Self::TimeSlicedNodeData(v) => v.write_xdr(w),
69748            Self::TimeSlicedPeerData(v) => v.write_xdr(w),
69749            Self::TimeSlicedPeerDataList(v) => v.write_xdr(w),
69750            Self::TopologyResponseBodyV2(v) => v.write_xdr(w),
69751            Self::SurveyResponseBody(v) => v.write_xdr(w),
69752            Self::TxAdvertVector(v) => v.write_xdr(w),
69753            Self::FloodAdvert(v) => v.write_xdr(w),
69754            Self::TxDemandVector(v) => v.write_xdr(w),
69755            Self::FloodDemand(v) => v.write_xdr(w),
69756            Self::StellarMessage(v) => v.write_xdr(w),
69757            Self::AuthenticatedMessage(v) => v.write_xdr(w),
69758            Self::AuthenticatedMessageV0(v) => v.write_xdr(w),
69759            Self::LiquidityPoolParameters(v) => v.write_xdr(w),
69760            Self::MuxedAccount(v) => v.write_xdr(w),
69761            Self::MuxedAccountMed25519(v) => v.write_xdr(w),
69762            Self::DecoratedSignature(v) => v.write_xdr(w),
69763            Self::OperationType(v) => v.write_xdr(w),
69764            Self::CreateAccountOp(v) => v.write_xdr(w),
69765            Self::PaymentOp(v) => v.write_xdr(w),
69766            Self::PathPaymentStrictReceiveOp(v) => v.write_xdr(w),
69767            Self::PathPaymentStrictSendOp(v) => v.write_xdr(w),
69768            Self::ManageSellOfferOp(v) => v.write_xdr(w),
69769            Self::ManageBuyOfferOp(v) => v.write_xdr(w),
69770            Self::CreatePassiveSellOfferOp(v) => v.write_xdr(w),
69771            Self::SetOptionsOp(v) => v.write_xdr(w),
69772            Self::ChangeTrustAsset(v) => v.write_xdr(w),
69773            Self::ChangeTrustOp(v) => v.write_xdr(w),
69774            Self::AllowTrustOp(v) => v.write_xdr(w),
69775            Self::ManageDataOp(v) => v.write_xdr(w),
69776            Self::BumpSequenceOp(v) => v.write_xdr(w),
69777            Self::CreateClaimableBalanceOp(v) => v.write_xdr(w),
69778            Self::ClaimClaimableBalanceOp(v) => v.write_xdr(w),
69779            Self::BeginSponsoringFutureReservesOp(v) => v.write_xdr(w),
69780            Self::RevokeSponsorshipType(v) => v.write_xdr(w),
69781            Self::RevokeSponsorshipOp(v) => v.write_xdr(w),
69782            Self::RevokeSponsorshipOpSigner(v) => v.write_xdr(w),
69783            Self::ClawbackOp(v) => v.write_xdr(w),
69784            Self::ClawbackClaimableBalanceOp(v) => v.write_xdr(w),
69785            Self::SetTrustLineFlagsOp(v) => v.write_xdr(w),
69786            Self::LiquidityPoolDepositOp(v) => v.write_xdr(w),
69787            Self::LiquidityPoolWithdrawOp(v) => v.write_xdr(w),
69788            Self::HostFunctionType(v) => v.write_xdr(w),
69789            Self::ContractIdPreimageType(v) => v.write_xdr(w),
69790            Self::ContractIdPreimage(v) => v.write_xdr(w),
69791            Self::ContractIdPreimageFromAddress(v) => v.write_xdr(w),
69792            Self::CreateContractArgs(v) => v.write_xdr(w),
69793            Self::CreateContractArgsV2(v) => v.write_xdr(w),
69794            Self::InvokeContractArgs(v) => v.write_xdr(w),
69795            Self::HostFunction(v) => v.write_xdr(w),
69796            Self::SorobanAuthorizedFunctionType(v) => v.write_xdr(w),
69797            Self::SorobanAuthorizedFunction(v) => v.write_xdr(w),
69798            Self::SorobanAuthorizedInvocation(v) => v.write_xdr(w),
69799            Self::SorobanAddressCredentials(v) => v.write_xdr(w),
69800            Self::SorobanCredentialsType(v) => v.write_xdr(w),
69801            Self::SorobanCredentials(v) => v.write_xdr(w),
69802            Self::SorobanAuthorizationEntry(v) => v.write_xdr(w),
69803            Self::SorobanAuthorizationEntries(v) => v.write_xdr(w),
69804            Self::InvokeHostFunctionOp(v) => v.write_xdr(w),
69805            Self::ExtendFootprintTtlOp(v) => v.write_xdr(w),
69806            Self::RestoreFootprintOp(v) => v.write_xdr(w),
69807            Self::Operation(v) => v.write_xdr(w),
69808            Self::OperationBody(v) => v.write_xdr(w),
69809            Self::HashIdPreimage(v) => v.write_xdr(w),
69810            Self::HashIdPreimageOperationId(v) => v.write_xdr(w),
69811            Self::HashIdPreimageRevokeId(v) => v.write_xdr(w),
69812            Self::HashIdPreimageContractId(v) => v.write_xdr(w),
69813            Self::HashIdPreimageSorobanAuthorization(v) => v.write_xdr(w),
69814            Self::MemoType(v) => v.write_xdr(w),
69815            Self::Memo(v) => v.write_xdr(w),
69816            Self::TimeBounds(v) => v.write_xdr(w),
69817            Self::LedgerBounds(v) => v.write_xdr(w),
69818            Self::PreconditionsV2(v) => v.write_xdr(w),
69819            Self::PreconditionType(v) => v.write_xdr(w),
69820            Self::Preconditions(v) => v.write_xdr(w),
69821            Self::LedgerFootprint(v) => v.write_xdr(w),
69822            Self::SorobanResources(v) => v.write_xdr(w),
69823            Self::SorobanResourcesExtV0(v) => v.write_xdr(w),
69824            Self::SorobanTransactionData(v) => v.write_xdr(w),
69825            Self::SorobanTransactionDataExt(v) => v.write_xdr(w),
69826            Self::TransactionV0(v) => v.write_xdr(w),
69827            Self::TransactionV0Ext(v) => v.write_xdr(w),
69828            Self::TransactionV0Envelope(v) => v.write_xdr(w),
69829            Self::Transaction(v) => v.write_xdr(w),
69830            Self::TransactionExt(v) => v.write_xdr(w),
69831            Self::TransactionV1Envelope(v) => v.write_xdr(w),
69832            Self::FeeBumpTransaction(v) => v.write_xdr(w),
69833            Self::FeeBumpTransactionInnerTx(v) => v.write_xdr(w),
69834            Self::FeeBumpTransactionExt(v) => v.write_xdr(w),
69835            Self::FeeBumpTransactionEnvelope(v) => v.write_xdr(w),
69836            Self::TransactionEnvelope(v) => v.write_xdr(w),
69837            Self::TransactionSignaturePayload(v) => v.write_xdr(w),
69838            Self::TransactionSignaturePayloadTaggedTransaction(v) => v.write_xdr(w),
69839            Self::ClaimAtomType(v) => v.write_xdr(w),
69840            Self::ClaimOfferAtomV0(v) => v.write_xdr(w),
69841            Self::ClaimOfferAtom(v) => v.write_xdr(w),
69842            Self::ClaimLiquidityAtom(v) => v.write_xdr(w),
69843            Self::ClaimAtom(v) => v.write_xdr(w),
69844            Self::CreateAccountResultCode(v) => v.write_xdr(w),
69845            Self::CreateAccountResult(v) => v.write_xdr(w),
69846            Self::PaymentResultCode(v) => v.write_xdr(w),
69847            Self::PaymentResult(v) => v.write_xdr(w),
69848            Self::PathPaymentStrictReceiveResultCode(v) => v.write_xdr(w),
69849            Self::SimplePaymentResult(v) => v.write_xdr(w),
69850            Self::PathPaymentStrictReceiveResult(v) => v.write_xdr(w),
69851            Self::PathPaymentStrictReceiveResultSuccess(v) => v.write_xdr(w),
69852            Self::PathPaymentStrictSendResultCode(v) => v.write_xdr(w),
69853            Self::PathPaymentStrictSendResult(v) => v.write_xdr(w),
69854            Self::PathPaymentStrictSendResultSuccess(v) => v.write_xdr(w),
69855            Self::ManageSellOfferResultCode(v) => v.write_xdr(w),
69856            Self::ManageOfferEffect(v) => v.write_xdr(w),
69857            Self::ManageOfferSuccessResult(v) => v.write_xdr(w),
69858            Self::ManageOfferSuccessResultOffer(v) => v.write_xdr(w),
69859            Self::ManageSellOfferResult(v) => v.write_xdr(w),
69860            Self::ManageBuyOfferResultCode(v) => v.write_xdr(w),
69861            Self::ManageBuyOfferResult(v) => v.write_xdr(w),
69862            Self::SetOptionsResultCode(v) => v.write_xdr(w),
69863            Self::SetOptionsResult(v) => v.write_xdr(w),
69864            Self::ChangeTrustResultCode(v) => v.write_xdr(w),
69865            Self::ChangeTrustResult(v) => v.write_xdr(w),
69866            Self::AllowTrustResultCode(v) => v.write_xdr(w),
69867            Self::AllowTrustResult(v) => v.write_xdr(w),
69868            Self::AccountMergeResultCode(v) => v.write_xdr(w),
69869            Self::AccountMergeResult(v) => v.write_xdr(w),
69870            Self::InflationResultCode(v) => v.write_xdr(w),
69871            Self::InflationPayout(v) => v.write_xdr(w),
69872            Self::InflationResult(v) => v.write_xdr(w),
69873            Self::ManageDataResultCode(v) => v.write_xdr(w),
69874            Self::ManageDataResult(v) => v.write_xdr(w),
69875            Self::BumpSequenceResultCode(v) => v.write_xdr(w),
69876            Self::BumpSequenceResult(v) => v.write_xdr(w),
69877            Self::CreateClaimableBalanceResultCode(v) => v.write_xdr(w),
69878            Self::CreateClaimableBalanceResult(v) => v.write_xdr(w),
69879            Self::ClaimClaimableBalanceResultCode(v) => v.write_xdr(w),
69880            Self::ClaimClaimableBalanceResult(v) => v.write_xdr(w),
69881            Self::BeginSponsoringFutureReservesResultCode(v) => v.write_xdr(w),
69882            Self::BeginSponsoringFutureReservesResult(v) => v.write_xdr(w),
69883            Self::EndSponsoringFutureReservesResultCode(v) => v.write_xdr(w),
69884            Self::EndSponsoringFutureReservesResult(v) => v.write_xdr(w),
69885            Self::RevokeSponsorshipResultCode(v) => v.write_xdr(w),
69886            Self::RevokeSponsorshipResult(v) => v.write_xdr(w),
69887            Self::ClawbackResultCode(v) => v.write_xdr(w),
69888            Self::ClawbackResult(v) => v.write_xdr(w),
69889            Self::ClawbackClaimableBalanceResultCode(v) => v.write_xdr(w),
69890            Self::ClawbackClaimableBalanceResult(v) => v.write_xdr(w),
69891            Self::SetTrustLineFlagsResultCode(v) => v.write_xdr(w),
69892            Self::SetTrustLineFlagsResult(v) => v.write_xdr(w),
69893            Self::LiquidityPoolDepositResultCode(v) => v.write_xdr(w),
69894            Self::LiquidityPoolDepositResult(v) => v.write_xdr(w),
69895            Self::LiquidityPoolWithdrawResultCode(v) => v.write_xdr(w),
69896            Self::LiquidityPoolWithdrawResult(v) => v.write_xdr(w),
69897            Self::InvokeHostFunctionResultCode(v) => v.write_xdr(w),
69898            Self::InvokeHostFunctionResult(v) => v.write_xdr(w),
69899            Self::ExtendFootprintTtlResultCode(v) => v.write_xdr(w),
69900            Self::ExtendFootprintTtlResult(v) => v.write_xdr(w),
69901            Self::RestoreFootprintResultCode(v) => v.write_xdr(w),
69902            Self::RestoreFootprintResult(v) => v.write_xdr(w),
69903            Self::OperationResultCode(v) => v.write_xdr(w),
69904            Self::OperationResult(v) => v.write_xdr(w),
69905            Self::OperationResultTr(v) => v.write_xdr(w),
69906            Self::TransactionResultCode(v) => v.write_xdr(w),
69907            Self::InnerTransactionResult(v) => v.write_xdr(w),
69908            Self::InnerTransactionResultResult(v) => v.write_xdr(w),
69909            Self::InnerTransactionResultExt(v) => v.write_xdr(w),
69910            Self::InnerTransactionResultPair(v) => v.write_xdr(w),
69911            Self::TransactionResult(v) => v.write_xdr(w),
69912            Self::TransactionResultResult(v) => v.write_xdr(w),
69913            Self::TransactionResultExt(v) => v.write_xdr(w),
69914            Self::Hash(v) => v.write_xdr(w),
69915            Self::Uint256(v) => v.write_xdr(w),
69916            Self::Uint32(v) => v.write_xdr(w),
69917            Self::Int32(v) => v.write_xdr(w),
69918            Self::Uint64(v) => v.write_xdr(w),
69919            Self::Int64(v) => v.write_xdr(w),
69920            Self::TimePoint(v) => v.write_xdr(w),
69921            Self::Duration(v) => v.write_xdr(w),
69922            Self::ExtensionPoint(v) => v.write_xdr(w),
69923            Self::CryptoKeyType(v) => v.write_xdr(w),
69924            Self::PublicKeyType(v) => v.write_xdr(w),
69925            Self::SignerKeyType(v) => v.write_xdr(w),
69926            Self::PublicKey(v) => v.write_xdr(w),
69927            Self::SignerKey(v) => v.write_xdr(w),
69928            Self::SignerKeyEd25519SignedPayload(v) => v.write_xdr(w),
69929            Self::Signature(v) => v.write_xdr(w),
69930            Self::SignatureHint(v) => v.write_xdr(w),
69931            Self::NodeId(v) => v.write_xdr(w),
69932            Self::AccountId(v) => v.write_xdr(w),
69933            Self::ContractId(v) => v.write_xdr(w),
69934            Self::Curve25519Secret(v) => v.write_xdr(w),
69935            Self::Curve25519Public(v) => v.write_xdr(w),
69936            Self::HmacSha256Key(v) => v.write_xdr(w),
69937            Self::HmacSha256Mac(v) => v.write_xdr(w),
69938            Self::ShortHashSeed(v) => v.write_xdr(w),
69939            Self::BinaryFuseFilterType(v) => v.write_xdr(w),
69940            Self::SerializedBinaryFuseFilter(v) => v.write_xdr(w),
69941            Self::PoolId(v) => v.write_xdr(w),
69942            Self::ClaimableBalanceIdType(v) => v.write_xdr(w),
69943            Self::ClaimableBalanceId(v) => v.write_xdr(w),
69944        }
69945    }
69946}