rains/
cli.rs

1use anyhow::Result;
2use clap::Parser;
3
4#[derive(Debug, Parser)]
5#[clap(about, version)]
6pub struct Opts {
7    #[clap(short, long)]
8    pub debug: bool,
9
10    #[clap(subcommand)]
11    pub cmd: Subcommand,
12}
13
14#[derive(Debug, Eq, PartialEq, Parser)]
15pub enum Subcommand {
16    /// 搜索股票
17    #[clap(alias = "s")]
18    Search {
19        /// 拼音/代码/名称 eg: zgpa
20        #[clap(required = true)]
21        query: String,
22        /// 展示条数
23        #[clap(short, long, default_value_t = 10)]
24        limit: u8,
25    },
26    /// 股票信息
27    #[clap(alias = "i")]
28    Info {
29        /// 证券代码 eg: SH601318
30        #[clap(required = true)]
31        symbol: String,
32        /// 全部信息
33        #[clap(short, long)]
34        all: bool,
35        /// 财务指标
36        #[clap(short, long)]
37        financials: bool,
38        /// 股东结构
39        #[clap(short, long)]
40        structure: bool,
41        /// 分红送配
42        #[clap(short, long)]
43        dividends: bool,
44        /// 最新公告
45        #[clap(short, long)]
46        presses: bool,
47    },
48    /// 行情报价
49    #[clap(alias = "q")]
50    Quote {
51        /// 证券代码 多个以 , 分隔 eg: SH601318,SZ000001
52        #[clap(required = true)]
53        symbol: String,
54        /// 不检测代码是否正确
55        #[clap(short, long)]
56        no_check: bool,
57        /// 实时行情
58        #[clap(short, long)]
59        realtime: bool,
60        /// 实时行情多行展示 仅单个时支持
61        #[clap(short, long)]
62        multiline: bool,
63    },
64}
65
66impl Opts {
67    pub fn parse_args() -> Result<Self> {
68        let opts = Self::parse();
69        Ok(opts)
70    }
71}