From 024eb3df4a0786a92033baea123aa779998cdc28 Mon Sep 17 00:00:00 2001 From: Max Audron Date: Sun, 22 Feb 2026 14:06:16 +0100 Subject: NetworkList and signalproxy objects error handling --- derive/src/network/list.rs | 6 +++--- derive/src/network/map.rs | 4 ++-- derive/src/network/maplist.rs | 6 +++--- derive/src/network/mod.rs | 10 +++++----- 4 files changed, 13 insertions(+), 13 deletions(-) (limited to 'derive/src/network') diff --git a/derive/src/network/list.rs b/derive/src/network/list.rs index e0bbfa8..f5eaef4 100644 --- a/derive/src/network/list.rs +++ b/derive/src/network/list.rs @@ -18,7 +18,7 @@ pub(crate) fn to(fields: &[NetworkField]) -> Vec { let field_inner = match field.network { crate::network::NetworkRepr::List => { - quote! { libquassel::message::NetworkList::to_network_list(&self.#field_name).into() } + quote! { libquassel::message::NetworkList::to_network_list(&self.#field_name)?.into() } } crate::network::NetworkRepr::Map => { quote! { libquassel::message::NetworkMap::to_network_map(&self.#field_name).into() } @@ -55,7 +55,7 @@ pub(crate) fn from(fields: &[NetworkField]) -> Vec { let mut i = input.iter(); match i.position(|x| *x == libquassel::primitive::Variant::ByteArray(String::from(#field_rename))) { Some(_) => { - match i.next().expect("failed to get next field") { + match i.next().ok_or_else(|| crate::ProtocolError::MissingField(#field_rename.to_string()))? { libquassel::primitive::Variant::#field_variant_type(var) => var .clone() .try_into() @@ -83,7 +83,7 @@ pub(crate) fn from(fields: &[NetworkField]) -> Vec { super::NetworkRepr::List => quote! { #field_name: libquassel::message::NetworkList::from_network_list(&mut { #extract_inner - }), + })?, }, super::NetworkRepr::Map => quote! { #field_name: libquassel::message::NetworkMap::from_network_map(&mut { diff --git a/derive/src/network/map.rs b/derive/src/network/map.rs index ead71c7..1576c99 100644 --- a/derive/src/network/map.rs +++ b/derive/src/network/map.rs @@ -18,7 +18,7 @@ pub(crate) fn to(fields: &[NetworkField]) -> Vec { let field_inner = match field.network { crate::network::NetworkRepr::List => quote! { - libquassel::message::NetworkList::to_network_list(&self.#field_name).into() + libquassel::message::NetworkList::to_network_list(&self.#field_name).unwrap().into() }, crate::network::NetworkRepr::Map => quote! { libquassel::message::NetworkMap::to_network_map(&self.#field_name).into() @@ -59,7 +59,7 @@ pub(crate) fn from(fields: &[NetworkField]) -> Vec { match field.network { super::NetworkRepr::List => quote! { #field_name: libquassel::message::NetworkList::from_network_list( - &mut std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).#unwrap), + &mut std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).#unwrap).unwrap(), }, super::NetworkRepr::Map => quote! { #field_name: libquassel::message::NetworkMap::from_network_map( diff --git a/derive/src/network/maplist.rs b/derive/src/network/maplist.rs index 21ea524..47b3ff2 100644 --- a/derive/src/network/maplist.rs +++ b/derive/src/network/maplist.rs @@ -19,7 +19,7 @@ pub(crate) fn to(fields: &[NetworkField]) -> Vec { let field_inner = match field.network { crate::network::NetworkRepr::List => quote! { - self.#field_name.to_network_list().into() + self.#field_name.to_network_list().unwrap().into() }, crate::network::NetworkRepr::Map => quote! { self.#field_name.to_network_map().into() @@ -73,7 +73,7 @@ pub(crate) fn to_vec(_type_name: &Ident, fields: &[NetworkField]) -> TokenStream let field_inner = match field.network { crate::network::NetworkRepr::List => quote! { - item.#field_name.to_network_list().into() + item.#field_name.to_network_list().unwrap().into() }, crate::network::NetworkRepr::Map => quote! { item.#field_name.to_network_map().into() @@ -150,7 +150,7 @@ pub(crate) fn from(fields: &[NetworkField]) -> Vec { let field_inner = match field.network { super::NetworkRepr::List => quote! { - libquassel::message::NetworkList::from_network_list(&mut std::convert::TryInto::try_into(input.remove(0)).#unwrap) + libquassel::message::NetworkList::from_network_list(&mut std::convert::TryInto::try_into(input.remove(0)).#unwrap).unwrap() }, super::NetworkRepr::Map => quote! { libquassel::message::NetworkMap::from_network_map(&mut std::convert::TryInto::try_into(input.remove(0)).#unwrap) diff --git a/derive/src/network/mod.rs b/derive/src/network/mod.rs index f2ead96..1fd50bd 100644 --- a/derive/src/network/mod.rs +++ b/derive/src/network/mod.rs @@ -190,19 +190,19 @@ pub fn network_list(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let gen = quote! { impl libquassel::message::signalproxy::NetworkList for #name { - fn to_network_list(&self) -> libquassel::primitive::VariantList { + fn to_network_list(&self) -> crate::Result { let mut res = libquassel::primitive::VariantList::new(); #(#to_network_list)* - return res; + Ok(res) } - fn from_network_list(input: &mut libquassel::primitive::VariantList) -> Self { + fn from_network_list(input: &mut libquassel::primitive::VariantList) -> crate::Result { log::trace!("converting {} from network object: {:#?}", #name_str, input); - Self { + Ok(Self { #(#from_network_list)* - } + }) } } }; -- cgit v1.2.3