diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-07-29 12:01:06 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-07-29 12:01:06 +0200 |
| commit | 853361338bd756c23992041511b1836a2cd0647f (patch) | |
| tree | 335e632ed0de6090d3139b5f39d02d03ba471bad /src/eval/template.rs | |
| parent | 312dcd070cf79c1dd5503f90ef10588fe4612108 (diff) | |
Better addition and iteration for array, dict and template
Diffstat (limited to 'src/eval/template.rs')
| -rw-r--r-- | src/eval/template.rs | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/eval/template.rs b/src/eval/template.rs index 0be2492b..33f2b896 100644 --- a/src/eval/template.rs +++ b/src/eval/template.rs @@ -1,12 +1,12 @@ use std::collections::HashMap; use std::fmt::{self, Debug, Formatter}; -use std::ops::{Add, Deref}; +use std::ops::{Add, AddAssign, Deref}; use std::rc::Rc; use super::Value; -use crate::util::EcoString; use crate::exec::ExecContext; use crate::syntax::{Expr, SyntaxTree}; +use crate::util::EcoString; /// A template value: `[*Hi* there]`. #[derive(Default, Debug, Clone)] @@ -50,15 +50,25 @@ impl PartialEq for Template { } } -impl Add<&Template> for Template { +impl Add for Template { type Output = Self; - fn add(mut self, rhs: &Self) -> Self::Output { - Rc::make_mut(&mut self.nodes).extend(rhs.nodes.iter().cloned()); + fn add(mut self, rhs: Self) -> Self::Output { + self += rhs; self } } +impl AddAssign for Template { + fn add_assign(&mut self, rhs: Template) { + let sink = Rc::make_mut(&mut self.nodes); + match Rc::try_unwrap(rhs.nodes) { + Ok(source) => sink.extend(source), + Err(rc) => sink.extend(rc.iter().cloned()), + } + } +} + impl Add<EcoString> for Template { type Output = Self; |
