diff --git a/crates/ruma-common/src/events/message.rs b/crates/ruma-common/src/events/message.rs index f5df5a2c..1757d649 100644 --- a/crates/ruma-common/src/events/message.rs +++ b/crates/ruma-common/src/events/message.rs @@ -51,6 +51,7 @@ use std::ops::Deref; use ruma_macros::EventContent; use serde::{Deserialize, Serialize}; +use thiserror::Error; pub(crate) mod content_serde; @@ -248,3 +249,12 @@ impl Text { "text/plain".to_owned() } } + +/// The error type returned when a conversion to an extensible event type fails. +#[derive(Debug, Error)] +#[non_exhaustive] +pub enum TryFromExtensibleError { + /// A field is missing. + #[error("missing field `{0}`")] + MissingField(String), +} diff --git a/crates/ruma-common/src/events/message/content_serde.rs b/crates/ruma-common/src/events/message/content_serde.rs index 70747d88..63a1213f 100644 --- a/crates/ruma-common/src/events/message/content_serde.rs +++ b/crates/ruma-common/src/events/message/content_serde.rs @@ -3,15 +3,8 @@ use std::convert::TryFrom; use serde::{ser::SerializeStruct, Deserialize, Serialize}; -use thiserror::Error; -use super::{MessageContent, Text}; - -#[derive(Error, Debug)] -pub enum MessageContentSerdeError { - #[error("missing field `m.message` or `m.text`")] - MissingMessage, -} +use super::{MessageContent, Text, TryFromExtensibleError}; #[derive(Debug, Default, Deserialize)] pub(crate) struct MessageContentSerDeHelper { @@ -33,7 +26,7 @@ pub(crate) struct MessageContentSerDeHelper { } impl TryFrom for MessageContent { - type Error = MessageContentSerdeError; + type Error = TryFromExtensibleError; fn try_from(helper: MessageContentSerDeHelper) -> Result { let MessageContentSerDeHelper { @@ -48,7 +41,7 @@ impl TryFrom for MessageContent { } else if let Some(text) = text_stable.or(text_unstable) { Ok(Self::plain(text)) } else { - Err(MessageContentSerdeError::MissingMessage) + Err(TryFromExtensibleError::MissingField("m.message or m.text".to_owned())) } } }