ruma_events/room/
language.rs1use language_tags::LanguageTag;
6use ruma_macros::EventContent;
7use serde::{Deserialize, Serialize};
8
9use crate::EmptyStateKey;
10
11#[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
15#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
16#[ruma_event(type = "org.matrix.msc4334.room.language", kind = State, state_key_type = EmptyStateKey)]
17pub struct RoomLanguageEventContent {
18 pub language: LanguageTag,
20}
21
22impl RoomLanguageEventContent {
23 pub fn new(language: LanguageTag) -> Self {
25 Self { language }
26 }
27}
28
29#[cfg(test)]
30mod tests {
31 use ruma_common::canonical_json::assert_to_canonical_json_eq;
32 use serde_json::{from_value as from_json_value, json};
33
34 use super::RoomLanguageEventContent;
35 use crate::{OriginalStateEvent, room::language::LanguageTag};
36
37 #[test]
38 fn serialization() {
39 let content = RoomLanguageEventContent { language: LanguageTag::parse("fr").unwrap() };
40
41 assert_to_canonical_json_eq!(
42 content,
43 json!({
44 "language": "fr",
45 }),
46 );
47 }
48
49 #[test]
50 fn deserialization() {
51 let json_data = json!({
52 "content": {
53 "language": "fr"
54 },
55 "event_id": "$h29iv0s8:example.com",
56 "origin_server_ts": 1,
57 "room_id": "!n8f893n9:example.com",
58 "sender": "@carl:example.com",
59 "state_key": "",
60 "type": "org.matrix.msc4334.room.language"
61 });
62
63 assert_eq!(
64 from_json_value::<OriginalStateEvent<RoomLanguageEventContent>>(json_data)
65 .unwrap()
66 .content
67 .language,
68 LanguageTag::parse("fr").unwrap()
69 );
70 }
71}