1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
use ::abc::{Loader, LoadResult, LoadError}; #[derive(Debug)] pub struct NamespaceLoader { namespace: String, loader: Box<Loader>, } impl NamespaceLoader { pub fn new(namespace: &str, loader: Box<Loader>) -> Box<Self> { Box::new(NamespaceLoader { namespace: namespace.to_owned(), loader: loader }) } } impl Loader for NamespaceLoader { fn load(&self, name: &str) -> LoadResult { match name.starts_with(self.namespace.as_str()) { true => self.loader.load(&name[self.namespace.len()..]), false => Err(LoadError::NotFound), } } }