use std::time::Duration;
use stretto::AsyncCache;
#[tokio::main]
async fn main() {
let c: AsyncCache<String, String> = AsyncCache::new(12960, 1e6 as i64, tokio::spawn).unwrap();
c.insert("key1".to_string(), "value1".to_string(), 1).await;
c.insert_with_ttl(
"key2".to_string(),
"value2".to_string(),
1,
Duration::from_secs(3),
)
.await;
c.wait().await.unwrap();
let key1 = "key1".to_string();
let v = c.get(&key1).await.unwrap();
assert_eq!(v.value(), &"value1");
v.release();
{
let mut v = c.get_mut(&key1).await.unwrap();
v.write("value2".to_string());
assert_eq!(v.value(), &"value2");
}
let v = c.get_mut(&key1).await.unwrap();
v.write_once("value3".to_string());
let v = c.get(&key1).await.unwrap();
assert_eq!(v.value(), &"value3");
v.release();
c.clear().await.unwrap();
c.wait().await.unwrap();
assert!(c.get(&key1).await.is_none());
}