serde: Add Raw::deserialize_as
This commit is contained in:
parent
60d4ea027f
commit
16e8f498b4
@ -74,7 +74,7 @@ impl IncomingRequest {
|
||||
let mut response = sync_events::Response::new(next_batch.into());
|
||||
|
||||
for raw_event in self.events {
|
||||
let helper: EventDeHelper = serde_json::from_str(raw_event.json().get())?;
|
||||
let helper = raw_event.deserialize_as::<EventDeHelper>()?;
|
||||
let event_json = Raw::into_json(raw_event);
|
||||
|
||||
if let Some(room_id) = helper.room_id {
|
||||
|
@ -75,7 +75,7 @@ impl<T> Raw<T> {
|
||||
/// # fn foo() -> serde_json::Result<()> {
|
||||
/// # let raw_event: ruma_serde::Raw<()> = todo!();
|
||||
/// if raw_event.get_field::<String>("type")?.as_deref() == Some("org.custom.matrix.event") {
|
||||
/// let event: CustomMatrixEvent = serde_json::from_str(raw_event.json().get())?;
|
||||
/// let event = raw_event.deserialize_as::<CustomMatrixEvent>()?;
|
||||
/// // ...
|
||||
/// }
|
||||
/// # Ok(())
|
||||
@ -136,6 +136,14 @@ where
|
||||
pub fn deserialize(&self) -> serde_json::Result<T> {
|
||||
serde_json::from_str(self.json.get())
|
||||
}
|
||||
|
||||
/// Try to deserialize the JSON as a custom type.
|
||||
pub fn deserialize_as<U>(&self) -> serde_json::Result<U>
|
||||
where
|
||||
U: DeserializeOwned,
|
||||
{
|
||||
serde_json::from_str(self.json.get())
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Serialize> From<&T> for Raw<T> {
|
||||
|
Loading…
x
Reference in New Issue
Block a user