doido_cache/
versioning.rs1use crate::store::CacheStore;
6use doido_core::Result;
7use serde_json::{json, Value};
8
9pub fn versioned_key(key: &str, version: u64) -> String {
11 format!("{key}:v{version}")
12}
13
14pub async fn write_versioned(
16 store: &dyn CacheStore,
17 key: &str,
18 version: u64,
19 value: Value,
20 ttl_secs: Option<u64>,
21) -> Result<()> {
22 store
23 .set(key, json!({ "__v": version, "value": value }), ttl_secs)
24 .await
25}
26
27pub async fn read_versioned(
30 store: &dyn CacheStore,
31 key: &str,
32 version: u64,
33) -> Result<Option<Value>> {
34 match store.get(key).await? {
35 Some(entry) if entry.get("__v") == Some(&json!(version)) => Ok(entry.get("value").cloned()),
36 _ => Ok(None),
37 }
38}