events: Move extensible event RoomMessageEventContent convertors

This commit is contained in:
Kévin Commaille 2022-06-07 15:54:14 +02:00 committed by Kévin Commaille
parent 9ea6c3c6ab
commit f158817a7c
11 changed files with 149 additions and 155 deletions

View File

@ -16,7 +16,9 @@ use waveform_serde::WaveformSerDeHelper;
use super::{
file::FileContent,
message::MessageContent,
room::message::{AudioInfo, AudioMessageEventContent, Relation},
room::message::{
AudioInfo, AudioMessageEventContent, MessageType, Relation, RoomMessageEventContent,
},
};
/// The payload for an extensible audio message.
@ -98,6 +100,19 @@ impl AudioEventContent {
}
}
impl From<AudioEventContent> for RoomMessageEventContent {
fn from(content: AudioEventContent) -> Self {
let AudioEventContent { message, file, audio, relates_to } = content;
Self {
msgtype: MessageType::Audio(AudioMessageEventContent::from_extensible_content(
message, file, audio,
)),
relates_to,
}
}
}
/// Audio content.
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]

View File

@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize};
use super::{
message::MessageContent,
room::message::{EmoteMessageEventContent, Relation},
room::message::{EmoteMessageEventContent, MessageType, Relation, RoomMessageEventContent},
};
/// The payload for an extensible emote message.
@ -70,3 +70,11 @@ impl EmoteEventContent {
}
}
}
impl From<EmoteEventContent> for RoomMessageEventContent {
fn from(content: EmoteEventContent) -> Self {
let EmoteEventContent { message, relates_to, .. } = content;
Self { msgtype: MessageType::Emote(message.into()), relates_to }
}
}

View File

@ -11,7 +11,10 @@ use serde::{Deserialize, Serialize};
use super::{
message::MessageContent,
room::{
message::{AudioInfo, FileInfo, FileMessageEventContent, Relation, VideoInfo},
message::{
AudioInfo, FileInfo, FileMessageEventContent, MessageType, Relation,
RoomMessageEventContent, VideoInfo,
},
EncryptedFile, ImageInfo, JsonWebKey, MediaSource,
},
};
@ -115,6 +118,19 @@ impl FileEventContent {
}
}
impl From<FileEventContent> for RoomMessageEventContent {
fn from(content: FileEventContent) -> Self {
let FileEventContent { message, file, relates_to } = content;
Self {
msgtype: MessageType::File(FileMessageEventContent::from_extensible_content(
message, file,
)),
relates_to,
}
}
}
/// File content.
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]

View File

@ -10,7 +10,7 @@ use super::{
file::{EncryptedContent, FileContent},
message::MessageContent,
room::{
message::{ImageMessageEventContent, Relation},
message::{ImageMessageEventContent, MessageType, Relation, RoomMessageEventContent},
ImageInfo, MediaSource, ThumbnailInfo,
},
};
@ -128,6 +128,19 @@ impl ImageEventContent {
}
}
impl From<ImageEventContent> for RoomMessageEventContent {
fn from(content: ImageEventContent) -> Self {
let ImageEventContent { message, file, image, thumbnail, caption, relates_to } = content;
Self {
msgtype: MessageType::Image(ImageMessageEventContent::from_extensible_content(
message, file, image, thumbnail, caption,
)),
relates_to,
}
}
}
/// Image content.
#[derive(Default, Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]

View File

@ -10,7 +10,7 @@ mod zoomlevel_serde;
use super::{
message::MessageContent,
room::message::{LocationMessageEventContent, Relation},
room::message::{LocationMessageEventContent, MessageType, Relation, RoomMessageEventContent},
};
use crate::{MilliSecondsSinceUnixEpoch, PrivOwnedStr};
@ -86,6 +86,19 @@ impl LocationEventContent {
}
}
impl From<LocationEventContent> for RoomMessageEventContent {
fn from(content: LocationEventContent) -> Self {
let LocationEventContent { message, location, asset, ts, relates_to } = content;
Self {
msgtype: MessageType::Location(LocationMessageEventContent::from_extensible_content(
message, location, asset, ts,
)),
relates_to,
}
}
}
/// Location content.
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]

View File

@ -48,7 +48,6 @@
//! [3488]: https://github.com/matrix-org/matrix-spec-proposals/pull/3488
//! [MSC3245]: https://github.com/matrix-org/matrix-spec-proposals/pull/3245
//! [MSC3381]: https://github.com/matrix-org/matrix-spec-proposals/pull/3381
//! [`RoomMessageEventContent`]: super::room::message::RoomMessageEventContent
use std::ops::Deref;
use ruma_macros::EventContent;
@ -59,7 +58,10 @@ pub(crate) mod content_serde;
use content_serde::MessageContentSerDeHelper;
use super::room::message::{FormattedBody, MessageFormat, Relation, TextMessageEventContent};
use super::room::message::{
FormattedBody, MessageFormat, MessageType, Relation, RoomMessageEventContent,
TextMessageEventContent,
};
/// The payload for an extensible text message.
///
@ -122,6 +124,14 @@ impl MessageEventContent {
}
}
impl From<MessageEventContent> for RoomMessageEventContent {
fn from(content: MessageEventContent) -> Self {
let MessageEventContent { message, relates_to, .. } = content;
Self { msgtype: MessageType::Text(message.into()), relates_to }
}
}
/// Text message content.
///
/// A `MessageContent` must contain at least one message to be used as a fallback text

