events: Use CanBeEmpty trait for skipping unsigned serialization
This commit is contained in:
parent
24d0b2e2bb
commit
674137c41d
@ -460,8 +460,8 @@ mod tests {
|
|||||||
|
|
||||||
use super::{MembershipState, RoomMemberEventContent};
|
use super::{MembershipState, RoomMemberEventContent};
|
||||||
use crate::{
|
use crate::{
|
||||||
events::OriginalStateEvent, mxc_uri, server_name, server_signing_key_id, user_id,
|
events::OriginalStateEvent, mxc_uri, serde::CanBeEmpty, server_name, server_signing_key_id,
|
||||||
MilliSecondsSinceUnixEpoch,
|
user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -3,7 +3,10 @@ use serde::{Deserialize, Serialize};
|
|||||||
use serde_json::{from_str as from_json_str, value::RawValue as RawJsonValue};
|
use serde_json::{from_str as from_json_str, value::RawValue as RawJsonValue};
|
||||||
|
|
||||||
use super::{relation::Relations, room::redaction::SyncRoomRedactionEvent, StateEventContent};
|
use super::{relation::Relations, room::redaction::SyncRoomRedactionEvent, StateEventContent};
|
||||||
use crate::{serde::Raw, OwnedTransactionId};
|
use crate::{
|
||||||
|
serde::{CanBeEmpty, Raw},
|
||||||
|
OwnedTransactionId,
|
||||||
|
};
|
||||||
|
|
||||||
/// Extra information about a message event that is not incorporated into the event's hash.
|
/// Extra information about a message event that is not incorporated into the event's hash.
|
||||||
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
||||||
@ -34,13 +37,15 @@ impl MessageLikeUnsigned {
|
|||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self::default()
|
Self::default()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl CanBeEmpty for MessageLikeUnsigned {
|
||||||
/// Whether this unsigned data is empty (all fields are `None`).
|
/// Whether this unsigned data is empty (all fields are `None`).
|
||||||
///
|
///
|
||||||
/// This method is used to determine whether to skip serializing the `unsigned` field in room
|
/// This method is used to determine whether to skip serializing the `unsigned` field in room
|
||||||
/// events. Do not use it to determine whether an incoming `unsigned` field was present - it
|
/// events. Do not use it to determine whether an incoming `unsigned` field was present - it
|
||||||
/// could still have been present but contained none of the known fields.
|
/// could still have been present but contained none of the known fields.
|
||||||
pub fn is_empty(&self) -> bool {
|
fn is_empty(&self) -> bool {
|
||||||
self.age.is_none() && self.transaction_id.is_none() && self.relations.is_none()
|
self.age.is_none() && self.transaction_id.is_none() && self.relations.is_none()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -78,13 +83,15 @@ impl<C: StateEventContent> StateUnsigned<C> {
|
|||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self { age: None, transaction_id: None, prev_content: None, relations: None }
|
Self { age: None, transaction_id: None, prev_content: None, relations: None }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<C: StateEventContent> CanBeEmpty for StateUnsigned<C> {
|
||||||
/// Whether this unsigned data is empty (all fields are `None`).
|
/// Whether this unsigned data is empty (all fields are `None`).
|
||||||
///
|
///
|
||||||
/// This method is used to determine whether to skip serializing the `unsigned` field in room
|
/// This method is used to determine whether to skip serializing the `unsigned` field in room
|
||||||
/// events. Do not use it to determine whether an incoming `unsigned` field was present - it
|
/// events. Do not use it to determine whether an incoming `unsigned` field was present - it
|
||||||
/// could still have been present but contained none of the known fields.
|
/// could still have been present but contained none of the known fields.
|
||||||
pub fn is_empty(&self) -> bool {
|
fn is_empty(&self) -> bool {
|
||||||
self.age.is_none()
|
self.age.is_none()
|
||||||
&& self.transaction_id.is_none()
|
&& self.transaction_id.is_none()
|
||||||
&& self.prev_content.is_none()
|
&& self.prev_content.is_none()
|
||||||
@ -160,13 +167,15 @@ impl RedactedUnsigned {
|
|||||||
pub fn new_because(redacted_because: Box<SyncRoomRedactionEvent>) -> Self {
|
pub fn new_because(redacted_because: Box<SyncRoomRedactionEvent>) -> Self {
|
||||||
Self { redacted_because: Some(redacted_because) }
|
Self { redacted_because: Some(redacted_because) }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl CanBeEmpty for RedactedUnsigned {
|
||||||
/// Whether this unsigned data is empty (`redacted_because` is `None`).
|
/// Whether this unsigned data is empty (`redacted_because` is `None`).
|
||||||
///
|
///
|
||||||
/// This method is used to determine whether to skip serializing the `unsigned` field in
|
/// This method is used to determine whether to skip serializing the `unsigned` field in
|
||||||
/// redacted room events. Do not use it to determine whether an incoming `unsigned` field
|
/// redacted room events. Do not use it to determine whether an incoming `unsigned` field
|
||||||
/// was present - it could still have been present but contained none of the known fields.
|
/// was present - it could still have been present but contained none of the known fields.
|
||||||
pub fn is_empty(&self) -> bool {
|
fn is_empty(&self) -> bool {
|
||||||
self.redacted_because.is_none()
|
self.redacted_because.is_none()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ use ruma_common::{
|
|||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id,
|
mxc_uri, room_id,
|
||||||
serde::Base64,
|
serde::{Base64, CanBeEmpty},
|
||||||
user_id, MilliSecondsSinceUnixEpoch,
|
user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||||
|
@ -2,6 +2,7 @@ use assert_matches::assert_matches;
|
|||||||
use js_int::uint;
|
use js_int::uint;
|
||||||
use ruma_common::{
|
use ruma_common::{
|
||||||
events::{AnyMessageLikeEvent, MessageLikeEvent},
|
events::{AnyMessageLikeEvent, MessageLikeEvent},
|
||||||
|
serde::CanBeEmpty,
|
||||||
MilliSecondsSinceUnixEpoch, VoipVersionId,
|
MilliSecondsSinceUnixEpoch, VoipVersionId,
|
||||||
};
|
};
|
||||||
use serde_json::{from_value as from_json_value, json};
|
use serde_json::{from_value as from_json_value, json};
|
||||||
|
@ -17,7 +17,7 @@ use ruma_common::{
|
|||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id,
|
mxc_uri, room_id,
|
||||||
serde::Base64,
|
serde::{Base64, CanBeEmpty},
|
||||||
user_id, MilliSecondsSinceUnixEpoch,
|
user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||||
|
@ -21,7 +21,7 @@ use ruma_common::{
|
|||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id,
|
mxc_uri, room_id,
|
||||||
serde::Base64,
|
serde::{Base64, CanBeEmpty},
|
||||||
user_id, MilliSecondsSinceUnixEpoch,
|
user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||||
|
@ -13,7 +13,9 @@ use ruma_common::{
|
|||||||
},
|
},
|
||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
room_id, user_id, MilliSecondsSinceUnixEpoch,
|
room_id,
|
||||||
|
serde::CanBeEmpty,
|
||||||
|
user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||||
|
|
||||||
|
@ -14,7 +14,9 @@ use ruma_common::{
|
|||||||
},
|
},
|
||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
room_id, user_id, MilliSecondsSinceUnixEpoch,
|
room_id,
|
||||||
|
serde::CanBeEmpty,
|
||||||
|
user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ use ruma_common::{
|
|||||||
MessageLikeEventType, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
MessageLikeEventType, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id,
|
mxc_uri, room_id,
|
||||||
serde::Raw,
|
serde::{CanBeEmpty, Raw},
|
||||||
user_id, MilliSecondsSinceUnixEpoch, VoipVersionId,
|
user_id, MilliSecondsSinceUnixEpoch, VoipVersionId,
|
||||||
};
|
};
|
||||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||||
|
@ -8,7 +8,9 @@ use ruma_common::{
|
|||||||
},
|
},
|
||||||
AnyMessageLikeEvent, MessageLikeUnsigned,
|
AnyMessageLikeEvent, MessageLikeUnsigned,
|
||||||
},
|
},
|
||||||
room_id, user_id, MilliSecondsSinceUnixEpoch,
|
room_id,
|
||||||
|
serde::CanBeEmpty,
|
||||||
|
user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
use serde_json::{
|
use serde_json::{
|
||||||
from_value as from_json_value, json, to_value as to_json_value, Value as JsonValue,
|
from_value as from_json_value, json, to_value as to_json_value, Value as JsonValue,
|
||||||
|
@ -9,7 +9,7 @@ use ruma_common::{
|
|||||||
StateUnsigned, SyncStateEvent,
|
StateUnsigned, SyncStateEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_alias_id, room_id,
|
mxc_uri, room_alias_id, room_id,
|
||||||
serde::Raw,
|
serde::{CanBeEmpty, Raw},
|
||||||
server_name, user_id, MilliSecondsSinceUnixEpoch,
|
server_name, user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
use serde_json::{
|
use serde_json::{
|
||||||
|
@ -21,7 +21,7 @@ use ruma_common::{
|
|||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id,
|
mxc_uri, room_id,
|
||||||
serde::Base64,
|
serde::{Base64, CanBeEmpty},
|
||||||
user_id, MilliSecondsSinceUnixEpoch,
|
user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||||
|
@ -19,7 +19,9 @@ use ruma_common::{
|
|||||||
voice::{VoiceContent, VoiceEventContent},
|
voice::{VoiceContent, VoiceEventContent},
|
||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id, user_id, MilliSecondsSinceUnixEpoch,
|
mxc_uri, room_id,
|
||||||
|
serde::CanBeEmpty,
|
||||||
|
user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ fn expand_serialize_event(
|
|||||||
}
|
}
|
||||||
} else if name == "unsigned" {
|
} else if name == "unsigned" {
|
||||||
quote! {
|
quote! {
|
||||||
if !self.unsigned.is_empty() {
|
if !#ruma_common::serde::is_empty(&self.unsigned) {
|
||||||
state.serialize_field("unsigned", &self.unsigned)?;
|
state.serialize_field("unsigned", &self.unsigned)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user