1use enum_iterator::{all, Sequence};
3
4#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Hash, Eq, Ord, Sequence)]
5pub enum Image {
6 Ext3DM,
7 Ext3DS,
8 ExtAI,
9 ExtBMP,
10 ExtDDS,
11 ExtDWG,
12 ExtDXF,
13 ExtEPS,
14 ExtGIF,
15 ExtGPX,
16 ExtJPG,
17 ExtJPEG,
18 ExtKML,
19 ExtKMZ,
20 ExtMAX,
21 ExtPNG,
22 ExtPS,
23 ExtPSD,
24 ExtSVG,
25 ExtTGA,
26 ExtTHM,
27 ExtTIF,
28 ExtTIFF,
29 ExtWEBP,
30 ExtXCF,
31 ExtYUV,
32 None,
33}
34
35impl Image {
36 pub async fn contains(item: &str) -> bool {
37 all::<Image>().any(|_| Image::from(item) != Image::None)
38 }
39}
40
41impl From<&str> for Image {
42 fn from(s: &str) -> Self {
43 match s {
44 "3dm" => Self::Ext3DM,
45 "3ds" => Self::Ext3DS,
46 "ai" => Self::ExtAI,
47 "bmp" => Self::ExtBMP,
48 "dds" => Self::ExtDDS,
49 "dwg" => Self::ExtDWG,
50 "dxf" => Self::ExtDXF,
51 "eps" => Self::ExtEPS,
52 "gif" => Self::ExtGIF,
53 "gpx" => Self::ExtGPX,
54 "jpg" => Self::ExtJPG,
55 "jpeg" => Self::ExtJPEG,
56 "kml" => Self::ExtKML,
57 "kmz" => Self::ExtKMZ,
58 "max" => Self::ExtMAX,
59 "png" => Self::ExtPNG,
60 "ps" => Self::ExtPS,
61 "psd" => Self::ExtPSD,
62 "svg" => Self::ExtSVG,
63 "tga" => Self::ExtTGA,
64 "thm" => Self::ExtTHM,
65 "tif" => Self::ExtTIF,
66 "tiff" => Self::ExtTIFF,
67 "webp" => Self::ExtWEBP,
68 "xcf" => Self::ExtXCF,
69 "yuv" => Self::ExtYUV,
70 _ => Self::None,
71 }
72 }
73}
74
75#[cfg(test)]
76mod tests {
77 use super::*;
78
79 #[test]
80 fn test_image_from_str() {
81 assert_eq!(Image::Ext3DM, Image::from("3dm"));
82 assert_eq!(Image::Ext3DS, Image::from("3ds"));
83 assert_eq!(Image::ExtAI, Image::from("ai"));
84 assert_eq!(Image::ExtBMP, Image::from("bmp"));
85 assert_eq!(Image::ExtDDS, Image::from("dds"));
86 assert_eq!(Image::ExtDWG, Image::from("dwg"));
87 assert_eq!(Image::ExtDXF, Image::from("dxf"));
88 assert_eq!(Image::ExtEPS, Image::from("eps"));
89 assert_eq!(Image::ExtGIF, Image::from("gif"));
90 assert_eq!(Image::ExtGPX, Image::from("gpx"));
91 assert_eq!(Image::ExtJPG, Image::from("jpg"));
92 assert_eq!(Image::ExtJPEG, Image::from("jpeg"));
93 assert_eq!(Image::ExtKML, Image::from("kml"));
94 assert_eq!(Image::ExtKMZ, Image::from("kmz"));
95 assert_eq!(Image::ExtMAX, Image::from("max"));
96 assert_eq!(Image::ExtPNG, Image::from("png"));
97 assert_eq!(Image::ExtPS, Image::from("ps"));
98 assert_eq!(Image::ExtPSD, Image::from("psd"));
99 assert_eq!(Image::ExtSVG, Image::from("svg"));
100 assert_eq!(Image::ExtTGA, Image::from("tga"));
101 assert_eq!(Image::ExtTHM, Image::from("thm"));
102 assert_eq!(Image::ExtTIF, Image::from("tif"));
103 assert_eq!(Image::ExtTIFF, Image::from("tiff"));
104 assert_eq!(Image::ExtWEBP, Image::from("webp"));
105 assert_eq!(Image::ExtXCF, Image::from("xcf"));
106 assert_eq!(Image::ExtYUV, Image::from("yuv"));
107 assert_eq!(Image::None, Image::from(""));
108 }
109}