Skip to main content

stellar_xdr/generated/
account_merge_result_code.rs

1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4/// AccountMergeResultCode is an XDR Enum defined as:
5///
6/// ```text
7/// enum AccountMergeResultCode
8/// {
9///     // codes considered as "success" for the operation
10///     ACCOUNT_MERGE_SUCCESS = 0,
11///     // codes considered as "failure" for the operation
12///     ACCOUNT_MERGE_MALFORMED = -1,       // can't merge onto itself
13///     ACCOUNT_MERGE_NO_ACCOUNT = -2,      // destination does not exist
14///     ACCOUNT_MERGE_IMMUTABLE_SET = -3,   // source account has AUTH_IMMUTABLE set
15///     ACCOUNT_MERGE_HAS_SUB_ENTRIES = -4, // account has trust lines/offers
16///     ACCOUNT_MERGE_SEQNUM_TOO_FAR = -5,  // sequence number is over max allowed
17///     ACCOUNT_MERGE_DEST_FULL = -6,       // can't add source balance to
18///                                         // destination balance
19///     ACCOUNT_MERGE_IS_SPONSOR = -7       // can't merge account that is a sponsor
20/// };
21/// ```
22///
23// enum
24#[cfg_attr(feature = "alloc", derive(Default))]
25#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
26#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
27#[cfg_attr(
28    all(feature = "serde", feature = "alloc"),
29    derive(serde::Serialize, serde::Deserialize),
30    serde(rename_all = "snake_case")
31)]
32#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
33#[repr(i32)]
34pub enum AccountMergeResultCode {
35    #[cfg_attr(feature = "alloc", default)]
36    Success = 0,
37    Malformed = -1,
38    NoAccount = -2,
39    ImmutableSet = -3,
40    HasSubEntries = -4,
41    SeqnumTooFar = -5,
42    DestFull = -6,
43    IsSponsor = -7,
44}
45
46impl AccountMergeResultCode {
47    const _VARIANTS: &[AccountMergeResultCode] = &[
48        AccountMergeResultCode::Success,
49        AccountMergeResultCode::Malformed,
50        AccountMergeResultCode::NoAccount,
51        AccountMergeResultCode::ImmutableSet,
52        AccountMergeResultCode::HasSubEntries,
53        AccountMergeResultCode::SeqnumTooFar,
54        AccountMergeResultCode::DestFull,
55        AccountMergeResultCode::IsSponsor,
56    ];
57    pub const VARIANTS: [AccountMergeResultCode; Self::_VARIANTS.len()] = {
58        let mut arr = [Self::_VARIANTS[0]; Self::_VARIANTS.len()];
59        let mut i = 1;
60        while i < Self::_VARIANTS.len() {
61            arr[i] = Self::_VARIANTS[i];
62            i += 1;
63        }
64        arr
65    };
66    const _VARIANTS_STR: &[&str] = &[
67        "Success",
68        "Malformed",
69        "NoAccount",
70        "ImmutableSet",
71        "HasSubEntries",
72        "SeqnumTooFar",
73        "DestFull",
74        "IsSponsor",
75    ];
76    pub const VARIANTS_STR: [&'static str; Self::_VARIANTS_STR.len()] = {
77        let mut arr = [Self::_VARIANTS_STR[0]; Self::_VARIANTS_STR.len()];
78        let mut i = 1;
79        while i < Self::_VARIANTS_STR.len() {
80            arr[i] = Self::_VARIANTS_STR[i];
81            i += 1;
82        }
83        arr
84    };
85
86    #[must_use]
87    pub const fn name(&self) -> &'static str {
88        match self {
89            Self::Success => "Success",
90            Self::Malformed => "Malformed",
91            Self::NoAccount => "NoAccount",
92            Self::ImmutableSet => "ImmutableSet",
93            Self::HasSubEntries => "HasSubEntries",
94            Self::SeqnumTooFar => "SeqnumTooFar",
95            Self::DestFull => "DestFull",
96            Self::IsSponsor => "IsSponsor",
97        }
98    }
99
100    #[must_use]
101    pub const fn variants() -> [AccountMergeResultCode; Self::_VARIANTS.len()] {
102        Self::VARIANTS
103    }
104}
105
106impl Name for AccountMergeResultCode {
107    #[must_use]
108    fn name(&self) -> &'static str {
109        Self::name(self)
110    }
111}
112
113impl Variants<AccountMergeResultCode> for AccountMergeResultCode {
114    fn variants() -> slice::Iter<'static, AccountMergeResultCode> {
115        Self::VARIANTS.iter()
116    }
117}
118
119impl Enum for AccountMergeResultCode {}
120
121impl fmt::Display for AccountMergeResultCode {
122    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
123        f.write_str(self.name())
124    }
125}
126
127impl TryFrom<i32> for AccountMergeResultCode {
128    type Error = Error;
129
130    fn try_from(i: i32) -> Result<Self, Error> {
131        let e = match i {
132            0 => AccountMergeResultCode::Success,
133            -1 => AccountMergeResultCode::Malformed,
134            -2 => AccountMergeResultCode::NoAccount,
135            -3 => AccountMergeResultCode::ImmutableSet,
136            -4 => AccountMergeResultCode::HasSubEntries,
137            -5 => AccountMergeResultCode::SeqnumTooFar,
138            -6 => AccountMergeResultCode::DestFull,
139            -7 => AccountMergeResultCode::IsSponsor,
140            #[allow(unreachable_patterns)]
141            _ => return Err(Error::Invalid),
142        };
143        Ok(e)
144    }
145}
146
147impl From<AccountMergeResultCode> for i32 {
148    #[must_use]
149    fn from(e: AccountMergeResultCode) -> Self {
150        e as Self
151    }
152}
153
154impl ReadXdr for AccountMergeResultCode {
155    #[cfg(feature = "std")]
156    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
157        r.with_limited_depth(|r| {
158            let e = i32::read_xdr(r)?;
159            let v: Self = e.try_into()?;
160            Ok(v)
161        })
162    }
163}
164
165impl WriteXdr for AccountMergeResultCode {
166    #[cfg(feature = "std")]
167    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
168        w.with_limited_depth(|w| {
169            let i: i32 = (*self).into();
170            i.write_xdr(w)
171        })
172    }
173}