stripe_terminal/terminal_configuration/
types.rs

1/// A Configurations object represents how features should be configured for terminal readers.
2/// For information about how to use it, see the [Terminal configurations documentation](https://docs.stripe.com/terminal/fleet/configurations-overview).
3///
4/// For more details see <<https://stripe.com/docs/api/terminal/configuration/object>>.
5#[derive(Clone, Debug)]
6#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
7pub struct TerminalConfiguration {
8    pub bbpos_wisepad3:
9        Option<stripe_terminal::TerminalConfigurationConfigurationResourceDeviceTypeSpecificConfig>,
10    pub bbpos_wisepos_e:
11        Option<stripe_terminal::TerminalConfigurationConfigurationResourceDeviceTypeSpecificConfig>,
12    /// Unique identifier for the object.
13    pub id: stripe_terminal::TerminalConfigurationId,
14    /// Whether this Configuration is the default for your account
15    pub is_account_default: Option<bool>,
16    /// Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
17    pub livemode: bool,
18    /// String indicating the name of the Configuration object, set by the user
19    pub name: Option<String>,
20    pub offline: Option<stripe_terminal::TerminalConfigurationConfigurationResourceOfflineConfig>,
21    pub reboot_window:
22        Option<stripe_terminal::TerminalConfigurationConfigurationResourceRebootWindow>,
23    pub stripe_s700:
24        Option<stripe_terminal::TerminalConfigurationConfigurationResourceDeviceTypeSpecificConfig>,
25    pub tipping: Option<stripe_terminal::TerminalConfigurationConfigurationResourceTipping>,
26    pub verifone_p400:
27        Option<stripe_terminal::TerminalConfigurationConfigurationResourceDeviceTypeSpecificConfig>,
28    pub wifi: Option<stripe_terminal::TerminalConfigurationConfigurationResourceWifiConfig>,
29}
30#[doc(hidden)]
31pub struct TerminalConfigurationBuilder {
32    bbpos_wisepad3: Option<
33        Option<stripe_terminal::TerminalConfigurationConfigurationResourceDeviceTypeSpecificConfig>,
34    >,
35    bbpos_wisepos_e: Option<
36        Option<stripe_terminal::TerminalConfigurationConfigurationResourceDeviceTypeSpecificConfig>,
37    >,
38    id: Option<stripe_terminal::TerminalConfigurationId>,
39    is_account_default: Option<Option<bool>>,
40    livemode: Option<bool>,
41    name: Option<Option<String>>,
42    offline:
43        Option<Option<stripe_terminal::TerminalConfigurationConfigurationResourceOfflineConfig>>,
44    reboot_window:
45        Option<Option<stripe_terminal::TerminalConfigurationConfigurationResourceRebootWindow>>,
46    stripe_s700: Option<
47        Option<stripe_terminal::TerminalConfigurationConfigurationResourceDeviceTypeSpecificConfig>,
48    >,
49    tipping: Option<Option<stripe_terminal::TerminalConfigurationConfigurationResourceTipping>>,
50    verifone_p400: Option<
51        Option<stripe_terminal::TerminalConfigurationConfigurationResourceDeviceTypeSpecificConfig>,
52    >,
53    wifi: Option<Option<stripe_terminal::TerminalConfigurationConfigurationResourceWifiConfig>>,
54}
55
56#[allow(
57    unused_variables,
58    irrefutable_let_patterns,
59    clippy::let_unit_value,
60    clippy::match_single_binding,
61    clippy::single_match
62)]
63const _: () = {
64    use miniserde::de::{Map, Visitor};
65    use miniserde::json::Value;
66    use miniserde::{Deserialize, Result, make_place};
67    use stripe_types::miniserde_helpers::FromValueOpt;
68    use stripe_types::{MapBuilder, ObjectDeser};
69
70    make_place!(Place);
71
72    impl Deserialize for TerminalConfiguration {
73        fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
74            Place::new(out)
75        }
76    }
77
78    struct Builder<'a> {
79        out: &'a mut Option<TerminalConfiguration>,
80        builder: TerminalConfigurationBuilder,
81    }
82
83    impl Visitor for Place<TerminalConfiguration> {
84        fn map(&mut self) -> Result<Box<dyn Map + '_>> {
85            Ok(Box::new(Builder {
86                out: &mut self.out,
87                builder: TerminalConfigurationBuilder::deser_default(),
88            }))
89        }
90    }
91
92    impl MapBuilder for TerminalConfigurationBuilder {
93        type Out = TerminalConfiguration;
94        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
95            Ok(match k {
96                "bbpos_wisepad3" => Deserialize::begin(&mut self.bbpos_wisepad3),
97                "bbpos_wisepos_e" => Deserialize::begin(&mut self.bbpos_wisepos_e),
98                "id" => Deserialize::begin(&mut self.id),
99                "is_account_default" => Deserialize::begin(&mut self.is_account_default),
100                "livemode" => Deserialize::begin(&mut self.livemode),
101                "name" => Deserialize::begin(&mut self.name),
102                "offline" => Deserialize::begin(&mut self.offline),
103                "reboot_window" => Deserialize::begin(&mut self.reboot_window),
104                "stripe_s700" => Deserialize::begin(&mut self.stripe_s700),
105                "tipping" => Deserialize::begin(&mut self.tipping),
106                "verifone_p400" => Deserialize::begin(&mut self.verifone_p400),
107                "wifi" => Deserialize::begin(&mut self.wifi),
108
109                _ => <dyn Visitor>::ignore(),
110            })
111        }
112
113        fn deser_default() -> Self {
114            Self {
115                bbpos_wisepad3: Deserialize::default(),
116                bbpos_wisepos_e: Deserialize::default(),
117                id: Deserialize::default(),
118                is_account_default: Deserialize::default(),
119                livemode: Deserialize::default(),
120                name: Deserialize::default(),
121                offline: Deserialize::default(),
122                reboot_window: Deserialize::default(),
123                stripe_s700: Deserialize::default(),
124                tipping: Deserialize::default(),
125                verifone_p400: Deserialize::default(),
126                wifi: Deserialize::default(),
127            }
128        }
129
130        fn take_out(&mut self) -> Option<Self::Out> {
131            let (
132                Some(bbpos_wisepad3),
133                Some(bbpos_wisepos_e),
134                Some(id),
135                Some(is_account_default),
136                Some(livemode),
137                Some(name),
138                Some(offline),
139                Some(reboot_window),
140                Some(stripe_s700),
141                Some(tipping),
142                Some(verifone_p400),
143                Some(wifi),
144            ) = (
145                self.bbpos_wisepad3.take(),
146                self.bbpos_wisepos_e.take(),
147                self.id.take(),
148                self.is_account_default,
149                self.livemode,
150                self.name.take(),
151                self.offline,
152                self.reboot_window,
153                self.stripe_s700.take(),
154                self.tipping.take(),
155                self.verifone_p400.take(),
156                self.wifi.take(),
157            )
158            else {
159                return None;
160            };
161            Some(Self::Out {
162                bbpos_wisepad3,
163                bbpos_wisepos_e,
164                id,
165                is_account_default,
166                livemode,
167                name,
168                offline,
169                reboot_window,
170                stripe_s700,
171                tipping,
172                verifone_p400,
173                wifi,
174            })
175        }
176    }
177
178    impl Map for Builder<'_> {
179        fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
180            self.builder.key(k)
181        }
182
183        fn finish(&mut self) -> Result<()> {
184            *self.out = self.builder.take_out();
185            Ok(())
186        }
187    }
188
189    impl ObjectDeser for TerminalConfiguration {
190        type Builder = TerminalConfigurationBuilder;
191    }
192
193    impl FromValueOpt for TerminalConfiguration {
194        fn from_value(v: Value) -> Option<Self> {
195            let Value::Object(obj) = v else {
196                return None;
197            };
198            let mut b = TerminalConfigurationBuilder::deser_default();
199            for (k, v) in obj {
200                match k.as_str() {
201                    "bbpos_wisepad3" => b.bbpos_wisepad3 = FromValueOpt::from_value(v),
202                    "bbpos_wisepos_e" => b.bbpos_wisepos_e = FromValueOpt::from_value(v),
203                    "id" => b.id = FromValueOpt::from_value(v),
204                    "is_account_default" => b.is_account_default = FromValueOpt::from_value(v),
205                    "livemode" => b.livemode = FromValueOpt::from_value(v),
206                    "name" => b.name = FromValueOpt::from_value(v),
207                    "offline" => b.offline = FromValueOpt::from_value(v),
208                    "reboot_window" => b.reboot_window = FromValueOpt::from_value(v),
209                    "stripe_s700" => b.stripe_s700 = FromValueOpt::from_value(v),
210                    "tipping" => b.tipping = FromValueOpt::from_value(v),
211                    "verifone_p400" => b.verifone_p400 = FromValueOpt::from_value(v),
212                    "wifi" => b.wifi = FromValueOpt::from_value(v),
213
214                    _ => {}
215                }
216            }
217            b.take_out()
218        }
219    }
220};
221#[cfg(feature = "serialize")]
222impl serde::Serialize for TerminalConfiguration {
223    fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
224        use serde::ser::SerializeStruct;
225        let mut s = s.serialize_struct("TerminalConfiguration", 13)?;
226        s.serialize_field("bbpos_wisepad3", &self.bbpos_wisepad3)?;
227        s.serialize_field("bbpos_wisepos_e", &self.bbpos_wisepos_e)?;
228        s.serialize_field("id", &self.id)?;
229        s.serialize_field("is_account_default", &self.is_account_default)?;
230        s.serialize_field("livemode", &self.livemode)?;
231        s.serialize_field("name", &self.name)?;
232        s.serialize_field("offline", &self.offline)?;
233        s.serialize_field("reboot_window", &self.reboot_window)?;
234        s.serialize_field("stripe_s700", &self.stripe_s700)?;
235        s.serialize_field("tipping", &self.tipping)?;
236        s.serialize_field("verifone_p400", &self.verifone_p400)?;
237        s.serialize_field("wifi", &self.wifi)?;
238
239        s.serialize_field("object", "terminal.configuration")?;
240        s.end()
241    }
242}
243impl stripe_types::Object for TerminalConfiguration {
244    type Id = stripe_terminal::TerminalConfigurationId;
245    fn id(&self) -> &Self::Id {
246        &self.id
247    }
248
249    fn into_id(self) -> Self::Id {
250        self.id
251    }
252}
253stripe_types::def_id!(TerminalConfigurationId);