use lockmap::LruLockMap;
#[derive(Clone, Debug)]
struct Session {
user: String,
hits: u32,
}
fn main() {
let sessions = LruLockMap::<u64, Session>::with_options(3, 3, 1);
for id in 1..=3u64 {
sessions.insert(
id,
Session {
user: format!("user-{id}"),
hits: 0,
},
);
}
{
let mut entry = sessions.entry(1);
if let Some(session) = entry.get_mut() {
session.hits += 1;
}
}
sessions.insert(
4,
Session {
user: "user-4".into(),
hits: 0,
},
);
assert!(sessions.peek(&2).is_none(), "session 2 was evicted");
assert!(sessions.peek(&1).is_some(), "session 1 survived (promoted)");
for id in [1u64, 3, 4] {
if let Some(session) = sessions.peek(&id) {
println!("session {id}: {session:?}");
}
}
while let Some((id, session)) = sessions.pop_lru() {
println!("reclaimed session {id} of {}", session.user);
}
assert!(sessions.is_empty());
}