Add simple PathLister type
This commit is contained in:
parent
52eb81a6f7
commit
5fe843e5d6
3 changed files with 56 additions and 0 deletions
|
@ -5,5 +5,6 @@ extern crate libimagstore;
|
||||||
|
|
||||||
pub mod error;
|
pub mod error;
|
||||||
pub mod lister;
|
pub mod lister;
|
||||||
|
pub mod listers;
|
||||||
pub mod result;
|
pub mod result;
|
||||||
|
|
||||||
|
|
1
libimagentrylist/src/listers/mod.rs
Normal file
1
libimagentrylist/src/listers/mod.rs
Normal file
|
@ -0,0 +1 @@
|
||||||
|
pub mod path;
|
54
libimagentrylist/src/listers/path.rs
Normal file
54
libimagentrylist/src/listers/path.rs
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
use std::io::stdout;
|
||||||
|
use std::io::Write;
|
||||||
|
use std::ops::Deref;
|
||||||
|
|
||||||
|
use lister::Lister;
|
||||||
|
use result::Result;
|
||||||
|
|
||||||
|
use libimagstore::store::FileLockEntry;
|
||||||
|
|
||||||
|
pub struct PathLister {
|
||||||
|
absolute: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PathLister {
|
||||||
|
|
||||||
|
pub fn new(absolute: bool) -> PathLister {
|
||||||
|
PathLister {
|
||||||
|
absolute: absolute,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Lister for PathLister {
|
||||||
|
|
||||||
|
fn list<'a, I: Iterator<Item = FileLockEntry<'a>>>(&self, entries: I) -> Result<()> {
|
||||||
|
use error::ListError as LE;
|
||||||
|
use error::ListErrorKind as LEK;
|
||||||
|
|
||||||
|
entries.fold(Ok(()), |accu, entry| {
|
||||||
|
accu.and_then(|_| Ok(entry.deref().get_location().clone()))
|
||||||
|
.and_then(|pb| {
|
||||||
|
if self.absolute {
|
||||||
|
pb.canonicalize().map_err(|e| LE::new(LEK::FormatError, Some(Box::new(e))))
|
||||||
|
} else {
|
||||||
|
Ok(pb)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.and_then(|pb| {
|
||||||
|
write!(stdout(), "{:?}\n", pb)
|
||||||
|
.map_err(|e| LE::new(LEK::FormatError, Some(Box::new(e))))
|
||||||
|
})
|
||||||
|
.map_err(|e| {
|
||||||
|
if e.err_type() == LEK::FormatError {
|
||||||
|
e
|
||||||
|
} else {
|
||||||
|
LE::new(LEK::FormatError, Some(Box::new(e)))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue