qubit_mime/detector/
file_command_mime_detector_provider.rs1use crate::{
11 FileCommandMimeDetector,
12 MimeConfig,
13 MimeDetector,
14 ProviderAvailability,
15 ProviderCreateError,
16 ProviderDescriptor,
17 ProviderRegistryError,
18 ServiceProvider,
19};
20
21use super::{
22 MimeDetectorAvailability,
23 MimeDetectorSpec,
24};
25
26#[derive(Debug, Clone, Copy, Default)]
28pub struct FileCommandMimeDetectorProvider;
29
30impl ServiceProvider<MimeDetectorSpec> for FileCommandMimeDetectorProvider {
31 fn descriptor(&self) -> Result<ProviderDescriptor, ProviderRegistryError> {
33 let descriptor = ProviderDescriptor::new("file")
34 .expect("built-in file detector provider id should be valid")
35 .with_aliases(&["file-command", "file-command-mime-detector"])
36 .expect("built-in file detector aliases should be valid")
37 .with_priority(10);
38 Ok(descriptor)
39 }
40
41 fn availability(&self, _config: &MimeConfig) -> MimeDetectorAvailability {
43 if FileCommandMimeDetector::is_available() {
44 ProviderAvailability::Available
45 } else {
46 ProviderAvailability::unavailable("`file` command is not available")
47 }
48 }
49
50 fn create_box(
52 &self,
53 config: &MimeConfig,
54 ) -> Result<Box<dyn MimeDetector>, ProviderCreateError> {
55 Ok(Box::new(FileCommandMimeDetector::from_mime_config(
56 config.clone(),
57 )))
58 }
59}