1use crate::MimeFormat;
2use std::fmt::{self, Display, Formatter};
3
4#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum Image {
9 Jpeg,
11 Png,
13 Gif,
15 Webp,
17 Cr2,
19 Tif,
21 Bmp,
23 Heif,
25 Avif,
27 Jxr,
29 Psd,
31 Ico,
33 Ora,
35 Djvu,
37}
38
39impl Display for Image {
40 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
41 let mime_str = match self {
42 Image::Jpeg => "image/jpeg",
43 Image::Png => "image/png",
44 Image::Gif => "image/gif",
45 Image::Webp => "image/webp",
46 Image::Cr2 => "image/x-canon-cr2",
47 Image::Tif => "image/tiff",
48 Image::Bmp => "image/bmp",
49 Image::Heif => "image/heif",
50 Image::Avif => "image/avif",
51 Image::Jxr => "image/vnd.ms-photo",
52 Image::Psd => "image/vnd.adobe.photoshop",
53 Image::Ico => "image/vnd.microsoft.icon",
54 Image::Ora => "image/openraster",
55 Image::Djvu => "image/vnd.djvu",
56 };
57 write!(f, "{}", mime_str)
58 }
59}
60
61impl MimeFormat for Image {
62 fn from_ext(ext: &str) -> Option<crate::MimeType> {
63 match ext {
64 "jpg" | "jpeg" => Some(crate::MimeType::Image(Image::Jpeg)),
65 "png" => Some(crate::MimeType::Image(Image::Png)),
66 "gif" => Some(crate::MimeType::Image(Image::Gif)),
67 "webp" => Some(crate::MimeType::Image(Image::Webp)),
68 "cr2" => Some(crate::MimeType::Image(Image::Cr2)),
69 "tif" | "tiff" => Some(crate::MimeType::Image(Image::Tif)),
70 "bmp" => Some(crate::MimeType::Image(Image::Bmp)),
71 "heif" => Some(crate::MimeType::Image(Image::Heif)),
72 "avif" => Some(crate::MimeType::Image(Image::Avif)),
73 "jxr" => Some(crate::MimeType::Image(Image::Jxr)),
74 "psd" => Some(crate::MimeType::Image(Image::Psd)),
75 "ico" => Some(crate::MimeType::Image(Image::Ico)),
76 "ora" => Some(crate::MimeType::Image(Image::Ora)),
77 "djvu" => Some(crate::MimeType::Image(Image::Djvu)),
78 _ => None,
79 }
80 }
81
82 fn from_mime(mime: &str) -> Option<crate::MimeType> {
83 match mime {
84 "image/jpeg" => Some(crate::MimeType::Image(Image::Jpeg)),
85 "image/png" => Some(crate::MimeType::Image(Image::Png)),
86 "image/gif" => Some(crate::MimeType::Image(Image::Gif)),
87 "image/webp" => Some(crate::MimeType::Image(Image::Webp)),
88 "image/x-canon-cr2" => Some(crate::MimeType::Image(Image::Cr2)),
89 "image/tiff" => Some(crate::MimeType::Image(Image::Tif)),
90 "image/bmp" => Some(crate::MimeType::Image(Image::Bmp)),
91 "image/heif" => Some(crate::MimeType::Image(Image::Heif)),
92 "image/avif" => Some(crate::MimeType::Image(Image::Avif)),
93 "image/vnd.ms-photo" => Some(crate::MimeType::Image(Image::Jxr)),
94 "image/vnd.adobe.photoshop" => Some(crate::MimeType::Image(Image::Psd)),
95 "image/vnd.microsoft.icon" => Some(crate::MimeType::Image(Image::Ico)),
96 "image/openraster" => Some(crate::MimeType::Image(Image::Ora)),
97 "image/vnd.djvu" => Some(crate::MimeType::Image(Image::Djvu)),
98 _ => None,
99 }
100 }
101}