resource

Crates.ioresource
lib.rsresource
version0.5.0
sourcesrc
created_at2018-08-02 16:42:42.332745
updated_at2020-06-18 11:31:54.737348
descriptionMacros for statically including assets in release mode, but dynamically loading them in debug mode. This is primarily intended for games, allowing you to both avoid file IO in release builds and dynamically reload assets in debug mode.
homepage
repositoryhttps://github.com/mistodon/resource
max_upload_size
id77137
size28,638
Vi (mistodon)

documentation

README

resource

Build Status Crates.io Docs.rs

The resource crate contains macros for statically including assets in release mode, but dynamically loading them in debug mode.

This is primarily intended for games, allowing you to both avoid file IO in release builds and dynamically reload assets in debug mode.

You can change the default behaviour, in debug or release mode, by using the force-static and force-dynamic features.

When resources are included statically, they are constant in memory and are included in the final binary executable. This allows you to avoid packaging individual files with the released application.

When resources are included dynamically, they are loaded from file at runtime, and can therefore be switched and updated while the app runs.

Usage

[dependencies]
resource = "~0.4.0"

Basic usage

use resource::{resource, resource_str};

let text = resource_str!("assets/text_asset.txt");
println!("Text is: {}", text);

let bytes = resource!("assets/binary_asset.bin");
println!("Binary data is: {:?}", bytes);

let (a, b, c) = resource_str!(("a.txt", "b.txt", "c.txt"));
println!("Contents of the three files are: `{}`, `{}`, `{}`");

let decoded_images = resource!(["a.png", "b.png", "c.png"], |image: &[u8]| decode(image));

Reloading

use resource::resource_str;

let mut message = resource_str!("message.txt");

loop {
    println!("Hello: {}", message.as_ref());

    // Wait one second
    std::thread::sleep(std::time::Duration::from_secs(5));

    // You can edit the contents of message.txt

    // Reload the message so the new version is printed next iteration
    message.reload_if_changed();
}
Commit count: 38

cargo fmt