1pub mod cli;
2pub mod queue;
3pub mod queue_path;
4
5use clap::{Parser, Subcommand};
6use std::path::PathBuf;
7
8#[derive(Parser)]
9#[command(name = "sq", about = "Manage Sift's review queue")]
10pub struct Cli {
11 #[arg(short = 'q', long = "queue", value_name = "PATH", global = true)]
13 pub queue: Option<PathBuf>,
14
15 #[command(subcommand)]
16 pub command: Commands,
17}
18
19#[derive(Subcommand)]
20pub enum Commands {
21 Add(AddArgs),
23 List(ListArgs),
25 Show(ShowArgs),
27 Edit(EditArgs),
29 Rm(RmArgs),
31 Prime(PrimeArgs),
33}
34
35#[derive(Parser)]
36pub struct AddArgs {
37 #[arg(long = "diff", value_name = "PATH")]
39 pub diff: Vec<String>,
40
41 #[arg(long = "file", value_name = "PATH")]
43 pub file: Vec<String>,
44
45 #[arg(long = "text", value_name = "STRING")]
47 pub text: Vec<String>,
48
49 #[arg(long = "directory", value_name = "PATH")]
51 pub directory: Vec<String>,
52
53 #[arg(long = "stdin", value_name = "TYPE")]
55 pub stdin: Option<String>,
56
57 #[arg(long = "title", value_name = "TITLE")]
59 pub title: Option<String>,
60
61 #[arg(long = "metadata", value_name = "JSON")]
63 pub metadata: Option<String>,
64
65 #[arg(long = "blocked-by", value_name = "IDS")]
67 pub blocked_by: Option<String>,
68}
69
70#[derive(Parser)]
71pub struct ListArgs {
72 #[arg(long = "status", value_name = "STATUS")]
74 pub status: Option<String>,
75
76 #[arg(long = "json")]
78 pub json: bool,
79
80 #[arg(long = "filter", value_name = "EXPR")]
82 pub filter: Option<String>,
83
84 #[arg(long = "sort", value_name = "PATH")]
86 pub sort: Option<String>,
87
88 #[arg(long = "reverse")]
90 pub reverse: bool,
91
92 #[arg(long = "ready")]
94 pub ready: bool,
95}
96
97#[derive(Parser)]
98pub struct ShowArgs {
99 pub id: Option<String>,
101
102 #[arg(long = "json")]
104 pub json: bool,
105}
106
107#[derive(Parser)]
108pub struct EditArgs {
109 pub id: Option<String>,
111
112 #[arg(long = "add-diff", value_name = "PATH")]
114 pub add_diff: Vec<String>,
115
116 #[arg(long = "add-file", value_name = "PATH")]
118 pub add_file: Vec<String>,
119
120 #[arg(long = "add-text", value_name = "STRING")]
122 pub add_text: Vec<String>,
123
124 #[arg(long = "add-directory", value_name = "PATH")]
126 pub add_directory: Vec<String>,
127
128 #[arg(long = "add-transcript", value_name = "PATH")]
130 pub add_transcript: Vec<String>,
131
132 #[arg(long = "rm-source", value_name = "INDEX")]
134 pub rm_source: Vec<usize>,
135
136 #[arg(long = "set-status", value_name = "STATUS")]
138 pub set_status: Option<String>,
139
140 #[arg(long = "set-title", value_name = "TITLE")]
142 pub set_title: Option<String>,
143
144 #[arg(long = "set-metadata", value_name = "JSON")]
146 pub set_metadata: Option<String>,
147
148 #[arg(long = "set-blocked-by", value_name = "IDS")]
150 pub set_blocked_by: Option<String>,
151}
152
153#[derive(Parser)]
154pub struct RmArgs {
155 pub id: Option<String>,
157}
158
159#[derive(Parser)]
160pub struct PrimeArgs {
161 #[arg(long = "full")]
163 pub full: bool,
164}