use super::EnumStr;
use enum_map::Enum;
use serde::{Deserialize, Serialize};
#[derive(Enum, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize, Debug)]
pub enum UnitPromotion {
HealInstantly,
AccuracyI,
AccuracyII,
AccuracyIII,
BarrageI,
BarrageII,
BarrageIII,
Volley,
ExtendedRange,
IndirectFire,
ShockI,
ShockII,
ShockIII,
DrillI,
DrillII,
DrillIII,
Charge,
Besiege,
FormationI,
FormationII,
Blitz,
Woodsman,
Amphibious,
Medic,
MedicII,
ScoutingI,
ScoutingII,
ScoutingIII,
SurvivalismI,
SurvivalismII,
SurvivalismIII,
BoardingPartyI,
BoardingPartyII,
BoardingPartyIII,
CoastalRaiderI,
CoastalRaiderII,
CoastalRaiderIII,
LandingParty,
TargetingI,
TargetingII,
TargetingIII,
WolfpackI,
WolfpackII,
WolfpackIII,
ArmorPlatingI,
ArmorPlatingII,
ArmorPlatingIII,
FlightDeckI,
FlightDeckII,
FlightDeckIII,
Supply,
SiegeI,
SiegeII,
SiegeIII,
Evasion,
InterceptionI,
InterceptionII,
InterceptionIII,
AirTargetingI,
AirTargetingII,
Sortie,
OperationalRange,
AirRepair,
MobilityI,
MobilityII,
AntiArmorI,
AntiArmorII,
CoverI,
CoverII,
March,
Mobility,
Sentry,
Logistics,
AmbushI,
AmbushII,
BombardmentI,
BombardmentII,
BombardmentIII,
Morale,
GreatGeneralsI,
GreatGeneralsII,
QuickStudy,
HakaWarDance,
Rejuvenation,
SlingerWithdraw,
IgnoreTerrainCost,
PictishCourage,
HomeSweetHome,
MohawkWarriorAbility,
JaguarAbility,
PersianImmortalAbility,
ConquistadorAbility,
JanissaryAbility,
SipahiAbility,
CossackAbility,
HussarAbility,
NorwegianSkiInfantryAbility,
HakkapeliittaAbility,
ZeroAbility,
}
impl EnumStr for UnitPromotion {
fn as_str(&self) -> &'static str {
match self {
UnitPromotion::HealInstantly => "Heal Instantly",
UnitPromotion::AccuracyI => "Accuracy I",
UnitPromotion::AccuracyII => "Accuracy II",
UnitPromotion::AccuracyIII => "Accuracy III",
UnitPromotion::BarrageI => "Barrage I",
UnitPromotion::BarrageII => "Barrage II",
UnitPromotion::BarrageIII => "Barrage III",
UnitPromotion::Volley => "Volley",
UnitPromotion::ExtendedRange => "Extended Range",
UnitPromotion::IndirectFire => "Indirect Fire",
UnitPromotion::ShockI => "Shock I",
UnitPromotion::ShockII => "Shock II",
UnitPromotion::ShockIII => "Shock III",
UnitPromotion::DrillI => "Drill I",
UnitPromotion::DrillII => "Drill II",
UnitPromotion::DrillIII => "Drill III",
UnitPromotion::Charge => "Charge",
UnitPromotion::Besiege => "Besiege",
UnitPromotion::FormationI => "Formation I",
UnitPromotion::FormationII => "Formation II",
UnitPromotion::Blitz => "Blitz",
UnitPromotion::Woodsman => "Woodsman",
UnitPromotion::Amphibious => "Amphibious",
UnitPromotion::Medic => "Medic",
UnitPromotion::MedicII => "Medic II",
UnitPromotion::ScoutingI => "Scouting I",
UnitPromotion::ScoutingII => "Scouting II",
UnitPromotion::ScoutingIII => "Scouting III",
UnitPromotion::SurvivalismI => "Survivalism I",
UnitPromotion::SurvivalismII => "Survivalism II",
UnitPromotion::SurvivalismIII => "Survivalism III",
UnitPromotion::BoardingPartyI => "Boarding Party I",
UnitPromotion::BoardingPartyII => "Boarding Party II",
UnitPromotion::BoardingPartyIII => "Boarding Party III",
UnitPromotion::CoastalRaiderI => "Coastal Raider I",
UnitPromotion::CoastalRaiderII => "Coastal Raider II",
UnitPromotion::CoastalRaiderIII => "Coastal Raider III",
UnitPromotion::LandingParty => "Landing Party",
UnitPromotion::TargetingI => "Targeting I",
UnitPromotion::TargetingII => "Targeting II",
UnitPromotion::TargetingIII => "Targeting III",
UnitPromotion::WolfpackI => "Wolfpack I",
UnitPromotion::WolfpackII => "Wolfpack II",
UnitPromotion::WolfpackIII => "Wolfpack III",
UnitPromotion::ArmorPlatingI => "Armor Plating I",
UnitPromotion::ArmorPlatingII => "Armor Plating II",
UnitPromotion::ArmorPlatingIII => "Armor Plating III",
UnitPromotion::FlightDeckI => "Flight Deck I",
UnitPromotion::FlightDeckII => "Flight Deck II",
UnitPromotion::FlightDeckIII => "Flight Deck III",
UnitPromotion::Supply => "Supply",
UnitPromotion::SiegeI => "Siege I",
UnitPromotion::SiegeII => "Siege II",
UnitPromotion::SiegeIII => "Siege III",
UnitPromotion::Evasion => "Evasion",
UnitPromotion::InterceptionI => "Interception I",
UnitPromotion::InterceptionII => "Interception II",
UnitPromotion::InterceptionIII => "Interception III",
UnitPromotion::AirTargetingI => "Air Targeting I",
UnitPromotion::AirTargetingII => "Air Targeting II",
UnitPromotion::Sortie => "Sortie",
UnitPromotion::OperationalRange => "Operational Range",
UnitPromotion::AirRepair => "Air Repair",
UnitPromotion::MobilityI => "Mobility I",
UnitPromotion::MobilityII => "Mobility II",
UnitPromotion::AntiArmorI => "Anti-Armor I",
UnitPromotion::AntiArmorII => "Anti-Armor II",
UnitPromotion::CoverI => "Cover I",
UnitPromotion::CoverII => "Cover II",
UnitPromotion::March => "March",
UnitPromotion::Mobility => "Mobility",
UnitPromotion::Sentry => "Sentry",
UnitPromotion::Logistics => "Logistics",
UnitPromotion::AmbushI => "Ambush I",
UnitPromotion::AmbushII => "Ambush II",
UnitPromotion::BombardmentI => "Bombardment I",
UnitPromotion::BombardmentII => "Bombardment II",
UnitPromotion::BombardmentIII => "Bombardment III",
UnitPromotion::Morale => "Morale",
UnitPromotion::GreatGeneralsI => "Great Generals I",
UnitPromotion::GreatGeneralsII => "Great Generals II",
UnitPromotion::QuickStudy => "Quick Study",
UnitPromotion::HakaWarDance => "Haka War Dance",
UnitPromotion::Rejuvenation => "Rejuvenation",
UnitPromotion::SlingerWithdraw => "Slinger Withdraw",
UnitPromotion::IgnoreTerrainCost => "Ignore terrain cost",
UnitPromotion::PictishCourage => "Pictish Courage",
UnitPromotion::HomeSweetHome => "Home Sweet Home",
UnitPromotion::MohawkWarriorAbility => "[Mohawk Warrior] ability",
UnitPromotion::JaguarAbility => "[Jaguar] ability",
UnitPromotion::PersianImmortalAbility => "[Persian Immortal] ability",
UnitPromotion::ConquistadorAbility => "[Conquistador] ability",
UnitPromotion::JanissaryAbility => "[Janissary] ability",
UnitPromotion::SipahiAbility => "[Sipahi] ability",
UnitPromotion::CossackAbility => "[Cossack] ability",
UnitPromotion::HussarAbility => "[Hussar] ability",
UnitPromotion::NorwegianSkiInfantryAbility => "[Norwegian Ski Infantry] ability",
UnitPromotion::HakkapeliittaAbility => "[Hakkapeliitta] ability",
UnitPromotion::ZeroAbility => "[Zero] ability",
}
}
fn from_str(s: &str) -> Self {
match s {
"Heal Instantly" => UnitPromotion::HealInstantly,
"Accuracy I" => UnitPromotion::AccuracyI,
"Accuracy II" => UnitPromotion::AccuracyII,
"Accuracy III" => UnitPromotion::AccuracyIII,
"Barrage I" => UnitPromotion::BarrageI,
"Barrage II" => UnitPromotion::BarrageII,
"Barrage III" => UnitPromotion::BarrageIII,
"Volley" => UnitPromotion::Volley,
"Extended Range" => UnitPromotion::ExtendedRange,
"Indirect Fire" => UnitPromotion::IndirectFire,
"Shock I" => UnitPromotion::ShockI,
"Shock II" => UnitPromotion::ShockII,
"Shock III" => UnitPromotion::ShockIII,
"Drill I" => UnitPromotion::DrillI,
"Drill II" => UnitPromotion::DrillII,
"Drill III" => UnitPromotion::DrillIII,
"Charge" => UnitPromotion::Charge,
"Besiege" => UnitPromotion::Besiege,
"Formation I" => UnitPromotion::FormationI,
"Formation II" => UnitPromotion::FormationII,
"Blitz" => UnitPromotion::Blitz,
"Woodsman" => UnitPromotion::Woodsman,
"Amphibious" => UnitPromotion::Amphibious,
"Medic" => UnitPromotion::Medic,
"Medic II" => UnitPromotion::MedicII,
"Scouting I" => UnitPromotion::ScoutingI,
"Scouting II" => UnitPromotion::ScoutingII,
"Scouting III" => UnitPromotion::ScoutingIII,
"Survivalism I" => UnitPromotion::SurvivalismI,
"Survivalism II" => UnitPromotion::SurvivalismII,
"Survivalism III" => UnitPromotion::SurvivalismIII,
"Boarding Party I" => UnitPromotion::BoardingPartyI,
"Boarding Party II" => UnitPromotion::BoardingPartyII,
"Boarding Party III" => UnitPromotion::BoardingPartyIII,
"Coastal Raider I" => UnitPromotion::CoastalRaiderI,
"Coastal Raider II" => UnitPromotion::CoastalRaiderII,
"Coastal Raider III" => UnitPromotion::CoastalRaiderIII,
"Landing Party" => UnitPromotion::LandingParty,
"Targeting I" => UnitPromotion::TargetingI,
"Targeting II" => UnitPromotion::TargetingII,
"Targeting III" => UnitPromotion::TargetingIII,
"Wolfpack I" => UnitPromotion::WolfpackI,
"Wolfpack II" => UnitPromotion::WolfpackII,
"Wolfpack III" => UnitPromotion::WolfpackIII,
"Armor Plating I" => UnitPromotion::ArmorPlatingI,
"Armor Plating II" => UnitPromotion::ArmorPlatingII,
"Armor Plating III" => UnitPromotion::ArmorPlatingIII,
"Flight Deck I" => UnitPromotion::FlightDeckI,
"Flight Deck II" => UnitPromotion::FlightDeckII,
"Flight Deck III" => UnitPromotion::FlightDeckIII,
"Supply" => UnitPromotion::Supply,
"Siege I" => UnitPromotion::SiegeI,
"Siege II" => UnitPromotion::SiegeII,
"Siege III" => UnitPromotion::SiegeIII,
"Evasion" => UnitPromotion::Evasion,
"Interception I" => UnitPromotion::InterceptionI,
"Interception II" => UnitPromotion::InterceptionII,
"Interception III" => UnitPromotion::InterceptionIII,
"Air Targeting I" => UnitPromotion::AirTargetingI,
"Air Targeting II" => UnitPromotion::AirTargetingII,
"Sortie" => UnitPromotion::Sortie,
"Operational Range" => UnitPromotion::OperationalRange,
"Air Repair" => UnitPromotion::AirRepair,
"Mobility I" => UnitPromotion::MobilityI,
"Mobility II" => UnitPromotion::MobilityII,
"Anti-Armor I" => UnitPromotion::AntiArmorI,
"Anti-Armor II" => UnitPromotion::AntiArmorII,
"Cover I" => UnitPromotion::CoverI,
"Cover II" => UnitPromotion::CoverII,
"March" => UnitPromotion::March,
"Mobility" => UnitPromotion::Mobility,
"Sentry" => UnitPromotion::Sentry,
"Logistics" => UnitPromotion::Logistics,
"Ambush I" => UnitPromotion::AmbushI,
"Ambush II" => UnitPromotion::AmbushII,
"Bombardment I" => UnitPromotion::BombardmentI,
"Bombardment II" => UnitPromotion::BombardmentII,
"Bombardment III" => UnitPromotion::BombardmentIII,
"Morale" => UnitPromotion::Morale,
"Great Generals I" => UnitPromotion::GreatGeneralsI,
"Great Generals II" => UnitPromotion::GreatGeneralsII,
"Quick Study" => UnitPromotion::QuickStudy,
"Haka War Dance" => UnitPromotion::HakaWarDance,
"Rejuvenation" => UnitPromotion::Rejuvenation,
"Slinger Withdraw" => UnitPromotion::SlingerWithdraw,
"Ignore terrain cost" => UnitPromotion::IgnoreTerrainCost,
"Pictish Courage" => UnitPromotion::PictishCourage,
"Home Sweet Home" => UnitPromotion::HomeSweetHome,
"[Mohawk Warrior] ability" => UnitPromotion::MohawkWarriorAbility,
"[Jaguar] ability" => UnitPromotion::JaguarAbility,
"[Persian Immortal] ability" => UnitPromotion::PersianImmortalAbility,
"[Conquistador] ability" => UnitPromotion::ConquistadorAbility,
"[Janissary] ability" => UnitPromotion::JanissaryAbility,
"[Sipahi] ability" => UnitPromotion::SipahiAbility,
"[Cossack] ability" => UnitPromotion::CossackAbility,
"[Hussar] ability" => UnitPromotion::HussarAbility,
"[Norwegian Ski Infantry] ability" => UnitPromotion::NorwegianSkiInfantryAbility,
"[Hakkapeliitta] ability" => UnitPromotion::HakkapeliittaAbility,
"[Zero] ability" => UnitPromotion::ZeroAbility,
_ => panic!("Invalid value for {}: {{}}", s),
}
}
}