use ruma_common::{OwnedRoomId, OwnedServerName};
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 = "m.space.parent", kind = State, state_key_type = OwnedRoomId)]
pub struct SpaceParentEventContent {
pub via: Vec<OwnedServerName>,
#[serde(default, skip_serializing_if = "ruma_common::serde::is_default")]
pub canonical: bool,
}
impl SpaceParentEventContent {
pub fn new(via: Vec<OwnedServerName>) -> Self {
Self { via, canonical: false }
}
}
impl PossiblyRedactedSpaceParentEventContent {
pub fn is_valid(&self) -> bool {
self.via.is_some()
}
}
#[cfg(test)]
mod tests {
use ruma_common::{canonical_json::assert_to_canonical_json_eq, owned_server_name};
use serde_json::json;
use super::SpaceParentEventContent;
#[test]
fn space_parent_serialization() {
let content = SpaceParentEventContent {
via: vec![owned_server_name!("example.com")],
canonical: true,
};
assert_to_canonical_json_eq!(
content,
json!({
"via": ["example.com"],
"canonical": true,
})
);
}
#[test]
fn space_parent_empty_serialization() {
let content = SpaceParentEventContent { via: vec![], canonical: false };
assert_to_canonical_json_eq!(content, json!({ "via": [] }));
}
}