1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#![forbid(unsafe_code)]
#![deny(elided_lifetimes_in_paths)]
#![deny(unreachable_pub)]
use std::convert::TryFrom;
use mendes::application::{Application, Responder};
use mendes::http::header::{HeaderValue, CONTENT_LENGTH, CONTENT_TYPE};
use mendes::http::request::Parts;
use mendes::http::Response;
use mime_guess::MimeGuess;
pub use askama::*;
pub fn into_response<A, T>(
app: &A,
req: &Parts,
t: &T,
ext: Option<&str>,
) -> Response<A::ResponseBody>
where
A: Application,
T: Template,
A::ResponseBody: From<String>,
A::Error: From<askama::Error>,
{
let content = match t.render() {
Ok(content) => content,
Err(e) => return <A::Error as From<_>>::from(e).into_response(app, req),
};
let mut builder = Response::builder();
builder = builder.header(CONTENT_LENGTH, content.len());
if let Some(ext) = ext {
if let Some(ty) = MimeGuess::from_ext(ext).first() {
builder = builder.header(CONTENT_TYPE, HeaderValue::try_from(ty.as_ref()).unwrap());
}
}
builder.body(content.into()).unwrap()
}
|