use std::collections::HashMap; #[derive(rust_embed::RustEmbed)] #[folder = "assets/textures"] pub struct BaseFolder; // copied from github.com/minetest/minetest pub struct MediaMgr { packs: Vec>>, srv_idx: usize, } impl MediaMgr { pub fn new() -> Self { Self { packs: [ BaseFolder::iter() .map(|file| { ( file.to_string(), BaseFolder::get(&file).unwrap().data.into_owned(), ) }) .collect(), HashMap::new(), ] .into(), srv_idx: 1, } } pub fn add_server_media(&mut self, files: HashMap>) { self.packs[self.srv_idx].extend(files.into_iter()); } pub fn get(&self, file: &str) -> Option<&[u8]> { self.packs .iter() .rev() .find_map(|pack| pack.get(file)) .map(Vec::as_slice) } }