use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct NamedRef {
pub value: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct WorldBankObservation {
pub indicator: Option<NamedRef>,
pub country: Option<NamedRef>,
pub date: String,
pub value: Option<f64>,
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct WorldBankPage {
#[serde(default)]
pub message: Option<Vec<WorldBankMessage>>,
}
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct WorldBankMessage {
#[serde(default)]
pub key: Option<String>,
#[serde(default)]
pub value: Option<String>,
}
impl WorldBankMessage {
pub(crate) fn describe(&self) -> String {
match (&self.key, &self.value) {
(Some(k), Some(v)) => format!("{k}: {v}"),
(Some(k), None) => k.clone(),
(None, Some(v)) => v.clone(),
(None, None) => "unspecified error".to_string(),
}
}
}
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct WorldBankResponse(
pub WorldBankPage,
#[serde(default)] pub Option<Vec<WorldBankObservation>>,
);