sakurs_core/api/
language.rs1use crate::api::Error;
4use std::fmt;
5use std::str::FromStr;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
9pub enum Language {
10 #[default]
12 English,
13 Japanese,
15}
16
17impl Language {
18 pub fn from_code(code: &str) -> Self {
20 match code.trim().to_lowercase().as_str() {
21 "en" | "eng" | "english" => Language::English,
22 "ja" | "jpn" | "japanese" => Language::Japanese,
23 _ => Language::English, }
25 }
26
27 pub fn code(&self) -> &'static str {
29 match self {
30 Language::English => "en",
31 Language::Japanese => "ja",
32 }
33 }
34
35 pub fn name(&self) -> &'static str {
37 match self {
38 Language::English => "English",
39 Language::Japanese => "Japanese",
40 }
41 }
42}
43
44impl fmt::Display for Language {
45 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
46 write!(f, "{}", self.name())
47 }
48}
49
50impl FromStr for Language {
51 type Err = Error;
52
53 fn from_str(s: &str) -> Result<Self, Self::Err> {
54 match s.trim().to_lowercase().as_str() {
55 "en" | "eng" | "english" => Ok(Language::English),
56 "ja" | "jpn" | "japanese" => Ok(Language::Japanese),
57 _ => Err(Error::InvalidLanguage(format!("Unsupported language: {s}"))),
58 }
59 }
60}