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 serde_json::{from_value as from_json_value, json, to_value as to_json_value};
32
33 use super::RoomLanguageEventContent;
34 use crate::{room::language::LanguageTag, OriginalStateEvent};
35
36 #[test]
37 fn serialization() {
38 let content = RoomLanguageEventContent { language: LanguageTag::parse("fr").unwrap() };
39
40 let actual = to_json_value(content).unwrap();
41 let expected = json!({
42 "language": "fr",
43 });
44
45 assert_eq!(actual, expected);
46 }
47
48 #[test]
49 fn deserialization() {
50 let json_data = json!({
51 "content": {
52 "language": "fr"
53 },
54 "event_id": "$h29iv0s8:example.com",
55 "origin_server_ts": 1,
56 "room_id": "!n8f893n9:example.com",
57 "sender": "@carl:example.com",
58 "state_key": "",
59 "type": "org.matrix.msc4334.room.language"
60 });
61
62 assert_eq!(
63 from_json_value::<OriginalStateEvent<RoomLanguageEventContent>>(json_data)
64 .unwrap()
65 .content
66 .language,
67 LanguageTag::parse("fr").unwrap()
68 );
69 }
70}