Skip to main content

assets/
assets.rs

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}