use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct Money {
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency_code: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct MoneySet {
#[serde(skip_serializing_if = "Option::is_none")]
pub shop_money: Option<Money>,
#[serde(skip_serializing_if = "Option::is_none")]
pub presentment_money: Option<Money>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_money_set_serialization() {
let money_set = MoneySet {
shop_money: Some(Money {
amount: Some("99.99".to_string()),
currency_code: Some("USD".to_string()),
}),
presentment_money: Some(Money {
amount: Some("129.99".to_string()),
currency_code: Some("CAD".to_string()),
}),
};
let json = serde_json::to_string(&money_set).unwrap();
let parsed: serde_json::Value = serde_json::from_str(&json).unwrap();
assert_eq!(parsed["shop_money"]["amount"], "99.99");
assert_eq!(parsed["shop_money"]["currency_code"], "USD");
assert_eq!(parsed["presentment_money"]["amount"], "129.99");
assert_eq!(parsed["presentment_money"]["currency_code"], "CAD");
}
#[test]
fn test_money_set_deserialization() {
let json = r#"{
"shop_money": {
"amount": "50.00",
"currency_code": "EUR"
},
"presentment_money": {
"amount": "55.00",
"currency_code": "GBP"
}
}"#;
let money_set: MoneySet = serde_json::from_str(json).unwrap();
assert_eq!(
money_set.shop_money.as_ref().unwrap().amount,
Some("50.00".to_string())
);
assert_eq!(
money_set.shop_money.as_ref().unwrap().currency_code,
Some("EUR".to_string())
);
}
}