summaryrefslogtreecommitdiffstats
path: root/src/trait_ext.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/trait_ext.rs')
-rw-r--r--src/trait_ext.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/trait_ext.rs b/src/trait_ext.rs
index 350138b..51e352e 100644
--- a/src/trait_ext.rs
+++ b/src/trait_ext.rs
@@ -1,3 +1,17 @@
+use std::path::PathBuf;
+
+use crate::fail::{HResult, MimeError};
+use crate::files::File;
+
+
+
+
+
+
+
+
+
+// This makes using short-circuiting iterators more convenient
pub trait ExtractResult<T> {
fn extract(self) -> T;
}
@@ -10,3 +24,25 @@ impl<T> ExtractResult<T> for Result<T,T> {
}
}
}
+
+
+// To get MIME from Path without hassle
+pub trait PathBufMime {
+ fn get_mime(&self) -> HResult<String>;
+}
+
+impl PathBufMime for PathBuf {
+ fn get_mime(&self) -> HResult<String> {
+ let mut file = File::new_from_path(&self, None)
+ .map_err(|e| MimeError::AccessFailed(Box::new(e)))?;
+ file.meta_sync()
+ .map_err(|e| MimeError::AccessFailed(Box::new(e)))?;;
+
+
+ file.get_mime()
+ .map(|mime| {
+ Ok(format!("{}", mime))
+ })
+ .ok_or(MimeError::NoMimeFound)?
+ }
+}