sumup_rs/models/
customer.rs

1use super::common::Card;
2use chrono::{DateTime, Utc};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct Customer {
7    pub customer_id: String,
8    #[serde(default)]
9    pub personal_details: Option<PersonalDetails>,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize, Default)]
13pub struct PersonalDetails {
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub first_name: Option<String>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub last_name: Option<String>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub email: Option<String>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub phone: Option<String>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub birth_date: Option<String>, // YYYY-MM-DD
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub tax_id: Option<String>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub address: Option<Address>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, Default)]
31pub struct Address {
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub city: Option<String>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub country: Option<String>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub line_1: Option<String>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub line_2: Option<String>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub postal_code: Option<String>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub state: Option<String>,
44}
45
46// NOTE: The API requires a customer_id in the body when creating a customer.
47#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct CreateCustomerRequest {
49    pub customer_id: String,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub personal_details: Option<PersonalDetails>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct UpdateCustomerRequest {
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub personal_details: Option<PersonalDetails>,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct PaymentInstrument {
62    pub token: String,
63    pub active: bool,
64    #[serde(rename = "type")]
65    pub instrument_type: String,
66    #[serde(default)]
67    pub card: Option<Card>,
68    pub created_at: DateTime<Utc>,
69}