14_assets_versioning/
14_assets_versioning.rs1use keket::{
2 database::{AssetDatabase, path::AssetPath},
3 fetch::{file::FileAssetFetch, rewrite::RewriteAssetFetch},
4 protocol::text::TextAssetProtocol,
5};
6use std::error::Error;
7
8const VERSION: &str = "2";
10
11fn main() -> Result<(), Box<dyn Error>> {
12 let mut database = AssetDatabase::default()
13 .with_protocol(TextAssetProtocol)
14 .with_fetch(RewriteAssetFetch::new(
17 FileAssetFetch::default().with_root("resources"),
18 |path| {
19 let version = path
21 .meta_items()
22 .find(|(key, _)| *key == "v")
23 .map(|(_, value)| value)
24 .unwrap_or(VERSION);
25 Ok(AssetPath::from_parts(
28 path.protocol(),
29 &format!(
30 "{}.v{}{}",
31 path.path_without_extension(),
32 version,
33 path.path_dot_extension().unwrap_or_default()
34 ),
35 path.meta(),
36 ))
37 },
38 ));
39
40 let v1 = database.ensure("text://versioned.txt?v=1")?;
42 println!("Version 1: {}", v1.access::<&String>(&database));
43
44 let v2 = database.ensure("text://versioned.txt")?;
46 println!("Version 2: {}", v2.access::<&String>(&database));
47
48 Ok(())
49}