ptcg-tools/src/malie/models.rs

55 lines
1.1 KiB
Rust

//! Models for malie.io exports
use std::borrow::Cow;
use std::collections::HashMap;
use std::str::FromStr;
use serde::{Deserialize, de};
use crate::editions::EditionCode;
pub type Index = HashMap<Lang, HashMap<String, Edition>>;
#[derive(Debug, Deserialize, Eq, PartialEq, Hash)]
pub enum Lang {
#[serde(rename = "de-DE")]
De,
#[serde(rename = "en-US")]
En,
#[serde(rename = "es-ES")]
Es,
#[serde(rename = "es-419")]
EsLa,
#[serde(rename = "it-IT")]
It,
#[serde(rename = "fr-FR")]
Fr,
#[serde(rename = "pt-BR")]
Pt,
}
#[derive(Debug, Deserialize)]
pub struct Edition {
path: String,
#[serde(deserialize_with = "deserialize_edition_code")]
abbr: Option<EditionCode>,
}
fn deserialize_edition_code<'de, D>(deserializer: D) -> Result<Option<EditionCode>, D::Error>
where
D: de::Deserializer<'de>,
{
let buf = Cow::<'de, str>::deserialize(deserializer)?;
if buf.is_empty() {
return Ok(None);
}
let buf = if buf.to_uppercase() == "PR-SV" {
"SVP".into()
} else {
buf
};
Ok(EditionCode::from_str(&buf).ok())
}