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

// Args Parser by Anton

use std::env;
use core::result::Result;

#[derive(Debug)]
pub enum Error {
    ArgumentNotFound,
}

pub struct Parser {
    args: Vec<String>,
}

impl<'a> Parser {
    pub fn new() -> Self {
        Parser { args: env::args().collect() }
    }

    pub fn get(&mut self, arg: &str, hasval: bool) -> Result<Option<&String>, Error> {
        let mut it = self.args.iter();
        // omit an 0th argument (program name)
        let v = it.next();
        loop {
            if let Some(v) = it.next() {
                if v == arg {
                    return match hasval {
                        true => Ok(it.next()),
                        _ => Ok(None),
                    };
                }
            } else {
                return Err(Error::ArgumentNotFound);
            }
        }
    }
}