aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Dirkjan Ochtman <dirkjan@ochtman.nl>2017-09-06 20:03:22 +0200
committerLibravatar Dirkjan Ochtman <dirkjan@ochtman.nl>2017-09-06 20:03:47 +0200
commit9c4f37c17e41930b3e2b085861fa7c4bf71a9db6 (patch)
tree0bfd99bc881734f2b9d094efd1dce6c78999d1fd
parent0129365d1e13ec2d80945f263dcf06a022af7592 (diff)
downloadaskama-9c4f37c17e41930b3e2b085861fa7c4bf71a9db6.tar.gz
askama-9c4f37c17e41930b3e2b085861fa7c4bf71a9db6.tar.bz2
askama-9c4f37c17e41930b3e2b085861fa7c4bf71a9db6.zip
Decrease coupling with Rocket in generated code
-rw-r--r--askama/src/lib.rs19
-rw-r--r--askama_shared/src/generator.rs12
2 files changed, 18 insertions, 13 deletions
diff --git a/askama/src/lib.rs b/askama/src/lib.rs
index 7ebc5db..d56326c 100644
--- a/askama/src/lib.rs
+++ b/askama/src/lib.rs
@@ -289,9 +289,22 @@ pub mod iron {
#[cfg(feature = "with-rocket")]
pub mod rocket {
extern crate rocket;
- pub use self::rocket::http::{ContentType, Status};
- pub use self::rocket::request::Request;
- pub use self::rocket::response::{Responder, Response};
+
+ use self::rocket::http::{ContentType, Status};
+ use self::rocket::request::Request;
+ use self::rocket::response::Response;
+ use std::io::Cursor;
+
+ pub use self::rocket::response::{Responder, Result};
+
+ pub fn respond(t: &super::Template, ext: &str) -> Result {
+ let rsp = t.render().map_err(|_| Status::InternalServerError)?;
+ let ctype = ContentType::from_extension(ext).ok_or(Status::InternalServerError)?;
+ Response::build()
+ .header(ctype)
+ .sized_body(Cursor::new(rsp))
+ .ok()
+ }
}
fn visit_dirs(dir: &Path, cb: &Fn(&DirEntry)) -> io::Result<()> {
diff --git a/askama_shared/src/generator.rs b/askama_shared/src/generator.rs
index e3454b4..4590816 100644
--- a/askama_shared/src/generator.rs
+++ b/askama_shared/src/generator.rs
@@ -699,21 +699,13 @@ impl<'a> Generator<'a> {
fn impl_responder(&mut self, state: &'a State) {
self.write_header(state, "::askama::rocket::Responder<'r>", &vec!["'r"]);
self.writeln("fn respond_to(self, _: &::askama::rocket::Request) \
- -> ::std::result::Result<\
- ::askama::rocket::Response<'r>, ::askama::rocket::Status> {");
- self.writeln("let rsp = self.render().map_err(\
- |_| ::askama::rocket::Status::InternalServerError)?;");
+ -> ::askama::rocket::Result<'r> {");
- self.writeln("::askama::rocket::Response::build()");
- self.indent();
let ext = match state.input.path.extension() {
Some(s) => s.to_str().unwrap(),
None => "txt",
};
- self.writeln(&format!(".header(::askama::rocket::ContentType::from_extension({:?})\
- .unwrap())", ext));
- self.writeln(".sized_body(::std::io::Cursor::new(rsp))");
- self.writeln(".ok()");
+ self.writeln(&format!("::askama::rocket::respond(&self, {:?})", ext));
self.dedent();
self.writeln("}");