chiark / gitweb /
make subst more generic
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 28 Dec 2020 19:34:04 +0000 (19:34 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 28 Dec 2020 19:34:04 +0000 (19:34 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
wdriver.rs

index 7b2463f14ede4c129e2f8253737235ef7eb0a242..7e075ec3c877cf567db24c21f82946c56dae8745 100644 (file)
@@ -153,28 +153,24 @@ pub trait Subst : Clone + Sized {
   }
 
   #[throws(AE)]
-  fn subst(&self, s: &dyn AsRef<str> -> String {
-    #[throws(AE)]
-    fn inner(self_: &Self, s: &dyn AsRef<str> -> String {
-      let s = s.as_ref();
-      let re = Regex::new(r"@(\w+)@").expect("bad re!");
-      let mut errs = vec![];
-      let out = re.replace_all(s, |caps: &regex::Captures| {
-        let kw = caps.get(1).expect("$1 missing!").as_str();
-        if kw == "" { return "".to_owned() }
-        let v = self.get(kw);
-        v.unwrap_or_else(||{
-          errs.push(kw.to_owned());
-          "".to_owned()
-        })
-      });
-      if ! errs.is_empty() {
-        throw!(anyhow!("bad substitution(s) {:?} in {:?}",
-                       &errs, s));
-      }
-      out.into()
+  fn subst<S:AsRef<str>>(&self, s: &S) -> String {
+    let s = s.as_ref();
+    let re = Regex::new(r"@(\w+)@").expect("bad re!");
+    let mut errs = vec![];
+    let out = re.replace_all(s, |caps: &regex::Captures| {
+      let kw = caps.get(1).expect("$1 missing!").as_str();
+      if kw == "" { return "".to_owned() }
+      let v = self.get(kw);
+      v.unwrap_or_else(||{
+        errs.push(kw.to_owned());
+        "".to_owned()
+      })
+    });
+    if ! errs.is_empty() {
+      throw!(anyhow!("bad substitution(s) {:?} in {:?}",
+                     &errs, s));
     }
-    inner(self, s)?
+    out.into()
   }
 
   #[throws(AE)]