Move from_raw_json_value to ruma-serde

… and remove unnecessary copies of it.
This commit is contained in:
Jonas Platte 2022-02-02 20:58:47 +01:00
parent c5550bdbc8
commit 39041286b9
No known key found for this signature in database
GPG Key ID: CC154DE0E30B7C67
9 changed files with 26 additions and 43 deletions

View File

@ -1,8 +1,7 @@
use ruma_serde::from_raw_json_value;
use serde::{de, Deserialize}; use serde::{de, Deserialize};
use serde_json::value::RawValue as RawJsonValue; use serde_json::value::RawValue as RawJsonValue;
use ruma_events::from_raw_json_value;
use super::LoginType; use super::LoginType;
/// Helper struct to determine the type from a `serde_json::value::RawValue` /// Helper struct to determine the type from a `serde_json::value::RawValue`

View File

@ -11,7 +11,7 @@ use ruma_api::{
}; };
use ruma_common::thirdparty::Medium; use ruma_common::thirdparty::Medium;
use ruma_identifiers::{ClientSecret, SessionId, TransactionId}; use ruma_identifiers::{ClientSecret, SessionId, TransactionId};
use ruma_serde::{JsonObject, Outgoing, StringEnum}; use ruma_serde::{from_raw_json_value, JsonObject, Outgoing, StringEnum};
use serde::{ use serde::{
de::{self, DeserializeOwned}, de::{self, DeserializeOwned},
Deserialize, Deserializer, Serialize, Deserialize, Deserializer, Serialize,
@ -307,12 +307,6 @@ impl<'de> Deserialize<'de> for IncomingAuthData {
where where
D: Deserializer<'de>, D: Deserializer<'de>,
{ {
fn from_raw_json_value<T: DeserializeOwned, E: de::Error>(
raw: &RawJsonValue,
) -> Result<T, E> {
serde_json::from_str(raw.get()).map_err(E::custom)
}
let json = Box::<RawJsonValue>::deserialize(deserializer)?; let json = Box::<RawJsonValue>::deserialize(deserializer)?;
#[derive(Deserialize)] #[derive(Deserialize)]

View File

@ -105,6 +105,7 @@ fn expand_deserialize_impl(
variants: &[EventEnumVariant], variants: &[EventEnumVariant],
ruma_events: &TokenStream, ruma_events: &TokenStream,
) -> TokenStream { ) -> TokenStream {
let ruma_serde = quote! { #ruma_events::exports::ruma_serde };
let serde = quote! { #ruma_events::exports::serde }; let serde = quote! { #ruma_events::exports::serde };
let serde_json = quote! { #ruma_events::exports::serde_json }; let serde_json = quote! { #ruma_events::exports::serde_json };
@ -127,7 +128,7 @@ fn expand_deserialize_impl(
let json = Box::<#serde_json::value::RawValue>::deserialize(deserializer)?; let json = Box::<#serde_json::value::RawValue>::deserialize(deserializer)?;
let #ruma_events::EventTypeDeHelper { ev_type, .. } = let #ruma_events::EventTypeDeHelper { ev_type, .. } =
#ruma_events::from_raw_json_value(&json)?; #ruma_serde::from_raw_json_value(&json)?;
match &*ev_type { match &*ev_type {
#( #(
@ -366,6 +367,7 @@ fn expand_possibly_redacted_enum(
var: EventKindVariation, var: EventKindVariation,
ruma_events: &TokenStream, ruma_events: &TokenStream,
) -> TokenStream { ) -> TokenStream {
let ruma_serde = quote! { #ruma_events::exports::ruma_serde };
let serde = quote! { #ruma_events::exports::serde }; let serde = quote! { #ruma_events::exports::serde };
let serde_json = quote! { #ruma_events::exports::serde_json }; let serde_json = quote! { #ruma_events::exports::serde_json };
@ -393,13 +395,13 @@ fn expand_possibly_redacted_enum(
{ {
let json = Box::<#serde_json::value::RawValue>::deserialize(deserializer)?; let json = Box::<#serde_json::value::RawValue>::deserialize(deserializer)?;
let #ruma_events::RedactionDeHelper { unsigned } = let #ruma_events::RedactionDeHelper { unsigned } =
#ruma_events::from_raw_json_value(&json)?; #ruma_serde::from_raw_json_value(&json)?;
Ok(match unsigned { Ok(match unsigned {
Some(unsigned) if unsigned.redacted_because.is_some() => { Some(unsigned) if unsigned.redacted_because.is_some() => {
Self::Redacted(#ruma_events::from_raw_json_value(&json)?) Self::Redacted(#ruma_serde::from_raw_json_value(&json)?)
} }
_ => Self::Regular(#ruma_events::from_raw_json_value(&json)?), _ => Self::Regular(#ruma_serde::from_raw_json_value(&json)?),
}) })
} }
} }

View File

@ -1,11 +1,12 @@
use ruma_common::MilliSecondsSinceUnixEpoch; use ruma_common::MilliSecondsSinceUnixEpoch;
use ruma_events_macros::{event_enum, EventEnumFromEvent}; use ruma_events_macros::{event_enum, EventEnumFromEvent};
use ruma_identifiers::{EventId, RoomId, RoomVersionId, UserId}; use ruma_identifiers::{EventId, RoomId, RoomVersionId, UserId};
use ruma_serde::from_raw_json_value;
use serde::{de, Deserialize, Serialize}; use serde::{de, Deserialize, Serialize};
use serde_json::value::RawValue as RawJsonValue; use serde_json::value::RawValue as RawJsonValue;
use crate::{ use crate::{
from_raw_json_value, key, key,
room::{encrypted, message, redaction::SyncRoomRedactionEvent}, room::{encrypted, message, redaction::SyncRoomRedactionEvent},
Redact, UnsignedDeHelper, Redact, UnsignedDeHelper,
}; };

View File

@ -119,10 +119,7 @@ use std::fmt::Debug;
use ruma_identifiers::{EventEncryptionAlgorithm, RoomVersionId}; use ruma_identifiers::{EventEncryptionAlgorithm, RoomVersionId};
use ruma_serde::Raw; use ruma_serde::Raw;
use serde::{ use serde::{de::IgnoredAny, Deserialize, Serialize, Serializer};
de::{self, IgnoredAny},
Deserialize, Serialize, Serializer,
};
use serde_json::value::RawValue as RawJsonValue; use serde_json::value::RawValue as RawJsonValue;
use self::room::redaction::SyncRoomRedactionEvent; use self::room::redaction::SyncRoomRedactionEvent;
@ -389,16 +386,6 @@ pub struct UnsignedDeHelper {
pub redacted_because: Option<IgnoredAny>, pub redacted_because: Option<IgnoredAny>,
} }
/// Helper function for `serde_json::value::RawValue` deserialization.
#[doc(hidden)]
pub fn from_raw_json_value<'a, T, E>(val: &'a RawJsonValue) -> Result<T, E>
where
T: Deserialize<'a>,
E: de::Error,
{
serde_json::from_str(val.get()).map_err(E::custom)
}
// Wrapper around `Box<str>` that cannot be used in a meaningful way outside of // Wrapper around `Box<str>` that cannot be used in a meaningful way outside of
// this crate. Used for string enums because their `_Custom` variant can't be // this crate. Used for string enums because their `_Custom` variant can't be
// truly private (only `#[doc(hidden)]`). // truly private (only `#[doc(hidden)]`).

View File

@ -5,8 +5,7 @@
use ruma_events_macros::EventContent; use ruma_events_macros::EventContent;
#[cfg(feature = "unstable-spec")] #[cfg(feature = "unstable-spec")]
use ruma_identifiers::RoomId; use ruma_identifiers::RoomId;
#[cfg(feature = "unstable-spec")] use ruma_serde::from_raw_json_value;
use serde::de::DeserializeOwned;
use serde::{ use serde::{
de::{Deserializer, Error}, de::{Deserializer, Error},
Deserialize, Serialize, Deserialize, Serialize,
@ -113,11 +112,6 @@ impl<'de> Deserialize<'de> for JoinRule {
where where
D: Deserializer<'de>, D: Deserializer<'de>,
{ {
#[cfg(feature = "unstable-spec")]
fn from_raw_json_value<T: DeserializeOwned, E: Error>(raw: &RawJsonValue) -> Result<T, E> {
serde_json::from_str(raw.get()).map_err(E::custom)
}
let json: Box<RawJsonValue> = Box::deserialize(deserializer)?; let json: Box<RawJsonValue> = Box::deserialize(deserializer)?;
#[derive(Deserialize)] #[derive(Deserialize)]
@ -215,10 +209,6 @@ impl<'de> Deserialize<'de> for AllowRule {
where where
D: Deserializer<'de>, D: Deserializer<'de>,
{ {
fn from_raw_json_value<T: DeserializeOwned, E: Error>(raw: &RawJsonValue) -> Result<T, E> {
serde_json::from_str(raw.get()).map_err(E::custom)
}
let json: Box<RawJsonValue> = Box::deserialize(deserializer)?; let json: Box<RawJsonValue> = Box::deserialize(deserializer)?;
// Extracts the `type` value. // Extracts the `type` value.

View File

@ -1,10 +1,10 @@
//! `Deserialize` implementation for RoomMessageEventContent and MessageType. //! `Deserialize` implementation for RoomMessageEventContent and MessageType.
use ruma_serde::from_raw_json_value;
use serde::{de, Deserialize}; use serde::{de, Deserialize};
use serde_json::value::RawValue as RawJsonValue; use serde_json::value::RawValue as RawJsonValue;
use super::{MessageType, Relation, RoomMessageEventContent}; use super::{MessageType, Relation, RoomMessageEventContent};
use crate::from_raw_json_value;
impl<'de> Deserialize<'de> for RoomMessageEventContent { impl<'de> Deserialize<'de> for RoomMessageEventContent {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>

View File

@ -6,9 +6,9 @@ use js_int::UInt;
use ruma_common::{ use ruma_common::{
encryption::DeviceKeys, presence::PresenceState, to_device::DeviceIdOrAllDevices, encryption::DeviceKeys, presence::PresenceState, to_device::DeviceIdOrAllDevices,
}; };
use ruma_events::{from_raw_json_value, receipt::Receipt, AnyToDeviceEventContent, EventType}; use ruma_events::{receipt::Receipt, AnyToDeviceEventContent, EventType};
use ruma_identifiers::{DeviceId, EventId, RoomId, TransactionId, UserId}; use ruma_identifiers::{DeviceId, EventId, RoomId, TransactionId, UserId};
use ruma_serde::Raw; use ruma_serde::{from_raw_json_value, Raw};
use serde::{de, Deserialize, Serialize}; use serde::{de, Deserialize, Serialize};
use serde_json::{value::RawValue as RawJsonValue, Value as JsonValue}; use serde_json::{value::RawValue as RawJsonValue, Value as JsonValue};

View File

@ -4,7 +4,8 @@
#![warn(missing_docs)] #![warn(missing_docs)]
use serde_json::Value as JsonValue; use serde::{de, Deserialize};
use serde_json::{value::RawValue as RawJsonValue, Value as JsonValue};
pub mod base64; pub mod base64;
mod buf; mod buf;
@ -61,6 +62,15 @@ pub fn is_true(b: &bool) -> bool {
*b *b
} }
/// Helper function for `serde_json::value::RawValue` deserialization.
pub fn from_raw_json_value<'a, T, E>(val: &'a RawJsonValue) -> Result<T, E>
where
T: Deserialize<'a>,
E: de::Error,
{
serde_json::from_str(val.get()).map_err(E::custom)
}
/// A type that can be sent to another party that understands the matrix protocol. /// A type that can be sent to another party that understands the matrix protocol.
/// ///
/// If any of the fields of `Self` don't implement serde's `Deserialize`, you can derive this trait /// If any of the fields of `Self` don't implement serde's `Deserialize`, you can derive this trait