use furmint_resources::ResourceResult;
use furmint_resources::assets::AssetServer;
use furmint_resources::loader::ErasedAssetLoader;
use std::any::Any;
use std::io::Read;
#[derive(Debug)]
struct Texture;
#[derive(Debug)]
struct TextureLoader;
impl ErasedAssetLoader for TextureLoader {
fn load_erased(&self, _reader: &mut dyn Read) -> ResourceResult<Box<dyn Any + Send + Sync>> {
Ok(Box::new(Texture))
}
}
#[derive(Debug)]
#[allow(dead_code)]
struct Audio(f64);
#[derive(Debug)]
struct AudioLoader;
impl ErasedAssetLoader for AudioLoader {
fn load_erased(&self, _reader: &mut dyn Read) -> ResourceResult<Box<dyn Any + Send + Sync>> {
Ok(Box::new(Audio(42.0)))
}
}
fn main() {
let mut asset_server = AssetServer::with_root("assets");
asset_server.register_loader::<Texture>(Box::new(TextureLoader));
asset_server.register_loader::<Audio>(Box::new(AudioLoader));
asset_server.load::<Texture>("example.png").unwrap();
asset_server.load::<Audio>("music.ogg").unwrap();
println!("{asset_server:#?}");
let audio = asset_server.get_named::<Audio>("music").unwrap();
println!("{:?}", audio.read().0);
audio.write().0 = 1.0;
println!("{:?}", audio.read().0);
}