summaryrefslogtreecommitdiff
path: root/src/eval/template.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval/template.rs')
-rw-r--r--src/eval/template.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/eval/template.rs b/src/eval/template.rs
index 9a71ada4..29b5663d 100644
--- a/src/eval/template.rs
+++ b/src/eval/template.rs
@@ -21,9 +21,16 @@ impl Template {
}
/// Iterate over the contained template nodes.
- pub fn iter(&self) -> impl Iterator<Item = &TemplateNode> + '_ {
+ pub fn iter(&self) -> std::slice::Iter<TemplateNode> {
self.nodes.iter()
}
+
+ /// Repeat this template `n` times.
+ pub fn repeat(&self, n: usize) -> Self {
+ let len = self.nodes.len().checked_mul(n).expect("capacity overflow");
+ let nodes = self.iter().cloned().cycle().take(len).collect();
+ Self { nodes: Rc::new(nodes) }
+ }
}
impl From<TemplateTree> for Template {