events: Move extensible event RoomMessageEventContent convertors
This commit is contained in:
parent
9ea6c3c6ab
commit
f158817a7c
@ -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)]
|
||||
|
@ -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 }
|
||||
}
|
||||
}
|
||||
|
@ -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)]
|
||||
|
@ -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)]
|
||||
|
@ -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)]
|
||||
|
@ -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
|
||||
|
@ -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 }
|
||||
}
|
||||
}
|
||||
|
@ -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)]
|
||||
|
@ -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>
|
||||
|
@ -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)]
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user