Skip to main content

qubit_mime/detector/
repository_mime_detector_provider.rs

1/*******************************************************************************
2 *
3 *    Copyright (c) 2026 Haixing Hu.
4 *
5 *    SPDX-License-Identifier: Apache-2.0
6 *
7 *    Licensed under the Apache License, Version 2.0.
8 *
9 ******************************************************************************/
10//! Provider for the built-in repository-backed MIME detector.
11
12use crate::{
13    MimeConfig,
14    MimeDetector,
15    ProviderCreateError,
16    ProviderDescriptor,
17    ProviderRegistryError,
18    RepositoryMimeDetector,
19    ServiceProvider,
20};
21
22use super::MimeDetectorSpec;
23
24/// Provider for the built-in repository-backed detector.
25#[derive(Debug, Clone, Copy, Default)]
26pub struct RepositoryMimeDetectorProvider;
27
28impl ServiceProvider<MimeDetectorSpec> for RepositoryMimeDetectorProvider {
29    /// Gets repository detector metadata.
30    fn descriptor(&self) -> Result<ProviderDescriptor, ProviderRegistryError> {
31        let descriptor = ProviderDescriptor::new("repository")
32            .expect("built-in repository detector provider id should be valid")
33            .with_aliases(&["repository-mime-detector"])
34            .expect("built-in repository detector aliases should be valid");
35        Ok(descriptor)
36    }
37
38    /// Creates a repository-backed detector.
39    fn create_box(
40        &self,
41        config: &MimeConfig,
42    ) -> Result<Box<dyn MimeDetector>, ProviderCreateError> {
43        Ok(Box::new(RepositoryMimeDetector::from_mime_config(
44            config.clone(),
45        )))
46    }
47}