1#[derive(Clone, Debug)]
14#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
15pub struct Source {
16 pub ach_credit_transfer: Option<stripe_shared::SourceTypeAchCreditTransfer>,
17 pub ach_debit: Option<stripe_shared::SourceTypeAchDebit>,
18 pub acss_debit: Option<stripe_shared::SourceTypeAcssDebit>,
19 pub alipay: Option<stripe_shared::SourceTypeAlipay>,
20 pub allow_redisplay: Option<SourceAllowRedisplay>,
24 pub amount: Option<i64>,
28 pub au_becs_debit: Option<stripe_shared::SourceTypeAuBecsDebit>,
29 pub bancontact: Option<stripe_shared::SourceTypeBancontact>,
30 pub card: Option<stripe_shared::SourceTypeCard>,
31 pub card_present: Option<stripe_shared::SourceTypeCardPresent>,
32 pub client_secret: String,
34 pub code_verification: Option<stripe_shared::SourceCodeVerificationFlow>,
35 pub created: stripe_types::Timestamp,
37 pub currency: Option<stripe_types::Currency>,
41 pub customer: Option<String>,
44 pub eps: Option<stripe_shared::SourceTypeEps>,
45 pub flow: String,
48 pub giropay: Option<stripe_shared::SourceTypeGiropay>,
49 pub id: stripe_shared::SourceId,
51 pub ideal: Option<stripe_shared::SourceTypeIdeal>,
52 pub klarna: Option<stripe_shared::SourceTypeKlarna>,
53 pub livemode: bool,
55 pub metadata: Option<std::collections::HashMap<String, String>>,
58 pub multibanco: Option<stripe_shared::SourceTypeMultibanco>,
59 pub owner: Option<stripe_shared::SourceOwner>,
61 pub p24: Option<stripe_shared::SourceTypeP24>,
62 pub receiver: Option<stripe_shared::SourceReceiverFlow>,
63 pub redirect: Option<stripe_shared::SourceRedirectFlow>,
64 pub sepa_credit_transfer: Option<stripe_shared::SourceTypeSepaCreditTransfer>,
65 pub sepa_debit: Option<stripe_shared::SourceTypeSepaDebit>,
66 pub sofort: Option<stripe_shared::SourceTypeSofort>,
67 pub source_order: Option<stripe_shared::SourceOrder>,
68 pub statement_descriptor: Option<String>,
71 pub status: String,
74 pub three_d_secure: Option<stripe_shared::SourceTypeThreeDSecure>,
75 #[cfg_attr(feature = "deserialize", serde(rename = "type"))]
80 pub type_: SourceType,
81 pub usage: Option<String>,
86 pub wechat: Option<stripe_shared::SourceTypeWechat>,
87}
88#[doc(hidden)]
89pub struct SourceBuilder {
90 ach_credit_transfer: Option<Option<stripe_shared::SourceTypeAchCreditTransfer>>,
91 ach_debit: Option<Option<stripe_shared::SourceTypeAchDebit>>,
92 acss_debit: Option<Option<stripe_shared::SourceTypeAcssDebit>>,
93 alipay: Option<Option<stripe_shared::SourceTypeAlipay>>,
94 allow_redisplay: Option<Option<SourceAllowRedisplay>>,
95 amount: Option<Option<i64>>,
96 au_becs_debit: Option<Option<stripe_shared::SourceTypeAuBecsDebit>>,
97 bancontact: Option<Option<stripe_shared::SourceTypeBancontact>>,
98 card: Option<Option<stripe_shared::SourceTypeCard>>,
99 card_present: Option<Option<stripe_shared::SourceTypeCardPresent>>,
100 client_secret: Option<String>,
101 code_verification: Option<Option<stripe_shared::SourceCodeVerificationFlow>>,
102 created: Option<stripe_types::Timestamp>,
103 currency: Option<Option<stripe_types::Currency>>,
104 customer: Option<Option<String>>,
105 eps: Option<Option<stripe_shared::SourceTypeEps>>,
106 flow: Option<String>,
107 giropay: Option<Option<stripe_shared::SourceTypeGiropay>>,
108 id: Option<stripe_shared::SourceId>,
109 ideal: Option<Option<stripe_shared::SourceTypeIdeal>>,
110 klarna: Option<Option<stripe_shared::SourceTypeKlarna>>,
111 livemode: Option<bool>,
112 metadata: Option<Option<std::collections::HashMap<String, String>>>,
113 multibanco: Option<Option<stripe_shared::SourceTypeMultibanco>>,
114 owner: Option<Option<stripe_shared::SourceOwner>>,
115 p24: Option<Option<stripe_shared::SourceTypeP24>>,
116 receiver: Option<Option<stripe_shared::SourceReceiverFlow>>,
117 redirect: Option<Option<stripe_shared::SourceRedirectFlow>>,
118 sepa_credit_transfer: Option<Option<stripe_shared::SourceTypeSepaCreditTransfer>>,
119 sepa_debit: Option<Option<stripe_shared::SourceTypeSepaDebit>>,
120 sofort: Option<Option<stripe_shared::SourceTypeSofort>>,
121 source_order: Option<Option<stripe_shared::SourceOrder>>,
122 statement_descriptor: Option<Option<String>>,
123 status: Option<String>,
124 three_d_secure: Option<Option<stripe_shared::SourceTypeThreeDSecure>>,
125 type_: Option<SourceType>,
126 usage: Option<Option<String>>,
127 wechat: Option<Option<stripe_shared::SourceTypeWechat>>,
128}
129
130#[allow(
131 unused_variables,
132 irrefutable_let_patterns,
133 clippy::let_unit_value,
134 clippy::match_single_binding,
135 clippy::single_match
136)]
137const _: () = {
138 use miniserde::de::{Map, Visitor};
139 use miniserde::json::Value;
140 use miniserde::{Deserialize, Result, make_place};
141 use stripe_types::miniserde_helpers::FromValueOpt;
142 use stripe_types::{MapBuilder, ObjectDeser};
143
144 make_place!(Place);
145
146 impl Deserialize for Source {
147 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
148 Place::new(out)
149 }
150 }
151
152 struct Builder<'a> {
153 out: &'a mut Option<Source>,
154 builder: SourceBuilder,
155 }
156
157 impl Visitor for Place<Source> {
158 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
159 Ok(Box::new(Builder { out: &mut self.out, builder: SourceBuilder::deser_default() }))
160 }
161 }
162
163 impl MapBuilder for SourceBuilder {
164 type Out = Source;
165 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
166 Ok(match k {
167 "ach_credit_transfer" => Deserialize::begin(&mut self.ach_credit_transfer),
168 "ach_debit" => Deserialize::begin(&mut self.ach_debit),
169 "acss_debit" => Deserialize::begin(&mut self.acss_debit),
170 "alipay" => Deserialize::begin(&mut self.alipay),
171 "allow_redisplay" => Deserialize::begin(&mut self.allow_redisplay),
172 "amount" => Deserialize::begin(&mut self.amount),
173 "au_becs_debit" => Deserialize::begin(&mut self.au_becs_debit),
174 "bancontact" => Deserialize::begin(&mut self.bancontact),
175 "card" => Deserialize::begin(&mut self.card),
176 "card_present" => Deserialize::begin(&mut self.card_present),
177 "client_secret" => Deserialize::begin(&mut self.client_secret),
178 "code_verification" => Deserialize::begin(&mut self.code_verification),
179 "created" => Deserialize::begin(&mut self.created),
180 "currency" => Deserialize::begin(&mut self.currency),
181 "customer" => Deserialize::begin(&mut self.customer),
182 "eps" => Deserialize::begin(&mut self.eps),
183 "flow" => Deserialize::begin(&mut self.flow),
184 "giropay" => Deserialize::begin(&mut self.giropay),
185 "id" => Deserialize::begin(&mut self.id),
186 "ideal" => Deserialize::begin(&mut self.ideal),
187 "klarna" => Deserialize::begin(&mut self.klarna),
188 "livemode" => Deserialize::begin(&mut self.livemode),
189 "metadata" => Deserialize::begin(&mut self.metadata),
190 "multibanco" => Deserialize::begin(&mut self.multibanco),
191 "owner" => Deserialize::begin(&mut self.owner),
192 "p24" => Deserialize::begin(&mut self.p24),
193 "receiver" => Deserialize::begin(&mut self.receiver),
194 "redirect" => Deserialize::begin(&mut self.redirect),
195 "sepa_credit_transfer" => Deserialize::begin(&mut self.sepa_credit_transfer),
196 "sepa_debit" => Deserialize::begin(&mut self.sepa_debit),
197 "sofort" => Deserialize::begin(&mut self.sofort),
198 "source_order" => Deserialize::begin(&mut self.source_order),
199 "statement_descriptor" => Deserialize::begin(&mut self.statement_descriptor),
200 "status" => Deserialize::begin(&mut self.status),
201 "three_d_secure" => Deserialize::begin(&mut self.three_d_secure),
202 "type" => Deserialize::begin(&mut self.type_),
203 "usage" => Deserialize::begin(&mut self.usage),
204 "wechat" => Deserialize::begin(&mut self.wechat),
205 _ => <dyn Visitor>::ignore(),
206 })
207 }
208
209 fn deser_default() -> Self {
210 Self {
211 ach_credit_transfer: Deserialize::default(),
212 ach_debit: Deserialize::default(),
213 acss_debit: Deserialize::default(),
214 alipay: Deserialize::default(),
215 allow_redisplay: Deserialize::default(),
216 amount: Deserialize::default(),
217 au_becs_debit: Deserialize::default(),
218 bancontact: Deserialize::default(),
219 card: Deserialize::default(),
220 card_present: Deserialize::default(),
221 client_secret: Deserialize::default(),
222 code_verification: Deserialize::default(),
223 created: Deserialize::default(),
224 currency: Deserialize::default(),
225 customer: Deserialize::default(),
226 eps: Deserialize::default(),
227 flow: Deserialize::default(),
228 giropay: Deserialize::default(),
229 id: Deserialize::default(),
230 ideal: Deserialize::default(),
231 klarna: Deserialize::default(),
232 livemode: Deserialize::default(),
233 metadata: Deserialize::default(),
234 multibanco: Deserialize::default(),
235 owner: Deserialize::default(),
236 p24: Deserialize::default(),
237 receiver: Deserialize::default(),
238 redirect: Deserialize::default(),
239 sepa_credit_transfer: Deserialize::default(),
240 sepa_debit: Deserialize::default(),
241 sofort: Deserialize::default(),
242 source_order: Deserialize::default(),
243 statement_descriptor: Deserialize::default(),
244 status: Deserialize::default(),
245 three_d_secure: Deserialize::default(),
246 type_: Deserialize::default(),
247 usage: Deserialize::default(),
248 wechat: Deserialize::default(),
249 }
250 }
251
252 fn take_out(&mut self) -> Option<Self::Out> {
253 let (
254 Some(ach_credit_transfer),
255 Some(ach_debit),
256 Some(acss_debit),
257 Some(alipay),
258 Some(allow_redisplay),
259 Some(amount),
260 Some(au_becs_debit),
261 Some(bancontact),
262 Some(card),
263 Some(card_present),
264 Some(client_secret),
265 Some(code_verification),
266 Some(created),
267 Some(currency),
268 Some(customer),
269 Some(eps),
270 Some(flow),
271 Some(giropay),
272 Some(id),
273 Some(ideal),
274 Some(klarna),
275 Some(livemode),
276 Some(metadata),
277 Some(multibanco),
278 Some(owner),
279 Some(p24),
280 Some(receiver),
281 Some(redirect),
282 Some(sepa_credit_transfer),
283 Some(sepa_debit),
284 Some(sofort),
285 Some(source_order),
286 Some(statement_descriptor),
287 Some(status),
288 Some(three_d_secure),
289 Some(type_),
290 Some(usage),
291 Some(wechat),
292 ) = (
293 self.ach_credit_transfer.take(),
294 self.ach_debit.take(),
295 self.acss_debit.take(),
296 self.alipay.take(),
297 self.allow_redisplay,
298 self.amount,
299 self.au_becs_debit.take(),
300 self.bancontact.take(),
301 self.card.take(),
302 self.card_present.take(),
303 self.client_secret.take(),
304 self.code_verification.take(),
305 self.created,
306 self.currency.take(),
307 self.customer.take(),
308 self.eps.take(),
309 self.flow.take(),
310 self.giropay.take(),
311 self.id.take(),
312 self.ideal.take(),
313 self.klarna.take(),
314 self.livemode,
315 self.metadata.take(),
316 self.multibanco.take(),
317 self.owner.take(),
318 self.p24.take(),
319 self.receiver.take(),
320 self.redirect.take(),
321 self.sepa_credit_transfer.take(),
322 self.sepa_debit.take(),
323 self.sofort.take(),
324 self.source_order.take(),
325 self.statement_descriptor.take(),
326 self.status.take(),
327 self.three_d_secure.take(),
328 self.type_.take(),
329 self.usage.take(),
330 self.wechat.take(),
331 )
332 else {
333 return None;
334 };
335 Some(Self::Out {
336 ach_credit_transfer,
337 ach_debit,
338 acss_debit,
339 alipay,
340 allow_redisplay,
341 amount,
342 au_becs_debit,
343 bancontact,
344 card,
345 card_present,
346 client_secret,
347 code_verification,
348 created,
349 currency,
350 customer,
351 eps,
352 flow,
353 giropay,
354 id,
355 ideal,
356 klarna,
357 livemode,
358 metadata,
359 multibanco,
360 owner,
361 p24,
362 receiver,
363 redirect,
364 sepa_credit_transfer,
365 sepa_debit,
366 sofort,
367 source_order,
368 statement_descriptor,
369 status,
370 three_d_secure,
371 type_,
372 usage,
373 wechat,
374 })
375 }
376 }
377
378 impl Map for Builder<'_> {
379 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
380 self.builder.key(k)
381 }
382
383 fn finish(&mut self) -> Result<()> {
384 *self.out = self.builder.take_out();
385 Ok(())
386 }
387 }
388
389 impl ObjectDeser for Source {
390 type Builder = SourceBuilder;
391 }
392
393 impl FromValueOpt for Source {
394 fn from_value(v: Value) -> Option<Self> {
395 let Value::Object(obj) = v else {
396 return None;
397 };
398 let mut b = SourceBuilder::deser_default();
399 for (k, v) in obj {
400 match k.as_str() {
401 "ach_credit_transfer" => b.ach_credit_transfer = FromValueOpt::from_value(v),
402 "ach_debit" => b.ach_debit = FromValueOpt::from_value(v),
403 "acss_debit" => b.acss_debit = FromValueOpt::from_value(v),
404 "alipay" => b.alipay = FromValueOpt::from_value(v),
405 "allow_redisplay" => b.allow_redisplay = FromValueOpt::from_value(v),
406 "amount" => b.amount = FromValueOpt::from_value(v),
407 "au_becs_debit" => b.au_becs_debit = FromValueOpt::from_value(v),
408 "bancontact" => b.bancontact = FromValueOpt::from_value(v),
409 "card" => b.card = FromValueOpt::from_value(v),
410 "card_present" => b.card_present = FromValueOpt::from_value(v),
411 "client_secret" => b.client_secret = FromValueOpt::from_value(v),
412 "code_verification" => b.code_verification = FromValueOpt::from_value(v),
413 "created" => b.created = FromValueOpt::from_value(v),
414 "currency" => b.currency = FromValueOpt::from_value(v),
415 "customer" => b.customer = FromValueOpt::from_value(v),
416 "eps" => b.eps = FromValueOpt::from_value(v),
417 "flow" => b.flow = FromValueOpt::from_value(v),
418 "giropay" => b.giropay = FromValueOpt::from_value(v),
419 "id" => b.id = FromValueOpt::from_value(v),
420 "ideal" => b.ideal = FromValueOpt::from_value(v),
421 "klarna" => b.klarna = FromValueOpt::from_value(v),
422 "livemode" => b.livemode = FromValueOpt::from_value(v),
423 "metadata" => b.metadata = FromValueOpt::from_value(v),
424 "multibanco" => b.multibanco = FromValueOpt::from_value(v),
425 "owner" => b.owner = FromValueOpt::from_value(v),
426 "p24" => b.p24 = FromValueOpt::from_value(v),
427 "receiver" => b.receiver = FromValueOpt::from_value(v),
428 "redirect" => b.redirect = FromValueOpt::from_value(v),
429 "sepa_credit_transfer" => b.sepa_credit_transfer = FromValueOpt::from_value(v),
430 "sepa_debit" => b.sepa_debit = FromValueOpt::from_value(v),
431 "sofort" => b.sofort = FromValueOpt::from_value(v),
432 "source_order" => b.source_order = FromValueOpt::from_value(v),
433 "statement_descriptor" => b.statement_descriptor = FromValueOpt::from_value(v),
434 "status" => b.status = FromValueOpt::from_value(v),
435 "three_d_secure" => b.three_d_secure = FromValueOpt::from_value(v),
436 "type" => b.type_ = FromValueOpt::from_value(v),
437 "usage" => b.usage = FromValueOpt::from_value(v),
438 "wechat" => b.wechat = FromValueOpt::from_value(v),
439 _ => {}
440 }
441 }
442 b.take_out()
443 }
444 }
445};
446#[cfg(feature = "serialize")]
447impl serde::Serialize for Source {
448 fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
449 use serde::ser::SerializeStruct;
450 let mut s = s.serialize_struct("Source", 39)?;
451 s.serialize_field("ach_credit_transfer", &self.ach_credit_transfer)?;
452 s.serialize_field("ach_debit", &self.ach_debit)?;
453 s.serialize_field("acss_debit", &self.acss_debit)?;
454 s.serialize_field("alipay", &self.alipay)?;
455 s.serialize_field("allow_redisplay", &self.allow_redisplay)?;
456 s.serialize_field("amount", &self.amount)?;
457 s.serialize_field("au_becs_debit", &self.au_becs_debit)?;
458 s.serialize_field("bancontact", &self.bancontact)?;
459 s.serialize_field("card", &self.card)?;
460 s.serialize_field("card_present", &self.card_present)?;
461 s.serialize_field("client_secret", &self.client_secret)?;
462 s.serialize_field("code_verification", &self.code_verification)?;
463 s.serialize_field("created", &self.created)?;
464 s.serialize_field("currency", &self.currency)?;
465 s.serialize_field("customer", &self.customer)?;
466 s.serialize_field("eps", &self.eps)?;
467 s.serialize_field("flow", &self.flow)?;
468 s.serialize_field("giropay", &self.giropay)?;
469 s.serialize_field("id", &self.id)?;
470 s.serialize_field("ideal", &self.ideal)?;
471 s.serialize_field("klarna", &self.klarna)?;
472 s.serialize_field("livemode", &self.livemode)?;
473 s.serialize_field("metadata", &self.metadata)?;
474 s.serialize_field("multibanco", &self.multibanco)?;
475 s.serialize_field("owner", &self.owner)?;
476 s.serialize_field("p24", &self.p24)?;
477 s.serialize_field("receiver", &self.receiver)?;
478 s.serialize_field("redirect", &self.redirect)?;
479 s.serialize_field("sepa_credit_transfer", &self.sepa_credit_transfer)?;
480 s.serialize_field("sepa_debit", &self.sepa_debit)?;
481 s.serialize_field("sofort", &self.sofort)?;
482 s.serialize_field("source_order", &self.source_order)?;
483 s.serialize_field("statement_descriptor", &self.statement_descriptor)?;
484 s.serialize_field("status", &self.status)?;
485 s.serialize_field("three_d_secure", &self.three_d_secure)?;
486 s.serialize_field("type", &self.type_)?;
487 s.serialize_field("usage", &self.usage)?;
488 s.serialize_field("wechat", &self.wechat)?;
489
490 s.serialize_field("object", "source")?;
491 s.end()
492 }
493}
494#[derive(Copy, Clone, Eq, PartialEq)]
498pub enum SourceAllowRedisplay {
499 Always,
500 Limited,
501 Unspecified,
502}
503impl SourceAllowRedisplay {
504 pub fn as_str(self) -> &'static str {
505 use SourceAllowRedisplay::*;
506 match self {
507 Always => "always",
508 Limited => "limited",
509 Unspecified => "unspecified",
510 }
511 }
512}
513
514impl std::str::FromStr for SourceAllowRedisplay {
515 type Err = stripe_types::StripeParseError;
516 fn from_str(s: &str) -> Result<Self, Self::Err> {
517 use SourceAllowRedisplay::*;
518 match s {
519 "always" => Ok(Always),
520 "limited" => Ok(Limited),
521 "unspecified" => Ok(Unspecified),
522 _ => Err(stripe_types::StripeParseError),
523 }
524 }
525}
526impl std::fmt::Display for SourceAllowRedisplay {
527 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
528 f.write_str(self.as_str())
529 }
530}
531
532impl std::fmt::Debug for SourceAllowRedisplay {
533 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
534 f.write_str(self.as_str())
535 }
536}
537#[cfg(feature = "serialize")]
538impl serde::Serialize for SourceAllowRedisplay {
539 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
540 where
541 S: serde::Serializer,
542 {
543 serializer.serialize_str(self.as_str())
544 }
545}
546impl miniserde::Deserialize for SourceAllowRedisplay {
547 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
548 crate::Place::new(out)
549 }
550}
551
552impl miniserde::de::Visitor for crate::Place<SourceAllowRedisplay> {
553 fn string(&mut self, s: &str) -> miniserde::Result<()> {
554 use std::str::FromStr;
555 self.out = Some(SourceAllowRedisplay::from_str(s).map_err(|_| miniserde::Error)?);
556 Ok(())
557 }
558}
559
560stripe_types::impl_from_val_with_from_str!(SourceAllowRedisplay);
561#[cfg(feature = "deserialize")]
562impl<'de> serde::Deserialize<'de> for SourceAllowRedisplay {
563 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
564 use std::str::FromStr;
565 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
566 Self::from_str(&s)
567 .map_err(|_| serde::de::Error::custom("Unknown value for SourceAllowRedisplay"))
568 }
569}
570#[derive(Clone, Eq, PartialEq)]
575#[non_exhaustive]
576pub enum SourceType {
577 AchCreditTransfer,
578 AchDebit,
579 AcssDebit,
580 Alipay,
581 AuBecsDebit,
582 Bancontact,
583 Card,
584 CardPresent,
585 Eps,
586 Giropay,
587 Ideal,
588 Klarna,
589 Multibanco,
590 P24,
591 SepaCreditTransfer,
592 SepaDebit,
593 Sofort,
594 ThreeDSecure,
595 Wechat,
596 Unknown(String),
598}
599impl SourceType {
600 pub fn as_str(&self) -> &str {
601 use SourceType::*;
602 match self {
603 AchCreditTransfer => "ach_credit_transfer",
604 AchDebit => "ach_debit",
605 AcssDebit => "acss_debit",
606 Alipay => "alipay",
607 AuBecsDebit => "au_becs_debit",
608 Bancontact => "bancontact",
609 Card => "card",
610 CardPresent => "card_present",
611 Eps => "eps",
612 Giropay => "giropay",
613 Ideal => "ideal",
614 Klarna => "klarna",
615 Multibanco => "multibanco",
616 P24 => "p24",
617 SepaCreditTransfer => "sepa_credit_transfer",
618 SepaDebit => "sepa_debit",
619 Sofort => "sofort",
620 ThreeDSecure => "three_d_secure",
621 Wechat => "wechat",
622 Unknown(v) => v,
623 }
624 }
625}
626
627impl std::str::FromStr for SourceType {
628 type Err = std::convert::Infallible;
629 fn from_str(s: &str) -> Result<Self, Self::Err> {
630 use SourceType::*;
631 match s {
632 "ach_credit_transfer" => Ok(AchCreditTransfer),
633 "ach_debit" => Ok(AchDebit),
634 "acss_debit" => Ok(AcssDebit),
635 "alipay" => Ok(Alipay),
636 "au_becs_debit" => Ok(AuBecsDebit),
637 "bancontact" => Ok(Bancontact),
638 "card" => Ok(Card),
639 "card_present" => Ok(CardPresent),
640 "eps" => Ok(Eps),
641 "giropay" => Ok(Giropay),
642 "ideal" => Ok(Ideal),
643 "klarna" => Ok(Klarna),
644 "multibanco" => Ok(Multibanco),
645 "p24" => Ok(P24),
646 "sepa_credit_transfer" => Ok(SepaCreditTransfer),
647 "sepa_debit" => Ok(SepaDebit),
648 "sofort" => Ok(Sofort),
649 "three_d_secure" => Ok(ThreeDSecure),
650 "wechat" => Ok(Wechat),
651 v => Ok(Unknown(v.to_owned())),
652 }
653 }
654}
655impl std::fmt::Display for SourceType {
656 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
657 f.write_str(self.as_str())
658 }
659}
660
661impl std::fmt::Debug for SourceType {
662 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
663 f.write_str(self.as_str())
664 }
665}
666#[cfg(feature = "serialize")]
667impl serde::Serialize for SourceType {
668 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
669 where
670 S: serde::Serializer,
671 {
672 serializer.serialize_str(self.as_str())
673 }
674}
675impl miniserde::Deserialize for SourceType {
676 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
677 crate::Place::new(out)
678 }
679}
680
681impl miniserde::de::Visitor for crate::Place<SourceType> {
682 fn string(&mut self, s: &str) -> miniserde::Result<()> {
683 use std::str::FromStr;
684 self.out = Some(SourceType::from_str(s).unwrap());
685 Ok(())
686 }
687}
688
689stripe_types::impl_from_val_with_from_str!(SourceType);
690#[cfg(feature = "deserialize")]
691impl<'de> serde::Deserialize<'de> for SourceType {
692 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
693 use std::str::FromStr;
694 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
695 Ok(Self::from_str(&s).unwrap())
696 }
697}
698impl stripe_types::Object for Source {
699 type Id = stripe_shared::SourceId;
700 fn id(&self) -> &Self::Id {
701 &self.id
702 }
703
704 fn into_id(self) -> Self::Id {
705 self.id
706 }
707}
708stripe_types::def_id!(SourceId);