Add part of the deserialization logic for collections/raw/*
This commit is contained in:
parent
1aaee389ec
commit
5ad549b3e4
@ -2,6 +2,7 @@
|
|||||||
//! the trait of the same name.
|
//! the trait of the same name.
|
||||||
|
|
||||||
use serde::{Deserialize, Deserializer};
|
use serde::{Deserialize, Deserializer};
|
||||||
|
use serde_json::Value;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
call::{
|
call::{
|
||||||
@ -46,7 +47,7 @@ use crate::{
|
|||||||
sticker::raw::StickerEvent,
|
sticker::raw::StickerEvent,
|
||||||
tag::raw::TagEvent,
|
tag::raw::TagEvent,
|
||||||
typing::raw::TypingEvent,
|
typing::raw::TypingEvent,
|
||||||
CustomEvent, CustomRoomEvent, CustomStateEvent,
|
CustomEvent, CustomRoomEvent, CustomStateEvent, EventType,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// A basic event, room event, or state event.
|
/// A basic event, room event, or state event.
|
||||||
@ -339,7 +340,21 @@ impl<'de> Deserialize<'de> for Event {
|
|||||||
where
|
where
|
||||||
D: Deserializer<'de>,
|
D: Deserializer<'de>,
|
||||||
{
|
{
|
||||||
unimplemented!()
|
use serde::de::Error as _;
|
||||||
|
use serde_json::from_value;
|
||||||
|
|
||||||
|
let conv_err = |error: serde_json::Error| D::Error::custom(error.to_string());
|
||||||
|
|
||||||
|
let value = Value::deserialize(deserializer)?;
|
||||||
|
let event_type: EventType = from_value(
|
||||||
|
value
|
||||||
|
.get("type")
|
||||||
|
.map(Clone::clone)
|
||||||
|
.ok_or_else(|| D::Error::missing_field("type"))?,
|
||||||
|
)
|
||||||
|
.map_err(conv_err)?;
|
||||||
|
|
||||||
|
unimplemented!("not yet implemented")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -348,7 +363,21 @@ impl<'de> Deserialize<'de> for RoomEvent {
|
|||||||
where
|
where
|
||||||
D: Deserializer<'de>,
|
D: Deserializer<'de>,
|
||||||
{
|
{
|
||||||
unimplemented!()
|
use serde::de::Error as _;
|
||||||
|
use serde_json::from_value;
|
||||||
|
|
||||||
|
let conv_err = |error: serde_json::Error| D::Error::custom(error.to_string());
|
||||||
|
|
||||||
|
let value = Value::deserialize(deserializer)?;
|
||||||
|
let event_type: EventType = from_value(
|
||||||
|
value
|
||||||
|
.get("type")
|
||||||
|
.map(Clone::clone)
|
||||||
|
.ok_or_else(|| D::Error::missing_field("type"))?,
|
||||||
|
)
|
||||||
|
.map_err(conv_err)?;
|
||||||
|
|
||||||
|
unimplemented!("not yet implemented")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -357,7 +386,21 @@ impl<'de> Deserialize<'de> for StateEvent {
|
|||||||
where
|
where
|
||||||
D: Deserializer<'de>,
|
D: Deserializer<'de>,
|
||||||
{
|
{
|
||||||
unimplemented!()
|
use serde::de::Error as _;
|
||||||
|
use serde_json::from_value;
|
||||||
|
|
||||||
|
let conv_err = |error: serde_json::Error| D::Error::custom(error.to_string());
|
||||||
|
|
||||||
|
let value = Value::deserialize(deserializer)?;
|
||||||
|
let event_type: EventType = from_value(
|
||||||
|
value
|
||||||
|
.get("type")
|
||||||
|
.map(Clone::clone)
|
||||||
|
.ok_or_else(|| D::Error::missing_field("type"))?,
|
||||||
|
)
|
||||||
|
.map_err(conv_err)?;
|
||||||
|
|
||||||
|
unimplemented!("not yet implemented")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
//! most" the trait of the same name.
|
//! most" the trait of the same name.
|
||||||
|
|
||||||
use serde::{Deserialize, Deserializer};
|
use serde::{Deserialize, Deserializer};
|
||||||
|
use serde_json::Value;
|
||||||
|
|
||||||
pub use super::all::StateEvent;
|
pub use super::all::StateEvent;
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -31,7 +32,7 @@ use crate::{
|
|||||||
sticker::raw::StickerEvent,
|
sticker::raw::StickerEvent,
|
||||||
tag::raw::TagEvent,
|
tag::raw::TagEvent,
|
||||||
typing::raw::TypingEvent,
|
typing::raw::TypingEvent,
|
||||||
CustomEvent, CustomRoomEvent,
|
CustomEvent, CustomRoomEvent, EventType,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// A basic event.
|
/// A basic event.
|
||||||
@ -146,7 +147,61 @@ impl<'de> Deserialize<'de> for Event {
|
|||||||
where
|
where
|
||||||
D: Deserializer<'de>,
|
D: Deserializer<'de>,
|
||||||
{
|
{
|
||||||
unimplemented!()
|
use serde::de::Error as _;
|
||||||
|
use serde_json::from_value;
|
||||||
|
use EventType::*;
|
||||||
|
|
||||||
|
let conv_err = |error: serde_json::Error| D::Error::custom(error.to_string());
|
||||||
|
|
||||||
|
let value = Value::deserialize(deserializer)?;
|
||||||
|
let event_type: EventType = from_value(
|
||||||
|
value
|
||||||
|
.get("type")
|
||||||
|
.map(Clone::clone)
|
||||||
|
.ok_or_else(|| D::Error::missing_field("type"))?,
|
||||||
|
)
|
||||||
|
.map_err(conv_err)?;
|
||||||
|
|
||||||
|
match event_type {
|
||||||
|
Direct => from_value(value).map(Self::Direct).map_err(conv_err),
|
||||||
|
Dummy => from_value(value).map(Self::Dummy).map_err(conv_err),
|
||||||
|
ForwardedRoomKey => from_value(value)
|
||||||
|
.map(Self::ForwardedRoomKey)
|
||||||
|
.map_err(conv_err),
|
||||||
|
FullyRead => from_value(value).map(Self::FullyRead).map_err(conv_err),
|
||||||
|
KeyVerificationAccept => from_value(value)
|
||||||
|
.map(Self::KeyVerificationAccept)
|
||||||
|
.map_err(conv_err),
|
||||||
|
KeyVerificationCancel => from_value(value)
|
||||||
|
.map(Self::KeyVerificationCancel)
|
||||||
|
.map_err(conv_err),
|
||||||
|
KeyVerificationKey => from_value(value)
|
||||||
|
.map(Self::KeyVerificationKey)
|
||||||
|
.map_err(conv_err),
|
||||||
|
KeyVerificationMac => from_value(value)
|
||||||
|
.map(Self::KeyVerificationMac)
|
||||||
|
.map_err(conv_err),
|
||||||
|
KeyVerificationRequest => from_value(value)
|
||||||
|
.map(Self::KeyVerificationRequest)
|
||||||
|
.map_err(conv_err),
|
||||||
|
KeyVerificationStart => from_value(value)
|
||||||
|
.map(Self::KeyVerificationStart)
|
||||||
|
.map_err(conv_err),
|
||||||
|
IgnoredUserList => from_value(value)
|
||||||
|
.map(Self::IgnoredUserList)
|
||||||
|
.map_err(conv_err),
|
||||||
|
Presence => from_value(value).map(Self::Presence).map_err(conv_err),
|
||||||
|
PushRules => from_value(value).map(Self::PushRules).map_err(conv_err),
|
||||||
|
RoomKey => from_value(value).map(Self::RoomKey).map_err(conv_err),
|
||||||
|
RoomKeyRequest => from_value(value)
|
||||||
|
.map(Self::RoomKeyRequest)
|
||||||
|
.map_err(conv_err),
|
||||||
|
Receipt => from_value(value).map(Self::Receipt).map_err(conv_err),
|
||||||
|
Tag => from_value(value).map(Self::Tag).map_err(conv_err),
|
||||||
|
Typing => from_value(value).map(Self::Typing).map_err(conv_err),
|
||||||
|
Custom(event_type_name) => unimplemented!("todo"),
|
||||||
|
_ => Err(D::Error::custom("invalid event type")),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +210,38 @@ impl<'de> Deserialize<'de> for RoomEvent {
|
|||||||
where
|
where
|
||||||
D: Deserializer<'de>,
|
D: Deserializer<'de>,
|
||||||
{
|
{
|
||||||
unimplemented!()
|
use serde::de::Error as _;
|
||||||
|
use serde_json::from_value;
|
||||||
|
use EventType::*;
|
||||||
|
|
||||||
|
let conv_err = |error: serde_json::Error| D::Error::custom(error.to_string());
|
||||||
|
|
||||||
|
let value = Value::deserialize(deserializer)?;
|
||||||
|
let event_type: EventType = from_value(
|
||||||
|
value
|
||||||
|
.get("type")
|
||||||
|
.map(Clone::clone)
|
||||||
|
.ok_or_else(|| D::Error::missing_field("type"))?,
|
||||||
|
)
|
||||||
|
.map_err(conv_err)?;
|
||||||
|
|
||||||
|
match event_type {
|
||||||
|
CallAnswer => from_value(value).map(Self::CallAnswer).map_err(conv_err),
|
||||||
|
CallCandidates => from_value(value)
|
||||||
|
.map(Self::CallCandidates)
|
||||||
|
.map_err(conv_err),
|
||||||
|
CallHangup => from_value(value).map(Self::CallHangup).map_err(conv_err),
|
||||||
|
CallInvite => from_value(value).map(Self::CallInvite).map_err(conv_err),
|
||||||
|
RoomEncrypted => from_value(value).map(Self::RoomEncrypted).map_err(conv_err),
|
||||||
|
RoomMessage => from_value(value).map(Self::RoomMessage).map_err(conv_err),
|
||||||
|
RoomMessageFeedback => from_value(value)
|
||||||
|
.map(Self::RoomMessageFeedback)
|
||||||
|
.map_err(conv_err),
|
||||||
|
RoomRedaction => from_value(value).map(Self::RoomRedaction).map_err(conv_err),
|
||||||
|
Sticker => from_value(value).map(Self::Sticker).map_err(conv_err),
|
||||||
|
Custom(event_type_name) => unimplemented!("todo"),
|
||||||
|
_ => Err(D::Error::custom("invalid event type")),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ where
|
|||||||
let event_type = from_value(
|
let event_type = from_value(
|
||||||
value
|
value
|
||||||
.get("type")
|
.get("type")
|
||||||
.map(Clone::clone)
|
.cloned()
|
||||||
.ok_or_else(|| D::Error::missing_field("type"))?,
|
.ok_or_else(|| D::Error::missing_field("type"))?,
|
||||||
)
|
)
|
||||||
.map_err(conv_err)?;
|
.map_err(conv_err)?;
|
||||||
@ -214,7 +214,7 @@ where
|
|||||||
let content = from_value(
|
let content = from_value(
|
||||||
value
|
value
|
||||||
.get("content")
|
.get("content")
|
||||||
.map(Clone::clone)
|
.cloned()
|
||||||
.ok_or_else(|| D::Error::missing_field("content"))?,
|
.ok_or_else(|| D::Error::missing_field("content"))?,
|
||||||
)
|
)
|
||||||
.map_err(conv_err)?;
|
.map_err(conv_err)?;
|
||||||
@ -222,7 +222,7 @@ where
|
|||||||
let sender = from_value(
|
let sender = from_value(
|
||||||
value
|
value
|
||||||
.get("sender")
|
.get("sender")
|
||||||
.map(Clone::clone)
|
.cloned()
|
||||||
.ok_or_else(|| D::Error::missing_field("sender"))?,
|
.ok_or_else(|| D::Error::missing_field("sender"))?,
|
||||||
)
|
)
|
||||||
.map_err(conv_err)?;
|
.map_err(conv_err)?;
|
||||||
@ -230,7 +230,7 @@ where
|
|||||||
let state_key = from_value(
|
let state_key = from_value(
|
||||||
value
|
value
|
||||||
.get("state_key")
|
.get("state_key")
|
||||||
.map(Clone::clone)
|
.cloned()
|
||||||
.ok_or_else(|| D::Error::missing_field("state_key"))?,
|
.ok_or_else(|| D::Error::missing_field("state_key"))?,
|
||||||
)
|
)
|
||||||
.map_err(conv_err)?;
|
.map_err(conv_err)?;
|
||||||
@ -352,7 +352,7 @@ mod raw {
|
|||||||
let event_type = from_value(
|
let event_type = from_value(
|
||||||
value
|
value
|
||||||
.get("type")
|
.get("type")
|
||||||
.map(Clone::clone)
|
.cloned()
|
||||||
.ok_or_else(|| D::Error::missing_field("type"))?,
|
.ok_or_else(|| D::Error::missing_field("type"))?,
|
||||||
)
|
)
|
||||||
.map_err(conv_err)?;
|
.map_err(conv_err)?;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user