Derive Serialize for collection types
This commit is contained in:
parent
9e50de0d13
commit
a9840164cd
@ -1,7 +1,7 @@
|
|||||||
//! Enums for heterogeneous collections of events, inclusive for every event type that implements
|
//! Enums for heterogeneous collections of events, inclusive for every event type that implements
|
||||||
//! the trait of the same name.
|
//! the trait of the same name.
|
||||||
|
|
||||||
use serde::{Serialize, Serializer};
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::raw::all as raw;
|
use super::raw::all as raw;
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -50,7 +50,8 @@ use crate::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// A basic event, room event, or state event.
|
/// A basic event, room event, or state event.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug, Serialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
#[allow(clippy::large_enum_variant)]
|
#[allow(clippy::large_enum_variant)]
|
||||||
pub enum Event {
|
pub enum Event {
|
||||||
/// m.call.answer
|
/// m.call.answer
|
||||||
@ -193,7 +194,8 @@ pub enum Event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// A room event or state event.
|
/// A room event or state event.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug, Serialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
#[allow(clippy::large_enum_variant)]
|
#[allow(clippy::large_enum_variant)]
|
||||||
pub enum RoomEvent {
|
pub enum RoomEvent {
|
||||||
/// m.call.answer
|
/// m.call.answer
|
||||||
@ -279,7 +281,8 @@ pub enum RoomEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// A state event.
|
/// A state event.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug, Serialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
#[allow(clippy::large_enum_variant)]
|
#[allow(clippy::large_enum_variant)]
|
||||||
pub enum StateEvent {
|
pub enum StateEvent {
|
||||||
/// m.room.aliases
|
/// m.room.aliases
|
||||||
@ -479,126 +482,6 @@ impl TryFromRaw for StateEvent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for Event {
|
|
||||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
||||||
where
|
|
||||||
S: Serializer,
|
|
||||||
{
|
|
||||||
match *self {
|
|
||||||
Event::CallAnswer(ref event) => event.serialize(serializer),
|
|
||||||
Event::CallCandidates(ref event) => event.serialize(serializer),
|
|
||||||
Event::CallHangup(ref event) => event.serialize(serializer),
|
|
||||||
Event::CallInvite(ref event) => event.serialize(serializer),
|
|
||||||
Event::Direct(ref event) => event.serialize(serializer),
|
|
||||||
Event::Dummy(ref event) => event.serialize(serializer),
|
|
||||||
Event::ForwardedRoomKey(ref event) => event.serialize(serializer),
|
|
||||||
Event::FullyRead(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationAccept(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationCancel(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationKey(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationMac(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationRequest(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationStart(ref event) => event.serialize(serializer),
|
|
||||||
Event::IgnoredUserList(ref event) => event.serialize(serializer),
|
|
||||||
Event::Presence(ref event) => event.serialize(serializer),
|
|
||||||
Event::PushRules(ref event) => event.serialize(serializer),
|
|
||||||
Event::Receipt(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomAliases(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomAvatar(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomCanonicalAlias(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomCreate(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomEncrypted(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomEncryption(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomGuestAccess(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomHistoryVisibility(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomJoinRules(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomMember(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomMessage(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomMessageFeedback(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomName(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomPinnedEvents(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomPowerLevels(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomRedaction(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomServerAcl(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomThirdPartyInvite(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomTombstone(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomTopic(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomKey(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomKeyRequest(ref event) => event.serialize(serializer),
|
|
||||||
Event::Sticker(ref event) => event.serialize(serializer),
|
|
||||||
Event::Tag(ref event) => event.serialize(serializer),
|
|
||||||
Event::Typing(ref event) => event.serialize(serializer),
|
|
||||||
Event::Custom(ref event) => event.serialize(serializer),
|
|
||||||
Event::CustomRoom(ref event) => event.serialize(serializer),
|
|
||||||
Event::CustomState(ref event) => event.serialize(serializer),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Serialize for RoomEvent {
|
|
||||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
||||||
where
|
|
||||||
S: Serializer,
|
|
||||||
{
|
|
||||||
match *self {
|
|
||||||
RoomEvent::CallAnswer(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::CallCandidates(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::CallHangup(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::CallInvite(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomAliases(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomAvatar(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomCanonicalAlias(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomCreate(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomEncrypted(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomEncryption(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomGuestAccess(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomHistoryVisibility(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomJoinRules(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomMember(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomMessage(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomMessageFeedback(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomName(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomPinnedEvents(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomPowerLevels(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomRedaction(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomServerAcl(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomThirdPartyInvite(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomTombstone(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomTopic(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::Sticker(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::CustomRoom(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::CustomState(ref event) => event.serialize(serializer),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Serialize for StateEvent {
|
|
||||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
||||||
where
|
|
||||||
S: Serializer,
|
|
||||||
{
|
|
||||||
match *self {
|
|
||||||
StateEvent::RoomAliases(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomAvatar(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomCanonicalAlias(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomCreate(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomEncryption(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomGuestAccess(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomHistoryVisibility(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomJoinRules(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomMember(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomName(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomPinnedEvents(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomPowerLevels(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomServerAcl(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomThirdPartyInvite(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomTombstone(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::RoomTopic(ref event) => event.serialize(serializer),
|
|
||||||
StateEvent::CustomState(ref event) => event.serialize(serializer),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
macro_rules! impl_from_t_for_event {
|
macro_rules! impl_from_t_for_event {
|
||||||
($ty:ty, $variant:ident) => {
|
($ty:ty, $variant:ident) => {
|
||||||
impl From<$ty> for Event {
|
impl From<$ty> for Event {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//! Enums for heterogeneous collections of events, exclusive to event types that implement "at
|
//! Enums for heterogeneous collections of events, exclusive to event types that implement "at
|
||||||
//! most" the trait of the same name.
|
//! most" the trait of the same name.
|
||||||
|
|
||||||
use serde::{Serialize, Serializer};
|
use serde::Serialize;
|
||||||
|
|
||||||
pub use super::{all::StateEvent, raw::only as raw};
|
pub use super::{all::StateEvent, raw::only as raw};
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -34,7 +34,8 @@ use crate::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// A basic event.
|
/// A basic event.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug, Serialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
#[allow(clippy::large_enum_variant)]
|
#[allow(clippy::large_enum_variant)]
|
||||||
pub enum Event {
|
pub enum Event {
|
||||||
/// m.direct
|
/// m.direct
|
||||||
@ -96,7 +97,8 @@ pub enum Event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// A room event.
|
/// A room event.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug, Serialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
#[allow(clippy::large_enum_variant)]
|
#[allow(clippy::large_enum_variant)]
|
||||||
pub enum RoomEvent {
|
pub enum RoomEvent {
|
||||||
/// m.call.answer
|
/// m.call.answer
|
||||||
@ -191,55 +193,6 @@ impl TryFromRaw for RoomEvent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for Event {
|
|
||||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
||||||
where
|
|
||||||
S: Serializer,
|
|
||||||
{
|
|
||||||
match *self {
|
|
||||||
Event::Direct(ref event) => event.serialize(serializer),
|
|
||||||
Event::Dummy(ref event) => event.serialize(serializer),
|
|
||||||
Event::ForwardedRoomKey(ref event) => event.serialize(serializer),
|
|
||||||
Event::FullyRead(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationAccept(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationCancel(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationKey(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationMac(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationRequest(ref event) => event.serialize(serializer),
|
|
||||||
Event::KeyVerificationStart(ref event) => event.serialize(serializer),
|
|
||||||
Event::IgnoredUserList(ref event) => event.serialize(serializer),
|
|
||||||
Event::Presence(ref event) => event.serialize(serializer),
|
|
||||||
Event::PushRules(ref event) => event.serialize(serializer),
|
|
||||||
Event::Receipt(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomKey(ref event) => event.serialize(serializer),
|
|
||||||
Event::RoomKeyRequest(ref event) => event.serialize(serializer),
|
|
||||||
Event::Tag(ref event) => event.serialize(serializer),
|
|
||||||
Event::Typing(ref event) => event.serialize(serializer),
|
|
||||||
Event::Custom(ref event) => event.serialize(serializer),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Serialize for RoomEvent {
|
|
||||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
||||||
where
|
|
||||||
S: Serializer,
|
|
||||||
{
|
|
||||||
match *self {
|
|
||||||
RoomEvent::CallAnswer(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::CallCandidates(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::CallHangup(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::CallInvite(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomEncrypted(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomMessage(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomMessageFeedback(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::RoomRedaction(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::Sticker(ref event) => event.serialize(serializer),
|
|
||||||
RoomEvent::CustomRoom(ref event) => event.serialize(serializer),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
macro_rules! impl_from_t_for_event {
|
macro_rules! impl_from_t_for_event {
|
||||||
($ty:ty, $variant:ident) => {
|
($ty:ty, $variant:ident) => {
|
||||||
impl From<$ty> for Event {
|
impl From<$ty> for Event {
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
//! the other fields are otherwise inapplicable.
|
//! the other fields are otherwise inapplicable.
|
||||||
|
|
||||||
use ruma_identifiers::UserId;
|
use ruma_identifiers::UserId;
|
||||||
use serde::{de::DeserializeOwned, Deserialize, Deserializer, Serialize, Serializer};
|
use serde::{de::DeserializeOwned, Deserialize, Deserializer, Serialize};
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -23,7 +23,8 @@ use crate::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// A stripped-down version of a state event that is included along with some other events.
|
/// A stripped-down version of a state event that is included along with some other events.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug, Serialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
#[allow(clippy::large_enum_variant)]
|
#[allow(clippy::large_enum_variant)]
|
||||||
pub enum StrippedState {
|
pub enum StrippedState {
|
||||||
/// A stripped-down version of the *m.room.aliases* event.
|
/// A stripped-down version of the *m.room.aliases* event.
|
||||||
@ -172,28 +173,6 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for StrippedState {
|
|
||||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
||||||
where
|
|
||||||
S: Serializer,
|
|
||||||
{
|
|
||||||
match *self {
|
|
||||||
StrippedState::RoomAliases(ref event) => event.serialize(serializer),
|
|
||||||
StrippedState::RoomAvatar(ref event) => event.serialize(serializer),
|
|
||||||
StrippedState::RoomCanonicalAlias(ref event) => event.serialize(serializer),
|
|
||||||
StrippedState::RoomCreate(ref event) => event.serialize(serializer),
|
|
||||||
StrippedState::RoomGuestAccess(ref event) => event.serialize(serializer),
|
|
||||||
StrippedState::RoomHistoryVisibility(ref event) => event.serialize(serializer),
|
|
||||||
StrippedState::RoomJoinRules(ref event) => event.serialize(serializer),
|
|
||||||
StrippedState::RoomMember(ref event) => event.serialize(serializer),
|
|
||||||
StrippedState::RoomName(ref event) => event.serialize(serializer),
|
|
||||||
StrippedState::RoomPowerLevels(ref event) => event.serialize(serializer),
|
|
||||||
StrippedState::RoomThirdPartyInvite(ref event) => event.serialize(serializer),
|
|
||||||
StrippedState::RoomTopic(ref event) => event.serialize(serializer),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'de, C> Deserialize<'de> for StrippedStateContent<C>
|
impl<'de, C> Deserialize<'de> for StrippedStateContent<C>
|
||||||
where
|
where
|
||||||
C: DeserializeOwned,
|
C: DeserializeOwned,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user