From af6fea3d4e75b28c17d9c8a5e00d1d7bf55737a0 Mon Sep 17 00:00:00 2001
From: Jonas Platte <jplatte+git@posteo.de>
Date: Sat, 8 May 2021 02:13:01 +0200
Subject: [PATCH] Refactor some canonical JSON code

---
 src/pdu.rs          |  5 +++-
 src/ruma_wrapper.rs | 58 +++++++++++++++++++--------------------------
 2 files changed, 29 insertions(+), 34 deletions(-)

diff --git a/src/pdu.rs b/src/pdu.rs
index a593f0b52..84756bc2f 100644
--- a/src/pdu.rs
+++ b/src/pdu.rs
@@ -213,7 +213,10 @@ pub fn to_member_event(&self) -> Raw<StateEvent<MemberEventContent>> {
     pub fn convert_to_outgoing_federation_event(
         mut pdu_json: CanonicalJsonObject,
     ) -> Raw<ruma::events::pdu::Pdu> {
-        if let Some(CanonicalJsonValue::Object(unsigned)) = pdu_json.get_mut("unsigned") {
+        if let Some(unsigned) = pdu_json
+            .get_mut("unsigned")
+            .and_then(|val| val.as_object_mut())
+        {
             unsigned.remove("transaction_id");
         }
 
diff --git a/src/ruma_wrapper.rs b/src/ruma_wrapper.rs
index e4eda870f..9143999f0 100644
--- a/src/ruma_wrapper.rs
+++ b/src/ruma_wrapper.rs
@@ -271,41 +271,33 @@ async fn from_data(request: &'a Request<'_>, data: Data) -> data::Outcome<Self,
             http_request = http_request.header(header.name.as_str(), &*header.value);
         }
 
-        match &mut json_body {
-            Some(CanonicalJsonValue::Object(json_body)) => {
-                let user_id = sender_user.clone().unwrap_or_else(|| {
-                    UserId::parse_with_server_name("", db.globals.server_name())
-                        .expect("we know this is valid")
-                });
-
-                if let Some(initial_request) = json_body
-                    .get("auth")
-                    .and_then(|auth| auth.as_object())
-                    .and_then(|auth| auth.get("session"))
-                    .and_then(|session| session.as_str())
-                    .and_then(|session| {
-                        db.uiaa
-                            .get_uiaa_request(
-                                &user_id,
-                                &sender_device.clone().unwrap_or_else(|| "".into()),
-                                session,
-                            )
-                            .ok()
-                            .flatten()
-                    })
-                {
-                    match initial_request {
-                        CanonicalJsonValue::Object(initial_request) => {
-                            for (key, value) in initial_request.into_iter() {
-                                json_body.entry(key).or_insert(value);
-                            }
-                        }
-                        _ => {}
-                    }
+        if let Some(json_body) = json_body.as_mut().and_then(|val| val.as_object_mut()) {
+            let user_id = sender_user.clone().unwrap_or_else(|| {
+                UserId::parse_with_server_name("", db.globals.server_name())
+                    .expect("we know this is valid")
+            });
+
+            if let Some(CanonicalJsonValue::Object(initial_request)) = json_body
+                .get("auth")
+                .and_then(|auth| auth.as_object())
+                .and_then(|auth| auth.get("session"))
+                .and_then(|session| session.as_str())
+                .and_then(|session| {
+                    db.uiaa
+                        .get_uiaa_request(
+                            &user_id,
+                            &sender_device.clone().unwrap_or_else(|| "".into()),
+                            session,
+                        )
+                        .ok()
+                        .flatten()
+                })
+            {
+                for (key, value) in initial_request {
+                    json_body.entry(key).or_insert(value);
                 }
-                body = serde_json::to_vec(json_body).expect("value to bytes can't fail");
             }
-            _ => {}
+            body = serde_json::to_vec(json_body).expect("value to bytes can't fail");
         }
 
         let http_request = http_request.body(&*body).unwrap();
-- 
GitLab