1#[derive(Clone, Debug)]
7#[cfg_attr(feature = "deserialize", derive(serde::Deserialize))]
8pub struct Charge {
9 pub amount: i64,
14 pub amount_captured: i64,
16 pub amount_refunded: i64,
18 pub application: Option<stripe_types::Expandable<stripe_shared::Application>>,
20 pub application_fee: Option<stripe_types::Expandable<stripe_shared::ApplicationFee>>,
23 pub application_fee_amount: Option<i64>,
26 pub authorization_code: Option<String>,
28 pub balance_transaction: Option<stripe_types::Expandable<stripe_shared::BalanceTransaction>>,
30 pub billing_details: stripe_shared::BillingDetails,
31 pub calculated_statement_descriptor: Option<String>,
35 pub captured: bool,
37 pub created: stripe_types::Timestamp,
39 pub currency: stripe_types::Currency,
42 pub customer: Option<stripe_types::Expandable<stripe_shared::Customer>>,
44 pub description: Option<String>,
46 pub disputed: bool,
48 pub failure_balance_transaction:
50 Option<stripe_types::Expandable<stripe_shared::BalanceTransaction>>,
51 pub failure_code: Option<String>,
53 pub failure_message: Option<String>,
55 pub fraud_details: Option<stripe_shared::ChargeFraudDetails>,
57 pub id: stripe_shared::ChargeId,
59 pub level3: Option<stripe_shared::Level3>,
60 pub livemode: bool,
62 pub metadata: std::collections::HashMap<String, String>,
65 pub on_behalf_of: Option<stripe_types::Expandable<stripe_shared::Account>>,
68 pub outcome: Option<stripe_shared::ChargeOutcome>,
71 pub paid: bool,
73 pub payment_intent: Option<stripe_types::Expandable<stripe_shared::PaymentIntent>>,
75 pub payment_method: Option<String>,
77 pub payment_method_details: Option<stripe_shared::PaymentMethodDetails>,
79 pub presentment_details: Option<stripe_shared::PaymentFlowsPaymentIntentPresentmentDetails>,
80 pub radar_options: Option<stripe_shared::RadarRadarOptions>,
81 pub receipt_email: Option<String>,
83 pub receipt_number: Option<String>,
86 pub receipt_url: Option<String>,
90 pub refunded: bool,
93 pub refunds: Option<stripe_types::List<stripe_shared::Refund>>,
95 pub review: Option<stripe_types::Expandable<stripe_shared::Review>>,
97 pub shipping: Option<stripe_shared::Shipping>,
99 pub source: Option<stripe_shared::PaymentSource>,
103 pub source_transfer: Option<stripe_types::Expandable<stripe_shared::Transfer>>,
107 pub statement_descriptor: Option<String>,
113 pub statement_descriptor_suffix: Option<String>,
117 pub status: ChargeStatus,
119 pub transfer: Option<stripe_types::Expandable<stripe_shared::Transfer>>,
121 pub transfer_data: Option<stripe_shared::ChargeTransferData>,
124 pub transfer_group: Option<String>,
127}
128#[doc(hidden)]
129pub struct ChargeBuilder {
130 amount: Option<i64>,
131 amount_captured: Option<i64>,
132 amount_refunded: Option<i64>,
133 application: Option<Option<stripe_types::Expandable<stripe_shared::Application>>>,
134 application_fee: Option<Option<stripe_types::Expandable<stripe_shared::ApplicationFee>>>,
135 application_fee_amount: Option<Option<i64>>,
136 authorization_code: Option<Option<String>>,
137 balance_transaction:
138 Option<Option<stripe_types::Expandable<stripe_shared::BalanceTransaction>>>,
139 billing_details: Option<stripe_shared::BillingDetails>,
140 calculated_statement_descriptor: Option<Option<String>>,
141 captured: Option<bool>,
142 created: Option<stripe_types::Timestamp>,
143 currency: Option<stripe_types::Currency>,
144 customer: Option<Option<stripe_types::Expandable<stripe_shared::Customer>>>,
145 description: Option<Option<String>>,
146 disputed: Option<bool>,
147 failure_balance_transaction:
148 Option<Option<stripe_types::Expandable<stripe_shared::BalanceTransaction>>>,
149 failure_code: Option<Option<String>>,
150 failure_message: Option<Option<String>>,
151 fraud_details: Option<Option<stripe_shared::ChargeFraudDetails>>,
152 id: Option<stripe_shared::ChargeId>,
153 level3: Option<Option<stripe_shared::Level3>>,
154 livemode: Option<bool>,
155 metadata: Option<std::collections::HashMap<String, String>>,
156 on_behalf_of: Option<Option<stripe_types::Expandable<stripe_shared::Account>>>,
157 outcome: Option<Option<stripe_shared::ChargeOutcome>>,
158 paid: Option<bool>,
159 payment_intent: Option<Option<stripe_types::Expandable<stripe_shared::PaymentIntent>>>,
160 payment_method: Option<Option<String>>,
161 payment_method_details: Option<Option<stripe_shared::PaymentMethodDetails>>,
162 presentment_details: Option<Option<stripe_shared::PaymentFlowsPaymentIntentPresentmentDetails>>,
163 radar_options: Option<Option<stripe_shared::RadarRadarOptions>>,
164 receipt_email: Option<Option<String>>,
165 receipt_number: Option<Option<String>>,
166 receipt_url: Option<Option<String>>,
167 refunded: Option<bool>,
168 refunds: Option<Option<stripe_types::List<stripe_shared::Refund>>>,
169 review: Option<Option<stripe_types::Expandable<stripe_shared::Review>>>,
170 shipping: Option<Option<stripe_shared::Shipping>>,
171 source: Option<Option<stripe_shared::PaymentSource>>,
172 source_transfer: Option<Option<stripe_types::Expandable<stripe_shared::Transfer>>>,
173 statement_descriptor: Option<Option<String>>,
174 statement_descriptor_suffix: Option<Option<String>>,
175 status: Option<ChargeStatus>,
176 transfer: Option<Option<stripe_types::Expandable<stripe_shared::Transfer>>>,
177 transfer_data: Option<Option<stripe_shared::ChargeTransferData>>,
178 transfer_group: Option<Option<String>>,
179}
180
181#[allow(
182 unused_variables,
183 irrefutable_let_patterns,
184 clippy::let_unit_value,
185 clippy::match_single_binding,
186 clippy::single_match
187)]
188const _: () = {
189 use miniserde::de::{Map, Visitor};
190 use miniserde::json::Value;
191 use miniserde::{Deserialize, Result, make_place};
192 use stripe_types::miniserde_helpers::FromValueOpt;
193 use stripe_types::{MapBuilder, ObjectDeser};
194
195 make_place!(Place);
196
197 impl Deserialize for Charge {
198 fn begin(out: &mut Option<Self>) -> &mut dyn Visitor {
199 Place::new(out)
200 }
201 }
202
203 struct Builder<'a> {
204 out: &'a mut Option<Charge>,
205 builder: ChargeBuilder,
206 }
207
208 impl Visitor for Place<Charge> {
209 fn map(&mut self) -> Result<Box<dyn Map + '_>> {
210 Ok(Box::new(Builder { out: &mut self.out, builder: ChargeBuilder::deser_default() }))
211 }
212 }
213
214 impl MapBuilder for ChargeBuilder {
215 type Out = Charge;
216 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
217 Ok(match k {
218 "amount" => Deserialize::begin(&mut self.amount),
219 "amount_captured" => Deserialize::begin(&mut self.amount_captured),
220 "amount_refunded" => Deserialize::begin(&mut self.amount_refunded),
221 "application" => Deserialize::begin(&mut self.application),
222 "application_fee" => Deserialize::begin(&mut self.application_fee),
223 "application_fee_amount" => Deserialize::begin(&mut self.application_fee_amount),
224 "authorization_code" => Deserialize::begin(&mut self.authorization_code),
225 "balance_transaction" => Deserialize::begin(&mut self.balance_transaction),
226 "billing_details" => Deserialize::begin(&mut self.billing_details),
227 "calculated_statement_descriptor" => {
228 Deserialize::begin(&mut self.calculated_statement_descriptor)
229 }
230 "captured" => Deserialize::begin(&mut self.captured),
231 "created" => Deserialize::begin(&mut self.created),
232 "currency" => Deserialize::begin(&mut self.currency),
233 "customer" => Deserialize::begin(&mut self.customer),
234 "description" => Deserialize::begin(&mut self.description),
235 "disputed" => Deserialize::begin(&mut self.disputed),
236 "failure_balance_transaction" => {
237 Deserialize::begin(&mut self.failure_balance_transaction)
238 }
239 "failure_code" => Deserialize::begin(&mut self.failure_code),
240 "failure_message" => Deserialize::begin(&mut self.failure_message),
241 "fraud_details" => Deserialize::begin(&mut self.fraud_details),
242 "id" => Deserialize::begin(&mut self.id),
243 "level3" => Deserialize::begin(&mut self.level3),
244 "livemode" => Deserialize::begin(&mut self.livemode),
245 "metadata" => Deserialize::begin(&mut self.metadata),
246 "on_behalf_of" => Deserialize::begin(&mut self.on_behalf_of),
247 "outcome" => Deserialize::begin(&mut self.outcome),
248 "paid" => Deserialize::begin(&mut self.paid),
249 "payment_intent" => Deserialize::begin(&mut self.payment_intent),
250 "payment_method" => Deserialize::begin(&mut self.payment_method),
251 "payment_method_details" => Deserialize::begin(&mut self.payment_method_details),
252 "presentment_details" => Deserialize::begin(&mut self.presentment_details),
253 "radar_options" => Deserialize::begin(&mut self.radar_options),
254 "receipt_email" => Deserialize::begin(&mut self.receipt_email),
255 "receipt_number" => Deserialize::begin(&mut self.receipt_number),
256 "receipt_url" => Deserialize::begin(&mut self.receipt_url),
257 "refunded" => Deserialize::begin(&mut self.refunded),
258 "refunds" => Deserialize::begin(&mut self.refunds),
259 "review" => Deserialize::begin(&mut self.review),
260 "shipping" => Deserialize::begin(&mut self.shipping),
261 "source" => Deserialize::begin(&mut self.source),
262 "source_transfer" => Deserialize::begin(&mut self.source_transfer),
263 "statement_descriptor" => Deserialize::begin(&mut self.statement_descriptor),
264 "statement_descriptor_suffix" => {
265 Deserialize::begin(&mut self.statement_descriptor_suffix)
266 }
267 "status" => Deserialize::begin(&mut self.status),
268 "transfer" => Deserialize::begin(&mut self.transfer),
269 "transfer_data" => Deserialize::begin(&mut self.transfer_data),
270 "transfer_group" => Deserialize::begin(&mut self.transfer_group),
271 _ => <dyn Visitor>::ignore(),
272 })
273 }
274
275 fn deser_default() -> Self {
276 Self {
277 amount: Deserialize::default(),
278 amount_captured: Deserialize::default(),
279 amount_refunded: Deserialize::default(),
280 application: Deserialize::default(),
281 application_fee: Deserialize::default(),
282 application_fee_amount: Deserialize::default(),
283 authorization_code: Deserialize::default(),
284 balance_transaction: Deserialize::default(),
285 billing_details: Deserialize::default(),
286 calculated_statement_descriptor: Deserialize::default(),
287 captured: Deserialize::default(),
288 created: Deserialize::default(),
289 currency: Deserialize::default(),
290 customer: Deserialize::default(),
291 description: Deserialize::default(),
292 disputed: Deserialize::default(),
293 failure_balance_transaction: Deserialize::default(),
294 failure_code: Deserialize::default(),
295 failure_message: Deserialize::default(),
296 fraud_details: Deserialize::default(),
297 id: Deserialize::default(),
298 level3: Deserialize::default(),
299 livemode: Deserialize::default(),
300 metadata: Deserialize::default(),
301 on_behalf_of: Deserialize::default(),
302 outcome: Deserialize::default(),
303 paid: Deserialize::default(),
304 payment_intent: Deserialize::default(),
305 payment_method: Deserialize::default(),
306 payment_method_details: Deserialize::default(),
307 presentment_details: Deserialize::default(),
308 radar_options: Deserialize::default(),
309 receipt_email: Deserialize::default(),
310 receipt_number: Deserialize::default(),
311 receipt_url: Deserialize::default(),
312 refunded: Deserialize::default(),
313 refunds: Deserialize::default(),
314 review: Deserialize::default(),
315 shipping: Deserialize::default(),
316 source: Deserialize::default(),
317 source_transfer: Deserialize::default(),
318 statement_descriptor: Deserialize::default(),
319 statement_descriptor_suffix: Deserialize::default(),
320 status: Deserialize::default(),
321 transfer: Deserialize::default(),
322 transfer_data: Deserialize::default(),
323 transfer_group: Deserialize::default(),
324 }
325 }
326
327 fn take_out(&mut self) -> Option<Self::Out> {
328 let (
329 Some(amount),
330 Some(amount_captured),
331 Some(amount_refunded),
332 Some(application),
333 Some(application_fee),
334 Some(application_fee_amount),
335 Some(authorization_code),
336 Some(balance_transaction),
337 Some(billing_details),
338 Some(calculated_statement_descriptor),
339 Some(captured),
340 Some(created),
341 Some(currency),
342 Some(customer),
343 Some(description),
344 Some(disputed),
345 Some(failure_balance_transaction),
346 Some(failure_code),
347 Some(failure_message),
348 Some(fraud_details),
349 Some(id),
350 Some(level3),
351 Some(livemode),
352 Some(metadata),
353 Some(on_behalf_of),
354 Some(outcome),
355 Some(paid),
356 Some(payment_intent),
357 Some(payment_method),
358 Some(payment_method_details),
359 Some(presentment_details),
360 Some(radar_options),
361 Some(receipt_email),
362 Some(receipt_number),
363 Some(receipt_url),
364 Some(refunded),
365 Some(refunds),
366 Some(review),
367 Some(shipping),
368 Some(source),
369 Some(source_transfer),
370 Some(statement_descriptor),
371 Some(statement_descriptor_suffix),
372 Some(status),
373 Some(transfer),
374 Some(transfer_data),
375 Some(transfer_group),
376 ) = (
377 self.amount,
378 self.amount_captured,
379 self.amount_refunded,
380 self.application.take(),
381 self.application_fee.take(),
382 self.application_fee_amount,
383 self.authorization_code.take(),
384 self.balance_transaction.take(),
385 self.billing_details.take(),
386 self.calculated_statement_descriptor.take(),
387 self.captured,
388 self.created,
389 self.currency.take(),
390 self.customer.take(),
391 self.description.take(),
392 self.disputed,
393 self.failure_balance_transaction.take(),
394 self.failure_code.take(),
395 self.failure_message.take(),
396 self.fraud_details.take(),
397 self.id.take(),
398 self.level3.take(),
399 self.livemode,
400 self.metadata.take(),
401 self.on_behalf_of.take(),
402 self.outcome.take(),
403 self.paid,
404 self.payment_intent.take(),
405 self.payment_method.take(),
406 self.payment_method_details.take(),
407 self.presentment_details.take(),
408 self.radar_options.take(),
409 self.receipt_email.take(),
410 self.receipt_number.take(),
411 self.receipt_url.take(),
412 self.refunded,
413 self.refunds.take(),
414 self.review.take(),
415 self.shipping.take(),
416 self.source.take(),
417 self.source_transfer.take(),
418 self.statement_descriptor.take(),
419 self.statement_descriptor_suffix.take(),
420 self.status,
421 self.transfer.take(),
422 self.transfer_data.take(),
423 self.transfer_group.take(),
424 )
425 else {
426 return None;
427 };
428 Some(Self::Out {
429 amount,
430 amount_captured,
431 amount_refunded,
432 application,
433 application_fee,
434 application_fee_amount,
435 authorization_code,
436 balance_transaction,
437 billing_details,
438 calculated_statement_descriptor,
439 captured,
440 created,
441 currency,
442 customer,
443 description,
444 disputed,
445 failure_balance_transaction,
446 failure_code,
447 failure_message,
448 fraud_details,
449 id,
450 level3,
451 livemode,
452 metadata,
453 on_behalf_of,
454 outcome,
455 paid,
456 payment_intent,
457 payment_method,
458 payment_method_details,
459 presentment_details,
460 radar_options,
461 receipt_email,
462 receipt_number,
463 receipt_url,
464 refunded,
465 refunds,
466 review,
467 shipping,
468 source,
469 source_transfer,
470 statement_descriptor,
471 statement_descriptor_suffix,
472 status,
473 transfer,
474 transfer_data,
475 transfer_group,
476 })
477 }
478 }
479
480 impl Map for Builder<'_> {
481 fn key(&mut self, k: &str) -> Result<&mut dyn Visitor> {
482 self.builder.key(k)
483 }
484
485 fn finish(&mut self) -> Result<()> {
486 *self.out = self.builder.take_out();
487 Ok(())
488 }
489 }
490
491 impl ObjectDeser for Charge {
492 type Builder = ChargeBuilder;
493 }
494
495 impl FromValueOpt for Charge {
496 fn from_value(v: Value) -> Option<Self> {
497 let Value::Object(obj) = v else {
498 return None;
499 };
500 let mut b = ChargeBuilder::deser_default();
501 for (k, v) in obj {
502 match k.as_str() {
503 "amount" => b.amount = FromValueOpt::from_value(v),
504 "amount_captured" => b.amount_captured = FromValueOpt::from_value(v),
505 "amount_refunded" => b.amount_refunded = FromValueOpt::from_value(v),
506 "application" => b.application = FromValueOpt::from_value(v),
507 "application_fee" => b.application_fee = FromValueOpt::from_value(v),
508 "application_fee_amount" => {
509 b.application_fee_amount = FromValueOpt::from_value(v)
510 }
511 "authorization_code" => b.authorization_code = FromValueOpt::from_value(v),
512 "balance_transaction" => b.balance_transaction = FromValueOpt::from_value(v),
513 "billing_details" => b.billing_details = FromValueOpt::from_value(v),
514 "calculated_statement_descriptor" => {
515 b.calculated_statement_descriptor = FromValueOpt::from_value(v)
516 }
517 "captured" => b.captured = FromValueOpt::from_value(v),
518 "created" => b.created = FromValueOpt::from_value(v),
519 "currency" => b.currency = FromValueOpt::from_value(v),
520 "customer" => b.customer = FromValueOpt::from_value(v),
521 "description" => b.description = FromValueOpt::from_value(v),
522 "disputed" => b.disputed = FromValueOpt::from_value(v),
523 "failure_balance_transaction" => {
524 b.failure_balance_transaction = FromValueOpt::from_value(v)
525 }
526 "failure_code" => b.failure_code = FromValueOpt::from_value(v),
527 "failure_message" => b.failure_message = FromValueOpt::from_value(v),
528 "fraud_details" => b.fraud_details = FromValueOpt::from_value(v),
529 "id" => b.id = FromValueOpt::from_value(v),
530 "level3" => b.level3 = FromValueOpt::from_value(v),
531 "livemode" => b.livemode = FromValueOpt::from_value(v),
532 "metadata" => b.metadata = FromValueOpt::from_value(v),
533 "on_behalf_of" => b.on_behalf_of = FromValueOpt::from_value(v),
534 "outcome" => b.outcome = FromValueOpt::from_value(v),
535 "paid" => b.paid = FromValueOpt::from_value(v),
536 "payment_intent" => b.payment_intent = FromValueOpt::from_value(v),
537 "payment_method" => b.payment_method = FromValueOpt::from_value(v),
538 "payment_method_details" => {
539 b.payment_method_details = FromValueOpt::from_value(v)
540 }
541 "presentment_details" => b.presentment_details = FromValueOpt::from_value(v),
542 "radar_options" => b.radar_options = FromValueOpt::from_value(v),
543 "receipt_email" => b.receipt_email = FromValueOpt::from_value(v),
544 "receipt_number" => b.receipt_number = FromValueOpt::from_value(v),
545 "receipt_url" => b.receipt_url = FromValueOpt::from_value(v),
546 "refunded" => b.refunded = FromValueOpt::from_value(v),
547 "refunds" => b.refunds = FromValueOpt::from_value(v),
548 "review" => b.review = FromValueOpt::from_value(v),
549 "shipping" => b.shipping = FromValueOpt::from_value(v),
550 "source" => b.source = FromValueOpt::from_value(v),
551 "source_transfer" => b.source_transfer = FromValueOpt::from_value(v),
552 "statement_descriptor" => b.statement_descriptor = FromValueOpt::from_value(v),
553 "statement_descriptor_suffix" => {
554 b.statement_descriptor_suffix = FromValueOpt::from_value(v)
555 }
556 "status" => b.status = FromValueOpt::from_value(v),
557 "transfer" => b.transfer = FromValueOpt::from_value(v),
558 "transfer_data" => b.transfer_data = FromValueOpt::from_value(v),
559 "transfer_group" => b.transfer_group = FromValueOpt::from_value(v),
560 _ => {}
561 }
562 }
563 b.take_out()
564 }
565 }
566};
567#[cfg(feature = "serialize")]
568impl serde::Serialize for Charge {
569 fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
570 use serde::ser::SerializeStruct;
571 let mut s = s.serialize_struct("Charge", 48)?;
572 s.serialize_field("amount", &self.amount)?;
573 s.serialize_field("amount_captured", &self.amount_captured)?;
574 s.serialize_field("amount_refunded", &self.amount_refunded)?;
575 s.serialize_field("application", &self.application)?;
576 s.serialize_field("application_fee", &self.application_fee)?;
577 s.serialize_field("application_fee_amount", &self.application_fee_amount)?;
578 s.serialize_field("authorization_code", &self.authorization_code)?;
579 s.serialize_field("balance_transaction", &self.balance_transaction)?;
580 s.serialize_field("billing_details", &self.billing_details)?;
581 s.serialize_field(
582 "calculated_statement_descriptor",
583 &self.calculated_statement_descriptor,
584 )?;
585 s.serialize_field("captured", &self.captured)?;
586 s.serialize_field("created", &self.created)?;
587 s.serialize_field("currency", &self.currency)?;
588 s.serialize_field("customer", &self.customer)?;
589 s.serialize_field("description", &self.description)?;
590 s.serialize_field("disputed", &self.disputed)?;
591 s.serialize_field("failure_balance_transaction", &self.failure_balance_transaction)?;
592 s.serialize_field("failure_code", &self.failure_code)?;
593 s.serialize_field("failure_message", &self.failure_message)?;
594 s.serialize_field("fraud_details", &self.fraud_details)?;
595 s.serialize_field("id", &self.id)?;
596 s.serialize_field("level3", &self.level3)?;
597 s.serialize_field("livemode", &self.livemode)?;
598 s.serialize_field("metadata", &self.metadata)?;
599 s.serialize_field("on_behalf_of", &self.on_behalf_of)?;
600 s.serialize_field("outcome", &self.outcome)?;
601 s.serialize_field("paid", &self.paid)?;
602 s.serialize_field("payment_intent", &self.payment_intent)?;
603 s.serialize_field("payment_method", &self.payment_method)?;
604 s.serialize_field("payment_method_details", &self.payment_method_details)?;
605 s.serialize_field("presentment_details", &self.presentment_details)?;
606 s.serialize_field("radar_options", &self.radar_options)?;
607 s.serialize_field("receipt_email", &self.receipt_email)?;
608 s.serialize_field("receipt_number", &self.receipt_number)?;
609 s.serialize_field("receipt_url", &self.receipt_url)?;
610 s.serialize_field("refunded", &self.refunded)?;
611 s.serialize_field("refunds", &self.refunds)?;
612 s.serialize_field("review", &self.review)?;
613 s.serialize_field("shipping", &self.shipping)?;
614 s.serialize_field("source", &self.source)?;
615 s.serialize_field("source_transfer", &self.source_transfer)?;
616 s.serialize_field("statement_descriptor", &self.statement_descriptor)?;
617 s.serialize_field("statement_descriptor_suffix", &self.statement_descriptor_suffix)?;
618 s.serialize_field("status", &self.status)?;
619 s.serialize_field("transfer", &self.transfer)?;
620 s.serialize_field("transfer_data", &self.transfer_data)?;
621 s.serialize_field("transfer_group", &self.transfer_group)?;
622
623 s.serialize_field("object", "charge")?;
624 s.end()
625 }
626}
627#[derive(Copy, Clone, Eq, PartialEq)]
629pub enum ChargeStatus {
630 Failed,
631 Pending,
632 Succeeded,
633}
634impl ChargeStatus {
635 pub fn as_str(self) -> &'static str {
636 use ChargeStatus::*;
637 match self {
638 Failed => "failed",
639 Pending => "pending",
640 Succeeded => "succeeded",
641 }
642 }
643}
644
645impl std::str::FromStr for ChargeStatus {
646 type Err = stripe_types::StripeParseError;
647 fn from_str(s: &str) -> Result<Self, Self::Err> {
648 use ChargeStatus::*;
649 match s {
650 "failed" => Ok(Failed),
651 "pending" => Ok(Pending),
652 "succeeded" => Ok(Succeeded),
653 _ => Err(stripe_types::StripeParseError),
654 }
655 }
656}
657impl std::fmt::Display for ChargeStatus {
658 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
659 f.write_str(self.as_str())
660 }
661}
662
663impl std::fmt::Debug for ChargeStatus {
664 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
665 f.write_str(self.as_str())
666 }
667}
668#[cfg(feature = "serialize")]
669impl serde::Serialize for ChargeStatus {
670 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
671 where
672 S: serde::Serializer,
673 {
674 serializer.serialize_str(self.as_str())
675 }
676}
677impl miniserde::Deserialize for ChargeStatus {
678 fn begin(out: &mut Option<Self>) -> &mut dyn miniserde::de::Visitor {
679 crate::Place::new(out)
680 }
681}
682
683impl miniserde::de::Visitor for crate::Place<ChargeStatus> {
684 fn string(&mut self, s: &str) -> miniserde::Result<()> {
685 use std::str::FromStr;
686 self.out = Some(ChargeStatus::from_str(s).map_err(|_| miniserde::Error)?);
687 Ok(())
688 }
689}
690
691stripe_types::impl_from_val_with_from_str!(ChargeStatus);
692#[cfg(feature = "deserialize")]
693impl<'de> serde::Deserialize<'de> for ChargeStatus {
694 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
695 use std::str::FromStr;
696 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
697 Self::from_str(&s).map_err(|_| serde::de::Error::custom("Unknown value for ChargeStatus"))
698 }
699}
700impl stripe_types::Object for Charge {
701 type Id = stripe_shared::ChargeId;
702 fn id(&self) -> &Self::Id {
703 &self.id
704 }
705
706 fn into_id(self) -> Self::Id {
707 self.id
708 }
709}
710stripe_types::def_id!(ChargeId);