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

use crate::resources::common::path::UrlPath;
use crate::resources::paymentmethods::bank::BankAccount;
use crate::resources::paymentmethods::cards::Card;
use crate::util::{Deleted, List};
use crate::{Client};

#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(untagged)]
pub enum ExternalAccounts {
    Card(Card),
    BankAccount(BankAccount),
}

impl ExternalAccounts {
    pub fn create<B: serde::Serialize>(
        client: &Client,
        acct: &str,
        param: B,
    ) -> crate::Result<Self> {
        client.post(UrlPath::Accounts, vec![acct, "external_accounts"], param)
    }

    pub fn retrieve(client: &Client, acct: &str, id: &str) -> crate::Result<Self> {
        client.get(
            UrlPath::Accounts,
            vec![acct, "external_accounts", id],
            serde_json::Map::new(),
        )
    }

    pub fn update<B: serde::Serialize>(
        client: &Client,
        acct: &str,
        id: &str,
        param: B,
    ) -> crate::Result<Self> {
        client.post(
            UrlPath::Accounts,
            vec![acct, "external_accounts", id],
            param,
        )
    }

    pub fn delete(client: &Client, acct: &str, id: &str) -> crate::Result<Deleted> {
        client.delete(
            UrlPath::Accounts,
            vec![acct, "external_accounts", id],
            serde_json::Map::new(),
        )
    }

    pub fn list<B: serde::Serialize>(
        client: &Client,
        acct: &str,
        id: &str,
        param: B,
    ) -> crate::Result<List<Self>> {
        client.get(
            UrlPath::Accounts,
            vec![acct, "external_accounts", id],
            param,
        )
    }
}