Skip to main content

05_deferred_fetch/
05_deferred_fetch.rs

1use keket::{
2    database::AssetDatabase,
3    fetch::{AssetAwaitsAsyncFetch, deferred::DeferredAssetFetch, file::FileAssetFetch},
4    protocol::bytes::BytesAssetProtocol,
5};
6use std::error::Error;
7
8fn main() -> Result<(), Box<dyn Error>> {
9    /* ANCHOR: main */
10    let mut database = AssetDatabase::default()
11        .with_protocol(BytesAssetProtocol)
12        // Deferred asset fetch runs fetching jobs in threads for any fetch engine.
13        .with_fetch(DeferredAssetFetch::new(
14            FileAssetFetch::default().with_root("resources"),
15        ));
16
17    let package = database.ensure("bytes://package.zip")?;
18
19    // Simulate waiting for asset bytes loading to complete.
20    while package.has::<AssetAwaitsAsyncFetch>(&database) {
21        println!("Package awaits async fetch done");
22        database.maintain()?;
23    }
24
25    // Run another maintain pass to process loaded bytes.
26    database.maintain()?;
27
28    println!(
29        "Package byte size: {}",
30        package.access::<&Vec<u8>>(&database).len()
31    );
32    /* ANCHOR_END: main */
33
34    Ok(())
35}