blob: 8c8b2ba570e08fcfbc87705571be4a7353adb89d [file] [log] [blame]
use std::fs::File;
use std::io::{BufReader, Error as IOError, Read};
use std::path::PathBuf;
pub(crate) trait Source {
type Item;
type Error;
fn load(&self) -> Result<Self::Item, Self::Error>;
}
pub(crate) struct FileSource {
path: PathBuf,
}
impl FileSource {
pub(crate) fn new(path: PathBuf) -> FileSource {
FileSource { path }
}
}
impl Source for FileSource {
type Item = String;
type Error = IOError;
fn load(&self) -> Result<Self::Item, Self::Error> {
let mut reader = BufReader::new(File::open(&self.path)?);
let mut buf = String::new();
reader.read_to_string(&mut buf)?;
Ok(buf)
}
}