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}