use std::path::Path;
use rocket::{
http::{hyper::header::CACHE_CONTROL, ContentType, Header},
response::{self, Responder},
Request, Response
};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct NoCache<R>(pub R);
impl<'r, 'o: 'r, R: Responder<'r, 'o>> Responder<'r, 'o> for NoCache<R> {
fn respond_to(self, req: &'r Request<'_>) -> response::Result<'o> {
let mut build = Response::build();
build.merge(self.0.respond_to(req)?);
let hdr = Header::new(CACHE_CONTROL.as_str(), "no-store");
build.header(hdr);
build.ok()
}
}
pub fn guess_mime_type(fname: impl AsRef<str>) -> ContentType {
fn inner(fname: &str) -> ContentType {
Path::new(fname)
.extension()
.and_then(|ext| ContentType::from_extension(ext.to_str().unwrap()))
.unwrap_or_else(|| {
ContentType::parse_flexible("application/octet-stream").unwrap()
})
}
inner(fname.as_ref())
}