diff options
| author | Max Audron <me@audron.dev> | 2026-02-22 15:19:49 +0100 |
|---|---|---|
| committer | Max Audron <me@audron.dev> | 2026-02-22 15:19:49 +0100 |
| commit | 9110ff85313ea9bf5ee93f60122ce5660accede2 (patch) | |
| tree | 0c4b8553a63ae269475d380cb5f1b365498b6297 /derive/src | |
| parent | add more git remotes (diff) | |
NetworkMap error handling
Diffstat (limited to 'derive/src')
| -rw-r--r-- | derive/src/from/mod.rs | 4 | ||||
| -rw-r--r-- | derive/src/network/list.rs | 4 | ||||
| -rw-r--r-- | derive/src/network/map.rs | 13 | ||||
| -rw-r--r-- | derive/src/network/maplist.rs | 22 | ||||
| -rw-r--r-- | derive/src/network/mod.rs | 14 |
5 files changed, 28 insertions, 29 deletions
diff --git a/derive/src/from/mod.rs b/derive/src/from/mod.rs index 23ea191..f09e4e5 100644 --- a/derive/src/from/mod.rs +++ b/derive/src/from/mod.rs @@ -54,7 +54,7 @@ pub fn from(input: proc_macro::TokenStream) -> proc_macro::TokenStream { impl std::convert::TryFrom<#enum_name> for #inner_type { type Error = crate::error::ProtocolError; - fn try_from(input: #enum_name) -> Result<Self, Self::Error> { + fn try_from(input: #enum_name) -> std::result::Result<Self, Self::Error> { match input { #enum_name::#variant(input) => Ok(input), _ => Err(crate::error::ProtocolError::WrongVariant), @@ -65,7 +65,7 @@ pub fn from(input: proc_macro::TokenStream) -> proc_macro::TokenStream { impl std::convert::TryFrom<&#enum_name> for #inner_type { type Error = crate::error::ProtocolError; - fn try_from(input: &#enum_name) -> Result<Self, Self::Error> { + fn try_from(input: &#enum_name) -> std::result::Result<Self, Self::Error> { match input { #enum_name::#variant(input) => Ok(input.clone()), _ => Err(crate::error::ProtocolError::WrongVariant), diff --git a/derive/src/network/list.rs b/derive/src/network/list.rs index f5eaef4..d1035c4 100644 --- a/derive/src/network/list.rs +++ b/derive/src/network/list.rs @@ -21,7 +21,7 @@ pub(crate) fn to(fields: &[NetworkField]) -> Vec<TokenStream> { 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() } + quote! { libquassel::message::NetworkMap::to_network_map(&self.#field_name)?.into() } } crate::network::NetworkRepr::None => quote! { self.#field_name.clone().into() }, }; @@ -88,7 +88,7 @@ pub(crate) fn from(fields: &[NetworkField]) -> Vec<TokenStream> { super::NetworkRepr::Map => quote! { #field_name: libquassel::message::NetworkMap::from_network_map(&mut { #extract_inner - }), + })?, }, super::NetworkRepr::None => quote! { #field_name: { diff --git a/derive/src/network/map.rs b/derive/src/network/map.rs index 1576c99..39d1cd8 100644 --- a/derive/src/network/map.rs +++ b/derive/src/network/map.rs @@ -18,10 +18,10 @@ pub(crate) fn to(fields: &[NetworkField]) -> Vec<TokenStream> { let field_inner = match field.network { crate::network::NetworkRepr::List => quote! { - libquassel::message::NetworkList::to_network_list(&self.#field_name).unwrap().into() + 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() + libquassel::message::NetworkMap::to_network_map(&self.#field_name)?.into() }, crate::network::NetworkRepr::None => quote! { self.#field_name.clone().into() @@ -59,11 +59,11 @@ pub(crate) fn from(fields: &[NetworkField]) -> Vec<TokenStream> { 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).unwrap(), + &mut std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).#unwrap)?, }, super::NetworkRepr::Map => quote! { #field_name: libquassel::message::NetworkMap::from_network_map( - &mut std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).#unwrap), + &mut std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).#unwrap)?, }, super::NetworkRepr::None => quote! { #field_name: std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).#unwrap, @@ -75,9 +75,8 @@ pub(crate) fn from(fields: &[NetworkField]) -> Vec<TokenStream> { pub(crate) fn to_vec(_type_name: &Ident, _fields: &[NetworkField]) -> TokenStream { quote! { - self.iter().map(|item| { - item.to_network_map().into() - }).collect() + let res: Vec<libquassel::primitive::VariantMap> = self.iter().map(|item| { item.to_network_map() }).collect::<crate::Result<Vec<libquassel::primitive::VariantMap>>>()?; + Ok(res.into_iter().map(|item| item.into()).collect()) } } diff --git a/derive/src/network/maplist.rs b/derive/src/network/maplist.rs index 47b3ff2..bf86c75 100644 --- a/derive/src/network/maplist.rs +++ b/derive/src/network/maplist.rs @@ -19,10 +19,10 @@ pub(crate) fn to(fields: &[NetworkField]) -> Vec<TokenStream> { let field_inner = match field.network { crate::network::NetworkRepr::List => quote! { - self.#field_name.to_network_list().unwrap().into() + self.#field_name.to_network_list()?.into() }, crate::network::NetworkRepr::Map => quote! { - self.#field_name.to_network_map().into() + self.#field_name.to_network_map()?.into() }, crate::network::NetworkRepr::None => quote! { self.#field_name.clone().into() @@ -73,10 +73,10 @@ 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().unwrap().into() + item.#field_name.to_network_list()?.into() }, crate::network::NetworkRepr::Map => quote! { - item.#field_name.to_network_map().into() + item.#field_name.to_network_map()?.into() }, crate::network::NetworkRepr::None => quote! { item.#field_name.clone().into() @@ -121,13 +121,13 @@ pub(crate) fn to_vec(_type_name: &Ident, fields: &[NetworkField]) -> TokenStream let mut map = libquassel::primitive::VariantMap::new(); - self.iter().for_each(|item| { + for item in self.iter() { #(#for_each_inner)* - }); + } #(#map_inserts)* - return map; + Ok(map) } } @@ -150,10 +150,10 @@ pub(crate) fn from(fields: &[NetworkField]) -> Vec<TokenStream> { 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).unwrap() + libquassel::message::NetworkList::from_network_list(&mut std::convert::TryInto::try_into(input.remove(0)).#unwrap)? }, super::NetworkRepr::Map => quote! { - libquassel::message::NetworkMap::from_network_map(&mut std::convert::TryInto::try_into(input.remove(0)).#unwrap) + libquassel::message::NetworkMap::from_network_map(&mut std::convert::TryInto::try_into(input.remove(0)).#unwrap)? }, super::NetworkRepr::None => quote! { std::convert::TryInto::try_into(input.remove(0)).#unwrap @@ -194,7 +194,7 @@ pub(crate) fn from_vec(type_name: &Ident, fields: &[NetworkField]) -> TokenStrea }; let inner = quote! { - #type_name::from_network_map(input) + #type_name::from_network_map(input)? }; quote! { @@ -205,6 +205,6 @@ pub(crate) fn from_vec(type_name: &Ident, fields: &[NetworkField]) -> TokenStrea res.push(#inner); } - return res; + Ok(res) } } diff --git a/derive/src/network/mod.rs b/derive/src/network/mod.rs index 1fd50bd..a4f6c72 100644 --- a/derive/src/network/mod.rs +++ b/derive/src/network/mod.rs @@ -114,19 +114,19 @@ pub fn network_map(input: proc_macro::TokenStream) -> proc_macro::TokenStream { impl libquassel::message::signalproxy::NetworkMap for #name { type Item = libquassel::primitive::VariantMap; - fn to_network_map(&self) -> libquassel::primitive::VariantMap { + fn to_network_map(&self) -> crate::Result<libquassel::primitive::VariantMap> { let mut res = libquassel::primitive::VariantMap::new(); #(#to_network_map)* - return res; + Ok(res) } - fn from_network_map(input: &mut libquassel::primitive::VariantMap) -> Self { + fn from_network_map(input: &mut libquassel::primitive::VariantMap) -> crate::Result<Self> { log::trace!("converting {} from network object: {:#?}", #name_str, input); - Self { + Ok(Self { #(#from_network_map)* - } + }) } } }; @@ -153,11 +153,11 @@ pub fn network_map(input: proc_macro::TokenStream) -> proc_macro::TokenStream { impl libquassel::message::signalproxy::NetworkMap for Vec<#name> { type Item = #network_map_vec_item; - fn to_network_map(&self) -> Self::Item { + fn to_network_map(&self) -> crate::Result<Self::Item> { #to_network_map_vec } - fn from_network_map(input: &mut Self::Item) -> Self { + fn from_network_map(input: &mut Self::Item) -> crate::Result<Self> { #from_network_map_vec } } |
