grid_tariffs/
language.rs

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