events: Create error type for extensible events conversion
This commit is contained in:
parent
245bf75276
commit
f9390c7c35
@ -51,6 +51,7 @@ use std::ops::Deref;
|
|||||||
|
|
||||||
use ruma_macros::EventContent;
|
use ruma_macros::EventContent;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use thiserror::Error;
|
||||||
|
|
||||||
pub(crate) mod content_serde;
|
pub(crate) mod content_serde;
|
||||||
|
|
||||||
@ -248,3 +249,12 @@ impl Text {
|
|||||||
"text/plain".to_owned()
|
"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),
|
||||||
|
}
|
||||||
|
@ -3,15 +3,8 @@
|
|||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
use serde::{ser::SerializeStruct, Deserialize, Serialize};
|
use serde::{ser::SerializeStruct, Deserialize, Serialize};
|
||||||
use thiserror::Error;
|
|
||||||
|
|
||||||
use super::{MessageContent, Text};
|
use super::{MessageContent, Text, TryFromExtensibleError};
|
||||||
|
|
||||||
#[derive(Error, Debug)]
|
|
||||||
pub enum MessageContentSerdeError {
|
|
||||||
#[error("missing field `m.message` or `m.text`")]
|
|
||||||
MissingMessage,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Default, Deserialize)]
|
#[derive(Debug, Default, Deserialize)]
|
||||||
pub(crate) struct MessageContentSerDeHelper {
|
pub(crate) struct MessageContentSerDeHelper {
|
||||||
@ -33,7 +26,7 @@ pub(crate) struct MessageContentSerDeHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<MessageContentSerDeHelper> for MessageContent {
|
impl TryFrom<MessageContentSerDeHelper> for MessageContent {
|
||||||
type Error = MessageContentSerdeError;
|
type Error = TryFromExtensibleError;
|
||||||
|
|
||||||
fn try_from(helper: MessageContentSerDeHelper) -> Result<Self, Self::Error> {
|
fn try_from(helper: MessageContentSerDeHelper) -> Result<Self, Self::Error> {
|
||||||
let MessageContentSerDeHelper {
|
let MessageContentSerDeHelper {
|
||||||
@ -48,7 +41,7 @@ impl TryFrom<MessageContentSerDeHelper> for MessageContent {
|
|||||||
} else if let Some(text) = text_stable.or(text_unstable) {
|
} else if let Some(text) = text_stable.or(text_unstable) {
|
||||||
Ok(Self::plain(text))
|
Ok(Self::plain(text))
|
||||||
} else {
|
} else {
|
||||||
Err(MessageContentSerdeError::MissingMessage)
|
Err(TryFromExtensibleError::MissingField("m.message or m.text".to_owned()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user