Introduce FromRaw in addition to TryFromRaw
This commit is contained in:
		
							parent
							
								
									a6c34596d7
								
							
						
					
					
						commit
						09b8de5b6e
					
				@ -166,7 +166,7 @@ impl ToTokens for RumaEvent {
 | 
			
		||||
                match &self.content {
 | 
			
		||||
                    Content::Struct(_) => {
 | 
			
		||||
                        quote_spanned! {span=>
 | 
			
		||||
                            content: crate::from_raw(raw.content),
 | 
			
		||||
                            content: crate::FromRaw::from_raw(raw.content),
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    Content::Typedef(_) => {
 | 
			
		||||
@ -179,7 +179,7 @@ impl ToTokens for RumaEvent {
 | 
			
		||||
                match &self.content {
 | 
			
		||||
                    Content::Struct(_) => {
 | 
			
		||||
                        quote_spanned! {span=>
 | 
			
		||||
                            prev_content: raw.prev_content.map(crate::from_raw),
 | 
			
		||||
                            prev_content: raw.prev_content.map(crate::FromRaw::from_raw),
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    Content::Typedef(_) => {
 | 
			
		||||
@ -327,16 +327,15 @@ impl ToTokens for RumaEvent {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                quote! {
 | 
			
		||||
                    impl crate::TryFromRaw for #content_name {
 | 
			
		||||
                    impl crate::FromRaw for #content_name {
 | 
			
		||||
                        type Raw = raw::#content_name;
 | 
			
		||||
                        type Err = crate::Void;
 | 
			
		||||
 | 
			
		||||
                        fn try_from_raw(
 | 
			
		||||
                        fn from_raw(
 | 
			
		||||
                            raw: raw::#content_name
 | 
			
		||||
                        ) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
                            Ok(Self {
 | 
			
		||||
                        ) -> Self {
 | 
			
		||||
                            Self {
 | 
			
		||||
                                #(#content_field_values)*
 | 
			
		||||
                            })
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
@ -353,14 +352,13 @@ impl ToTokens for RumaEvent {
 | 
			
		||||
 | 
			
		||||
            #content
 | 
			
		||||
 | 
			
		||||
            impl crate::TryFromRaw for #name {
 | 
			
		||||
            impl crate::FromRaw for #name {
 | 
			
		||||
                type Raw = raw::#name;
 | 
			
		||||
                type Err = crate::Void;
 | 
			
		||||
 | 
			
		||||
                fn try_from_raw(raw: raw::#name) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
                    Ok(Self {
 | 
			
		||||
                fn from_raw(raw: raw::#name) -> Self {
 | 
			
		||||
                    Self {
 | 
			
		||||
                        #(#try_from_field_values)*
 | 
			
		||||
                    })
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -105,6 +105,15 @@ impl<T: TryFromRaw> EventResult<T> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Marks types that can be deserialized as EventResult<Self> (and don't need fallible conversion
 | 
			
		||||
/// from their raw type)
 | 
			
		||||
pub trait FromRaw: Sized {
 | 
			
		||||
    /// The raw form of this event that deserialization falls back to if deserializing `Self` fails.
 | 
			
		||||
    type Raw: DeserializeOwned;
 | 
			
		||||
 | 
			
		||||
    fn from_raw(_: Self::Raw) -> Self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub trait TryFromRaw {
 | 
			
		||||
    /// The raw form of this event that deserialization falls back to if deserializing `Self` fails.
 | 
			
		||||
    type Raw;
 | 
			
		||||
@ -113,13 +122,12 @@ pub trait TryFromRaw {
 | 
			
		||||
    fn try_from_raw(_: Self::Raw) -> Result<Self, (Self::Err, Self::Raw)>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn from_raw<T>(raw: T::Raw) -> T
 | 
			
		||||
where
 | 
			
		||||
    T: TryFromRaw<Err = Void>,
 | 
			
		||||
{
 | 
			
		||||
    match T::try_from_raw(raw) {
 | 
			
		||||
        Ok(c) => c,
 | 
			
		||||
        Err((void, _)) => match void {},
 | 
			
		||||
impl<T: FromRaw> TryFromRaw for T {
 | 
			
		||||
    type Raw = <T as FromRaw>::Raw;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: Self::Raw) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self::from_raw(raw))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -336,7 +336,7 @@ pub enum StateEvent {
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for Event {
 | 
			
		||||
    type Raw = raw::Event;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
    type Err = String;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::Event) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        unimplemented!()
 | 
			
		||||
@ -345,7 +345,7 @@ impl TryFromRaw for Event {
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for RoomEvent {
 | 
			
		||||
    type Raw = raw::RoomEvent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
    type Err = String;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::RoomEvent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        unimplemented!()
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@
 | 
			
		||||
use ruma_identifiers::UserId;
 | 
			
		||||
use serde::{ser::SerializeStruct, Deserialize, Serialize, Serializer};
 | 
			
		||||
 | 
			
		||||
use crate::{vec_as_map_of_empty, Event as _, EventType, TryFromRaw, Void};
 | 
			
		||||
use crate::{vec_as_map_of_empty, Event as _, EventType, FromRaw};
 | 
			
		||||
 | 
			
		||||
/// A list of users to ignore.
 | 
			
		||||
#[derive(Clone, Debug, PartialEq)]
 | 
			
		||||
@ -12,14 +12,13 @@ pub struct IgnoredUserListEvent {
 | 
			
		||||
    pub content: IgnoredUserListEventContent,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for IgnoredUserListEvent {
 | 
			
		||||
impl FromRaw for IgnoredUserListEvent {
 | 
			
		||||
    type Raw = raw::IgnoredUserListEvent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::IgnoredUserListEvent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self {
 | 
			
		||||
            content: crate::from_raw(raw.content),
 | 
			
		||||
        })
 | 
			
		||||
    fn from_raw(raw: raw::IgnoredUserListEvent) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            content: FromRaw::from_raw(raw.content),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -44,14 +43,13 @@ pub struct IgnoredUserListEventContent {
 | 
			
		||||
    pub ignored_users: Vec<UserId>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for IgnoredUserListEventContent {
 | 
			
		||||
impl FromRaw for IgnoredUserListEventContent {
 | 
			
		||||
    type Raw = raw::IgnoredUserListEventContent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::IgnoredUserListEventContent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self {
 | 
			
		||||
    fn from_raw(raw: raw::IgnoredUserListEventContent) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            ignored_users: raw.ignored_users,
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										28
									
								
								src/lib.rs
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								src/lib.rs
									
									
									
									
									
								
							@ -245,6 +245,15 @@ impl Display for InvalidInput {
 | 
			
		||||
 | 
			
		||||
impl Error for InvalidInput {}
 | 
			
		||||
 | 
			
		||||
/// Marks types that can be deserialized as EventResult<Self> (and don't need fallible conversion
 | 
			
		||||
/// from their raw type)
 | 
			
		||||
pub trait FromRaw: Sized {
 | 
			
		||||
    /// The raw form of this event that deserialization falls back to if deserializing `Self` fails.
 | 
			
		||||
    type Raw: DeserializeOwned;
 | 
			
		||||
 | 
			
		||||
    fn from_raw(_: Self::Raw) -> Self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Marks types that can be deserialized as EventResult<Self>
 | 
			
		||||
pub trait TryFromRaw: Sized {
 | 
			
		||||
    /// The raw form of this event that deserialization falls back to if deserializing `Self` fails.
 | 
			
		||||
@ -254,6 +263,15 @@ pub trait TryFromRaw: Sized {
 | 
			
		||||
    fn try_from_raw(_: Self::Raw) -> Result<Self, (Self::Err, Self::Raw)>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: FromRaw> TryFromRaw for T {
 | 
			
		||||
    type Raw = <T as FromRaw>::Raw;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: Self::Raw) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self::from_raw(raw))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO: Replace with ! once that is stable
 | 
			
		||||
/// An empty type
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
@ -265,16 +283,6 @@ impl From<Void> for String {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn from_raw<T>(raw: T::Raw) -> T
 | 
			
		||||
where
 | 
			
		||||
    T: TryFromRaw<Err = Void>,
 | 
			
		||||
{
 | 
			
		||||
    match T::try_from_raw(raw) {
 | 
			
		||||
        Ok(c) => c,
 | 
			
		||||
        Err((void, _)) => match void {},
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// The result of deserializing an event, which may or may not be valid.
 | 
			
		||||
///
 | 
			
		||||
/// When data is successfully deserialized and validated, this structure will contain the
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ use ruma_identifiers::{EventId, RoomAliasId, RoomId, UserId};
 | 
			
		||||
use serde::{ser::SerializeStruct, Deserialize, Serialize, Serializer};
 | 
			
		||||
use serde_json::Value;
 | 
			
		||||
 | 
			
		||||
use crate::{empty_string_as_none, Event, EventType, TryFromRaw, Void};
 | 
			
		||||
use crate::{empty_string_as_none, Event, EventType, FromRaw};
 | 
			
		||||
 | 
			
		||||
/// Informs the room as to which alias is the canonical one.
 | 
			
		||||
#[derive(Clone, Debug, PartialEq)]
 | 
			
		||||
@ -45,30 +45,28 @@ pub struct CanonicalAliasEventContent {
 | 
			
		||||
    pub alias: Option<RoomAliasId>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for CanonicalAliasEvent {
 | 
			
		||||
impl FromRaw for CanonicalAliasEvent {
 | 
			
		||||
    type Raw = raw::CanonicalAliasEvent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::CanonicalAliasEvent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self {
 | 
			
		||||
            content: crate::from_raw(raw.content),
 | 
			
		||||
    fn from_raw(raw: raw::CanonicalAliasEvent) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            content: FromRaw::from_raw(raw.content),
 | 
			
		||||
            event_id: raw.event_id,
 | 
			
		||||
            origin_server_ts: raw.origin_server_ts,
 | 
			
		||||
            prev_content: raw.prev_content.map(crate::from_raw),
 | 
			
		||||
            prev_content: raw.prev_content.map(FromRaw::from_raw),
 | 
			
		||||
            room_id: raw.room_id,
 | 
			
		||||
            sender: raw.sender,
 | 
			
		||||
            state_key: raw.state_key,
 | 
			
		||||
            unsigned: raw.unsigned,
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for CanonicalAliasEventContent {
 | 
			
		||||
impl FromRaw for CanonicalAliasEventContent {
 | 
			
		||||
    type Raw = raw::CanonicalAliasEventContent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::CanonicalAliasEventContent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self { alias: raw.alias })
 | 
			
		||||
    fn from_raw(raw: raw::CanonicalAliasEventContent) -> Self {
 | 
			
		||||
        Self { alias: raw.alias }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ use ruma_identifiers::{DeviceId, EventId, RoomId, UserId};
 | 
			
		||||
use serde::{de::Error, ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer};
 | 
			
		||||
use serde_json::{from_value, Value};
 | 
			
		||||
 | 
			
		||||
use crate::{Algorithm, Event, EventType, TryFromRaw, Void};
 | 
			
		||||
use crate::{Algorithm, Event, EventType, FromRaw};
 | 
			
		||||
 | 
			
		||||
/// This event type is used when sending encrypted events.
 | 
			
		||||
///
 | 
			
		||||
@ -48,36 +48,34 @@ pub enum EncryptedEventContent {
 | 
			
		||||
    __Nonexhaustive,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for EncryptedEvent {
 | 
			
		||||
impl FromRaw for EncryptedEvent {
 | 
			
		||||
    type Raw = raw::EncryptedEvent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::EncryptedEvent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self {
 | 
			
		||||
            content: crate::from_raw(raw.content),
 | 
			
		||||
    fn from_raw(raw: raw::EncryptedEvent) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            content: FromRaw::from_raw(raw.content),
 | 
			
		||||
            event_id: raw.event_id,
 | 
			
		||||
            origin_server_ts: raw.origin_server_ts,
 | 
			
		||||
            room_id: raw.room_id,
 | 
			
		||||
            sender: raw.sender,
 | 
			
		||||
            unsigned: raw.unsigned,
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for EncryptedEventContent {
 | 
			
		||||
impl FromRaw for EncryptedEventContent {
 | 
			
		||||
    type Raw = raw::EncryptedEventContent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::EncryptedEventContent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
    fn from_raw(raw: raw::EncryptedEventContent) -> Self {
 | 
			
		||||
        use raw::EncryptedEventContent::*;
 | 
			
		||||
 | 
			
		||||
        Ok(match raw {
 | 
			
		||||
        match raw {
 | 
			
		||||
            OlmV1Curve25519AesSha2(content) => Self::OlmV1Curve25519AesSha2(content),
 | 
			
		||||
            MegolmV1AesSha2(content) => Self::MegolmV1AesSha2(content),
 | 
			
		||||
            __Nonexhaustive => {
 | 
			
		||||
                unreachable!("__Nonexhaustive variant should be impossible to obtain.")
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ use serde::{
 | 
			
		||||
use serde_json::{from_value, Value};
 | 
			
		||||
 | 
			
		||||
use super::{EncryptedFile, ImageInfo, ThumbnailInfo};
 | 
			
		||||
use crate::{Event, EventType, TryFromRaw, Void};
 | 
			
		||||
use crate::{Event, EventType, FromRaw};
 | 
			
		||||
 | 
			
		||||
pub mod feedback;
 | 
			
		||||
 | 
			
		||||
@ -74,30 +74,28 @@ pub enum MessageEventContent {
 | 
			
		||||
    __Nonexhaustive,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for MessageEvent {
 | 
			
		||||
impl FromRaw for MessageEvent {
 | 
			
		||||
    type Raw = raw::MessageEvent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::MessageEvent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self {
 | 
			
		||||
            content: crate::from_raw(raw.content),
 | 
			
		||||
    fn from_raw(raw: raw::MessageEvent) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            content: FromRaw::from_raw(raw.content),
 | 
			
		||||
            event_id: raw.event_id,
 | 
			
		||||
            origin_server_ts: raw.origin_server_ts,
 | 
			
		||||
            room_id: raw.room_id,
 | 
			
		||||
            sender: raw.sender,
 | 
			
		||||
            unsigned: raw.unsigned,
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for MessageEventContent {
 | 
			
		||||
impl FromRaw for MessageEventContent {
 | 
			
		||||
    type Raw = raw::MessageEventContent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::MessageEventContent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
    fn from_raw(raw: raw::MessageEventContent) -> Self {
 | 
			
		||||
        use raw::MessageEventContent::*;
 | 
			
		||||
 | 
			
		||||
        Ok(match raw {
 | 
			
		||||
        match raw {
 | 
			
		||||
            Audio(content) => Self::Audio(content),
 | 
			
		||||
            Emote(content) => Self::Emote(content),
 | 
			
		||||
            File(content) => Self::File(content),
 | 
			
		||||
@ -110,7 +108,7 @@ impl TryFromRaw for MessageEventContent {
 | 
			
		||||
            __Nonexhaustive => {
 | 
			
		||||
                unreachable!("It should be impossible to obtain a __Nonexhaustive variant.")
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ use ruma_identifiers::{EventId, RoomId, UserId};
 | 
			
		||||
use serde::{ser::SerializeStruct, Deserialize, Serialize, Serializer};
 | 
			
		||||
use serde_json::Value;
 | 
			
		||||
 | 
			
		||||
use crate::{empty_string_as_none, Event as _, EventType, InvalidInput, TryFromRaw, Void};
 | 
			
		||||
use crate::{empty_string_as_none, Event as _, EventType, FromRaw, InvalidInput};
 | 
			
		||||
 | 
			
		||||
/// A human-friendly room name designed to be displayed to the end-user.
 | 
			
		||||
#[derive(Clone, Debug, PartialEq)]
 | 
			
		||||
@ -43,30 +43,28 @@ pub struct NameEventContent {
 | 
			
		||||
    pub(crate) name: Option<String>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for NameEvent {
 | 
			
		||||
impl FromRaw for NameEvent {
 | 
			
		||||
    type Raw = raw::NameEvent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::NameEvent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self {
 | 
			
		||||
            content: crate::from_raw(raw.content),
 | 
			
		||||
    fn from_raw(raw: raw::NameEvent) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            content: FromRaw::from_raw(raw.content),
 | 
			
		||||
            event_id: raw.event_id,
 | 
			
		||||
            origin_server_ts: raw.origin_server_ts,
 | 
			
		||||
            prev_content: raw.prev_content.map(crate::from_raw),
 | 
			
		||||
            prev_content: raw.prev_content.map(FromRaw::from_raw),
 | 
			
		||||
            room_id: raw.room_id,
 | 
			
		||||
            sender: raw.sender,
 | 
			
		||||
            state_key: raw.state_key,
 | 
			
		||||
            unsigned: raw.unsigned,
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for NameEventContent {
 | 
			
		||||
impl FromRaw for NameEventContent {
 | 
			
		||||
    type Raw = raw::NameEventContent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::NameEventContent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self { name: raw.name })
 | 
			
		||||
    fn from_raw(raw: raw::NameEventContent) -> Self {
 | 
			
		||||
        Self { name: raw.name }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ use ruma_identifiers::{EventId, RoomId, UserId};
 | 
			
		||||
use serde::{ser::SerializeStruct, Deserialize, Serialize, Serializer};
 | 
			
		||||
use serde_json::Value;
 | 
			
		||||
 | 
			
		||||
use crate::{Event as _, EventType, TryFromRaw, Void};
 | 
			
		||||
use crate::{Event as _, EventType, FromRaw};
 | 
			
		||||
 | 
			
		||||
/// Defines the power levels (privileges) of users in the room.
 | 
			
		||||
#[derive(Clone, Debug, PartialEq)]
 | 
			
		||||
@ -85,30 +85,28 @@ pub struct PowerLevelsEventContent {
 | 
			
		||||
    pub notifications: NotificationPowerLevels,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for PowerLevelsEvent {
 | 
			
		||||
impl FromRaw for PowerLevelsEvent {
 | 
			
		||||
    type Raw = raw::PowerLevelsEvent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::PowerLevelsEvent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self {
 | 
			
		||||
            content: crate::from_raw(raw.content),
 | 
			
		||||
    fn from_raw(raw: raw::PowerLevelsEvent) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            content: FromRaw::from_raw(raw.content),
 | 
			
		||||
            event_id: raw.event_id,
 | 
			
		||||
            origin_server_ts: raw.origin_server_ts,
 | 
			
		||||
            prev_content: raw.prev_content.map(crate::from_raw),
 | 
			
		||||
            prev_content: raw.prev_content.map(FromRaw::from_raw),
 | 
			
		||||
            room_id: raw.room_id,
 | 
			
		||||
            unsigned: raw.unsigned,
 | 
			
		||||
            sender: raw.sender,
 | 
			
		||||
            state_key: raw.state_key,
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for PowerLevelsEventContent {
 | 
			
		||||
impl FromRaw for PowerLevelsEventContent {
 | 
			
		||||
    type Raw = raw::PowerLevelsEventContent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::PowerLevelsEventContent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self {
 | 
			
		||||
    fn from_raw(raw: raw::PowerLevelsEventContent) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            ban: raw.ban,
 | 
			
		||||
            events: raw.events,
 | 
			
		||||
            events_default: raw.events_default,
 | 
			
		||||
@ -119,7 +117,7 @@ impl TryFromRaw for PowerLevelsEventContent {
 | 
			
		||||
            users: raw.users,
 | 
			
		||||
            users_default: raw.users_default,
 | 
			
		||||
            notifications: raw.notifications,
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ use ruma_identifiers::{EventId, RoomId, UserId};
 | 
			
		||||
use serde::{ser::SerializeStruct, Deserialize, Serialize, Serializer};
 | 
			
		||||
use serde_json::Value;
 | 
			
		||||
 | 
			
		||||
use crate::{default_true, Event as _, EventType, TryFromRaw, Void};
 | 
			
		||||
use crate::{default_true, Event as _, EventType, FromRaw};
 | 
			
		||||
 | 
			
		||||
/// An event to indicate which servers are permitted to participate in the room.
 | 
			
		||||
#[derive(Clone, Debug, PartialEq)]
 | 
			
		||||
@ -65,34 +65,32 @@ pub struct ServerAclEventContent {
 | 
			
		||||
    pub deny: Vec<String>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for ServerAclEvent {
 | 
			
		||||
impl FromRaw for ServerAclEvent {
 | 
			
		||||
    type Raw = raw::ServerAclEvent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::ServerAclEvent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self {
 | 
			
		||||
            content: crate::from_raw(raw.content),
 | 
			
		||||
    fn from_raw(raw: raw::ServerAclEvent) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            content: FromRaw::from_raw(raw.content),
 | 
			
		||||
            event_id: raw.event_id,
 | 
			
		||||
            origin_server_ts: raw.origin_server_ts,
 | 
			
		||||
            prev_content: raw.prev_content.map(crate::from_raw),
 | 
			
		||||
            prev_content: raw.prev_content.map(FromRaw::from_raw),
 | 
			
		||||
            room_id: raw.room_id,
 | 
			
		||||
            sender: raw.sender,
 | 
			
		||||
            state_key: raw.state_key,
 | 
			
		||||
            unsigned: raw.unsigned,
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFromRaw for ServerAclEventContent {
 | 
			
		||||
impl FromRaw for ServerAclEventContent {
 | 
			
		||||
    type Raw = raw::ServerAclEventContent;
 | 
			
		||||
    type Err = Void;
 | 
			
		||||
 | 
			
		||||
    fn try_from_raw(raw: raw::ServerAclEventContent) -> Result<Self, (Self::Err, Self::Raw)> {
 | 
			
		||||
        Ok(Self {
 | 
			
		||||
    fn from_raw(raw: raw::ServerAclEventContent) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            allow_ip_literals: raw.allow_ip_literals,
 | 
			
		||||
            allow: raw.allow,
 | 
			
		||||
            deny: raw.deny,
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user