diff --git a/networkmanager/src/settings/connection.rs b/networkmanager/src/settings/connection.rs index 5166655..6a43690 100644 --- a/networkmanager/src/settings/connection.rs +++ b/networkmanager/src/settings/connection.rs @@ -23,7 +23,7 @@ impl<'a> From> for Connection<'a> { macro_rules! derive_value_build { ($name:ident, $(($arg:ident($rename:expr): $arg_ty:ty)),*) => { - #[derive(Debug, Builder, Clone)] + #[derive(Debug, Default, Builder, Clone)] pub struct $name { $( #[builder(setter(into, strip_option))] @@ -32,6 +32,16 @@ macro_rules! derive_value_build { } impl $name { + pub fn new(mut src: std::collections::HashMap) -> Self { + let mut ret = Self::default(); + $( + if let Some(val) = src.remove($rename).and_then(|val| val.try_into().ok()) { + ret.$arg = Some(val); + } + )* + ret + } + pub fn build<'a>(&'a self) -> std::collections::HashMap> { let mut out = std::collections::HashMap::new(); $(