runtime_persistence/
runtime_persistence.rs1use std::fs;
2use std::time::{SystemTime, UNIX_EPOCH};
3
4use this_me::kernel::Value;
5use this_me::runtime::{runtime_receipt_to_json, KernelRuntime};
6use this_me::storage::JsonFileStore;
7
8fn temp_state_path(label: &str) -> std::path::PathBuf {
9 let nonce = SystemTime::now()
10 .duration_since(UNIX_EPOCH)
11 .unwrap()
12 .as_nanos();
13 std::env::temp_dir().join(format!(
14 "this-me-example-{label}-{}-{nonce}.json",
15 std::process::id()
16 ))
17}
18
19fn run() -> Result<(), Box<dyn std::error::Error>> {
20 let path = temp_state_path("runtime");
21 let mut runtime = KernelRuntime::load(JsonFileStore::new(&path))?;
22
23 let receipt = runtime.write_with_receipt("apps.demo.home.count", 3_u64)?;
24 let json = runtime_receipt_to_json(&receipt);
25
26 assert_eq!(json["events"][0]["path"][0], "apps");
27 assert_eq!(json["events"][0]["path"][2], "home");
28 assert_eq!(json["events"][0]["value"], 3.0);
29
30 let restored = KernelRuntime::load(JsonFileStore::new(&path))?;
31 assert_eq!(
32 restored.read("apps.demo.home.count"),
33 Some(&Value::from(3_u64))
34 );
35 assert!(restored.events().is_empty());
36
37 println!("{json}");
38 let _ = fs::remove_file(path);
39 Ok(())
40}
41
42fn main() -> Result<(), Box<dyn std::error::Error>> {
43 run()
44}
45
46#[test]
47fn example_runs() {
48 run().unwrap();
49}