1use failure::Fail;
2use std::str::FromStr;
3
4#[derive(Clone, Debug, Fail)]
5#[fail(display = "Invalid grand company string '{}'", _0)]
6pub struct GrandCompanyParseError(String);
7
8#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
9pub enum GrandCompany {
10 Maelstrom,
11 TwinAdder,
12 ImmortalFlames,
13 Unaffiliated,
14}
15
16impl FromStr for GrandCompany {
17 type Err = GrandCompanyParseError;
18
19 fn from_str(s: &str) -> Result<Self, Self::Err> {
20 match &*s.to_uppercase() {
21 "MAELSTROM" => Ok(GrandCompany::Maelstrom),
22 "ORDER OF THE TWIN ADDER" | "TWIN ADDER" => Ok(GrandCompany::TwinAdder),
23 "IMMORTAL FLAMES" => Ok(GrandCompany::ImmortalFlames),
24 "" | "NONE" | "UNAFFILIATED" => Ok(GrandCompany::Unaffiliated),
25 x => Err(GrandCompanyParseError(x.into())),
26 }
27 }
28}