use failure::Fail;
use std::fmt;
use std::str::FromStr;
#[derive(Clone, Debug, Fail)]
#[fail(display = "Invalid server string '{}'", _0)]
pub struct ServerParseError(String);
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub enum Server {
Adamantoise,
Cactuar,
Faerie,
Gilgamesh,
Jenova,
Midgardsormr,
Sargatanas,
Siren,
Behemoth,
Excalibur,
Exodus,
Famfrit,
Hyperion,
Lamia,
Leviathan,
Ultros,
Balmung,
Brynhildr,
Coeurl,
Diabolos,
Goblin,
Malboro,
Mateus,
Zalera,
Halicarnassus,
Maduin,
Marilith,
Seraph,
Cuchulainn,
Kraken,
Rafflesia,
Golem,
Cerberus,
Louisoix,
Moogle,
Omega,
Phantom,
Ragnarok,
Sagittarius,
Spriggan,
Alpha,
Lich,
Odin,
Phoenix,
Raiden,
Shiva,
Twintania,
Zodiark,
Innocence,
Pixie,
Titania,
Tycoon,
Bismarck,
Ravana,
Sephirot,
Sophia,
Zurvan,
Aegis,
Atomos,
Carbuncle,
Garuda,
Gungnir,
Kujata,
Tonberry,
Typhon,
Alexander,
Bahamut,
Durandal,
Fenrir,
Ifrit,
Ridill,
Tiamat,
Ultima,
Anima,
Asura,
Chocobo,
Hades,
Ixion,
Masamune,
Pandaemonium,
Titan,
Belias,
Mandragora,
Ramuh,
Shinryu,
Unicorn,
Valefor,
Yojimbo,
Zeromus,
}
impl FromStr for Server {
type Err = ServerParseError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match &*s.to_uppercase() {
"ADAMANTOISE" => Ok(Server::Adamantoise),
"CACTUAR" => Ok(Server::Cactuar),
"FAERIE" => Ok(Server::Faerie),
"GILGAMESH" => Ok(Server::Gilgamesh),
"JENOVA" => Ok(Server::Jenova),
"MIDGARDSORMR" => Ok(Server::Midgardsormr),
"SARGATANAS" => Ok(Server::Sargatanas),
"SIREN" => Ok(Server::Siren),
"BEHEMOTH" => Ok(Server::Behemoth),
"EXCALIBUR" => Ok(Server::Excalibur),
"EXODUS" => Ok(Server::Exodus),
"FAMFRIT" => Ok(Server::Famfrit),
"HYPERION" => Ok(Server::Hyperion),
"LAMIA" => Ok(Server::Lamia),
"LEVIATHAN" => Ok(Server::Leviathan),
"ULTROS" => Ok(Server::Ultros),
"BALMUNG" => Ok(Server::Balmung),
"BRYNHILDR" => Ok(Server::Brynhildr),
"COEURL" => Ok(Server::Coeurl),
"DIABOLOS" => Ok(Server::Diabolos),
"GOBLIN" => Ok(Server::Goblin),
"MALBORO" => Ok(Server::Malboro),
"MATEUS" => Ok(Server::Mateus),
"ZALERA" => Ok(Server::Zalera),
"HALICARNASSUS" => Ok(Server::Halicarnassus),
"MADUIN" => Ok(Server::Maduin),
"MARILITH" => Ok(Server::Marilith),
"SERAPH" => Ok(Server::Seraph),
"CUCHULAINN" => Ok(Server::Cuchulainn),
"KRAKEN" => Ok(Server::Kraken),
"RAFFLESIA" => Ok(Server::Rafflesia),
"GOLEM" => Ok(Server::Golem),
"CERBERUS" => Ok(Server::Cerberus),
"LOUISOIX" => Ok(Server::Louisoix),
"MOOGLE" => Ok(Server::Moogle),
"OMEGA" => Ok(Server::Omega),
"PHANTOM" => Ok(Server::Phantom),
"RAGNAROK" => Ok(Server::Ragnarok),
"SAGITTARIUS" => Ok(Server::Sagittarius),
"SPRIGGAN" => Ok(Server::Spriggan),
"ALPHA" => Ok(Server::Alpha),
"LICH" => Ok(Server::Lich),
"ODIN" => Ok(Server::Odin),
"PHOENIX" => Ok(Server::Phoenix),
"RAIDEN" => Ok(Server::Raiden),
"SHIVA" => Ok(Server::Shiva),
"TWINTANIA" => Ok(Server::Twintania),
"ZODIARK" => Ok(Server::Zodiark),
"INNOCENCE" => Ok(Server::Innocence),
"PIXIE" => Ok(Server::Pixie),
"TITANIA" => Ok(Server::Titania),
"TYCOON" => Ok(Server::Tycoon),
"BISMARCK" => Ok(Server::Bismarck),
"RAVANA" => Ok(Server::Ravana),
"SEPHIROT" => Ok(Server::Sephirot),
"SOPHIA" => Ok(Server::Sophia),
"ZURVAN" => Ok(Server::Zurvan),
"AEGIS" => Ok(Server::Aegis),
"ATOMOS" => Ok(Server::Atomos),
"CARBUNCLE" => Ok(Server::Carbuncle),
"GARUDA" => Ok(Server::Garuda),
"GUNGNIR" => Ok(Server::Gungnir),
"KUJATA" => Ok(Server::Kujata),
"TONBERRY" => Ok(Server::Tonberry),
"TYPHON" => Ok(Server::Typhon),
"ALEXANDER" => Ok(Server::Alexander),
"BAHAMUT" => Ok(Server::Bahamut),
"DURANDAL" => Ok(Server::Durandal),
"FENRIR" => Ok(Server::Fenrir),
"IFRIT" => Ok(Server::Ifrit),
"RIDILL" => Ok(Server::Ridill),
"TIAMAT" => Ok(Server::Tiamat),
"ULTIMA" => Ok(Server::Ultima),
"ANIMA" => Ok(Server::Anima),
"ASURA" => Ok(Server::Asura),
"CHOCOBO" => Ok(Server::Chocobo),
"HADES" => Ok(Server::Hades),
"IXION" => Ok(Server::Ixion),
"MASAMUNE" => Ok(Server::Masamune),
"PANDAEMONIUM" => Ok(Server::Pandaemonium),
"TITAN" => Ok(Server::Titan),
"BELIAS" => Ok(Server::Belias),
"MANDRAGORA" => Ok(Server::Mandragora),
"RAMUH" => Ok(Server::Ramuh),
"SHINRYU" => Ok(Server::Shinryu),
"UNICORN" => Ok(Server::Unicorn),
"VALEFOR" => Ok(Server::Valefor),
"YOJIMBO" => Ok(Server::Yojimbo),
"ZEROMUS" => Ok(Server::Zeromus),
x => Err(ServerParseError(x.into())),
}
}
}
impl fmt::Display for Server {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let server = match *self {
Server::Adamantoise => "Adamantoise",
Server::Cactuar => "Cactuar",
Server::Faerie => "Faerie",
Server::Gilgamesh => "Gilgamesh",
Server::Jenova => "Jenova",
Server::Midgardsormr =>"Midgardsormr",
Server::Sargatanas => "Sargatanas",
Server::Siren => "Siren",
Server::Behemoth => "Behemoth",
Server::Excalibur => "Excalibur",
Server::Exodus => "Exodus",
Server::Famfrit => "Famfrit",
Server::Hyperion => "Hyperion",
Server::Lamia => "Lamia",
Server::Leviathan => "Leviathan",
Server::Ultros => "Ultros",
Server::Balmung => "Balmung",
Server::Brynhildr => "Brynhildr",
Server::Coeurl => "Coeurl",
Server::Diabolos => "Diabolos",
Server::Goblin => "Goblin",
Server::Malboro => "Malboro",
Server::Mateus => "Mateus",
Server::Zalera => "Zalera",
Server::Halicarnassus => "Halicarnassus",
Server::Maduin => "Maduin",
Server::Marilith => "Marilith",
Server::Seraph => "Seraph",
Server::Cuchulainn => "Cuchulainn",
Server::Kraken => "Kraken",
Server::Rafflesia => "Rafflesia",
Server::Golem => "Golem",
Server::Cerberus => "Cerberus",
Server::Louisoix => "Louisoix",
Server::Moogle => "Moogle",
Server::Omega => "Omega",
Server::Phantom => "Phantom",
Server::Ragnarok => "Ragnarok",
Server::Sagittarius => "Sagittarius",
Server::Spriggan => "Spriggan",
Server::Alpha => "Alpha",
Server::Lich => "Lich",
Server::Odin => "Odin",
Server::Phoenix => "Phoenix",
Server::Raiden => "Raiden",
Server::Shiva => "Shiva",
Server::Twintania => "Twintania",
Server::Zodiark => "Zodiark",
Server::Innocence => "Innocence",
Server::Pixie => "Pixie",
Server::Titania => "Titania",
Server::Tycoon => "Tycoon",
Server::Bismarck => "Bismarck",
Server::Ravana => "Ravana",
Server::Sephirot => "Sephirot",
Server::Sophia => "Sophia",
Server::Zurvan => "Zurvan",
Server::Aegis => "Aegis",
Server::Atomos => "Atomos",
Server::Carbuncle => "Carbuncle",
Server::Garuda => "Garuda",
Server::Gungnir => "Gungnir",
Server::Kujata => "Kujata",
Server::Tonberry => "Tonberry",
Server::Typhon => "Typhon",
Server::Alexander => "Alexander",
Server::Bahamut => "Bahamut",
Server::Durandal => "Durandal",
Server::Fenrir => "Fenrir",
Server::Ifrit => "Ifrit",
Server::Ridill => "Ridill",
Server::Tiamat => "Tiamat",
Server::Ultima => "Ultima",
Server::Anima => "Anima",
Server::Asura => "Asura",
Server::Chocobo => "Chocobo",
Server::Hades => "Hades",
Server::Ixion => "Ixion",
Server::Masamune => "Masamune",
Server::Pandaemonium =>"Pandaemonium",
Server::Titan => "Titan",
Server::Belias => "Belias",
Server::Mandragora => "Mandragora",
Server::Ramuh => "Ramuh",
Server::Shinryu => "Shinryu",
Server::Unicorn => "Unicorn",
Server::Valefor => "Valefor",
Server::Yojimbo => "Yojimbo",
Server::Zeromus => "Zeromus",
};
write!(f, "{}", server)
}
}