1use crate::MimeFormat;
2use std::fmt::{self, Display, Formatter};
3
4#[derive(Debug, Clone, PartialEq, Eq)]
8pub enum Application {
9 Wasm,
11 Exe,
13 Dll,
15 Elf,
17 Bc,
19 Mach,
21 Class,
23 Dex,
25 Dey,
27 Der,
29 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}