diff options
author | Ben S <ogham@bsago.me> | 2014-06-28 17:24:20 +0100 |
---|---|---|
committer | Ben S <ogham@bsago.me> | 2014-06-28 17:24:20 +0100 |
commit | a8465fed4597ecc0c9b39a708dc93ea67c84f7dc (patch) | |
tree | be76843a5abaa6d73d2f0a73767e3e8766af0d6d /src/dir.rs | |
parent | ee8c146cedd3c6c48e58d4250b19dae9dfb12117 (diff) |
Move to Cargo
Diffstat (limited to 'src/dir.rs')
-rw-r--r-- | src/dir.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/dir.rs b/src/dir.rs new file mode 100644 index 0000000..3f2f140 --- /dev/null +++ b/src/dir.rs @@ -0,0 +1,45 @@ +use std::io::{fs, IoResult}; +use file::File; + +// The purpose of a Dir is to provide a cached list of the file paths +// in the directory being searched for. This object is then passed to +// the Files themselves, which can then check the status of their +// surrounding files, such as whether it needs to be coloured +// differently if a certain other file exists. + +pub struct Dir<'a> { + pub contents: Vec<Path>, + pub path: Path, +} + +impl<'a> Dir<'a> { + pub fn readdir(path: Path) -> IoResult<Dir<'a>> { + fs::readdir(&path).map(|paths| Dir { + contents: paths, + path: path.clone(), + }) + } + + pub fn files(&'a self) -> Vec<File<'a>> { + let mut files = vec![]; + + for path in self.contents.iter() { + match File::from_path(path, self) { + Ok(file) => { + files.push(file); + } + Err(e) => { + println!("{}: {}", path.display(), e); + } + } + } + + files + } + + pub fn contains(&self, path: &Path) -> bool { + self.contents.contains(path) + } +} + + |