nmstate/nm/nm_dbus/gen_conf/
ovs.rs1use std::collections::HashMap;
4
5use super::super::{
6 NmError, NmSettingOvsBridge, NmSettingOvsDpdk, NmSettingOvsExtIds,
7 NmSettingOvsIface, NmSettingOvsOtherConfig, NmSettingOvsPatch,
8 NmSettingOvsPort, ToKeyfile,
9};
10use crate::nm::nm_dbus::ToDbusValue;
11
12impl ToKeyfile for NmSettingOvsBridge {}
13impl ToKeyfile for NmSettingOvsIface {}
14impl ToKeyfile for NmSettingOvsPatch {}
15impl ToKeyfile for NmSettingOvsDpdk {}
16
17impl ToKeyfile for NmSettingOvsPort {
18 fn to_keyfile(
19 &self,
20 ) -> Result<HashMap<String, zvariant::Value<'_>>, NmError> {
21 let mut ret = HashMap::new();
22
23 for (k, v) in self.to_value()?.drain() {
24 if k != "trunks" {
25 ret.insert(k.to_string(), v);
26 }
27 }
28 if let Some(vlans) = self.trunks.as_ref() {
29 let mut vlans_clone = vlans.clone();
30 vlans_clone.sort_unstable_by_key(|v| v.start);
31 let mut vlans_str = Vec::new();
32 for vlan in vlans_clone {
33 let ret = if vlan.start == vlan.end {
34 vlan.start.to_string()
35 } else {
36 format!("{}-{}", vlan.start, vlan.end)
37 };
38 vlans_str.push(ret);
39 }
40 ret.insert(
41 "trunks".to_string(),
42 zvariant::Value::new(vlans_str.join(",")),
43 );
44 }
45
46 Ok(ret)
47 }
48}
49
50impl ToKeyfile for NmSettingOvsExtIds {
51 fn to_keyfile(
52 &self,
53 ) -> Result<HashMap<String, zvariant::Value<'_>>, NmError> {
54 let mut ret = HashMap::new();
55 if let Some(data) = self.data.as_ref() {
56 for (k, v) in data {
57 ret.insert(format!("data.{k}"), zvariant::Value::new(v));
58 }
59 }
60 Ok(ret)
61 }
62}
63
64impl ToKeyfile for NmSettingOvsOtherConfig {
65 fn to_keyfile(
66 &self,
67 ) -> Result<HashMap<String, zvariant::Value<'_>>, NmError> {
68 let mut ret = HashMap::new();
69 if let Some(data) = self.data.as_ref() {
70 for (k, v) in data {
71 ret.insert(format!("data.{k}"), zvariant::Value::new(v));
72 }
73 }
74 Ok(ret)
75 }
76}