aboutsummaryrefslogtreecommitdiff
path: root/derive/src/network/map.rs
diff options
context:
space:
mode:
Diffstat (limited to 'derive/src/network/map.rs')
-rw-r--r--derive/src/network/map.rs115
1 files changed, 63 insertions, 52 deletions
diff --git a/derive/src/network/map.rs b/derive/src/network/map.rs
index 506ccb3..5402f5a 100644
--- a/derive/src/network/map.rs
+++ b/derive/src/network/map.rs
@@ -7,39 +7,43 @@ pub(crate) fn to(fields: &Vec<NetworkField>) -> Vec<TokenStream> {
fields
.iter()
.map(|field| {
- let field_rename = match &field.rename {
- Some(name) => name.clone(),
- None => format!("{}", field.ident.as_ref().unwrap()).into(),
- };
+ if !field.skip {
+ let field_rename = match &field.rename {
+ Some(name) => name.clone(),
+ None => format!("{}", field.ident.as_ref().unwrap()).into(),
+ };
- let field_name = field.ident.as_ref().unwrap();
- let _field_type = get_field_type(&field);
- let field_variant_type = get_field_variant_type(&field);
+ let field_name = field.ident.as_ref().unwrap();
+ let _field_type = get_field_type(&field);
+ let field_variant_type = get_field_variant_type(&field);
- let field_inner = if field.network {
- if field.map {
- quote! {
- self.#field_name.to_network_map()
+ let field_inner = if field.network {
+ if field.map {
+ quote! {
+ self.#field_name.to_network_map()
+ }
+ } else {
+ match field.variant.as_ref().map_or("", |m| m.as_str()) {
+ "VariantMap" => quote! {
+ self.#field_name.to_network_map()
+ },
+ &_ => quote! {
+ self.#field_name.to_network()
+ },
+ }
}
} else {
- match field.variant.as_ref().map_or("", |m| m.as_str()) {
- "VariantMap" => quote! {
- self.#field_name.to_network_map()
- },
- &_ => quote! {
- self.#field_name.to_network()
- },
+ quote! {
+ self.#field_name.clone()
}
- }
- } else {
+ };
+
quote! {
- self.#field_name.clone()
+ res.insert(#field_rename.to_string(),
+ libquassel::primitive::Variant::#field_variant_type(#field_inner));
}
- };
-
- quote! {
- res.insert(#field_rename.to_string(),
- libquassel::primitive::Variant::#field_variant_type(#field_inner));
+ } else {
+ quote! {}
}
})
.collect()
@@ -49,39 +53,46 @@ pub(crate) fn from(fields: &Vec<NetworkField>) -> Vec<TokenStream> {
fields
.iter()
.map(|field| {
- let field_rename = match &field.rename {
- Some(name) => name.clone(),
- None => format!("{}", field.ident.as_ref().unwrap()).into(),
- };
-
let field_name = field.ident.as_ref().unwrap();
- let field_type = get_field_type(&field);
- let _field_variant_type = get_field_variant_type(&field);
- let field_type_colon = get_field_type_colon(field_type.clone());
+ if field.default {
+ quote! {
+ #field_name: Default::default(),
+ }
+ } else {
+ let field_rename = match &field.rename {
+ Some(name) => name.clone(),
+ None => format!("{}", field.ident.as_ref().unwrap()).into(),
+ };
+
+ let field_type = get_field_type(&field);
+ let _field_variant_type = get_field_variant_type(&field);
- if field.network {
- if field.map {
- quote! {
- #field_name: #field_type_colon::from_network_map(
- &mut std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).unwrap()),
- }
- } else {
- match field.variant.as_ref().map_or("", |m| m.as_str()) {
- "VariantMap" => quote! {
- #field_name: #field_type_colon::from_network_map(
- &mut std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).unwrap()),
- },
+ let field_type_colon = get_field_type_colon(field_type.clone());
- &_ => quote! {
- #field_name: #field_type_colon::from_network(
+ if field.network {
+ if field.map {
+ quote! {
+ #field_name: #field_type_colon::from_network_map(
&mut std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).unwrap()),
}
+ } else {
+ match field.variant.as_ref().map_or("", |m| m.as_str()) {
+ "VariantMap" => quote! {
+ #field_name: #field_type_colon::from_network_map(
+ &mut std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).unwrap()),
+ },
+
+ &_ => quote! {
+ #field_name: #field_type_colon::from_network(
+ &mut std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).unwrap()),
+ }
+ }
+ }
+ } else {
+ quote! {
+ #field_name: std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).unwrap(),
}
- }
- } else {
- quote! {
- #field_name: std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).unwrap(),
}
}
})