Optimize formatted event serializations.
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
20
Cargo.lock
generated
20
Cargo.lock
generated
@@ -3659,7 +3659,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "ruma"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=4a3dd12e76c80eb60ba5f9324435c8a749cff303#4a3dd12e76c80eb60ba5f9324435c8a749cff303"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2#f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2"
|
||||
dependencies = [
|
||||
"assign",
|
||||
"js_int",
|
||||
@@ -3678,7 +3678,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "ruma-appservice-api"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=4a3dd12e76c80eb60ba5f9324435c8a749cff303#4a3dd12e76c80eb60ba5f9324435c8a749cff303"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2#f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2"
|
||||
dependencies = [
|
||||
"js_int",
|
||||
"ruma-common",
|
||||
@@ -3690,7 +3690,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "ruma-client-api"
|
||||
version = "0.21.0"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=4a3dd12e76c80eb60ba5f9324435c8a749cff303#4a3dd12e76c80eb60ba5f9324435c8a749cff303"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2#f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2"
|
||||
dependencies = [
|
||||
"as_variant",
|
||||
"assign",
|
||||
@@ -3715,7 +3715,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "ruma-common"
|
||||
version = "0.16.0"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=4a3dd12e76c80eb60ba5f9324435c8a749cff303#4a3dd12e76c80eb60ba5f9324435c8a749cff303"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2#f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2"
|
||||
dependencies = [
|
||||
"as_variant",
|
||||
"base64",
|
||||
@@ -3749,7 +3749,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "ruma-events"
|
||||
version = "0.31.0"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=4a3dd12e76c80eb60ba5f9324435c8a749cff303#4a3dd12e76c80eb60ba5f9324435c8a749cff303"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2#f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2"
|
||||
dependencies = [
|
||||
"as_variant",
|
||||
"indexmap",
|
||||
@@ -3776,7 +3776,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "ruma-federation-api"
|
||||
version = "0.12.0"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=4a3dd12e76c80eb60ba5f9324435c8a749cff303#4a3dd12e76c80eb60ba5f9324435c8a749cff303"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2#f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"headers",
|
||||
@@ -3799,7 +3799,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "ruma-identifiers-validation"
|
||||
version = "0.11.0"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=4a3dd12e76c80eb60ba5f9324435c8a749cff303#4a3dd12e76c80eb60ba5f9324435c8a749cff303"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2#f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2"
|
||||
dependencies = [
|
||||
"js_int",
|
||||
"thiserror 2.0.17",
|
||||
@@ -3808,7 +3808,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "ruma-macros"
|
||||
version = "0.16.0"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=4a3dd12e76c80eb60ba5f9324435c8a749cff303#4a3dd12e76c80eb60ba5f9324435c8a749cff303"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2#f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"proc-macro-crate",
|
||||
@@ -3823,7 +3823,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "ruma-push-gateway-api"
|
||||
version = "0.12.0"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=4a3dd12e76c80eb60ba5f9324435c8a749cff303#4a3dd12e76c80eb60ba5f9324435c8a749cff303"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2#f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2"
|
||||
dependencies = [
|
||||
"js_int",
|
||||
"ruma-common",
|
||||
@@ -3835,7 +3835,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "ruma-signatures"
|
||||
version = "0.18.0"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=4a3dd12e76c80eb60ba5f9324435c8a749cff303#4a3dd12e76c80eb60ba5f9324435c8a749cff303"
|
||||
source = "git+https://github.com/matrix-construct/ruma?rev=f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2#f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"ed25519-dalek",
|
||||
|
||||
@@ -320,7 +320,7 @@ default-features = false
|
||||
|
||||
[workspace.dependencies.ruma]
|
||||
git = "https://github.com/matrix-construct/ruma"
|
||||
rev = "4a3dd12e76c80eb60ba5f9324435c8a749cff303"
|
||||
rev = "f8aa292ce48f28ee6c82b29a811d26c6ccb5aad2"
|
||||
features = [
|
||||
"__compat",
|
||||
"appservice-api-c",
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use ruma::{
|
||||
CanonicalJsonMemberOptional as JsonMember, CanonicalJsonMembersOptional as JsonMembers,
|
||||
events::{
|
||||
AnyMessageLikeEvent, AnyStateEvent, AnyStrippedStateEvent, AnySyncMessageLikeEvent,
|
||||
AnySyncStateEvent, AnySyncTimelineEvent, AnyTimelineEvent, StateEvent,
|
||||
@@ -6,7 +7,7 @@ use ruma::{
|
||||
},
|
||||
serde::Raw,
|
||||
};
|
||||
use serde_json::json;
|
||||
use serde_json::value::to_raw_value;
|
||||
|
||||
use super::{Event, redact};
|
||||
|
||||
@@ -22,25 +23,20 @@ impl<'a, E: Event> From<Ref<'a, E>> for Raw<AnySyncTimelineEvent> {
|
||||
fn from(event: Ref<'a, E>) -> Self {
|
||||
let event = event.0;
|
||||
let (redacts, content) = redact::copy(event);
|
||||
let mut json = json!({
|
||||
"content": content,
|
||||
"event_id": event.event_id(),
|
||||
"origin_server_ts": event.origin_server_ts(),
|
||||
"sender": event.sender(),
|
||||
"type": event.event_type(),
|
||||
});
|
||||
let members: [JsonMember<_>; _] = [
|
||||
("content", Some(content.into())),
|
||||
("event_id", Some(event.event_id().as_str().into())),
|
||||
("origin_server_ts", Some(event.origin_server_ts().get().into())),
|
||||
("redacts", redacts.map(|e| e.as_str().into())),
|
||||
("sender", Some(event.sender().as_str().into())),
|
||||
("state_key", event.state_key().map(Into::into)),
|
||||
("type", Some(event.event_type().to_string().into())),
|
||||
("unsigned", event.unsigned().map(Into::into)),
|
||||
];
|
||||
|
||||
if let Some(redacts) = redacts {
|
||||
json["redacts"] = json!(redacts);
|
||||
}
|
||||
if let Some(state_key) = event.state_key() {
|
||||
json["state_key"] = json!(state_key);
|
||||
}
|
||||
if let Some(unsigned) = event.unsigned() {
|
||||
json["unsigned"] = json!(unsigned);
|
||||
}
|
||||
|
||||
serde_json::from_value(json).expect("Failed to serialize Event value")
|
||||
to_raw_value(&JsonMembers(&members))
|
||||
.map(Self::from_json)
|
||||
.expect("Failed to serialize Event value")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,26 +48,21 @@ impl<'a, E: Event> From<Ref<'a, E>> for Raw<AnyTimelineEvent> {
|
||||
fn from(event: Ref<'a, E>) -> Self {
|
||||
let event = event.0;
|
||||
let (redacts, content) = redact::copy(event);
|
||||
let mut json = json!({
|
||||
"content": content,
|
||||
"event_id": event.event_id(),
|
||||
"origin_server_ts": event.origin_server_ts(),
|
||||
"room_id": event.room_id(),
|
||||
"sender": event.sender(),
|
||||
"type": event.kind(),
|
||||
});
|
||||
let members: [JsonMember<_>; _] = [
|
||||
("content", Some(content.into())),
|
||||
("event_id", Some(event.event_id().as_str().into())),
|
||||
("origin_server_ts", Some(event.origin_server_ts().get().into())),
|
||||
("redacts", redacts.map(|e| e.as_str().into())),
|
||||
("room_id", Some(event.room_id().as_str().into())),
|
||||
("sender", Some(event.sender().as_str().into())),
|
||||
("state_key", event.state_key().map(Into::into)),
|
||||
("type", Some(event.event_type().to_string().into())),
|
||||
("unsigned", event.unsigned().map(Into::into)),
|
||||
];
|
||||
|
||||
if let Some(redacts) = redacts {
|
||||
json["redacts"] = json!(redacts);
|
||||
}
|
||||
if let Some(state_key) = event.state_key() {
|
||||
json["state_key"] = json!(state_key);
|
||||
}
|
||||
if let Some(unsigned) = event.unsigned() {
|
||||
json["unsigned"] = json!(unsigned);
|
||||
}
|
||||
|
||||
serde_json::from_value(json).expect("Failed to serialize Event value")
|
||||
to_raw_value(&JsonMembers(&members))
|
||||
.map(Self::from_json)
|
||||
.expect("Failed to serialize Event value")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,26 +74,21 @@ impl<'a, E: Event> From<Ref<'a, E>> for Raw<AnyMessageLikeEvent> {
|
||||
fn from(event: Ref<'a, E>) -> Self {
|
||||
let event = event.0;
|
||||
let (redacts, content) = redact::copy(event);
|
||||
let mut json = json!({
|
||||
"content": content,
|
||||
"event_id": event.event_id(),
|
||||
"origin_server_ts": event.origin_server_ts(),
|
||||
"room_id": event.room_id(),
|
||||
"sender": event.sender(),
|
||||
"type": event.kind(),
|
||||
});
|
||||
let members: [JsonMember<_>; _] = [
|
||||
("content", Some(content.into())),
|
||||
("event_id", Some(event.event_id().as_str().into())),
|
||||
("origin_server_ts", Some(event.origin_server_ts().get().into())),
|
||||
("redacts", redacts.map(|e| e.as_str().into())),
|
||||
("room_id", Some(event.room_id().as_str().into())),
|
||||
("sender", Some(event.sender().as_str().into())),
|
||||
("state_key", event.state_key().map(Into::into)),
|
||||
("type", Some(event.event_type().to_string().into())),
|
||||
("unsigned", event.unsigned().map(Into::into)),
|
||||
];
|
||||
|
||||
if let Some(redacts) = &redacts {
|
||||
json["redacts"] = json!(redacts);
|
||||
}
|
||||
if let Some(state_key) = event.state_key() {
|
||||
json["state_key"] = json!(state_key);
|
||||
}
|
||||
if let Some(unsigned) = event.unsigned() {
|
||||
json["unsigned"] = json!(unsigned);
|
||||
}
|
||||
|
||||
serde_json::from_value(json).expect("Failed to serialize Event value")
|
||||
to_raw_value(&JsonMembers(&members))
|
||||
.map(Self::from_json)
|
||||
.expect("Failed to serialize Event value")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,25 +100,20 @@ impl<'a, E: Event> From<Ref<'a, E>> for Raw<AnySyncMessageLikeEvent> {
|
||||
fn from(event: Ref<'a, E>) -> Self {
|
||||
let event = event.0;
|
||||
let (redacts, content) = redact::copy(event);
|
||||
let mut json = json!({
|
||||
"content": content,
|
||||
"event_id": event.event_id(),
|
||||
"origin_server_ts": event.origin_server_ts(),
|
||||
"sender": event.sender(),
|
||||
"type": event.kind(),
|
||||
});
|
||||
let members: [JsonMember<_>; _] = [
|
||||
("content", Some(content.into())),
|
||||
("event_id", Some(event.event_id().as_str().into())),
|
||||
("origin_server_ts", Some(event.origin_server_ts().get().into())),
|
||||
("redacts", redacts.map(|e| e.as_str().into())),
|
||||
("sender", Some(event.sender().as_str().into())),
|
||||
("state_key", event.state_key().map(Into::into)),
|
||||
("type", Some(event.event_type().to_string().into())),
|
||||
("unsigned", event.unsigned().map(Into::into)),
|
||||
];
|
||||
|
||||
if let Some(redacts) = &redacts {
|
||||
json["redacts"] = json!(redacts);
|
||||
}
|
||||
if let Some(state_key) = event.state_key() {
|
||||
json["state_key"] = json!(state_key);
|
||||
}
|
||||
if let Some(unsigned) = event.unsigned() {
|
||||
json["unsigned"] = json!(unsigned);
|
||||
}
|
||||
|
||||
serde_json::from_value(json).expect("Failed to serialize Event value")
|
||||
to_raw_value(&JsonMembers(&members))
|
||||
.map(Self::from_json)
|
||||
.expect("Failed to serialize Event value")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,21 +124,20 @@ impl<E: Event> From<Owned<E>> for Raw<AnyStateEvent> {
|
||||
impl<'a, E: Event> From<Ref<'a, E>> for Raw<AnyStateEvent> {
|
||||
fn from(event: Ref<'a, E>) -> Self {
|
||||
let event = event.0;
|
||||
let mut json = json!({
|
||||
"content": event.content(),
|
||||
"event_id": event.event_id(),
|
||||
"origin_server_ts": event.origin_server_ts(),
|
||||
"room_id": event.room_id(),
|
||||
"sender": event.sender(),
|
||||
"state_key": event.state_key(),
|
||||
"type": event.kind(),
|
||||
});
|
||||
let members: [JsonMember<_>; _] = [
|
||||
("content", Some(event.content().into())),
|
||||
("event_id", Some(event.event_id().as_str().into())),
|
||||
("origin_server_ts", Some(event.origin_server_ts().get().into())),
|
||||
("room_id", Some(event.room_id().as_str().into())),
|
||||
("sender", Some(event.sender().as_str().into())),
|
||||
("state_key", event.state_key().map(Into::into)),
|
||||
("type", Some(event.event_type().to_string().into())),
|
||||
("unsigned", event.unsigned().map(Into::into)),
|
||||
];
|
||||
|
||||
if let Some(unsigned) = event.unsigned() {
|
||||
json["unsigned"] = json!(unsigned);
|
||||
}
|
||||
|
||||
serde_json::from_value(json).expect("Failed to serialize Event value")
|
||||
to_raw_value(&JsonMembers(&members))
|
||||
.map(Self::from_json)
|
||||
.expect("Failed to serialize Event value")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -168,20 +148,19 @@ impl<E: Event> From<Owned<E>> for Raw<AnySyncStateEvent> {
|
||||
impl<'a, E: Event> From<Ref<'a, E>> for Raw<AnySyncStateEvent> {
|
||||
fn from(event: Ref<'a, E>) -> Self {
|
||||
let event = event.0;
|
||||
let mut json = json!({
|
||||
"content": event.content(),
|
||||
"event_id": event.event_id(),
|
||||
"origin_server_ts": event.origin_server_ts(),
|
||||
"sender": event.sender(),
|
||||
"state_key": event.state_key(),
|
||||
"type": event.kind(),
|
||||
});
|
||||
let members: [JsonMember<_>; _] = [
|
||||
("content", Some(event.content().into())),
|
||||
("event_id", Some(event.event_id().as_str().into())),
|
||||
("origin_server_ts", Some(event.origin_server_ts().get().into())),
|
||||
("sender", Some(event.sender().as_str().into())),
|
||||
("state_key", event.state_key().map(Into::into)),
|
||||
("type", Some(event.event_type().to_string().into())),
|
||||
("unsigned", event.unsigned().map(Into::into)),
|
||||
];
|
||||
|
||||
if let Some(unsigned) = event.unsigned() {
|
||||
json["unsigned"] = json!(unsigned);
|
||||
}
|
||||
|
||||
serde_json::from_value(json).expect("Failed to serialize Event value")
|
||||
to_raw_value(&JsonMembers(&members))
|
||||
.map(Self::from_json)
|
||||
.expect("Failed to serialize Event value")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,14 +171,16 @@ impl<E: Event> From<Owned<E>> for Raw<AnyStrippedStateEvent> {
|
||||
impl<'a, E: Event> From<Ref<'a, E>> for Raw<AnyStrippedStateEvent> {
|
||||
fn from(event: Ref<'a, E>) -> Self {
|
||||
let event = event.0;
|
||||
let json = json!({
|
||||
"content": event.content(),
|
||||
"sender": event.sender(),
|
||||
"state_key": event.state_key(),
|
||||
"type": event.kind(),
|
||||
});
|
||||
let members: [JsonMember<_>; _] = [
|
||||
("content", Some(event.content().into())),
|
||||
("sender", Some(event.sender().as_str().into())),
|
||||
("state_key", event.state_key().map(Into::into)),
|
||||
("type", Some(event.event_type().to_string().into())),
|
||||
];
|
||||
|
||||
serde_json::from_value(json).expect("Failed to serialize Event value")
|
||||
to_raw_value(&JsonMembers(&members))
|
||||
.map(Self::from_json)
|
||||
.expect("Failed to serialize Event value")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,15 +191,17 @@ impl<E: Event> From<Owned<E>> for Raw<HierarchySpaceChildEvent> {
|
||||
impl<'a, E: Event> From<Ref<'a, E>> for Raw<HierarchySpaceChildEvent> {
|
||||
fn from(event: Ref<'a, E>) -> Self {
|
||||
let event = event.0;
|
||||
let json = json!({
|
||||
"content": event.content(),
|
||||
"origin_server_ts": event.origin_server_ts(),
|
||||
"sender": event.sender(),
|
||||
"state_key": event.state_key(),
|
||||
"type": event.kind(),
|
||||
});
|
||||
let members: [JsonMember<_>; _] = [
|
||||
("content", Some(event.content().into())),
|
||||
("origin_server_ts", Some(event.origin_server_ts().get().into())),
|
||||
("sender", Some(event.sender().as_str().into())),
|
||||
("state_key", event.state_key().map(Into::into)),
|
||||
("type", Some(event.event_type().to_string().into())),
|
||||
];
|
||||
|
||||
serde_json::from_value(json).expect("Failed to serialize Event value")
|
||||
to_raw_value(&JsonMembers(&members))
|
||||
.map(Self::from_json)
|
||||
.expect("Failed to serialize Event value")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -229,21 +212,20 @@ impl<E: Event> From<Owned<E>> for Raw<StateEvent<RoomMemberEventContent>> {
|
||||
impl<'a, E: Event> From<Ref<'a, E>> for Raw<StateEvent<RoomMemberEventContent>> {
|
||||
fn from(event: Ref<'a, E>) -> Self {
|
||||
let event = event.0;
|
||||
let mut json = json!({
|
||||
"content": event.content(),
|
||||
"event_id": event.event_id(),
|
||||
"origin_server_ts": event.origin_server_ts(),
|
||||
"redacts": event.redacts(),
|
||||
"room_id": event.room_id(),
|
||||
"sender": event.sender(),
|
||||
"state_key": event.state_key(),
|
||||
"type": event.kind(),
|
||||
});
|
||||
let members: [JsonMember<_>; _] = [
|
||||
("content", Some(event.content().into())),
|
||||
("event_id", Some(event.event_id().as_str().into())),
|
||||
("origin_server_ts", Some(event.origin_server_ts().get().into())),
|
||||
("redacts", event.redacts().map(|e| e.as_str().into())),
|
||||
("room_id", Some(event.room_id().as_str().into())),
|
||||
("sender", Some(event.sender().as_str().into())),
|
||||
("state_key", event.state_key().map(Into::into)),
|
||||
("type", Some(event.event_type().to_string().into())),
|
||||
("unsigned", event.unsigned().map(Into::into)),
|
||||
];
|
||||
|
||||
if let Some(unsigned) = event.unsigned() {
|
||||
json["unsigned"] = json!(unsigned);
|
||||
}
|
||||
|
||||
serde_json::from_value(json).expect("Failed to serialize Event value")
|
||||
to_raw_value(&JsonMembers(&members))
|
||||
.map(Self::from_json)
|
||||
.expect("Failed to serialize Event value")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user