diff options
Diffstat (limited to 'src/eval/template.rs')
| -rw-r--r-- | src/eval/template.rs | 9 |
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 { |
