1use crate::MimeFormat;
2use std::fmt::{self, Display, Formatter};
3
4#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum Document {
9 Doc,
11 Docx,
13 Xls,
15 Xlsx,
17 Ppt,
19 Pptx,
21 Odt,
23 Ods,
25 Odp,
27}
28
29impl Display for Document {
30 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
31 let mime_str = match self {
32 Document::Doc => "application/msword",
33 Document::Docx => {
34 "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
35 }
36 Document::Xls => "application/vnd.ms-excel",
37 Document::Xlsx => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
38 Document::Ppt => "application/vnd.ms-powerpoint",
39 Document::Pptx => {
40 "application/vnd.openxmlformats-officedocument.presentationml.presentation"
41 }
42 Document::Odt => "application/vnd.oasis.opendocument.text",
43 Document::Ods => "application/vnd.oasis.opendocument.spreadsheet",
44 Document::Odp => "application/vnd.oasis.opendocument.presentation",
45 };
46 write!(f, "{}", mime_str)
47 }
48}
49
50impl MimeFormat for Document {
51 fn from_ext(ext: &str) -> Option<crate::MimeType> {
52 match ext {
53 "doc" => Some(crate::MimeType::Document(Document::Doc)),
54 "docx" => Some(crate::MimeType::Document(Document::Docx)),
55 "xls" => Some(crate::MimeType::Document(Document::Xls)),
56 "xlsx" => Some(crate::MimeType::Document(Document::Xlsx)),
57 "ppt" => Some(crate::MimeType::Document(Document::Ppt)),
58 "pptx" => Some(crate::MimeType::Document(Document::Pptx)),
59 "odt" => Some(crate::MimeType::Document(Document::Odt)),
60 "ods" => Some(crate::MimeType::Document(Document::Ods)),
61 "odp" => Some(crate::MimeType::Document(Document::Odp)),
62 _ => None,
63 }
64 }
65
66 fn from_mime(mime: &str) -> Option<crate::MimeType> {
67 match mime {
68 "application/msword" => Some(crate::MimeType::Document(Document::Doc)),
69 "application/vnd.openxmlformats-officedocument.wordprocessingml.document" => {
70 Some(crate::MimeType::Document(Document::Docx))
71 }
72 "application/vnd.ms-excel" => Some(crate::MimeType::Document(Document::Xls)),
73 "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" => {
74 Some(crate::MimeType::Document(Document::Xlsx))
75 }
76 "application/vnd.ms-powerpoint" => Some(crate::MimeType::Document(Document::Ppt)),
77 "application/vnd.openxmlformats-officedocument.presentationml.presentation" => {
78 Some(crate::MimeType::Document(Document::Pptx))
79 }
80 "application/vnd.oasis.opendocument.text" => {
81 Some(crate::MimeType::Document(Document::Odt))
82 }
83 "application/vnd.oasis.opendocument.spreadsheet" => {
84 Some(crate::MimeType::Document(Document::Ods))
85 }
86 "application/vnd.oasis.opendocument.presentation" => {
87 Some(crate::MimeType::Document(Document::Odp))
88 }
89 _ => None,
90 }
91 }
92}