use serde::Deserialize;
use std::collections::HashMap;
use std::fmt;
use crate::endpoints::deserialize_number;
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct HistoricalLimit {
pub earliest_date: String,
pub latest_date: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct HistoricalLimitsResponse {
pub total_currencies: u32,
pub currencies: HashMap<String, HistoricalLimit>,
}
#[derive(Debug, Clone, PartialEq, Deserialize)]
pub struct VatRate {
#[serde(default)]
pub country_code: Option<String>,
#[serde(default)]
pub country_name: Option<String>,
#[serde(deserialize_with = "deserialize_number")]
pub vat_rate: f64,
}
#[derive(Debug, Clone, PartialEq, Deserialize)]
pub struct VatRateResponse {
#[serde(default)]
pub country: Option<String>,
pub vat_data: VatRate,
}
#[derive(Debug, Clone, PartialEq, Deserialize)]
pub struct VatRatesResponse {
#[serde(default)]
pub date: Option<String>,
pub total_countries: u32,
pub vat_rates: HashMap<String, VatRate>,
}
impl fmt::Display for VatRate {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let code = self.country_code.as_deref().unwrap_or("??");
write!(f, "{}: {}%", code, self.vat_rate)
}
}