aboutsummaryrefslogtreecommitdiff
path: root/derive/src/network/list.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2021-07-21 18:31:15 +0200
committerMax Audron <audron@cocaine.farm>2021-07-21 18:31:15 +0200
commite25f93c75a7f096f5f5f02aaf4238293071a7a2e (patch)
tree3bcc0160365c9fbaedcc59312f64cae8153a89de /derive/src/network/list.rs
parentfix wrong capitalization for HighlightRuleList (diff)
rewrite network derive to work more consistently
this mainly ensures that the network and override_type / variant options work across the board
Diffstat (limited to 'derive/src/network/list.rs')
-rw-r--r--derive/src/network/list.rs25
1 files changed, 8 insertions, 17 deletions
diff --git a/derive/src/network/list.rs b/derive/src/network/list.rs
index 75aecd0..8b1556e 100644
--- a/derive/src/network/list.rs
+++ b/derive/src/network/list.rs
@@ -1,7 +1,7 @@
use proc_macro2::TokenStream;
use quote::quote;
-use super::{gen_type, get_field_type, get_field_type_colon, get_field_variant_type, NetworkField};
+use super::{get_field_type, get_field_type_colon, get_field_variant_type, NetworkField};
pub(crate) fn to(fields: &Vec<NetworkField>) -> Vec<TokenStream> {
fields
@@ -13,7 +13,7 @@ pub(crate) fn to(fields: &Vec<NetworkField>) -> Vec<TokenStream> {
};
let field_name = field.ident.as_ref().unwrap();
- let field_type = get_field_type(&field);
+ let field_type = get_field_variant_type(&field);
let field_inner = if field.network {
quote! { self.#field_name.to_network() }
@@ -21,18 +21,9 @@ pub(crate) fn to(fields: &Vec<NetworkField>) -> Vec<TokenStream> {
quote! { self.#field_name.clone() }
};
- match &field.variant {
- Some(variant_type) => {
- let variant_type = gen_type(variant_type.as_str());
- quote! {
- res.push(crate::primitive::Variant::ByteArray(#field_rename.to_string()));
- res.push(crate::primitive::Variant::#variant_type(#field_inner));
- }
- }
- None => quote! {
- res.push(crate::primitive::Variant::ByteArray(#field_rename.to_string()));
- res.push(crate::primitive::Variant::#field_type(#field_inner));
- },
+ quote! {
+ res.push(crate::primitive::Variant::ByteArray(#field_rename.to_string()));
+ res.push(crate::primitive::Variant::#field_type(#field_inner));
}
})
.collect()
@@ -57,10 +48,10 @@ pub(crate) fn from(fields: &Vec<NetworkField>) -> Vec<TokenStream> {
let extract_inner = quote! {
let mut i = input.iter();
i.position(|x| *x == crate::primitive::Variant::ByteArray(String::from(#field_rename)))
- .unwrap();
+ .expect(format!("failed to get field {}", #field_rename).as_str());
- match i.next().unwrap() {
- crate::primitive::Variant::#field_variant_type(input) => input.clone(),
+ match i.next().expect("failed to get next field") {
+ crate::primitive::Variant::#field_variant_type(var) => var.clone(),
_ => panic!("network::list::from: wrong variant type"),
}
};