1#[derive(Clone, Debug)]
6#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
7pub struct SourceTransaction {
8 pub ach_credit_transfer: Option<stripe_shared::SourceTransactionAchCreditTransferData>,
9 pub amount: i64,
11 pub chf_credit_transfer: Option<stripe_shared::SourceTransactionChfCreditTransferData>,
12 pub created: stripe_types::Timestamp,
14 pub currency: stripe_types::Currency,
17 pub gbp_credit_transfer: Option<stripe_shared::SourceTransactionGbpCreditTransferData>,
18 pub id: stripe_shared::SourceTransactionId,
20 pub livemode: bool,
22 pub paper_check: Option<stripe_shared::SourceTransactionPaperCheckData>,
23 pub sepa_credit_transfer: Option<stripe_shared::SourceTransactionSepaCreditTransferData>,
24 pub source: String,
26 pub status: String,
28 #[cfg_attr(feature = "deserialize", serde(rename = "type"))]
30 pub type_: SourceTransactionType,
31}
32#[doc(hidden)]
33pub struct SourceTransactionBuilder {
34 ach_credit_transfer: Option<Option<stripe_shared::SourceTransactionAchCreditTransferData>>,
35 amount: Option<i64>,
36 chf_credit_transfer: Option<Option<stripe_shared::SourceTransactionChfCreditTransferData>>,
37 created: Option<stripe_types::Timestamp>,
38 currency: Option<stripe_types::Currency>,
39 gbp_credit_transfer: Option<Option<stripe_shared::SourceTransactionGbpCreditTransferData>>,
40 id: Option<stripe_shared::SourceTransactionId>,
41 livemode: Option<bool>,
42 paper_check: Option<Option<stripe_shared::SourceTransactionPaperCheckData>>,
43 sepa_credit_transfer: Option<Option<stripe_shared::SourceTransactionSepaCreditTransferData>>,
44 source: Option<String>,
45 status: Option<String>,
46 type_: Option<SourceTransactionType>,
47}
48
49#[allow(
50 unused_variables,
51 irrefutable_let_patterns,
52 clippy::let_unit_value,
53 clippy::match_single_binding,
54 clippy::single_match
55)]
56const _: () = {
57 use miniserde::de::{Map, Visitor};
58 use miniserde::json::Value;
59 use miniserde::{Deserialize, Result, make_place};
60 use stripe_types::miniserde_helpers::FromValueOpt;
61 use stripe_types::{MapBuilder, ObjectDeser};
62
63 make_place!(Place);
64
65 impl Deserialize for SourceTransaction {
66 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
67 Place::new(out)
68 }
69 }
70
71 struct Builder<'a> {
72 out: &'a mut Option<SourceTransaction>,
73 builder: SourceTransactionBuilder,
74 }
75
76 impl Visitor for Place<SourceTransaction> {
77 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
78 Ok(Box::new(Builder {
79 out: &mut self.out,
80 builder: SourceTransactionBuilder::deser_default(),
81 }))
82 }
83 }
84
85 impl MapBuilder for SourceTransactionBuilder {
86 type Out = SourceTransaction;
87 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
88 Ok(match k {
89 "ach_credit_transfer" => Deserialize::begin(&mut self.ach_credit_transfer),
90 "amount" => Deserialize::begin(&mut self.amount),
91 "chf_credit_transfer" => Deserialize::begin(&mut self.chf_credit_transfer),
92 "created" => Deserialize::begin(&mut self.created),
93 "currency" => Deserialize::begin(&mut self.currency),
94 "gbp_credit_transfer" => Deserialize::begin(&mut self.gbp_credit_transfer),
95 "id" => Deserialize::begin(&mut self.id),
96 "livemode" => Deserialize::begin(&mut self.livemode),
97 "paper_check" => Deserialize::begin(&mut self.paper_check),
98 "sepa_credit_transfer" => Deserialize::begin(&mut self.sepa_credit_transfer),
99 "source" => Deserialize::begin(&mut self.source),
100 "status" => Deserialize::begin(&mut self.status),
101 "type" => Deserialize::begin(&mut self.type_),
102 _ => <dyn Visitor>::ignore(),
103 })
104 }
105
106 fn deser_default() -> Self {
107 Self {
108 ach_credit_transfer: Deserialize::default(),
109 amount: Deserialize::default(),
110 chf_credit_transfer: Deserialize::default(),
111 created: Deserialize::default(),
112 currency: Deserialize::default(),
113 gbp_credit_transfer: Deserialize::default(),
114 id: Deserialize::default(),
115 livemode: Deserialize::default(),
116 paper_check: Deserialize::default(),
117 sepa_credit_transfer: Deserialize::default(),
118 source: Deserialize::default(),
119 status: Deserialize::default(),
120 type_: Deserialize::default(),
121 }
122 }
123
124 fn take_out(&mut self) -> Option<Self::Out> {
125 let (
126 Some(ach_credit_transfer),
127 Some(amount),
128 Some(chf_credit_transfer),
129 Some(created),
130 Some(currency),
131 Some(gbp_credit_transfer),
132 Some(id),
133 Some(livemode),
134 Some(paper_check),
135 Some(sepa_credit_transfer),
136 Some(source),
137 Some(status),
138 Some(type_),
139 ) = (
140 self.ach_credit_transfer.take(),
141 self.amount,
142 self.chf_credit_transfer.take(),
143 self.created,
144 self.currency.take(),
145 self.gbp_credit_transfer.take(),
146 self.id.take(),
147 self.livemode,
148 self.paper_check.take(),
149 self.sepa_credit_transfer.take(),
150 self.source.take(),
151 self.status.take(),
152 self.type_.take(),
153 )
154 else {
155 return None;
156 };
157 Some(Self::Out {
158 ach_credit_transfer,
159 amount,
160 chf_credit_transfer,
161 created,
162 currency,
163 gbp_credit_transfer,
164 id,
165 livemode,
166 paper_check,
167 sepa_credit_transfer,
168 source,
169 status,
170 type_,
171 })
172 }
173 }
174
175 impl Map for Builder<'_> {
176 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
177 self.builder.key(k)
178 }
179
180 fn finish(&mut self) -> Result<()> {
181 *self.out = self.builder.take_out();
182 Ok(())
183 }
184 }
185
186 impl ObjectDeser for SourceTransaction {
187 type Builder = SourceTransactionBuilder;
188 }
189
190 impl FromValueOpt for SourceTransaction {
191 fn from_value(v: Value) -> Option<Self> {
192 let Value::Object(obj) = v else {
193 return None;
194 };
195 let mut b = SourceTransactionBuilder::deser_default();
196 for (k, v) in obj {
197 match k.as_str() {
198 "ach_credit_transfer" => b.ach_credit_transfer = FromValueOpt::from_value(v),
199 "amount" => b.amount = FromValueOpt::from_value(v),
200 "chf_credit_transfer" => b.chf_credit_transfer = FromValueOpt::from_value(v),
201 "created" => b.created = FromValueOpt::from_value(v),
202 "currency" => b.currency = FromValueOpt::from_value(v),
203 "gbp_credit_transfer" => b.gbp_credit_transfer = FromValueOpt::from_value(v),
204 "id" => b.id = FromValueOpt::from_value(v),
205 "livemode" => b.livemode = FromValueOpt::from_value(v),
206 "paper_check" => b.paper_check = FromValueOpt::from_value(v),
207 "sepa_credit_transfer" => b.sepa_credit_transfer = FromValueOpt::from_value(v),
208 "source" => b.source = FromValueOpt::from_value(v),
209 "status" => b.status = FromValueOpt::from_value(v),
210 "type" => b.type_ = FromValueOpt::from_value(v),
211 _ => {}
212 }
213 }
214 b.take_out()
215 }
216 }
217};
218#[cfg(feature = "serialize")]
219impl serde::Serialize for SourceTransaction {
220 fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
221 use serde::ser::SerializeStruct;
222 let mut s = s.serialize_struct("SourceTransaction", 14)?;
223 s.serialize_field("ach_credit_transfer", &self.ach_credit_transfer)?;
224 s.serialize_field("amount", &self.amount)?;
225 s.serialize_field("chf_credit_transfer", &self.chf_credit_transfer)?;
226 s.serialize_field("created", &self.created)?;
227 s.serialize_field("currency", &self.currency)?;
228 s.serialize_field("gbp_credit_transfer", &self.gbp_credit_transfer)?;
229 s.serialize_field("id", &self.id)?;
230 s.serialize_field("livemode", &self.livemode)?;
231 s.serialize_field("paper_check", &self.paper_check)?;
232 s.serialize_field("sepa_credit_transfer", &self.sepa_credit_transfer)?;
233 s.serialize_field("source", &self.source)?;
234 s.serialize_field("status", &self.status)?;
235 s.serialize_field("type", &self.type_)?;
236
237 s.serialize_field("object", "source_transaction")?;
238 s.end()
239 }
240}
241#[derive(Clone, Eq, PartialEq)]
243#[non_exhaustive]
244pub enum SourceTransactionType {
245 AchCreditTransfer,
246 AchDebit,
247 Alipay,
248 Bancontact,
249 Card,
250 CardPresent,
251 Eps,
252 Giropay,
253 Ideal,
254 Klarna,
255 Multibanco,
256 P24,
257 SepaDebit,
258 Sofort,
259 ThreeDSecure,
260 Wechat,
261 Unknown(String),
263}
264impl SourceTransactionType {
265 pub fn as_str(&self) -> &str {
266 use SourceTransactionType::*;
267 match self {
268 AchCreditTransfer => "ach_credit_transfer",
269 AchDebit => "ach_debit",
270 Alipay => "alipay",
271 Bancontact => "bancontact",
272 Card => "card",
273 CardPresent => "card_present",
274 Eps => "eps",
275 Giropay => "giropay",
276 Ideal => "ideal",
277 Klarna => "klarna",
278 Multibanco => "multibanco",
279 P24 => "p24",
280 SepaDebit => "sepa_debit",
281 Sofort => "sofort",
282 ThreeDSecure => "three_d_secure",
283 Wechat => "wechat",
284 Unknown(v) => v,
285 }
286 }
287}
288
289impl std::str::FromStr for SourceTransactionType {
290 type Err = std::convert::Infallible;
291 fn from_str(s: &str) -> Result<Self, Self::Err> {
292 use SourceTransactionType::*;
293 match s {
294 "ach_credit_transfer" => Ok(AchCreditTransfer),
295 "ach_debit" => Ok(AchDebit),
296 "alipay" => Ok(Alipay),
297 "bancontact" => Ok(Bancontact),
298 "card" => Ok(Card),
299 "card_present" => Ok(CardPresent),
300 "eps" => Ok(Eps),
301 "giropay" => Ok(Giropay),
302 "ideal" => Ok(Ideal),
303 "klarna" => Ok(Klarna),
304 "multibanco" => Ok(Multibanco),
305 "p24" => Ok(P24),
306 "sepa_debit" => Ok(SepaDebit),
307 "sofort" => Ok(Sofort),
308 "three_d_secure" => Ok(ThreeDSecure),
309 "wechat" => Ok(Wechat),
310 v => Ok(Unknown(v.to_owned())),
311 }
312 }
313}
314impl std::fmt::Display for SourceTransactionType {
315 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
316 f.write_str(self.as_str())
317 }
318}
319
320impl std::fmt::Debug for SourceTransactionType {
321 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
322 f.write_str(self.as_str())
323 }
324}
325#[cfg(feature = "serialize")]
326impl serde::Serialize for SourceTransactionType {
327 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
328 where
329 S: serde::Serializer,
330 {
331 serializer.serialize_str(self.as_str())
332 }
333}
334impl miniserde::Deserialize for SourceTransactionType {
335 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
336 crate::Place::new(out)
337 }
338}
339
340impl miniserde::de::Visitor for crate::Place<SourceTransactionType> {
341 fn string(&mut self, s: &str) -> miniserde::Result<()> {
342 use std::str::FromStr;
343 self.out = Some(SourceTransactionType::from_str(s).unwrap());
344 Ok(())
345 }
346}
347
348stripe_types::impl_from_val_with_from_str!(SourceTransactionType);
349#[cfg(feature = "deserialize")]
350impl<'de> serde::Deserialize<'de> for SourceTransactionType {
351 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
352 use std::str::FromStr;
353 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
354 Ok(Self::from_str(&s).unwrap())
355 }
356}
357impl stripe_types::Object for SourceTransaction {
358 type Id = stripe_shared::SourceTransactionId;
359 fn id(&self) -> &Self::Id {
360 &self.id
361 }
362
363 fn into_id(self) -> Self::Id {
364 self.id
365 }
366}
367stripe_types::def_id!(SourceTransactionId);