From 0890c3c37c64d3ad88ee12f7ad00644ec3bc0c29 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Sat, 2 Oct 2021 14:17:36 +0200 Subject: [PATCH] events: Skip serialization of all `None` event fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … not just prev_content. --- crates/ruma-events-macros/src/event.rs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/crates/ruma-events-macros/src/event.rs b/crates/ruma-events-macros/src/event.rs index 5da80ddd..1fbb31d2 100644 --- a/crates/ruma-events-macros/src/event.rs +++ b/crates/ruma-events-macros/src/event.rs @@ -76,12 +76,6 @@ fn expand_serialize_event( state.serialize_field("content", &self.content)?; } } - } else if name == "prev_content" { - quote! { - if let Some(content) = self.prev_content.as_ref() { - state.serialize_field("prev_content", content)?; - } - } } else if name == "unsigned" { quote! { if !self.unsigned.is_empty() { @@ -89,8 +83,20 @@ fn expand_serialize_event( } } } else { - quote! { - state.serialize_field(stringify!(#name), &self.#name)?; + let name_s = name.to_string(); + match &field.ty { + syn::Type::Path(syn::TypePath { path: syn::Path { segments, .. }, .. }) + if segments.last().unwrap().ident == "Option" => + { + quote! { + if let Some(content) = self.#name.as_ref() { + state.serialize_field(#name_s, content)?; + } + } + } + _ => quote! { + state.serialize_field(#name_s, &self.#name)?; + }, } } })