use crate::ByteBuffer;
use super::Resource;
pub struct ResourceResolver {
resolvers: Vec<Box<dyn Resource + Send + Sync>>,
}
impl Default for ResourceResolver {
fn default() -> Self {
Self::new()
}
}
impl ResourceResolver {
pub fn new() -> Self {
Self {
resolvers: Vec::new(),
}
}
pub fn add_source(&mut self, source: Box<dyn Resource + Send + Sync>) {
self.resolvers.push(source);
}
}
impl Resource for ResourceResolver {
fn read(&mut self, path: &str) -> Option<ByteBuffer> {
for resolver in &mut self.resolvers {
if let Some(bytes) = resolver.read(path) {
return Some(bytes);
}
}
None
}
fn exists(&mut self, path: &str) -> bool {
for resolver in &mut self.resolvers {
if resolver.exists(path) {
return true;
}
}
false
}
}