1#[derive(Clone, Debug)]
9#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
10pub struct Card {
11 pub account: Option<stripe_types::Expandable<stripe_shared::Account>>,
12 pub address_city: Option<String>,
14 pub address_country: Option<String>,
16 pub address_line1: Option<String>,
18 pub address_line1_check: Option<String>,
20 pub address_line2: Option<String>,
22 pub address_state: Option<String>,
24 pub address_zip: Option<String>,
26 pub address_zip_check: Option<String>,
28 pub allow_redisplay: Option<CardAllowRedisplay>,
32 pub available_payout_methods: Option<Vec<CardAvailablePayoutMethods>>,
35 pub brand: String,
38 pub country: Option<String>,
41 pub currency: Option<stripe_types::Currency>,
47 pub customer: Option<stripe_types::Expandable<stripe_shared::Customer>>,
50 pub cvc_check: Option<String>,
55 pub default_for_currency: Option<bool>,
58 pub description: Option<String>,
61 pub dynamic_last4: Option<String>,
63 pub exp_month: i64,
65 pub exp_year: i64,
67 pub fingerprint: Option<String>,
73 pub funding: String,
75 pub id: stripe_shared::CardId,
77 pub iin: Option<String>,
80 pub issuer: Option<String>,
83 pub last4: String,
85 pub metadata: Option<std::collections::HashMap<String, String>>,
88 pub name: Option<String>,
90 pub networks: Option<stripe_shared::TokenCardNetworks>,
91 pub regulated_status: Option<CardRegulatedStatus>,
93 pub status: Option<String>,
96 pub tokenization_method: Option<String>,
99}
100#[doc(hidden)]
101pub struct CardBuilder {
102 account: Option<Option<stripe_types::Expandable<stripe_shared::Account>>>,
103 address_city: Option<Option<String>>,
104 address_country: Option<Option<String>>,
105 address_line1: Option<Option<String>>,
106 address_line1_check: Option<Option<String>>,
107 address_line2: Option<Option<String>>,
108 address_state: Option<Option<String>>,
109 address_zip: Option<Option<String>>,
110 address_zip_check: Option<Option<String>>,
111 allow_redisplay: Option<Option<CardAllowRedisplay>>,
112 available_payout_methods: Option<Option<Vec<CardAvailablePayoutMethods>>>,
113 brand: Option<String>,
114 country: Option<Option<String>>,
115 currency: Option<Option<stripe_types::Currency>>,
116 customer: Option<Option<stripe_types::Expandable<stripe_shared::Customer>>>,
117 cvc_check: Option<Option<String>>,
118 default_for_currency: Option<Option<bool>>,
119 description: Option<Option<String>>,
120 dynamic_last4: Option<Option<String>>,
121 exp_month: Option<i64>,
122 exp_year: Option<i64>,
123 fingerprint: Option<Option<String>>,
124 funding: Option<String>,
125 id: Option<stripe_shared::CardId>,
126 iin: Option<Option<String>>,
127 issuer: Option<Option<String>>,
128 last4: Option<String>,
129 metadata: Option<Option<std::collections::HashMap<String, String>>>,
130 name: Option<Option<String>>,
131 networks: Option<Option<stripe_shared::TokenCardNetworks>>,
132 regulated_status: Option<Option<CardRegulatedStatus>>,
133 status: Option<Option<String>>,
134 tokenization_method: Option<Option<String>>,
135}
136
137#[allow(
138 unused_variables,
139 irrefutable_let_patterns,
140 clippy::let_unit_value,
141 clippy::match_single_binding,
142 clippy::single_match
143)]
144const _: () = {
145 use miniserde::de::{Map, Visitor};
146 use miniserde::json::Value;
147 use miniserde::{make_place, Deserialize, Result};
148 use stripe_types::miniserde_helpers::FromValueOpt;
149 use stripe_types::{MapBuilder, ObjectDeser};
150
151 make_place!(Place);
152
153 impl Deserialize for Card {
154 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
155 Place::new(out)
156 }
157 }
158
159 struct Builder<'a> {
160 out: &'a mut Option<Card>,
161 builder: CardBuilder,
162 }
163
164 impl Visitor for Place<Card> {
165 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
166 Ok(Box::new(Builder { out: &mut self.out, builder: CardBuilder::deser_default() }))
167 }
168 }
169
170 impl MapBuilder for CardBuilder {
171 type Out = Card;
172 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
173 Ok(match k {
174 "account" => Deserialize::begin(&mut self.account),
175 "address_city" => Deserialize::begin(&mut self.address_city),
176 "address_country" => Deserialize::begin(&mut self.address_country),
177 "address_line1" => Deserialize::begin(&mut self.address_line1),
178 "address_line1_check" => Deserialize::begin(&mut self.address_line1_check),
179 "address_line2" => Deserialize::begin(&mut self.address_line2),
180 "address_state" => Deserialize::begin(&mut self.address_state),
181 "address_zip" => Deserialize::begin(&mut self.address_zip),
182 "address_zip_check" => Deserialize::begin(&mut self.address_zip_check),
183 "allow_redisplay" => Deserialize::begin(&mut self.allow_redisplay),
184 "available_payout_methods" => {
185 Deserialize::begin(&mut self.available_payout_methods)
186 }
187 "brand" => Deserialize::begin(&mut self.brand),
188 "country" => Deserialize::begin(&mut self.country),
189 "currency" => Deserialize::begin(&mut self.currency),
190 "customer" => Deserialize::begin(&mut self.customer),
191 "cvc_check" => Deserialize::begin(&mut self.cvc_check),
192 "default_for_currency" => Deserialize::begin(&mut self.default_for_currency),
193 "description" => Deserialize::begin(&mut self.description),
194 "dynamic_last4" => Deserialize::begin(&mut self.dynamic_last4),
195 "exp_month" => Deserialize::begin(&mut self.exp_month),
196 "exp_year" => Deserialize::begin(&mut self.exp_year),
197 "fingerprint" => Deserialize::begin(&mut self.fingerprint),
198 "funding" => Deserialize::begin(&mut self.funding),
199 "id" => Deserialize::begin(&mut self.id),
200 "iin" => Deserialize::begin(&mut self.iin),
201 "issuer" => Deserialize::begin(&mut self.issuer),
202 "last4" => Deserialize::begin(&mut self.last4),
203 "metadata" => Deserialize::begin(&mut self.metadata),
204 "name" => Deserialize::begin(&mut self.name),
205 "networks" => Deserialize::begin(&mut self.networks),
206 "regulated_status" => Deserialize::begin(&mut self.regulated_status),
207 "status" => Deserialize::begin(&mut self.status),
208 "tokenization_method" => Deserialize::begin(&mut self.tokenization_method),
209
210 _ => <dyn Visitor>::ignore(),
211 })
212 }
213
214 fn deser_default() -> Self {
215 Self {
216 account: Deserialize::default(),
217 address_city: Deserialize::default(),
218 address_country: Deserialize::default(),
219 address_line1: Deserialize::default(),
220 address_line1_check: Deserialize::default(),
221 address_line2: Deserialize::default(),
222 address_state: Deserialize::default(),
223 address_zip: Deserialize::default(),
224 address_zip_check: Deserialize::default(),
225 allow_redisplay: Deserialize::default(),
226 available_payout_methods: Deserialize::default(),
227 brand: Deserialize::default(),
228 country: Deserialize::default(),
229 currency: Deserialize::default(),
230 customer: Deserialize::default(),
231 cvc_check: Deserialize::default(),
232 default_for_currency: Deserialize::default(),
233 description: Deserialize::default(),
234 dynamic_last4: Deserialize::default(),
235 exp_month: Deserialize::default(),
236 exp_year: Deserialize::default(),
237 fingerprint: Deserialize::default(),
238 funding: Deserialize::default(),
239 id: Deserialize::default(),
240 iin: Deserialize::default(),
241 issuer: Deserialize::default(),
242 last4: Deserialize::default(),
243 metadata: Deserialize::default(),
244 name: Deserialize::default(),
245 networks: Deserialize::default(),
246 regulated_status: Deserialize::default(),
247 status: Deserialize::default(),
248 tokenization_method: Deserialize::default(),
249 }
250 }
251
252 fn take_out(&mut self) -> Option<Self::Out> {
253 let (
254 Some(account),
255 Some(address_city),
256 Some(address_country),
257 Some(address_line1),
258 Some(address_line1_check),
259 Some(address_line2),
260 Some(address_state),
261 Some(address_zip),
262 Some(address_zip_check),
263 Some(allow_redisplay),
264 Some(available_payout_methods),
265 Some(brand),
266 Some(country),
267 Some(currency),
268 Some(customer),
269 Some(cvc_check),
270 Some(default_for_currency),
271 Some(description),
272 Some(dynamic_last4),
273 Some(exp_month),
274 Some(exp_year),
275 Some(fingerprint),
276 Some(funding),
277 Some(id),
278 Some(iin),
279 Some(issuer),
280 Some(last4),
281 Some(metadata),
282 Some(name),
283 Some(networks),
284 Some(regulated_status),
285 Some(status),
286 Some(tokenization_method),
287 ) = (
288 self.account.take(),
289 self.address_city.take(),
290 self.address_country.take(),
291 self.address_line1.take(),
292 self.address_line1_check.take(),
293 self.address_line2.take(),
294 self.address_state.take(),
295 self.address_zip.take(),
296 self.address_zip_check.take(),
297 self.allow_redisplay,
298 self.available_payout_methods.take(),
299 self.brand.take(),
300 self.country.take(),
301 self.currency,
302 self.customer.take(),
303 self.cvc_check.take(),
304 self.default_for_currency,
305 self.description.take(),
306 self.dynamic_last4.take(),
307 self.exp_month,
308 self.exp_year,
309 self.fingerprint.take(),
310 self.funding.take(),
311 self.id.take(),
312 self.iin.take(),
313 self.issuer.take(),
314 self.last4.take(),
315 self.metadata.take(),
316 self.name.take(),
317 self.networks.take(),
318 self.regulated_status,
319 self.status.take(),
320 self.tokenization_method.take(),
321 )
322 else {
323 return None;
324 };
325 Some(Self::Out {
326 account,
327 address_city,
328 address_country,
329 address_line1,
330 address_line1_check,
331 address_line2,
332 address_state,
333 address_zip,
334 address_zip_check,
335 allow_redisplay,
336 available_payout_methods,
337 brand,
338 country,
339 currency,
340 customer,
341 cvc_check,
342 default_for_currency,
343 description,
344 dynamic_last4,
345 exp_month,
346 exp_year,
347 fingerprint,
348 funding,
349 id,
350 iin,
351 issuer,
352 last4,
353 metadata,
354 name,
355 networks,
356 regulated_status,
357 status,
358 tokenization_method,
359 })
360 }
361 }
362
363 impl<'a> Map for Builder<'a> {
364 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
365 self.builder.key(k)
366 }
367
368 fn finish(&mut self) -> Result<()> {
369 *self.out = self.builder.take_out();
370 Ok(())
371 }
372 }
373
374 impl ObjectDeser for Card {
375 type Builder = CardBuilder;
376 }
377
378 impl FromValueOpt for Card {
379 fn from_value(v: Value) -> Option<Self> {
380 let Value::Object(obj) = v else {
381 return None;
382 };
383 let mut b = CardBuilder::deser_default();
384 for (k, v) in obj {
385 match k.as_str() {
386 "account" => b.account = FromValueOpt::from_value(v),
387 "address_city" => b.address_city = FromValueOpt::from_value(v),
388 "address_country" => b.address_country = FromValueOpt::from_value(v),
389 "address_line1" => b.address_line1 = FromValueOpt::from_value(v),
390 "address_line1_check" => b.address_line1_check = FromValueOpt::from_value(v),
391 "address_line2" => b.address_line2 = FromValueOpt::from_value(v),
392 "address_state" => b.address_state = FromValueOpt::from_value(v),
393 "address_zip" => b.address_zip = FromValueOpt::from_value(v),
394 "address_zip_check" => b.address_zip_check = FromValueOpt::from_value(v),
395 "allow_redisplay" => b.allow_redisplay = FromValueOpt::from_value(v),
396 "available_payout_methods" => {
397 b.available_payout_methods = FromValueOpt::from_value(v)
398 }
399 "brand" => b.brand = FromValueOpt::from_value(v),
400 "country" => b.country = FromValueOpt::from_value(v),
401 "currency" => b.currency = FromValueOpt::from_value(v),
402 "customer" => b.customer = FromValueOpt::from_value(v),
403 "cvc_check" => b.cvc_check = FromValueOpt::from_value(v),
404 "default_for_currency" => b.default_for_currency = FromValueOpt::from_value(v),
405 "description" => b.description = FromValueOpt::from_value(v),
406 "dynamic_last4" => b.dynamic_last4 = FromValueOpt::from_value(v),
407 "exp_month" => b.exp_month = FromValueOpt::from_value(v),
408 "exp_year" => b.exp_year = FromValueOpt::from_value(v),
409 "fingerprint" => b.fingerprint = FromValueOpt::from_value(v),
410 "funding" => b.funding = FromValueOpt::from_value(v),
411 "id" => b.id = FromValueOpt::from_value(v),
412 "iin" => b.iin = FromValueOpt::from_value(v),
413 "issuer" => b.issuer = FromValueOpt::from_value(v),
414 "last4" => b.last4 = FromValueOpt::from_value(v),
415 "metadata" => b.metadata = FromValueOpt::from_value(v),
416 "name" => b.name = FromValueOpt::from_value(v),
417 "networks" => b.networks = FromValueOpt::from_value(v),
418 "regulated_status" => b.regulated_status = FromValueOpt::from_value(v),
419 "status" => b.status = FromValueOpt::from_value(v),
420 "tokenization_method" => b.tokenization_method = FromValueOpt::from_value(v),
421
422 _ => {}
423 }
424 }
425 b.take_out()
426 }
427 }
428};
429#[cfg(feature = "serialize")]
430impl serde::Serialize for Card {
431 fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
432 use serde::ser::SerializeStruct;
433 let mut s = s.serialize_struct("Card", 34)?;
434 s.serialize_field("account", &self.account)?;
435 s.serialize_field("address_city", &self.address_city)?;
436 s.serialize_field("address_country", &self.address_country)?;
437 s.serialize_field("address_line1", &self.address_line1)?;
438 s.serialize_field("address_line1_check", &self.address_line1_check)?;
439 s.serialize_field("address_line2", &self.address_line2)?;
440 s.serialize_field("address_state", &self.address_state)?;
441 s.serialize_field("address_zip", &self.address_zip)?;
442 s.serialize_field("address_zip_check", &self.address_zip_check)?;
443 s.serialize_field("allow_redisplay", &self.allow_redisplay)?;
444 s.serialize_field("available_payout_methods", &self.available_payout_methods)?;
445 s.serialize_field("brand", &self.brand)?;
446 s.serialize_field("country", &self.country)?;
447 s.serialize_field("currency", &self.currency)?;
448 s.serialize_field("customer", &self.customer)?;
449 s.serialize_field("cvc_check", &self.cvc_check)?;
450 s.serialize_field("default_for_currency", &self.default_for_currency)?;
451 s.serialize_field("description", &self.description)?;
452 s.serialize_field("dynamic_last4", &self.dynamic_last4)?;
453 s.serialize_field("exp_month", &self.exp_month)?;
454 s.serialize_field("exp_year", &self.exp_year)?;
455 s.serialize_field("fingerprint", &self.fingerprint)?;
456 s.serialize_field("funding", &self.funding)?;
457 s.serialize_field("id", &self.id)?;
458 s.serialize_field("iin", &self.iin)?;
459 s.serialize_field("issuer", &self.issuer)?;
460 s.serialize_field("last4", &self.last4)?;
461 s.serialize_field("metadata", &self.metadata)?;
462 s.serialize_field("name", &self.name)?;
463 s.serialize_field("networks", &self.networks)?;
464 s.serialize_field("regulated_status", &self.regulated_status)?;
465 s.serialize_field("status", &self.status)?;
466 s.serialize_field("tokenization_method", &self.tokenization_method)?;
467
468 s.serialize_field("object", "card")?;
469 s.end()
470 }
471}
472#[derive(Copy, Clone, Eq, PartialEq)]
476pub enum CardAllowRedisplay {
477 Always,
478 Limited,
479 Unspecified,
480}
481impl CardAllowRedisplay {
482 pub fn as_str(self) -> &'static str {
483 use CardAllowRedisplay::*;
484 match self {
485 Always => "always",
486 Limited => "limited",
487 Unspecified => "unspecified",
488 }
489 }
490}
491
492impl std::str::FromStr for CardAllowRedisplay {
493 type Err = stripe_types::StripeParseError;
494 fn from_str(s: &str) -> Result<Self, Self::Err> {
495 use CardAllowRedisplay::*;
496 match s {
497 "always" => Ok(Always),
498 "limited" => Ok(Limited),
499 "unspecified" => Ok(Unspecified),
500 _ => Err(stripe_types::StripeParseError),
501 }
502 }
503}
504impl std::fmt::Display for CardAllowRedisplay {
505 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
506 f.write_str(self.as_str())
507 }
508}
509
510impl std::fmt::Debug for CardAllowRedisplay {
511 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
512 f.write_str(self.as_str())
513 }
514}
515#[cfg(feature = "serialize")]
516impl serde::Serialize for CardAllowRedisplay {
517 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
518 where
519 S: serde::Serializer,
520 {
521 serializer.serialize_str(self.as_str())
522 }
523}
524impl miniserde::Deserialize for CardAllowRedisplay {
525 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
526 crate::Place::new(out)
527 }
528}
529
530impl miniserde::de::Visitor for crate::Place<CardAllowRedisplay> {
531 fn string(&mut self, s: &str) -> miniserde::Result<()> {
532 use std::str::FromStr;
533 self.out = Some(CardAllowRedisplay::from_str(s).map_err(|_| miniserde::Error)?);
534 Ok(())
535 }
536}
537
538stripe_types::impl_from_val_with_from_str!(CardAllowRedisplay);
539#[cfg(feature = "deserialize")]
540impl<'de> serde::Deserialize<'de> for CardAllowRedisplay {
541 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
542 use std::str::FromStr;
543 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
544 Self::from_str(&s)
545 .map_err(|_| serde::de::Error::custom("Unknown value for CardAllowRedisplay"))
546 }
547}
548#[derive(Copy, Clone, Eq, PartialEq)]
551pub enum CardAvailablePayoutMethods {
552 Instant,
553 Standard,
554}
555impl CardAvailablePayoutMethods {
556 pub fn as_str(self) -> &'static str {
557 use CardAvailablePayoutMethods::*;
558 match self {
559 Instant => "instant",
560 Standard => "standard",
561 }
562 }
563}
564
565impl std::str::FromStr for CardAvailablePayoutMethods {
566 type Err = stripe_types::StripeParseError;
567 fn from_str(s: &str) -> Result<Self, Self::Err> {
568 use CardAvailablePayoutMethods::*;
569 match s {
570 "instant" => Ok(Instant),
571 "standard" => Ok(Standard),
572 _ => Err(stripe_types::StripeParseError),
573 }
574 }
575}
576impl std::fmt::Display for CardAvailablePayoutMethods {
577 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
578 f.write_str(self.as_str())
579 }
580}
581
582impl std::fmt::Debug for CardAvailablePayoutMethods {
583 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
584 f.write_str(self.as_str())
585 }
586}
587#[cfg(feature = "serialize")]
588impl serde::Serialize for CardAvailablePayoutMethods {
589 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
590 where
591 S: serde::Serializer,
592 {
593 serializer.serialize_str(self.as_str())
594 }
595}
596impl miniserde::Deserialize for CardAvailablePayoutMethods {
597 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
598 crate::Place::new(out)
599 }
600}
601
602impl miniserde::de::Visitor for crate::Place<CardAvailablePayoutMethods> {
603 fn string(&mut self, s: &str) -> miniserde::Result<()> {
604 use std::str::FromStr;
605 self.out = Some(CardAvailablePayoutMethods::from_str(s).map_err(|_| miniserde::Error)?);
606 Ok(())
607 }
608}
609
610stripe_types::impl_from_val_with_from_str!(CardAvailablePayoutMethods);
611#[cfg(feature = "deserialize")]
612impl<'de> serde::Deserialize<'de> for CardAvailablePayoutMethods {
613 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
614 use std::str::FromStr;
615 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
616 Self::from_str(&s)
617 .map_err(|_| serde::de::Error::custom("Unknown value for CardAvailablePayoutMethods"))
618 }
619}
620#[derive(Copy, Clone, Eq, PartialEq)]
622pub enum CardRegulatedStatus {
623 Regulated,
624 Unregulated,
625}
626impl CardRegulatedStatus {
627 pub fn as_str(self) -> &'static str {
628 use CardRegulatedStatus::*;
629 match self {
630 Regulated => "regulated",
631 Unregulated => "unregulated",
632 }
633 }
634}
635
636impl std::str::FromStr for CardRegulatedStatus {
637 type Err = stripe_types::StripeParseError;
638 fn from_str(s: &str) -> Result<Self, Self::Err> {
639 use CardRegulatedStatus::*;
640 match s {
641 "regulated" => Ok(Regulated),
642 "unregulated" => Ok(Unregulated),
643 _ => Err(stripe_types::StripeParseError),
644 }
645 }
646}
647impl std::fmt::Display for CardRegulatedStatus {
648 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
649 f.write_str(self.as_str())
650 }
651}
652
653impl std::fmt::Debug for CardRegulatedStatus {
654 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
655 f.write_str(self.as_str())
656 }
657}
658#[cfg(feature = "serialize")]
659impl serde::Serialize for CardRegulatedStatus {
660 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
661 where
662 S: serde::Serializer,
663 {
664 serializer.serialize_str(self.as_str())
665 }
666}
667impl miniserde::Deserialize for CardRegulatedStatus {
668 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
669 crate::Place::new(out)
670 }
671}
672
673impl miniserde::de::Visitor for crate::Place<CardRegulatedStatus> {
674 fn string(&mut self, s: &str) -> miniserde::Result<()> {
675 use std::str::FromStr;
676 self.out = Some(CardRegulatedStatus::from_str(s).map_err(|_| miniserde::Error)?);
677 Ok(())
678 }
679}
680
681stripe_types::impl_from_val_with_from_str!(CardRegulatedStatus);
682#[cfg(feature = "deserialize")]
683impl<'de> serde::Deserialize<'de> for CardRegulatedStatus {
684 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
685 use std::str::FromStr;
686 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
687 Self::from_str(&s)
688 .map_err(|_| serde::de::Error::custom("Unknown value for CardRegulatedStatus"))
689 }
690}
691impl stripe_types::Object for Card {
692 type Id = stripe_shared::CardId;
693 fn id(&self) -> &Self::Id {
694 &self.id
695 }
696
697 fn into_id(self) -> Self::Id {
698 self.id
699 }
700}
701stripe_types::def_id!(CardId);