40 lines
825 B
Rust
40 lines
825 B
Rust
|
|
use ruma::{CanonicalJsonObject, CanonicalJsonValue, RoomVersionId};
|
||
|
|
|
||
|
|
use crate::{is_equal_to, matrix::room_version};
|
||
|
|
|
||
|
|
pub fn into_outgoing_federation(
|
||
|
|
mut pdu_json: CanonicalJsonObject,
|
||
|
|
room_version: &RoomVersionId,
|
||
|
|
) -> CanonicalJsonObject {
|
||
|
|
if let Some(unsigned) = pdu_json
|
||
|
|
.get_mut("unsigned")
|
||
|
|
.and_then(|val| val.as_object_mut())
|
||
|
|
{
|
||
|
|
unsigned.remove("transaction_id");
|
||
|
|
}
|
||
|
|
|
||
|
|
let Ok(room_rules) = room_version::rules(room_version) else {
|
||
|
|
pdu_json.remove("event_id");
|
||
|
|
return pdu_json;
|
||
|
|
};
|
||
|
|
|
||
|
|
if !room_rules.event_format.require_event_id {
|
||
|
|
pdu_json.remove("event_id");
|
||
|
|
}
|
||
|
|
|
||
|
|
if !room_rules
|
||
|
|
.event_format
|
||
|
|
.require_room_create_room_id
|
||
|
|
{
|
||
|
|
if pdu_json
|
||
|
|
.get("type")
|
||
|
|
.and_then(CanonicalJsonValue::as_str)
|
||
|
|
.is_some_and(is_equal_to!("m.room.create"))
|
||
|
|
{
|
||
|
|
pdu_json.remove("room_id");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
pdu_json
|
||
|
|
}
|