1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
use clap::{Arg, App, AppSettings, SubCommand};
arg_enum!{
#[allow(non_camel_case_types)]
#[derive(Debug)]
pub enum Source {
auto,
adf,
glass
}
}
arg_enum!{
#[allow(non_camel_case_types)]
#[derive(Debug)]
pub enum Format {
pdf,
jpeg
}
}
arg_enum!{
#[allow(non_camel_case_types)]
#[derive(Debug)]
pub enum ColorSpace {
gray,
color
}
}
pub fn build_cli() -> App<'static, 'static> {
App::new("covet")
.version(crate_version!())
.setting(AppSettings::SubcommandRequiredElseHelp)
.setting(AppSettings::VersionlessSubcommands)
.setting(AppSettings::InferSubcommands)
.subcommand(
SubCommand::with_name("status")
.about("Display the status of the scanner")
.arg(
Arg::with_name("SCANNER")
.help("The hostname of the scanner")
.required(true)
.index(1),
)
.arg(
Arg::with_name("no-tls")
.help("Do not use TLS to secure the connection to the scanner")
.long("no-tls"),
),
)
.subcommand(
SubCommand::with_name("scan")
.about("Scan a document")
.arg(
Arg::with_name("SCANNER")
.help("The hostname of the scanner")
.required(true)
.index(1),
)
.arg(
Arg::with_name("SOURCE")
.help("The document source")
.takes_value(true)
.short("s")
.long("source")
.possible_values(&Source::variants())
.default_value("auto"),
)
.arg(
Arg::with_name("FORMAT")
.help("The format of the output")
.takes_value(true)
.short("f")
.long("format")
.possible_values(&Format::variants())
.default_value("pdf"),
)
.arg(
Arg::with_name("COLORSPACE")
.help("The color space of the output")
.takes_value(true)
.short("c")
.long("color")
.possible_values(&ColorSpace::variants())
.default_value("color"),
)
.arg(
Arg::with_name("RESOLUTION")
.help("The scan resolution in dpi")
.takes_value(true)
.short("r")
.long("resolution")
.possible_values(&["300", "600"])
.default_value("300"),
)
.arg(
Arg::with_name("no-tls")
.help("Do not use TLS to secure the connection to the scanner")
.long("no-tls"),
),
)
.subcommand(
SubCommand::with_name("web")
.about("Start a web interface to handle scan jobs")
.arg(
Arg::with_name("SCANNER")
.help("The hostname of the scanner")
.required(true)
.index(1),
)
.arg(
Arg::with_name("PORT")
.help("Port to use for the web server")
.takes_value(true)
.short("p")
.long("port")
.default_value("3000"),
)
.arg(
Arg::with_name("ADDR")
.help("Listen address to use for the web server")
.takes_value(true)
.short("l")
.long("listen")
.default_value("127.0.0.1"),
)
.arg(
Arg::with_name("no-tls")
.help("Do not use TLS to secure the connection to the scanner")
.long("no-tls"),
),
)
}