Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

REDB database

Required crate: keket-redb.

RedbContainerPartialFetch partial fetch engine allows to unpack asset bytes from REDB database - useful for asset packs.

use keket::{ database::AssetDatabase, fetch::container::ContainerAssetFetch, protocol::{bundle::BundleAssetProtocol, bytes::BytesAssetProtocol, text::TextAssetProtocol}, }; use keket_redb::{RedbContainerPartialFetch, third_party::redb::Database}; use serde_json::Value; use std::error::Error; fn main() -> Result<(), Box<dyn Error>> { let mut database = AssetDatabase::default() .with_protocol(TextAssetProtocol) .with_protocol(BytesAssetProtocol) .with_protocol(BundleAssetProtocol::new("json", |bytes: Vec<u8>| { Ok((serde_json::from_slice::<Value>(&bytes)?,).into()) })) .with_fetch(ContainerAssetFetch::new(RedbContainerPartialFetch::new( Database::create("./resources/database.redb")?, "assets", ))); let lorem = database.ensure("text://lorem.txt")?; println!("Lorem Ipsum: {}", lorem.access::<&String>(&database)); let json = database.ensure("json://person.json")?; println!("JSON: {:#}", json.access::<&Value>(&database)); let trash = database.ensure("bytes://trash.bin")?; println!("Bytes: {:?}", trash.access::<&Vec<u8>>(&database)); Ok(()) }

Since this is blocking fetch, you might want to wrap it with DeferredAssetFetch to run REDB fetching jobs in background.