mime-type 0.1.0

A Rust library for handling MIME types.
Documentation
use crate::MimeFormat;
use std::fmt::{self, Display, Formatter};

/// Application and executable file formats.
///
/// Supports various executable and binary application formats.
pub enum Application {
    /// WebAssembly binary format
    Wasm,
    /// Windows executable format
    Exe,
    /// Windows dynamic link library
    Dll,
    /// Executable and Linkable Format (Linux/Unix)
    Elf,
    /// LLVM bitcode format
    Bc,
    /// Mach-O binary format (macOS)
    Mach,
    /// Java class file
    Class,
    /// Dalvik executable format (Android)
    Dex,
    /// Optimized Dalvik executable (Android)
    Dey,
    /// X.509 certificate (DER encoded)
    Der,
    /// Object file format
    Obj,
}

impl Display for Application {
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        let mime_str = match self {
            Application::Wasm => "application/wasm",
            Application::Exe => "application/vnd.microsoft.portable-executable",
            Application::Dll => "application/vnd.microsoft.portable-executable",
            Application::Elf => "application/x-executable",
            Application::Bc => "application/llvm",
            Application::Mach => "application/x-mach-binary",
            Application::Class => "application/java",
            Application::Dex => "application/vnd.android.dex",
            Application::Dey => "application/vnd.android.dey",
            Application::Der => "application/x-x509-ca-cert",
            Application::Obj => "application/x-executable",
        };
        write!(f, "{}", mime_str)
    }
}

impl MimeFormat for Application {
    fn from_ext(ext: &str) -> Option<crate::MimeType> {
        match ext {
            "wasm" => Some(crate::MimeType::Application(Application::Wasm)),
            "exe" => Some(crate::MimeType::Application(Application::Exe)),
            "dll" => Some(crate::MimeType::Application(Application::Dll)),
            "elf" => Some(crate::MimeType::Application(Application::Elf)),
            "bc" => Some(crate::MimeType::Application(Application::Bc)),
            "mach" => Some(crate::MimeType::Application(Application::Mach)),
            "class" => Some(crate::MimeType::Application(Application::Class)),
            "dex" => Some(crate::MimeType::Application(Application::Dex)),
            "dey" => Some(crate::MimeType::Application(Application::Dey)),
            "der" => Some(crate::MimeType::Application(Application::Der)),
            "obj" => Some(crate::MimeType::Application(Application::Obj)),
            _ => None,
        }
    }

    fn from_mime(mime: &str) -> Option<crate::MimeType> {
        match mime {
            "application/wasm" => Some(crate::MimeType::Application(Application::Wasm)),
            "application/vnd.microsoft.portable-executable" => {
                Some(crate::MimeType::Application(Application::Exe))
            }
            "application/x-executable" => Some(crate::MimeType::Application(Application::Elf)),
            "application/llvm" => Some(crate::MimeType::Application(Application::Bc)),
            "application/x-mach-binary" => Some(crate::MimeType::Application(Application::Mach)),
            "application/java" => Some(crate::MimeType::Application(Application::Class)),
            "application/vnd.android.dex" => Some(crate::MimeType::Application(Application::Dex)),
            "application/vnd.android.dey" => Some(crate::MimeType::Application(Application::Dey)),
            "application/x-x509-ca-cert" => Some(crate::MimeType::Application(Application::Der)),
            _ => None,
        }
    }
}