Skip to content

libmagic bindings for Rust

License

MIT, Apache-2.0 licenses found

Licenses found

MIT
LICENSE
Apache-2.0
LICENSE.Apache
Notifications You must be signed in to change notification settings

marirs/filemagic-rs

 
 

Repository files navigation

filemagic-rs

Crates.io Documentation Build Status

filemagic is a Rust wrapper for libmagic, the library that supports the file command on most Unix systems. The package provides a simple Rust 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

filemagic = "0.13.1"

vendored

The vendored feature uses the cc crate to compile and static link a vendored version of libmagic, currently based on 5.45.

Adding dependency to your Cargo.toml file

filemagic = { version = "0.13.1", features = ["vendored"] }

Using Macros

  • Using default libmagic database:
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:
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:
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:
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

cargo doc --release

References:

About

libmagic bindings for Rust

Topics

Resources

License

MIT, Apache-2.0 licenses found

Licenses found

MIT
LICENSE
Apache-2.0
LICENSE.Apache

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 97.0%
  • Shell 3.0%