From b5598f7a22a7a43ad291f18ec70b1705b1eb9cd9 Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Tue, 24 Jan 2017 09:32:59 -0800 Subject: Wrap up File --- src/source.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) (limited to 'src/source.rs') 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, 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, table: &toml::Table, prefix: Op impl Source for File { fn build(&mut self) -> Result, Box> { + 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) -- cgit v1.2.3