aboutsummaryrefslogtreecommitdiff
path: root/derive/src/network/mod.rs
diff options
context:
space:
mode:
authorMax Audron <me@audron.dev>2026-02-22 18:00:41 +0100
committerMax Audron <me@audron.dev>2026-02-22 18:00:41 +0100
commitcae6008c036a4fe690ef1b87d0c953fd05d9d4a6 (patch)
treea201ef89c87d2e8774b21a515031b0330f23f3ba /derive/src/network/mod.rs
parentimprove network from_network_list impl (diff)
remove references from NetworkList inputHEADmain
we do not need to reference stuff here and can just consume it
Diffstat (limited to '')
-rw-r--r--derive/src/network/mod.rs17
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)
}
}
};