zugferd_code_lists/zugferd_2_4/
mime.rs

1#![allow(non_camel_case_types)]
2
3#[cfg_attr(feature = "specta", derive(specta::Type))]
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
6pub enum MIME {
7    /// application/pdf
8    ApplicationPdf,
9    /// image/png
10    ImagePng,
11    /// image/jpeg
12    ImageJpeg,
13    /// text/csv
14    TextCsv,
15    /// application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
16    ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet,
17    /// application/vnd.oasis.opendocument.spreadsheet
18    ApplicationVndOasisOpendocumentSpreadsheet,
19}
20
21impl std::fmt::Display for MIME {
22    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23        write!(f, "{}", <Self as crate::Code>::code(*self))
24    }
25}
26
27impl std::str::FromStr for MIME {
28    type Err = crate::ParseError<Self>;
29    fn from_str(s: &str) -> Result<Self, Self::Err> {
30        <Self as crate::FromCode>::from_code(s)
31            .ok_or_else(|| crate::ParseError::<Self>::new(s.to_owned()))
32    }
33}
34
35impl crate::Code for MIME {
36    fn code(self) -> &'static str {
37        match self {
38            MIME::ApplicationPdf => "application/pdf",
39            MIME::ImagePng => "image/png",
40            MIME::ImageJpeg => "image/jpeg",
41            MIME::TextCsv => "text/csv",
42            MIME::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet => {
43                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
44            }
45            MIME::ApplicationVndOasisOpendocumentSpreadsheet => {
46                "application/vnd.oasis.opendocument.spreadsheet"
47            }
48        }
49    }
50}
51
52impl crate::Description for MIME {
53    fn description(self) -> &'static str {
54        match self {
55            MIME::ApplicationPdf => "application/pdf",
56            MIME::ImagePng => "image/png",
57            MIME::ImageJpeg => "image/jpeg",
58            MIME::TextCsv => "text/csv",
59            MIME::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet => {
60                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
61            }
62            MIME::ApplicationVndOasisOpendocumentSpreadsheet => {
63                "application/vnd.oasis.opendocument.spreadsheet"
64            }
65        }
66    }
67}
68
69impl crate::FromCode for MIME {
70    fn from_code(code: &str) -> Option<Self>
71    where
72        Self: Sized,
73    {
74        match code {
75            "application/pdf" => Some(MIME::ApplicationPdf),
76            "image/png" => Some(MIME::ImagePng),
77            "image/jpeg" => Some(MIME::ImageJpeg),
78            "text/csv" => Some(MIME::TextCsv),
79            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" => {
80                Some(MIME::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet)
81            }
82            "application/vnd.oasis.opendocument.spreadsheet" => {
83                Some(MIME::ApplicationVndOasisOpendocumentSpreadsheet)
84            }
85            _ => None,
86        }
87    }
88}
89
90// Start: (Version) TryFrom MIME to crate::zugferd_2_3_3::MIME
91impl std::convert::TryFrom<MIME> for crate::zugferd_2_3_3::MIME {
92    type Error = std::convert::Infallible;
93    fn try_from(value: MIME) -> Result<Self, Self::Error> {
94        match value {
95            MIME::ApplicationPdf => Ok(crate::zugferd_2_3_3::MIME::ApplicationPdf),
96            MIME::ImagePng => Ok(crate::zugferd_2_3_3::MIME::ImagePng),
97            MIME::ImageJpeg => Ok(crate::zugferd_2_3_3::MIME::ImageJpeg),
98            MIME::TextCsv => Ok(crate::zugferd_2_3_3::MIME::TextCsv),
99            MIME::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet => Ok(crate::zugferd_2_3_3::MIME::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet),
100            MIME::ApplicationVndOasisOpendocumentSpreadsheet => Ok(crate::zugferd_2_3_3::MIME::ApplicationVndOasisOpendocumentSpreadsheet),
101
102        }
103    }
104}
105
106impl std::convert::TryFrom<crate::zugferd_2_3_3::MIME> for MIME {
107    type Error = ErrFromCrateZugferd233MimeToMime;
108    fn try_from(value: crate::zugferd_2_3_3::MIME) -> Result<MIME, Self::Error> {
109        match value {
110            crate::zugferd_2_3_3::MIME::ApplicationPdf => Ok(MIME::ApplicationPdf),
111            crate::zugferd_2_3_3::MIME::ImagePng => Ok(MIME::ImagePng),
112            crate::zugferd_2_3_3::MIME::ImageJpeg => Ok(MIME::ImageJpeg),
113            crate::zugferd_2_3_3::MIME::TextCsv => Ok(MIME::TextCsv),
114            crate::zugferd_2_3_3::MIME::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet => Ok(MIME::ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet),
115            crate::zugferd_2_3_3::MIME::ApplicationVndOasisOpendocumentSpreadsheet => Ok(MIME::ApplicationVndOasisOpendocumentSpreadsheet),
116            crate::zugferd_2_3_3::MIME::ApplicationXml => Err(ErrFromCrateZugferd233MimeToMime::ApplicationXml),
117            crate::zugferd_2_3_3::MIME::TextXml => Err(ErrFromCrateZugferd233MimeToMime::TextXml),
118        }
119    }
120}
121
122/// All the variants of crate::zugferd_2_3_3::MIME that are not matched to any variant of MIME
123#[derive(Debug, PartialEq, Eq, Hash)]
124pub enum ErrFromCrateZugferd233MimeToMime {
125    ApplicationXml,
126    TextXml,
127}
128
129impl std::fmt::Display for ErrFromCrateZugferd233MimeToMime {
130    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
131        match self {
132            ErrFromCrateZugferd233MimeToMime::ApplicationXml => {
133                write!(f, "ApplicationXml has no corresponding value in MIME")
134            }
135            ErrFromCrateZugferd233MimeToMime::TextXml => {
136                write!(f, "TextXml has no corresponding value in MIME")
137            }
138        }
139    }
140}
141
142impl std::error::Error for ErrFromCrateZugferd233MimeToMime {}
143// End: (Version) TryFrom crate::zugferd_2_3_3::MIME to MIME