use super::EnumStr;
use enum_map::Enum;
use serde::{Deserialize, Serialize};
#[derive(Enum, PartialEq, Eq, Clone, Copy, Hash, Serialize, Deserialize, Debug)]
pub enum Unit {
Worker,
Settler,
Scout,
Warrior,
MaoriWarrior,
Jaguar,
Brute,
Archer,
Bowman,
Slinger,
Atlatlist,
Skirmisher,
WorkBoats,
Trireme,
Quinquereme,
Dromon,
Galley,
ChariotArcher,
WarChariot,
HorseArcher,
WarElephant,
Spearman,
Hoplite,
PersianImmortal,
BatteringRam,
PictishWarrior,
Marauder,
Horseman,
CompanionCavalry,
AfricanForestElephant,
Cataphract,
Catapult,
Ballista,
CompositeBowman,
Swordsman,
Legion,
MohawkWarrior,
Pikeman,
Landsknecht,
Galleass,
Knight,
CamelArcher,
Conquistador,
NaresuansElephant,
MandekaluCavalry,
Keshik,
Crossbowman,
ChuKoNu,
Longbowman,
Trebuchet,
Hwacha,
Longswordsman,
Samurai,
Berserker,
Caravel,
TurtleShip,
Musketman,
Musketeer,
Janissary,
Minuteman,
Tercio,
Privateer,
SeaBeggar,
Frigate,
ShipOfTheLine,
Lancer,
Sipahi,
Hakkapeliitta,
Cannon,
GatlingGun,
Rifleman,
NorwegianSkiInfantry,
Carolean,
MehalSefari,
Cavalry,
Cossack,
Hussar,
Ironclad,
Artillery,
Submarine,
GreatWarInfantry,
ForeignLegion,
Triplane,
GreatWarBomber,
Infantry,
Carrier,
Battleship,
MachineGun,
AntiAircraftGun,
Landship,
Destroyer,
Marine,
Fighter,
Zero,
Bomber,
B17,
Paratrooper,
Tank,
Panzer,
AntiTankGun,
AtomicBomb,
RocketArtillery,
MobileSAM,
GuidedMissile,
NuclearMissile,
HelicopterGunship,
NuclearSubmarine,
MechanizedInfantry,
MissileCruiser,
ModernArmor,
JetFighter,
GiantDeathRobot,
StealthBomber,
GreatArtist,
GreatScientist,
GreatMerchant,
GreatEngineer,
GreatProphet,
GreatGeneral,
Khan,
Missionary,
Inquisitor,
SSBooster,
SSCockpit,
SSEngine,
SSStasisChamber,
}
impl EnumStr for Unit {
fn as_str(&self) -> &'static str {
match self {
Unit::Worker => "Worker",
Unit::Settler => "Settler",
Unit::Scout => "Scout",
Unit::Warrior => "Warrior",
Unit::MaoriWarrior => "Maori Warrior",
Unit::Jaguar => "Jaguar",
Unit::Brute => "Brute",
Unit::Archer => "Archer",
Unit::Bowman => "Bowman",
Unit::Slinger => "Slinger",
Unit::Atlatlist => "Atlatlist",
Unit::Skirmisher => "Skirmisher",
Unit::WorkBoats => "Work Boats",
Unit::Trireme => "Trireme",
Unit::Quinquereme => "Quinquereme",
Unit::Dromon => "Dromon",
Unit::Galley => "Galley",
Unit::ChariotArcher => "Chariot Archer",
Unit::WarChariot => "War Chariot",
Unit::HorseArcher => "Horse Archer",
Unit::WarElephant => "War Elephant",
Unit::Spearman => "Spearman",
Unit::Hoplite => "Hoplite",
Unit::PersianImmortal => "Persian Immortal",
Unit::BatteringRam => "Battering Ram",
Unit::PictishWarrior => "Pictish Warrior",
Unit::Marauder => "Marauder",
Unit::Horseman => "Horseman",
Unit::CompanionCavalry => "Companion Cavalry",
Unit::AfricanForestElephant => "African Forest Elephant",
Unit::Cataphract => "Cataphract",
Unit::Catapult => "Catapult",
Unit::Ballista => "Ballista",
Unit::CompositeBowman => "Composite Bowman",
Unit::Swordsman => "Swordsman",
Unit::Legion => "Legion",
Unit::MohawkWarrior => "Mohawk Warrior",
Unit::Pikeman => "Pikeman",
Unit::Landsknecht => "Landsknecht",
Unit::Galleass => "Galleass",
Unit::Knight => "Knight",
Unit::CamelArcher => "Camel Archer",
Unit::Conquistador => "Conquistador",
Unit::NaresuansElephant => "Naresuan's Elephant",
Unit::MandekaluCavalry => "Mandekalu Cavalry",
Unit::Keshik => "Keshik",
Unit::Crossbowman => "Crossbowman",
Unit::ChuKoNu => "Chu-Ko-Nu",
Unit::Longbowman => "Longbowman",
Unit::Trebuchet => "Trebuchet",
Unit::Hwacha => "Hwach'a",
Unit::Longswordsman => "Longswordsman",
Unit::Samurai => "Samurai",
Unit::Berserker => "Berserker",
Unit::Caravel => "Caravel",
Unit::TurtleShip => "Turtle Ship",
Unit::Musketman => "Musketman",
Unit::Musketeer => "Musketeer",
Unit::Janissary => "Janissary",
Unit::Minuteman => "Minuteman",
Unit::Tercio => "Tercio",
Unit::Privateer => "Privateer",
Unit::SeaBeggar => "Sea Beggar",
Unit::Frigate => "Frigate",
Unit::ShipOfTheLine => "Ship of the Line",
Unit::Lancer => "Lancer",
Unit::Sipahi => "Sipahi",
Unit::Hakkapeliitta => "Hakkapeliitta",
Unit::Cannon => "Cannon",
Unit::GatlingGun => "Gatling Gun",
Unit::Rifleman => "Rifleman",
Unit::NorwegianSkiInfantry => "Norwegian Ski Infantry",
Unit::Carolean => "Carolean",
Unit::MehalSefari => "Mehal Sefari",
Unit::Cavalry => "Cavalry",
Unit::Cossack => "Cossack",
Unit::Hussar => "Hussar",
Unit::Ironclad => "Ironclad",
Unit::Artillery => "Artillery",
Unit::Submarine => "Submarine",
Unit::GreatWarInfantry => "Great War Infantry",
Unit::ForeignLegion => "Foreign Legion",
Unit::Triplane => "Triplane",
Unit::GreatWarBomber => "Great War Bomber",
Unit::Infantry => "Infantry",
Unit::Carrier => "Carrier",
Unit::Battleship => "Battleship",
Unit::MachineGun => "Machine Gun",
Unit::AntiAircraftGun => "Anti-Aircraft Gun",
Unit::Landship => "Landship",
Unit::Destroyer => "Destroyer",
Unit::Marine => "Marine",
Unit::Fighter => "Fighter",
Unit::Zero => "Zero",
Unit::Bomber => "Bomber",
Unit::B17 => "B17",
Unit::Paratrooper => "Paratrooper",
Unit::Tank => "Tank",
Unit::Panzer => "Panzer",
Unit::AntiTankGun => "Anti-Tank Gun",
Unit::AtomicBomb => "Atomic Bomb",
Unit::RocketArtillery => "Rocket Artillery",
Unit::MobileSAM => "Mobile SAM",
Unit::GuidedMissile => "Guided Missile",
Unit::NuclearMissile => "Nuclear Missile",
Unit::HelicopterGunship => "Helicopter Gunship",
Unit::NuclearSubmarine => "Nuclear Submarine",
Unit::MechanizedInfantry => "Mechanized Infantry",
Unit::MissileCruiser => "Missile Cruiser",
Unit::ModernArmor => "Modern Armor",
Unit::JetFighter => "Jet Fighter",
Unit::GiantDeathRobot => "Giant Death Robot",
Unit::StealthBomber => "Stealth Bomber",
Unit::GreatArtist => "Great Artist",
Unit::GreatScientist => "Great Scientist",
Unit::GreatMerchant => "Great Merchant",
Unit::GreatEngineer => "Great Engineer",
Unit::GreatProphet => "Great Prophet",
Unit::GreatGeneral => "Great General",
Unit::Khan => "Khan",
Unit::Missionary => "Missionary",
Unit::Inquisitor => "Inquisitor",
Unit::SSBooster => "SS Booster",
Unit::SSCockpit => "SS Cockpit",
Unit::SSEngine => "SS Engine",
Unit::SSStasisChamber => "SS Stasis Chamber",
}
}
fn from_str(s: &str) -> Self {
match s {
"Worker" => Unit::Worker,
"Settler" => Unit::Settler,
"Scout" => Unit::Scout,
"Warrior" => Unit::Warrior,
"Maori Warrior" => Unit::MaoriWarrior,
"Jaguar" => Unit::Jaguar,
"Brute" => Unit::Brute,
"Archer" => Unit::Archer,
"Bowman" => Unit::Bowman,
"Slinger" => Unit::Slinger,
"Atlatlist" => Unit::Atlatlist,
"Skirmisher" => Unit::Skirmisher,
"Work Boats" => Unit::WorkBoats,
"Trireme" => Unit::Trireme,
"Quinquereme" => Unit::Quinquereme,
"Dromon" => Unit::Dromon,
"Galley" => Unit::Galley,
"Chariot Archer" => Unit::ChariotArcher,
"War Chariot" => Unit::WarChariot,
"Horse Archer" => Unit::HorseArcher,
"War Elephant" => Unit::WarElephant,
"Spearman" => Unit::Spearman,
"Hoplite" => Unit::Hoplite,
"Persian Immortal" => Unit::PersianImmortal,
"Battering Ram" => Unit::BatteringRam,
"Pictish Warrior" => Unit::PictishWarrior,
"Marauder" => Unit::Marauder,
"Horseman" => Unit::Horseman,
"Companion Cavalry" => Unit::CompanionCavalry,
"African Forest Elephant" => Unit::AfricanForestElephant,
"Cataphract" => Unit::Cataphract,
"Catapult" => Unit::Catapult,
"Ballista" => Unit::Ballista,
"Composite Bowman" => Unit::CompositeBowman,
"Swordsman" => Unit::Swordsman,
"Legion" => Unit::Legion,
"Mohawk Warrior" => Unit::MohawkWarrior,
"Pikeman" => Unit::Pikeman,
"Landsknecht" => Unit::Landsknecht,
"Galleass" => Unit::Galleass,
"Knight" => Unit::Knight,
"Camel Archer" => Unit::CamelArcher,
"Conquistador" => Unit::Conquistador,
"Naresuan's Elephant" => Unit::NaresuansElephant,
"Mandekalu Cavalry" => Unit::MandekaluCavalry,
"Keshik" => Unit::Keshik,
"Crossbowman" => Unit::Crossbowman,
"Chu-Ko-Nu" => Unit::ChuKoNu,
"Longbowman" => Unit::Longbowman,
"Trebuchet" => Unit::Trebuchet,
"Hwach'a" => Unit::Hwacha,
"Longswordsman" => Unit::Longswordsman,
"Samurai" => Unit::Samurai,
"Berserker" => Unit::Berserker,
"Caravel" => Unit::Caravel,
"Turtle Ship" => Unit::TurtleShip,
"Musketman" => Unit::Musketman,
"Musketeer" => Unit::Musketeer,
"Janissary" => Unit::Janissary,
"Minuteman" => Unit::Minuteman,
"Tercio" => Unit::Tercio,
"Privateer" => Unit::Privateer,
"Sea Beggar" => Unit::SeaBeggar,
"Frigate" => Unit::Frigate,
"Ship of the Line" => Unit::ShipOfTheLine,
"Lancer" => Unit::Lancer,
"Sipahi" => Unit::Sipahi,
"Hakkapeliitta" => Unit::Hakkapeliitta,
"Cannon" => Unit::Cannon,
"Gatling Gun" => Unit::GatlingGun,
"Rifleman" => Unit::Rifleman,
"Norwegian Ski Infantry" => Unit::NorwegianSkiInfantry,
"Carolean" => Unit::Carolean,
"Mehal Sefari" => Unit::MehalSefari,
"Cavalry" => Unit::Cavalry,
"Cossack" => Unit::Cossack,
"Hussar" => Unit::Hussar,
"Ironclad" => Unit::Ironclad,
"Artillery" => Unit::Artillery,
"Submarine" => Unit::Submarine,
"Great War Infantry" => Unit::GreatWarInfantry,
"Foreign Legion" => Unit::ForeignLegion,
"Triplane" => Unit::Triplane,
"Great War Bomber" => Unit::GreatWarBomber,
"Infantry" => Unit::Infantry,
"Carrier" => Unit::Carrier,
"Battleship" => Unit::Battleship,
"Machine Gun" => Unit::MachineGun,
"Anti-Aircraft Gun" => Unit::AntiAircraftGun,
"Landship" => Unit::Landship,
"Destroyer" => Unit::Destroyer,
"Marine" => Unit::Marine,
"Fighter" => Unit::Fighter,
"Zero" => Unit::Zero,
"Bomber" => Unit::Bomber,
"B17" => Unit::B17,
"Paratrooper" => Unit::Paratrooper,
"Tank" => Unit::Tank,
"Panzer" => Unit::Panzer,
"Anti-Tank Gun" => Unit::AntiTankGun,
"Atomic Bomb" => Unit::AtomicBomb,
"Rocket Artillery" => Unit::RocketArtillery,
"Mobile SAM" => Unit::MobileSAM,
"Guided Missile" => Unit::GuidedMissile,
"Nuclear Missile" => Unit::NuclearMissile,
"Helicopter Gunship" => Unit::HelicopterGunship,
"Nuclear Submarine" => Unit::NuclearSubmarine,
"Mechanized Infantry" => Unit::MechanizedInfantry,
"Missile Cruiser" => Unit::MissileCruiser,
"Modern Armor" => Unit::ModernArmor,
"Jet Fighter" => Unit::JetFighter,
"Giant Death Robot" => Unit::GiantDeathRobot,
"Stealth Bomber" => Unit::StealthBomber,
"Great Artist" => Unit::GreatArtist,
"Great Scientist" => Unit::GreatScientist,
"Great Merchant" => Unit::GreatMerchant,
"Great Engineer" => Unit::GreatEngineer,
"Great Prophet" => Unit::GreatProphet,
"Great General" => Unit::GreatGeneral,
"Khan" => Unit::Khan,
"Missionary" => Unit::Missionary,
"Inquisitor" => Unit::Inquisitor,
"SS Booster" => Unit::SSBooster,
"SS Cockpit" => Unit::SSCockpit,
"SS Engine" => Unit::SSEngine,
"SS Stasis Chamber" => Unit::SSStasisChamber,
_ => panic!("Invalid value for {}: {{}}", s),
}
}
}