diff options
| author | Max Audron <me@audron.dev> | 2026-02-22 18:00:41 +0100 |
|---|---|---|
| committer | Max Audron <me@audron.dev> | 2026-02-22 18:00:41 +0100 |
| commit | cae6008c036a4fe690ef1b87d0c953fd05d9d4a6 (patch) | |
| tree | a201ef89c87d2e8774b21a515031b0330f23f3ba /derive/src/network/mod.rs | |
| parent | improve network from_network_list impl (diff) | |
we do not need to reference stuff here and can just consume it
Diffstat (limited to 'derive/src/network/mod.rs')
| -rw-r--r-- | derive/src/network/mod.rs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/derive/src/network/mod.rs b/derive/src/network/mod.rs index a4f6c72..2a0b8b0 100644 --- a/derive/src/network/mod.rs +++ b/derive/src/network/mod.rs @@ -186,7 +186,6 @@ pub fn network_list(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let name_str = name.to_string(); let to_network_list = list::to(&fields); - let from_network_list = list::from(&fields); let gen = quote! { impl libquassel::message::signalproxy::NetworkList for #name { @@ -198,11 +197,19 @@ pub fn network_list(input: proc_macro::TokenStream) -> proc_macro::TokenStream { Ok(res) } - fn from_network_list(input: &mut libquassel::primitive::VariantList) -> crate::Result<Self> { + fn from_network_list(input: libquassel::primitive::VariantList) -> crate::Result<Self> { + use crate::message::signalproxy::translation::NetworkMap; log::trace!("converting {} from network object: {:#?}", #name_str, input); - Ok(Self { - #(#from_network_list)* - }) + let mut i = input.into_iter(); + let mut map = libquassel::primitive::VariantMap::new(); + + while let Some(key) = i.next() { + let key: String = key.try_into()?; + let value = i.next().ok_or(crate::ProtocolError::MissingField(key.clone()))?; + map.insert(key, value); + } + + Self::from_network_map(&mut map) } } }; |
