aboutsummaryrefslogtreecommitdiffstats
path: root/askama_derive/src/generator.rs
diff options
context:
space:
mode:
Diffstat (limited to 'askama_derive/src/generator.rs')
-rw-r--r--askama_derive/src/generator.rs39
1 files changed, 24 insertions, 15 deletions
diff --git a/askama_derive/src/generator.rs b/askama_derive/src/generator.rs
index 02bf71e..b412c9d 100644
--- a/askama_derive/src/generator.rs
+++ b/askama_derive/src/generator.rs
@@ -162,7 +162,7 @@ impl<'a> Generator<'a> {
if self.next_ws.is_some() && !ws.0 {
let val = self.next_ws.unwrap();
if !val.is_empty() {
- self.writeln(&format!("writer.write_str({:#?}).unwrap();",
+ self.writeln(&format!("writer.write_str({:#?})?;",
val));
}
}
@@ -304,12 +304,12 @@ impl<'a> Generator<'a> {
assert!(rws.is_empty());
self.next_ws = Some(lws);
} else {
- self.writeln(&format!("writer.write_str({:#?}).unwrap();",
+ self.writeln(&format!("writer.write_str({:#?})?;",
lws));
}
}
if !val.is_empty() {
- self.writeln(&format!("writer.write_str({:#?}).unwrap();", val));
+ self.writeln(&format!("writer.write_str({:#?})?;", val));
}
if !rws.is_empty() {
self.next_ws = Some(rws);
@@ -320,7 +320,7 @@ impl<'a> Generator<'a> {
self.handle_ws(ws);
self.write("writer.write_fmt(format_args!(\"{}\", ");
self.visit_expr(s);
- self.writeln(")).unwrap();");
+ self.writeln("))?;");
}
fn write_cond(&mut self, conds: &'a [Cond], ws: &WS) {
@@ -371,7 +371,7 @@ impl<'a> Generator<'a> {
fn write_block(&mut self, ws1: &WS, name: &str, ws2: &WS) {
self.flush_ws(ws1);
- self.writeln(&format!("timpl.render_block_{}_to(writer);", name));
+ self.writeln(&format!("timpl.render_block_{}_into(writer)?;", name));
self.prepare_ws(ws2);
}
@@ -379,11 +379,13 @@ impl<'a> Generator<'a> {
ws2: &WS) {
self.writeln("#[allow(unused_variables)]");
self.writeln(&format!(
- "fn render_block_{}_to(&self, writer: &mut ::std::fmt::Write) {{",
+ "fn render_block_{}_into(&self, writer: &mut ::std::fmt::Write) \
+ -> Result<(), ::std::fmt::Error> {{",
name));
self.prepare_ws(ws1);
self.handle(nodes);
self.flush_ws(ws2);
+ self.writeln("Ok(())");
self.writeln("}");
}
@@ -479,9 +481,11 @@ impl<'a> Generator<'a> {
// Implement `Template` for the given context struct.
fn impl_template(&mut self, ast: &syn::DeriveInput, nodes: &'a [Node]) {
self.write_header(ast, "::askama::Template");
- self.writeln("fn render_to(&self, writer: &mut ::std::fmt::Write) {");
+ self.writeln("fn render_into(&self, writer: &mut ::std::fmt::Write) -> \
+ Result<(), ::std::fmt::Error> {");
self.handle(nodes);
self.flush_ws(&WS(false, false));
+ self.writeln("Ok(())");
self.writeln("}");
self.writeln("}");
}
@@ -506,16 +510,18 @@ impl<'a> Generator<'a> {
self.writeln("#[allow(unused_variables)]");
self.writeln(&format!(
- "fn render_trait_to(&self, timpl: &{}, writer: &mut ::std::fmt::Write) {{",
+ "fn render_trait_into(&self, timpl: &{}, writer: &mut ::std::fmt::Write) \
+ -> Result<(), ::std::fmt::Error> {{",
trait_name));
if let Some(nodes) = nodes {
self.handle(nodes);
self.flush_ws(&WS(false, false));
} else {
- self.writeln("self._parent.render_trait_to(self, writer);");
+ self.writeln("self._parent.render_trait_into(self, writer)?;");
}
+ self.writeln("Ok(())");
self.writeln("}");
self.flush_ws(&WS(false, false));
self.writeln("}");
@@ -524,12 +530,14 @@ impl<'a> Generator<'a> {
// Implement `Template` for templates that implement a template trait.
fn impl_template_for_trait(&mut self, ast: &syn::DeriveInput, derived: bool) {
self.write_header(ast, "::askama::Template");
- self.writeln("fn render_to(&self, writer: &mut ::std::fmt::Write) {");
+ self.writeln("fn render_into(&self, writer: &mut ::std::fmt::Write) \
+ -> Result<(), ::std::fmt::Error> {");
if derived {
- self.writeln("self._parent.render_trait_to(self, writer);");
+ self.writeln("self._parent.render_trait_into(self, writer)?;");
} else {
- self.writeln("self.render_trait_to(self, writer);");
+ self.writeln("self.render_trait_into(self, writer)?;");
}
+ self.writeln("Ok(())");
self.writeln("}");
self.writeln("}");
}
@@ -540,13 +548,14 @@ impl<'a> Generator<'a> {
for bname in block_names {
self.writeln(&format!(
- "fn render_block_{}_to(&self, writer: &mut ::std::fmt::Write);",
+ "fn render_block_{}_into(&self, writer: &mut ::std::fmt::Write) \
+ -> Result<(), ::std::fmt::Error>;",
bname));
}
self.writeln(&format!(
- "fn render_trait_to(&self, timpl: &{}, writer: &mut ::std::fmt::Write);",
+ "fn render_trait_into(&self, timpl: &{}, writer: &mut ::std::fmt::Write) \
+ -> Result<(), ::std::fmt::Error>;",
trait_name));
-
self.writeln("}");
}