Philipp Hoenisch
3 years ago
5 changed files with 41 additions and 37 deletions
@ -0,0 +1,27 @@ |
|||
use rocket::http::{ContentType, Status}; |
|||
use rust_embed::EmbeddedFile; |
|||
use std::borrow::Cow; |
|||
use std::ffi::OsStr; |
|||
use std::path::PathBuf; |
|||
|
|||
pub trait EmbeddedFileExt { |
|||
fn into_response(self, file: PathBuf) -> Result<(ContentType, Cow<'static, [u8]>), Status>; |
|||
} |
|||
|
|||
impl EmbeddedFileExt for Option<EmbeddedFile> { |
|||
fn into_response(self, file: PathBuf) -> Result<(ContentType, Cow<'static, [u8]>), Status> { |
|||
match self { |
|||
None => Err(Status::NotFound), |
|||
Some(embedded_file) => { |
|||
let ext = file |
|||
.as_path() |
|||
.extension() |
|||
.and_then(OsStr::to_str) |
|||
.ok_or_else(|| Status::new(400))?; |
|||
let content_type = |
|||
ContentType::from_extension(ext).ok_or_else(|| Status::new(400))?; |
|||
Ok::<(ContentType, Cow<[u8]>), Status>((content_type, embedded_file.data)) |
|||
} |
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue