summaryrefslogtreecommitdiffstats
path: root/src/dir.rs
diff options
context:
space:
mode:
authorBen S <ogham@bsago.me>2014-06-28 17:24:20 +0100
committerBen S <ogham@bsago.me>2014-06-28 17:24:20 +0100
commita8465fed4597ecc0c9b39a708dc93ea67c84f7dc (patch)
treebe76843a5abaa6d73d2f0a73767e3e8766af0d6d /src/dir.rs
parentee8c146cedd3c6c48e58d4250b19dae9dfb12117 (diff)
Move to Cargo
Diffstat (limited to 'src/dir.rs')
-rw-r--r--src/dir.rs45
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)
+ }
+}
+
+