use std::process::ExitCode;
use palc::{Parser, Subcommand};
#[derive(Debug, Parser, Clone)]
#[command(version, long_about)]
struct Cli {
#[command(subcommand)]
command: Subcommand,
}
#[derive(Debug, Subcommand, Clone)]
enum Subcommand {
Set { var: String, value: String },
SetExpandString { var: String, value: String },
Get { var: String },
Remove { var: String },
Exists { var: String, value: String },
Append { var: String, value: String },
Prepend { var: String, value: String },
RemoveFromList { var: String, value: String },
}
fn main() -> ExitCode {
match run() {
Ok(code) => code,
Err(e) => {
eprintln!("error: {e}");
ExitCode::FAILURE
},
}
}
fn run() -> windows_env::Result<ExitCode> {
match Cli::parse().command {
Subcommand::Set { var, value } => {
windows_env::set(&var, &value)?;
println!("{var}={value}");
},
Subcommand::SetExpandString { var, value } => {
windows_env::set_expand_string(&var, &value)?;
println!("{var}={value} (REG_EXPAND_SZ)");
},
Subcommand::Get { var } => {
if let Some(value) = windows_env::get(&var)? {
println!("{value}");
} else {
eprintln!("{var} not found");
return Ok(ExitCode::FAILURE);
}
},
Subcommand::Remove { var } => {
windows_env::remove(&var)?;
println!("{var} removed");
},
Subcommand::Exists { var, value } => {
let exists = windows_env::exists_in_list(&var, &value)?;
println!("{exists}");
if !exists {
return Ok(ExitCode::FAILURE);
}
},
Subcommand::Append { var, value } => {
windows_env::append(&var, &value)?;
println!("appended: {value} to {var}");
},
Subcommand::Prepend { var, value } => {
windows_env::prepend(&var, &value)?;
println!("prepended: {value} to {var}");
},
Subcommand::RemoveFromList { var, value } => {
if windows_env::remove_from_list(&var, &value)? {
println!("removed: {value} from {var}");
} else {
eprintln!("{value} not found in {var}");
return Ok(ExitCode::FAILURE);
}
},
}
Ok(ExitCode::SUCCESS)
}