413 lines
9.0 KiB
Rust
413 lines
9.0 KiB
Rust
use data_centers::DataCenter;
|
|
|
|
use std::fmt::{Display, Formatter, Result as FmtResult};
|
|
use std::str::FromStr;
|
|
|
|
/// The worlds, sometimes called servers, in the game.
|
|
///
|
|
/// Each [Data Center] has multiple worlds attached to it.
|
|
#[derive(Debug, Clone, Copy)]
|
|
pub enum World {
|
|
// Aether
|
|
Adamantoise,
|
|
Balmung,
|
|
Cactuar,
|
|
Coeurl,
|
|
Faerie,
|
|
Gilgamesh,
|
|
Goblin,
|
|
Jenova,
|
|
Mateus,
|
|
Midgardsormr,
|
|
Sargatanas,
|
|
Siren,
|
|
Zalera,
|
|
|
|
// Chaos
|
|
Cerberus,
|
|
Lich,
|
|
Louisoix,
|
|
Moogle,
|
|
Odin,
|
|
Omega,
|
|
Phoenix,
|
|
Ragnarok,
|
|
Shiva,
|
|
Zodiark,
|
|
|
|
// Elemental
|
|
Aegis,
|
|
Atomos,
|
|
Carbuncle,
|
|
Garuda,
|
|
Gungnir,
|
|
Kujata,
|
|
Ramuh,
|
|
Tonberry,
|
|
Typhon,
|
|
Unicorn,
|
|
|
|
// Gaia
|
|
Alexander,
|
|
Bahamut,
|
|
Durandal,
|
|
Fenrir,
|
|
Ifrit,
|
|
Ridill,
|
|
Tiamat,
|
|
Ultima,
|
|
Valefor,
|
|
Yojimbo,
|
|
Zeromus,
|
|
|
|
// Mana
|
|
Anima,
|
|
Asura,
|
|
Belias,
|
|
Chocobo,
|
|
Hades,
|
|
Ixion,
|
|
Mandragora,
|
|
Masamune,
|
|
Pandaemonium,
|
|
Shinryu,
|
|
Titan,
|
|
|
|
// Primal
|
|
Behemoth,
|
|
Brynhildr,
|
|
Diabolos,
|
|
Excalibur,
|
|
Exodus,
|
|
Famfrit,
|
|
Hyperion,
|
|
Lamia,
|
|
Leviathan,
|
|
Malboro,
|
|
Ultros,
|
|
}
|
|
|
|
impl World {
|
|
pub const ALL: [World; 66] = [
|
|
// Aether
|
|
World::Adamantoise,
|
|
World::Balmung,
|
|
World::Cactuar,
|
|
World::Coeurl,
|
|
World::Faerie,
|
|
World::Gilgamesh,
|
|
World::Goblin,
|
|
World::Jenova,
|
|
World::Mateus,
|
|
World::Midgardsormr,
|
|
World::Sargatanas,
|
|
World::Siren,
|
|
World::Zalera,
|
|
|
|
// Chaos
|
|
World::Cerberus,
|
|
World::Lich,
|
|
World::Louisoix,
|
|
World::Moogle,
|
|
World::Odin,
|
|
World::Omega,
|
|
World::Phoenix,
|
|
World::Ragnarok,
|
|
World::Shiva,
|
|
World::Zodiark,
|
|
|
|
// Elemental
|
|
World::Aegis,
|
|
World::Atomos,
|
|
World::Carbuncle,
|
|
World::Garuda,
|
|
World::Gungnir,
|
|
World::Kujata,
|
|
World::Ramuh,
|
|
World::Tonberry,
|
|
World::Typhon,
|
|
World::Unicorn,
|
|
|
|
// Gaia
|
|
World::Alexander,
|
|
World::Bahamut,
|
|
World::Durandal,
|
|
World::Fenrir,
|
|
World::Ifrit,
|
|
World::Ridill,
|
|
World::Tiamat,
|
|
World::Ultima,
|
|
World::Valefor,
|
|
World::Yojimbo,
|
|
World::Zeromus,
|
|
|
|
// Mana
|
|
World::Anima,
|
|
World::Asura,
|
|
World::Belias,
|
|
World::Chocobo,
|
|
World::Hades,
|
|
World::Ixion,
|
|
World::Mandragora,
|
|
World::Masamune,
|
|
World::Pandaemonium,
|
|
World::Shinryu,
|
|
World::Titan,
|
|
|
|
// Primal
|
|
World::Behemoth,
|
|
World::Brynhildr,
|
|
World::Diabolos,
|
|
World::Excalibur,
|
|
World::Exodus,
|
|
World::Famfrit,
|
|
World::Hyperion,
|
|
World::Lamia,
|
|
World::Leviathan,
|
|
World::Malboro,
|
|
World::Ultros,
|
|
];
|
|
|
|
pub fn as_str(&self) -> &'static str {
|
|
match *self {
|
|
World::Adamantoise => "Adamantoise",
|
|
World::Balmung => "Balmung",
|
|
World::Cactuar => "Cactuar",
|
|
World::Coeurl => "Coeurl",
|
|
World::Faerie => "Faerie",
|
|
World::Gilgamesh => "Gilgamesh",
|
|
World::Goblin => "Goblin",
|
|
World::Jenova => "Jenova",
|
|
World::Mateus => "Mateus",
|
|
World::Midgardsormr => "Midgardsormr",
|
|
World::Sargatanas => "Sargatanas",
|
|
World::Siren => "Siren",
|
|
World::Zalera => "Zalera",
|
|
|
|
World::Cerberus => "Cerberus",
|
|
World::Lich => "Lich",
|
|
World::Louisoix => "Louisoix",
|
|
World::Moogle => "Moogle",
|
|
World::Odin => "Odin",
|
|
World::Omega => "Omega",
|
|
World::Phoenix => "Phoenix",
|
|
World::Ragnarok => "Ragnarok",
|
|
World::Shiva => "Shiva",
|
|
World::Zodiark => "Zodiark",
|
|
|
|
World::Aegis => "Aegis",
|
|
World::Atomos => "Atomos",
|
|
World::Carbuncle => "Carbuncle",
|
|
World::Garuda => "Garuda",
|
|
World::Gungnir => "Gungnir",
|
|
World::Kujata => "Kujata",
|
|
World::Ramuh => "Ramuh",
|
|
World::Tonberry => "Tonberry",
|
|
World::Typhon => "Typhon",
|
|
World::Unicorn => "Unicorn",
|
|
|
|
World::Alexander => "Alexander",
|
|
World::Bahamut => "Bahamut",
|
|
World::Durandal => "Durandal",
|
|
World::Fenrir => "Fenrir",
|
|
World::Ifrit => "Ifrit",
|
|
World::Ridill => "Ridill",
|
|
World::Tiamat => "Tiamat",
|
|
World::Ultima => "Ultima",
|
|
World::Valefor => "Valefor",
|
|
World::Yojimbo => "Yojimbo",
|
|
World::Zeromus => "Zeromus",
|
|
|
|
World::Anima => "Anima",
|
|
World::Asura => "Asura",
|
|
World::Belias => "Belias",
|
|
World::Chocobo => "Chocobo",
|
|
World::Hades => "Hades",
|
|
World::Ixion => "Ixion",
|
|
World::Mandragora => "Mandragora",
|
|
World::Masamune => "Masamune",
|
|
World::Pandaemonium => "Pandaemonium",
|
|
World::Shinryu => "Shinryu",
|
|
World::Titan => "Titan",
|
|
|
|
World::Behemoth => "Behemoth",
|
|
World::Brynhildr => "Brynhildr",
|
|
World::Diabolos => "Diabolos",
|
|
World::Excalibur => "Excalibur",
|
|
World::Exodus => "Exodus",
|
|
World::Famfrit => "Famfrit",
|
|
World::Hyperion => "Hyperion",
|
|
World::Lamia => "Lamia",
|
|
World::Leviathan => "Leviathan",
|
|
World::Malboro => "Malboro",
|
|
World::Ultros => "Ultros",
|
|
}
|
|
}
|
|
|
|
pub fn data_center(&self) -> DataCenter {
|
|
match *self {
|
|
World::Adamantoise |
|
|
World::Balmung |
|
|
World::Cactuar |
|
|
World::Coeurl |
|
|
World::Faerie |
|
|
World::Gilgamesh |
|
|
World::Goblin |
|
|
World::Jenova |
|
|
World::Mateus |
|
|
World::Midgardsormr |
|
|
World::Sargatanas |
|
|
World::Siren |
|
|
World::Zalera => DataCenter::Aether,
|
|
|
|
World::Cerberus |
|
|
World::Lich |
|
|
World::Louisoix |
|
|
World::Moogle |
|
|
World::Odin |
|
|
World::Omega |
|
|
World::Phoenix |
|
|
World::Ragnarok |
|
|
World::Shiva |
|
|
World::Zodiark => DataCenter::Chaos,
|
|
|
|
World::Aegis |
|
|
World::Atomos |
|
|
World::Carbuncle |
|
|
World::Garuda |
|
|
World::Gungnir |
|
|
World::Kujata |
|
|
World::Ramuh |
|
|
World::Tonberry |
|
|
World::Typhon |
|
|
World::Unicorn => DataCenter::Elemental,
|
|
|
|
World::Alexander |
|
|
World::Bahamut |
|
|
World::Durandal |
|
|
World::Fenrir |
|
|
World::Ifrit |
|
|
World::Ridill |
|
|
World::Tiamat |
|
|
World::Ultima |
|
|
World::Valefor |
|
|
World::Yojimbo |
|
|
World::Zeromus => DataCenter::Gaia,
|
|
|
|
World::Anima |
|
|
World::Asura |
|
|
World::Belias |
|
|
World::Chocobo |
|
|
World::Hades |
|
|
World::Ixion |
|
|
World::Mandragora |
|
|
World::Masamune |
|
|
World::Pandaemonium |
|
|
World::Shinryu |
|
|
World::Titan => DataCenter::Mana,
|
|
|
|
World::Behemoth |
|
|
World::Brynhildr |
|
|
World::Diabolos |
|
|
World::Excalibur |
|
|
World::Exodus |
|
|
World::Famfrit |
|
|
World::Hyperion |
|
|
World::Lamia |
|
|
World::Leviathan |
|
|
World::Malboro |
|
|
World::Ultros => DataCenter::Primal,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl FromStr for World {
|
|
type Err = ();
|
|
|
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
let world = match s.to_lowercase().as_str() {
|
|
"adamantoise" => World::Adamantoise,
|
|
"balmung" => World::Balmung,
|
|
"cactuar" => World::Cactuar,
|
|
"coeurl" => World::Coeurl,
|
|
"faerie" => World::Faerie,
|
|
"gilgamesh" => World::Gilgamesh,
|
|
"goblin" => World::Goblin,
|
|
"jenova" => World::Jenova,
|
|
"mateus" => World::Mateus,
|
|
"midgardsormr" => World::Midgardsormr,
|
|
"sargatanas" => World::Sargatanas,
|
|
"siren" => World::Siren,
|
|
"zalera" => World::Zalera,
|
|
|
|
"cerberus" => World::Cerberus,
|
|
"lich" => World::Lich,
|
|
"louisoix" => World::Louisoix,
|
|
"moogle" => World::Moogle,
|
|
"odin" => World::Odin,
|
|
"omega" => World::Omega,
|
|
"phoenix" => World::Phoenix,
|
|
"ragnarok" => World::Ragnarok,
|
|
"shiva" => World::Shiva,
|
|
"zodiark" => World::Zodiark,
|
|
|
|
"aegis" => World::Aegis,
|
|
"atomos" => World::Atomos,
|
|
"carbuncle" => World::Carbuncle,
|
|
"garuda" => World::Garuda,
|
|
"gungnir" => World::Gungnir,
|
|
"kujata" => World::Kujata,
|
|
"ramuh" => World::Ramuh,
|
|
"tonberry" => World::Tonberry,
|
|
"typhon" => World::Typhon,
|
|
"unicorn" => World::Unicorn,
|
|
|
|
"alexander" => World::Alexander,
|
|
"bahamut" => World::Bahamut,
|
|
"durandal" => World::Durandal,
|
|
"fenrir" => World::Fenrir,
|
|
"ifrit" => World::Ifrit,
|
|
"ridill" => World::Ridill,
|
|
"tiamat" => World::Tiamat,
|
|
"ultima" => World::Ultima,
|
|
"valefor" => World::Valefor,
|
|
"yojimbo" => World::Yojimbo,
|
|
"zeromus" => World::Zeromus,
|
|
|
|
"anima" => World::Anima,
|
|
"asura" => World::Asura,
|
|
"belias" => World::Belias,
|
|
"chocobo" => World::Chocobo,
|
|
"hades" => World::Hades,
|
|
"ixion" => World::Ixion,
|
|
"mandragora" => World::Mandragora,
|
|
"masamune" => World::Masamune,
|
|
"pandaemonium" => World::Pandaemonium,
|
|
"shinryu" => World::Shinryu,
|
|
"titan" => World::Titan,
|
|
|
|
"behemoth" => World::Behemoth,
|
|
"brynhildr" => World::Brynhildr,
|
|
"diabolos" => World::Diabolos,
|
|
"excalibur" => World::Excalibur,
|
|
"exodus" => World::Exodus,
|
|
"famfrit" => World::Famfrit,
|
|
"hyperion" => World::Hyperion,
|
|
"lamia" => World::Lamia,
|
|
"leviathan" => World::Leviathan,
|
|
"malboro" => World::Malboro,
|
|
"ultros" => World::Ultros,
|
|
|
|
_ => return Err(())
|
|
};
|
|
|
|
Ok(world)
|
|
}
|
|
}
|
|
|
|
impl Display for World {
|
|
fn fmt(&self, f: &mut Formatter) -> FmtResult {
|
|
write!(f, "{}", self.as_str())
|
|
}
|
|
}
|