diff --git a/crates/ruma-common/src/events/message.rs b/crates/ruma-common/src/events/message.rs index d7562168..04a15c4a 100644 --- a/crates/ruma-common/src/events/message.rs +++ b/crates/ruma-common/src/events/message.rs @@ -265,10 +265,16 @@ pub struct TextRepresentation { /// /// This must be a valid language code according to [BCP 47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). /// + /// This is optional and defaults to `en`. + /// /// [MSC3554]: https://github.com/matrix-org/matrix-spec-proposals/pull/3554 #[cfg(feature = "unstable-msc3554")] - #[serde(skip_serializing_if = "Option::is_none")] - pub lang: Option, + #[serde( + rename = "org.matrix.msc3554.lang", + default = "Text::default_lang", + skip_serializing_if = "Text::is_default_lang" + )] + pub lang: String, } impl TextRepresentation { @@ -278,7 +284,7 @@ impl TextRepresentation { mimetype: mimetype.into(), body: body.into(), #[cfg(feature = "unstable-msc3554")] - lang: None, + lang: Self::default_lang(), } } @@ -309,4 +315,12 @@ impl TextRepresentation { fn is_default_mimetype(mime: &str) -> bool { mime == "text/plain" } + + fn default_lang() -> String { + "en".to_owned() + } + + fn is_default_lang(lang: &str) -> bool { + lang == "en" + } } diff --git a/crates/ruma-common/tests/events/message.rs b/crates/ruma-common/tests/events/message.rs index 1897c55b..86806fea 100644 --- a/crates/ruma-common/tests/events/message.rs +++ b/crates/ruma-common/tests/events/message.rs @@ -315,18 +315,18 @@ fn emote_event_deserialization() { #[cfg(feature = "unstable-msc3554")] fn lang_serialization() { let content = TextContentBlock::try_from(vec![ - assign!(TextRepresentation::plain("Bonjour le monde !"), { lang: Some("fr".into()) }), - assign!(TextRepresentation::plain("Hallo Welt!"), { lang: Some("de".into()) }), - assign!(TextRepresentation::plain("Hello World!"), { lang: Some("en".into()) }), + assign!(TextRepresentation::plain("Bonjour le monde !"), { lang: "fr".into() }), + assign!(TextRepresentation::plain("Hallo Welt!"), { lang: "de".into() }), + assign!(TextRepresentation::plain("Hello World!"), { lang: "en".into() }), ]) .unwrap(); assert_eq!( to_json_value(content).unwrap(), json!([ - { "body": "Bonjour le monde !", "lang": "fr"}, - { "body": "Hallo Welt!", "lang": "de"}, - { "body": "Hello World!", "lang": "en"}, + { "body": "Bonjour le monde !", "org.matrix.msc3554.lang": "fr"}, + { "body": "Hallo Welt!", "org.matrix.msc3554.lang": "de"}, + { "body": "Hello World!"}, ]) ); } @@ -335,15 +335,15 @@ fn lang_serialization() { #[cfg(feature = "unstable-msc3554")] fn lang_deserialization() { let json_data = json!([ - { "body": "Bonjour le monde !", "lang": "fr"}, - { "body": "Hallo Welt!", "lang": "de"}, - { "body": "Hello World!", "lang": "en"}, + { "body": "Bonjour le monde !", "org.matrix.msc3554.lang": "fr"}, + { "body": "Hallo Welt!", "org.matrix.msc3554.lang": "de"}, + { "body": "Hello World!"}, ]); let content = from_json_value::(json_data).unwrap(); - assert_eq!(content[0].lang.as_deref(), Some("fr")); - assert_eq!(content[1].lang.as_deref(), Some("de")); - assert_eq!(content[2].lang.as_deref(), Some("en")); + assert_eq!(content[0].lang, "fr"); + assert_eq!(content[1].lang, "de"); + assert_eq!(content[2].lang, "en"); } #[test]