use std::{path::Path, collections::{BTreeMap, BTreeSet}};
use crate::{error::Error, structure::CADData};
use super::{FileResource, Resource};
pub type ExtensionMap = BTreeMap<String, BTreeSet<String>>;
pub trait Loader {
fn get_name(&self) -> &str;
fn get_priority(&self) -> u32;
fn get_extensions_mime_type_map(&self) -> ExtensionMap;
fn get_mime_types(&self) -> Vec<String>;
fn read(&self, resource: &dyn Resource) -> Result<CADData, Error>;
fn read_file(&self, p: &Path, mime_type: &str) -> Result<CADData, Error> {
let f = FileResource::new(p.to_owned(), mime_type);
self.read(&f)
}
}