quartz_cli/action/
query.rs1use 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}