1use clap::Parser;
2use rustutils_runnable::Runnable;
3use std::error::Error;
4
5#[derive(Parser, Clone, Debug)]
7#[clap(author, version, about, long_about = None)]
8pub struct Seq {
9 #[clap(short, long)]
11 format: Option<String>,
12 #[clap(short, long, default_value = "\n")]
14 separator: String,
15 #[clap(short, long)]
17 equal_width: bool,
18
19 #[clap(default_value = "1")]
21 start: Number,
22 #[clap(default_value = "1")]
24 increment: Number,
25 last: Option<Number>,
27}
28
29#[derive(Clone, Debug)]
30pub enum Number {
31 Float(f64),
32 Integer(i64),
33}
34
35impl std::str::FromStr for Number {
36 type Err = Box<dyn Error + Send + Sync + 'static>;
37 fn from_str(value: &str) -> Result<Self, Self::Err> {
38 let number: i64 = value.parse()?;
39 Ok(Number::Integer(number))
40 }
41}
42
43impl Runnable for Seq {
44 fn run(&self) -> Result<(), Box<dyn Error>> {
45 println!("{self:?}");
46 Ok(())
47 }
48}