1use clap::{Parser, Subcommand, Args};
2use clap_complete::Shell;
3
4#[derive(Parser)]
5#[command(name = "nom", version, about = "Nomad headless browser CLI")]
6pub struct Cli {
7 #[arg(long, value_enum)]
9 pub completions: Option<Shell>,
10 #[command(subcommand)]
11 pub command: Option<Command>,
12}
13
14#[derive(Subcommand)]
15pub enum Command {
16 Browse(BrowseArgs),
18 Daemon(DaemonArgs),
20 Health(HealthArgs),
22 Format(FormatArgs),
24}
25
26#[derive(Args)]
27pub struct BrowseArgs {
28 pub url: String,
30 #[arg(short, long, default_value = "summary")]
32 pub format: String,
33 #[arg(short, long)]
35 pub output: Option<String>,
36 #[arg(long, default_value = "8000")]
38 pub port: u16,
39 #[arg(long)]
41 pub oneshot: bool,
42 #[arg(long)]
44 pub js_timeout: Option<u32>,
45}
46
47#[derive(Args)]
48pub struct DaemonArgs {
49 #[command(subcommand)]
50 pub action: DaemonAction,
51}
52
53#[derive(Subcommand)]
54pub enum DaemonAction {
55 Start {
57 #[arg(long, default_value = "8000")]
59 port: u16,
60 #[arg(long, default_value = "1")]
62 cache_cap: usize,
63 #[arg(long, default_value = "2")]
65 parse_concurrency: usize,
66 },
67 Stop,
69 Status,
71 Restart {
73 #[arg(long, default_value = "8000")]
75 port: u16,
76 },
77}
78
79#[derive(Args)]
80pub struct HealthArgs {
81 #[arg(long, default_value = "8000")]
83 pub port: u16,
84 #[arg(long)]
86 pub json: bool,
87}
88
89#[derive(Args)]
90pub struct FormatArgs {
91 pub format: Option<String>,
93}