Skip to main content

stellar_xdr/generated/
account_merge_result.rs

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