Remove src/from_raw.rs and ruma-events-macro/src/from_raw.rs
This commit is contained in:
parent
8c271fb835
commit
ef3a6787a0
@ -1,64 +0,0 @@
|
|||||||
//! Implementation of the `FromRaw` derive macro
|
|
||||||
|
|
||||||
use proc_macro2::TokenStream;
|
|
||||||
use quote::{quote, quote_spanned};
|
|
||||||
use syn::{spanned::Spanned, Data, DeriveInput, Fields};
|
|
||||||
|
|
||||||
/// Create a `FromRaw` implementation for a struct
|
|
||||||
pub fn expand_from_raw(input: DeriveInput) -> syn::Result<TokenStream> {
|
|
||||||
let fields = match input.data {
|
|
||||||
Data::Struct(s) => match s.fields {
|
|
||||||
Fields::Named(fs) => fs.named,
|
|
||||||
_ => panic!("#[derive(FromRaw)] only supports structs with named fields!"),
|
|
||||||
},
|
|
||||||
_ => panic!("#[derive(FromRaw)] only supports structs!"),
|
|
||||||
};
|
|
||||||
let ident = &input.ident;
|
|
||||||
|
|
||||||
let raw_content = {
|
|
||||||
let fields = fields.iter();
|
|
||||||
quote! {
|
|
||||||
#[derive(Clone, Debug, serde::Deserialize)]
|
|
||||||
pub struct #ident {
|
|
||||||
#(#fields),*
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let init_list = fields.iter().map(|field| {
|
|
||||||
let field_ident = field.ident.as_ref().unwrap();
|
|
||||||
let field_span = field.span();
|
|
||||||
|
|
||||||
if field_ident == "content" {
|
|
||||||
quote_spanned! {field_span=>
|
|
||||||
content: ::ruma_events::FromRaw::from_raw(raw.content),
|
|
||||||
}
|
|
||||||
} else if field_ident == "prev_content" {
|
|
||||||
quote_spanned! {field_span=>
|
|
||||||
prev_content: raw.prev_content.map(::ruma_events::FromRaw::from_raw),
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
quote_spanned! {field_span=>
|
|
||||||
#field_ident: raw.#field_ident,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Ok(quote! {
|
|
||||||
impl ::ruma_events::FromRaw for #ident {
|
|
||||||
type Raw = raw::#ident;
|
|
||||||
|
|
||||||
fn from_raw(raw: raw::#ident) -> Self {
|
|
||||||
Self {
|
|
||||||
#(#init_list)*
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) mod raw {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#raw_content
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
@ -83,7 +83,7 @@ impl ToTokens for RumaEvent {
|
|||||||
Content::Struct(fields) => {
|
Content::Struct(fields) => {
|
||||||
quote! {
|
quote! {
|
||||||
#[doc = #content_docstring]
|
#[doc = #content_docstring]
|
||||||
#[derive(Clone, Debug, ::serde::Serialize, ::ruma_events_macros::FromRaw)]
|
#[derive(Clone, Debug, ::serde::Serialize, ::serde::Deserialize)]
|
||||||
pub struct #content_name {
|
pub struct #content_name {
|
||||||
#(#fields),*
|
#(#fields),*
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@ use self::{
|
|||||||
content_enum::{expand_content_enum, parse::ContentEnumInput},
|
content_enum::{expand_content_enum, parse::ContentEnumInput},
|
||||||
event::expand_event,
|
event::expand_event,
|
||||||
event_content::{expand_message_event_content, expand_state_event_content},
|
event_content::{expand_message_event_content, expand_state_event_content},
|
||||||
from_raw::expand_from_raw,
|
|
||||||
gen::RumaEvent,
|
gen::RumaEvent,
|
||||||
parse::RumaEventInput,
|
parse::RumaEventInput,
|
||||||
};
|
};
|
||||||
@ -26,7 +25,6 @@ use self::{
|
|||||||
mod content_enum;
|
mod content_enum;
|
||||||
mod event;
|
mod event;
|
||||||
mod event_content;
|
mod event_content;
|
||||||
mod from_raw;
|
|
||||||
mod gen;
|
mod gen;
|
||||||
mod parse;
|
mod parse;
|
||||||
|
|
||||||
@ -136,17 +134,6 @@ pub fn event_content_enum(input: TokenStream) -> TokenStream {
|
|||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generates an implementation of `ruma_events::FromRaw`. Only usable inside of `ruma_events`.
|
|
||||||
/// Requires there to be a `raw` module in the same scope, with a type with the same name and fields
|
|
||||||
/// as the one that this macro is used on.
|
|
||||||
#[proc_macro_derive(FromRaw)]
|
|
||||||
pub fn derive_from_raw(input: TokenStream) -> TokenStream {
|
|
||||||
let input = parse_macro_input!(input as DeriveInput);
|
|
||||||
expand_from_raw(input)
|
|
||||||
.unwrap_or_else(|err| err.to_compile_error())
|
|
||||||
.into()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Generates an implementation of `ruma_events::MessageEventContent` and it's super traits.
|
/// Generates an implementation of `ruma_events::MessageEventContent` and it's super traits.
|
||||||
#[proc_macro_derive(MessageEventContent, attributes(ruma_event))]
|
#[proc_macro_derive(MessageEventContent, attributes(ruma_event))]
|
||||||
pub fn derive_message_event_content(input: TokenStream) -> TokenStream {
|
pub fn derive_message_event_content(input: TokenStream) -> TokenStream {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//! Types for the *m.call.candidates* event.
|
//! Types for the *m.call.candidates* event.
|
||||||
|
|
||||||
use js_int::UInt;
|
use js_int::UInt;
|
||||||
use ruma_events_macros::{FromRaw, MessageEventContent};
|
use ruma_events_macros::MessageEventContent;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
/// This event is sent by callers after sending an invite and by the callee after answering. Its
|
/// This event is sent by callers after sending an invite and by the callee after answering. Its
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//! Types for the *m.call.hangup* event.
|
//! Types for the *m.call.hangup* event.
|
||||||
|
|
||||||
use js_int::UInt;
|
use js_int::UInt;
|
||||||
use ruma_events_macros::{FromRaw, MessageEventContent};
|
use ruma_events_macros::MessageEventContent;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use strum::{Display, EnumString};
|
use strum::{Display, EnumString};
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ use serde::{
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
BasicEventContent, MessageEventContent, RoomEventContent, StateEventContent,
|
BasicEventContent, MessageEventContent, RoomEventContent, StateEventContent,
|
||||||
ToDeviceEventContent, TryFromRaw, UnsignedData,
|
ToDeviceEventContent, UnsignedData,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// A basic event – one that consists only of it's type and the `content` object.
|
/// A basic event – one that consists only of it's type and the `content` object.
|
||||||
|
@ -1,64 +0,0 @@
|
|||||||
use std::{collections::BTreeMap, convert::Infallible, fmt::Display};
|
|
||||||
|
|
||||||
use serde::de::DeserializeOwned;
|
|
||||||
|
|
||||||
/// See [`TryFromRaw`][try]. This trait is merely a convenience that is be implemented instead of
|
|
||||||
/// [`TryFromRaw`][try] to get a [`TryFromRaw`][try] implementation with slightly less code if the
|
|
||||||
/// conversion can't fail, that is, the raw type and `Self` are identical in definition.
|
|
||||||
///
|
|
||||||
/// [try]: trait.TryFromRaw.html
|
|
||||||
pub trait FromRaw: Sized {
|
|
||||||
/// The raw type.
|
|
||||||
type Raw;
|
|
||||||
|
|
||||||
/// Converts the raw type to `Self`.
|
|
||||||
fn from_raw(_: Self::Raw) -> Self;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Types corresponding to some item in the matrix spec. Types that implement this trait have a
|
|
||||||
/// corresponding 'raw' type, a potentially invalid representation that can be converted to `Self`.
|
|
||||||
pub trait TryFromRaw: Sized {
|
|
||||||
/// The raw type.
|
|
||||||
type Raw;
|
|
||||||
/// The error type returned if conversion fails.
|
|
||||||
type Err: Display;
|
|
||||||
|
|
||||||
/// Tries to convert the raw type to `Self`.
|
|
||||||
fn try_from_raw(_: Self::Raw) -> Result<Self, Self::Err>;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FromRaw for ruma_serde::empty::Empty {
|
|
||||||
type Raw = Self;
|
|
||||||
|
|
||||||
fn from_raw(raw: Self) -> Self {
|
|
||||||
raw
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FromRaw for serde_json::Value {
|
|
||||||
type Raw = Self;
|
|
||||||
|
|
||||||
fn from_raw(raw: Self) -> Self {
|
|
||||||
raw
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<K, V> FromRaw for BTreeMap<K, V>
|
|
||||||
where
|
|
||||||
Self: DeserializeOwned,
|
|
||||||
{
|
|
||||||
type Raw = Self;
|
|
||||||
|
|
||||||
fn from_raw(raw: Self) -> Self {
|
|
||||||
raw
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: FromRaw> TryFromRaw for T {
|
|
||||||
type Raw = <T as FromRaw>::Raw;
|
|
||||||
type Err = Infallible;
|
|
||||||
|
|
||||||
fn try_from_raw(raw: Self::Raw) -> Result<Self, Self::Err> {
|
|
||||||
Ok(Self::from_raw(raw))
|
|
||||||
}
|
|
||||||
}
|
|
@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
use super::{
|
use super::{
|
||||||
HashAlgorithm, KeyAgreementProtocol, MessageAuthenticationCode, ShortAuthenticationString,
|
HashAlgorithm, KeyAgreementProtocol, MessageAuthenticationCode, ShortAuthenticationString,
|
||||||
};
|
};
|
||||||
use crate::{InvalidInput, TryFromRaw};
|
use crate::InvalidInput;
|
||||||
|
|
||||||
/// Begins an SAS key verification process.
|
/// Begins an SAS key verification process.
|
||||||
///
|
///
|
||||||
@ -27,83 +27,6 @@ pub enum StartEventContent {
|
|||||||
MSasV1(MSasV1Content),
|
MSasV1(MSasV1Content),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TryFromRaw for StartEvent {
|
|
||||||
type Raw = raw::StartEvent;
|
|
||||||
type Err = &'static str;
|
|
||||||
|
|
||||||
fn try_from_raw(raw: raw::StartEvent) -> Result<Self, Self::Err> {
|
|
||||||
StartEventContent::try_from_raw(raw.content).map(|content| Self { content })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TryFromRaw for StartEventContent {
|
|
||||||
type Raw = raw::StartEventContent;
|
|
||||||
type Err = &'static str;
|
|
||||||
|
|
||||||
fn try_from_raw(raw: raw::StartEventContent) -> Result<Self, Self::Err> {
|
|
||||||
match raw {
|
|
||||||
raw::StartEventContent::MSasV1(content) => {
|
|
||||||
if !content
|
|
||||||
.key_agreement_protocols
|
|
||||||
.contains(&KeyAgreementProtocol::Curve25519)
|
|
||||||
{
|
|
||||||
return Err(
|
|
||||||
"`key_agreement_protocols` must contain at least `KeyAgreementProtocol::Curve25519`"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if !content.hashes.contains(&HashAlgorithm::Sha256) {
|
|
||||||
return Err("`hashes` must contain at least `HashAlgorithm::Sha256`");
|
|
||||||
}
|
|
||||||
|
|
||||||
if !content
|
|
||||||
.message_authentication_codes
|
|
||||||
.contains(&MessageAuthenticationCode::HkdfHmacSha256)
|
|
||||||
{
|
|
||||||
return Err(
|
|
||||||
"`message_authentication_codes` must contain at least `MessageAuthenticationCode::HkdfHmacSha256`"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if !content
|
|
||||||
.short_authentication_string
|
|
||||||
.contains(&ShortAuthenticationString::Decimal)
|
|
||||||
{
|
|
||||||
return Err(
|
|
||||||
"`short_authentication_string` must contain at least `ShortAuthenticationString::Decimal`",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(StartEventContent::MSasV1(content))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) mod raw {
|
|
||||||
use serde::Deserialize;
|
|
||||||
|
|
||||||
use super::MSasV1Content;
|
|
||||||
|
|
||||||
/// Begins an SAS key verification process.
|
|
||||||
///
|
|
||||||
/// Typically sent as a to-device event.
|
|
||||||
#[derive(Clone, Debug, Deserialize)]
|
|
||||||
pub struct StartEvent {
|
|
||||||
/// The event's content.
|
|
||||||
pub content: StartEventContent,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The payload of an *m.key.verification.start* event.
|
|
||||||
#[derive(Clone, Debug, Deserialize)]
|
|
||||||
#[serde(tag = "method")]
|
|
||||||
pub enum StartEventContent {
|
|
||||||
/// The *m.sas.v1* verification method.
|
|
||||||
#[serde(rename = "m.sas.v1")]
|
|
||||||
MSasV1(MSasV1Content),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The payload of an *m.key.verification.start* event using the *m.sas.v1* method.
|
/// The payload of an *m.key.verification.start* event using the *m.sas.v1* method.
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
pub struct MSasV1Content {
|
pub struct MSasV1Content {
|
||||||
|
@ -135,7 +135,6 @@ mod error;
|
|||||||
mod event_enums;
|
mod event_enums;
|
||||||
mod event_kinds;
|
mod event_kinds;
|
||||||
mod event_type;
|
mod event_type;
|
||||||
mod from_raw;
|
|
||||||
mod json;
|
mod json;
|
||||||
#[doc(hidden)] // only public for external tests
|
#[doc(hidden)] // only public for external tests
|
||||||
pub mod util;
|
pub mod util;
|
||||||
@ -171,7 +170,6 @@ pub use self::{
|
|||||||
event_enums::AnyStateEvent,
|
event_enums::AnyStateEvent,
|
||||||
event_kinds::{MessageEvent, StateEvent},
|
event_kinds::{MessageEvent, StateEvent},
|
||||||
event_type::EventType,
|
event_type::EventType,
|
||||||
from_raw::{FromRaw, TryFromRaw},
|
|
||||||
json::EventJson,
|
json::EventJson,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
use ruma_events_macros::{FromRaw, StateEventContent};
|
use ruma_events_macros::StateEventContent;
|
||||||
use ruma_identifiers::{EventId, RoomId, RoomVersionId, UserId};
|
use ruma_identifiers::{EventId, RoomId, RoomVersionId, UserId};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ use js_int::UInt;
|
|||||||
use ruma_identifiers::{DeviceId, EventId, RoomId, UserId};
|
use ruma_identifiers::{DeviceId, EventId, RoomId, UserId};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{FromRaw, UnsignedData};
|
use crate::UnsignedData;
|
||||||
|
|
||||||
/// The payload for `EncryptedEvent`.
|
/// The payload for `EncryptedEvent`.
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//! Types for the *m.room.encryption* event.
|
//! Types for the *m.room.encryption* event.
|
||||||
|
|
||||||
use js_int::UInt;
|
use js_int::UInt;
|
||||||
use ruma_events_macros::{FromRaw, StateEventContent};
|
use ruma_events_macros::StateEventContent;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::Algorithm;
|
use crate::Algorithm;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Types for the *m.room.guest_access* event.
|
//! Types for the *m.room.guest_access* event.
|
||||||
|
|
||||||
use ruma_events_macros::{FromRaw, StateEventContent};
|
use ruma_events_macros::StateEventContent;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use strum::{Display, EnumString};
|
use strum::{Display, EnumString};
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Types for the *m.room.history_visibility* event.
|
//! Types for the *m.room.history_visibility* event.
|
||||||
|
|
||||||
use ruma_events_macros::{FromRaw, StateEventContent};
|
use ruma_events_macros::StateEventContent;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use strum::{Display, EnumString};
|
use strum::{Display, EnumString};
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Types for the *m.room.join_rules* event.
|
//! Types for the *m.room.join_rules* event.
|
||||||
|
|
||||||
use ruma_events_macros::{FromRaw, StateEventContent};
|
use ruma_events_macros::StateEventContent;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use strum::{Display, EnumString};
|
use strum::{Display, EnumString};
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
use ruma_events_macros::{FromRaw, StateEventContent};
|
use ruma_events_macros::StateEventContent;
|
||||||
use ruma_identifiers::UserId;
|
use ruma_identifiers::UserId;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use strum::{Display, EnumString};
|
use strum::{Display, EnumString};
|
||||||
|
@ -8,7 +8,7 @@ use ruma_identifiers::{EventId, RoomId, UserId};
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use super::{EncryptedFile, ImageInfo, ThumbnailInfo};
|
use super::{EncryptedFile, ImageInfo, ThumbnailInfo};
|
||||||
use crate::{FromRaw, UnsignedData};
|
use crate::UnsignedData;
|
||||||
|
|
||||||
pub mod feedback;
|
pub mod feedback;
|
||||||
|
|
||||||
@ -54,82 +54,6 @@ pub enum MessageEventContent {
|
|||||||
Video(VideoMessageEventContent),
|
Video(VideoMessageEventContent),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FromRaw for MessageEventContent {
|
|
||||||
type Raw = raw::MessageEventContent;
|
|
||||||
|
|
||||||
fn from_raw(raw: raw::MessageEventContent) -> Self {
|
|
||||||
use raw::MessageEventContent::*;
|
|
||||||
|
|
||||||
match raw {
|
|
||||||
Audio(content) => MessageEventContent::Audio(content),
|
|
||||||
Emote(content) => MessageEventContent::Emote(content),
|
|
||||||
File(content) => MessageEventContent::File(content),
|
|
||||||
Image(content) => MessageEventContent::Image(content),
|
|
||||||
Location(content) => MessageEventContent::Location(content),
|
|
||||||
Notice(content) => MessageEventContent::Notice(content),
|
|
||||||
ServerNotice(content) => MessageEventContent::ServerNotice(content),
|
|
||||||
Text(content) => MessageEventContent::Text(content),
|
|
||||||
Video(content) => MessageEventContent::Video(content),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) mod raw {
|
|
||||||
use std::time::SystemTime;
|
|
||||||
|
|
||||||
use ruma_identifiers::{EventId, RoomId, UserId};
|
|
||||||
use serde::Deserialize;
|
|
||||||
|
|
||||||
use super::{
|
|
||||||
AudioMessageEventContent, EmoteMessageEventContent, FileMessageEventContent,
|
|
||||||
ImageMessageEventContent, LocationMessageEventContent, NoticeMessageEventContent,
|
|
||||||
ServerNoticeMessageEventContent, TextMessageEventContent, VideoMessageEventContent,
|
|
||||||
};
|
|
||||||
use crate::UnsignedData;
|
|
||||||
|
|
||||||
/// The payload for `MessageEvent`.
|
|
||||||
#[allow(clippy::large_enum_variant)]
|
|
||||||
#[derive(Clone, Debug, Deserialize)]
|
|
||||||
#[serde(tag = "msgtype")]
|
|
||||||
pub enum MessageEventContent {
|
|
||||||
/// An audio message.
|
|
||||||
#[serde(rename = "m.audio")]
|
|
||||||
Audio(AudioMessageEventContent),
|
|
||||||
|
|
||||||
/// An emote message.
|
|
||||||
#[serde(rename = "m.emote")]
|
|
||||||
Emote(EmoteMessageEventContent),
|
|
||||||
|
|
||||||
/// A file message.
|
|
||||||
#[serde(rename = "m.file")]
|
|
||||||
File(FileMessageEventContent),
|
|
||||||
|
|
||||||
/// An image message.
|
|
||||||
#[serde(rename = "m.image")]
|
|
||||||
Image(ImageMessageEventContent),
|
|
||||||
|
|
||||||
/// A location message.
|
|
||||||
#[serde(rename = "m.location")]
|
|
||||||
Location(LocationMessageEventContent),
|
|
||||||
|
|
||||||
/// A notice message.
|
|
||||||
#[serde(rename = "m.notice")]
|
|
||||||
Notice(NoticeMessageEventContent),
|
|
||||||
|
|
||||||
/// A server notice message.
|
|
||||||
#[serde(rename = "m.server_notice")]
|
|
||||||
ServerNotice(ServerNoticeMessageEventContent),
|
|
||||||
|
|
||||||
/// An text message.
|
|
||||||
#[serde(rename = "m.text")]
|
|
||||||
Text(TextMessageEventContent),
|
|
||||||
|
|
||||||
/// A video message.
|
|
||||||
#[serde(rename = "m.video")]
|
|
||||||
Video(VideoMessageEventContent),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The payload for an audio message.
|
/// The payload for an audio message.
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
pub struct AudioMessageEventContent {
|
pub struct AudioMessageEventContent {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Types for the *m.room.message.feedback* event.
|
//! Types for the *m.room.message.feedback* event.
|
||||||
|
|
||||||
use ruma_events_macros::{FromRaw, MessageEventContent};
|
use ruma_events_macros::MessageEventContent;
|
||||||
use ruma_identifiers::EventId;
|
use ruma_identifiers::EventId;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use strum::{Display, EnumString};
|
use strum::{Display, EnumString};
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
use js_int::Int;
|
use js_int::Int;
|
||||||
use ruma_events_macros::{FromRaw, StateEventContent};
|
use ruma_events_macros::StateEventContent;
|
||||||
use ruma_identifiers::UserId;
|
use ruma_identifiers::UserId;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Types for the *m.room.third_party_invite* event.
|
//! Types for the *m.room.third_party_invite* event.
|
||||||
|
|
||||||
use ruma_events_macros::{FromRaw, StateEventContent};
|
use ruma_events_macros::StateEventContent;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
/// An invitation to a room issued to a third party identifier, rather than a matrix user ID.
|
/// An invitation to a room issued to a third party identifier, rather than a matrix user ID.
|
||||||
|
11
src/util.rs
11
src/util.rs
@ -1,17 +1,6 @@
|
|||||||
use serde::de::DeserializeOwned;
|
use serde::de::DeserializeOwned;
|
||||||
use serde_json::Value as JsonValue;
|
use serde_json::Value as JsonValue;
|
||||||
|
|
||||||
use crate::TryFromRaw;
|
|
||||||
|
|
||||||
pub fn try_convert_variant<Enum: TryFromRaw, Content: TryFromRaw>(
|
|
||||||
variant: fn(Content) -> Enum,
|
|
||||||
raw: Content::Raw,
|
|
||||||
) -> Result<Enum, String> {
|
|
||||||
Content::try_from_raw(raw)
|
|
||||||
.map(variant)
|
|
||||||
.map_err(|err| err.to_string())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn try_variant_from_value<T, U, E>(value: JsonValue, variant: fn(T) -> U) -> Result<U, E>
|
pub fn try_variant_from_value<T, U, E>(value: JsonValue, variant: fn(T) -> U) -> Result<U, E>
|
||||||
where
|
where
|
||||||
T: DeserializeOwned,
|
T: DeserializeOwned,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user