qubit-magika

Magika-backed MIME detector integration for qubit-mime

Rust CI Coverage Crates.io Rust License

面向 qubit-mime 的 Magika 后端 MIME detector 集成。

概述

Qubit Magika 提供 MagikaMimeDetector,它实现 qubit_mime::MimeDetector,底层使用 Google Magika 模型。这样可以把 Magika 和 ONNX Runtime 依赖隔离在 qubit-magika 中,而不是直接放进 qubit-mime 核心库。

本 crate 默认启用 bundled-onnxruntime,便于普通构建直接链接和运行。如果业务 程序自己提供 ONNX Runtime 链接方式,可以关闭默认 features。

安装

[dependencies]
qubit-config = "0.12"
qubit-mime = "0.3"
qubit-magika = "0.6"

快速开始

use qubit_magika::MagikaMimeDetectorProvider;
use qubit_mime::{
    CONFIG_MIME_DETECTOR_DEFAULT,
    MimeConfig,
    MimeDetectorRegistry,
    MimeError,
};

fn main() -> Result<(), MimeError> {
    MimeDetectorRegistry::register_default(MagikaMimeDetectorProvider)?;

    let mut raw_config = qubit_config::Config::new();
    raw_config.set(CONFIG_MIME_DETECTOR_DEFAULT, "magika")?;
    let config = MimeConfig::from_config(&raw_config)?;

    let detector = MimeDetectorRegistry::default_registry()?.create_default_box(&config)?;
    let mime_type = detector.detect_by_content(b"#!/usr/bin/env python3\nprint('hello')\n");

    assert_eq!(Some("text/x-python".to_owned()), mime_type);
    Ok(())
}

Provider 名称

说明

MagikaMimeDetector 的文件名检测委托给 qubit_mime::RepositoryMimeDetector。内容、reader 和文件检测使用 Magika 推理, 然后返回 Magika 映射出的 MIME type。