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 = "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}