Fix deserialization for some Filter types
This was a regression in some recent changes on `FilterDefinition` and `RoomFilter` which removed some `Option`s. The current structure skips some fields when the structure is serialized, but it wrongly required those fields on deserialization (due to the lack of serde's default attribute).
This commit is contained in:
parent
c0eee62431
commit
3f7c6f6bea
@ -149,20 +149,20 @@ pub struct RoomFilter<'a> {
|
||||
pub include_leave: bool,
|
||||
|
||||
/// The per user account data to include for rooms.
|
||||
#[serde(skip_serializing_if = "ruma_serde::is_empty")]
|
||||
#[serde(default, skip_serializing_if = "ruma_serde::is_empty")]
|
||||
pub account_data: RoomEventFilter<'a>,
|
||||
|
||||
/// The message and state update events to include for rooms.
|
||||
#[serde(skip_serializing_if = "ruma_serde::is_empty")]
|
||||
#[serde(default, skip_serializing_if = "ruma_serde::is_empty")]
|
||||
pub timeline: RoomEventFilter<'a>,
|
||||
|
||||
/// The events that aren't recorded in the room history, e.g. typing and receipts, to include
|
||||
/// for rooms.
|
||||
#[serde(skip_serializing_if = "ruma_serde::is_empty")]
|
||||
#[serde(default, skip_serializing_if = "ruma_serde::is_empty")]
|
||||
pub ephemeral: RoomEventFilter<'a>,
|
||||
|
||||
/// The state events to include for rooms.
|
||||
#[serde(skip_serializing_if = "ruma_serde::is_empty")]
|
||||
#[serde(default, skip_serializing_if = "ruma_serde::is_empty")]
|
||||
pub state: RoomEventFilter<'a>,
|
||||
|
||||
/// A list of room IDs to exclude.
|
||||
@ -313,15 +313,15 @@ pub struct FilterDefinition<'a> {
|
||||
pub event_format: EventFormat,
|
||||
|
||||
/// The presence updates to include.
|
||||
#[serde(skip_serializing_if = "ruma_serde::is_empty")]
|
||||
#[serde(default, skip_serializing_if = "ruma_serde::is_empty")]
|
||||
pub presence: Filter<'a>,
|
||||
|
||||
/// The user account data that isn't associated with rooms to include.
|
||||
#[serde(skip_serializing_if = "ruma_serde::is_empty")]
|
||||
#[serde(default, skip_serializing_if = "ruma_serde::is_empty")]
|
||||
pub account_data: Filter<'a>,
|
||||
|
||||
/// Filters to be applied to room data.
|
||||
#[serde(skip_serializing_if = "ruma_serde::is_empty")]
|
||||
#[serde(default, skip_serializing_if = "ruma_serde::is_empty")]
|
||||
pub room: RoomFilter<'a>,
|
||||
}
|
||||
|
||||
@ -388,7 +388,10 @@ can_be_empty!(IncomingRoomFilter);
|
||||
mod tests {
|
||||
use serde_json::{json, to_value as to_json_value};
|
||||
|
||||
use super::{Filter, FilterDefinition, RoomEventFilter, RoomFilter};
|
||||
use super::{
|
||||
Filter, FilterDefinition, IncomingFilterDefinition, IncomingRoomFilter, RoomEventFilter,
|
||||
RoomFilter,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn default_filters_are_empty() -> Result<(), serde_json::Error> {
|
||||
@ -399,4 +402,26 @@ mod tests {
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn filter_definition_roundtrip() -> Result<(), serde_json::Error> {
|
||||
let filter = FilterDefinition::default();
|
||||
let filter_str = serde_json::to_value(&filter)?;
|
||||
|
||||
let incoming_filter = serde_json::from_value::<IncomingFilterDefinition>(filter_str)?;
|
||||
assert!(incoming_filter.is_empty());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn room_filter_definition_roundtrip() -> Result<(), serde_json::Error> {
|
||||
let filter = RoomFilter::default();
|
||||
let room_filter = serde_json::to_value(&filter)?;
|
||||
|
||||
let incoming_room_filter = serde_json::from_value::<IncomingRoomFilter>(room_filter)?;
|
||||
assert!(incoming_room_filter.is_empty());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user