brainfuck/
optlevel.rs

1use std::str::FromStr;
2
3#[derive(Debug, PartialEq, Eq, Clone, Copy)]
4pub enum OptimizationLevel {
5    // Do not optimize
6    Off,
7    // Optimize for speed
8    Speed,
9}
10
11impl FromStr for OptimizationLevel {
12    type Err = ();
13
14    fn from_str(val: &str) -> Result<Self, Self::Err> {
15        match val {
16            "0" => Ok(OptimizationLevel::Off),
17            "1" => Ok(OptimizationLevel::Speed),
18            _ => Err(()),
19        }
20    }
21}
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26
27    #[test]
28    fn from_str() {
29        let opt: OptimizationLevel = "0".parse().unwrap();
30        assert_eq!(opt, OptimizationLevel::Off);
31        let opt: OptimizationLevel = "1".parse().unwrap();
32        assert_eq!(opt, OptimizationLevel::Speed);
33
34        assert!("2".parse::<OptimizationLevel>().is_err());
35    }
36}