stripe_shared/
deleted_payment_source.rs

1/// The resource representing a Stripe Polymorphic
2#[derive(Clone, Debug)]
3#[cfg_attr(feature = "serialize", derive(serde::Serialize))]
4#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
5#[cfg_attr(any(feature = "deserialize", feature = "serialize"), serde(tag = "object"))]
6pub enum DeletedPaymentSource {
7    #[cfg_attr(
8        any(feature = "deserialize", feature = "serialize"),
9        serde(rename = "bank_account")
10    )]
11    DeletedBankAccount(stripe_shared::DeletedBankAccount),
12    #[cfg_attr(any(feature = "deserialize", feature = "serialize"), serde(rename = "card"))]
13    DeletedCard(stripe_shared::DeletedCard),
14}
15
16#[derive(Default)]
17pub struct DeletedPaymentSourceBuilder {
18    inner: stripe_types::miniserde_helpers::ObjectBuilderInner,
19}
20
21const _: () = {
22    use miniserde::de::{Map, Visitor};
23    use miniserde::json::Value;
24    use miniserde::{make_place, Deserialize, Result};
25    use stripe_types::miniserde_helpers::FromValueOpt;
26    use stripe_types::MapBuilder;
27
28    use super::*;
29
30    make_place!(Place);
31
32    struct Builder<'a> {
33        out: &'a mut Option<DeletedPaymentSource>,
34        builder: DeletedPaymentSourceBuilder,
35    }
36
37    impl Deserialize for DeletedPaymentSource {
38        fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
39            Place::new(out)
40        }
41    }
42
43    impl Visitor for Place<DeletedPaymentSource> {
44        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
45            Ok(Box::new(Builder { out: &mut self.out, builder: Default::default() }))
46        }
47    }
48
49    impl<'a> Map for Builder<'a> {
50        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
51            self.builder.key(k)
52        }
53
54        fn finish(&mut self) -> Result<()> {
55            *self.out = self.builder.take_out();
56            Ok(())
57        }
58    }
59
60    impl MapBuilder for DeletedPaymentSourceBuilder {
61        type Out = DeletedPaymentSource;
62        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
63            self.inner.key_inner(k)
64        }
65
66        fn deser_default() -> Self {
67            Self::default()
68        }
69
70        fn take_out(&mut self) -> Option<Self::Out> {
71            let (k, o) = self.inner.finish_inner()?;
72            DeletedPaymentSource::construct(&k, o)
73        }
74    }
75
76    impl stripe_types::ObjectDeser for DeletedPaymentSource {
77        type Builder = DeletedPaymentSourceBuilder;
78    }
79    impl DeletedPaymentSource {
80        fn construct(key: &str, o: miniserde::json::Object) -> Option<Self> {
81            Some(match key {
82                "bank_account" => {
83                    Self::DeletedBankAccount(FromValueOpt::from_value(Value::Object(o))?)
84                }
85                "card" => Self::DeletedCard(FromValueOpt::from_value(Value::Object(o))?),
86
87                _ => return None,
88            })
89        }
90    }
91
92    impl FromValueOpt for DeletedPaymentSource {
93        fn from_value(v: Value) -> Option<Self> {
94            let (typ, obj) = stripe_types::miniserde_helpers::extract_object_discr(v)?;
95            Self::construct(&typ, obj)
96        }
97    }
98};
99
100impl stripe_types::Object for DeletedPaymentSource {
101    type Id = smol_str::SmolStr;
102    fn id(&self) -> &Self::Id {
103        match self {
104            Self::DeletedBankAccount(v) => v.id.inner(),
105            Self::DeletedCard(v) => v.id.inner(),
106        }
107    }
108
109    fn into_id(self) -> Self::Id {
110        match self {
111            Self::DeletedBankAccount(v) => v.id.into_inner(),
112            Self::DeletedCard(v) => v.id.into_inner(),
113        }
114    }
115}