use std::path::{Path, Component};
use mime::{Mime, TopLevel, SubLevel};
include!(concat!(env!("OUT_DIR"), "/mime.rs"));
pub fn ext_to_mime(ext: &str) -> Option<Mime> {
MIME.get(ext).map(|&(ref top, ref sub)| {
Mime(top.into(), sub.into(), vec![])
})
}
enum MaybeKnown<T> {
Known(T),
Unknown(&'static str)
}
impl<'a> Into<TopLevel> for &'a MaybeKnown<TopLevel> {
fn into(self) -> TopLevel {
match *self {
MaybeKnown::Known(ref t) => t.clone(),
MaybeKnown::Unknown(t) => TopLevel::Ext(t.into())
}
}
}
impl<'a> Into<SubLevel> for &'a MaybeKnown<SubLevel> {
fn into(self) -> SubLevel {
match *self {
MaybeKnown::Known(ref s) => s.clone(),
MaybeKnown::Unknown(s) => SubLevel::Ext(s.into())
}
}
}
pub fn check_path<P: ?Sized + AsRef<Path>>(path: &P) -> Result<(), Component> {
for component in path.as_ref().components() {
match component {
c @ Component::RootDir |
c @ Component::Prefix(_) |
c @ Component::ParentDir => return Err(c),
Component::Normal(_) | Component::CurDir => {}
}
}
Ok(())
}