1#[derive(Clone)]
6#[cfg_attr(not(feature = "redact-generated-debug"), derive(Debug))]
7#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
8pub struct IssuingToken {
9 pub card: stripe_types::Expandable<stripe_shared::IssuingCard>,
11 pub created: stripe_types::Timestamp,
13 pub device_fingerprint: Option<String>,
15 pub id: stripe_shared::IssuingTokenId,
17 pub last4: Option<String>,
19 pub livemode: bool,
22 pub network: IssuingTokenNetwork,
24 pub network_data: Option<stripe_shared::IssuingNetworkTokenNetworkData>,
25 pub network_updated_at: stripe_types::Timestamp,
28 pub status: stripe_shared::IssuingTokenStatus,
30 pub wallet_provider: Option<IssuingTokenWalletProvider>,
32}
33#[cfg(feature = "redact-generated-debug")]
34impl std::fmt::Debug for IssuingToken {
35 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
36 f.debug_struct("IssuingToken").finish_non_exhaustive()
37 }
38}
39#[doc(hidden)]
40pub struct IssuingTokenBuilder {
41 card: Option<stripe_types::Expandable<stripe_shared::IssuingCard>>,
42 created: Option<stripe_types::Timestamp>,
43 device_fingerprint: Option<Option<String>>,
44 id: Option<stripe_shared::IssuingTokenId>,
45 last4: Option<Option<String>>,
46 livemode: Option<bool>,
47 network: Option<IssuingTokenNetwork>,
48 network_data: Option<Option<stripe_shared::IssuingNetworkTokenNetworkData>>,
49 network_updated_at: Option<stripe_types::Timestamp>,
50 status: Option<stripe_shared::IssuingTokenStatus>,
51 wallet_provider: Option<Option<IssuingTokenWalletProvider>>,
52}
53
54#[allow(
55 unused_variables,
56 irrefutable_let_patterns,
57 clippy::let_unit_value,
58 clippy::match_single_binding,
59 clippy::single_match
60)]
61const _: () = {
62 use miniserde::de::{Map, Visitor};
63 use miniserde::json::Value;
64 use miniserde::{Deserialize, Result, make_place};
65 use stripe_types::miniserde_helpers::FromValueOpt;
66 use stripe_types::{MapBuilder, ObjectDeser};
67
68 make_place!(Place);
69
70 impl Deserialize for IssuingToken {
71 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
72 Place::new(out)
73 }
74 }
75
76 struct Builder<'a> {
77 out: &'a mut Option<IssuingToken>,
78 builder: IssuingTokenBuilder,
79 }
80
81 impl Visitor for Place<IssuingToken> {
82 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
83 Ok(Box::new(Builder {
84 out: &mut self.out,
85 builder: IssuingTokenBuilder::deser_default(),
86 }))
87 }
88 }
89
90 impl MapBuilder for IssuingTokenBuilder {
91 type Out = IssuingToken;
92 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
93 Ok(match k {
94 "card" => Deserialize::begin(&mut self.card),
95 "created" => Deserialize::begin(&mut self.created),
96 "device_fingerprint" => Deserialize::begin(&mut self.device_fingerprint),
97 "id" => Deserialize::begin(&mut self.id),
98 "last4" => Deserialize::begin(&mut self.last4),
99 "livemode" => Deserialize::begin(&mut self.livemode),
100 "network" => Deserialize::begin(&mut self.network),
101 "network_data" => Deserialize::begin(&mut self.network_data),
102 "network_updated_at" => Deserialize::begin(&mut self.network_updated_at),
103 "status" => Deserialize::begin(&mut self.status),
104 "wallet_provider" => Deserialize::begin(&mut self.wallet_provider),
105 _ => <dyn Visitor>::ignore(),
106 })
107 }
108
109 fn deser_default() -> Self {
110 Self {
111 card: None,
112 created: None,
113 device_fingerprint: Some(None),
114 id: None,
115 last4: Some(None),
116 livemode: None,
117 network: None,
118 network_data: Some(None),
119 network_updated_at: None,
120 status: None,
121 wallet_provider: Some(None),
122 }
123 }
124
125 fn take_out(&mut self) -> Option<Self::Out> {
126 let (
127 Some(card),
128 Some(created),
129 Some(device_fingerprint),
130 Some(id),
131 Some(last4),
132 Some(livemode),
133 Some(network),
134 Some(network_data),
135 Some(network_updated_at),
136 Some(status),
137 Some(wallet_provider),
138 ) = (
139 self.card.take(),
140 self.created,
141 self.device_fingerprint.take(),
142 self.id.take(),
143 self.last4.take(),
144 self.livemode,
145 self.network.take(),
146 self.network_data.take(),
147 self.network_updated_at,
148 self.status.take(),
149 self.wallet_provider.take(),
150 )
151 else {
152 return None;
153 };
154 Some(Self::Out {
155 card,
156 created,
157 device_fingerprint,
158 id,
159 last4,
160 livemode,
161 network,
162 network_data,
163 network_updated_at,
164 status,
165 wallet_provider,
166 })
167 }
168 }
169
170 impl Map for Builder<'_> {
171 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
172 self.builder.key(k)
173 }
174
175 fn finish(&mut self) -> Result<()> {
176 *self.out = self.builder.take_out();
177 Ok(())
178 }
179 }
180
181 impl ObjectDeser for IssuingToken {
182 type Builder = IssuingTokenBuilder;
183 }
184
185 impl FromValueOpt for IssuingToken {
186 fn from_value(v: Value) -> Option<Self> {
187 let Value::Object(obj) = v else {
188 return None;
189 };
190 let mut b = IssuingTokenBuilder::deser_default();
191 for (k, v) in obj {
192 match k.as_str() {
193 "card" => b.card = FromValueOpt::from_value(v),
194 "created" => b.created = FromValueOpt::from_value(v),
195 "device_fingerprint" => b.device_fingerprint = FromValueOpt::from_value(v),
196 "id" => b.id = FromValueOpt::from_value(v),
197 "last4" => b.last4 = FromValueOpt::from_value(v),
198 "livemode" => b.livemode = FromValueOpt::from_value(v),
199 "network" => b.network = FromValueOpt::from_value(v),
200 "network_data" => b.network_data = FromValueOpt::from_value(v),
201 "network_updated_at" => b.network_updated_at = FromValueOpt::from_value(v),
202 "status" => b.status = FromValueOpt::from_value(v),
203 "wallet_provider" => b.wallet_provider = FromValueOpt::from_value(v),
204 _ => {}
205 }
206 }
207 b.take_out()
208 }
209 }
210};
211#[cfg(feature = "serialize")]
212impl serde::Serialize for IssuingToken {
213 fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
214 use serde::ser::SerializeStruct;
215 let mut s = s.serialize_struct("IssuingToken", 12)?;
216 s.serialize_field("card", &self.card)?;
217 s.serialize_field("created", &self.created)?;
218 s.serialize_field("device_fingerprint", &self.device_fingerprint)?;
219 s.serialize_field("id", &self.id)?;
220 s.serialize_field("last4", &self.last4)?;
221 s.serialize_field("livemode", &self.livemode)?;
222 s.serialize_field("network", &self.network)?;
223 s.serialize_field("network_data", &self.network_data)?;
224 s.serialize_field("network_updated_at", &self.network_updated_at)?;
225 s.serialize_field("status", &self.status)?;
226 s.serialize_field("wallet_provider", &self.wallet_provider)?;
227
228 s.serialize_field("object", "issuing.token")?;
229 s.end()
230 }
231}
232#[derive(Clone, Eq, PartialEq)]
234#[non_exhaustive]
235pub enum IssuingTokenNetwork {
236 Mastercard,
237 Visa,
238 Unknown(String),
240}
241impl IssuingTokenNetwork {
242 pub fn as_str(&self) -> &str {
243 use IssuingTokenNetwork::*;
244 match self {
245 Mastercard => "mastercard",
246 Visa => "visa",
247 Unknown(v) => v,
248 }
249 }
250}
251
252impl std::str::FromStr for IssuingTokenNetwork {
253 type Err = std::convert::Infallible;
254 fn from_str(s: &str) -> Result<Self, Self::Err> {
255 use IssuingTokenNetwork::*;
256 match s {
257 "mastercard" => Ok(Mastercard),
258 "visa" => Ok(Visa),
259 v => {
260 tracing::warn!("Unknown value '{}' for enum '{}'", v, "IssuingTokenNetwork");
261 Ok(Unknown(v.to_owned()))
262 }
263 }
264 }
265}
266impl std::fmt::Display for IssuingTokenNetwork {
267 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
268 f.write_str(self.as_str())
269 }
270}
271
272#[cfg(not(feature = "redact-generated-debug"))]
273impl std::fmt::Debug for IssuingTokenNetwork {
274 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
275 f.write_str(self.as_str())
276 }
277}
278#[cfg(feature = "redact-generated-debug")]
279impl std::fmt::Debug for IssuingTokenNetwork {
280 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
281 f.debug_struct(stringify!(IssuingTokenNetwork)).finish_non_exhaustive()
282 }
283}
284#[cfg(feature = "serialize")]
285impl serde::Serialize for IssuingTokenNetwork {
286 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
287 where
288 S: serde::Serializer,
289 {
290 serializer.serialize_str(self.as_str())
291 }
292}
293impl miniserde::Deserialize for IssuingTokenNetwork {
294 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
295 crate::Place::new(out)
296 }
297}
298
299impl miniserde::de::Visitor for crate::Place<IssuingTokenNetwork> {
300 fn string(&mut self, s: &str) -> miniserde::Result<()> {
301 use std::str::FromStr;
302 self.out = Some(IssuingTokenNetwork::from_str(s).expect("infallible"));
303 Ok(())
304 }
305}
306
307stripe_types::impl_from_val_with_from_str!(IssuingTokenNetwork);
308#[cfg(feature = "deserialize")]
309impl<'de> serde::Deserialize<'de> for IssuingTokenNetwork {
310 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
311 use std::str::FromStr;
312 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
313 Ok(Self::from_str(&s).expect("infallible"))
314 }
315}
316#[derive(Clone, Eq, PartialEq)]
318#[non_exhaustive]
319pub enum IssuingTokenWalletProvider {
320 ApplePay,
321 GooglePay,
322 SamsungPay,
323 Unknown(String),
325}
326impl IssuingTokenWalletProvider {
327 pub fn as_str(&self) -> &str {
328 use IssuingTokenWalletProvider::*;
329 match self {
330 ApplePay => "apple_pay",
331 GooglePay => "google_pay",
332 SamsungPay => "samsung_pay",
333 Unknown(v) => v,
334 }
335 }
336}
337
338impl std::str::FromStr for IssuingTokenWalletProvider {
339 type Err = std::convert::Infallible;
340 fn from_str(s: &str) -> Result<Self, Self::Err> {
341 use IssuingTokenWalletProvider::*;
342 match s {
343 "apple_pay" => Ok(ApplePay),
344 "google_pay" => Ok(GooglePay),
345 "samsung_pay" => Ok(SamsungPay),
346 v => {
347 tracing::warn!("Unknown value '{}' for enum '{}'", v, "IssuingTokenWalletProvider");
348 Ok(Unknown(v.to_owned()))
349 }
350 }
351 }
352}
353impl std::fmt::Display for IssuingTokenWalletProvider {
354 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
355 f.write_str(self.as_str())
356 }
357}
358
359#[cfg(not(feature = "redact-generated-debug"))]
360impl std::fmt::Debug for IssuingTokenWalletProvider {
361 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
362 f.write_str(self.as_str())
363 }
364}
365#[cfg(feature = "redact-generated-debug")]
366impl std::fmt::Debug for IssuingTokenWalletProvider {
367 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
368 f.debug_struct(stringify!(IssuingTokenWalletProvider)).finish_non_exhaustive()
369 }
370}
371#[cfg(feature = "serialize")]
372impl serde::Serialize for IssuingTokenWalletProvider {
373 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
374 where
375 S: serde::Serializer,
376 {
377 serializer.serialize_str(self.as_str())
378 }
379}
380impl miniserde::Deserialize for IssuingTokenWalletProvider {
381 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
382 crate::Place::new(out)
383 }
384}
385
386impl miniserde::de::Visitor for crate::Place<IssuingTokenWalletProvider> {
387 fn string(&mut self, s: &str) -> miniserde::Result<()> {
388 use std::str::FromStr;
389 self.out = Some(IssuingTokenWalletProvider::from_str(s).expect("infallible"));
390 Ok(())
391 }
392}
393
394stripe_types::impl_from_val_with_from_str!(IssuingTokenWalletProvider);
395#[cfg(feature = "deserialize")]
396impl<'de> serde::Deserialize<'de> for IssuingTokenWalletProvider {
397 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
398 use std::str::FromStr;
399 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
400 Ok(Self::from_str(&s).expect("infallible"))
401 }
402}
403impl stripe_types::Object for IssuingToken {
404 type Id = stripe_shared::IssuingTokenId;
405 fn id(&self) -> &Self::Id {
406 &self.id
407 }
408
409 fn into_id(self) -> Self::Id {
410 self.id
411 }
412}
413stripe_types::def_id!(IssuingTokenId);
414#[derive(Clone, Eq, PartialEq)]
415#[non_exhaustive]
416pub enum IssuingTokenStatus {
417 Active,
418 Deleted,
419 Requested,
420 Suspended,
421 Unknown(String),
423}
424impl IssuingTokenStatus {
425 pub fn as_str(&self) -> &str {
426 use IssuingTokenStatus::*;
427 match self {
428 Active => "active",
429 Deleted => "deleted",
430 Requested => "requested",
431 Suspended => "suspended",
432 Unknown(v) => v,
433 }
434 }
435}
436
437impl std::str::FromStr for IssuingTokenStatus {
438 type Err = std::convert::Infallible;
439 fn from_str(s: &str) -> Result<Self, Self::Err> {
440 use IssuingTokenStatus::*;
441 match s {
442 "active" => Ok(Active),
443 "deleted" => Ok(Deleted),
444 "requested" => Ok(Requested),
445 "suspended" => Ok(Suspended),
446 v => {
447 tracing::warn!("Unknown value '{}' for enum '{}'", v, "IssuingTokenStatus");
448 Ok(Unknown(v.to_owned()))
449 }
450 }
451 }
452}
453impl std::fmt::Display for IssuingTokenStatus {
454 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
455 f.write_str(self.as_str())
456 }
457}
458
459#[cfg(not(feature = "redact-generated-debug"))]
460impl std::fmt::Debug for IssuingTokenStatus {
461 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
462 f.write_str(self.as_str())
463 }
464}
465#[cfg(feature = "redact-generated-debug")]
466impl std::fmt::Debug for IssuingTokenStatus {
467 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
468 f.debug_struct(stringify!(IssuingTokenStatus)).finish_non_exhaustive()
469 }
470}
471impl serde::Serialize for IssuingTokenStatus {
472 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
473 where
474 S: serde::Serializer,
475 {
476 serializer.serialize_str(self.as_str())
477 }
478}
479impl miniserde::Deserialize for IssuingTokenStatus {
480 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
481 crate::Place::new(out)
482 }
483}
484
485impl miniserde::de::Visitor for crate::Place<IssuingTokenStatus> {
486 fn string(&mut self, s: &str) -> miniserde::Result<()> {
487 use std::str::FromStr;
488 self.out = Some(IssuingTokenStatus::from_str(s).expect("infallible"));
489 Ok(())
490 }
491}
492
493stripe_types::impl_from_val_with_from_str!(IssuingTokenStatus);
494#[cfg(feature = "deserialize")]
495impl<'de> serde::Deserialize<'de> for IssuingTokenStatus {
496 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
497 use std::str::FromStr;
498 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
499 Ok(Self::from_str(&s).expect("infallible"))
500 }
501}