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