diff options
Diffstat (limited to '')
| -rw-r--r-- | derive/src/network/list.rs | 6 | ||||
| -rw-r--r-- | derive/src/network/map.rs | 4 | ||||
| -rw-r--r-- | derive/src/network/maplist.rs | 6 | ||||
| -rw-r--r-- | derive/src/network/mod.rs | 10 | ||||
| -rw-r--r-- | derive/src/setters/mod.rs | 6 |
5 files changed, 17 insertions, 15 deletions
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<TokenStream> { 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<TokenStream> { 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<TokenStream> { 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<TokenStream> { 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<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), + &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<TokenStream> { 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<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) + 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<libquassel::primitive::VariantList> { 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<Self> { log::trace!("converting {} from network object: {:#?}", #name_str, input); - Self { + Ok(Self { #(#from_network_list)* - } + }) } } }; diff --git a/derive/src/setters/mod.rs b/derive/src/setters/mod.rs index 79fb011..d3108eb 100644 --- a/derive/src/setters/mod.rs +++ b/derive/src/setters/mod.rs @@ -102,11 +102,13 @@ pub fn setters(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let fn_name = syn::Ident::new(&format!("set_{}", fn_ident), Span::call_site()); quote! { - pub fn #fn_name(&mut self, #var_name: #ty) { + pub fn #fn_name(&mut self, #var_name: #ty) -> crate::Result<()> { #[cfg(feature = "server")] - self.send_sync(#name, vec![#var_name.clone().into()]); + self.send_sync(#name, vec![#var_name.clone().into()])?; self.#ident = #var_name; + + Ok(()) } } }) |
