aboutsummaryrefslogtreecommitdiff
path: root/src/args.rs
blob: 67536640585edf989348357da5f37f121558e09e (plain)
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
use std::env;

pub struct Args {
    pub directory: String,
    pub n_sentences: u32,
    pub unique: bool,
}

impl Args {
    pub fn parse() -> Option<Args> {
        let arg_vec: Vec<String> = env::args().collect();
        let mut i = 1; //skip first arg (execution path)

        let mut n_sentences = 1;
        let mut unique = false;
        let mut opt_directory: Option<String> = None;

        while i < arg_vec.len() {
            match arg_vec[i].as_str() {
                "-n" | "--sentences" => {
                    if i + 1 < arg_vec.len() {
                        n_sentences = arg_vec[i+1].parse::<u32>().ok()?;
                    } else {
                        return None;
                    }
                    i += 2;
                },
                "--unique" => {
                    unique = true;
                    i += 1;
                },
                other => {
                    opt_directory = match opt_directory {
                        Some(_) => { return None; },
                        None    => Some(other.to_string()),
                    };
                    i += 1;
                },
            }
        }

        let directory = opt_directory?;

        Some(Args {
            directory,
            n_sentences,
            unique,
        })
    }
}