libstripe/resources/core/
tokens.rs

1use crate::resources::common::object::Object;
2
3use crate::resources::common::path::UrlPath;
4use crate::resources::connect::account::{BusinessType, CompanyParam};
5use crate::resources::connect::persons::PersonsParam;
6use crate::resources::paymentmethods::bank::{BankAccount, BankAccountParam};
7use crate::resources::paymentmethods::cards::{Card, CardParam};
8use crate::{Client};
9
10#[derive(Serialize, Deserialize, Debug, PartialEq)]
11pub struct Tokens {
12    pub id: String,
13    pub object: Object,
14    pub card: Option<Card>,
15    pub bank_account: Option<BankAccount>,
16    pub client_ip: Option<String>,
17    pub created: i64,
18    pub livemode: bool,
19    #[serde(rename = "type")]
20    pub token_type: TokenType,
21    pub used: bool,
22}
23
24#[derive(Serialize, Deserialize, Debug, PartialEq)]
25#[serde(rename_all = "snake_case")]
26pub enum TokenType {
27    Card,
28    BankAccount,
29}
30
31#[derive(Default, Serialize, Debug, PartialEq)]
32pub struct TokenParam<'a> {
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub card: Option<CardParam<'a>>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub bank_account: Option<BankAccountParam<'a>>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub pii: Option<PIIParam<'a>>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub customer: Option<&'a str>,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub account: Option<AccountTokenParam<'a>>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub expand: Option<Vec<&'a str>>,
45}
46
47#[derive(Default, Serialize, Debug, PartialEq)]
48pub struct AccountTokenParam<'a> {
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub business_type: Option<BusinessType>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub company: Option<CompanyParam<'a>>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub individual: Option<PersonsParam<'a>>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub tos_shown_and_accepted: Option<bool>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub expand: Option<Vec<&'a str>>,
59}
60
61#[derive(Default, Serialize, Debug, PartialEq)]
62pub struct PIIParam<'a> {
63    pub id_number: &'a str,
64}
65
66impl Tokens {
67    pub fn create<B: serde::Serialize>(client: &Client, param: B) -> crate::Result<Self> {
68        client.post(UrlPath::Tokens, vec![], param)
69    }
70
71    pub fn retrieve(client: &Client, token: &str) -> crate::Result<Self> {
72        client.get(UrlPath::Tokens, vec![token], serde_json::Map::new())
73    }
74}