use serde::Deserialize;
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct CurrencyPrices {
#[serde(alias = "EUR", default)]
pub eur: f64,
#[serde(alias = "RUB", default)]
pub rub: f64,
#[serde(alias = "USD", default)]
pub usd: f64,
}
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ContentCounter {
#[serde(rename = "type")]
pub type_: String,
pub count: u32,
pub size: u64,
}
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Thumbnail {
pub id: String,
pub title: String,
pub url: String,
pub rendition: String,
#[serde(rename = "type")]
pub type_: String,
pub width: u32,
pub height: u32,
pub size: u64,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn deserializes_single_currency() {
let prices: CurrencyPrices = serde_json::from_str(r#"{"RUB": 1000}"#).unwrap();
assert_eq!(prices.rub, 1000.0);
assert_eq!(prices.usd, 0.0);
assert_eq!(prices.eur, 0.0);
}
#[test]
fn deserializes_all_currencies() {
let prices: CurrencyPrices =
serde_json::from_str(r#"{"RUB": 150, "USD": 1.84, "EUR": 1.58}"#).unwrap();
assert_eq!(prices.rub, 150.0);
assert_eq!(prices.usd, 1.84);
assert_eq!(prices.eur, 1.58);
}
}