use crate::store::StoreOps; use serde_json::json; const KEY_SELECTED_MODEL: &str = "selected_model"; pub fn get_model_preference(store: &dyn StoreOps) -> Result, String> { if let Some(model) = store .get(KEY_SELECTED_MODEL) .as_ref() .and_then(|val| val.as_str()) { return Ok(Some(model.to_string())); } Ok(None) } pub fn set_model_preference(model: String, store: &dyn StoreOps) -> Result<(), String> { store.set(KEY_SELECTED_MODEL, json!(model)); store.save()?; Ok(()) } #[cfg(test)] mod tests { use super::*; use crate::store::JsonFileStore; use tempfile::tempdir; fn make_store(dir: &tempfile::TempDir) -> JsonFileStore { JsonFileStore::new(dir.path().join("test_store.json")).unwrap() } // --- model preference --- #[test] fn model_preference_none_by_default() { let dir = tempdir().unwrap(); let store = make_store(&dir); assert!(get_model_preference(&store).unwrap().is_none()); } #[test] fn set_and_get_model_preference() { let dir = tempdir().unwrap(); let store = make_store(&dir); set_model_preference("claude-3-sonnet".to_string(), &store).unwrap(); assert_eq!( get_model_preference(&store).unwrap(), Some("claude-3-sonnet".to_string()) ); } }