lodestone/model/
race.rs

1use failure::Fail;
2use std::str::FromStr;
3
4#[derive(Clone, Debug, Fail)]
5#[fail(display = "Invalid race string '{}'", _0)]
6pub struct RaceParseError(String);
7
8/// Models the races available in XIV.
9#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
10pub enum Race {
11    Aura,
12    Elezen,
13    Hyur,
14    Lalafell,
15    Miqote,
16    Roegadyn,
17    Hrothgar,
18    Viera,
19}
20
21impl FromStr for Race {
22    type Err = RaceParseError;
23
24    fn from_str(s: &str) -> Result<Self, Self::Err> {
25        match &*s.to_uppercase() {
26            "AU RA" => Ok(Race::Aura),
27            "ELEZEN" => Ok(Race::Elezen),
28            "HYUR" => Ok(Race::Hyur),
29            "LALAFELL" => Ok(Race::Lalafell),
30            "MIQO'TE" => Ok(Race::Miqote),
31            "ROEGADYN" => Ok(Race::Roegadyn),
32            "HROTHGAR" => Ok(Race::Hrothgar),
33            "VIERA" => Ok(Race::Viera),
34            x => Err(RaceParseError(x.into())),
35        }
36    }
37}