Skip to main content

stellar_xdr/generated/
path_payment_strict_receive_result.rs

1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4/// PathPaymentStrictReceiveResult is an XDR Union defined as:
5///
6/// ```text
7/// union PathPaymentStrictReceiveResult switch (
8///     PathPaymentStrictReceiveResultCode code)
9/// {
10/// case PATH_PAYMENT_STRICT_RECEIVE_SUCCESS:
11///     struct
12///     {
13///         ClaimAtom offers<>;
14///         SimplePaymentResult last;
15///     } success;
16/// case PATH_PAYMENT_STRICT_RECEIVE_MALFORMED:
17/// case PATH_PAYMENT_STRICT_RECEIVE_UNDERFUNDED:
18/// case PATH_PAYMENT_STRICT_RECEIVE_SRC_NO_TRUST:
19/// case PATH_PAYMENT_STRICT_RECEIVE_SRC_NOT_AUTHORIZED:
20/// case PATH_PAYMENT_STRICT_RECEIVE_NO_DESTINATION:
21/// case PATH_PAYMENT_STRICT_RECEIVE_NO_TRUST:
22/// case PATH_PAYMENT_STRICT_RECEIVE_NOT_AUTHORIZED:
23/// case PATH_PAYMENT_STRICT_RECEIVE_LINE_FULL:
24///     void;
25/// case PATH_PAYMENT_STRICT_RECEIVE_NO_ISSUER:
26///     Asset noIssuer; // the asset that caused the error
27/// case PATH_PAYMENT_STRICT_RECEIVE_TOO_FEW_OFFERS:
28/// case PATH_PAYMENT_STRICT_RECEIVE_OFFER_CROSS_SELF:
29/// case PATH_PAYMENT_STRICT_RECEIVE_OVER_SENDMAX:
30///     void;
31/// };
32/// ```
33///
34// union with discriminant PathPaymentStrictReceiveResultCode
35#[cfg_attr(feature = "serde", cfg_eval::cfg_eval)]
36#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
37#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
38#[cfg_attr(
39    all(feature = "serde", feature = "alloc"),
40    serde_with::serde_as,
41    derive(serde::Serialize, serde::Deserialize),
42    serde(rename_all = "snake_case")
43)]
44#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
45#[allow(clippy::large_enum_variant)]
46pub enum PathPaymentStrictReceiveResult {
47    Success(PathPaymentStrictReceiveResultSuccess),
48    Malformed,
49    Underfunded,
50    SrcNoTrust,
51    SrcNotAuthorized,
52    NoDestination,
53    NoTrust,
54    NotAuthorized,
55    LineFull,
56    NoIssuer(Asset),
57    TooFewOffers,
58    OfferCrossSelf,
59    OverSendmax,
60}
61
62#[cfg(feature = "alloc")]
63impl Default for PathPaymentStrictReceiveResult {
64    fn default() -> Self {
65        Self::Success(PathPaymentStrictReceiveResultSuccess::default())
66    }
67}
68
69impl PathPaymentStrictReceiveResult {
70    const _VARIANTS: &[PathPaymentStrictReceiveResultCode] = &[
71        PathPaymentStrictReceiveResultCode::Success,
72        PathPaymentStrictReceiveResultCode::Malformed,
73        PathPaymentStrictReceiveResultCode::Underfunded,
74        PathPaymentStrictReceiveResultCode::SrcNoTrust,
75        PathPaymentStrictReceiveResultCode::SrcNotAuthorized,
76        PathPaymentStrictReceiveResultCode::NoDestination,
77        PathPaymentStrictReceiveResultCode::NoTrust,
78        PathPaymentStrictReceiveResultCode::NotAuthorized,
79        PathPaymentStrictReceiveResultCode::LineFull,
80        PathPaymentStrictReceiveResultCode::NoIssuer,
81        PathPaymentStrictReceiveResultCode::TooFewOffers,
82        PathPaymentStrictReceiveResultCode::OfferCrossSelf,
83        PathPaymentStrictReceiveResultCode::OverSendmax,
84    ];
85    pub const VARIANTS: [PathPaymentStrictReceiveResultCode; Self::_VARIANTS.len()] = {
86        let mut arr = [Self::_VARIANTS[0]; Self::_VARIANTS.len()];
87        let mut i = 1;
88        while i < Self::_VARIANTS.len() {
89            arr[i] = Self::_VARIANTS[i];
90            i += 1;
91        }
92        arr
93    };
94    const _VARIANTS_STR: &[&str] = &[
95        "Success",
96        "Malformed",
97        "Underfunded",
98        "SrcNoTrust",
99        "SrcNotAuthorized",
100        "NoDestination",
101        "NoTrust",
102        "NotAuthorized",
103        "LineFull",
104        "NoIssuer",
105        "TooFewOffers",
106        "OfferCrossSelf",
107        "OverSendmax",
108    ];
109    pub const VARIANTS_STR: [&'static str; Self::_VARIANTS_STR.len()] = {
110        let mut arr = [Self::_VARIANTS_STR[0]; Self::_VARIANTS_STR.len()];
111        let mut i = 1;
112        while i < Self::_VARIANTS_STR.len() {
113            arr[i] = Self::_VARIANTS_STR[i];
114            i += 1;
115        }
116        arr
117    };
118
119    #[must_use]
120    pub const fn name(&self) -> &'static str {
121        match self {
122            Self::Success(_) => "Success",
123            Self::Malformed => "Malformed",
124            Self::Underfunded => "Underfunded",
125            Self::SrcNoTrust => "SrcNoTrust",
126            Self::SrcNotAuthorized => "SrcNotAuthorized",
127            Self::NoDestination => "NoDestination",
128            Self::NoTrust => "NoTrust",
129            Self::NotAuthorized => "NotAuthorized",
130            Self::LineFull => "LineFull",
131            Self::NoIssuer(_) => "NoIssuer",
132            Self::TooFewOffers => "TooFewOffers",
133            Self::OfferCrossSelf => "OfferCrossSelf",
134            Self::OverSendmax => "OverSendmax",
135        }
136    }
137
138    #[must_use]
139    pub const fn discriminant(&self) -> PathPaymentStrictReceiveResultCode {
140        #[allow(clippy::match_same_arms)]
141        match self {
142            Self::Success(_) => PathPaymentStrictReceiveResultCode::Success,
143            Self::Malformed => PathPaymentStrictReceiveResultCode::Malformed,
144            Self::Underfunded => PathPaymentStrictReceiveResultCode::Underfunded,
145            Self::SrcNoTrust => PathPaymentStrictReceiveResultCode::SrcNoTrust,
146            Self::SrcNotAuthorized => PathPaymentStrictReceiveResultCode::SrcNotAuthorized,
147            Self::NoDestination => PathPaymentStrictReceiveResultCode::NoDestination,
148            Self::NoTrust => PathPaymentStrictReceiveResultCode::NoTrust,
149            Self::NotAuthorized => PathPaymentStrictReceiveResultCode::NotAuthorized,
150            Self::LineFull => PathPaymentStrictReceiveResultCode::LineFull,
151            Self::NoIssuer(_) => PathPaymentStrictReceiveResultCode::NoIssuer,
152            Self::TooFewOffers => PathPaymentStrictReceiveResultCode::TooFewOffers,
153            Self::OfferCrossSelf => PathPaymentStrictReceiveResultCode::OfferCrossSelf,
154            Self::OverSendmax => PathPaymentStrictReceiveResultCode::OverSendmax,
155        }
156    }
157
158    #[must_use]
159    pub const fn variants() -> [PathPaymentStrictReceiveResultCode; Self::_VARIANTS.len()] {
160        Self::VARIANTS
161    }
162}
163
164impl Name for PathPaymentStrictReceiveResult {
165    #[must_use]
166    fn name(&self) -> &'static str {
167        Self::name(self)
168    }
169}
170
171impl Discriminant<PathPaymentStrictReceiveResultCode> for PathPaymentStrictReceiveResult {
172    #[must_use]
173    fn discriminant(&self) -> PathPaymentStrictReceiveResultCode {
174        Self::discriminant(self)
175    }
176}
177
178impl Variants<PathPaymentStrictReceiveResultCode> for PathPaymentStrictReceiveResult {
179    fn variants() -> slice::Iter<'static, PathPaymentStrictReceiveResultCode> {
180        Self::VARIANTS.iter()
181    }
182}
183
184impl Union<PathPaymentStrictReceiveResultCode> for PathPaymentStrictReceiveResult {}
185
186impl ReadXdr for PathPaymentStrictReceiveResult {
187    #[cfg(feature = "std")]
188    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
189        r.with_limited_depth(|r| {
190            let dv: PathPaymentStrictReceiveResultCode =
191                <PathPaymentStrictReceiveResultCode as ReadXdr>::read_xdr(r)?;
192            #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
193            let v = match dv {
194                PathPaymentStrictReceiveResultCode::Success => {
195                    Self::Success(PathPaymentStrictReceiveResultSuccess::read_xdr(r)?)
196                }
197                PathPaymentStrictReceiveResultCode::Malformed => Self::Malformed,
198                PathPaymentStrictReceiveResultCode::Underfunded => Self::Underfunded,
199                PathPaymentStrictReceiveResultCode::SrcNoTrust => Self::SrcNoTrust,
200                PathPaymentStrictReceiveResultCode::SrcNotAuthorized => Self::SrcNotAuthorized,
201                PathPaymentStrictReceiveResultCode::NoDestination => Self::NoDestination,
202                PathPaymentStrictReceiveResultCode::NoTrust => Self::NoTrust,
203                PathPaymentStrictReceiveResultCode::NotAuthorized => Self::NotAuthorized,
204                PathPaymentStrictReceiveResultCode::LineFull => Self::LineFull,
205                PathPaymentStrictReceiveResultCode::NoIssuer => Self::NoIssuer(Asset::read_xdr(r)?),
206                PathPaymentStrictReceiveResultCode::TooFewOffers => Self::TooFewOffers,
207                PathPaymentStrictReceiveResultCode::OfferCrossSelf => Self::OfferCrossSelf,
208                PathPaymentStrictReceiveResultCode::OverSendmax => Self::OverSendmax,
209                #[allow(unreachable_patterns)]
210                _ => return Err(Error::Invalid),
211            };
212            Ok(v)
213        })
214    }
215}
216
217impl WriteXdr for PathPaymentStrictReceiveResult {
218    #[cfg(feature = "std")]
219    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
220        w.with_limited_depth(|w| {
221            self.discriminant().write_xdr(w)?;
222            #[allow(clippy::match_same_arms)]
223            match self {
224                Self::Success(v) => v.write_xdr(w)?,
225                Self::Malformed => ().write_xdr(w)?,
226                Self::Underfunded => ().write_xdr(w)?,
227                Self::SrcNoTrust => ().write_xdr(w)?,
228                Self::SrcNotAuthorized => ().write_xdr(w)?,
229                Self::NoDestination => ().write_xdr(w)?,
230                Self::NoTrust => ().write_xdr(w)?,
231                Self::NotAuthorized => ().write_xdr(w)?,
232                Self::LineFull => ().write_xdr(w)?,
233                Self::NoIssuer(v) => v.write_xdr(w)?,
234                Self::TooFewOffers => ().write_xdr(w)?,
235                Self::OfferCrossSelf => ().write_xdr(w)?,
236                Self::OverSendmax => ().write_xdr(w)?,
237            };
238            Ok(())
239        })
240    }
241}