summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/color.rs15
-rw-r--r--src/display.rs4
-rw-r--r--src/meta/inode.rs26
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());
}
}