1use {
2 crate::{
3 cols::Cols,
4 filter::Filter,
5 sorting::Sorting,
6 timeout::Timeout,
7 units::Units,
8 },
9 clap::{
10 Parser,
11 ValueEnum,
12 },
13 termimad::crossterm::tty::IsTty,
14};
15
16#[derive(Debug, Parser)]
20#[command(
21 author,
22 about,
23 name = "dysk",
24 disable_version_flag = true,
25 version,
26 disable_help_flag = true
27)]
28pub struct Args {
29 #[arg(long)]
31 pub help: bool,
32
33 #[arg(long)]
35 pub version: bool,
36
37 #[arg(short, long)]
39 pub all: bool,
40
41 #[arg(long, default_value = "auto", value_name = "color")]
43 pub color: TriBool,
44
45 #[arg(long)]
47 pub ascii: bool,
48
49 #[arg(long, default_value = "auto", value_name = "choice")]
51 pub remote_stats: TriBool,
52
53 #[arg(long)]
55 pub list_cols: bool,
56
57 #[arg(
59 short,
60 long,
61 default_value = "fs+type+disk+used+use+free+size+mp",
62 value_name = "columns"
63 )]
64 pub cols: Cols,
65
66 #[arg(short, long, value_name = "expr")]
68 pub filter: Option<Filter>,
69
70 #[arg(short, long, default_value = "size", value_name = "sort")]
72 pub sort: Sorting,
73
74 #[arg(short, long, default_value = "SI", value_name = "unit")]
76 pub units: Units,
77
78 #[arg(short, long)]
80 pub json: bool,
81
82 #[arg(long)]
84 pub csv: bool,
85
86 #[arg(long, default_value = ",", value_name = "sep")]
88 pub csv_separator: char,
89
90 #[arg(long, hide = true)]
92 pub strategy: Option<String>,
93
94 #[arg(long)]
96 pub timeout: Option<Timeout>,
97
98 #[arg(long, default_value = "5", value_name = "width")]
100 pub bar_width: usize,
101
102 pub path: Option<std::path::PathBuf>,
104}
105
106#[derive(ValueEnum, Debug, Clone, Copy, PartialEq, Eq)]
109pub enum TriBool {
110 Auto,
111 Yes,
112 No,
113}
114impl TriBool {
115 pub fn unwrap_or_else<F>(
116 self,
117 f: F,
118 ) -> bool
119 where
120 F: FnOnce() -> bool,
121 {
122 match self {
123 Self::Auto => f(),
124 Self::Yes => true,
125 Self::No => false,
126 }
127 }
128}
129
130impl Args {
131 pub fn color(&self) -> bool {
132 self.color.unwrap_or_else(|| std::io::stdout().is_tty())
133 }
134}