mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-11-16 09:17:09 +00:00
8839cf4ca5
This requires the dir field to store a reference to the path that created it, so that path can be used to join onto the filename so it can be properly statted.
46 lines
1.1 KiB
Rust
46 lines
1.1 KiB
Rust
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)
|
|
}
|
|
}
|
|
|
|
|