use std::fmt::Debug;
use std::io::{
Cursor,
Read,
};
use std::path::Path;
use std::sync::Arc;
use crate::MimeResult;
use super::MediaStreamType;
pub trait MediaStreamClassifier: Debug + Send + Sync {
fn classify_file(&self, file: &Path) -> MimeResult<MediaStreamType>;
fn classify_reader(&self, reader: &mut dyn Read) -> MimeResult<MediaStreamType>;
fn classify_content(&self, content: &[u8]) -> MimeResult<MediaStreamType> {
let mut cursor = Cursor::new(content);
self.classify_reader(&mut cursor)
}
}
impl MediaStreamClassifier for Box<dyn MediaStreamClassifier> {
fn classify_file(&self, file: &Path) -> MimeResult<MediaStreamType> {
self.as_ref().classify_file(file)
}
fn classify_reader(&self, reader: &mut dyn Read) -> MimeResult<MediaStreamType> {
self.as_ref().classify_reader(reader)
}
}
impl MediaStreamClassifier for Arc<dyn MediaStreamClassifier> {
fn classify_file(&self, file: &Path) -> MimeResult<MediaStreamType> {
self.as_ref().classify_file(file)
}
fn classify_reader(&self, reader: &mut dyn Read) -> MimeResult<MediaStreamType> {
self.as_ref().classify_reader(reader)
}
}