View File

@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize};
use super::{
message::MessageContent,
room::message::{NoticeMessageEventContent, Relation},
room::message::{MessageType, NoticeMessageEventContent, Relation, RoomMessageEventContent},
};
/// The payload for an extensible notice message.
@ -70,3 +70,11 @@ impl NoticeEventContent {
}
}
}
impl From<NoticeEventContent> for RoomMessageEventContent {
fn from(content: NoticeEventContent) -> Self {
let NoticeEventContent { message, relates_to, .. } = content;
Self { msgtype: MessageType::Notice(message.into()), relates_to }
}
}

View File

@ -8,27 +8,6 @@ use ruma_macros::EventContent;
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use serde_json::Value as JsonValue;
#[cfg(feature = "unstable-msc3246")]
use crate::events::audio::{AudioContent, AudioEventContent};
#[cfg(feature = "unstable-msc3551")]
use crate::events::file::{FileContent, FileEventContent};
#[cfg(feature = "unstable-msc3552")]
use crate::events::image::{ImageContent, ImageEventContent, ThumbnailContent};
#[cfg(feature = "unstable-msc3553")]
use crate::events::video::{VideoContent, VideoEventContent};
#[cfg(feature = "unstable-msc3245")]
use crate::events::voice::{VoiceContent, VoiceEventContent};
#[cfg(feature = "unstable-msc1767")]
use crate::events::{
emote::EmoteEventContent,
message::{MessageContent, MessageEventContent},
notice::NoticeEventContent,
};
#[cfg(feature = "unstable-msc3488")]
use crate::{
events::location::{AssetContent, LocationContent, LocationEventContent},
MilliSecondsSinceUnixEpoch,
};
use crate::{
serde::{JsonObject, StringEnum},
OwnedEventId, PrivOwnedStr,
@ -322,117 +301,6 @@ impl RoomMessageEventContent {
}
}
#[cfg(feature = "unstable-msc3246")]
impl From<AudioEventContent> for RoomMessageEventContent {
fn from(content: AudioEventContent) -> Self {
let AudioEventContent { message, file, audio, relates_to } = content;
Self {
msgtype: MessageType::Audio(AudioMessageEventContent::from_extensible_content(
message, file, audio,
)),
relates_to,
}
}
}
#[cfg(feature = "unstable-msc1767")]
impl From<EmoteEventContent> for RoomMessageEventContent {
fn from(content: EmoteEventContent) -> Self {
let EmoteEventContent { message, relates_to, .. } = content;
Self { msgtype: MessageType::Emote(message.into()), relates_to }
}
}
#[cfg(feature = "unstable-msc3551")]
impl From<FileEventContent> for RoomMessageEventContent {
fn from(content: FileEventContent) -> Self {
let FileEventContent { message, file, relates_to } = content;
Self {
msgtype: MessageType::File(FileMessageEventContent::from_extensible_content(
message, file,
)),
relates_to,
}
}
}
#[cfg(feature = "unstable-msc3552")]
impl From<ImageEventContent> for RoomMessageEventContent {
fn from(content: ImageEventContent) -> Self {
let ImageEventContent { message, file, image, thumbnail, caption, relates_to } = content;
Self {
msgtype: MessageType::Image(ImageMessageEventContent::from_extensible_content(
message, file, image, thumbnail, caption,
)),
relates_to,
}
}
}
#[cfg(feature = "unstable-msc3488")]
impl From<LocationEventContent> for RoomMessageEventContent {
fn from(content: LocationEventContent) -> Self {
let LocationEventContent { message, location, asset, ts, relates_to } = content;
Self {
msgtype: MessageType::Location(LocationMessageEventContent::from_extensible_content(
message, location, asset, ts,
)),
relates_to,
}
}
}
#[cfg(feature = "unstable-msc1767")]
impl From<MessageEventContent> for RoomMessageEventContent {
fn from(content: MessageEventContent) -> Self {
let MessageEventContent { message, relates_to, .. } = content;
Self { msgtype: MessageType::Text(message.into()), relates_to }
}
}
#[cfg(feature = "unstable-msc1767")]
impl From<NoticeEventContent> for RoomMessageEventContent {
fn from(content: NoticeEventContent) -> Self {
let NoticeEventContent { message, relates_to, .. } = content;
Self { msgtype: MessageType::Notice(message.into()), relates_to }
}
}
#[cfg(feature = "unstable-msc3553")]
impl From<VideoEventContent> for RoomMessageEventContent {
fn from(content: VideoEventContent) -> Self {
let VideoEventContent { message, file, video, thumbnail, caption, relates_to } = content;
Self {
msgtype: MessageType::Video(VideoMessageEventContent::from_extensible_content(
message, file, video, thumbnail, caption,
)),
relates_to,
}
}
}
#[cfg(feature = "unstable-msc3245")]
impl From<VoiceEventContent> for RoomMessageEventContent {
fn from(content: VoiceEventContent) -> Self {
let VoiceEventContent { message, file, audio, voice, relates_to } = content;
Self {
msgtype: MessageType::Audio(AudioMessageEventContent::from_extensible_voice_content(
message, file, audio, voice,
)),
relates_to,
}
}
}
/// Whether or not to forward a [`Relation::Thread`] when sending a reply.
#[cfg(feature = "unstable-msc3440")]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]

