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