summaryrefslogtreecommitdiffstats
path: root/src/filetype.rs
diff options
context:
space:
mode:
authorBen S <ogham@bsago.me>2015-03-07 23:34:53 +0000
committerBen S <ogham@bsago.me>2015-03-07 23:46:48 +0000
commit3e7357819b3bb24619c1a600aa5cb927cd586459 (patch)
treee6ef1aefe106f30ba3d7d650d2bdd68299f476af /src/filetype.rs
parentcf38f90aa95fccacd9276a0f638e3edd9797f698 (diff)
Simplify filetype detection code
Diffstat (limited to 'src/filetype.rs')
-rw-r--r--src/filetype.rs41
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;
}
}