diff options
author | Ryan Leckey <leckey.ryan@gmail.com> | 2017-01-24 09:32:59 -0800 |
---|---|---|
committer | Ryan Leckey <leckey.ryan@gmail.com> | 2017-01-24 09:32:59 -0800 |
commit | b5598f7a22a7a43ad291f18ec70b1705b1eb9cd9 (patch) | |
tree | b45fc0f9fae434405b296150b523692586e0f905 /src/source.rs | |
parent | 39f2e6c55ba2f270383a603eb5008ac64ba7ba08 (diff) |
Wrap up File
Diffstat (limited to 'src/source.rs')
-rw-r--r-- | src/source.rs | 48 |
1 files changed, 44 insertions, 4 deletions
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) |