Crate file_type

Source
Expand description

§file_type FileType

Code Coverage Benchmarks License Semantic Versioning

§Getting Started

A file type. The file type is determined by examining the file or bytes against known file signatures and file extensions.

Signature, extension and media type data are provided by: The National Archives PRONOM Apache HTTPD Linguist

§Example

Detect a Java class file from bytes:

use file_type::FileType;

let file_type = FileType::from_bytes(b"\xCA\xFE\xBA\xBE");
assert_eq!(file_type.name(), "Java Class File");
assert_eq!(file_type.media_types(), Vec::<String>::new());
assert_eq!(file_type.extensions(), vec!["class"]);

Detect the file type from a file:

use file_type::FileType;
use std::path::Path;

#[tokio::main]
async fn main() {
    let file_path = Path::new("image.png");
    let file_type = FileType::try_from_file(file_path).await.expect("file type not found");
    assert_eq!(file_type.id(), "fmt/11");
    assert_eq!(file_type.name(), "Portable Network Graphics");
    assert_eq!(file_type.extensions(), vec!["png"]);
    assert_eq!(file_type.media_types(), vec!["image/png"]);
}

Detect the file type from a file synchronously:

use file_type::FileType;
use std::path::Path;

let file_path = Path::new("image.png");
let file_type = FileType::try_from_file_sync(file_path).expect("file type not found");
assert_eq!(file_type.id(), "fmt/11");
assert_eq!(file_type.name(), "Portable Network Graphics");
assert_eq!(file_type.extensions(), vec!["png"]);
assert_eq!(file_type.media_types(), vec!["image/png"]);

§Supported File Types

List of supported file types

§Safety

This crate uses #![forbid(unsafe_code)] to ensure everything is implemented in 100% safe Rust.

Modules§

Structs§

  • A file type. The file type is determined by examining the file or bytes against known file signatures and file extensions.

Enums§

  • Errors that can occur when determining the file type

Type Aliases§