quartz_cli/action/
var.rs

1use crate::{cli::VarCmd as Cmd, env::Variables, Ctx, PairMap, QuartzResult};
2use std::process::ExitCode;
3
4#[derive(clap::Args, Debug)]
5pub struct GetArgs {
6    key: String,
7}
8
9#[derive(clap::Args, Debug)]
10pub struct SetArgs {
11    #[arg(name = "VARIABLE", required = true)]
12    variables: Vec<String>,
13}
14
15#[derive(clap::Args, Debug)]
16pub struct RmArgs {
17    #[arg(name = "KEY", required = true)]
18    keys: Vec<String>,
19}
20
21pub fn cmd(ctx: &mut Ctx, command: Cmd) -> QuartzResult {
22    match command {
23        Cmd::Edit => edit(ctx)?,
24        Cmd::Get(args) => get(ctx, args),
25        Cmd::Set(args) => set(ctx, args)?,
26        Cmd::Rm(args) => rm(ctx, args)?,
27        Cmd::Ls => ls(ctx),
28    };
29
30    Ok(())
31}
32
33pub fn get(ctx: &Ctx, args: GetArgs) {
34    let env = ctx.require_env();
35    let v = env
36        .variables
37        .get(&args.key)
38        .unwrap_or_else(|| panic!("{} variable not set", args.key));
39
40    println!("{}", v);
41}
42
43pub fn set(ctx: &Ctx, args: SetArgs) -> QuartzResult {
44    let mut env = ctx.require_env();
45    for input in args.variables {
46        env.variables.set(&input);
47    }
48
49    env.update(ctx)?;
50    Ok(())
51}
52
53pub fn ls(ctx: &Ctx) {
54    let env = ctx.require_env();
55    print!("{}", env.variables);
56}
57
58pub fn edit(ctx: &Ctx) -> QuartzResult {
59    let env = ctx.require_env();
60    ctx.edit(&env.dir(ctx).join("variables"), |c| {
61        Variables::parse(c);
62        Ok(())
63    })?;
64
65    Ok(())
66}
67
68pub fn rm(ctx: &mut Ctx, args: RmArgs) -> QuartzResult {
69    let mut env = ctx.require_env();
70
71    for key in args.keys {
72        env.variables.remove(&key).unwrap_or_else(|| {
73            ctx.code(ExitCode::FAILURE);
74            eprintln!("{}: No such variable", key);
75            "".to_string()
76        });
77    }
78
79    env.update(ctx)?;
80    Ok(())
81}