acr-cli 0.3.1

A CLI tool for AtCoder competitive programming in Rust
use crate::config;

pub fn execute(key: Option<String>, value: Option<String>) -> anyhow::Result<()> {
    match (key, value) {
        (None, None) => {
            let cfg = config::global::load()?;
            println!("editor = {}", cfg.editor);
            println!("browser = {}", cfg.browser);
            Ok(())
        }
        (Some(key), None) => {
            let cfg = config::global::load()?;
            match key.as_str() {
                "editor" => println!("{}", cfg.editor),
                "browser" => println!("{}", cfg.browser),
                _ => eprintln!("Unknown config key: {}", key),
            }
            Ok(())
        }
        (Some(key), Some(value)) => {
            let mut cfg = config::global::load()?;
            match key.as_str() {
                "editor" => cfg.editor = value,
                "browser" => cfg.browser = value,
                _ => anyhow::bail!("Unknown config key: {}", key),
            }
            config::global::save(&cfg)?;
            println!("Updated {}.", key);
            Ok(())
        }
        (None, Some(_)) => unreachable!(),
    }
}