Skip to main content

chip_sdk/model/
client_details.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Default, Serialize, Deserialize)]
4pub struct ClientDetails {
5    pub email: String,
6    #[serde(skip_serializing_if = "Option::is_none")]
7    pub phone: Option<String>,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub full_name: Option<String>,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub personal_code: Option<String>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub street_address: Option<String>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub country: Option<String>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub city: Option<String>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub zip_code: Option<String>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub shipping_street_address: Option<String>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub shipping_country: Option<String>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub shipping_city: Option<String>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub shipping_zip_code: Option<String>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub cc: Option<Vec<String>>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub bcc: Option<Vec<String>>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub legal_name: Option<String>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub brand_name: Option<String>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub registration_number: Option<String>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub tax_number: Option<String>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub bank_account: Option<String>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub bank_code: Option<String>,
44}
45
46#[cfg(test)]
47mod tests {
48    use super::*;
49
50    #[test]
51    fn serialize_client_minimal() {
52        let c = ClientDetails {
53            email: "test@example.com".into(),
54            ..Default::default()
55        };
56        let json = serde_json::to_value(&c).unwrap();
57        assert_eq!(json["email"], "test@example.com");
58        assert!(json.get("phone").is_none());
59    }
60
61    #[test]
62    fn deserialize_client_full() {
63        let json = r#"{"email":"buyer@test.com","phone":"+60 123456789","full_name":"John Doe","country":"MY","bank_account":"1234567890","bank_code":"MBBEMYKL"}"#;
64        let c: ClientDetails = serde_json::from_str(json).unwrap();
65        assert_eq!(c.email, "buyer@test.com");
66        assert_eq!(c.phone.as_deref(), Some("+60 123456789"));
67        assert_eq!(c.bank_account.as_deref(), Some("1234567890"));
68    }
69}