free-launch 0.2.9

A simple fuzzy launcher written in Rust.
Documentation
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 {
    /// Load config from the default search-cli config location
    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))
    }

    /// Get the default config file path: ~/.config/search/config.yaml
    fn default_config_path() -> PathBuf {
        dirs::home_dir()
            .unwrap_or_else(|| PathBuf::from("."))
            .join(".config")
            .join("search")
            .join("config.yaml")
    }
}