1use furmint_resources::ResourceResult;
2use furmint_resources::assets::AssetServer;
3use furmint_resources::loader::ErasedAssetLoader;
4use std::any::Any;
5use std::io::Read;
6
7#[derive(Debug)]
8struct Texture;
9#[derive(Debug)]
10struct TextureLoader;
11
12impl ErasedAssetLoader for TextureLoader {
13 fn load_erased(&self, _reader: &mut dyn Read) -> ResourceResult<Box<dyn Any + Send + Sync>> {
14 Ok(Box::new(Texture))
15 }
16}
17
18#[derive(Debug)]
19#[allow(dead_code)]
20struct Audio(f64);
21#[derive(Debug)]
22struct AudioLoader;
23
24impl ErasedAssetLoader for AudioLoader {
25 fn load_erased(&self, _reader: &mut dyn Read) -> ResourceResult<Box<dyn Any + Send + Sync>> {
26 Ok(Box::new(Audio(42.0)))
27 }
28}
29
30fn main() {
31 let mut asset_server = AssetServer::with_root("assets");
32 asset_server.register_loader::<Texture>(Box::new(TextureLoader));
33 asset_server.register_loader::<Audio>(Box::new(AudioLoader));
34 asset_server.load::<Texture>("example.png").unwrap();
35 asset_server.load::<Audio>("music.ogg").unwrap();
36 println!("{asset_server:#?}");
37
38 let audio = asset_server.get_named::<Audio>("music").unwrap();
39 println!("{:?}", audio.read().0);
40 audio.write().0 = 1.0;
41 println!("{:?}", audio.read().0);
42}