1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
pub mod image;

use self::image::Image;
// use crate::ext::Image;
use crate::Extension::*;
use enum_iterator::Sequence;

#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Hash, Eq, Ord, Sequence)]
pub enum Extension {
  Image(Image),
  None,
}

#[derive(Debug, PartialEq, Clone, Copy, Sequence)]
pub enum ExtType {
  Image,
  None,
}

impl Extension {
  pub fn to_str(self) -> &'static str {
    match self {
      self::Image(i) => match i {
        Image::Ext3DM => "3dm",
        Image::Ext3DS => "3ds",
        Image::ExtAI => "ai",
        Image::ExtBMP => "bmp",
        Image::ExtDDS => "dds",
        Image::ExtDWG => "dwg",
        Image::ExtDXF => "dxf",
        Image::ExtEPS => "eps",
        Image::ExtGIF => "gif",
        Image::ExtGPX => "gpx",
        Image::ExtJPG => "jpg",
        Image::ExtJPEG => "jpeg",
        Image::ExtKML => "kml",
        Image::ExtKMZ => "kmz",
        Image::ExtMAX => "max",
        Image::ExtPNG => "png",
        Image::ExtPS => "ps",
        Image::ExtPSD => "psd",
        Image::ExtSVG => "svg",
        Image::ExtTGA => "tga",
        Image::ExtTHM => "thm",
        Image::ExtTIF => "tif",
        Image::ExtTIFF => "tiff",
        Image::ExtWEBP => "webp",
        Image::ExtXCF => "xcf",
        Image::ExtYUV => "yuv",
        Image::None => "",
      },
      self::None => "",
    }
  }
}

#[cfg(test)]
mod tests {
  use super::*;

  #[test]
  fn test_ext_image_to_str() {
    assert_eq!("3dm", Extension::Image(Image::Ext3DM).to_str());
    assert_eq!("3ds", Extension::Image(Image::Ext3DS).to_str());
    assert_eq!("ai", Extension::Image(Image::ExtAI).to_str());
    assert_eq!("bmp", Extension::Image(Image::ExtBMP).to_str());
    assert_eq!("dds", Extension::Image(Image::ExtDDS).to_str());
    assert_eq!("dwg", Extension::Image(Image::ExtDWG).to_str());
    assert_eq!("dxf", Extension::Image(Image::ExtDXF).to_str());
    assert_eq!("eps", Extension::Image(Image::ExtEPS).to_str());
    assert_eq!("gif", Extension::Image(Image::ExtGIF).to_str());
    assert_eq!("gpx", Extension::Image(Image::ExtGPX).to_str());
    assert_eq!("jpg", Extension::Image(Image::ExtJPG).to_str());
    assert_eq!("jpeg", Extension::Image(Image::ExtJPEG).to_str());
    assert_eq!("kml", Extension::Image(Image::ExtKML).to_str());
    assert_eq!("kmz", Extension::Image(Image::ExtKMZ).to_str());
    assert_eq!("max", Extension::Image(Image::ExtMAX).to_str());
    assert_eq!("png", Extension::Image(Image::ExtPNG).to_str());
    assert_eq!("ps", Extension::Image(Image::ExtPS).to_str());
    assert_eq!("psd", Extension::Image(Image::ExtPSD).to_str());
    assert_eq!("svg", Extension::Image(Image::ExtSVG).to_str());
    assert_eq!("tga", Extension::Image(Image::ExtTGA).to_str());
    assert_eq!("thm", Extension::Image(Image::ExtTHM).to_str());
    assert_eq!("tif", Extension::Image(Image::ExtTIF).to_str());
    assert_eq!("tiff", Extension::Image(Image::ExtTIFF).to_str());
    assert_eq!("webp", Extension::Image(Image::ExtWEBP).to_str());
    assert_eq!("xcf", Extension::Image(Image::ExtXCF).to_str());
    assert_eq!("yuv", Extension::Image(Image::ExtYUV).to_str());
    assert_eq!("", Extension::Image(Image::None).to_str());
  }
}