use crate::magical::signatures::SIGNATURE_KIND;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum FileKind {
Png,
Bitmap,
Gzip,
Bzip,
PkgZip,
Tar,
MSDOS,
Jpg,
Class,
MP3,
ISO,
RPM,
SQLite,
XML,
ICO,
WASM,
Deb,
RAR,
ScriptExecute,
ELF,
OGG,
_8BPS,
BLENDER,
TrueTypeFont,
OpenTypeFont,
ModuleForEvenvironmentModules,
WindowImagingFormat,
Slob,
SerializedJavaData,
CreativeVoiceFile,
AuAudioFileFormat,
OpenGLIrisPerformer,
Unknown,
}
impl FileKind {
#[must_use]
pub fn match_types(bytes: &[u8]) -> Self {
SIGNATURE_KIND
.iter()
.find(|magic| {
magic.offsets.iter().any(|&offset| {
magic.signatures.iter().any(|&signature| {
let offset_end = offset + signature.len();
bytes.len() >= offset_end && &bytes[offset..offset_end] == signature
})
})
})
.map_or(FileKind::Unknown, |magic| magic.kind)
}
}