zugferd_code_lists/zugferd_2_4/
mime.rs1#![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 ApplicationPdf,
9 ImagePng,
11 ImageJpeg,
13 TextCsv,
15 ApplicationVndOpenxmlformatsOfficedocumentSpreadsheetmlSheet,
17 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
90impl 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#[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