diff options
Diffstat (limited to '')
-rw-r--r-- | dhall_core/src/text.rs | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/dhall_core/src/text.rs b/dhall_core/src/text.rs index eb0d39c..2a468d2 100644 --- a/dhall_core/src/text.rs +++ b/dhall_core/src/text.rs @@ -30,8 +30,8 @@ impl<N, E> From<String> for InterpolatedText<N, E> { } #[derive(Debug, Clone)] -pub enum InterpolatedTextContents<'a, Note, Embed> { - Text(&'a str), +pub enum InterpolatedTextContents<Note, Embed> { + Text(String), Expr(SubExpr<Note, Embed>), } @@ -46,35 +46,35 @@ impl<N, E> InterpolatedText<N, E> { } } - pub fn iter(&self) -> impl Iterator<Item = InterpolatedTextContents<N, E>> { + pub fn iter<'a>( + &'a self, + ) -> impl Iterator<Item = InterpolatedTextContents<N, E>> + 'a { use std::iter::once; - once(InterpolatedTextContents::Text(self.head.as_ref())).chain( + once(InterpolatedTextContents::Text(self.head.clone())).chain( self.tail.iter().flat_map(|(e, s)| { once(InterpolatedTextContents::Expr(Rc::clone(e))) - .chain(once(InterpolatedTextContents::Text(s))) + .chain(once(InterpolatedTextContents::Text(s.clone()))) }), ) } } -impl<'a, N: 'a, E: 'a> FromIterator<InterpolatedTextContents<'a, N, E>> +impl<'a, N: 'a, E: 'a> FromIterator<InterpolatedTextContents<N, E>> for InterpolatedText<N, E> { fn from_iter<T>(iter: T) -> Self where - T: IntoIterator<Item = InterpolatedTextContents<'a, N, E>>, + T: IntoIterator<Item = InterpolatedTextContents<N, E>>, { let mut res = InterpolatedText { head: "".to_owned(), tail: vec![], }; - // let mut empty_string = "".to_owned(); let mut crnt_str = &mut res.head; for x in iter.into_iter() { match x { - InterpolatedTextContents::Text(s) => crnt_str.push_str(s), + InterpolatedTextContents::Text(s) => crnt_str.push_str(&s), InterpolatedTextContents::Expr(e) => { - // crnt_str = &mut empty_string; res.tail.push((e.clone(), "".to_owned())); crnt_str = &mut res.tail.last_mut().unwrap().1; } |