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;
}
}
}