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
use clap::ValueEnum;

/// Image format
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum ImageFormat {
    /// PNG
    Png,
    /// JPEG
    Jpeg,
    /// BMP
    Bmp,
}

/// Dictionary Format
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum DictionaryFormat {
    /// TOML
    Toml,
    /// JSON
    Json,
    /// YAML
    Yaml,
    /// RON
    Ron,
}

impl Default for ImageFormat {
    fn default() -> Self {
        Self::Png
    }
}

impl Default for DictionaryFormat {
    fn default() -> Self {
        Self::Json
    }
}

impl ImageFormat {
    /// Extension of a given image format:
    /// - png => .png
    /// - jpeg => .jpeg
    /// - bmp => .bmp
    pub fn ext(&self) -> &str {
        match self {
            ImageFormat::Png => "png",
            ImageFormat::Jpeg => "jpeg",
            ImageFormat::Bmp => "bmp",
        }
    }

    /// Converts an image format to `image`'s equivalent
    pub fn as_image_format(&self) -> image::ImageFormat {
        match self {
            ImageFormat::Png => image::ImageFormat::Png,
            ImageFormat::Jpeg => image::ImageFormat::Jpeg,
            ImageFormat::Bmp => image::ImageFormat::Bmp,
        }
    }
}

impl DictionaryFormat {
    /// Extension of a given dictionary format:
    /// - toml => .toml
    /// - json => .json
    /// - yaml => .yaml
    /// - ron => .ron
    pub fn ext(&self) -> &str {
        match self {
            DictionaryFormat::Toml => "toml",
            DictionaryFormat::Json => "json",
            DictionaryFormat::Yaml => "yaml",
            DictionaryFormat::Ron => "ron",
        }
    }
}