use language_tags::LanguageTag;
use ruma_macros::EventContent;
use serde::{Deserialize, Serialize};
use crate::EmptyStateKey;
#[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
#[ruma_event(type = "org.matrix.msc4334.room.language", kind = State, state_key_type = EmptyStateKey)]
pub struct RoomLanguageEventContent {
pub language: LanguageTag,
}
impl RoomLanguageEventContent {
pub fn new(language: LanguageTag) -> Self {
Self { language }
}
}
#[cfg(test)]
mod tests {
use ruma_common::canonical_json::assert_to_canonical_json_eq;
use serde_json::{from_value as from_json_value, json};
use super::RoomLanguageEventContent;
use crate::{OriginalStateEvent, room::language::LanguageTag};
#[test]
fn serialization() {
let content = RoomLanguageEventContent { language: LanguageTag::parse("fr").unwrap() };
assert_to_canonical_json_eq!(
content,
json!({
"language": "fr",
}),
);
}
#[test]
fn deserialization() {
let json_data = json!({
"content": {
"language": "fr"
},
"event_id": "$h29iv0s8:example.com",
"origin_server_ts": 1,
"room_id": "!n8f893n9:example.com",
"sender": "@carl:example.com",
"state_key": "",
"type": "org.matrix.msc4334.room.language"
});
assert_eq!(
from_json_value::<OriginalStateEvent<RoomLanguageEventContent>>(json_data)
.unwrap()
.content
.language,
LanguageTag::parse("fr").unwrap()
);
}
}