summaryrefslogtreecommitdiffstats
path: root/src/file
diff options
context:
space:
mode:
authorRyan Leckey <ryan@launchbadge.com>2017-06-13 18:54:39 -0700
committerRyan Leckey <ryan@launchbadge.com>2017-06-13 18:54:39 -0700
commit312f32905f518fa59e1daf3fc8224dadf584b484 (patch)
tree4dd4e14168383dd818fe6add8ed0a5f4900d85b6 /src/file
parent4573e911816ecba90565d33d219e6f04ee7e2f05 (diff)
Add more tests on files
Diffstat (limited to 'src/file')
-rw-r--r--src/file/mod.rs29
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
+ }
}
}