pado 0.1.0

A tidal flow through your projects
Documentation
use anyhow::{Context, Result};
use std::env;
use std::process::{Command, exit};

pub fn run_config(path: bool, edit: bool, show: bool) -> Result<()> {
    let config_path = pado::get_global_config_path().context("failed to get config path")?;

    if path {
        println!("{}", config_path.display());
    } else if edit {
        let editor = env::var("EDITOR").unwrap_or_else(|_| "vi".to_string());

        if !config_path.exists() {
            if let Some(parent) = config_path.parent() {
                std::fs::create_dir_all(parent)?;
            }
            let default_config = pado::GlobalConfig::default();
            default_config.save()?;
        }

        let status = Command::new(&editor)
            .arg(&config_path)
            .status()
            .context(format!(
                "failed to execute {} - is $EDITOR set correctly?",
                editor
            ))?;

        exit(status.code().unwrap_or(1));
    } else if show {
        let config = pado::GlobalConfig::load().unwrap_or_default();
        let config_toml = toml::to_string_pretty(&config).context("failed to serialize config")?;
        println!("{}", config_toml);
    } else {
        if config_path.exists() {
            println!("Config: {}", config_path.display());
            println!("\nUse 'pd config --show' to view");
            println!("Use 'pd config --edit' to edit");
        } else {
            println!("No config file found at: {}", config_path.display());
            println!("\nUse 'pd config --edit' to create one");
        }
    }
    Ok(())
}