use std::collections::HashMap;
// 定义Cacheable特征
trait Cacheable {
fn get_key(&self) -> String;
}
// 缓存系统结构体
struct Cache<T: Cacheable> {
data: HashMap<String, Box<T>>,
}
impl<T: Cacheable> Cache<T> {
// 添加缓存项
fn add(&mut self, item: T) {
let key = item.get_key();
self.data.insert(key, Box::new(item));
}
// 删除缓存项
fn remove(&mut self, key: &str) {
self.data.remove(key);
}
// 获取缓存项
fn get(&self, key: &str) -> Option<&T> {
self.data.get(key).map(|item| &**item)
}
}
// 测试代码
#[cfg(test)]
mod tests {
use super::*;
struct TestItem {
key: String,
}
impl Cacheable for TestItem {
fn get_key(&self) -> String {
self.key.clone()
}
}
#[test]
fn test_cache() {
let mut cache = Cache::<TestItem> {
data: HashMap::new(),
};
let item1 = TestItem {
key: "item1".to_string(),
};
cache.add(item1);
assert!(cache.get("item1").is_some());
cache.remove("item1");
assert!(cache.get("item1").is_none());
}
}