use clap::{Parser, Subcommand};
use crossterm::style::Stylize;
use scoop_rs::{operation, Session};
use crate::Result;
#[derive(Debug, Parser)]
pub struct Args {
#[command(subcommand)]
command: Command,
}
#[derive(Debug, Subcommand)]
pub enum Command {
Edit,
#[clap(alias = "ls")]
List,
#[clap(arg_required_else_help = true)]
Set {
key: String,
value: String,
},
#[clap(arg_required_else_help = true)]
Unset {
key: String,
},
}
pub fn execute(args: Args, session: &Session) -> Result<()> {
match args.command {
Command::Edit => {
let editor = std::env::var("EDITOR").unwrap_or_else(|_| "notepad".to_string());
let mut child = std::process::Command::new(editor.as_str())
.arg(&session.config().path)
.spawn()?;
child.wait()?;
Ok(())
}
Command::List => {
let config_json = operation::config_list(session)?;
println!("{}:", session.config().path.display().to_string().green());
println!("{}", config_json);
Ok(())
}
Command::Set { key, value } => {
operation::config_set(session, key.as_str(), value.as_str())?;
println!("Config '{}' has been set to '{}'", key, value);
Ok(())
}
Command::Unset { key } => {
operation::config_set(session, key.as_str(), "")?;
println!("Config '{}' has been unset", key);
Ok(())
}
}
}