quartz_cli/action/
query.rs

1use crate::{cli::QueryCmd as Cmd, Ctx, PairMap, QuartzResult};
2use colored::Colorize;
3use std::process::ExitCode;
4
5#[derive(clap::Args, Debug)]
6pub struct GetArgs {
7    key: String,
8}
9
10#[derive(clap::Args, Debug)]
11pub struct SetArgs {
12    #[arg(name = "QUERY", required = true)]
13    queries: Vec<String>,
14}
15
16#[derive(clap::Args, Debug)]
17pub struct RmArgs {
18    #[arg(name = "QUERY", required = true)]
19    keys: Vec<String>,
20}
21
22pub fn cmd(ctx: &mut Ctx, command: Cmd) -> QuartzResult {
23    match command {
24        Cmd::Get(args) => get(ctx, args.key),
25        Cmd::Set(args) => set(ctx, args.queries),
26        Cmd::Rm(args) => rm(ctx, args.keys)?,
27        Cmd::Ls => ls(ctx),
28    };
29
30    Ok(())
31}
32
33pub fn get(ctx: &Ctx, key: String) {
34    let (_, endpoint) = ctx.require_endpoint();
35
36    let value = endpoint
37        .query
38        .get(&key)
39        .unwrap_or_else(|| panic!("no query param {} found", key.red()));
40
41    println!("{value}");
42}
43
44pub fn set(ctx: &Ctx, queries: Vec<String>) {
45    let (_, mut endpoint) = ctx.require_endpoint();
46
47    for input in queries {
48        endpoint.query.set(&input);
49    }
50
51    endpoint.write();
52}
53
54pub fn rm(ctx: &mut Ctx, keys: Vec<String>) -> QuartzResult {
55    let (_, mut endpoint) = ctx.require_endpoint();
56
57    for k in keys {
58        if endpoint.query.contains_key(&k) {
59            endpoint.query.remove(&k);
60            println!("Removed query param: {}", k);
61        } else {
62            ctx.code(ExitCode::FAILURE);
63            eprintln!("{}: No such query param", k);
64        }
65    }
66
67    endpoint.write();
68    Ok(())
69}
70
71pub fn ls(ctx: &Ctx) {
72    let (_, endpoint) = ctx.require_endpoint();
73    print!("{}", endpoint.query);
74}
75
76pub fn print(ctx: &Ctx) {
77    let (_, endpoint) = ctx.require_endpoint();
78    println!("{}", endpoint.query_string());
79}