From f9e6caef873c8b0abe7debd9ee5fe518702bf4e5 Mon Sep 17 00:00:00 2001
From: strawberry <strawberry@puppygock.gay>
Date: Thu, 11 Apr 2024 18:15:22 -0400
Subject: [PATCH] simplify getting event content in build_and_append_pdu

Signed-off-by: strawberry <strawberry@puppygock.gay>
---
 src/service/rooms/timeline/mod.rs | 39 +++++++++----------------------
 1 file changed, 11 insertions(+), 28 deletions(-)

diff --git a/src/service/rooms/timeline/mod.rs b/src/service/rooms/timeline/mod.rs
index 2b0571c3d..d136a4f14 100644
--- a/src/service/rooms/timeline/mod.rs
+++ b/src/service/rooms/timeline/mod.rs
@@ -18,13 +18,13 @@
 			encrypted::Relation,
 			member::{MembershipState, RoomMemberEventContent},
 			power_levels::RoomPowerLevelsEventContent,
+			redaction::RoomRedactionEventContent,
 		},
 		GlobalAccountDataEventType, StateEventType, TimelineEventType,
 	},
 	push::{Action, Ruleset, Tweak},
 	serde::Base64,
-	state_res,
-	state_res::{Event, RoomVersion},
+	state_res::{self, Event, RoomVersion},
 	uint, user_id, CanonicalJsonObject, CanonicalJsonValue, EventId, OwnedEventId, OwnedRoomId, OwnedServerName,
 	RoomId, RoomVersionId, ServerName, UserId,
 };
@@ -314,12 +314,7 @@ pub async fn append_pdu(
 		if pdu.kind == TimelineEventType::RoomRedaction
 			&& services().rooms.state.get_room_version(&pdu.room_id)? == RoomVersionId::V11
 		{
-			#[derive(Deserialize)]
-			struct Redaction {
-				redacts: Option<OwnedEventId>,
-			}
-
-			let content = serde_json::from_str::<Redaction>(pdu.content.get())
+			let content = serde_json::from_str::<RoomRedactionEventContent>(pdu.content.get())
 				.map_err(|_| Error::bad_database("Invalid content in redaction pdu."))?;
 
 			if let Some(redact_id) = &content.redacts {
@@ -436,14 +431,11 @@ struct Redaction {
 						}
 					},
 					RoomVersionId::V11 => {
-						#[derive(Deserialize)]
-						struct Redaction {
-							redacts: Option<OwnedEventId>,
-						}
-						let content = serde_json::from_str::<Redaction>(pdu.content.get()).map_err(|e| {
-							warn!("Invalid content in redaction pdu: {e}");
-							Error::bad_database("Invalid content in redaction pdu.")
-						})?;
+						let content =
+							serde_json::from_str::<RoomRedactionEventContent>(pdu.content.get()).map_err(|e| {
+								warn!("Invalid content in redaction pdu: {e}");
+								Error::bad_database("Invalid content in redaction pdu.")
+							})?;
 						if let Some(redact_id) = &content.redacts {
 							self.redact_pdu(redact_id, pdu)?;
 						}
@@ -664,12 +656,8 @@ pub fn create_hash_and_sign_event(
 			.get_room_version(room_id)
 			.or_else(|_| {
 				if event_type == TimelineEventType::RoomCreate {
-					#[derive(Deserialize)]
-					struct RoomCreate {
-						room_version: RoomVersionId,
-					}
-					let content =
-						serde_json::from_str::<RoomCreate>(content.get()).expect("Invalid content in RoomCreate pdu.");
+					let content = serde_json::from_str::<RoomCreateEventContent>(content.get())
+						.expect("Invalid content in RoomCreate pdu.");
 					Ok(content.room_version)
 				} else {
 					Err(Error::InconsistentRoomState(
@@ -841,18 +829,13 @@ pub async fn build_and_append_pdu(
 						));
 					},
 					TimelineEventType::RoomMember => {
-						#[derive(Deserialize)]
-						struct ExtractMembership {
-							membership: MembershipState,
-						}
-
 						let target = pdu
 							.state_key()
 							.filter(|v| v.starts_with('@'))
 							.unwrap_or(sender.as_str());
 						let server_name = services().globals.server_name();
 						let server_user = format!("@conduit:{server_name}");
-						let content = serde_json::from_str::<ExtractMembership>(pdu.content.get())
+						let content = serde_json::from_str::<RoomMemberEventContent>(pdu.content.get())
 							.map_err(|_| Error::bad_database("Invalid content in pdu."))?;
 
 						if content.membership == MembershipState::Leave {
-- 
GitLab