-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmod.rs
More file actions
43 lines (35 loc) · 921 Bytes
/
mod.rs
File metadata and controls
43 lines (35 loc) · 921 Bytes
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
pub mod add;
pub mod divide;
pub mod kebab_divide;
pub mod multiply;
use add::Add;
use divide::Divide;
use kebab_divide::KebabDivide;
use multiply::Multiply;
use select::Select;
use clap::Parser;
#[derive(Parser, Select)]
#[clap(rename_all = "kebab-case")]
pub struct Tool {
#[select(add = Add, multiply = Multiply, divide = Divide, kebab_divide = KebabDivide)]
extra_args: Vec<String>,
}
impl select_command::Tool {
pub async fn execute(&self) -> Result<(), anyhow::Error> {
let (maybe_add, maybe_multiply, maybe_divide, maybe_kebab_divide) =
self.select().map_err(|e| anyhow::anyhow!(e))?;
if let Some(add) = maybe_add {
add.execute().await?;
}
if let Some(multiply) = maybe_multiply {
multiply.execute().await?;
}
if let Some(divide) = maybe_divide {
divide.execute().await?;
}
if let Some(kebab_divide) = maybe_kebab_divide {
kebab_divide.execute().await?;
}
Ok(())
}
}