diff options
author | Ryan Leckey <ryan@launchbadge.com> | 2017-06-13 18:54:39 -0700 |
---|---|---|
committer | Ryan Leckey <ryan@launchbadge.com> | 2017-06-13 18:54:39 -0700 |
commit | 312f32905f518fa59e1daf3fc8224dadf584b484 (patch) | |
tree | 4dd4e14168383dd818fe6add8ed0a5f4900d85b6 /src/file | |
parent | 4573e911816ecba90565d33d219e6f04ee7e2f05 (diff) |
Add more tests on files
Diffstat (limited to 'src/file')
-rw-r--r-- | src/file/mod.rs | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/src/file/mod.rs b/src/file/mod.rs index dbb80b6..7ab77d8 100644 --- a/src/file/mod.rs +++ b/src/file/mod.rs @@ -47,12 +47,12 @@ impl File<source::file::FileSourceFile> { } impl<T: FileSource> File<T> { - pub fn required(&mut self, required: bool) -> &mut Self { + pub fn required(mut self, required: bool) -> Self { self.required = required; self } - pub fn namespace(&mut self, namespace: &str) -> &mut Self { + pub fn namespace(mut self, namespace: &str) -> Self { self.namespace = Some(namespace.into()); self } @@ -61,16 +61,33 @@ impl<T: FileSource> File<T> { impl<T: FileSource> Source for File<T> { fn collect(&self) -> Result<HashMap<String, Value>> { // Coerce the file contents to a string - let (uri, contents) = self.source.resolve(self.format).map_err(|err| { + let (uri, contents) = match self.source.resolve(self.format).map_err(|err| { ConfigError::Foreign(err) - })?; + }) { + Ok((uri, contents)) => (uri, contents), + + Err(error) => { + if !self.required { + return Ok(HashMap::new()); + } + + return Err(error); + } + }; // Parse the string using the given format - self.format.unwrap().parse(uri.as_ref(), &contents, self.namespace.as_ref()).map_err(|cause| { + let result = self.format.unwrap().parse(uri.as_ref(), &contents, self.namespace.as_ref()).map_err(|cause| { ConfigError::FileParse { uri: uri, cause: cause } - }) + }); + + if result.is_err() && !self.required { + // Ignore fails and just go with it if its not required + Ok(HashMap::new()) + } else { + result + } } } |