coding_tools/cli/
ct_await.rs1use clap::Parser;
8
9use crate::explain::Format;
10use crate::pattern;
11use crate::pulse::HeartbeatOpts;
12
13#[derive(Parser, Debug)]
14#[command(
15 name = "ct-await",
16 version,
17 about = "Poll a read-only probe until it succeeds, an abort pattern appears, or the bound expires.",
18 long_about = "ct-await runs a gated read-only probe every --every seconds until the condition \
19 is established — probe exit 0, or a required --ok-match appearing in its output — \
20 or until an --err-match appears (immediate ERROR) or the required --timeout \
21 expires (ERROR). Observe an external process's effects without owning its \
22 execution (also reachable as `ct await`). See `ct-await --explain` for \
23 agent-oriented documentation."
24)]
25pub struct Cli {
26 #[arg(long)]
28 pub question: Option<String>,
29
30 #[arg(long, value_name = "SECS", default_value_t = 5.0)]
32 pub every: f64,
33
34 #[arg(long, value_name = "SECS")]
36 pub timeout: f64,
37
38 #[arg(long, value_name = "PATTERN")]
40 pub ok_match: Option<String>,
41
42 #[arg(long, value_name = "PATTERN")]
44 pub err_match: Option<String>,
45
46 #[arg(long, value_enum)]
48 pub mode: Option<pattern::Mode>,
49
50 #[command(flatten)]
51 pub heartbeat: HeartbeatOpts,
52
53 #[arg(long, alias = "emit-stdout")]
55 pub emit: Option<String>,
56
57 #[arg(long)]
59 pub emit_stderr: Option<String>,
60
61 #[arg(long)]
63 pub quiet: bool,
64
65 #[arg(long, value_enum, num_args = 0..=1, default_missing_value = "md")]
67 pub explain: Option<Format>,
68
69 #[arg(last = true, value_name = "PROBE...")]
71 pub probe: Vec<String>,
72}