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.rs73
1 files changed, 59 insertions, 14 deletions
diff --git a/derive/src/network/map.rs b/derive/src/network/map.rs
index 60f96b5..506ccb3 100644
--- a/derive/src/network/map.rs
+++ b/derive/src/network/map.rs
@@ -17,8 +17,19 @@ pub(crate) fn to(fields: &Vec<NetworkField>) -> Vec<TokenStream> {
let field_variant_type = get_field_variant_type(&field);
let field_inner = if field.network {
- quote! {
- self.#field_name.to_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 {
quote! {
@@ -28,7 +39,7 @@ pub(crate) fn to(fields: &Vec<NetworkField>) -> Vec<TokenStream> {
quote! {
res.insert(#field_rename.to_string(),
- crate::primitive::Variant::#field_variant_type(#field_inner));
+ libquassel::primitive::Variant::#field_variant_type(#field_inner));
}
})
.collect()
@@ -50,9 +61,23 @@ pub(crate) fn from(fields: &Vec<NetworkField>) -> Vec<TokenStream> {
let field_type_colon = get_field_type_colon(field_type.clone());
if field.network {
- quote! {
- #field_name: #field_type_colon::from_network(
- &mut std::convert::TryInto::try_into(input.remove(#field_rename).unwrap()).unwrap()),
+ 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! {
@@ -63,16 +88,36 @@ pub(crate) fn from(fields: &Vec<NetworkField>) -> Vec<TokenStream> {
.collect()
}
-pub(crate) fn to_vec(_type_name: &Ident, _fields: &Vec<NetworkField>) -> TokenStream {
- quote! {
- self.iter().map(|item| {
- item.to_network().into()
- }).collect()
+pub(crate) fn to_vec(_type_name: &Ident, _fields: &Vec<NetworkField>, new: bool) -> TokenStream {
+ if new {
+ quote! {
+ self.iter().map(|item| {
+ item.to_network_map().into()
+ }).collect()
+ }
+ } else {
+ quote! {
+ self.iter().map(|item| {
+ item.to_network().into()
+ }).collect()
+ }
}
}
-pub(crate) fn from_vec(type_name: &Ident, _fields: &Vec<NetworkField>) -> TokenStream {
- quote! {
- input.iter().map(|item| #type_name::from_network(&mut std::convert::TryInto::try_into(item).unwrap())).collect()
+pub(crate) fn from_vec(type_name: &Ident, _fields: &Vec<NetworkField>, new: bool) -> TokenStream {
+ if new {
+ quote! {
+ input.iter().map(
+ |item| #type_name::from_network_map(
+ &mut std::convert::TryInto::try_into(item).unwrap()
+ )).collect()
+ }
+ } else {
+ quote! {
+ input.iter().map(
+ |item| #type_name::from_network(
+ &mut std::convert::TryInto::try_into(item).unwrap()
+ )).collect()
+ }
}
}
href='/libquassel.git/commit/src/message/signalproxy/objects/mod.rs?id=65d723f75c2770731ffe6d98c6e22a95f2caaf6c&follow=1'>add cert-managerMax Audron-0/+32 2021-07-21add BufferViewManager and BufferViewConfigMax Audron-0/+95 2021-07-21migrate BufferSyncer to use Network derive and add to central TypesMax Audron-143/+22 2021-07-21rewrite network derive to work more consistentlyMax Audron-78/+90 2021-07-21fix wrong capitalization for HighlightRuleListMax Audron-2/+2 2021-07-21implement the Network trait generically for all inner Variant TypesMax Audron-1/+66 2021-07-21change IRC MessageType to be a bitflag instead of enumMax Audron-54/+94 2021-07-21fix network objectMax Audron-18/+24 2021-07-21minor docs and cleanupMax Audron-4/+8 2021-04-05WIP: impl more signalproxy objectsMax Audron-1000/+1621 2021-03-09WIP: impl signalproxy typesMax Audron-253/+376 2021-01-21add to and from network deriveMax Audron-42/+2767 2021-01-21reorganize tests and add quassel featuresMax Audron-551/+850 2021-01-04add example program: quasselproxyclientMax Audron-0/+280 2021-01-04random stuffMax Audron-2/+9 2021-01-04add more signalproxy objectsMax Audron-40/+120 2021-01-04add message parsing feature flagsMax Audron-43/+96 2021-01-04fix parsing of datetime when value is -1Max Audron-1/+9 2021-01-02update dependenciesMax Audron-267/+27 2021-01-02rework handshakemessage parsingMax Audron-141/+278 2020-10-16updateMax Audron-1553/+294 2020-10-16update paperworkMax Audron-487/+391