events: Move RoomMessageEventContentWithoutRelation into separate module

This commit is contained in:
Jonas Platte 2023-10-09 16:00:25 +02:00
parent 25d0b3ce59
commit 0f023c5222
No known key found for this signature in database
GPG Key ID: AAA7A61F696C3E0C
2 changed files with 52 additions and 46 deletions

View File

@ -38,6 +38,7 @@ pub mod sanitize;
mod server_notice;
mod text;
mod video;
mod without_relation;
#[cfg(feature = "unstable-msc3245-v1-compat")]
pub use self::audio::{UnstableAudioDetailsContentBlock, UnstableVoiceContentBlock};
@ -54,6 +55,7 @@ pub use self::{
server_notice::{LimitType, ServerNoticeMessageEventContent, ServerNoticeType},
text::TextMessageEventContent,
video::{VideoInfo, VideoMessageEventContent},
without_relation::RoomMessageEventContentWithoutRelation,
};
/// The content of an `m.room.message` event.
@ -485,52 +487,6 @@ impl RoomMessageEventContent {
}
}
/// Form of [`RoomMessageEventContent`] without relation.
#[derive(Clone, Debug, Serialize)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct RoomMessageEventContentWithoutRelation {
/// A key which identifies the type of message being sent.
///
/// This also holds the specific content of each message.
#[serde(flatten)]
pub msgtype: MessageType,
/// The [mentions] of this event.
///
/// [mentions]: https://spec.matrix.org/latest/client-server-api/#user-and-room-mentions
#[serde(rename = "m.mentions", skip_serializing_if = "Option::is_none")]
pub mentions: Option<Mentions>,
}
impl RoomMessageEventContentWithoutRelation {
/// Creates a new `RoomMessageEventContentWithoutRelation` with the given `MessageType`.
pub fn new(msgtype: MessageType) -> Self {
Self { msgtype, mentions: None }
}
/// Transform `self` into a `RoomMessageEventContent` with the given relation.
pub fn with_relation(
self,
relates_to: Option<Relation<RoomMessageEventContentWithoutRelation>>,
) -> RoomMessageEventContent {
let Self { msgtype, mentions } = self;
RoomMessageEventContent { msgtype, relates_to, mentions }
}
}
impl From<MessageType> for RoomMessageEventContentWithoutRelation {
fn from(msgtype: MessageType) -> Self {
Self::new(msgtype)
}
}
impl From<RoomMessageEventContent> for RoomMessageEventContentWithoutRelation {
fn from(value: RoomMessageEventContent) -> Self {
let RoomMessageEventContent { msgtype, mentions, .. } = value;
Self { msgtype, mentions }
}
}
/// Whether or not to forward a [`Relation::Thread`] when sending a reply.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[allow(clippy::exhaustive_enums)]

View File

@ -0,0 +1,50 @@
use serde::Serialize;
use super::{MessageType, Relation, RoomMessageEventContent};
use crate::Mentions;
/// Form of [`RoomMessageEventContent`] without relation.
#[derive(Clone, Debug, Serialize)]
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct RoomMessageEventContentWithoutRelation {
/// A key which identifies the type of message being sent.
///
/// This also holds the specific content of each message.
#[serde(flatten)]
pub msgtype: MessageType,
/// The [mentions] of this event.
///
/// [mentions]: https://spec.matrix.org/latest/client-server-api/#user-and-room-mentions
#[serde(rename = "m.mentions", skip_serializing_if = "Option::is_none")]
pub mentions: Option<Mentions>,
}
impl RoomMessageEventContentWithoutRelation {
/// Creates a new `RoomMessageEventContentWithoutRelation` with the given `MessageType`.
pub fn new(msgtype: MessageType) -> Self {
Self { msgtype, mentions: None }
}
/// Transform `self` into a `RoomMessageEventContent` with the given relation.
pub fn with_relation(
self,
relates_to: Option<Relation<RoomMessageEventContentWithoutRelation>>,
) -> RoomMessageEventContent {
let Self { msgtype, mentions } = self;
RoomMessageEventContent { msgtype, relates_to, mentions }
}
}
impl From<MessageType> for RoomMessageEventContentWithoutRelation {
fn from(msgtype: MessageType) -> Self {
Self::new(msgtype)
}
}
impl From<RoomMessageEventContent> for RoomMessageEventContentWithoutRelation {
fn from(value: RoomMessageEventContent) -> Self {
let RoomMessageEventContent { msgtype, mentions, .. } = value;
Self { msgtype, mentions }
}
}