roxide 0.2.17

A better rm command for your terminal
#![allow(dead_code)]

use std::fs::{self, create_dir_all};

use anyhow::Context;
use dirs::config_dir;
use log::trace;
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
pub struct Config {
    pub settings: Settings,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Settings {
    pub user_names: Option<Vec<String>>,
    pub backup_dir: Option<String>,
    pub trash_dir: Option<String>,
}

pub fn read_config(filename: &str) -> anyhow::Result<Config, anyhow::Error> {
    let content = fs::read_to_string(filename).context("failed to read config file")?;
    let config: Config = toml::de::from_str(&content).context("failed to parse config file")?;
    Ok(config)
}

fn trash_dir_check() {
    config_dir()
        .unwrap()
        .join("roxide/config.toml")
        .exists()
        .then(|| trace!("config exists"))
        .unwrap_or_else(generate_config);
    let binding = config_dir()
        .unwrap()
        .join("roxide/config.toml")
        .to_string_lossy()
        .to_string();
    let path = binding.as_str();
    let config = read_config(path).unwrap();
    println!("{:#?}", config);
    if let Some(b) = config.settings.backup_dir {
        println!("{b}");
    }
    if let Some(t) = config.settings.trash_dir {
        println!("{t}");
    }
}

fn generate_config() {
    let config_dir = config_dir().unwrap().join("roxide");
    if !&config_dir.exists() {
        create_dir_all(&config_dir).unwrap();
    }
    fs::write(
        config_dir.join("config.toml"),
        "[settings]\n# user_names = ['username01']\n# backup_dir =\n# trash_dir =",
    )
    .unwrap();
}