summaryrefslogtreecommitdiffstats
path: root/src/file/source
diff options
context:
space:
mode:
authorRyan Leckey <ryan@launchbadge.com>2017-06-22 14:14:29 -0700
committerRyan Leckey <ryan@launchbadge.com>2017-06-22 14:30:51 -0700
commit2b438ed9b53fee5689032f3b5fcdda8d15becd5f (patch)
tree48374e66a6594c7d11d19fe38f7e23df731b52be /src/file/source
parent04d3ee8f70337e4899932b92262fbeec2dbb1bd9 (diff)
Add builder API to Config
Diffstat (limited to 'src/file/source')
-rw-r--r--src/file/source/file.rs17
-rw-r--r--src/file/source/mod.rs7
-rw-r--r--src/file/source/string.rs5
3 files changed, 22 insertions, 7 deletions
diff --git a/src/file/source/file.rs b/src/file/source/file.rs
index 79f46bf..426c0b5 100644
--- a/src/file/source/file.rs
+++ b/src/file/source/file.rs
@@ -3,7 +3,7 @@ use std::result;
use std::error::Error;
use std::path::{PathBuf, Path};
-use ::file::format::ALL_EXTENSIONS;
+use file::format::ALL_EXTENSIONS;
use std::io::{self, Read};
use std::fs;
use std::env;
@@ -13,6 +13,7 @@ use source::Source;
use super::{FileFormat, FileSource};
/// Describes a file sourced from a file
+#[derive(Clone, Debug)]
pub struct FileSourceFile {
/// Basename of configuration file
name: String,
@@ -30,7 +31,9 @@ impl FileSourceFile {
}
}
- fn find_file(&self, format_hint: Option<FileFormat>) -> Result<(PathBuf, FileFormat), Box<Error>> {
+ fn find_file(&self,
+ format_hint: Option<FileFormat>)
+ -> Result<(PathBuf, FileFormat), Box<Error>> {
// Build expected configuration file
let mut basename = PathBuf::new();
@@ -47,7 +50,11 @@ impl FileSourceFile {
Some(format) => Ok((filename, format)),
None => {
for (format, extensions) in ALL_EXTENSIONS.iter() {
- if extensions.contains(&filename.extension().unwrap_or_default().to_string_lossy().as_ref()) {
+ if extensions.contains(&filename
+ .extension()
+ .unwrap_or_default()
+ .to_string_lossy()
+ .as_ref()) {
return Ok((filename, *format));
}
}
@@ -90,7 +97,9 @@ impl FileSourceFile {
}
impl FileSource for FileSourceFile {
- fn resolve(&self, format_hint: Option<FileFormat>) -> Result<(Option<String>, String, FileFormat), Box<Error>> {
+ fn resolve(&self,
+ format_hint: Option<FileFormat>)
+ -> Result<(Option<String>, String, FileFormat), Box<Error>> {
// Find file
let (filename, format) = self.find_file(format_hint)?;
diff --git a/src/file/source/mod.rs b/src/file/source/mod.rs
index 89f1a3c..67e2cf1 100644
--- a/src/file/source/mod.rs
+++ b/src/file/source/mod.rs
@@ -1,12 +1,15 @@
pub mod file;
pub mod string;
+use std::fmt::Debug;
use std::error::Error;
use source::Source;
use super::FileFormat;
/// Describes where the file is sourced
-pub trait FileSource {
- fn resolve(&self, format_hint: Option<FileFormat>) -> Result<(Option<String>, String, FileFormat), Box<Error>>;
+pub trait FileSource: Debug + Clone {
+ fn resolve(&self,
+ format_hint: Option<FileFormat>)
+ -> Result<(Option<String>, String, FileFormat), Box<Error>>;
}
diff --git a/src/file/source/string.rs b/src/file/source/string.rs
index 922e46c..70101d6 100644
--- a/src/file/source/string.rs
+++ b/src/file/source/string.rs
@@ -6,6 +6,7 @@ use source::Source;
use super::{FileSource, FileFormat};
/// Describes a file sourced from a string
+#[derive(Clone, Debug)]
pub struct FileSourceString(String);
impl<'a> From<&'a str> for FileSourceString {
@@ -15,7 +16,9 @@ impl<'a> From<&'a str> for FileSourceString {
}
impl FileSource for FileSourceString {
- fn resolve(&self, format_hint: Option<FileFormat>) -> Result<(Option<String>, String, FileFormat), Box<Error>> {
+ fn resolve(&self,
+ format_hint: Option<FileFormat>)
+ -> Result<(Option<String>, String, FileFormat), Box<Error>> {
Ok((None, self.0.clone(), format_hint.expect("from_str requires a set file format")))
}
}