1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
use failure::Fail; use std::str::FromStr; #[derive(Clone, Debug, Fail)] #[fail(display = "Invalid language string '{}'", _0)] pub struct LanguageParseError(String); #[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] pub enum Language { Japanese, English, German, French, } impl FromStr for Language { type Err = LanguageParseError; fn from_str(s: &str) -> Result<Self, Self::Err> { match &*s.to_uppercase() { "JAPANESE" | "JA" => Ok(Language::Japanese), "ENGLISH" | "EN" => Ok(Language::English), "GERMAN" | "DE" => Ok(Language::German), "FRENCH" | "FR" => Ok(Language::French), x => Err(LanguageParseError(x.into())), } } }