use std::{collections::HashMap, convert::TryFrom};
use serde::{Deserialize, Serialize};
use super::super::{NmError, ToDbusValue, connection::DbusDictionary};
#[derive(Debug, Clone, PartialEq, Default, Deserialize, Serialize)]
#[serde(try_from = "DbusDictionary")]
#[non_exhaustive]
pub struct NmSettingUser {
pub data: Option<HashMap<String, String>>,
_other: HashMap<String, zvariant::OwnedValue>,
}
impl TryFrom<DbusDictionary> for NmSettingUser {
type Error = NmError;
fn try_from(mut v: DbusDictionary) -> Result<Self, Self::Error> {
Ok(Self {
data: _from_map!(v, "data", <HashMap<String, String>>::try_from)?,
_other: v,
})
}
}
impl ToDbusValue for NmSettingUser {
fn to_value(&self) -> Result<HashMap<&str, zvariant::Value<'_>>, NmError> {
let mut ret = HashMap::new();
if let Some(v) = &self.data {
let mut dict_value = zvariant::Dict::new(
&zvariant::Signature::Str,
&zvariant::Signature::Str,
);
for (k, v) in v.iter() {
dict_value
.append(zvariant::Value::new(k), zvariant::Value::new(v))?;
}
ret.insert("data", zvariant::Value::Dict(dict_value));
}
ret.extend(self._other.iter().map(|(key, value)| {
(key.as_str(), zvariant::Value::from(value.clone()))
}));
Ok(ret)
}
}