rem-bash 0.2.2

Remote bash script execution and library import
use anyhow::{anyhow, Result};
use serde::{Deserialize, Serialize};
use std::{collections::HashMap, path::PathBuf};
use tokio::fs;

#[derive(Default, Debug, Deserialize, Serialize)]
pub struct Config {
    pub require_bash_extension: Option<String>,
    pub require_lib_extension: Option<String>,

    #[serde(default)]
    pub repo: HashMap<String, crate::repo::GenericRepo>,
}

fn get_config_path() -> Result<PathBuf> {
    let mut path = dirs::home_dir().ok_or(anyhow!("Failed to get home directory"))?;
    path.push(".remconf.toml");
    Ok(path)
}

pub async fn load_config() -> Result<Config> {
    let path = get_config_path()?;

    if !path.is_file() {
        return Ok(Config::default());
    }

    let config_str = fs::read_to_string(&path).await?;
    Ok(toml::from_str(&config_str)?)
}

pub async fn save_config(config: &Config) -> Result<()> {
    let path = get_config_path()?;
    let config_str = toml::to_string(config)?;
    fs::write(path, &config_str).await?;

    Ok(())
}