diff options
author | Ben S <ogham@bsago.me> | 2015-03-07 23:34:53 +0000 |
---|---|---|
committer | Ben S <ogham@bsago.me> | 2015-03-07 23:46:48 +0000 |
commit | 3e7357819b3bb24619c1a600aa5cb927cd586459 (patch) | |
tree | e6ef1aefe106f30ba3d7d650d2bdd68299f476af /src/filetype.rs | |
parent | cf38f90aa95fccacd9276a0f638e3edd9797f698 (diff) |
Simplify filetype detection code
Diffstat (limited to 'src/filetype.rs')
-rw-r--r-- | src/filetype.rs | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/src/filetype.rs b/src/filetype.rs index 2f3bda2..f116fb8 100644 --- a/src/filetype.rs +++ b/src/filetype.rs @@ -83,45 +83,42 @@ pub trait HasType { impl<'a> HasType for File<'a> { fn get_type(&self) -> FileType { - let name = &self.name[..]; - if self.stat.kind == io::FileType::Directory { - return Directory; - } - else if self.stat.kind == io::FileType::Symlink { - return Symlink; - } - else if self.stat.kind == io::FileType::BlockSpecial || self.stat.kind == io::FileType::NamedPipe || self.stat.kind == io::FileType::Unknown { - return Special; - } - else if self.stat.perm.contains(io::USER_EXECUTE) { - return Executable; + + match self.stat.kind { + io::FileType::Directory => return Directory, + io::FileType::Symlink => return Symlink, + io::FileType::BlockSpecial => return Special, + io::FileType::NamedPipe => return Special, + io::FileType::Unknown => return Special, + _ => {} } - else if name.starts_with("README") || BUILD_TYPES.iter().any(|&s| s == name) { + + if self.name.starts_with("README") || BUILD_TYPES.contains(&&self.name[..]) { return Immediate; } else if let Some(ref ext) = self.ext { - if IMAGE_TYPES.iter().any(|&s| s == *ext) { + if IMAGE_TYPES.contains(&&ext[..]) { return Image; } - else if VIDEO_TYPES.iter().any(|&s| s == *ext) { + else if VIDEO_TYPES.contains(&&ext[..]) { return Video; } - else if MUSIC_TYPES.iter().any(|&s| s == *ext) { + else if MUSIC_TYPES.contains(&&ext[..]) { return Music; } - else if MUSIC_LOSSLESS.iter().any(|&s| s == *ext) { + else if MUSIC_LOSSLESS.contains(&&ext[..]) { return Lossless; } - else if CRYPTO_TYPES.iter().any(|&s| s == *ext) { + else if CRYPTO_TYPES.contains(&&ext[..]) { return Crypto; } - else if DOCUMENT_TYPES.iter().any(|&s| s == *ext) { + else if DOCUMENT_TYPES.contains(&&ext[..]) { return Document; } - else if COMPRESSED_TYPES.iter().any(|&s| s == *ext) { + else if COMPRESSED_TYPES.contains(&&ext[..]) { return Compressed; } - else if self.is_tmpfile() || TEMP_TYPES.iter().any(|&s| s == *ext) { + else if self.is_tmpfile() || TEMP_TYPES.contains(&&ext[..]) { return Temp; } @@ -132,7 +129,7 @@ impl<'a> HasType for File<'a> { else if source_files.iter().any(|path| self.dir.map(|d| d.contains(path)).unwrap_or(false)) { return Temp; } - else if COMPILED_TYPES.iter().any(|&s| s == *ext) { + else if COMPILED_TYPES.contains(&&ext[..]) { return Compiled; } } |