chiark / gitweb /
config: Refactor substutiton
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 25 Jul 2021 18:26:56 +0000 (19:26 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 25 Jul 2021 19:43:55 +0000 (20:43 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/config.rs

index e6d7e5920590b70838c64c3cc27790ed0818782b..174b568460c10c16559cdc7e0f5472d3b0eb7be1 100644 (file)
@@ -727,20 +727,27 @@ impl InstanceConfig {
       fn dv<T:Display>(v: &[T]) -> String {
         format!("{}", v.iter().format(" "))
       }
-      let vnetwork = dv(&self.vnetwork);
-      let vroutes  = dv(&self.vroutes);
-      
-      let keys = &["local",               "peer",       "rnets",    "ifname"];
+      let mut ipif = mem::take(&mut self.ipif); // lets us borrow all of self
+      let s = &self; // just for abbreviation, below
+      let vnetwork = dv(&s.vnetwork);
+      let vroutes  = dv(&s.vroutes);
+
+      let keys = &["local",       "peer",    "rnets",   "ifname"];
       let values = match end {
       Server => [&self.vaddr as DD      , &self.vrelay, &vnetwork, ifname],
       Client => [&self.link.client as DD, &self.vaddr,  &vroutes,  ifname],
Server => [&s.vaddr as DD      , &s.vrelay, &vnetwork, &s.ifname_server],
Client => [&s.link.client as DD, &s.vaddr,  &vroutes,  &s.ifname_client],
       };
+      let always = [
+        ( "mtu",     &s.mtu as DD ),
+      ];
+
       subst(
-        &mut self.ipif,
+        &mut ipif,
         &mut keys.iter().cloned()
           .zip_eq(values)
-          .chain([( "mtu", &self.mtu as DD )].iter().cloned()),
+          .chain(always.iter().cloned()),
       ).context("ipif")?;
+      self.ipif = ipif;
     }
   }
 }