From a27420a3f55b0e5938da22269f0345abc8f86817 Mon Sep 17 00:00:00 2001 From: Lucy Date: Wed, 26 Jan 2022 13:22:44 -0500 Subject: [PATCH] Add a method for turning a HashMap into a value-object --- networkmanager/src/settings/connection.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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(); $(