liquid_core/runtime/
template.rs

1use std::io::Write;
2
3use crate::error::Result;
4
5use super::Renderable;
6use super::Runtime;
7
8/// An executable template block.
9#[derive(Debug)]
10pub struct Template {
11    elements: Vec<Box<dyn Renderable>>,
12}
13
14impl Template {
15    /// Create an executable template block.
16    pub fn new(elements: Vec<Box<dyn Renderable>>) -> Template {
17        Template { elements }
18    }
19}
20
21impl Renderable for Template {
22    fn render_to(&self, writer: &mut dyn Write, runtime: &dyn Runtime) -> Result<()> {
23        for el in &self.elements {
24            el.render_to(writer, runtime)?;
25
26            // Did the last element we processed set an interrupt? If so, we
27            // need to abandon the rest of our child elements and just
28            // return what we've got. This is usually in response to a
29            // `break` or `continue` tag being rendered.
30            if runtime
31                .registers()
32                .get_mut::<super::InterruptRegister>()
33                .interrupted()
34            {
35                break;
36            }
37        }
38        Ok(())
39    }
40}