use serde::Deserialize;
use std::collections::HashMap;
pub(crate) type FiscalRow = HashMap<String, String>;
#[derive(Debug, Clone, Deserialize, Default)]
pub(crate) struct FiscalMeta {
#[serde(default)]
pub labels: HashMap<String, String>,
#[serde(default, rename = "dataTypes")]
pub data_types: HashMap<String, String>,
#[serde(default, rename = "total-pages")]
pub total_pages: Option<u32>,
}
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct FiscalResponse {
#[serde(default)]
pub data: Vec<FiscalRow>,
#[serde(default)]
pub meta: FiscalMeta,
}
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct FiscalError {
#[serde(default)]
pub error: Option<String>,
#[serde(default)]
pub message: Option<String>,
}
impl FiscalError {
pub(crate) fn describe(&self) -> Option<String> {
match (&self.error, &self.message) {
(Some(e), Some(m)) => Some(format!("{e}: {m}")),
(Some(e), None) => Some(e.clone()),
(None, Some(m)) => Some(m.clone()),
(None, None) => None,
}
}
}