use crate::store::CacheStore;
use doido_core::Result;
use serde_json::{json, Value};
pub fn versioned_key(key: &str, version: u64) -> String {
format!("{key}:v{version}")
}
pub async fn write_versioned(
store: &dyn CacheStore,
key: &str,
version: u64,
value: Value,
ttl_secs: Option<u64>,
) -> Result<()> {
store
.set(key, json!({ "__v": version, "value": value }), ttl_secs)
.await
}
pub async fn read_versioned(
store: &dyn CacheStore,
key: &str,
version: u64,
) -> Result<Option<Value>> {
match store.get(key).await? {
Some(entry) if entry.get("__v") == Some(&json!(version)) => Ok(entry.get("value").cloned()),
_ => Ok(None),
}
}