View File

@ -3,27 +3,42 @@
use serde::{de, Deserialize};
use serde_json::value::RawValue as RawJsonValue;
#[cfg(feature = "unstable-msc3245")]
use super::VoiceContent;
#[cfg(feature = "unstable-msc3488")]
use super::{
AssetContent, LocationContent, LocationInfo, LocationMessageEventContent,
MilliSecondsSinceUnixEpoch,
};
#[cfg(feature = "unstable-msc3246")]
use super::{AudioContent, AudioInfo, AudioMessageEventContent};
#[cfg(feature = "unstable-msc3551")]
use super::{FileContent, FileInfo, FileMessageEventContent, MessageContent};
#[cfg(feature = "unstable-msc3552")]
use super::{ImageContent, ImageMessageEventContent, ThumbnailContent};
use super::ImageMessageEventContent;
#[cfg(feature = "unstable-msc3246")]
use super::{AudioInfo, AudioMessageEventContent};
#[cfg(feature = "unstable-msc3551")]
use super::{FileInfo, FileMessageEventContent};
#[cfg(feature = "unstable-msc3488")]
use super::{LocationInfo, LocationMessageEventContent};
use super::{MessageType, Relation, RoomMessageEventContent};
#[cfg(feature = "unstable-msc3553")]
use super::{VideoContent, VideoInfo, VideoMessageEventContent};
use super::{VideoInfo, VideoMessageEventContent};
#[cfg(feature = "unstable-msc3246")]
use crate::events::audio::AudioContent;
#[cfg(feature = "unstable-msc3551")]
use crate::events::file::FileContent;
#[cfg(feature = "unstable-msc3552")]
use crate::events::image::{ImageContent, ThumbnailContent};
#[cfg(feature = "unstable-msc3488")]
use crate::events::location::{AssetContent, LocationContent};
#[cfg(any(
feature = "unstable-msc3246",
feature = "unstable-msc3488",
feature = "unstable-msc3551"
))]
use crate::events::message::MessageContent;
#[cfg(feature = "unstable-msc3552")]
use crate::events::room::ImageInfo;
#[cfg(feature = "unstable-msc3551")]
use crate::events::room::MediaSource;
#[cfg(feature = "unstable-msc3553")]
use crate::events::video::VideoContent;
#[cfg(feature = "unstable-msc3245")]
use crate::events::voice::VoiceContent;
use crate::serde::from_raw_json_value;
#[cfg(feature = "unstable-msc3488")]
use crate::MilliSecondsSinceUnixEpoch;
impl<'de> Deserialize<'de> for RoomMessageEventContent {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>

View File

@ -12,7 +12,9 @@ use super::{
file::FileContent,
image::ThumbnailContent,
message::MessageContent,
room::message::{Relation, VideoInfo, VideoMessageEventContent},
room::message::{
MessageType, Relation, RoomMessageEventContent, VideoInfo, VideoMessageEventContent,
},
};
/// The payload for an extensible video message.
@ -127,6 +129,19 @@ impl VideoEventContent {
}
}
impl From<VideoEventContent> for RoomMessageEventContent {
fn from(content: VideoEventContent) -> Self {
let VideoEventContent { message, file, video, thumbnail, caption, relates_to } = content;
Self {
msgtype: MessageType::Video(VideoMessageEventContent::from_extensible_content(
message, file, video, thumbnail, caption,
)),
relates_to,
}
}
}
/// Video content.
#[derive(Default, Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]

View File

@ -9,7 +9,7 @@ use super::{
audio::AudioContent,
file::FileContent,
message::{MessageContent, TryFromExtensibleError},
room::message::{AudioMessageEventContent, Relation},
room::message::{AudioMessageEventContent, MessageType, Relation, RoomMessageEventContent},
};
/// The payload for an extensible voice message.
@ -98,6 +98,19 @@ impl VoiceEventContent {
}
}
impl From<VoiceEventContent> for RoomMessageEventContent {
fn from(content: VoiceEventContent) -> Self {
let VoiceEventContent { message, file, audio, voice, relates_to } = content;
Self {
msgtype: MessageType::Audio(AudioMessageEventContent::from_extensible_voice_content(
message, file, audio, voice,
)),
relates_to,
}
}
}
/// Voice content.
///
/// This is currently empty and used as a flag to mark an audio event that should be displayed as a