grid_tariffs/
language.rs

1use core::fmt;
2use std::str::FromStr;
3
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
7#[serde(rename_all = "snake_case")]
8#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
9pub enum Language {
10    En,
11    Sv,
12}
13
14impl Language {
15    pub const fn all() -> &'static [Self] {
16        &[Language::En, Language::Sv]
17    }
18}
19
20impl Language {
21    pub fn code(&self) -> &'static str {
22        match self {
23            Language::En => "en",
24            Language::Sv => "sv",
25        }
26    }
27}
28
29impl FromStr for Language {
30    type Err = &'static str;
31
32    fn from_str(s: &str) -> Result<Self, Self::Err> {
33        match s.to_ascii_lowercase().as_ref() {
34            "en" => Ok(Language::En),
35            "sv" => Ok(Language::Sv),
36            _ => Err("no such language"),
37        }
38    }
39}
40
41impl fmt::Display for Language {
42    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43        f.write_str(match self {
44            Language::En => "en",
45            Language::Sv => "sv",
46        })
47    }
48}