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#[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}