use anyhow::Result; use directories::ProjectDirs; use serde::{Deserialize, Serialize}; use std::fs; use std::path::PathBuf; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Config { pub base_url: String, pub user_token: String, } impl Default for Config { fn default() -> Self { Self { base_url: String::new(), user_token: String::new(), } } } impl Config { pub fn config_path() -> Result { let proj_dirs = ProjectDirs::from("com", "memoscli", "memoscli") .ok_or_else(|| anyhow::anyhow!("Failed to get project directories"))?; let config_dir = proj_dirs.config_dir(); fs::create_dir_all(config_dir)?; Ok(config_dir.join("config.json")) } pub fn load() -> Result { let path = Self::config_path()?; if path.exists() { let content = fs::read_to_string(&path)?; Ok(serde_json::from_str(&content)?) } else { Ok(Config::default()) } } pub fn save(&self) -> Result<()> { let path = Self::config_path()?; let content = serde_json::to_string_pretty(self)?; fs::write(path, content)?; Ok(()) } pub fn is_configured(&self) -> bool { !self.base_url.is_empty() && !self.user_token.is_empty() } }