Crate tree_magic
source ·Expand description
tree_magic
is a Rust crate that determines the MIME type a given file or byte stream.
About
tree_magic
is designed to be more efficient and to have less false positives compared
to the old approach used by libmagic
, or old-fashioned file extension comparisons.
Instead, this loads all known MIME types into a tree based on subclasses. Then, instead
of checking against every file type, tree_magic
will traverse down the tree and
only check the files that make sense to check.
Features
- Very fast perfomance (~150ns to check one file against one type, between 5,000ns and 100,000ns to find a MIME type.)
- Check if a file is a certain type.
- Handles aliases (ex:
application/zip
vsapplication/x-zip-compressed
) - Uses system FreeDesktop.org magic files on Linux systems, and built-in magic file on Windows and macOS.
- Can delegate different file types to different “checkers”, reducing false positives by choosing a different method of attack.
Feature flags
cli
: Enable building of tmagic
binary
staticmime
: Change output of all from_*
functions from String
to &'static str
.
Disables ability to load system magic files. Slightly faster.
Example
extern crate tree_magic;
// Load a GIF file
let input: &[u8] = include_bytes!("tests/image/gif");
// Find the MIME type of the GIF
let result = tree_magic::from_u8(input);
assert_eq!(result, "image/gif");
// Check if the MIME and the file are a match
let result = tree_magic::match_u8("image/gif", input);
assert_eq!(result, true);
Structs
The TypeStruct autogenerated at library init, and used by the library.
Information about currently loaded MIME types
Enums
Cache used for each checker for each file
Functions
Gets the type of a file from a filepath.
Gets the type of a file from a filepath, starting at a certain node
in the type graph.
Gets the type of a file from a byte stream.
Gets the type of a file from a raw bytestream, starting at a certain node
in the type graph.
Determines if a MIME is an alias of another MIME
Check if the given filepath matches the given MIME type.
Checks if the given bytestream matches the given MIME type.