use rust_decimal::Decimal;
use serde::Deserialize;
use crate::enums::{CountryCode, CurrencyCode};
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Money {
pub value: String,
pub currency: Currency,
}
impl Money {
pub fn decimal(&self) -> Result<Decimal, rust_decimal::Error> {
self.value.parse()
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Currency {
pub code: CurrencyCode,
pub symbol: String,
pub name: String,
pub plural: Option<String>,
pub exponent: Option<i32>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Country {
pub code: CountryCode,
pub name: String,
pub name_with_article: Option<String>,
pub currency: Option<Currency>,
pub provinces: Option<Vec<Province>>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Province {
pub code: String,
pub name: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Address {
pub address_line1: Option<String>,
pub address_line2: Option<String>,
pub city: Option<String>,
pub province: Option<Province>,
pub country: Option<Country>,
pub postal_code: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ShippingDetails {
pub name: Option<String>,
pub address: Option<Address>,
pub phone: Option<String>,
pub instructions: Option<String>,
}