docker_puzzles/
config.rs

1use crate::error::UserError;
2use std::error::Error;
3
4#[derive(Debug)]
5pub struct Config {
6    pub directory: String,
7}
8
9impl Config {
10    #[allow(clippy::new_ret_no_self)]
11    pub fn new(args: &[String]) -> Result<Self, Box<dyn Error>> {
12        match args.get(0) {
13            Some(arg) => Ok(Self {
14                directory: arg.to_string(),
15            }),
16            None => Err(UserError::boxed("Didn't get a directory argument")),
17        }
18    }
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn it_returns_config_if_arg_found() {
27        let args = vec![String::from("test")];
28        let config = Config::new(&args).unwrap();
29        assert_eq!("test", config.directory);
30    }
31
32    #[test]
33    fn it_returns_error_if_arg_not_found() {
34        let args = vec![];
35        let error = Config::new(&args).expect_err("Error expected");
36        assert_eq!("Didn't get a directory argument", error.to_string());
37    }
38}