summaryrefslogtreecommitdiff
path: root/dhall_core/src/text.rs
diff options
context:
space:
mode:
authorNadrieril2019-04-01 00:17:44 +0200
committerNadrieril2019-04-01 00:21:00 +0200
commit57ccbfa16f48f373ac5545b8523de56fb996ba3e (patch)
treee0e2841cc415e3e2d6e1e41de66b509df900a88c /dhall_core/src/text.rs
parent62970fd2010b01260cf45a1f2a6a582c6a8c0c12 (diff)
Refactor and clarify various map methods
Diffstat (limited to '')
-rw-r--r--dhall_core/src/text.rs24
1 files changed, 19 insertions, 5 deletions
diff --git a/dhall_core/src/text.rs b/dhall_core/src/text.rs
index d915553..9500f32 100644
--- a/dhall_core/src/text.rs
+++ b/dhall_core/src/text.rs
@@ -33,20 +33,34 @@ pub enum InterpolatedTextContents<SubExpr> {
Expr(SubExpr),
}
-impl<SubExpr: Clone> InterpolatedText<SubExpr> {
- pub fn map<SubExpr2, F>(&self, mut f: F) -> InterpolatedText<SubExpr2>
+impl<SubExpr> InterpolatedText<SubExpr> {
+ pub fn map<SubExpr2, F>(self, mut f: F) -> InterpolatedText<SubExpr2>
where
- F: FnMut(&SubExpr) -> SubExpr2,
+ F: FnMut(SubExpr) -> SubExpr2,
{
InterpolatedText {
head: self.head.clone(),
- tail: self.tail.iter().map(|(e, s)| (f(e), s.clone())).collect(),
+ tail: self
+ .tail
+ .into_iter()
+ .map(|(e, s)| (f(e), s.clone()))
+ .collect(),
+ }
+ }
+
+ pub fn as_ref(&self) -> InterpolatedText<&SubExpr> {
+ InterpolatedText {
+ head: self.head.clone(),
+ tail: self.tail.iter().map(|(e, s)| (e, s.clone())).collect(),
}
}
pub fn iter<'a>(
&'a self,
- ) -> impl Iterator<Item = InterpolatedTextContents<SubExpr>> + 'a {
+ ) -> impl Iterator<Item = InterpolatedTextContents<SubExpr>> + 'a
+ where
+ SubExpr: Clone,
+ {
use std::iter::once;
once(InterpolatedTextContents::Text(self.head.clone())).chain(
self.tail.iter().flat_map(|(e, s)| {