Rename ParseError to FromStrError and add InvalidEvent.
This commit is contained in:
parent
1b0be0d0e7
commit
ce2a3817cf
79
src/lib.rs
79
src/lib.rs
@ -99,7 +99,10 @@
|
|||||||
#![deny(missing_docs)]
|
#![deny(missing_docs)]
|
||||||
#![deny(warnings)]
|
#![deny(warnings)]
|
||||||
|
|
||||||
use std::fmt::{Debug, Display, Error as FmtError, Formatter, Result as FmtResult};
|
use std::{
|
||||||
|
error::Error,
|
||||||
|
fmt::{Debug, Display, Error as FmtError, Formatter, Result as FmtResult},
|
||||||
|
};
|
||||||
|
|
||||||
use js_int::UInt;
|
use js_int::UInt;
|
||||||
use ruma_identifiers::{EventId, RoomId, UserId};
|
use ruma_identifiers::{EventId, RoomId, UserId};
|
||||||
@ -135,9 +138,79 @@ pub mod stripped;
|
|||||||
pub mod tag;
|
pub mod tag;
|
||||||
pub mod typing;
|
pub mod typing;
|
||||||
|
|
||||||
/// An error when attempting to convert a string to an enum that only accepts certain values.
|
/// An event that is malformed or otherwise invalid.
|
||||||
|
///
|
||||||
|
/// When attempting to create an event from a string of JSON data, an error in the input data may
|
||||||
|
/// cause deserialization to fail, or the JSON structure may not corresponded to ruma-events's
|
||||||
|
/// strict definition of the event's schema. If deserialization completely fails, this type will
|
||||||
|
/// provide a message with details about the deserialization error. If deserialization succeeds but
|
||||||
|
/// the event is otherwise invalid, a similar message will be provided, as well as a
|
||||||
|
/// `serde_json::Value` containing the raw JSON data as it was deserialized.
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct InvalidEvent(InnerInvalidEvent);
|
||||||
|
|
||||||
|
impl InvalidEvent {
|
||||||
|
/// A message describing why the event is invalid.
|
||||||
|
pub fn message(&self) -> String {
|
||||||
|
match self.0 {
|
||||||
|
InnerInvalidEvent::Deserialization { ref error } => error.to_string(),
|
||||||
|
InnerInvalidEvent::Validation { ref message, .. } => message.to_string(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The raw `serde_json::Value` representation of the invalid event, if available.
|
||||||
|
pub fn json(&self) -> Option<&Value> {
|
||||||
|
match self.0 {
|
||||||
|
InnerInvalidEvent::Validation { ref json, .. } => Some(json),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for InvalidEvent {
|
||||||
|
fn fmt(&self, f: &mut Formatter) -> FmtResult {
|
||||||
|
write!(f, "{}", self.message())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Error for InvalidEvent {}
|
||||||
|
|
||||||
|
/// An event that is malformed or otherwise invalid.
|
||||||
|
#[derive(Debug)]
|
||||||
|
enum InnerInvalidEvent {
|
||||||
|
/// An event that failed to deserialize from JSON.
|
||||||
|
Deserialization {
|
||||||
|
/// The deserialization error returned by serde.
|
||||||
|
error: serde_json::Error,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// An event that deserialized but failed validation.
|
||||||
|
Validation {
|
||||||
|
/// The raw `serde_json::Value` representation of the invalid event.
|
||||||
|
json: Value,
|
||||||
|
|
||||||
|
/// An message describing why the event was invalid.
|
||||||
|
message: String,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<serde_json::Error> for InvalidEvent {
|
||||||
|
fn from(error: serde_json::Error) -> Self {
|
||||||
|
InvalidEvent(InnerInvalidEvent::Deserialization { error })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// An error when attempting to create a value from a string via the `FromStr` trait.
|
||||||
#[derive(Clone, Copy, Eq, Debug, Hash, PartialEq)]
|
#[derive(Clone, Copy, Eq, Debug, Hash, PartialEq)]
|
||||||
pub struct ParseError;
|
pub struct FromStrError;
|
||||||
|
|
||||||
|
impl Display for FromStrError {
|
||||||
|
fn fmt(&self, f: &mut Formatter) -> FmtResult {
|
||||||
|
write!(f, "failed to parse type from string")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Error for FromStrError {}
|
||||||
|
|
||||||
/// The type of an event.
|
/// The type of an event.
|
||||||
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
|
@ -12,12 +12,12 @@ macro_rules! impl_enum {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ::std::str::FromStr for $name {
|
impl ::std::str::FromStr for $name {
|
||||||
type Err = $crate::ParseError;
|
type Err = $crate::FromStrError;
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
match s {
|
match s {
|
||||||
$($s => Ok($name::$variant),)*
|
$($s => Ok($name::$variant),)*
|
||||||
_ => Err($crate::ParseError),
|
_ => Err($crate::FromStrError),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ use std::{
|
|||||||
|
|
||||||
use serde::{de::Visitor, Deserialize, Deserializer, Serialize, Serializer};
|
use serde::{de::Visitor, Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
|
||||||
use super::{default_true, ParseError};
|
use super::{default_true, FromStrError};
|
||||||
|
|
||||||
event! {
|
event! {
|
||||||
/// Describes all push rules for a user.
|
/// Describes all push rules for a user.
|
||||||
@ -106,14 +106,14 @@ pub enum Action {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FromStr for Action {
|
impl FromStr for Action {
|
||||||
type Err = ParseError;
|
type Err = FromStrError;
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
let action = match s {
|
let action = match s {
|
||||||
"notify" => Action::Notify,
|
"notify" => Action::Notify,
|
||||||
"dont_notify" => Action::DontNotify,
|
"dont_notify" => Action::DontNotify,
|
||||||
"coalesce" => Action::Coalesce,
|
"coalesce" => Action::Coalesce,
|
||||||
_ => return Err(ParseError),
|
_ => return Err(FromStrError),
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(action)
|
Ok(action)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user