tldr_traits/
language.rs

1// This is free and unencumbered software released into the public domain.
2
3use alloc::string::String;
4use core::{fmt, str::FromStr};
5
6/// The language that a TL;DR summary is written in.
7///
8/// # Examples
9///
10/// ```rust
11/// # use tldr_traits::TldrLanguage;
12/// let language = TldrLanguage::default(); // this is the same as...
13/// let language = TldrLanguage::English;
14/// ```
15#[non_exhaustive]
16#[derive(Clone, Debug, Default, Eq, Hash, PartialEq)]
17#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
18pub enum TldrLanguage {
19    /// The English language (the default).
20    #[default]
21    #[cfg_attr(feature = "serde", serde(rename = "en"))]
22    English,
23
24    /// Another language.
25    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}