1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use crate::config::{Client, Response};
use crate::ids::{BankAccountId, CardId, CustomerId, PaymentSourceId};
use crate::params::Deleted;
use crate::resources::{BankAccount, Customer, PaymentSource, PaymentSourceParams, Source};
use serde_derive::{Deserialize, Serialize};
impl Customer {
pub fn attach_source(
client: &Client,
customer_id: &CustomerId,
source: PaymentSourceParams,
) -> Response<PaymentSource> {
#[derive(Serialize)]
struct AttachSource {
source: PaymentSourceParams,
}
let params = AttachSource { source };
client.post_form(&format!("/customers/{}/sources", customer_id), params)
}
pub fn detach_source(
client: &Client,
customer_id: &CustomerId,
source_id: &PaymentSourceId,
) -> Response<DetachedSource> {
client.delete(&format!("/customers/{}/sources/{}", customer_id, source_id))
}
pub fn retrieve_source(
client: &Client,
customer_id: &CustomerId,
source_id: &PaymentSourceId,
) -> Response<PaymentSource> {
client.get(&format!("/customers/{}/sources/{}", customer_id, source_id))
}
pub fn verify_bank_account(
client: &Client,
customer_id: &CustomerId,
bank_account_id: &BankAccountId,
params: VerifyBankAccount<'_>,
) -> Response<BankAccount> {
client.post_form(
&format!("/customers/{}/sources/{}/verify", customer_id, bank_account_id),
params,
)
}
}
#[derive(Clone, Debug, Default, Serialize)]
pub struct VerifyBankAccount<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub amounts: Option<Vec<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verification_method: Option<&'a str>,
}
impl VerifyBankAccount<'_> {
pub fn new() -> Self {
VerifyBankAccount { amounts: None, verification_method: None }
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(tag = "object", rename_all = "snake_case")]
pub enum DetachedSource {
BankAccount(Deleted<BankAccountId>),
Card(Deleted<CardId>),
Source(Source),
}