#[cfg(coverage)]
use qubit_mime::MimeError;
use qubit_mime::{
MimeConfig,
MimeDetector,
MimeDetectorSpec,
ProviderCreateError,
ProviderDescriptor,
ProviderRegistryError,
ServiceProvider,
};
use crate::MagikaMimeDetector;
#[derive(Debug, Clone, Copy, Default)]
pub struct MagikaMimeDetectorProvider;
impl ServiceProvider<MimeDetectorSpec> for MagikaMimeDetectorProvider {
#[inline]
fn descriptor(&self) -> Result<ProviderDescriptor, ProviderRegistryError> {
let descriptor = ProviderDescriptor::new("magika")
.expect("Magika detector provider id should be valid")
.with_aliases(&["magika-mime-detector", "MagikaMimeDetector"])
.expect("Magika detector provider aliases should be valid")
.with_priority(20);
Ok(descriptor)
}
#[inline]
fn create_box(
&self,
config: &MimeConfig,
) -> Result<Box<dyn MimeDetector>, ProviderCreateError> {
MagikaMimeDetector::from_mime_config(config.clone())
.map(|detector| Box::new(detector) as Box<dyn MimeDetector>)
.map_err(|error| ProviderCreateError::failed(&error.to_string()))
}
}
#[cfg(coverage)]
pub fn coverage_map_provider_create_error() -> ProviderCreateError {
let error = MimeError::detector_backend("magika", "coverage provider failure");
ProviderCreateError::failed(&error.to_string())
}