filemagic-rs ------------- ![Crates.io](https://img.shields.io/crates/v/filemagic) [![Documentation](https://docs.rs/filemagic/badge.svg)](https://docs.rs/filemagic) [![Build Status](https://travis-ci.org/marirs/filemagic-rs.svg?branch=master)](https://travis-ci.org/marirs/filemagic-rs) filemagic is a [Rust](http://www.rust-lang.org/) wrapper for [libmagic](http://darwinsys.com/file/), the library that supports the file command on most Unix systems. The package provides a simple [Rust](http://www.rust-lang.org/) API for identifying files using the extensive database of magic strings that ships with libmagic. It can also load a custom database of magic strings. ### Requirements - `Rust 1.40.0` or above stable version - `libmagic` - macOS: `brew install libmagic` - Linux: `apt install libmagic1 libmagic-dev` ### Usage Adding dependency to your `Cargo.toml` file ```toml filemagic = "0.13.1" ``` ## vendored The `vendored` feature uses the [`cc` crate](https:/docs.rs/cc) to compile and static link a vendored version of libmagic, currently based on 5.45. Adding dependency to your `Cargo.toml` file ```toml filemagic = { version = "0.13.1", features = ["vendored"] } ``` --- ### Using Macros - Using default libmagic database: ```rust use filemagic::magic; fn main() { let test_file_path = "/path/to/file"; let magic = magic!().expect("error"); println!("{}", magic.file(&test_file_path).expect("error")); } ``` - Using custom Magic database: ```rust use filemagic::magic; fn main() { let test_file_path = "/path/to/file"; let databases = vec!["data/db-images-png"]; let magic = magic!(,&databases).expect("error"); println!("{}", magic.file(&test_file_path).expect("error")); } ``` --- ### Using the function - Using the default libmagic database: ```rust use filemagic::Magic; fn main() { let test_file_path = "/path/to/file"; // Create a new default configuration let cookie = Magic::open(Default::default()).expect("error"); cookie.load::<String>(&[]).expect("error"); let magic = cookie.file(&test_file_path).expect("error in magic"); println!("magic= {}", magic); } ``` - Using custom Magic database: ```rust use filemagic::Magic; fn main() { // Create a new default configuration let cookie = Magic::open(Default::default()).expect("error"); // Load one specific magic database let databases = vec!["data/db-images-png"]; assert!(cookie.load(&databases).is_ok()); // Recognize the magic of a test file let test_file_path = "data/rust-logo-128x128-blk.png"; let expected_magic = "PNG image data, 128 x 128, 8-bit/color RGBA, non-interlaced"; assert_eq!(cookie.file(&test_file_path).unwrap(), expected_magic); } ``` --- ### To generate the docs ```bash cargo doc --release ``` --- References: - robo9k [rust-magic](https://github.com/robo9k/rust-magic) & [rust-magic-sys](https://github.com/robo9k/rust-magic-sys) - [Aaron Iles](https://github.com/aliles/filemagic)