use std::cell::RefCell;
use std::collections::HashMap;
use crate::canonical::Model;
use crate::store::ModelCache;
#[derive(Default)]
pub struct MemoryModelCache {
entries: RefCell<HashMap<String, Vec<Model>>>,
puts: RefCell<Vec<(String, Vec<Model>)>>,
}
impl MemoryModelCache {
pub fn new() -> Self {
MemoryModelCache::default()
}
pub fn with(provider: &str, models: Vec<Model>) -> Self {
let cache = MemoryModelCache::new();
cache
.entries
.borrow_mut()
.insert(provider.to_owned(), models);
cache
}
pub fn puts(&self) -> Vec<(String, Vec<Model>)> {
self.puts.borrow().clone()
}
}
impl ModelCache for MemoryModelCache {
fn get(&self, provider: &str) -> Option<Vec<Model>> {
self.entries.borrow().get(provider).cloned()
}
fn put(&self, provider: &str, models: &[Model]) {
self.entries
.borrow_mut()
.insert(provider.to_owned(), models.to_vec());
self.puts
.borrow_mut()
.push((provider.to_owned(), models.to_vec()));
}
}