diff options
-rw-r--r-- | Settings.toml | 2 | ||||
-rw-r--r-- | src/main.rs | 13 | ||||
-rw-r--r-- | src/source.rs | 48 |
3 files changed, 44 insertions, 19 deletions
diff --git a/Settings.toml b/Settings.toml deleted file mode 100644 index 51b7895..0000000 --- a/Settings.toml +++ /dev/null @@ -1,2 +0,0 @@ -[process] -debug = "false" diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index a8090e5..0000000 --- a/src/main.rs +++ /dev/null @@ -1,13 +0,0 @@ - -// NOTE: This is just for my testing / play right now. Examples will be made at examples/ soon. - -extern crate config; - -fn main() { - let mut c = config::Config::new(); - - c.merge(config::File::with_name("Settings")).unwrap(); - - println!("debug = {:?}", c.get_str("process.debug")); - println!("debug = {:?}", c.get_bool("process.debug")); -} diff --git a/src/source.rs b/src/source.rs index bb3efd6..b608097 100644 --- a/src/source.rs +++ b/src/source.rs @@ -62,6 +62,18 @@ fn collect(content: &mut HashMap<String, Value>, table: &toml::Table, prefix: Op content.insert(key, value.clone().into()); } + toml::Value::Integer(value) => { + content.insert(key, value.into()); + } + + toml::Value::Float(value) => { + content.insert(key, value.into()); + } + + toml::Value::Boolean(value) => { + content.insert(key, value.into()); + } + _ => { // Unhandled } @@ -71,15 +83,44 @@ fn collect(content: &mut HashMap<String, Value>, table: &toml::Table, prefix: Op impl Source for File { fn build(&mut self) -> Result<HashMap<String, Value>, Box<Error>> { + let mut content = HashMap::new(); + // Find file // TODO: Use a nearest algorithm rather than strictly CWD - let cwd = env::current_dir()?; + let cwd = match env::current_dir() { + Ok(cwd) => cwd, + Err(err) => { + if self.required { + return Err(From::from(err)); + } else { + return Ok(content); + } + } + }; + let filename = cwd.join(self.name.clone() + ".toml"); // Read contents from file - let mut file = fs::File::open(filename)?; + let mut file = match fs::File::open(filename) { + Ok(file) => file, + Err(err) => { + if self.required { + return Err(From::from(err)); + } else { + return Ok(content); + } + } + }; + let mut buffer = String::new(); - file.read_to_string(&mut buffer)?; + let res = file.read_to_string(&mut buffer); + if res.is_err() { + if self.required { + return Err(From::from(res.err().unwrap())); + } else { + return Ok(content); + } + } // Parse let mut parser = toml::Parser::new(&buffer); @@ -87,7 +128,6 @@ impl Source for File { let document = parser.parse().unwrap(); // Iterate through document and fill content - let mut content = HashMap::new(); collect(&mut content, &document, None); Ok(content) |