libstripe/resources/core/
tokens.rs1use 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}