diff --git a/ruma-events-macros/src/gen.rs b/ruma-events-macros/src/gen.rs index 79cbe6c5..d7bacc31 100644 --- a/ruma-events-macros/src/gen.rs +++ b/ruma-events-macros/src/gen.rs @@ -246,14 +246,6 @@ impl ToTokens for RumaEvent { }) .collect(); - let set_up_struct_serializer = quote! { - let mut len = #base_field_count; - - #(#increment_struct_len_statements)* - - let mut state = serializer.serialize_struct(#name_str, len)?; - }; - let impl_room_event = match self.kind { EventKind::RoomEvent | EventKind::StateEvent => { quote! { @@ -368,16 +360,20 @@ impl ToTokens for RumaEvent { #impl_event_result_compatible_for_content - use serde::ser::SerializeStruct as _; - impl serde::Serialize for #name { fn serialize(&self, serializer: S) -> Result where S: serde::Serializer { + use serde::ser::SerializeStruct as _; + #import_event_in_serialize_impl - #set_up_struct_serializer + let mut len = #base_field_count; + + #(#increment_struct_len_statements)* + + let mut state = serializer.serialize_struct(#name_str, len)?; #(#serialize_field_calls)* #manually_serialize_type_field diff --git a/src/push_rules.rs b/src/push_rules.rs index 0ad7f6cd..10388662 100644 --- a/src/push_rules.rs +++ b/src/push_rules.rs @@ -8,6 +8,7 @@ use std::{ use ruma_events_macros::ruma_event; use serde::{ de::{Error, Visitor}, + ser::SerializeStruct as _, Deserialize, Deserializer, Serialize, Serializer, }; use serde_json::{from_value, Value};