From d78cd2ed15d6efc6c7cbac91fb1b1754b80e155a Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Tue, 16 Jun 2020 02:12:13 +0200 Subject: [PATCH] Fix deserializing event enums from serde_json::Value (or anything else that's not a JSON string) --- ruma-events/src/enums.rs | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/ruma-events/src/enums.rs b/ruma-events/src/enums.rs index 8f073907..333f8d65 100644 --- a/ruma-events/src/enums.rs +++ b/ruma-events/src/enums.rs @@ -182,23 +182,23 @@ impl<'de> de::Deserialize<'de> for AnyEvent { where D: de::Deserializer<'de>, { - let json = <&RawJsonValue>::deserialize(deserializer)?; - let EventDeHelper { ev_type } = from_raw_json_value(json)?; + let json = Box::::deserialize(deserializer)?; + let EventDeHelper { ev_type } = from_raw_json_value(&json)?; match ev_type.as_str() { - "m.room.redaction" => Ok(AnyEvent::Redaction(from_raw_json_value(json)?)), - "m.presence" => Ok(AnyEvent::Presence(from_raw_json_value(json)?)), + "m.room.redaction" => Ok(AnyEvent::Redaction(from_raw_json_value(&json)?)), + "m.presence" => Ok(AnyEvent::Presence(from_raw_json_value(&json)?)), ev_type if AnyBasicEventContent::is_compatible(ev_type) => { - Ok(AnyEvent::Basic(from_raw_json_value(json)?)) + Ok(AnyEvent::Basic(from_raw_json_value(&json)?)) } ev_type if AnyEphemeralRoomEventContent::is_compatible(ev_type) => { - Ok(AnyEvent::Ephemeral(from_raw_json_value(json)?)) + Ok(AnyEvent::Ephemeral(from_raw_json_value(&json)?)) } ev_type if AnyMessageEventContent::is_compatible(ev_type) => { - Ok(AnyEvent::Message(from_raw_json_value(json)?)) + Ok(AnyEvent::Message(from_raw_json_value(&json)?)) } ev_type if AnyStateEventContent::is_compatible(ev_type) => { - Ok(AnyEvent::State(from_raw_json_value(json)?)) + Ok(AnyEvent::State(from_raw_json_value(&json)?)) } _ => Err(D::Error::custom(format!("event type `{}` is not a valid event", ev_type))), } @@ -210,16 +210,16 @@ impl<'de> de::Deserialize<'de> for AnyRoomEvent { where D: de::Deserializer<'de>, { - let json = <&RawJsonValue>::deserialize(deserializer)?; - let EventDeHelper { ev_type } = from_raw_json_value(json)?; + let json = Box::::deserialize(deserializer)?; + let EventDeHelper { ev_type } = from_raw_json_value(&json)?; match ev_type.as_str() { - "m.room.redaction" => Ok(AnyRoomEvent::Redaction(from_raw_json_value(json)?)), + "m.room.redaction" => Ok(AnyRoomEvent::Redaction(from_raw_json_value(&json)?)), ev_type if AnyMessageEventContent::is_compatible(ev_type) => { - Ok(AnyRoomEvent::Message(from_raw_json_value(json)?)) + Ok(AnyRoomEvent::Message(from_raw_json_value(&json)?)) } ev_type if AnyStateEventContent::is_compatible(ev_type) => { - Ok(AnyRoomEvent::State(from_raw_json_value(json)?)) + Ok(AnyRoomEvent::State(from_raw_json_value(&json)?)) } _ => Err(D::Error::custom(format!("event type `{}` is not a valid event", ev_type))), } @@ -231,16 +231,16 @@ impl<'de> de::Deserialize<'de> for AnyRoomEventStub { where D: de::Deserializer<'de>, { - let json = <&RawJsonValue>::deserialize(deserializer)?; - let EventDeHelper { ev_type } = from_raw_json_value(json)?; + let json = Box::::deserialize(deserializer)?; + let EventDeHelper { ev_type } = from_raw_json_value(&json)?; match ev_type.as_str() { - "m.room.redaction" => Ok(AnyRoomEventStub::Redaction(from_raw_json_value(json)?)), + "m.room.redaction" => Ok(AnyRoomEventStub::Redaction(from_raw_json_value(&json)?)), ev_type if AnyMessageEventContent::is_compatible(ev_type) => { - Ok(AnyRoomEventStub::Message(from_raw_json_value(json)?)) + Ok(AnyRoomEventStub::Message(from_raw_json_value(&json)?)) } ev_type if AnyStateEventContent::is_compatible(ev_type) => { - Ok(AnyRoomEventStub::State(from_raw_json_value(json)?)) + Ok(AnyRoomEventStub::State(from_raw_json_value(&json)?)) } _ => Err(D::Error::custom(format!("event type `{}` is not a valid event", ev_type))), }