mime_type/
application.rs

1use crate::MimeFormat;
2use std::fmt::{self, Display, Formatter};
3
4/// Application and executable file formats.
5///
6/// Supports various executable and binary application formats.
7#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum Application {
9    /// WebAssembly binary format
10    Wasm,
11    /// Windows executable format
12    Exe,
13    /// Windows dynamic link library
14    Dll,
15    /// Executable and Linkable Format (Linux/Unix)
16    Elf,
17    /// LLVM bitcode format
18    Bc,
19    /// Mach-O binary format (macOS)
20    Mach,
21    /// Java class file
22    Class,
23    /// Dalvik executable format (Android)
24    Dex,
25    /// Optimized Dalvik executable (Android)
26    Dey,
27    /// X.509 certificate (DER encoded)
28    Der,
29    /// Object file format
30    Obj,
31}
32
33impl Display for Application {
34    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
35        let mime_str = match self {
36            Application::Wasm => "application/wasm",
37            Application::Exe => "application/vnd.microsoft.portable-executable",
38            Application::Dll => "application/vnd.microsoft.portable-executable",
39            Application::Elf => "application/x-executable",
40            Application::Bc => "application/llvm",
41            Application::Mach => "application/x-mach-binary",
42            Application::Class => "application/java",
43            Application::Dex => "application/vnd.android.dex",
44            Application::Dey => "application/vnd.android.dey",
45            Application::Der => "application/x-x509-ca-cert",
46            Application::Obj => "application/x-executable",
47        };
48        write!(f, "{}", mime_str)
49    }
50}
51
52impl MimeFormat for Application {
53    fn from_ext(ext: &str) -> Option<crate::MimeType> {
54        match ext {
55            "wasm" => Some(crate::MimeType::Application(Application::Wasm)),
56            "exe" => Some(crate::MimeType::Application(Application::Exe)),
57            "dll" => Some(crate::MimeType::Application(Application::Dll)),
58            "elf" => Some(crate::MimeType::Application(Application::Elf)),
59            "bc" => Some(crate::MimeType::Application(Application::Bc)),
60            "mach" => Some(crate::MimeType::Application(Application::Mach)),
61            "class" => Some(crate::MimeType::Application(Application::Class)),
62            "dex" => Some(crate::MimeType::Application(Application::Dex)),
63            "dey" => Some(crate::MimeType::Application(Application::Dey)),
64            "der" => Some(crate::MimeType::Application(Application::Der)),
65            "obj" => Some(crate::MimeType::Application(Application::Obj)),
66            _ => None,
67        }
68    }
69
70    fn from_mime(mime: &str) -> Option<crate::MimeType> {
71        match mime {
72            "application/wasm" => Some(crate::MimeType::Application(Application::Wasm)),
73            "application/vnd.microsoft.portable-executable" => {
74                Some(crate::MimeType::Application(Application::Exe))
75            }
76            "application/x-executable" => Some(crate::MimeType::Application(Application::Elf)),
77            "application/llvm" => Some(crate::MimeType::Application(Application::Bc)),
78            "application/x-mach-binary" => Some(crate::MimeType::Application(Application::Mach)),
79            "application/java" => Some(crate::MimeType::Application(Application::Class)),
80            "application/vnd.android.dex" => Some(crate::MimeType::Application(Application::Dex)),
81            "application/vnd.android.dey" => Some(crate::MimeType::Application(Application::Dey)),
82            "application/x-x509-ca-cert" => Some(crate::MimeType::Application(Application::Der)),
83            _ => None,
84        }
85    }
86}