1use alloc::string::String;
4use core::{fmt, str::FromStr};
5
6#[non_exhaustive]
16#[derive(Clone, Debug, Default, Eq, Hash, PartialEq)]
17#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
18pub enum TldrLanguage {
19 #[default]
21 #[cfg_attr(feature = "serde", serde(rename = "en"))]
22 English,
23
24 Other(String),
26}
27
28impl From<&str> for TldrLanguage {
29 fn from(input: &str) -> Self {
30 match input {
31 "en" => TldrLanguage::English,
32 _ => TldrLanguage::Other(input.into()),
33 }
34 }
35}
36
37impl FromStr for TldrLanguage {
38 type Err = ();
39
40 fn from_str(input: &str) -> Result<Self, Self::Err> {
41 Ok(match input {
42 "en" => TldrLanguage::English,
43 _ => TldrLanguage::Other(input.into()),
44 })
45 }
46}
47
48impl fmt::Display for TldrLanguage {
49 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
50 match self {
51 TldrLanguage::English => write!(f, "en"),
52 TldrLanguage::Other(lang) => write!(f, "{}", lang),
53 }
54 }
55}