use ruma_common::OwnedSpaceChildOrder;
use ruma_macros::EventContent;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
#[ruma_event(type = "org.matrix.msc3230.space_order", alias = "m.space_order", kind = RoomAccountData)]
pub struct SpaceOrderEventContent {
pub order: OwnedSpaceChildOrder,
}
impl SpaceOrderEventContent {
pub fn new(order: OwnedSpaceChildOrder) -> Self {
Self { order }
}
}
#[cfg(test)]
mod tests {
use assert_matches2::assert_matches;
use ruma_common::{SpaceChildOrder, canonical_json::assert_to_canonical_json_eq};
use serde_json::{from_value as from_json_value, json};
use super::SpaceOrderEventContent;
use crate::{AnyRoomAccountDataEvent, RoomAccountDataEvent};
#[test]
fn deserialize() {
let raw_unstable_space_order = json!({
"type": "org.matrix.msc3230.space_order",
"content": {
"order": "a",
},
});
let unstable_space_order_account_data =
from_json_value::<AnyRoomAccountDataEvent>(raw_unstable_space_order).unwrap();
assert_matches!(
unstable_space_order_account_data,
AnyRoomAccountDataEvent::SpaceOrder(unstable_space_order)
);
assert_eq!(unstable_space_order.content.order, SpaceChildOrder::parse("a").unwrap());
let raw_space_order = json!({
"type": "m.space_order",
"content": {
"order": "b",
},
});
let space_order_account_data =
from_json_value::<AnyRoomAccountDataEvent>(raw_space_order).unwrap();
assert_matches!(space_order_account_data, AnyRoomAccountDataEvent::SpaceOrder(space_order));
assert_eq!(space_order.content.order, SpaceChildOrder::parse("b").unwrap());
}
#[test]
fn serialize() {
let space_order = SpaceOrderEventContent::new(SpaceChildOrder::parse("a").unwrap());
let space_order_account_data = RoomAccountDataEvent { content: space_order };
assert_to_canonical_json_eq!(
space_order_account_data,
json!({
"type": "org.matrix.msc3230.space_order",
"content": {
"order": "a",
},
})
);
}
}