furmint-resources 0.1.0

Resources abstractions for `furmint`
Documentation
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);
}