use crate::MimeMagicMatcher;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MimeMagic {
priority: u16,
matchers: Vec<MimeMagicMatcher>,
}
impl MimeMagic {
pub const MIN_PRIORITY: u16 = 0;
pub const MAX_PRIORITY: u16 = 100;
pub const DEFAULT_PRIORITY: u16 = 50;
pub fn new(priority: u16, matchers: Vec<MimeMagicMatcher>) -> Self {
Self { priority, matchers }
}
pub fn priority(&self) -> u16 {
self.priority
}
pub fn matchers(&self) -> &[MimeMagicMatcher] {
&self.matchers
}
pub fn max_test_bytes(&self) -> usize {
self.matchers
.iter()
.map(MimeMagicMatcher::max_test_bytes)
.max()
.unwrap_or(0)
}
pub fn matches(&self, bytes: &[u8]) -> bool {
self.matchers.iter().any(|matcher| matcher.matches(bytes))
}
}