2016-08-27 01:37:28 +00:00
|
|
|
use response::{header, Responder, FreshHyperResponse, Outcome};
|
|
|
|
use response::mime::{Mime, TopLevel, SubLevel};
|
2016-09-25 10:06:02 +00:00
|
|
|
use ::ContentType;
|
|
|
|
|
|
|
|
pub struct Content<T: Responder>(pub ContentType, pub T);
|
|
|
|
|
|
|
|
impl<T: Responder> Responder for Content<T> {
|
|
|
|
fn respond<'b>(&mut self, mut res: FreshHyperResponse<'b>) -> Outcome<'b> {
|
|
|
|
res.headers_mut().set(header::ContentType(self.0.clone().into()));
|
|
|
|
self.1.respond(res)
|
|
|
|
}
|
|
|
|
}
|
2016-08-27 01:37:28 +00:00
|
|
|
|
|
|
|
macro_rules! impl_data_type_responder {
|
|
|
|
($name:ident: $top:ident/$sub:ident) => (
|
|
|
|
pub struct $name<T: Responder>(pub T);
|
|
|
|
|
|
|
|
impl<T: Responder> Responder for $name<T> {
|
|
|
|
fn respond<'b>(&mut self, mut res: FreshHyperResponse<'b>) -> Outcome<'b> {
|
|
|
|
let mime = Mime(TopLevel::$top, SubLevel::$sub, vec![]);
|
|
|
|
res.headers_mut().set(header::ContentType(mime));
|
|
|
|
self.0.respond(res)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
impl_data_type_responder!(JSON: Application/Json);
|
2016-08-27 12:10:29 +00:00
|
|
|
impl_data_type_responder!(XML: Application/Xml);
|
2016-08-27 01:37:28 +00:00
|
|
|
impl_data_type_responder!(HTML: Text/Html);
|
|
|
|
impl_data_type_responder!(Plain: Text/Plain);
|
2016-09-12 08:51:02 +00:00
|
|
|
impl_data_type_responder!(CSS: Text/Css);
|
|
|
|
impl_data_type_responder!(JavaScript: Application/Javascript);
|