use crate::abilities::Abilities;
use crate::choices::{Choices, MOVES};
use crate::items::Items;
use crate::state::{
DamageDealt, LastUsedMove, Move, MoveChoice, Pokemon, PokemonIndex, PokemonMoveIndex,
PokemonMoves, PokemonStatus, PokemonType, PokemonVolatileStatus, Side, SideConditions,
SidePokemon, State, StateTerrain, StateWeather, Terrain, Weather,
};
use std::collections::HashSet;
use std::fmt;
use std::str::FromStr;
impl Move {
pub fn serialize(&self) -> String {
return format!("{:?};{};{}", self.id, self.disabled, self.pp);
}
pub fn deserialize(serialized: &str) -> Move {
let split: Vec<&str> = serialized.split(";").collect();
return Move {
id: Choices::from_str(split[0]).unwrap(),
disabled: split[1].parse::<bool>().unwrap(),
pp: split[2].parse::<i8>().unwrap(),
choice: MOVES
.get(&Choices::from_str(split[0]).unwrap())
.unwrap()
.to_owned(),
};
}
}
impl MoveChoice {
pub fn deserialize(serialized: &str) -> MoveChoice {
let mut chars = serialized.chars();
let char1 = chars.next().unwrap();
match char1 {
'm' => {
let char2 = chars.next().unwrap();
return MoveChoice::Move(PokemonMoveIndex::deserialize(&char2.to_string()));
}
's' => {
let char2 = chars.next().unwrap();
return MoveChoice::Switch(PokemonIndex::deserialize(&char2.to_string()));
}
'n' => {
return MoveChoice::None;
}
_ => panic!("Invalid move choice: {}", serialized),
}
}
}
impl PokemonMoveIndex {
pub fn deserialize(serialized: &str) -> PokemonMoveIndex {
return match serialized {
"0" => PokemonMoveIndex::M0,
"1" => PokemonMoveIndex::M1,
"2" => PokemonMoveIndex::M2,
"3" => PokemonMoveIndex::M3,
_ => panic!("Invalid move index: {}", serialized),
};
}
}
impl PokemonType {
pub fn serialize(&self) -> String {
return format!("{:?}", self);
}
pub fn deserialize(input: &str) -> PokemonType {
match input.to_lowercase().as_str() {
"normal" => PokemonType::Normal,
"fire" => PokemonType::Fire,
"water" => PokemonType::Water,
"electric" => PokemonType::Electric,
"grass" => PokemonType::Grass,
"ice" => PokemonType::Ice,
"fighting" => PokemonType::Fighting,
"poison" => PokemonType::Poison,
"ground" => PokemonType::Ground,
"flying" => PokemonType::Flying,
"psychic" => PokemonType::Psychic,
"bug" => PokemonType::Bug,
"rock" => PokemonType::Rock,
"ghost" => PokemonType::Ghost,
"dragon" => PokemonType::Dragon,
"dark" => PokemonType::Dark,
"steel" => PokemonType::Steel,
"fairy" => PokemonType::Fairy,
"typeless" => PokemonType::Typeless,
_ => panic!("Invalid type: {}", input),
}
}
}
impl PokemonStatus {
pub fn serialize(&self) -> String {
return format!("{:?}", self);
}
pub fn deserialize(input: &str) -> PokemonStatus {
match input.to_lowercase().as_str() {
"none" => PokemonStatus::None,
"burn" => PokemonStatus::Burn,
"sleep" => PokemonStatus::Sleep,
"freeze" => PokemonStatus::Freeze,
"paralyze" => PokemonStatus::Paralyze,
"poison" => PokemonStatus::Poison,
"toxic" => PokemonStatus::Toxic,
_ => panic!("Invalid status: {}", input),
}
}
}
impl PokemonVolatileStatus {
pub fn serialize(&self) -> String {
return format!("{:?}", self);
}
pub fn deserialize(input: &str) -> PokemonVolatileStatus {
match input.to_lowercase().as_str() {
"aquaring" => PokemonVolatileStatus::AquaRing,
"attract" => PokemonVolatileStatus::Attract,
"autotomize" => PokemonVolatileStatus::Autotomize,
"banefulbunker" => PokemonVolatileStatus::BanefulBunker,
"bide" => PokemonVolatileStatus::Bide,
"bounce" => PokemonVolatileStatus::Bounce,
"charge" => PokemonVolatileStatus::Charge,
"confusion" => PokemonVolatileStatus::Confusion,
"curse" => PokemonVolatileStatus::Curse,
"defensecurl" => PokemonVolatileStatus::DefenseCurl,
"destinybond" => PokemonVolatileStatus::DestinyBond,
"dig" => PokemonVolatileStatus::Dig,
"disable" => PokemonVolatileStatus::Disable,
"dive" => PokemonVolatileStatus::Dive,
"electrify" => PokemonVolatileStatus::Electrify,
"embargo" => PokemonVolatileStatus::Embargo,
"encore" => PokemonVolatileStatus::Encore,
"endure" => PokemonVolatileStatus::Endure,
"flashfire" => PokemonVolatileStatus::FlashFire,
"flinch" => PokemonVolatileStatus::Flinch,
"fly" => PokemonVolatileStatus::Fly,
"focusenergy" => PokemonVolatileStatus::Focusenergy,
"followme" => PokemonVolatileStatus::FollowMe,
"foresight" => PokemonVolatileStatus::Foresight,
"freezeshock" => PokemonVolatileStatus::Freezeshock,
"gastroacid" => PokemonVolatileStatus::GastroAcid,
"geomancy" => PokemonVolatileStatus::Geomancy,
"glaiverush" => PokemonVolatileStatus::GlaiveRush,
"grudge" => PokemonVolatileStatus::Grudge,
"healblock" => PokemonVolatileStatus::HealBlock,
"helpinghand" => PokemonVolatileStatus::HelpingHand,
"iceburn" => PokemonVolatileStatus::IceBurn,
"imprison" => PokemonVolatileStatus::Imprison,
"ingrain" => PokemonVolatileStatus::Ingrain,
"kingsshield" => PokemonVolatileStatus::KingsShield,
"laserfocus" => PokemonVolatileStatus::LaserFocus,
"leechseed" => PokemonVolatileStatus::LeechSeed,
"lockedmove" => PokemonVolatileStatus::LockedMove,
"magiccoat" => PokemonVolatileStatus::MagicCoat,
"magnetrise" => PokemonVolatileStatus::MagnetRise,
"maxguard" => PokemonVolatileStatus::MaxGuard,
"meteorbeam" => PokemonVolatileStatus::MeteorBeam,
"minimize" => PokemonVolatileStatus::Minimize,
"miracleeye" => PokemonVolatileStatus::MiracleEye,
"mustrecharge" => PokemonVolatileStatus::MustRecharge,
"nightmare" => PokemonVolatileStatus::Nightmare,
"noretreat" => PokemonVolatileStatus::NoRetreat,
"octolock" => PokemonVolatileStatus::Octolock,
"partiallytrapped" => PokemonVolatileStatus::PartiallyTrapped,
"perish4" => PokemonVolatileStatus::Perish4,
"perish3" => PokemonVolatileStatus::Perish3,
"perish2" => PokemonVolatileStatus::Perish2,
"perish1" => PokemonVolatileStatus::Perish1,
"phantomforce" => PokemonVolatileStatus::PhantomForce,
"powder" => PokemonVolatileStatus::Powder,
"powershift" => PokemonVolatileStatus::PowerShift,
"powertrick" => PokemonVolatileStatus::PowerTrick,
"protect" => PokemonVolatileStatus::Protect,
"rage" => PokemonVolatileStatus::Rage,
"ragepowder" => PokemonVolatileStatus::RagePowder,
"razorwind" => PokemonVolatileStatus::RazorWind,
"roost" => PokemonVolatileStatus::Roost,
"saltcure" => PokemonVolatileStatus::SaltCure,
"shadowforce" => PokemonVolatileStatus::ShadowForce,
"skullbash" => PokemonVolatileStatus::SkullBash,
"skyattack" => PokemonVolatileStatus::SkyAttack,
"skydrop" => PokemonVolatileStatus::SkyDrop,
"silktrap" => PokemonVolatileStatus::SilkTrap,
"slowstart" => PokemonVolatileStatus::SlowStart,
"smackdown" => PokemonVolatileStatus::SmackDown,
"snatch" => PokemonVolatileStatus::Snatch,
"solarbeam" => PokemonVolatileStatus::SolarBeam,
"solarblade" => PokemonVolatileStatus::SolarBlade,
"sparklingaria" => PokemonVolatileStatus::SparklingAria,
"spikyshield" => PokemonVolatileStatus::SpikyShield,
"spotlight" => PokemonVolatileStatus::Spotlight,
"stockpile" => PokemonVolatileStatus::StockPile,
"substitute" => PokemonVolatileStatus::Substitute,
"syrupbomb" => PokemonVolatileStatus::SyrupBomb,
"tarshot" => PokemonVolatileStatus::TarShot,
"taunt" => PokemonVolatileStatus::Taunt,
"telekinesis" => PokemonVolatileStatus::Telekinesis,
"throatchop" => PokemonVolatileStatus::ThroatChop,
"torment" => PokemonVolatileStatus::Torment,
"unburden" => PokemonVolatileStatus::Unburden,
"uproar" => PokemonVolatileStatus::Uproar,
"yawn" => PokemonVolatileStatus::Yawn,
_ => PokemonVolatileStatus::None,
}
}
}
impl Pokemon {
pub fn serialize(&self) -> String {
return format!(
"{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}",
self.id,
self.level,
self.types.0.serialize(),
self.types.1.serialize(),
self.hp,
self.maxhp,
self.ability.to_string(),
self.item.to_string(),
self.attack,
self.defense,
self.special_attack,
self.special_defense,
self.speed,
self.status.serialize(),
self.rest_turns,
self.weight_kg,
self.moves.m0.serialize(),
self.moves.m1.serialize(),
self.moves.m2.serialize(),
self.moves.m3.serialize(),
self.moves.m4.serialize(),
self.moves.m5.serialize(),
);
}
pub fn deserialize(serialized: &str) -> Pokemon {
let split: Vec<&str> = serialized.split(",").collect();
return Pokemon {
id: split[0].to_string(),
level: split[1].parse::<i8>().unwrap(),
types: (
PokemonType::deserialize(split[2]),
PokemonType::deserialize(split[3]),
),
hp: split[4].parse::<i16>().unwrap(),
maxhp: split[5].parse::<i16>().unwrap(),
ability: Abilities::from_str(split[6]).unwrap(),
item: Items::from_str(split[7]).unwrap(),
attack: split[8].parse::<i16>().unwrap(),
defense: split[9].parse::<i16>().unwrap(),
special_attack: split[10].parse::<i16>().unwrap(),
special_defense: split[11].parse::<i16>().unwrap(),
speed: split[12].parse::<i16>().unwrap(),
status: PokemonStatus::deserialize(split[13]),
rest_turns: split[14].parse::<i8>().unwrap(),
weight_kg: split[15].parse::<f32>().unwrap(),
moves: PokemonMoves {
m0: Move::deserialize(split[16]),
m1: Move::deserialize(split[17]),
m2: Move::deserialize(split[18]),
m3: Move::deserialize(split[19]),
m4: Move::deserialize(split[20]),
m5: Move::deserialize(split[21]),
},
};
}
}
impl LastUsedMove {
fn serialize(&self) -> String {
return match self {
LastUsedMove::Move(move_name) => format!("move:{}", move_name),
LastUsedMove::Switch(pkmn_index) => format!("switch:{}", pkmn_index.serialize()),
};
}
fn deserialize(serialized: &str) -> LastUsedMove {
let split: Vec<&str> = serialized.split(":").collect();
match split[0] {
"move" => return LastUsedMove::Move(Choices::from_str(split[1]).unwrap()),
"switch" => return LastUsedMove::Switch(PokemonIndex::deserialize(split[1])),
_ => panic!("Invalid LastUsedMove: {}", serialized),
}
}
}
impl PokemonIndex {
pub fn serialize(&self) -> String {
match self {
PokemonIndex::P0 => "0".to_string(),
PokemonIndex::P1 => "1".to_string(),
PokemonIndex::P2 => "2".to_string(),
PokemonIndex::P3 => "3".to_string(),
PokemonIndex::P4 => "4".to_string(),
PokemonIndex::P5 => "5".to_string(),
}
}
pub fn deserialize(serialized: &str) -> PokemonIndex {
match serialized {
"0" => PokemonIndex::P0,
"1" => PokemonIndex::P1,
"2" => PokemonIndex::P2,
"3" => PokemonIndex::P3,
"4" => PokemonIndex::P4,
"5" => PokemonIndex::P5,
_ => panic!("Invalid PokemonIndex: {}", serialized),
}
}
}
impl SideConditions {
pub fn serialize(&self) -> String {
return format!(
"{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{}",
self.aurora_veil,
self.crafty_shield,
self.healing_wish,
self.light_screen,
self.lucky_chant,
self.lunar_dance,
self.mat_block,
self.mist,
self.protect,
self.quick_guard,
self.reflect,
self.safeguard,
self.spikes,
self.stealth_rock,
self.sticky_web,
self.tailwind,
self.toxic_count,
self.toxic_spikes,
self.wide_guard,
);
}
pub fn deserialize(serialized: &str) -> SideConditions {
let split: Vec<&str> = serialized.split(";").collect();
return SideConditions {
aurora_veil: split[0].parse::<i8>().unwrap(),
crafty_shield: split[1].parse::<i8>().unwrap(),
healing_wish: split[2].parse::<i8>().unwrap(),
light_screen: split[3].parse::<i8>().unwrap(),
lucky_chant: split[4].parse::<i8>().unwrap(),
lunar_dance: split[5].parse::<i8>().unwrap(),
mat_block: split[6].parse::<i8>().unwrap(),
mist: split[7].parse::<i8>().unwrap(),
protect: split[8].parse::<i8>().unwrap(),
quick_guard: split[9].parse::<i8>().unwrap(),
reflect: split[10].parse::<i8>().unwrap(),
safeguard: split[11].parse::<i8>().unwrap(),
spikes: split[12].parse::<i8>().unwrap(),
stealth_rock: split[13].parse::<i8>().unwrap(),
sticky_web: split[14].parse::<i8>().unwrap(),
tailwind: split[15].parse::<i8>().unwrap(),
toxic_count: split[16].parse::<i8>().unwrap(),
toxic_spikes: split[17].parse::<i8>().unwrap(),
wide_guard: split[18].parse::<i8>().unwrap(),
};
}
}
impl Side {
pub fn serialize(&self) -> String {
let mut vs_string = String::new();
for vs in &self.volatile_statuses {
vs_string.push_str(&vs.serialize());
vs_string.push_str(":");
}
return format!(
"{}={}={}={}={}={}={}={}={}={}={}={}={}={}={}={}={}={}",
self.pokemon.p0.serialize(),
self.pokemon.p1.serialize(),
self.pokemon.p2.serialize(),
self.pokemon.p3.serialize(),
self.pokemon.p4.serialize(),
self.pokemon.p5.serialize(),
self.active_index.serialize(),
self.side_conditions.serialize(),
vs_string,
self.substitute_health,
self.wish.0,
self.wish.1,
self.force_switch,
self.switch_out_move_second_saved_move.to_string(),
self.baton_passing,
self.force_trapped,
self.last_used_move.serialize(),
self.slow_uturn_move,
);
}
pub fn deserialize(serialized: &str) -> Side {
let split: Vec<&str> = serialized.split("=").collect();
let mut vs_hashset = HashSet::new();
if split[8] != "" {
for item in split[8].split(":") {
vs_hashset.insert(PokemonVolatileStatus::deserialize(item));
}
}
return Side {
pokemon: SidePokemon {
p0: Pokemon::deserialize(split[0]),
p1: Pokemon::deserialize(split[1]),
p2: Pokemon::deserialize(split[2]),
p3: Pokemon::deserialize(split[3]),
p4: Pokemon::deserialize(split[4]),
p5: Pokemon::deserialize(split[5]),
},
active_index: PokemonIndex::deserialize(split[6]),
side_conditions: SideConditions::deserialize(split[7]),
volatile_statuses: vs_hashset,
substitute_health: split[9].parse::<i16>().unwrap(),
attack_boost: split[10].parse::<i8>().unwrap(),
defense_boost: split[11].parse::<i8>().unwrap(),
special_attack_boost: split[12].parse::<i8>().unwrap(),
special_defense_boost: split[13].parse::<i8>().unwrap(),
speed_boost: split[14].parse::<i8>().unwrap(),
accuracy_boost: split[15].parse::<i8>().unwrap(),
evasion_boost: split[16].parse::<i8>().unwrap(),
wish: (
split[17].parse::<i8>().unwrap(),
split[18].parse::<i16>().unwrap(),
),
force_switch: split[19].parse::<bool>().unwrap(),
switch_out_move_second_saved_move: Choices::from_str(split[20]).unwrap(),
baton_passing: split[21].parse::<bool>().unwrap(),
force_trapped: split[22].parse::<bool>().unwrap(),
last_used_move: LastUsedMove::deserialize(split[23]),
damage_dealt: DamageDealt::default(),
slow_uturn_move: split[24].parse::<bool>().unwrap(),
};
}
}
impl Weather {
pub fn from_str(input: &str) -> Result<Weather, ()> {
match input.to_lowercase().as_str() {
"none" => Ok(Weather::None),
"rain" => Ok(Weather::Rain),
"sun" => Ok(Weather::Sun),
"sand" => Ok(Weather::Sand),
"hail" => Ok(Weather::Hail),
"harshsun" => Ok(Weather::HarshSun),
"heavyrain" => Ok(Weather::HeavyRain),
_ => Err(()),
}
}
}
impl StateWeather {
pub fn serialize(&self) -> String {
return format!("{:?};{}", self.weather_type, self.turns_remaining);
}
pub fn deserialize(serialized: &str) -> StateWeather {
let split: Vec<&str> = serialized.split(";").collect();
return StateWeather {
weather_type: Weather::from_str(split[0]).unwrap(),
turns_remaining: split[1].parse::<i8>().unwrap(),
};
}
}
impl Terrain {
pub fn from_str(input: &str) -> Result<Terrain, ()> {
match input.to_lowercase().as_str() {
"none" => Ok(Terrain::None),
"electricterrain" => Ok(Terrain::ElectricTerrain),
"grassyterrain" => Ok(Terrain::GrassyTerrain),
"mistyterrain" => Ok(Terrain::MistyTerrain),
"psychicterrain" => Ok(Terrain::PsychicTerrain),
_ => Err(()),
}
}
}
impl StateTerrain {
pub fn serialize(&self) -> String {
return format!("{:?};{}", self.terrain_type, self.turns_remaining);
}
pub fn deserialize(serialized: &str) -> StateTerrain {
let split: Vec<&str> = serialized.split(";").collect();
return StateTerrain {
terrain_type: Terrain::from_str(split[0]).unwrap(),
turns_remaining: split[1].parse::<i8>().unwrap(),
};
}
}
impl State {
pub fn serialize(&self) -> String {
return format!(
"{}/{}/{}/{}/{}/{}",
self.side_one.serialize(),
self.side_two.serialize(),
self.weather.serialize(),
self.terrain.serialize(),
self.trick_room,
self.team_preview
);
}
pub fn deserialize(serialized: &str) -> State {
let split: Vec<&str> = serialized.split("/").collect();
return State {
side_one: Side::deserialize(split[0]),
side_two: Side::deserialize(split[1]),
weather: StateWeather::deserialize(split[2]),
terrain: StateTerrain::deserialize(split[3]),
trick_room: split[4].parse::<bool>().unwrap(),
team_preview: split[5].parse::<bool>().unwrap(),
};
}
}
impl FromStr for Choices {
type Err = ();
fn from_str(input: &str) -> Result<Self, Self::Err> {
match input.to_uppercase().as_str() {
"NONE" => Ok(Choices::NONE),
"ABSORB" => Ok(Choices::ABSORB),
"ACCELEROCK" => Ok(Choices::ACCELEROCK),
"ACID" => Ok(Choices::ACID),
"ACIDARMOR" => Ok(Choices::ACIDARMOR),
"ACIDSPRAY" => Ok(Choices::ACIDSPRAY),
"ACROBATICS" => Ok(Choices::ACROBATICS),
"ACUPRESSURE" => Ok(Choices::ACUPRESSURE),
"AERIALACE" => Ok(Choices::AERIALACE),
"AEROBLAST" => Ok(Choices::AEROBLAST),
"AFTERYOU" => Ok(Choices::AFTERYOU),
"AGILITY" => Ok(Choices::AGILITY),
"AIRCUTTER" => Ok(Choices::AIRCUTTER),
"AIRSLASH" => Ok(Choices::AIRSLASH),
"ALLYSWITCH" => Ok(Choices::ALLYSWITCH),
"AMNESIA" => Ok(Choices::AMNESIA),
"ANCHORSHOT" => Ok(Choices::ANCHORSHOT),
"ANCIENTPOWER" => Ok(Choices::ANCIENTPOWER),
"APPLEACID" => Ok(Choices::APPLEACID),
"AQUACUTTER" => Ok(Choices::AQUACUTTER),
"AQUAJET" => Ok(Choices::AQUAJET),
"AQUARING" => Ok(Choices::AQUARING),
"AQUASTEP" => Ok(Choices::AQUASTEP),
"AQUATAIL" => Ok(Choices::AQUATAIL),
"ARMORCANNON" => Ok(Choices::ARMORCANNON),
"ARMTHRUST" => Ok(Choices::ARMTHRUST),
"AROMATHERAPY" => Ok(Choices::AROMATHERAPY),
"AROMATICMIST" => Ok(Choices::AROMATICMIST),
"ASSIST" => Ok(Choices::ASSIST),
"ASSURANCE" => Ok(Choices::ASSURANCE),
"ASTONISH" => Ok(Choices::ASTONISH),
"ASTRALBARRAGE" => Ok(Choices::ASTRALBARRAGE),
"ATTACKORDER" => Ok(Choices::ATTACKORDER),
"ATTRACT" => Ok(Choices::ATTRACT),
"AURASPHERE" => Ok(Choices::AURASPHERE),
"AURAWHEEL" => Ok(Choices::AURAWHEEL),
"AURORABEAM" => Ok(Choices::AURORABEAM),
"AURORAVEIL" => Ok(Choices::AURORAVEIL),
"AUTOTOMIZE" => Ok(Choices::AUTOTOMIZE),
"AVALANCHE" => Ok(Choices::AVALANCHE),
"AXEKICK" => Ok(Choices::AXEKICK),
"BABYDOLLEYES" => Ok(Choices::BABYDOLLEYES),
"BADDYBAD" => Ok(Choices::BADDYBAD),
"BANEFULBUNKER" => Ok(Choices::BANEFULBUNKER),
"BARBBARRAGE" => Ok(Choices::BARBBARRAGE),
"BARRAGE" => Ok(Choices::BARRAGE),
"BARRIER" => Ok(Choices::BARRIER),
"BATONPASS" => Ok(Choices::BATONPASS),
"BEAKBLAST" => Ok(Choices::BEAKBLAST),
"BEATUP" => Ok(Choices::BEATUP),
"BEHEMOTHBASH" => Ok(Choices::BEHEMOTHBASH),
"BEHEMOTHBLADE" => Ok(Choices::BEHEMOTHBLADE),
"BELCH" => Ok(Choices::BELCH),
"BELLYDRUM" => Ok(Choices::BELLYDRUM),
"BESTOW" => Ok(Choices::BESTOW),
"BIDE" => Ok(Choices::BIDE),
"BIND" => Ok(Choices::BIND),
"BITE" => Ok(Choices::BITE),
"BITTERBLADE" => Ok(Choices::BITTERBLADE),
"BITTERMALICE" => Ok(Choices::BITTERMALICE),
"BLASTBURN" => Ok(Choices::BLASTBURN),
"BLAZEKICK" => Ok(Choices::BLAZEKICK),
"BLAZINGTORQUE" => Ok(Choices::BLAZINGTORQUE),
"BLEAKWINDSTORM" => Ok(Choices::BLEAKWINDSTORM),
"BLIZZARD" => Ok(Choices::BLIZZARD),
"BLOCK" => Ok(Choices::BLOCK),
"BLOODMOON" => Ok(Choices::BLOODMOON),
"BLUEFLARE" => Ok(Choices::BLUEFLARE),
"BODYPRESS" => Ok(Choices::BODYPRESS),
"BODYSLAM" => Ok(Choices::BODYSLAM),
"BOLTBEAK" => Ok(Choices::BOLTBEAK),
"BOLTSTRIKE" => Ok(Choices::BOLTSTRIKE),
"BONECLUB" => Ok(Choices::BONECLUB),
"BONEMERANG" => Ok(Choices::BONEMERANG),
"BONERUSH" => Ok(Choices::BONERUSH),
"BOOMBURST" => Ok(Choices::BOOMBURST),
"BOUNCE" => Ok(Choices::BOUNCE),
"BOUNCYBUBBLE" => Ok(Choices::BOUNCYBUBBLE),
"BRANCHPOKE" => Ok(Choices::BRANCHPOKE),
"BRAVEBIRD" => Ok(Choices::BRAVEBIRD),
"BREAKINGSWIPE" => Ok(Choices::BREAKINGSWIPE),
"BRICKBREAK" => Ok(Choices::BRICKBREAK),
"BRINE" => Ok(Choices::BRINE),
"BRUTALSWING" => Ok(Choices::BRUTALSWING),
"BUBBLE" => Ok(Choices::BUBBLE),
"BUBBLEBEAM" => Ok(Choices::BUBBLEBEAM),
"BUGBITE" => Ok(Choices::BUGBITE),
"BUGBUZZ" => Ok(Choices::BUGBUZZ),
"BULKUP" => Ok(Choices::BULKUP),
"BULLDOZE" => Ok(Choices::BULLDOZE),
"BULLETPUNCH" => Ok(Choices::BULLETPUNCH),
"BULLETSEED" => Ok(Choices::BULLETSEED),
"BURNINGJEALOUSY" => Ok(Choices::BURNINGJEALOUSY),
"BURNUP" => Ok(Choices::BURNUP),
"BUZZYBUZZ" => Ok(Choices::BUZZYBUZZ),
"CALMMIND" => Ok(Choices::CALMMIND),
"CAMOUFLAGE" => Ok(Choices::CAMOUFLAGE),
"CAPTIVATE" => Ok(Choices::CAPTIVATE),
"CEASELESSEDGE" => Ok(Choices::CEASELESSEDGE),
"CELEBRATE" => Ok(Choices::CELEBRATE),
"CHARGE" => Ok(Choices::CHARGE),
"CHARGEBEAM" => Ok(Choices::CHARGEBEAM),
"CHARM" => Ok(Choices::CHARM),
"CHATTER" => Ok(Choices::CHATTER),
"CHILLINGWATER" => Ok(Choices::CHILLINGWATER),
"CHILLYRECEPTION" => Ok(Choices::CHILLYRECEPTION),
"CHIPAWAY" => Ok(Choices::CHIPAWAY),
"CHLOROBLAST" => Ok(Choices::CHLOROBLAST),
"CIRCLETHROW" => Ok(Choices::CIRCLETHROW),
"CLAMP" => Ok(Choices::CLAMP),
"CLANGINGSCALES" => Ok(Choices::CLANGINGSCALES),
"CLANGOROUSSOUL" => Ok(Choices::CLANGOROUSSOUL),
"CLEARSMOG" => Ok(Choices::CLEARSMOG),
"CLOSECOMBAT" => Ok(Choices::CLOSECOMBAT),
"COACHING" => Ok(Choices::COACHING),
"COIL" => Ok(Choices::COIL),
"COLLISIONCOURSE" => Ok(Choices::COLLISIONCOURSE),
"COMBATTORQUE" => Ok(Choices::COMBATTORQUE),
"COMETPUNCH" => Ok(Choices::COMETPUNCH),
"COMEUPPANCE" => Ok(Choices::COMEUPPANCE),
"CONFIDE" => Ok(Choices::CONFIDE),
"CONFUSERAY" => Ok(Choices::CONFUSERAY),
"CONFUSION" => Ok(Choices::CONFUSION),
"CONSTRICT" => Ok(Choices::CONSTRICT),
"CONVERSION" => Ok(Choices::CONVERSION),
"CONVERSION2" => Ok(Choices::CONVERSION2),
"COPYCAT" => Ok(Choices::COPYCAT),
"COREENFORCER" => Ok(Choices::COREENFORCER),
"CORROSIVEGAS" => Ok(Choices::CORROSIVEGAS),
"COSMICPOWER" => Ok(Choices::COSMICPOWER),
"COTTONGUARD" => Ok(Choices::COTTONGUARD),
"COTTONSPORE" => Ok(Choices::COTTONSPORE),
"COUNTER" => Ok(Choices::COUNTER),
"COURTCHANGE" => Ok(Choices::COURTCHANGE),
"COVET" => Ok(Choices::COVET),
"CRABHAMMER" => Ok(Choices::CRABHAMMER),
"CRAFTYSHIELD" => Ok(Choices::CRAFTYSHIELD),
"CROSSCHOP" => Ok(Choices::CROSSCHOP),
"CROSSPOISON" => Ok(Choices::CROSSPOISON),
"CRUNCH" => Ok(Choices::CRUNCH),
"CRUSHCLAW" => Ok(Choices::CRUSHCLAW),
"CRUSHGRIP" => Ok(Choices::CRUSHGRIP),
"CURSE" => Ok(Choices::CURSE),
"CUT" => Ok(Choices::CUT),
"DARKESTLARIAT" => Ok(Choices::DARKESTLARIAT),
"DARKPULSE" => Ok(Choices::DARKPULSE),
"DARKVOID" => Ok(Choices::DARKVOID),
"DAZZLINGGLEAM" => Ok(Choices::DAZZLINGGLEAM),
"DECORATE" => Ok(Choices::DECORATE),
"DEFENDORDER" => Ok(Choices::DEFENDORDER),
"DEFENSECURL" => Ok(Choices::DEFENSECURL),
"DEFOG" => Ok(Choices::DEFOG),
"DESTINYBOND" => Ok(Choices::DESTINYBOND),
"DETECT" => Ok(Choices::DETECT),
"DIAMONDSTORM" => Ok(Choices::DIAMONDSTORM),
"DIG" => Ok(Choices::DIG),
"DIRECLAW" => Ok(Choices::DIRECLAW),
"DISABLE" => Ok(Choices::DISABLE),
"DISARMINGVOICE" => Ok(Choices::DISARMINGVOICE),
"DISCHARGE" => Ok(Choices::DISCHARGE),
"DIVE" => Ok(Choices::DIVE),
"DIZZYPUNCH" => Ok(Choices::DIZZYPUNCH),
"DOODLE" => Ok(Choices::DOODLE),
"DOOMDESIRE" => Ok(Choices::DOOMDESIRE),
"DOUBLEEDGE" => Ok(Choices::DOUBLEEDGE),
"DOUBLEHIT" => Ok(Choices::DOUBLEHIT),
"DOUBLEIRONBASH" => Ok(Choices::DOUBLEIRONBASH),
"DOUBLEKICK" => Ok(Choices::DOUBLEKICK),
"DOUBLESHOCK" => Ok(Choices::DOUBLESHOCK),
"DOUBLESLAP" => Ok(Choices::DOUBLESLAP),
"DOUBLETEAM" => Ok(Choices::DOUBLETEAM),
"DRACOMETEOR" => Ok(Choices::DRACOMETEOR),
"DRAGONASCENT" => Ok(Choices::DRAGONASCENT),
"DRAGONBREATH" => Ok(Choices::DRAGONBREATH),
"DRAGONCLAW" => Ok(Choices::DRAGONCLAW),
"DRAGONDANCE" => Ok(Choices::DRAGONDANCE),
"DRAGONDARTS" => Ok(Choices::DRAGONDARTS),
"DRAGONENERGY" => Ok(Choices::DRAGONENERGY),
"DRAGONHAMMER" => Ok(Choices::DRAGONHAMMER),
"DRAGONPULSE" => Ok(Choices::DRAGONPULSE),
"DRAGONRAGE" => Ok(Choices::DRAGONRAGE),
"DRAGONRUSH" => Ok(Choices::DRAGONRUSH),
"DRAGONTAIL" => Ok(Choices::DRAGONTAIL),
"DRAININGKISS" => Ok(Choices::DRAININGKISS),
"DRAINPUNCH" => Ok(Choices::DRAINPUNCH),
"DREAMEATER" => Ok(Choices::DREAMEATER),
"DRILLPECK" => Ok(Choices::DRILLPECK),
"DRILLRUN" => Ok(Choices::DRILLRUN),
"DRUMBEATING" => Ok(Choices::DRUMBEATING),
"DUALCHOP" => Ok(Choices::DUALCHOP),
"DUALWINGBEAT" => Ok(Choices::DUALWINGBEAT),
"DYNAMAXCANNON" => Ok(Choices::DYNAMAXCANNON),
"DYNAMICPUNCH" => Ok(Choices::DYNAMICPUNCH),
"EARTHPOWER" => Ok(Choices::EARTHPOWER),
"EARTHQUAKE" => Ok(Choices::EARTHQUAKE),
"ECHOEDVOICE" => Ok(Choices::ECHOEDVOICE),
"EERIEIMPULSE" => Ok(Choices::EERIEIMPULSE),
"EERIESPELL" => Ok(Choices::EERIESPELL),
"EGGBOMB" => Ok(Choices::EGGBOMB),
"ELECTRICTERRAIN" => Ok(Choices::ELECTRICTERRAIN),
"ELECTRIFY" => Ok(Choices::ELECTRIFY),
"ELECTROBALL" => Ok(Choices::ELECTROBALL),
"ELECTRODRIFT" => Ok(Choices::ELECTRODRIFT),
"ELECTROWEB" => Ok(Choices::ELECTROWEB),
"EMBARGO" => Ok(Choices::EMBARGO),
"EMBER" => Ok(Choices::EMBER),
"ENCORE" => Ok(Choices::ENCORE),
"ENDEAVOR" => Ok(Choices::ENDEAVOR),
"ENDURE" => Ok(Choices::ENDURE),
"ENERGYBALL" => Ok(Choices::ENERGYBALL),
"ENTRAINMENT" => Ok(Choices::ENTRAINMENT),
"ERUPTION" => Ok(Choices::ERUPTION),
"ESPERWING" => Ok(Choices::ESPERWING),
"ETERNABEAM" => Ok(Choices::ETERNABEAM),
"EXPANDINGFORCE" => Ok(Choices::EXPANDINGFORCE),
"EXPLOSION" => Ok(Choices::EXPLOSION),
"EXTRASENSORY" => Ok(Choices::EXTRASENSORY),
"EXTREMESPEED" => Ok(Choices::EXTREMESPEED),
"FACADE" => Ok(Choices::FACADE),
"FAIRYLOCK" => Ok(Choices::FAIRYLOCK),
"FAIRYWIND" => Ok(Choices::FAIRYWIND),
"FAKEOUT" => Ok(Choices::FAKEOUT),
"FAKETEARS" => Ok(Choices::FAKETEARS),
"FALSESURRENDER" => Ok(Choices::FALSESURRENDER),
"FALSESWIPE" => Ok(Choices::FALSESWIPE),
"FEATHERDANCE" => Ok(Choices::FEATHERDANCE),
"FEINT" => Ok(Choices::FEINT),
"FEINTATTACK" => Ok(Choices::FEINTATTACK),
"FELLSTINGER" => Ok(Choices::FELLSTINGER),
"FIERYDANCE" => Ok(Choices::FIERYDANCE),
"FIERYWRATH" => Ok(Choices::FIERYWRATH),
"FILLETAWAY" => Ok(Choices::FILLETAWAY),
"FINALGAMBIT" => Ok(Choices::FINALGAMBIT),
"FIREBLAST" => Ok(Choices::FIREBLAST),
"FIREFANG" => Ok(Choices::FIREFANG),
"FIRELASH" => Ok(Choices::FIRELASH),
"FIREPLEDGE" => Ok(Choices::FIREPLEDGE),
"FIREPUNCH" => Ok(Choices::FIREPUNCH),
"FIRESPIN" => Ok(Choices::FIRESPIN),
"FIRSTIMPRESSION" => Ok(Choices::FIRSTIMPRESSION),
"FISHIOUSREND" => Ok(Choices::FISHIOUSREND),
"FISSURE" => Ok(Choices::FISSURE),
"FLAIL" => Ok(Choices::FLAIL),
"FLAMEBURST" => Ok(Choices::FLAMEBURST),
"FLAMECHARGE" => Ok(Choices::FLAMECHARGE),
"FLAMETHROWER" => Ok(Choices::FLAMETHROWER),
"FLAMEWHEEL" => Ok(Choices::FLAMEWHEEL),
"FLAREBLITZ" => Ok(Choices::FLAREBLITZ),
"FLASH" => Ok(Choices::FLASH),
"FLASHCANNON" => Ok(Choices::FLASHCANNON),
"FLATTER" => Ok(Choices::FLATTER),
"FLEURCANNON" => Ok(Choices::FLEURCANNON),
"FLING" => Ok(Choices::FLING),
"FLIPTURN" => Ok(Choices::FLIPTURN),
"FLOATYFALL" => Ok(Choices::FLOATYFALL),
"FLORALHEALING" => Ok(Choices::FLORALHEALING),
"FLOWERSHIELD" => Ok(Choices::FLOWERSHIELD),
"FLOWERTRICK" => Ok(Choices::FLOWERTRICK),
"FLY" => Ok(Choices::FLY),
"FLYINGPRESS" => Ok(Choices::FLYINGPRESS),
"FOCUSBLAST" => Ok(Choices::FOCUSBLAST),
"FOCUSENERGY" => Ok(Choices::FOCUSENERGY),
"FOCUSPUNCH" => Ok(Choices::FOCUSPUNCH),
"FOLLOWME" => Ok(Choices::FOLLOWME),
"FORCEPALM" => Ok(Choices::FORCEPALM),
"FORESIGHT" => Ok(Choices::FORESIGHT),
"FORESTSCURSE" => Ok(Choices::FORESTSCURSE),
"FOULPLAY" => Ok(Choices::FOULPLAY),
"FREEZEDRY" => Ok(Choices::FREEZEDRY),
"FREEZESHOCK" => Ok(Choices::FREEZESHOCK),
"FREEZINGGLARE" => Ok(Choices::FREEZINGGLARE),
"FREEZYFROST" => Ok(Choices::FREEZYFROST),
"FRENZYPLANT" => Ok(Choices::FRENZYPLANT),
"FROSTBREATH" => Ok(Choices::FROSTBREATH),
"FRUSTRATION" => Ok(Choices::FRUSTRATION),
"FURYATTACK" => Ok(Choices::FURYATTACK),
"FURYCUTTER" => Ok(Choices::FURYCUTTER),
"FURYSWIPES" => Ok(Choices::FURYSWIPES),
"FUSIONBOLT" => Ok(Choices::FUSIONBOLT),
"FUSIONFLARE" => Ok(Choices::FUSIONFLARE),
"FUTURESIGHT" => Ok(Choices::FUTURESIGHT),
"GASTROACID" => Ok(Choices::GASTROACID),
"GEARGRIND" => Ok(Choices::GEARGRIND),
"GEARUP" => Ok(Choices::GEARUP),
"GEOMANCY" => Ok(Choices::GEOMANCY),
"GIGADRAIN" => Ok(Choices::GIGADRAIN),
"GIGAIMPACT" => Ok(Choices::GIGAIMPACT),
"GIGATONHAMMER" => Ok(Choices::GIGATONHAMMER),
"GLACIALLANCE" => Ok(Choices::GLACIALLANCE),
"GLACIATE" => Ok(Choices::GLACIATE),
"GLAIVERUSH" => Ok(Choices::GLAIVERUSH),
"GLARE" => Ok(Choices::GLARE),
"GLITZYGLOW" => Ok(Choices::GLITZYGLOW),
"GRASSKNOT" => Ok(Choices::GRASSKNOT),
"GRASSPLEDGE" => Ok(Choices::GRASSPLEDGE),
"GRASSWHISTLE" => Ok(Choices::GRASSWHISTLE),
"GRASSYGLIDE" => Ok(Choices::GRASSYGLIDE),
"GRASSYTERRAIN" => Ok(Choices::GRASSYTERRAIN),
"GRAVAPPLE" => Ok(Choices::GRAVAPPLE),
"GRAVITY" => Ok(Choices::GRAVITY),
"GROWL" => Ok(Choices::GROWL),
"GROWTH" => Ok(Choices::GROWTH),
"GRUDGE" => Ok(Choices::GRUDGE),
"GUARDSPLIT" => Ok(Choices::GUARDSPLIT),
"GUARDSWAP" => Ok(Choices::GUARDSWAP),
"GUILLOTINE" => Ok(Choices::GUILLOTINE),
"GUNKSHOT" => Ok(Choices::GUNKSHOT),
"GUST" => Ok(Choices::GUST),
"GYROBALL" => Ok(Choices::GYROBALL),
"HAIL" => Ok(Choices::HAIL),
"HAMMERARM" => Ok(Choices::HAMMERARM),
"HAPPYHOUR" => Ok(Choices::HAPPYHOUR),
"HARDEN" => Ok(Choices::HARDEN),
"HAZE" => Ok(Choices::HAZE),
"HEADBUTT" => Ok(Choices::HEADBUTT),
"HEADCHARGE" => Ok(Choices::HEADCHARGE),
"HEADLONGRUSH" => Ok(Choices::HEADLONGRUSH),
"HEADSMASH" => Ok(Choices::HEADSMASH),
"HEALBELL" => Ok(Choices::HEALBELL),
"HEALBLOCK" => Ok(Choices::HEALBLOCK),
"HEALINGWISH" => Ok(Choices::HEALINGWISH),
"HEALORDER" => Ok(Choices::HEALORDER),
"HEALPULSE" => Ok(Choices::HEALPULSE),
"HEARTSTAMP" => Ok(Choices::HEARTSTAMP),
"HEARTSWAP" => Ok(Choices::HEARTSWAP),
"HEATCRASH" => Ok(Choices::HEATCRASH),
"HEATWAVE" => Ok(Choices::HEATWAVE),
"HEAVYSLAM" => Ok(Choices::HEAVYSLAM),
"HELPINGHAND" => Ok(Choices::HELPINGHAND),
"HEX" => Ok(Choices::HEX),
"HIDDENPOWER" => Ok(Choices::HIDDENPOWER),
"HIDDENPOWERBUG60" => Ok(Choices::HIDDENPOWERBUG60),
"HIDDENPOWERBUG70" => Ok(Choices::HIDDENPOWERBUG70),
"HIDDENPOWERDARK60" => Ok(Choices::HIDDENPOWERDARK60),
"HIDDENPOWERDARK70" => Ok(Choices::HIDDENPOWERDARK70),
"HIDDENPOWERDRAGON60" => Ok(Choices::HIDDENPOWERDRAGON60),
"HIDDENPOWERDRAGON70" => Ok(Choices::HIDDENPOWERDRAGON70),
"HIDDENPOWERELECTRIC60" => Ok(Choices::HIDDENPOWERELECTRIC60),
"HIDDENPOWERELECTRIC70" => Ok(Choices::HIDDENPOWERELECTRIC70),
"HIDDENPOWERFIGHTING60" => Ok(Choices::HIDDENPOWERFIGHTING60),
"HIDDENPOWERFIGHTING70" => Ok(Choices::HIDDENPOWERFIGHTING70),
"HIDDENPOWERFIRE60" => Ok(Choices::HIDDENPOWERFIRE60),
"HIDDENPOWERFIRE70" => Ok(Choices::HIDDENPOWERFIRE70),
"HIDDENPOWERFLYING60" => Ok(Choices::HIDDENPOWERFLYING60),
"HIDDENPOWERFLYING70" => Ok(Choices::HIDDENPOWERFLYING70),
"HIDDENPOWERGHOST60" => Ok(Choices::HIDDENPOWERGHOST60),
"HIDDENPOWERGHOST70" => Ok(Choices::HIDDENPOWERGHOST70),
"HIDDENPOWERGRASS60" => Ok(Choices::HIDDENPOWERGRASS60),
"HIDDENPOWERGRASS70" => Ok(Choices::HIDDENPOWERGRASS70),
"HIDDENPOWERGROUND60" => Ok(Choices::HIDDENPOWERGROUND60),
"HIDDENPOWERGROUND70" => Ok(Choices::HIDDENPOWERGROUND70),
"HIDDENPOWERICE60" => Ok(Choices::HIDDENPOWERICE60),
"HIDDENPOWERICE70" => Ok(Choices::HIDDENPOWERICE70),
"HIDDENPOWERPOISON60" => Ok(Choices::HIDDENPOWERPOISON60),
"HIDDENPOWERPOISON70" => Ok(Choices::HIDDENPOWERPOISON70),
"HIDDENPOWERPSYCHIC60" => Ok(Choices::HIDDENPOWERPSYCHIC60),
"HIDDENPOWERPSYCHIC70" => Ok(Choices::HIDDENPOWERPSYCHIC70),
"HIDDENPOWERROCK60" => Ok(Choices::HIDDENPOWERROCK60),
"HIDDENPOWERROCK70" => Ok(Choices::HIDDENPOWERROCK70),
"HIDDENPOWERSTEEL60" => Ok(Choices::HIDDENPOWERSTEEL60),
"HIDDENPOWERSTEEL70" => Ok(Choices::HIDDENPOWERSTEEL70),
"HIDDENPOWERWATER60" => Ok(Choices::HIDDENPOWERWATER60),
"HIDDENPOWERWATER70" => Ok(Choices::HIDDENPOWERWATER70),
"HIGHHORSEPOWER" => Ok(Choices::HIGHHORSEPOWER),
"HIGHJUMPKICK" => Ok(Choices::HIGHJUMPKICK),
"HOLDBACK" => Ok(Choices::HOLDBACK),
"HOLDHANDS" => Ok(Choices::HOLDHANDS),
"HONECLAWS" => Ok(Choices::HONECLAWS),
"HORNATTACK" => Ok(Choices::HORNATTACK),
"HORNDRILL" => Ok(Choices::HORNDRILL),
"HORNLEECH" => Ok(Choices::HORNLEECH),
"HOWL" => Ok(Choices::HOWL),
"HURRICANE" => Ok(Choices::HURRICANE),
"HYDROCANNON" => Ok(Choices::HYDROCANNON),
"HYDROPUMP" => Ok(Choices::HYDROPUMP),
"HYDROSTEAM" => Ok(Choices::HYDROSTEAM),
"HYPERBEAM" => Ok(Choices::HYPERBEAM),
"HYPERDRILL" => Ok(Choices::HYPERDRILL),
"HYPERFANG" => Ok(Choices::HYPERFANG),
"HYPERSPACEFURY" => Ok(Choices::HYPERSPACEFURY),
"HYPERSPACEHOLE" => Ok(Choices::HYPERSPACEHOLE),
"HYPERVOICE" => Ok(Choices::HYPERVOICE),
"HYPNOSIS" => Ok(Choices::HYPNOSIS),
"ICEBALL" => Ok(Choices::ICEBALL),
"ICEBEAM" => Ok(Choices::ICEBEAM),
"ICEBURN" => Ok(Choices::ICEBURN),
"ICEFANG" => Ok(Choices::ICEFANG),
"ICEHAMMER" => Ok(Choices::ICEHAMMER),
"ICEPUNCH" => Ok(Choices::ICEPUNCH),
"ICESHARD" => Ok(Choices::ICESHARD),
"ICESPINNER" => Ok(Choices::ICESPINNER),
"ICICLECRASH" => Ok(Choices::ICICLECRASH),
"ICICLESPEAR" => Ok(Choices::ICICLESPEAR),
"ICYWIND" => Ok(Choices::ICYWIND),
"IMPRISON" => Ok(Choices::IMPRISON),
"INCINERATE" => Ok(Choices::INCINERATE),
"INFERNALPARADE" => Ok(Choices::INFERNALPARADE),
"INFERNO" => Ok(Choices::INFERNO),
"INFESTATION" => Ok(Choices::INFESTATION),
"INGRAIN" => Ok(Choices::INGRAIN),
"INSTRUCT" => Ok(Choices::INSTRUCT),
"IONDELUGE" => Ok(Choices::IONDELUGE),
"IRONDEFENSE" => Ok(Choices::IRONDEFENSE),
"IRONHEAD" => Ok(Choices::IRONHEAD),
"IRONTAIL" => Ok(Choices::IRONTAIL),
"IVYCUDGEL" => Ok(Choices::IVYCUDGEL),
"JAWLOCK" => Ok(Choices::JAWLOCK),
"JETPUNCH" => Ok(Choices::JETPUNCH),
"JUDGMENT" => Ok(Choices::JUDGMENT),
"JUMPKICK" => Ok(Choices::JUMPKICK),
"JUNGLEHEALING" => Ok(Choices::JUNGLEHEALING),
"KARATECHOP" => Ok(Choices::KARATECHOP),
"KINESIS" => Ok(Choices::KINESIS),
"KINGSSHIELD" => Ok(Choices::KINGSSHIELD),
"KNOCKOFF" => Ok(Choices::KNOCKOFF),
"KOWTOWCLEAVE" => Ok(Choices::KOWTOWCLEAVE),
"LANDSWRATH" => Ok(Choices::LANDSWRATH),
"LASERFOCUS" => Ok(Choices::LASERFOCUS),
"LASHOUT" => Ok(Choices::LASHOUT),
"LASTRESORT" => Ok(Choices::LASTRESORT),
"LASTRESPECTS" => Ok(Choices::LASTRESPECTS),
"LAVAPLUME" => Ok(Choices::LAVAPLUME),
"LEAFAGE" => Ok(Choices::LEAFAGE),
"LEAFBLADE" => Ok(Choices::LEAFBLADE),
"LEAFSTORM" => Ok(Choices::LEAFSTORM),
"LEAFTORNADO" => Ok(Choices::LEAFTORNADO),
"LEECHLIFE" => Ok(Choices::LEECHLIFE),
"LEECHSEED" => Ok(Choices::LEECHSEED),
"LEER" => Ok(Choices::LEER),
"LICK" => Ok(Choices::LICK),
"LIFEDEW" => Ok(Choices::LIFEDEW),
"LIGHTOFRUIN" => Ok(Choices::LIGHTOFRUIN),
"LIGHTSCREEN" => Ok(Choices::LIGHTSCREEN),
"LIQUIDATION" => Ok(Choices::LIQUIDATION),
"LOCKON" => Ok(Choices::LOCKON),
"LOVELYKISS" => Ok(Choices::LOVELYKISS),
"LOWKICK" => Ok(Choices::LOWKICK),
"LOWSWEEP" => Ok(Choices::LOWSWEEP),
"LUCKYCHANT" => Ok(Choices::LUCKYCHANT),
"LUMINACRASH" => Ok(Choices::LUMINACRASH),
"LUNARBLESSING" => Ok(Choices::LUNARBLESSING),
"LUNARDANCE" => Ok(Choices::LUNARDANCE),
"LUNGE" => Ok(Choices::LUNGE),
"LUSTERPURGE" => Ok(Choices::LUSTERPURGE),
"MACHPUNCH" => Ok(Choices::MACHPUNCH),
"MAGICALLEAF" => Ok(Choices::MAGICALLEAF),
"MAGICALTORQUE" => Ok(Choices::MAGICALTORQUE),
"MAGICCOAT" => Ok(Choices::MAGICCOAT),
"MAGICPOWDER" => Ok(Choices::MAGICPOWDER),
"MAGICROOM" => Ok(Choices::MAGICROOM),
"MAGMASTORM" => Ok(Choices::MAGMASTORM),
"MAGNETBOMB" => Ok(Choices::MAGNETBOMB),
"MAGNETICFLUX" => Ok(Choices::MAGNETICFLUX),
"MAGNETRISE" => Ok(Choices::MAGNETRISE),
"MAGNITUDE" => Ok(Choices::MAGNITUDE),
"MAKEITRAIN" => Ok(Choices::MAKEITRAIN),
"MATBLOCK" => Ok(Choices::MATBLOCK),
"MATCHAGOTCHA" => Ok(Choices::MATCHAGOTCHA),
"MEANLOOK" => Ok(Choices::MEANLOOK),
"MEDITATE" => Ok(Choices::MEDITATE),
"MEFIRST" => Ok(Choices::MEFIRST),
"MEGADRAIN" => Ok(Choices::MEGADRAIN),
"MEGAHORN" => Ok(Choices::MEGAHORN),
"MEGAKICK" => Ok(Choices::MEGAKICK),
"MEGAPUNCH" => Ok(Choices::MEGAPUNCH),
"MEMENTO" => Ok(Choices::MEMENTO),
"METALBURST" => Ok(Choices::METALBURST),
"METALCLAW" => Ok(Choices::METALCLAW),
"METALSOUND" => Ok(Choices::METALSOUND),
"METEORASSAULT" => Ok(Choices::METEORASSAULT),
"METEORBEAM" => Ok(Choices::METEORBEAM),
"METEORMASH" => Ok(Choices::METEORMASH),
"METRONOME" => Ok(Choices::METRONOME),
"MILKDRINK" => Ok(Choices::MILKDRINK),
"MIMIC" => Ok(Choices::MIMIC),
"MINDBLOWN" => Ok(Choices::MINDBLOWN),
"MINDREADER" => Ok(Choices::MINDREADER),
"MINIMIZE" => Ok(Choices::MINIMIZE),
"MIRACLEEYE" => Ok(Choices::MIRACLEEYE),
"MIRRORCOAT" => Ok(Choices::MIRRORCOAT),
"MIRRORMOVE" => Ok(Choices::MIRRORMOVE),
"MIRRORSHOT" => Ok(Choices::MIRRORSHOT),
"MIST" => Ok(Choices::MIST),
"MISTBALL" => Ok(Choices::MISTBALL),
"MISTYEXPLOSION" => Ok(Choices::MISTYEXPLOSION),
"MISTYTERRAIN" => Ok(Choices::MISTYTERRAIN),
"MOONBLAST" => Ok(Choices::MOONBLAST),
"MOONGEISTBEAM" => Ok(Choices::MOONGEISTBEAM),
"MOONLIGHT" => Ok(Choices::MOONLIGHT),
"MORNINGSUN" => Ok(Choices::MORNINGSUN),
"MORTALSPIN" => Ok(Choices::MORTALSPIN),
"MOUNTAINGALE" => Ok(Choices::MOUNTAINGALE),
"MUDBOMB" => Ok(Choices::MUDBOMB),
"MUDDYWATER" => Ok(Choices::MUDDYWATER),
"MUDSHOT" => Ok(Choices::MUDSHOT),
"MUDSLAP" => Ok(Choices::MUDSLAP),
"MUDSPORT" => Ok(Choices::MUDSPORT),
"MULTIATTACK" => Ok(Choices::MULTIATTACK),
"MYSTICALFIRE" => Ok(Choices::MYSTICALFIRE),
"MYSTICALPOWER" => Ok(Choices::MYSTICALPOWER),
"NASTYPLOT" => Ok(Choices::NASTYPLOT),
"NATURALGIFT" => Ok(Choices::NATURALGIFT),
"NATUREPOWER" => Ok(Choices::NATUREPOWER),
"NATURESMADNESS" => Ok(Choices::NATURESMADNESS),
"NEEDLEARM" => Ok(Choices::NEEDLEARM),
"NIGHTDAZE" => Ok(Choices::NIGHTDAZE),
"NIGHTMARE" => Ok(Choices::NIGHTMARE),
"NIGHTSHADE" => Ok(Choices::NIGHTSHADE),
"NIGHTSLASH" => Ok(Choices::NIGHTSLASH),
"NOBLEROAR" => Ok(Choices::NOBLEROAR),
"NORETREAT" => Ok(Choices::NORETREAT),
"NOTHING" => Ok(Choices::NOTHING),
"NOXIOUSTORQUE" => Ok(Choices::NOXIOUSTORQUE),
"NUZZLE" => Ok(Choices::NUZZLE),
"OBLIVIONWING" => Ok(Choices::OBLIVIONWING),
"OBSTRUCT" => Ok(Choices::OBSTRUCT),
"OCTAZOOKA" => Ok(Choices::OCTAZOOKA),
"OCTOLOCK" => Ok(Choices::OCTOLOCK),
"ODORSLEUTH" => Ok(Choices::ODORSLEUTH),
"OMINOUSWIND" => Ok(Choices::OMINOUSWIND),
"ORDERUP" => Ok(Choices::ORDERUP),
"ORIGINPULSE" => Ok(Choices::ORIGINPULSE),
"OUTRAGE" => Ok(Choices::OUTRAGE),
"OVERDRIVE" => Ok(Choices::OVERDRIVE),
"OVERHEAT" => Ok(Choices::OVERHEAT),
"PAINSPLIT" => Ok(Choices::PAINSPLIT),
"PALEOWAVE" => Ok(Choices::PALEOWAVE),
"PARABOLICCHARGE" => Ok(Choices::PARABOLICCHARGE),
"PARTINGSHOT" => Ok(Choices::PARTINGSHOT),
"PAYBACK" => Ok(Choices::PAYBACK),
"PAYDAY" => Ok(Choices::PAYDAY),
"PECK" => Ok(Choices::PECK),
"PERISHSONG" => Ok(Choices::PERISHSONG),
"PETALBLIZZARD" => Ok(Choices::PETALBLIZZARD),
"PETALDANCE" => Ok(Choices::PETALDANCE),
"PHANTOMFORCE" => Ok(Choices::PHANTOMFORCE),
"PHOTONGEYSER" => Ok(Choices::PHOTONGEYSER),
"PIKAPAPOW" => Ok(Choices::PIKAPAPOW),
"PINMISSILE" => Ok(Choices::PINMISSILE),
"PLASMAFISTS" => Ok(Choices::PLASMAFISTS),
"PLAYNICE" => Ok(Choices::PLAYNICE),
"PLAYROUGH" => Ok(Choices::PLAYROUGH),
"PLUCK" => Ok(Choices::PLUCK),
"POISONFANG" => Ok(Choices::POISONFANG),
"POISONGAS" => Ok(Choices::POISONGAS),
"POISONJAB" => Ok(Choices::POISONJAB),
"POISONPOWDER" => Ok(Choices::POISONPOWDER),
"POISONSTING" => Ok(Choices::POISONSTING),
"POISONTAIL" => Ok(Choices::POISONTAIL),
"POLLENPUFF" => Ok(Choices::POLLENPUFF),
"POLTERGEIST" => Ok(Choices::POLTERGEIST),
"POPULATIONBOMB" => Ok(Choices::POPULATIONBOMB),
"POUNCE" => Ok(Choices::POUNCE),
"POUND" => Ok(Choices::POUND),
"POWDER" => Ok(Choices::POWDER),
"POWDERSNOW" => Ok(Choices::POWDERSNOW),
"POWERGEM" => Ok(Choices::POWERGEM),
"POWERSHIFT" => Ok(Choices::POWERSHIFT),
"POWERSPLIT" => Ok(Choices::POWERSPLIT),
"POWERSWAP" => Ok(Choices::POWERSWAP),
"POWERTRICK" => Ok(Choices::POWERTRICK),
"POWERTRIP" => Ok(Choices::POWERTRIP),
"POWERUPPUNCH" => Ok(Choices::POWERUPPUNCH),
"POWERWHIP" => Ok(Choices::POWERWHIP),
"PRECIPICEBLADES" => Ok(Choices::PRECIPICEBLADES),
"PRESENT" => Ok(Choices::PRESENT),
"PRISMATICLASER" => Ok(Choices::PRISMATICLASER),
"PROTECT" => Ok(Choices::PROTECT),
"PSYBEAM" => Ok(Choices::PSYBEAM),
"PSYBLADE" => Ok(Choices::PSYBLADE),
"PSYCHIC" => Ok(Choices::PSYCHIC),
"PSYCHICFANGS" => Ok(Choices::PSYCHICFANGS),
"PSYCHICTERRAIN" => Ok(Choices::PSYCHICTERRAIN),
"PSYCHOBOOST" => Ok(Choices::PSYCHOBOOST),
"PSYCHOCUT" => Ok(Choices::PSYCHOCUT),
"PSYCHOSHIFT" => Ok(Choices::PSYCHOSHIFT),
"PSYCHUP" => Ok(Choices::PSYCHUP),
"PSYSHIELDBASH" => Ok(Choices::PSYSHIELDBASH),
"PSYSHOCK" => Ok(Choices::PSYSHOCK),
"PSYSTRIKE" => Ok(Choices::PSYSTRIKE),
"PSYWAVE" => Ok(Choices::PSYWAVE),
"PUNISHMENT" => Ok(Choices::PUNISHMENT),
"PURIFY" => Ok(Choices::PURIFY),
"PURSUIT" => Ok(Choices::PURSUIT),
"PYROBALL" => Ok(Choices::PYROBALL),
"QUASH" => Ok(Choices::QUASH),
"QUICKATTACK" => Ok(Choices::QUICKATTACK),
"QUICKGUARD" => Ok(Choices::QUICKGUARD),
"QUIVERDANCE" => Ok(Choices::QUIVERDANCE),
"RAGE" => Ok(Choices::RAGE),
"RAGEFIST" => Ok(Choices::RAGEFIST),
"RAGEPOWDER" => Ok(Choices::RAGEPOWDER),
"RAGINGBULL" => Ok(Choices::RAGINGBULL),
"RAGINGFURY" => Ok(Choices::RAGINGFURY),
"RAINDANCE" => Ok(Choices::RAINDANCE),
"RAPIDSPIN" => Ok(Choices::RAPIDSPIN),
"RAZORLEAF" => Ok(Choices::RAZORLEAF),
"RAZORSHELL" => Ok(Choices::RAZORSHELL),
"RAZORWIND" => Ok(Choices::RAZORWIND),
"RECHARGE" => Ok(Choices::RECHARGE),
"RECOVER" => Ok(Choices::RECOVER),
"RECYCLE" => Ok(Choices::RECYCLE),
"REFLECT" => Ok(Choices::REFLECT),
"REFLECTTYPE" => Ok(Choices::REFLECTTYPE),
"REFRESH" => Ok(Choices::REFRESH),
"RELICSONG" => Ok(Choices::RELICSONG),
"REST" => Ok(Choices::REST),
"RETALIATE" => Ok(Choices::RETALIATE),
"RETURN" => Ok(Choices::RETURN),
"RETURN102" => Ok(Choices::RETURN102),
"REVELATIONDANCE" => Ok(Choices::REVELATIONDANCE),
"REVENGE" => Ok(Choices::REVENGE),
"REVERSAL" => Ok(Choices::REVERSAL),
"REVIVALBLESSING" => Ok(Choices::REVIVALBLESSING),
"RISINGVOLTAGE" => Ok(Choices::RISINGVOLTAGE),
"ROAR" => Ok(Choices::ROAR),
"ROAROFTIME" => Ok(Choices::ROAROFTIME),
"ROCKBLAST" => Ok(Choices::ROCKBLAST),
"ROCKCLIMB" => Ok(Choices::ROCKCLIMB),
"ROCKPOLISH" => Ok(Choices::ROCKPOLISH),
"ROCKSLIDE" => Ok(Choices::ROCKSLIDE),
"ROCKSMASH" => Ok(Choices::ROCKSMASH),
"ROCKTHROW" => Ok(Choices::ROCKTHROW),
"ROCKTOMB" => Ok(Choices::ROCKTOMB),
"ROCKWRECKER" => Ok(Choices::ROCKWRECKER),
"ROLEPLAY" => Ok(Choices::ROLEPLAY),
"ROLLINGKICK" => Ok(Choices::ROLLINGKICK),
"ROLLOUT" => Ok(Choices::ROLLOUT),
"ROOST" => Ok(Choices::ROOST),
"ROTOTILLER" => Ok(Choices::ROTOTILLER),
"ROUND" => Ok(Choices::ROUND),
"RUINATION" => Ok(Choices::RUINATION),
"SACREDFIRE" => Ok(Choices::SACREDFIRE),
"SACREDSWORD" => Ok(Choices::SACREDSWORD),
"SAFEGUARD" => Ok(Choices::SAFEGUARD),
"SALTCURE" => Ok(Choices::SALTCURE),
"SANDATTACK" => Ok(Choices::SANDATTACK),
"SANDSEARSTORM" => Ok(Choices::SANDSEARSTORM),
"SANDSTORM" => Ok(Choices::SANDSTORM),
"SANDTOMB" => Ok(Choices::SANDTOMB),
"SAPPYSEED" => Ok(Choices::SAPPYSEED),
"SCALD" => Ok(Choices::SCALD),
"SCALESHOT" => Ok(Choices::SCALESHOT),
"SCARYFACE" => Ok(Choices::SCARYFACE),
"SCORCHINGSANDS" => Ok(Choices::SCORCHINGSANDS),
"SCRATCH" => Ok(Choices::SCRATCH),
"SCREECH" => Ok(Choices::SCREECH),
"SEARINGSHOT" => Ok(Choices::SEARINGSHOT),
"SECRETPOWER" => Ok(Choices::SECRETPOWER),
"SECRETSWORD" => Ok(Choices::SECRETSWORD),
"SEEDBOMB" => Ok(Choices::SEEDBOMB),
"SEEDFLARE" => Ok(Choices::SEEDFLARE),
"SEISMICTOSS" => Ok(Choices::SEISMICTOSS),
"SELFDESTRUCT" => Ok(Choices::SELFDESTRUCT),
"SHADOWBALL" => Ok(Choices::SHADOWBALL),
"SHADOWBONE" => Ok(Choices::SHADOWBONE),
"SHADOWCLAW" => Ok(Choices::SHADOWCLAW),
"SHADOWFORCE" => Ok(Choices::SHADOWFORCE),
"SHADOWPUNCH" => Ok(Choices::SHADOWPUNCH),
"SHADOWSNEAK" => Ok(Choices::SHADOWSNEAK),
"SHADOWSTRIKE" => Ok(Choices::SHADOWSTRIKE),
"SHARPEN" => Ok(Choices::SHARPEN),
"SHEDTAIL" => Ok(Choices::SHEDTAIL),
"SHEERCOLD" => Ok(Choices::SHEERCOLD),
"SHELLSIDEARM" => Ok(Choices::SHELLSIDEARM),
"SHELLSMASH" => Ok(Choices::SHELLSMASH),
"SHELLTRAP" => Ok(Choices::SHELLTRAP),
"SHELTER" => Ok(Choices::SHELTER),
"SHIFTGEAR" => Ok(Choices::SHIFTGEAR),
"SHOCKWAVE" => Ok(Choices::SHOCKWAVE),
"SHOREUP" => Ok(Choices::SHOREUP),
"SIGNALBEAM" => Ok(Choices::SIGNALBEAM),
"SILKTRAP" => Ok(Choices::SILKTRAP),
"SILVERWIND" => Ok(Choices::SILVERWIND),
"SIMPLEBEAM" => Ok(Choices::SIMPLEBEAM),
"SING" => Ok(Choices::SING),
"SIZZLYSLIDE" => Ok(Choices::SIZZLYSLIDE),
"SKETCH" => Ok(Choices::SKETCH),
"SKILLSWAP" => Ok(Choices::SKILLSWAP),
"SKITTERSMACK" => Ok(Choices::SKITTERSMACK),
"SKULLBASH" => Ok(Choices::SKULLBASH),
"SKYATTACK" => Ok(Choices::SKYATTACK),
"SKYDROP" => Ok(Choices::SKYDROP),
"SKYUPPERCUT" => Ok(Choices::SKYUPPERCUT),
"SLACKOFF" => Ok(Choices::SLACKOFF),
"SLAM" => Ok(Choices::SLAM),
"SLASH" => Ok(Choices::SLASH),
"SLEEPPOWDER" => Ok(Choices::SLEEPPOWDER),
"SLEEPTALK" => Ok(Choices::SLEEPTALK),
"SLUDGE" => Ok(Choices::SLUDGE),
"SLUDGEBOMB" => Ok(Choices::SLUDGEBOMB),
"SLUDGEWAVE" => Ok(Choices::SLUDGEWAVE),
"SMACKDOWN" => Ok(Choices::SMACKDOWN),
"SMARTSTRIKE" => Ok(Choices::SMARTSTRIKE),
"SMELLINGSALTS" => Ok(Choices::SMELLINGSALTS),
"SMOG" => Ok(Choices::SMOG),
"SMOKESCREEN" => Ok(Choices::SMOKESCREEN),
"SNAPTRAP" => Ok(Choices::SNAPTRAP),
"SNARL" => Ok(Choices::SNARL),
"SNATCH" => Ok(Choices::SNATCH),
"SNIPESHOT" => Ok(Choices::SNIPESHOT),
"SNORE" => Ok(Choices::SNORE),
"SNOWSCAPE" => Ok(Choices::SNOWSCAPE),
"SOAK" => Ok(Choices::SOAK),
"SOFTBOILED" => Ok(Choices::SOFTBOILED),
"SOLARBEAM" => Ok(Choices::SOLARBEAM),
"SOLARBLADE" => Ok(Choices::SOLARBLADE),
"SONICBOOM" => Ok(Choices::SONICBOOM),
"SPACIALREND" => Ok(Choices::SPACIALREND),
"SPARK" => Ok(Choices::SPARK),
"SPARKLINGARIA" => Ok(Choices::SPARKLINGARIA),
"SPARKLYSWIRL" => Ok(Choices::SPARKLYSWIRL),
"SPECTRALTHIEF" => Ok(Choices::SPECTRALTHIEF),
"SPEEDSWAP" => Ok(Choices::SPEEDSWAP),
"SPICYEXTRACT" => Ok(Choices::SPICYEXTRACT),
"SPIDERWEB" => Ok(Choices::SPIDERWEB),
"SPIKECANNON" => Ok(Choices::SPIKECANNON),
"SPIKES" => Ok(Choices::SPIKES),
"SPIKYSHIELD" => Ok(Choices::SPIKYSHIELD),
"SPINOUT" => Ok(Choices::SPINOUT),
"SPIRITBREAK" => Ok(Choices::SPIRITBREAK),
"SPIRITSHACKLE" => Ok(Choices::SPIRITSHACKLE),
"SPITE" => Ok(Choices::SPITE),
"SPITUP" => Ok(Choices::SPITUP),
"SPLASH" => Ok(Choices::SPLASH),
"SPLISHYSPLASH" => Ok(Choices::SPLISHYSPLASH),
"SPORE" => Ok(Choices::SPORE),
"SPOTLIGHT" => Ok(Choices::SPOTLIGHT),
"SPRINGTIDESTORM" => Ok(Choices::SPRINGTIDESTORM),
"STEALTHROCK" => Ok(Choices::STEALTHROCK),
"STEAMERUPTION" => Ok(Choices::STEAMERUPTION),
"STEAMROLLER" => Ok(Choices::STEAMROLLER),
"STEELBEAM" => Ok(Choices::STEELBEAM),
"STEELROLLER" => Ok(Choices::STEELROLLER),
"STEELWING" => Ok(Choices::STEELWING),
"STICKYWEB" => Ok(Choices::STICKYWEB),
"STOCKPILE" => Ok(Choices::STOCKPILE),
"STOMP" => Ok(Choices::STOMP),
"STOMPINGTANTRUM" => Ok(Choices::STOMPINGTANTRUM),
"STONEAXE" => Ok(Choices::STONEAXE),
"STONEEDGE" => Ok(Choices::STONEEDGE),
"STOREDPOWER" => Ok(Choices::STOREDPOWER),
"STORMTHROW" => Ok(Choices::STORMTHROW),
"STRANGESTEAM" => Ok(Choices::STRANGESTEAM),
"STRENGTH" => Ok(Choices::STRENGTH),
"STRENGTHSAP" => Ok(Choices::STRENGTHSAP),
"STRINGSHOT" => Ok(Choices::STRINGSHOT),
"STRUGGLE" => Ok(Choices::STRUGGLE),
"STRUGGLEBUG" => Ok(Choices::STRUGGLEBUG),
"STUFFCHEEKS" => Ok(Choices::STUFFCHEEKS),
"STUNSPORE" => Ok(Choices::STUNSPORE),
"SUBMISSION" => Ok(Choices::SUBMISSION),
"SUBSTITUTE" => Ok(Choices::SUBSTITUTE),
"SUCKERPUNCH" => Ok(Choices::SUCKERPUNCH),
"SUNNYDAY" => Ok(Choices::SUNNYDAY),
"SUNSTEELSTRIKE" => Ok(Choices::SUNSTEELSTRIKE),
"SUPERFANG" => Ok(Choices::SUPERFANG),
"SUPERPOWER" => Ok(Choices::SUPERPOWER),
"SUPERSONIC" => Ok(Choices::SUPERSONIC),
"SURF" => Ok(Choices::SURF),
"SURGINGSTRIKES" => Ok(Choices::SURGINGSTRIKES),
"SWAGGER" => Ok(Choices::SWAGGER),
"SWALLOW" => Ok(Choices::SWALLOW),
"SWEETKISS" => Ok(Choices::SWEETKISS),
"SWEETSCENT" => Ok(Choices::SWEETSCENT),
"SWIFT" => Ok(Choices::SWIFT),
"SWITCHEROO" => Ok(Choices::SWITCHEROO),
"SWORDSDANCE" => Ok(Choices::SWORDSDANCE),
"SYNCHRONOISE" => Ok(Choices::SYNCHRONOISE),
"SYNTHESIS" => Ok(Choices::SYNTHESIS),
"SYRUPBOMB" => Ok(Choices::SYRUPBOMB),
"TACKLE" => Ok(Choices::TACKLE),
"TAILGLOW" => Ok(Choices::TAILGLOW),
"TAILSLAP" => Ok(Choices::TAILSLAP),
"TAILWHIP" => Ok(Choices::TAILWHIP),
"TAILWIND" => Ok(Choices::TAILWIND),
"TAKEDOWN" => Ok(Choices::TAKEDOWN),
"TAKEHEART" => Ok(Choices::TAKEHEART),
"TARSHOT" => Ok(Choices::TARSHOT),
"TAUNT" => Ok(Choices::TAUNT),
"TEARFULLOOK" => Ok(Choices::TEARFULLOOK),
"TEATIME" => Ok(Choices::TEATIME),
"TECHNOBLAST" => Ok(Choices::TECHNOBLAST),
"TEETERDANCE" => Ok(Choices::TEETERDANCE),
"TELEKINESIS" => Ok(Choices::TELEKINESIS),
"TELEPORT" => Ok(Choices::TELEPORT),
"TERABLAST" => Ok(Choices::TERABLAST),
"TERRAINPULSE" => Ok(Choices::TERRAINPULSE),
"THIEF" => Ok(Choices::THIEF),
"THOUSANDARROWS" => Ok(Choices::THOUSANDARROWS),
"THOUSANDWAVES" => Ok(Choices::THOUSANDWAVES),
"THRASH" => Ok(Choices::THRASH),
"THROATCHOP" => Ok(Choices::THROATCHOP),
"THUNDER" => Ok(Choices::THUNDER),
"THUNDERBOLT" => Ok(Choices::THUNDERBOLT),
"THUNDERCAGE" => Ok(Choices::THUNDERCAGE),
"THUNDERFANG" => Ok(Choices::THUNDERFANG),
"THUNDEROUSKICK" => Ok(Choices::THUNDEROUSKICK),
"THUNDERPUNCH" => Ok(Choices::THUNDERPUNCH),
"THUNDERSHOCK" => Ok(Choices::THUNDERSHOCK),
"THUNDERWAVE" => Ok(Choices::THUNDERWAVE),
"TICKLE" => Ok(Choices::TICKLE),
"TIDYUP" => Ok(Choices::TIDYUP),
"TOPSYTURVY" => Ok(Choices::TOPSYTURVY),
"TORCHSONG" => Ok(Choices::TORCHSONG),
"TORMENT" => Ok(Choices::TORMENT),
"TOXIC" => Ok(Choices::TOXIC),
"TOXICSPIKES" => Ok(Choices::TOXICSPIKES),
"TOXICTHREAD" => Ok(Choices::TOXICTHREAD),
"TRAILBLAZE" => Ok(Choices::TRAILBLAZE),
"TRANSFORM" => Ok(Choices::TRANSFORM),
"TRIATTACK" => Ok(Choices::TRIATTACK),
"TRICK" => Ok(Choices::TRICK),
"TRICKORTREAT" => Ok(Choices::TRICKORTREAT),
"TRICKROOM" => Ok(Choices::TRICKROOM),
"TRIPLEARROWS" => Ok(Choices::TRIPLEARROWS),
"TRIPLEAXEL" => Ok(Choices::TRIPLEAXEL),
"TRIPLEDIVE" => Ok(Choices::TRIPLEDIVE),
"TRIPLEKICK" => Ok(Choices::TRIPLEKICK),
"TROPKICK" => Ok(Choices::TROPKICK),
"TRUMPCARD" => Ok(Choices::TRUMPCARD),
"TWINBEAM" => Ok(Choices::TWINBEAM),
"TWINEEDLE" => Ok(Choices::TWINEEDLE),
"TWISTER" => Ok(Choices::TWISTER),
"UPROAR" => Ok(Choices::UPROAR),
"UTURN" => Ok(Choices::UTURN),
"VACUUMWAVE" => Ok(Choices::VACUUMWAVE),
"VCREATE" => Ok(Choices::VCREATE),
"VEEVEEVOLLEY" => Ok(Choices::VEEVEEVOLLEY),
"VENOMDRENCH" => Ok(Choices::VENOMDRENCH),
"VENOSHOCK" => Ok(Choices::VENOSHOCK),
"VICTORYDANCE" => Ok(Choices::VICTORYDANCE),
"VINEWHIP" => Ok(Choices::VINEWHIP),
"VISEGRIP" => Ok(Choices::VISEGRIP),
"VITALTHROW" => Ok(Choices::VITALTHROW),
"VOLTSWITCH" => Ok(Choices::VOLTSWITCH),
"VOLTTACKLE" => Ok(Choices::VOLTTACKLE),
"WAKEUPSLAP" => Ok(Choices::WAKEUPSLAP),
"WATERFALL" => Ok(Choices::WATERFALL),
"WATERGUN" => Ok(Choices::WATERGUN),
"WATERPLEDGE" => Ok(Choices::WATERPLEDGE),
"WATERPULSE" => Ok(Choices::WATERPULSE),
"WATERSHURIKEN" => Ok(Choices::WATERSHURIKEN),
"WATERSPORT" => Ok(Choices::WATERSPORT),
"WATERSPOUT" => Ok(Choices::WATERSPOUT),
"WAVECRASH" => Ok(Choices::WAVECRASH),
"WEATHERBALL" => Ok(Choices::WEATHERBALL),
"WHIRLPOOL" => Ok(Choices::WHIRLPOOL),
"WHIRLWIND" => Ok(Choices::WHIRLWIND),
"WICKEDBLOW" => Ok(Choices::WICKEDBLOW),
"WICKEDTORQUE" => Ok(Choices::WICKEDTORQUE),
"WIDEGUARD" => Ok(Choices::WIDEGUARD),
"WILDBOLTSTORM" => Ok(Choices::WILDBOLTSTORM),
"WILDCHARGE" => Ok(Choices::WILDCHARGE),
"WILLOWISP" => Ok(Choices::WILLOWISP),
"WINGATTACK" => Ok(Choices::WINGATTACK),
"WISH" => Ok(Choices::WISH),
"WITHDRAW" => Ok(Choices::WITHDRAW),
"WONDERROOM" => Ok(Choices::WONDERROOM),
"WOODHAMMER" => Ok(Choices::WOODHAMMER),
"WORKUP" => Ok(Choices::WORKUP),
"WORRYSEED" => Ok(Choices::WORRYSEED),
"WRAP" => Ok(Choices::WRAP),
"WRINGOUT" => Ok(Choices::WRINGOUT),
"XSCISSOR" => Ok(Choices::XSCISSOR),
"YAWN" => Ok(Choices::YAWN),
"ZAPCANNON" => Ok(Choices::ZAPCANNON),
"ZENHEADBUTT" => Ok(Choices::ZENHEADBUTT),
"ZINGZAP" => Ok(Choices::ZINGZAP),
"ZIPPYZAP" => Ok(Choices::ZIPPYZAP),
_ => Err(()),
}
}
}
impl fmt::Display for Choices {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{:?}", self)
}
}
impl FromStr for Abilities {
type Err = ();
fn from_str(input: &str) -> Result<Self, Self::Err> {
match input.to_uppercase().as_str() {
"RIPEN" => Ok(Abilities::RIPEN),
"TANGLEDFEET" => Ok(Abilities::TANGLEDFEET),
"DRAGONSMAW" => Ok(Abilities::DRAGONSMAW),
"CLEARBODY" => Ok(Abilities::CLEARBODY),
"GALVANIZE" => Ok(Abilities::GALVANIZE),
"VITALSPIRIT" => Ok(Abilities::VITALSPIRIT),
"AERILATE" => Ok(Abilities::AERILATE),
"DEFIANT" => Ok(Abilities::DEFIANT),
"CUTECHARM" => Ok(Abilities::CUTECHARM),
"NEUROFORCE" => Ok(Abilities::NEUROFORCE),
"SOUNDPROOF" => Ok(Abilities::SOUNDPROOF),
"RKSSYSTEM" => Ok(Abilities::RKSSYSTEM),
"POISONPOINT" => Ok(Abilities::POISONPOINT),
"STAKEOUT" => Ok(Abilities::STAKEOUT),
"UNNERVE" => Ok(Abilities::UNNERVE),
"ROCKHEAD" => Ok(Abilities::ROCKHEAD),
"AURABREAK" => Ok(Abilities::AURABREAK),
"MIMICRY" => Ok(Abilities::MIMICRY),
"BULLETPROOF" => Ok(Abilities::BULLETPROOF),
"POWEROFALCHEMY" => Ok(Abilities::POWEROFALCHEMY),
"TECHNICIAN" => Ok(Abilities::TECHNICIAN),
"MULTISCALE" => Ok(Abilities::MULTISCALE),
"ARENATRAP" => Ok(Abilities::ARENATRAP),
"BATTLEBOND" => Ok(Abilities::BATTLEBOND),
"DISGUISE" => Ok(Abilities::DISGUISE),
"EARLYBIRD" => Ok(Abilities::EARLYBIRD),
"LIGHTNINGROD" => Ok(Abilities::LIGHTNINGROD),
"MAGICIAN" => Ok(Abilities::MAGICIAN),
"REFRIGERATE" => Ok(Abilities::REFRIGERATE),
"FRIENDGUARD" => Ok(Abilities::FRIENDGUARD),
"NOABILITY" => Ok(Abilities::NOABILITY),
"GULPMISSILE" => Ok(Abilities::GULPMISSILE),
"POWERCONSTRUCT" => Ok(Abilities::POWERCONSTRUCT),
"FORECAST" => Ok(Abilities::FORECAST),
"PRANKSTER" => Ok(Abilities::PRANKSTER),
"PROTEAN" => Ok(Abilities::PROTEAN),
"ASONEGLASTRIER" => Ok(Abilities::ASONEGLASTRIER),
"SHADOWTAG" => Ok(Abilities::SHADOWTAG),
"SKILLLINK" => Ok(Abilities::SKILLLINK),
"INTREPIDSWORD" => Ok(Abilities::INTREPIDSWORD),
"SOULHEART" => Ok(Abilities::SOULHEART),
"SWIFTSWIM" => Ok(Abilities::SWIFTSWIM),
"EARTHEATER" => Ok(Abilities::EARTHEATER),
"SUPERLUCK" => Ok(Abilities::SUPERLUCK),
"SUPREMEOVERLORD" => Ok(Abilities::SUPREMEOVERLORD),
"INSOMNIA" => Ok(Abilities::INSOMNIA),
"DANCER" => Ok(Abilities::DANCER),
"STEAMENGINE" => Ok(Abilities::STEAMENGINE),
"ANGERPOINT" => Ok(Abilities::ANGERPOINT),
"CONTRARY" => Ok(Abilities::CONTRARY),
"MAGMAARMOR" => Ok(Abilities::MAGMAARMOR),
"HUNGERSWITCH" => Ok(Abilities::HUNGERSWITCH),
"RECEIVER" => Ok(Abilities::RECEIVER),
"ZENMODE" => Ok(Abilities::ZENMODE),
"EMERGENCYEXIT" => Ok(Abilities::EMERGENCYEXIT),
"ILLUSION" => Ok(Abilities::ILLUSION),
"WEAKARMOR" => Ok(Abilities::WEAKARMOR),
"DROUGHT" => Ok(Abilities::DROUGHT),
"INNARDSOUT" => Ok(Abilities::INNARDSOUT),
"SHIELDSDOWN" => Ok(Abilities::SHIELDSDOWN),
"ADAPTABILITY" => Ok(Abilities::ADAPTABILITY),
"CORROSION" => Ok(Abilities::CORROSION),
"LONGREACH" => Ok(Abilities::LONGREACH),
"PUREPOWER" => Ok(Abilities::PUREPOWER),
"TINTEDLENS" => Ok(Abilities::TINTEDLENS),
"QUEENLYMAJESTY" => Ok(Abilities::QUEENLYMAJESTY),
"DESOLATELAND" => Ok(Abilities::DESOLATELAND),
"MOXIE" => Ok(Abilities::MOXIE),
"SAPSIPPER" => Ok(Abilities::SAPSIPPER),
"SLUSHRUSH" => Ok(Abilities::SLUSHRUSH),
"BIGPECKS" => Ok(Abilities::BIGPECKS),
"STALL" => Ok(Abilities::STALL),
"WHITESMOKE" => Ok(Abilities::WHITESMOKE),
"FLAREBOOST" => Ok(Abilities::FLAREBOOST),
"SHADOWSHIELD" => Ok(Abilities::SHADOWSHIELD),
"LIQUIDVOICE" => Ok(Abilities::LIQUIDVOICE),
"MISTYSURGE" => Ok(Abilities::MISTYSURGE),
"MULTITYPE" => Ok(Abilities::MULTITYPE),
"NOGUARD" => Ok(Abilities::NOGUARD),
"TORRENT" => Ok(Abilities::TORRENT),
"DELTASTREAM" => Ok(Abilities::DELTASTREAM),
"KLUTZ" => Ok(Abilities::KLUTZ),
"LIBERO" => Ok(Abilities::LIBERO),
"SERENEGRACE" => Ok(Abilities::SERENEGRACE),
"CURSEDBODY" => Ok(Abilities::CURSEDBODY),
"UNAWARE" => Ok(Abilities::UNAWARE),
"LIGHTMETAL" => Ok(Abilities::LIGHTMETAL),
"MARVELSCALE" => Ok(Abilities::MARVELSCALE),
"TELEPATHY" => Ok(Abilities::TELEPATHY),
"QUICKDRAW" => Ok(Abilities::QUICKDRAW),
"HYPERCUTTER" => Ok(Abilities::HYPERCUTTER),
"SYMBIOSIS" => Ok(Abilities::SYMBIOSIS),
"PLUS" => Ok(Abilities::PLUS),
"MIRRORARMOR" => Ok(Abilities::MIRRORARMOR),
"PASTELVEIL" => Ok(Abilities::PASTELVEIL),
"TOUGHCLAWS" => Ok(Abilities::TOUGHCLAWS),
"EFFECTSPORE" => Ok(Abilities::EFFECTSPORE),
"MUMMY" => Ok(Abilities::MUMMY),
"BADDREAMS" => Ok(Abilities::BADDREAMS),
"MAGICGUARD" => Ok(Abilities::MAGICGUARD),
"SANDSTREAM" => Ok(Abilities::SANDSTREAM),
"POWERSPOT" => Ok(Abilities::POWERSPOT),
"FLAMEBODY" => Ok(Abilities::FLAMEBODY),
"RECKLESS" => Ok(Abilities::RECKLESS),
"PRESSURE" => Ok(Abilities::PRESSURE),
"GOOEY" => Ok(Abilities::GOOEY),
"IMMUNITY" => Ok(Abilities::IMMUNITY),
"LEAFGUARD" => Ok(Abilities::LEAFGUARD),
"HUGEPOWER" => Ok(Abilities::HUGEPOWER),
"SOLARPOWER" => Ok(Abilities::SOLARPOWER),
"SCHOOLING" => Ok(Abilities::SCHOOLING),
"MOTORDRIVE" => Ok(Abilities::MOTORDRIVE),
"ANTICIPATION" => Ok(Abilities::ANTICIPATION),
"MERCILESS" => Ok(Abilities::MERCILESS),
"TRACE" => Ok(Abilities::TRACE),
"NATURALCURE" => Ok(Abilities::NATURALCURE),
"HARVEST" => Ok(Abilities::HARVEST),
"SUCTIONCUPS" => Ok(Abilities::SUCTIONCUPS),
"ICEFACE" => Ok(Abilities::ICEFACE),
"ROUGHSKIN" => Ok(Abilities::ROUGHSKIN),
"WONDERGUARD" => Ok(Abilities::WONDERGUARD),
"WATERVEIL" => Ok(Abilities::WATERVEIL),
"FAIRYAURA" => Ok(Abilities::FAIRYAURA),
"SANDSPIT" => Ok(Abilities::SANDSPIT),
"INTIMIDATE" => Ok(Abilities::INTIMIDATE),
"DAUNTLESSSHIELD" => Ok(Abilities::DAUNTLESSSHIELD),
"AROMAVEIL" => Ok(Abilities::AROMAVEIL),
"AIRLOCK" => Ok(Abilities::AIRLOCK),
"NORMALIZE" => Ok(Abilities::NORMALIZE),
"DARKAURA" => Ok(Abilities::DARKAURA),
"VICTORYSTAR" => Ok(Abilities::VICTORYSTAR),
"GRASSYSURGE" => Ok(Abilities::GRASSYSURGE),
"STURDY" => Ok(Abilities::STURDY),
"PICKPOCKET" => Ok(Abilities::PICKPOCKET),
"ELECTRICSURGE" => Ok(Abilities::ELECTRICSURGE),
"RUNAWAY" => Ok(Abilities::RUNAWAY),
"OBLIVIOUS" => Ok(Abilities::OBLIVIOUS),
"SURGESURFER" => Ok(Abilities::SURGESURFER),
"LEVITATE" => Ok(Abilities::LEVITATE),
"ASONESPECTRIER" => Ok(Abilities::ASONESPECTRIER),
"PICKUP" => Ok(Abilities::PICKUP),
"ICEBODY" => Ok(Abilities::ICEBODY),
"CURIOUSMEDICINE" => Ok(Abilities::CURIOUSMEDICINE),
"FLOWERVEIL" => Ok(Abilities::FLOWERVEIL),
"STATIC" => Ok(Abilities::STATIC),
"WONDERSKIN" => Ok(Abilities::WONDERSKIN),
"OVERGROW" => Ok(Abilities::OVERGROW),
"PROPELLERTAIL" => Ok(Abilities::PROPELLERTAIL),
"THICKFAT" => Ok(Abilities::THICKFAT),
"GLUTTONY" => Ok(Abilities::GLUTTONY),
"KEENEYE" => Ok(Abilities::KEENEYE),
"MOUNTAINEER" => Ok(Abilities::MOUNTAINEER),
"FLASHFIRE" => Ok(Abilities::FLASHFIRE),
"COMPOUNDEYES" => Ok(Abilities::COMPOUNDEYES),
"STEELWORKER" => Ok(Abilities::STEELWORKER),
"COMATOSE" => Ok(Abilities::COMATOSE),
"BALLFETCH" => Ok(Abilities::BALLFETCH),
"DAZZLING" => Ok(Abilities::DAZZLING),
"DOWNLOAD" => Ok(Abilities::DOWNLOAD),
"TRANSISTOR" => Ok(Abilities::TRANSISTOR),
"MOLDBREAKER" => Ok(Abilities::MOLDBREAKER),
"LIQUIDOOZE" => Ok(Abilities::LIQUIDOOZE),
"POISONHEAL" => Ok(Abilities::POISONHEAL),
"PRISMARMOR" => Ok(Abilities::PRISMARMOR),
"SNIPER" => Ok(Abilities::SNIPER),
"STENCH" => Ok(Abilities::STENCH),
"COMPETITIVE" => Ok(Abilities::COMPETITIVE),
"SWARM" => Ok(Abilities::SWARM),
"STALWART" => Ok(Abilities::STALWART),
"ILLUMINATE" => Ok(Abilities::ILLUMINATE),
"TURBOBLAZE" => Ok(Abilities::TURBOBLAZE),
"GORILLATACTICS" => Ok(Abilities::GORILLATACTICS),
"SPEEDBOOST" => Ok(Abilities::SPEEDBOOST),
"HEATPROOF" => Ok(Abilities::HEATPROOF),
"SNOWCLOAK" => Ok(Abilities::SNOWCLOAK),
"TERAVOLT" => Ok(Abilities::TERAVOLT),
"CHILLINGNEIGH" => Ok(Abilities::CHILLINGNEIGH),
"SHIELDDUST" => Ok(Abilities::SHIELDDUST),
"RIVALRY" => Ok(Abilities::RIVALRY),
"PRIMORDIALSEA" => Ok(Abilities::PRIMORDIALSEA),
"SCREENCLEANER" => Ok(Abilities::SCREENCLEANER),
"MAGNETPULL" => Ok(Abilities::MAGNETPULL),
"HONEYGATHER" => Ok(Abilities::HONEYGATHER),
"COTTONDOWN" => Ok(Abilities::COTTONDOWN),
"GRASSPELT" => Ok(Abilities::GRASSPELT),
"BATTLEARMOR" => Ok(Abilities::BATTLEARMOR),
"BEASTBOOST" => Ok(Abilities::BEASTBOOST),
"BERSERK" => Ok(Abilities::BERSERK),
"MINUS" => Ok(Abilities::MINUS),
"RAINDISH" => Ok(Abilities::RAINDISH),
"SYNCHRONIZE" => Ok(Abilities::SYNCHRONIZE),
"FILTER" => Ok(Abilities::FILTER),
"TRUANT" => Ok(Abilities::TRUANT),
"FURCOAT" => Ok(Abilities::FURCOAT),
"FULLMETALBODY" => Ok(Abilities::FULLMETALBODY),
"REGENERATOR" => Ok(Abilities::REGENERATOR),
"FOREWARN" => Ok(Abilities::FOREWARN),
"IRONBARBS" => Ok(Abilities::IRONBARBS),
"STAMINA" => Ok(Abilities::STAMINA),
"SANDRUSH" => Ok(Abilities::SANDRUSH),
"COLORCHANGE" => Ok(Abilities::COLORCHANGE),
"BLAZE" => Ok(Abilities::BLAZE),
"ANALYTIC" => Ok(Abilities::ANALYTIC),
"TANGLINGHAIR" => Ok(Abilities::TANGLINGHAIR),
"CLOUDNINE" => Ok(Abilities::CLOUDNINE),
"STEELYSPIRIT" => Ok(Abilities::STEELYSPIRIT),
"QUICKFEET" => Ok(Abilities::QUICKFEET),
"MAGICBOUNCE" => Ok(Abilities::MAGICBOUNCE),
"MEGALAUNCHER" => Ok(Abilities::MEGALAUNCHER),
"HEAVYMETAL" => Ok(Abilities::HEAVYMETAL),
"STORMDRAIN" => Ok(Abilities::STORMDRAIN),
"PIXILATE" => Ok(Abilities::PIXILATE),
"WATERCOMPACTION" => Ok(Abilities::WATERCOMPACTION),
"JUSTIFIED" => Ok(Abilities::JUSTIFIED),
"SLOWSTART" => Ok(Abilities::SLOWSTART),
"SNOWWARNING" => Ok(Abilities::SNOWWARNING),
"FLOWERGIFT" => Ok(Abilities::FLOWERGIFT),
"SHEDSKIN" => Ok(Abilities::SHEDSKIN),
"WIMPOUT" => Ok(Abilities::WIMPOUT),
"ICESCALES" => Ok(Abilities::ICESCALES),
"INFILTRATOR" => Ok(Abilities::INFILTRATOR),
"LIMBER" => Ok(Abilities::LIMBER),
"PSYCHICSURGE" => Ok(Abilities::PSYCHICSURGE),
"DEFEATIST" => Ok(Abilities::DEFEATIST),
"WATERABSORB" => Ok(Abilities::WATERABSORB),
"IMPOSTER" => Ok(Abilities::IMPOSTER),
"DRYSKIN" => Ok(Abilities::DRYSKIN),
"FLUFFY" => Ok(Abilities::FLUFFY),
"UNBURDEN" => Ok(Abilities::UNBURDEN),
"CHEEKPOUCH" => Ok(Abilities::CHEEKPOUCH),
"STANCECHANGE" => Ok(Abilities::STANCECHANGE),
"MOODY" => Ok(Abilities::MOODY),
"ROCKYPAYLOAD" => Ok(Abilities::ROCKYPAYLOAD),
"PUNKROCK" => Ok(Abilities::PUNKROCK),
"SANDVEIL" => Ok(Abilities::SANDVEIL),
"PARENTALBOND" => Ok(Abilities::PARENTALBOND),
"STRONGJAW" => Ok(Abilities::STRONGJAW),
"BATTERY" => Ok(Abilities::BATTERY),
"HEALER" => Ok(Abilities::HEALER),
"STEADFAST" => Ok(Abilities::STEADFAST),
"DAMP" => Ok(Abilities::DAMP),
"PERISHBODY" => Ok(Abilities::PERISHBODY),
"TRIAGE" => Ok(Abilities::TRIAGE),
"SHEERFORCE" => Ok(Abilities::SHEERFORCE),
"OWNTEMPO" => Ok(Abilities::OWNTEMPO),
"FRISK" => Ok(Abilities::FRISK),
"VOLTABSORB" => Ok(Abilities::VOLTABSORB),
"GALEWINGS" => Ok(Abilities::GALEWINGS),
"AFTERMATH" => Ok(Abilities::AFTERMATH),
"STICKYHOLD" => Ok(Abilities::STICKYHOLD),
"GRIMNEIGH" => Ok(Abilities::GRIMNEIGH),
"IRONFIST" => Ok(Abilities::IRONFIST),
"REBOUND" => Ok(Abilities::REBOUND),
"UNSEENFIST" => Ok(Abilities::UNSEENFIST),
"SOLIDROCK" => Ok(Abilities::SOLIDROCK),
"HUSTLE" => Ok(Abilities::HUSTLE),
"HYDRATION" => Ok(Abilities::HYDRATION),
"SCRAPPY" => Ok(Abilities::SCRAPPY),
"OVERCOAT" => Ok(Abilities::OVERCOAT),
"NEUTRALIZINGGAS" => Ok(Abilities::NEUTRALIZINGGAS),
"SWEETVEIL" => Ok(Abilities::SWEETVEIL),
"DRIZZLE" => Ok(Abilities::DRIZZLE),
"INNERFOCUS" => Ok(Abilities::INNERFOCUS),
"POISONTOUCH" => Ok(Abilities::POISONTOUCH),
"WANDERINGSPIRIT" => Ok(Abilities::WANDERINGSPIRIT),
"GUTS" => Ok(Abilities::GUTS),
"SHELLARMOR" => Ok(Abilities::SHELLARMOR),
"RATTLED" => Ok(Abilities::RATTLED),
"WATERBUBBLE" => Ok(Abilities::WATERBUBBLE),
"SANDFORCE" => Ok(Abilities::SANDFORCE),
"TOXICBOOST" => Ok(Abilities::TOXICBOOST),
"PERSISTENT" => Ok(Abilities::PERSISTENT),
"CHLOROPHYLL" => Ok(Abilities::CHLOROPHYLL),
"SIMPLE" => Ok(Abilities::SIMPLE),
"NONE" => Ok(Abilities::NONE),
"PURIFYINGSALT" => Ok(Abilities::PURIFYINGSALT),
_ => Err(()),
}
}
}
impl fmt::Display for Abilities {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{:?}", self)
}
}
impl FromStr for Items {
type Err = ();
fn from_str(input: &str) -> Result<Self, Self::Err> {
match input.to_uppercase().as_str() {
"NONE" => Ok(Items::NONE),
"UNKNOWNITEM" => Ok(Items::UNKNOWNITEM),
"ABSORBBULB" => Ok(Items::ABSORBBULB),
"ADAMANTORB" => Ok(Items::ADAMANTORB),
"AIRBALLOON" => Ok(Items::AIRBALLOON),
"ASSAULTVEST" => Ok(Items::ASSAULTVEST),
"BABIRIBERRY" => Ok(Items::BABIRIBERRY),
"BLACKBELT" => Ok(Items::BLACKBELT),
"BLACKSLUDGE" => Ok(Items::BLACKSLUDGE),
"BLACKGLASSES" => Ok(Items::BLACKGLASSES),
"BLANKPLATE" => Ok(Items::BLANKPLATE),
"CELLBATTERY" => Ok(Items::CELLBATTERY),
"CHARCOAL" => Ok(Items::CHARCOAL),
"CHARTIBERRY" => Ok(Items::CHARTIBERRY),
"CHILANBERRY" => Ok(Items::CHILANBERRY),
"CHOICEBAND" => Ok(Items::CHOICEBAND),
"CHOICESPECS" => Ok(Items::CHOICESPECS),
"CHOICESCARF" => Ok(Items::CHOICESCARF),
"CHOPLEBERRY" => Ok(Items::CHOPLEBERRY),
"COBABERRY" => Ok(Items::COBABERRY),
"COLBURBERRY" => Ok(Items::COLBURBERRY),
"CUSTAPBERRY" => Ok(Items::CUSTAPBERRY),
"DRAGONFANG" => Ok(Items::DRAGONFANG),
"DREADPLATE" => Ok(Items::DREADPLATE),
"EARTHPLATE" => Ok(Items::EARTHPLATE),
"ELECTRICSEED" => Ok(Items::ELECTRICSEED),
"EXPERTBELT" => Ok(Items::EXPERTBELT),
"EVIOLITE" => Ok(Items::EVIOLITE),
"FAIRYFEATHER" => Ok(Items::FAIRYFEATHER),
"FISTPLATE" => Ok(Items::FISTPLATE),
"FLAMEORB" => Ok(Items::FLAMEORB),
"GRASSYSEED" => Ok(Items::GRASSYSEED),
"HABANBERRY" => Ok(Items::HABANBERRY),
"KASIBBERRY" => Ok(Items::KASIBBERRY),
"KEBIABERRY" => Ok(Items::KEBIABERRY),
"LEFTOVERS" => Ok(Items::LEFTOVERS),
"LIFEORB" => Ok(Items::LIFEORB),
"LUSTROUSORB" => Ok(Items::LUSTROUSORB),
"METALCOAT" => Ok(Items::METALCOAT),
"MISTYSEED" => Ok(Items::MISTYSEED),
"MUSCLEBAND" => Ok(Items::MUSCLEBAND),
"MYSTICWATER" => Ok(Items::MYSTICWATER),
"NEVERMELTICE" => Ok(Items::NEVERMELTICE),
"OCCABERRY" => Ok(Items::OCCABERRY),
"ODDINCENSE" => Ok(Items::ODDINCENSE),
"PASSHOBERRY" => Ok(Items::PASSHOBERRY),
"PAYAPABERRY" => Ok(Items::PAYAPABERRY),
"POISONBARB" => Ok(Items::POISONBARB),
"POWERHERB" => Ok(Items::POWERHERB),
"PSYCHICSEED" => Ok(Items::PSYCHICSEED),
"PUNCHINGGLOVE" => Ok(Items::PUNCHINGGLOVE),
"RINDOBERRY" => Ok(Items::RINDOBERRY),
"ROSELIBERRY" => Ok(Items::ROSELIBERRY),
"ROCKYHELMET" => Ok(Items::ROCKYHELMET),
"SEAINCENSE" => Ok(Items::SEAINCENSE),
"SHARPBEAK" => Ok(Items::SHARPBEAK),
"SHELLBELL" => Ok(Items::SHELLBELL),
"SHUCABERRY" => Ok(Items::SHUCABERRY),
"SILKSCARF" => Ok(Items::SILKSCARF),
"SILVERPOWDER" => Ok(Items::SILVERPOWDER),
"SKYPLATE" => Ok(Items::SKYPLATE),
"SOFTSAND" => Ok(Items::SOFTSAND),
"SOULDEW" => Ok(Items::SOULDEW),
"GRISEOUSORB" => Ok(Items::GRISEOUSORB),
"TANGABERRY" => Ok(Items::TANGABERRY),
"THROATSPRAY" => Ok(Items::THROATSPRAY),
"THICKCLUB" => Ok(Items::THICKCLUB),
"TOXICORB" => Ok(Items::TOXICORB),
"TOXICPLATE" => Ok(Items::TOXICPLATE),
"TWISTEDSPOON" => Ok(Items::TWISTEDSPOON),
"WACANBERRY" => Ok(Items::WACANBERRY),
"WAVEINCENSE" => Ok(Items::WAVEINCENSE),
"WEAKNESSPOLICY" => Ok(Items::WEAKNESSPOLICY),
"WISEGLASSES" => Ok(Items::WISEGLASSES),
"BLUNDERPOLICY" => Ok(Items::BLUNDERPOLICY),
"HEAVYDUTYBOOTS" => Ok(Items::HEAVYDUTYBOOTS),
"CLEARAMULET" => Ok(Items::CLEARAMULET),
"PROTECTIVEPADS" => Ok(Items::PROTECTIVEPADS),
"SHEDSHELL" => Ok(Items::SHEDSHELL),
"YACHEBERRY" => Ok(Items::YACHEBERRY),
"STONEPLATE" => Ok(Items::STONEPLATE),
"INSECTPLATE" => Ok(Items::INSECTPLATE),
"SPOOKYPLATE" => Ok(Items::SPOOKYPLATE),
"IRONPLATE" => Ok(Items::IRONPLATE),
"FLAMEPLATE" => Ok(Items::FLAMEPLATE),
"SPLASHPLATE" => Ok(Items::SPLASHPLATE),
"MEADOWPLATE" => Ok(Items::MEADOWPLATE),
"ZAPPLATE" => Ok(Items::ZAPPLATE),
"MINDPLATE" => Ok(Items::MINDPLATE),
"ICICLEPLATE" => Ok(Items::ICICLEPLATE),
"DRACOPLATE" => Ok(Items::DRACOPLATE),
"PIXIEPLATE" => Ok(Items::PIXIEPLATE),
"LIGHTBALL" => Ok(Items::LIGHTBALL),
"FOCUSSASH" => Ok(Items::FOCUSSASH),
"LUMBERRY" => Ok(Items::LUMBERRY),
"SITRUSBERRY" => Ok(Items::SITRUSBERRY),
"NORMALGEM" => Ok(Items::NORMALGEM),
"BUGGEM" => Ok(Items::BUGGEM),
"ELECTRICGEM" => Ok(Items::ELECTRICGEM),
"FIGHTINGGEM" => Ok(Items::FIGHTINGGEM),
"GHOSTGEM" => Ok(Items::GHOSTGEM),
"PSYCHICGEM" => Ok(Items::PSYCHICGEM),
"FLYINGGEM" => Ok(Items::FLYINGGEM),
"STEELGEM" => Ok(Items::STEELGEM),
"ICEGEM" => Ok(Items::ICEGEM),
"POISONGEM" => Ok(Items::POISONGEM),
"FIREGEM" => Ok(Items::FIREGEM),
"DRAGONGEM" => Ok(Items::DRAGONGEM),
"GROUNDGEM" => Ok(Items::GROUNDGEM),
"WATERGEM" => Ok(Items::WATERGEM),
"DARKGEM" => Ok(Items::DARKGEM),
"ROCKGEM" => Ok(Items::ROCKGEM),
"GRASSGEM" => Ok(Items::GRASSGEM),
"FAIRYGEM" => Ok(Items::FAIRYGEM),
_ => Ok(Items::UNKNOWNITEM),
}
}
}
impl fmt::Display for Items {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{:?}", self)
}
}