use color_eyre::Result;
use serde::{Deserialize, Serialize};
use std::fs;
use std::path::PathBuf;
use crate::model::search_provider::SearchProvider;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Config {
pub version: String,
pub providers: Vec<SearchProvider>,
}
impl Config {
pub fn load() -> Result<Option<Self>> {
let config_path = Self::default_config_path();
if !config_path.exists() {
return Ok(None);
}
let content = fs::read_to_string(&config_path)?;
let config: Config = serde_yaml::from_str(&content)?;
Ok(Some(config))
}
fn default_config_path() -> PathBuf {
dirs::home_dir()
.unwrap_or_else(|| PathBuf::from("."))
.join(".config")
.join("search")
.join("config.yaml")
}
}