Skip to main content

chip_sdk/model/
payment_methods.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5pub struct PaymentMethods {
6    #[serde(skip_serializing_if = "Option::is_none")]
7    pub available_payment_methods: Option<Vec<String>>,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub by_country: Option<HashMap<String, Vec<String>>>,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub country_names: Option<HashMap<String, String>>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub names: Option<HashMap<String, String>>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub card_methods: Option<Vec<String>>,
16}
17
18#[cfg(test)]
19mod tests {
20    use super::*;
21
22    #[test]
23    fn deserialize_payment_methods() {
24        let json = r#"{"available_payment_methods":["visa","mastercard","fpx"],"by_country":{"MY":["visa","fpx"],"any":["mastercard"]},"country_names":{"MY":"Malaysia","any":"Other"},"names":{"visa":"Visa","mastercard":"Mastercard","fpx":"FPX"},"card_methods":["visa","mastercard"]}"#;
25        let pm: PaymentMethods = serde_json::from_str(json).unwrap();
26        assert_eq!(pm.available_payment_methods.as_ref().unwrap().len(), 3);
27        assert_eq!(pm.by_country.as_ref().unwrap().get("MY").unwrap().len(), 2);
28        assert_eq!(pm.names.as_ref().unwrap().get("visa").unwrap(), "Visa");
29    }
30}