exa/column.rs

71 lines
1.7 KiB
Rust
Raw Normal View History

pub enum Column {
Permissions,
FileName,
FileSize(bool),
2014-06-22 07:09:16 +00:00
Blocks,
2014-05-27 18:05:15 +00:00
User(u64),
Group,
HardLinks,
2014-06-22 06:44:00 +00:00
Inode,
}
// Each column can pick its own alignment. Usually, numbers are
// right-aligned, and text is left-aligned.
pub enum Alignment {
Left, Right,
}
impl Column {
pub fn alignment(&self) -> Alignment {
match *self {
FileSize(_) => Right,
HardLinks => Right,
2014-06-22 06:44:00 +00:00
Inode => Right,
2014-06-22 07:09:16 +00:00
Blocks => Right,
_ => Left,
}
}
2014-06-23 17:26:35 +00:00
pub fn header(&self) -> &'static str {
match *self {
Permissions => "Permissions",
FileName => "Name",
FileSize(_) => "Size",
Blocks => "Blocks",
User(_) => "User",
Group => "Group",
HardLinks => "Links",
Inode => "inode",
}
}
}
// An Alignment is used to pad a string to a certain length, letting
// it pick which end it puts the text on. The length of the string is
// passed in specifically because it needs to be the *unformatted*
// length, rather than just the number of characters.
impl Alignment {
pub fn pad_string(&self, string: &String, string_length: uint, width: uint) -> String {
let mut str = String::new();
match *self {
Left => {
str.push_str(string.as_slice());
for _ in range(string_length, width) {
str.push_char(' ');
}
}
Right => {
for _ in range(string_length, width) {
str.push_char(' ');
}
str.push_str(string.as_slice());
},
}
return str;
}
}