parse index

This commit is contained in:
Felipe 2025-12-27 13:01:53 -03:00
parent 7bd717e4db
commit 674eba3fd0
Signed by: pitbuster
SSH key fingerprint: SHA256:HDYu2Pm4/TmSX8GBwV49UvFWr1Ljg8XlHxKeCpjJpOk
2 changed files with 49 additions and 3 deletions

View file

@ -18,7 +18,9 @@ pub enum EditionBlock {
pub enum EditionCode { pub enum EditionCode {
/// Sword and Shield /// Sword and Shield
Ssh, Ssh,
/// Scarlet and Violer /// SV Promos
Svp,
/// Scarlet and Violet
Svi, Svi,
/// Paldea Evolved /// Paldea Evolved
Pal, Pal,
@ -42,6 +44,14 @@ pub enum EditionCode {
Ssp, Ssp,
/// Prismatic Evolutions /// Prismatic Evolutions
Pre, Pre,
/// Journey Together
Jtg,
/// Destined Rivals
Dri,
/// Black Bolt
Blk,
/// White Flare
Wht,
/// Mega Evolution /// Mega Evolution
Meg, Meg,
/// Phantasmal Flames /// Phantasmal Flames
@ -52,6 +62,7 @@ impl EditionCode {
pub fn edition_num(self) -> &'static str { pub fn edition_num(self) -> &'static str {
match self { match self {
EditionCode::Ssh => "SWSH1", EditionCode::Ssh => "SWSH1",
EditionCode::Svp => "SVP",
EditionCode::Svi => "SV01", EditionCode::Svi => "SV01",
EditionCode::Pal => "SV02", EditionCode::Pal => "SV02",
EditionCode::Obf => "SV03", EditionCode::Obf => "SV03",
@ -64,6 +75,10 @@ impl EditionCode {
EditionCode::Scr => "SV07", EditionCode::Scr => "SV07",
EditionCode::Ssp => "SV08", EditionCode::Ssp => "SV08",
EditionCode::Pre => "SV8pt5", EditionCode::Pre => "SV8pt5",
EditionCode::Jtg => "SV9",
EditionCode::Dri => "SV10",
EditionCode::Blk => "SV10pt5ZSV",
EditionCode::Wht => "SV10pt5RSV",
EditionCode::Meg => "MEG1", EditionCode::Meg => "MEG1",
EditionCode::Pfl => "MEG2", EditionCode::Pfl => "MEG2",
} }
@ -73,6 +88,7 @@ impl EditionCode {
match self { match self {
EditionCode::Ssh => "sword-shield", EditionCode::Ssh => "sword-shield",
EditionCode::Svi => "scarlet-violet", EditionCode::Svi => "scarlet-violet",
EditionCode::Svp => "scarlet-violet-promos",
EditionCode::Pal => "paldea-evolved", EditionCode::Pal => "paldea-evolved",
EditionCode::Obf => "obsidian-flames", EditionCode::Obf => "obsidian-flames",
EditionCode::Mew => "151", EditionCode::Mew => "151",
@ -84,6 +100,9 @@ impl EditionCode {
EditionCode::Scr => "stellar-crown", EditionCode::Scr => "stellar-crown",
EditionCode::Ssp => "surging-sparks", EditionCode::Ssp => "surging-sparks",
EditionCode::Pre => "prismatic-evolutions", EditionCode::Pre => "prismatic-evolutions",
EditionCode::Jtg => "journey-together",
EditionCode::Dri => "destined-rivals",
EditionCode::Blk | EditionCode::Wht => "black-white",
EditionCode::Meg => "mega-evolution", EditionCode::Meg => "mega-evolution",
EditionCode::Pfl => "phantasmal-flames", EditionCode::Pfl => "phantasmal-flames",
} }
@ -93,6 +112,7 @@ impl EditionCode {
match self { match self {
EditionCode::Ssh => EditionBlock::Ssh, EditionCode::Ssh => EditionBlock::Ssh,
EditionCode::Svi EditionCode::Svi
| EditionCode::Svp
| EditionCode::Pal | EditionCode::Pal
| EditionCode::Obf | EditionCode::Obf
| EditionCode::Mew | EditionCode::Mew
@ -103,7 +123,11 @@ impl EditionCode {
| EditionCode::Sfa | EditionCode::Sfa
| EditionCode::Scr | EditionCode::Scr
| EditionCode::Ssp | EditionCode::Ssp
| EditionCode::Pre => EditionBlock::Sv, | EditionCode::Pre
| EditionCode::Jtg
| EditionCode::Dri
| EditionCode::Blk
| EditionCode::Wht => EditionBlock::Sv,
EditionCode::Meg | EditionCode::Pfl => EditionBlock::Meg, EditionCode::Meg | EditionCode::Pfl => EditionBlock::Meg,
} }
} }

View file

@ -1,8 +1,10 @@
//! Models for malie.io exports //! Models for malie.io exports
use std::borrow::Cow;
use std::collections::HashMap; use std::collections::HashMap;
use std::str::FromStr;
use serde::Deserialize; use serde::{Deserialize, de};
use crate::editions::EditionCode; use crate::editions::EditionCode;
@ -29,5 +31,25 @@ pub enum Lang {
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
pub struct Edition { pub struct Edition {
path: String, path: String,
#[serde(deserialize_with = "deserialize_edition_code")]
abbr: Option<EditionCode>, 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())
}