1use stripe_client_core::{
2 RequestBuilder, StripeBlockingClient, StripeClient, StripeMethod, StripeRequest,
3};
4
5#[derive(Clone, Debug, serde::Serialize)]
6struct ListDisputeBuilder {
7 #[serde(skip_serializing_if = "Option::is_none")]
8 charge: Option<String>,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 created: Option<stripe_types::RangeQueryTs>,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 ending_before: Option<String>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 expand: Option<Vec<String>>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 limit: Option<i64>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 payment_intent: Option<String>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 starting_after: Option<String>,
21}
22impl ListDisputeBuilder {
23 fn new() -> Self {
24 Self {
25 charge: None,
26 created: None,
27 ending_before: None,
28 expand: None,
29 limit: None,
30 payment_intent: None,
31 starting_after: None,
32 }
33 }
34}
35#[derive(Clone, Debug, serde::Serialize)]
37pub struct ListDispute {
38 inner: ListDisputeBuilder,
39}
40impl ListDispute {
41 pub fn new() -> Self {
43 Self { inner: ListDisputeBuilder::new() }
44 }
45 pub fn charge(mut self, charge: impl Into<String>) -> Self {
47 self.inner.charge = Some(charge.into());
48 self
49 }
50 pub fn created(mut self, created: impl Into<stripe_types::RangeQueryTs>) -> Self {
52 self.inner.created = Some(created.into());
53 self
54 }
55 pub fn ending_before(mut self, ending_before: impl Into<String>) -> Self {
59 self.inner.ending_before = Some(ending_before.into());
60 self
61 }
62 pub fn expand(mut self, expand: impl Into<Vec<String>>) -> Self {
64 self.inner.expand = Some(expand.into());
65 self
66 }
67 pub fn limit(mut self, limit: impl Into<i64>) -> Self {
70 self.inner.limit = Some(limit.into());
71 self
72 }
73 pub fn payment_intent(mut self, payment_intent: impl Into<String>) -> Self {
75 self.inner.payment_intent = Some(payment_intent.into());
76 self
77 }
78 pub fn starting_after(mut self, starting_after: impl Into<String>) -> Self {
82 self.inner.starting_after = Some(starting_after.into());
83 self
84 }
85}
86impl Default for ListDispute {
87 fn default() -> Self {
88 Self::new()
89 }
90}
91impl ListDispute {
92 pub async fn send<C: StripeClient>(
94 &self,
95 client: &C,
96 ) -> Result<<Self as StripeRequest>::Output, C::Err> {
97 self.customize().send(client).await
98 }
99
100 pub fn send_blocking<C: StripeBlockingClient>(
102 &self,
103 client: &C,
104 ) -> Result<<Self as StripeRequest>::Output, C::Err> {
105 self.customize().send_blocking(client)
106 }
107
108 pub fn paginate(
109 &self,
110 ) -> stripe_client_core::ListPaginator<stripe_types::List<stripe_shared::Dispute>> {
111 stripe_client_core::ListPaginator::new_list("/disputes", &self.inner)
112 }
113}
114
115impl StripeRequest for ListDispute {
116 type Output = stripe_types::List<stripe_shared::Dispute>;
117
118 fn build(&self) -> RequestBuilder {
119 RequestBuilder::new(StripeMethod::Get, "/disputes").query(&self.inner)
120 }
121}
122#[derive(Clone, Debug, serde::Serialize)]
123struct RetrieveDisputeBuilder {
124 #[serde(skip_serializing_if = "Option::is_none")]
125 expand: Option<Vec<String>>,
126}
127impl RetrieveDisputeBuilder {
128 fn new() -> Self {
129 Self { expand: None }
130 }
131}
132#[derive(Clone, Debug, serde::Serialize)]
134pub struct RetrieveDispute {
135 inner: RetrieveDisputeBuilder,
136 dispute: stripe_shared::DisputeId,
137}
138impl RetrieveDispute {
139 pub fn new(dispute: impl Into<stripe_shared::DisputeId>) -> Self {
141 Self { dispute: dispute.into(), inner: RetrieveDisputeBuilder::new() }
142 }
143 pub fn expand(mut self, expand: impl Into<Vec<String>>) -> Self {
145 self.inner.expand = Some(expand.into());
146 self
147 }
148}
149impl RetrieveDispute {
150 pub async fn send<C: StripeClient>(
152 &self,
153 client: &C,
154 ) -> Result<<Self as StripeRequest>::Output, C::Err> {
155 self.customize().send(client).await
156 }
157
158 pub fn send_blocking<C: StripeBlockingClient>(
160 &self,
161 client: &C,
162 ) -> Result<<Self as StripeRequest>::Output, C::Err> {
163 self.customize().send_blocking(client)
164 }
165}
166
167impl StripeRequest for RetrieveDispute {
168 type Output = stripe_shared::Dispute;
169
170 fn build(&self) -> RequestBuilder {
171 let dispute = &self.dispute;
172 RequestBuilder::new(StripeMethod::Get, format!("/disputes/{dispute}")).query(&self.inner)
173 }
174}
175#[derive(Clone, Debug, serde::Serialize)]
176struct UpdateDisputeBuilder {
177 #[serde(skip_serializing_if = "Option::is_none")]
178 evidence: Option<UpdateDisputeEvidence>,
179 #[serde(skip_serializing_if = "Option::is_none")]
180 expand: Option<Vec<String>>,
181 #[serde(skip_serializing_if = "Option::is_none")]
182 metadata: Option<std::collections::HashMap<String, String>>,
183 #[serde(skip_serializing_if = "Option::is_none")]
184 submit: Option<bool>,
185}
186impl UpdateDisputeBuilder {
187 fn new() -> Self {
188 Self { evidence: None, expand: None, metadata: None, submit: None }
189 }
190}
191#[derive(Clone, Debug, serde::Serialize)]
195pub struct UpdateDisputeEvidence {
196 #[serde(skip_serializing_if = "Option::is_none")]
200 pub access_activity_log: Option<String>,
201 #[serde(skip_serializing_if = "Option::is_none")]
203 pub billing_address: Option<String>,
204 #[serde(skip_serializing_if = "Option::is_none")]
206 pub cancellation_policy: Option<String>,
207 #[serde(skip_serializing_if = "Option::is_none")]
210 pub cancellation_policy_disclosure: Option<String>,
211 #[serde(skip_serializing_if = "Option::is_none")]
214 pub cancellation_rebuttal: Option<String>,
215 #[serde(skip_serializing_if = "Option::is_none")]
218 pub customer_communication: Option<String>,
219 #[serde(skip_serializing_if = "Option::is_none")]
221 pub customer_email_address: Option<String>,
222 #[serde(skip_serializing_if = "Option::is_none")]
224 pub customer_name: Option<String>,
225 #[serde(skip_serializing_if = "Option::is_none")]
227 pub customer_purchase_ip: Option<String>,
228 #[serde(skip_serializing_if = "Option::is_none")]
230 pub customer_signature: Option<String>,
231 #[serde(skip_serializing_if = "Option::is_none")]
234 pub duplicate_charge_documentation: Option<String>,
235 #[serde(skip_serializing_if = "Option::is_none")]
238 pub duplicate_charge_explanation: Option<String>,
239 #[serde(skip_serializing_if = "Option::is_none")]
241 pub duplicate_charge_id: Option<String>,
242 #[serde(skip_serializing_if = "Option::is_none")]
244 pub enhanced_evidence: Option<UpdateDisputeEvidenceEnhancedEvidence>,
245 #[serde(skip_serializing_if = "Option::is_none")]
247 pub product_description: Option<String>,
248 #[serde(skip_serializing_if = "Option::is_none")]
250 pub receipt: Option<String>,
251 #[serde(skip_serializing_if = "Option::is_none")]
253 pub refund_policy: Option<String>,
254 #[serde(skip_serializing_if = "Option::is_none")]
257 pub refund_policy_disclosure: Option<String>,
258 #[serde(skip_serializing_if = "Option::is_none")]
261 pub refund_refusal_explanation: Option<String>,
262 #[serde(skip_serializing_if = "Option::is_none")]
264 pub service_date: Option<String>,
265 #[serde(skip_serializing_if = "Option::is_none")]
268 pub service_documentation: Option<String>,
269 #[serde(skip_serializing_if = "Option::is_none")]
272 pub shipping_address: Option<String>,
273 #[serde(skip_serializing_if = "Option::is_none")]
276 pub shipping_carrier: Option<String>,
277 #[serde(skip_serializing_if = "Option::is_none")]
279 pub shipping_date: Option<String>,
280 #[serde(skip_serializing_if = "Option::is_none")]
284 pub shipping_documentation: Option<String>,
285 #[serde(skip_serializing_if = "Option::is_none")]
288 pub shipping_tracking_number: Option<String>,
289 #[serde(skip_serializing_if = "Option::is_none")]
291 pub uncategorized_file: Option<String>,
292 #[serde(skip_serializing_if = "Option::is_none")]
294 pub uncategorized_text: Option<String>,
295}
296impl UpdateDisputeEvidence {
297 pub fn new() -> Self {
298 Self {
299 access_activity_log: None,
300 billing_address: None,
301 cancellation_policy: None,
302 cancellation_policy_disclosure: None,
303 cancellation_rebuttal: None,
304 customer_communication: None,
305 customer_email_address: None,
306 customer_name: None,
307 customer_purchase_ip: None,
308 customer_signature: None,
309 duplicate_charge_documentation: None,
310 duplicate_charge_explanation: None,
311 duplicate_charge_id: None,
312 enhanced_evidence: None,
313 product_description: None,
314 receipt: None,
315 refund_policy: None,
316 refund_policy_disclosure: None,
317 refund_refusal_explanation: None,
318 service_date: None,
319 service_documentation: None,
320 shipping_address: None,
321 shipping_carrier: None,
322 shipping_date: None,
323 shipping_documentation: None,
324 shipping_tracking_number: None,
325 uncategorized_file: None,
326 uncategorized_text: None,
327 }
328 }
329}
330impl Default for UpdateDisputeEvidence {
331 fn default() -> Self {
332 Self::new()
333 }
334}
335#[derive(Clone, Debug, serde::Serialize)]
337pub struct UpdateDisputeEvidenceEnhancedEvidence {
338 #[serde(skip_serializing_if = "Option::is_none")]
340 pub visa_compelling_evidence_3:
341 Option<UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3>,
342 #[serde(skip_serializing_if = "Option::is_none")]
344 pub visa_compliance: Option<UpdateDisputeEvidenceEnhancedEvidenceVisaCompliance>,
345}
346impl UpdateDisputeEvidenceEnhancedEvidence {
347 pub fn new() -> Self {
348 Self { visa_compelling_evidence_3: None, visa_compliance: None }
349 }
350}
351impl Default for UpdateDisputeEvidenceEnhancedEvidence {
352 fn default() -> Self {
353 Self::new()
354 }
355}
356#[derive(Clone, Debug, serde::Serialize)]
358pub struct UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3 {
359 #[serde(skip_serializing_if = "Option::is_none")]
361 pub disputed_transaction:
362 Option<UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransaction>,
363 #[serde(skip_serializing_if = "Option::is_none")]
365 pub prior_undisputed_transactions: Option<
366 Vec<
367 UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransactions,
368 >,
369 >,
370}
371impl UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3 {
372 pub fn new() -> Self {
373 Self { disputed_transaction: None, prior_undisputed_transactions: None }
374 }
375}
376impl Default for UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3 {
377 fn default() -> Self {
378 Self::new()
379 }
380}
381#[derive(Clone, Debug, serde::Serialize)]
383pub struct UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransaction {
384 #[serde(skip_serializing_if = "Option::is_none")]
386pub customer_account_id: Option<String>,
387 #[serde(skip_serializing_if = "Option::is_none")]
390pub customer_device_fingerprint: Option<String>,
391 #[serde(skip_serializing_if = "Option::is_none")]
394pub customer_device_id: Option<String>,
395 #[serde(skip_serializing_if = "Option::is_none")]
397pub customer_email_address: Option<String>,
398 #[serde(skip_serializing_if = "Option::is_none")]
400pub customer_purchase_ip: Option<String>,
401 #[serde(skip_serializing_if = "Option::is_none")]
403pub merchandise_or_services: Option<UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionMerchandiseOrServices>,
404 #[serde(skip_serializing_if = "Option::is_none")]
406pub product_description: Option<String>,
407 #[serde(skip_serializing_if = "Option::is_none")]
410pub shipping_address: Option<ShippingAddress>,
411
412}
413impl UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransaction {
414 pub fn new() -> Self {
415 Self {
416 customer_account_id: None,
417 customer_device_fingerprint: None,
418 customer_device_id: None,
419 customer_email_address: None,
420 customer_purchase_ip: None,
421 merchandise_or_services: None,
422 product_description: None,
423 shipping_address: None,
424 }
425 }
426}
427impl Default for UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransaction {
428 fn default() -> Self {
429 Self::new()
430 }
431}
432#[derive(Clone, Eq, PartialEq)]
434#[non_exhaustive]
435pub enum UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionMerchandiseOrServices
436{
437 Merchandise,
438 Services,
439 Unknown(String),
441}
442impl UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionMerchandiseOrServices {
443 pub fn as_str(&self) -> &str {
444 use UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionMerchandiseOrServices::*;
445 match self {
446Merchandise => "merchandise",
447Services => "services",
448Unknown(v) => v,
449
450 }
451 }
452}
453
454impl std::str::FromStr for UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionMerchandiseOrServices {
455 type Err = std::convert::Infallible;
456 fn from_str(s: &str) -> Result<Self, Self::Err> {
457 use UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionMerchandiseOrServices::*;
458 match s {
459 "merchandise" => Ok(Merchandise),
460"services" => Ok(Services),
461v => { tracing::warn!("Unknown value '{}' for enum '{}'", v, "UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionMerchandiseOrServices"); Ok(Unknown(v.to_owned())) }
462
463 }
464 }
465}
466impl std::fmt::Display for UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionMerchandiseOrServices {
467 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
468 f.write_str(self.as_str())
469 }
470}
471
472impl std::fmt::Debug for UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionMerchandiseOrServices {
473 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
474 f.write_str(self.as_str())
475 }
476}
477impl serde::Serialize for UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionMerchandiseOrServices {
478 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
479 serializer.serialize_str(self.as_str())
480 }
481}
482#[cfg(feature = "deserialize")]
483impl<'de> serde::Deserialize<'de> for UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3DisputedTransactionMerchandiseOrServices {
484 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
485 use std::str::FromStr;
486 let s: std::borrow::Cow<'de, str> = serde::Deserialize::deserialize(deserializer)?;
487 Ok(Self::from_str(&s).expect("infallible"))
488 }
489}
490#[derive(Clone, Debug, serde::Serialize)]
492pub struct UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransactions {
493 pub charge: String,
495 #[serde(skip_serializing_if = "Option::is_none")]
497 pub customer_account_id: Option<String>,
498 #[serde(skip_serializing_if = "Option::is_none")]
501 pub customer_device_fingerprint: Option<String>,
502 #[serde(skip_serializing_if = "Option::is_none")]
505 pub customer_device_id: Option<String>,
506 #[serde(skip_serializing_if = "Option::is_none")]
508 pub customer_email_address: Option<String>,
509 #[serde(skip_serializing_if = "Option::is_none")]
511 pub customer_purchase_ip: Option<String>,
512 #[serde(skip_serializing_if = "Option::is_none")]
514 pub product_description: Option<String>,
515 #[serde(skip_serializing_if = "Option::is_none")]
518 pub shipping_address: Option<ShippingAddress>,
519}
520impl UpdateDisputeEvidenceEnhancedEvidenceVisaCompellingEvidence3PriorUndisputedTransactions {
521 pub fn new(charge: impl Into<String>) -> Self {
522 Self {
523 charge: charge.into(),
524 customer_account_id: None,
525 customer_device_fingerprint: None,
526 customer_device_id: None,
527 customer_email_address: None,
528 customer_purchase_ip: None,
529 product_description: None,
530 shipping_address: None,
531 }
532 }
533}
534#[derive(Copy, Clone, Debug, serde::Serialize)]
536pub struct UpdateDisputeEvidenceEnhancedEvidenceVisaCompliance {
537 #[serde(skip_serializing_if = "Option::is_none")]
542 pub fee_acknowledged: Option<bool>,
543}
544impl UpdateDisputeEvidenceEnhancedEvidenceVisaCompliance {
545 pub fn new() -> Self {
546 Self { fee_acknowledged: None }
547 }
548}
549impl Default for UpdateDisputeEvidenceEnhancedEvidenceVisaCompliance {
550 fn default() -> Self {
551 Self::new()
552 }
553}
554#[derive(Clone, Debug, serde::Serialize)]
561pub struct UpdateDispute {
562 inner: UpdateDisputeBuilder,
563 dispute: stripe_shared::DisputeId,
564}
565impl UpdateDispute {
566 pub fn new(dispute: impl Into<stripe_shared::DisputeId>) -> Self {
568 Self { dispute: dispute.into(), inner: UpdateDisputeBuilder::new() }
569 }
570 pub fn evidence(mut self, evidence: impl Into<UpdateDisputeEvidence>) -> Self {
574 self.inner.evidence = Some(evidence.into());
575 self
576 }
577 pub fn expand(mut self, expand: impl Into<Vec<String>>) -> Self {
579 self.inner.expand = Some(expand.into());
580 self
581 }
582 pub fn metadata(
587 mut self,
588 metadata: impl Into<std::collections::HashMap<String, String>>,
589 ) -> Self {
590 self.inner.metadata = Some(metadata.into());
591 self
592 }
593 pub fn submit(mut self, submit: impl Into<bool>) -> Self {
597 self.inner.submit = Some(submit.into());
598 self
599 }
600}
601impl UpdateDispute {
602 pub async fn send<C: StripeClient>(
604 &self,
605 client: &C,
606 ) -> Result<<Self as StripeRequest>::Output, C::Err> {
607 self.customize().send(client).await
608 }
609
610 pub fn send_blocking<C: StripeBlockingClient>(
612 &self,
613 client: &C,
614 ) -> Result<<Self as StripeRequest>::Output, C::Err> {
615 self.customize().send_blocking(client)
616 }
617}
618
619impl StripeRequest for UpdateDispute {
620 type Output = stripe_shared::Dispute;
621
622 fn build(&self) -> RequestBuilder {
623 let dispute = &self.dispute;
624 RequestBuilder::new(StripeMethod::Post, format!("/disputes/{dispute}")).form(&self.inner)
625 }
626}
627#[derive(Clone, Debug, serde::Serialize)]
628struct CloseDisputeBuilder {
629 #[serde(skip_serializing_if = "Option::is_none")]
630 expand: Option<Vec<String>>,
631}
632impl CloseDisputeBuilder {
633 fn new() -> Self {
634 Self { expand: None }
635 }
636}
637#[derive(Clone, Debug, serde::Serialize)]
642pub struct CloseDispute {
643 inner: CloseDisputeBuilder,
644 dispute: stripe_shared::DisputeId,
645}
646impl CloseDispute {
647 pub fn new(dispute: impl Into<stripe_shared::DisputeId>) -> Self {
649 Self { dispute: dispute.into(), inner: CloseDisputeBuilder::new() }
650 }
651 pub fn expand(mut self, expand: impl Into<Vec<String>>) -> Self {
653 self.inner.expand = Some(expand.into());
654 self
655 }
656}
657impl CloseDispute {
658 pub async fn send<C: StripeClient>(
660 &self,
661 client: &C,
662 ) -> Result<<Self as StripeRequest>::Output, C::Err> {
663 self.customize().send(client).await
664 }
665
666 pub fn send_blocking<C: StripeBlockingClient>(
668 &self,
669 client: &C,
670 ) -> Result<<Self as StripeRequest>::Output, C::Err> {
671 self.customize().send_blocking(client)
672 }
673}
674
675impl StripeRequest for CloseDispute {
676 type Output = stripe_shared::Dispute;
677
678 fn build(&self) -> RequestBuilder {
679 let dispute = &self.dispute;
680 RequestBuilder::new(StripeMethod::Post, format!("/disputes/{dispute}/close"))
681 .form(&self.inner)
682 }
683}
684
685#[derive(Clone, Debug, serde::Serialize)]
686pub struct ShippingAddress {
687 #[serde(skip_serializing_if = "Option::is_none")]
689 pub city: Option<String>,
690 #[serde(skip_serializing_if = "Option::is_none")]
692 pub country: Option<String>,
693 #[serde(skip_serializing_if = "Option::is_none")]
695 pub line1: Option<String>,
696 #[serde(skip_serializing_if = "Option::is_none")]
698 pub line2: Option<String>,
699 #[serde(skip_serializing_if = "Option::is_none")]
701 pub postal_code: Option<String>,
702 #[serde(skip_serializing_if = "Option::is_none")]
704 pub state: Option<String>,
705}
706impl ShippingAddress {
707 pub fn new() -> Self {
708 Self { city: None, country: None, line1: None, line2: None, postal_code: None, state: None }
709 }
710}
711impl Default for ShippingAddress {
712 fn default() -> Self {
713 Self::new()
714 }
715}