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}