summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzwPapEr <zw.paper@gmail.com>2019-12-15 14:22:11 +0800
committerAbin Simon <abinsimon10@gmail.com>2020-01-11 14:17:44 +0530
commit1af45a10e8f3e4aae18955c33e5ea66c3db22e58 (patch)
tree2eb45f0573b9bf6aae5477805ec53e8588ac2d42
parentd9b68ccd10c13f5d08ed2d9444aabe4b3ad7607e (diff)
inode: :art: use option for inode, and two color for valid or not
-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());
}
}