checkpointq_lib/
args.rs

1use std::path::PathBuf;
2
3use clap::{Args, Parser, Subcommand, ValueEnum};
4use serde::{Deserialize, Serialize};
5use strum_macros::Display;
6
7#[derive(Parser)]
8#[command(author, version, about, long_about)]
9pub struct Cli {
10    #[command(flatten)]
11    pub shared: SharedCommands,
12    #[arg(long, short, value_enum)]
13    pub network: Option<Network>,
14    #[arg(
15        short,
16        long,
17        default_value_t = false,
18        help = "Display verbose result or not"
19    )]
20    pub verbose: bool,
21    #[command(subcommand)]
22    pub subcommands: Option<SubCommands>,
23}
24
25#[derive(Subcommand)]
26pub enum SubCommands {
27    #[command(about = "Run in server mode", name = "server")]
28    ServerCliCommands(ServerCommands),
29}
30
31#[derive(Args)]
32pub struct ServerCommands {
33    #[command(flatten)]
34    pub shared: SharedCommands,
35    #[arg(
36        short,
37        long,
38        default_value_t = 7070,
39        help = "Port for HTTP server. Defaults to 7070"
40    )]
41    pub port: u16,
42}
43
44#[derive(Args)]
45pub struct SharedCommands {
46    #[arg(
47        short,
48        long,
49        help = "Path to config file where endpoints for network are listed. default is ./endpoint.yaml"
50    )]
51    pub endpoints: Option<PathBuf>,
52}
53
54#[derive(
55    Display, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug, Deserialize, Serialize,
56)]
57#[serde(rename_all = "lowercase")]
58pub enum Network {
59    Mainnet,
60    Goerli,
61    Sepolia,
62}