diff options
author | zwPapEr <zw.paper@gmail.com> | 2019-12-15 14:22:11 +0800 |
---|---|---|
committer | Abin Simon <abinsimon10@gmail.com> | 2020-01-11 14:17:44 +0530 |
commit | 1af45a10e8f3e4aae18955c33e5ea66c3db22e58 (patch) | |
tree | 2eb45f0573b9bf6aae5477805ec53e8588ac2d42 | |
parent | d9b68ccd10c13f5d08ed2d9444aabe4b3ad7607e (diff) |
inode: :art: use option for inode, and two color for valid or not
-rw-r--r-- | src/color.rs | 15 | ||||
-rw-r--r-- | src/display.rs | 4 | ||||
-rw-r--r-- | src/meta/inode.rs | 26 |
3 files changed, 26 insertions, 19 deletions
diff --git a/src/color.rs b/src/color.rs index b18a857..5823a67 100644 --- a/src/color.rs +++ b/src/color.rs @@ -42,6 +42,11 @@ pub enum Elem { FileLarge, FileMedium, FileSmall, + + /// INode + INode { + valid: bool, + } } impl Elem { @@ -151,13 +156,17 @@ impl Colors { } else { Some("di") } - } + }, Elem::SymLink => Some("ln"), Elem::Pipe => Some("pi"), Elem::Socket => Some("so"), Elem::BlockDevice => Some("bd"), Elem::CharDevice => Some("cd"), Elem::BrokenSymLink => Some("or"), + Elem::INode { valid } => match valid { + true => Some("so"), + false => Some("no"), + }, _ => None, }; @@ -233,6 +242,10 @@ impl Colors { m.insert(Elem::FileMedium, Colour::Fixed(216)); // LightSalmon1 m.insert(Elem::FileLarge, Colour::Fixed(172)); // Orange3 + // INode + m.insert(Elem::INode { valid: true }, Colour::Fixed(13)); // Pink + m.insert(Elem::INode { valid: false }, Colour::Fixed(245)); // Grey + m } } diff --git a/src/display.rs b/src/display.rs index b3d8e5f..6cde985 100644 --- a/src/display.rs +++ b/src/display.rs @@ -221,9 +221,7 @@ fn get_output<'a>( let mut strings: Vec<ANSIString> = Vec::new(); for block in flags.blocks.iter() { match block { - Block::INode => { - strings.push(meta.inode.render(colors)); - } + Block::INode => strings.push(meta.inode.render(colors)), Block::Permission => { let s: &[ColoredString] = &[ meta.file_type.render(colors), diff --git a/src/meta/inode.rs b/src/meta/inode.rs index 2d9e52b..9bc67d9 100644 --- a/src/meta/inode.rs +++ b/src/meta/inode.rs @@ -3,8 +3,7 @@ use std::fs::Metadata; #[derive(Debug, PartialEq, Eq, Copy, Clone)] pub struct INode { - index: u64, - valide: bool, + index: Option<u64>, } impl<'a> From<&'a Metadata> for INode { @@ -14,28 +13,21 @@ impl<'a> From<&'a Metadata> for INode { let index = meta.ino(); - Self { - index, - valide: true, - } + Self { index: Some(index) } } #[cfg(windows)] fn from(_: &Metadata) -> Self { - Self { - index: 0, - valide: false, - } + Self { index: None } } } impl INode { pub fn render(&self, colors: &Colors) -> ColoredString { - if !self.valide { - return colors.colorize(String::from("-"), &Elem::SymLink); + match self.index { + Some(i) => colors.colorize(i.to_string(), &Elem::INode{ valid: true }), + None => colors.colorize(String::from("-"), &Elem::INode{ valid: false }), } - - colors.colorize(self.index.to_string(), &Elem::SymLink) } } @@ -61,6 +53,10 @@ mod tests { assert!(success, "failed to exec touch"); let inode = INode::from(&file_path.metadata().unwrap()); - assert_ne!(inode.index, 0); + + #[cfg(unix)] + assert!(inode.index.is_some()); + #[cfg(windows)] + assert!(inode.index.is_none()); } } |