options.rs 853 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. use file::File;
  2. pub enum SortField {
  3. Name, Size
  4. }
  5. pub struct Options {
  6. pub showInvisibles: bool,
  7. pub sortField: SortField,
  8. }
  9. impl SortField {
  10. pub fn from_word(word: StrBuf) -> SortField {
  11. match word.as_slice() {
  12. "name" => Name,
  13. "size" => Size,
  14. _ => fail!("Invalid sorting order"),
  15. }
  16. }
  17. fn sort(&self, files: &mut Vec<File>) {
  18. match *self {
  19. Name => files.sort_by(|a, b| a.name.cmp(&b.name)),
  20. Size => files.sort_by(|a, b| a.stat.size.cmp(&b.stat.size)),
  21. }
  22. }
  23. }
  24. impl Options {
  25. pub fn sort(&self, files: &mut Vec<File>) {
  26. self.sortField.sort(files);
  27. }
  28. pub fn show(&self, f: &File) -> bool {
  29. if self.showInvisibles {
  30. true
  31. } else {
  32. !f.name.starts_with(".")
  33. }
  34. }
  35. }