use std::collections::HashMap;
use dupe::Dupe;
use crate::environment::FrozenModule;
pub trait FileLoader {
fn load(&self, path: &str) -> crate::Result<FrozenModule>;
}
pub struct ReturnFileLoader<'a> {
pub modules: &'a HashMap<&'a str, &'a FrozenModule>,
}
impl<'a> FileLoader for ReturnFileLoader<'a> {
fn load(&self, path: &str) -> crate::Result<FrozenModule> {
match self.modules.get(path) {
Some(v) => Ok((*v).dupe()),
None => Err(crate::Error::new_other(anyhow::anyhow!(
"ReturnFileLoader does not know the module `{}`",
path
))),
}
}
}
#[cfg(test)]
pub(crate) struct ReturnOwnedFileLoader {
pub(crate) modules: HashMap<String, FrozenModule>,
}
#[cfg(test)]
impl FileLoader for ReturnOwnedFileLoader {
fn load(&self, path: &str) -> crate::Result<FrozenModule> {
match self.modules.get(path) {
Some(v) => Ok(v.dupe()),
None => Err(crate::Error::new_other(anyhow::anyhow!(
"ReturnOwnedFileLoader does not know the module `{}`",
path
))),
}
}
}