optional: true,
},
comments_v4: {
- description: "Comments (inet)",
+ description: "Comments (inet, may span multiple lines)",
type: String,
optional: true,
},
comments_v6: {
- description: "Comments (inet6)",
+ description: "Comments (inet5, may span multiple lines)",
type: String,
optional: true,
},
DeletableProperty::gateway_v6 => { interface.gateway_v6 = None; },
DeletableProperty::method_v4 => { interface.method_v4 = None; },
DeletableProperty::method_v6 => { interface.method_v6 = None; },
- DeletableProperty::comments_v4 => { interface.comments_v4 = Vec::new(); },
- DeletableProperty::comments_v6 => { interface.comments_v6 = Vec::new(); },
+ DeletableProperty::comments_v4 => { interface.comments_v4 = None; },
+ DeletableProperty::comments_v6 => { interface.comments_v6 = None; },
DeletableProperty::mtu => { interface.mtu = None; },
DeletableProperty::auto => { interface.auto = false; },
DeletableProperty::bridge_ports => { interface.set_bridge_ports(Vec::new())?; }
}
}
- if let Some(comments) = comments_v4 {
- interface.comments_v4 = comments.lines().map(String::from).collect();
- }
-
- if let Some(comments) = comments_v6 {
- interface.comments_v6 = comments.lines().map(String::from).collect();
- }
+ if comments_v4.is_some() { interface.comments_v4 = comments_v4; }
+ if comments_v6.is_some() { interface.comments_v6 = comments_v6; }
network::save_config(&config)?;
},
},
comments_v4: {
- description: "Comments (inet)",
- type: Array,
- items: {
- description: "Comment line.",
- type: String,
- },
+ description: "Comments (inet, may span multiple lines)",
+ type: String,
+ optional: true,
},
comments_v6: {
- description: "Comments (inet6)",
- type: Array,
- items: {
- description: "Comment line.",
- type: String,
- },
+ description: "Comments (inet6, may span multiple lines)",
+ type: String,
+ optional: true,
},
bridge_ports: {
schema: NETWORK_INTERFACE_LIST_SCHEMA,
#[serde(skip_serializing_if="Vec::is_empty")]
pub options_v6: Vec<String>,
- #[serde(skip_serializing_if="Vec::is_empty")]
- pub comments_v4: Vec<String>,
- #[serde(skip_serializing_if="Vec::is_empty")]
- pub comments_v6: Vec<String>,
+ #[serde(skip_serializing_if="Option::is_none")]
+ pub comments_v4: Option<String>,
+ #[serde(skip_serializing_if="Option::is_none")]
+ pub comments_v6: Option<String>,
#[serde(skip_serializing_if="Option::is_none")]
/// Maximum Transmission Unit
gateway_v6: None,
options_v4: Vec::new(),
options_v6: Vec::new(),
- comments_v4: Vec::new(),
- comments_v6: Vec::new(),
+ comments_v4: None,
+ comments_v6: None,
mtu: None,
bridge_ports: None,
bond_slaves: None,
writeln!(w, " {}", option)?;
}
- for comment in &self.comments_v4 {
- writeln!(w, "#4{}", comment)?;
+ if let Some(ref comments) = self.comments_v4 {
+ for comment in comments.lines() {
+ writeln!(w, "#{}", comment)?;
+ }
}
Ok(())
writeln!(w, " {}", option)?;
}
- for comment in &self.comments_v6 {
- writeln!(w, "#6{}", comment)?;
+ if let Some(ref comments) = self.comments_v6 {
+ for comment in comments.lines() {
+ writeln!(w, "#{}", comment)?;
+ }
}
Ok(())
bond_slaves: _bond_slaves,
} => {
method_v4 == method_v6
- && comments_v4.is_empty()
- && comments_v6.is_empty()
+ && comments_v4.is_none()
+ && comments_v6.is_none()
&& options_v4.is_empty()
&& options_v6.is_empty()
}
Token::Comment => {
let comment = self.eat(Token::Comment)?;
if !address_family_v4 && address_family_v6 {
- interface.comments_v6.push(comment);
+ let mut comments = interface.comments_v6.take().unwrap_or(String::new());
+ if !comments.is_empty() { comments.push('\n'); }
+ comments.push_str(&comment);
+ interface.comments_v6 = Some(comments);
} else {
- interface.comments_v4.push(comment);
+ let mut comments = interface.comments_v4.take().unwrap_or(String::new());
+ if !comments.is_empty() { comments.push('\n'); }
+ comments.push_str(&comment);
+ interface.comments_v4 = Some(comments);
}
self.eat(Token::Newline)?;
continue;