chip_sdk/model/
client_details.rs1use 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}