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
use clap::{value_parser, Arg, Command, ValueHint};

pub fn build_cli() -> Command {
    let cpu_num_string = num_cpus::get().to_string().into_boxed_str();
    let cpu_num_string: &str = Box::leak(cpu_num_string);

    Command::new("audio-fourier-series")
        .arg(
            Arg::new("src")
                .required(true)
                .value_hint(ValueHint::FilePath),
        )
        .arg(
            Arg::new("dest")
                .required(true)
                .value_hint(ValueHint::FilePath),
        )
        .arg(
            Arg::new("series-count")
                .required(true)
                .value_parser(value_parser!(u32)),
        )
        .arg(
            Arg::new("integral-segments-in-1s")
                .required(true)
                .value_parser(value_parser!(u32)),
        )
        .arg(
            Arg::new("thread-num")
                .short('T')
                .long("threads")
                .required(false)
                .default_value(cpu_num_string)
                .value_parser(value_parser!(usize)),
        )
        .arg(
            Arg::new("mode")
                .short('m')
                .long("mode")
                .default_value("a2a")
                .value_parser(["a2a", "a2t", "t2a"]),
        )
}