From f9390c7c358c8a3c2e29e55a6c2e5aba7a956bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Sat, 26 Mar 2022 09:12:18 +0100 Subject: [PATCH] events: Create error type for extensible events conversion --- crates/ruma-common/src/events/message.rs | 10 ++++++++++ .../ruma-common/src/events/message/content_serde.rs | 13 +++---------- 2 files changed, 13 insertions(+), 10 deletions(-) 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())) } } }