//! 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>; #[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, } fn deserialize_edition_code<'de, D>(deserializer: D) -> Result, 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()) }