1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4#[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}