aboutsummaryrefslogtreecommitdiff
path: root/derive/src/network/map.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-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(),
}
}
})
onnetfile.lock.json?h=8-rework-sed&id=0046f6a70086f96b420e0282532f038a57dd9c68&follow=1'>update tanka dependenciesMax Audron-8/+8 2021-06-05fix init container nameMax Audron-1/+1 2021-06-05fix tanka dependency pathMax Audron-8/+8 2021-06-05switch to https url for tanka util libMax Audron-2/+2 2021-06-05bump version to 1.0.2Max Audron-2/+2 2021-06-05add tanka ci configurationMax Audron-1/+1 2021-06-05ready tanka deploy for CIMax Audron-32/+69 2021-06-05remove tanka vendoringMax Audron-27651/+0 2021-05-26Release 1.0.1Max Audron-3/+3 2021-05-26fix log breaking once buffer fullMax Audron-2/+33 the log_msg function was poping the newest message and replacing it with the newest message, it should be poping the oldest messages. 2021-05-16add deployment stuffMax Audron-6/+27786 2021-05-15add container buildMax Audron-2/+35