ptcg-tools/src/editions.rs

140 lines
3.8 KiB
Rust
Raw Normal View History

2025-04-28 19:02:32 -04:00
//! Editions information
use serde::Deserialize;
2025-04-28 19:02:32 -04:00
use strum::{Display, EnumString};
pub enum EditionBlock {
Bw,
Xy,
Sm,
Ssh,
Sv,
Meg,
2025-04-28 19:02:32 -04:00
}
#[derive(Clone, Copy, Display, Debug, Hash, PartialEq, Eq, EnumString, Deserialize)]
2025-04-28 19:02:32 -04:00
#[strum(ascii_case_insensitive, serialize_all = "lowercase")]
#[serde(rename_all = "UPPERCASE")]
2025-04-28 19:02:32 -04:00
pub enum EditionCode {
/// Sword and Shield
Ssh,
2025-12-27 13:01:53 -03:00
/// SV Promos
#[serde(alias = "PR-SV")]
2025-12-27 13:01:53 -03:00
Svp,
/// Scarlet and Violet
2025-04-28 19:02:32 -04:00
Svi,
/// Paldea Evolved
Pal,
///Obsidian Flames
Obf,
/// 151
Mew,
/// Paradox Rift
Par,
/// Paldean Fates
Paf,
/// Temporal Forces
Tef,
/// Twilight Masquerade
Twm,
/// Shrouded Fable
Sfa,
/// Stellar Crown
Scr,
/// Surging Sparks
Ssp,
/// Prismatic Evolutions
Pre,
2025-12-27 13:01:53 -03:00
/// Journey Together
Jtg,
/// Destined Rivals
Dri,
/// Black Bolt
Blk,
/// White Flare
Wht,
/// Mega Evolution Promos
Mep,
/// Mega Evolution
Meg,
/// Phantasmal Flames
Pfl,
2025-04-28 19:02:32 -04:00
}
impl EditionCode {
pub fn edition_num(self) -> &'static str {
match self {
EditionCode::Ssh => "SWSH1",
2025-12-27 13:01:53 -03:00
EditionCode::Svp => "SVP",
2025-04-28 19:02:32 -04:00
EditionCode::Svi => "SV01",
EditionCode::Pal => "SV02",
EditionCode::Obf => "SV03",
EditionCode::Mew => "SV3_pt5",
EditionCode::Par => "SV04",
EditionCode::Paf => "SV4pt5",
EditionCode::Tef => "SV05",
EditionCode::Twm => "SV06",
EditionCode::Sfa => "SV6pt5",
EditionCode::Scr => "SV07",
EditionCode::Ssp => "SV08",
EditionCode::Pre => "SV8pt5",
2025-12-27 13:01:53 -03:00
EditionCode::Jtg => "SV9",
EditionCode::Dri => "SV10",
EditionCode::Blk => "SV10pt5ZSV",
EditionCode::Wht => "SV10pt5RSV",
EditionCode::Mep => "MEP",
EditionCode::Meg => "MEG1",
EditionCode::Pfl => "MEG2",
2025-04-28 19:02:32 -04:00
}
}
pub fn edition_slug(self) -> &'static str {
match self {
EditionCode::Ssh => "sword-shield",
EditionCode::Svi => "scarlet-violet",
2025-12-27 13:01:53 -03:00
EditionCode::Svp => "scarlet-violet-promos",
2025-04-28 19:02:32 -04:00
EditionCode::Pal => "paldea-evolved",
EditionCode::Obf => "obsidian-flames",
EditionCode::Mew => "151",
EditionCode::Par => "paradox-rift",
EditionCode::Paf => "paldean-fates",
EditionCode::Tef => "temporal-forces",
EditionCode::Twm => "twilight-masquerade",
EditionCode::Sfa => "shrouded-fable",
EditionCode::Scr => "stellar-crown",
EditionCode::Ssp => "surging-sparks",
EditionCode::Pre => "prismatic-evolutions",
2025-12-27 13:01:53 -03:00
EditionCode::Jtg => "journey-together",
EditionCode::Dri => "destined-rivals",
EditionCode::Blk | EditionCode::Wht => "black-white",
EditionCode::Meg => "mega-evolution",
EditionCode::Mep => "mega-evolution-promos",
EditionCode::Pfl => "phantasmal-flames",
2025-04-28 19:02:32 -04:00
}
}
pub fn block(self) -> EditionBlock {
match self {
EditionCode::Ssh => EditionBlock::Ssh,
EditionCode::Svi
2025-12-27 13:01:53 -03:00
| EditionCode::Svp
2025-04-28 19:02:32 -04:00
| EditionCode::Pal
| EditionCode::Obf
| EditionCode::Mew
| EditionCode::Par
| EditionCode::Paf
| EditionCode::Tef
| EditionCode::Twm
| EditionCode::Sfa
| EditionCode::Scr
| EditionCode::Ssp
2025-12-27 13:01:53 -03:00
| EditionCode::Pre
| EditionCode::Jtg
| EditionCode::Dri
| EditionCode::Blk
| EditionCode::Wht => EditionBlock::Sv,
EditionCode::Meg | EditionCode::Mep | EditionCode::Pfl => EditionBlock::Meg,
2025-04-28 19:02:32 -04:00
}
}
}