From 7b909efccc54288dc164fc83a15a010560bd615a Mon Sep 17 00:00:00 2001 From: skim Date: Mon, 13 Jul 2020 13:59:16 -0700 Subject: [PATCH] update type of `limited` in `r0::sync::sync_events::Timeline` from `Option` to `bool` --- ruma-client-api/CHANGELOG.md | 1 + ruma-client-api/src/r0/sync/sync_events.rs | 35 ++++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/ruma-client-api/CHANGELOG.md b/ruma-client-api/CHANGELOG.md index 05df4970..b87daadb 100644 --- a/ruma-client-api/CHANGELOG.md +++ b/ruma-client-api/CHANGELOG.md @@ -19,6 +19,7 @@ Breaking changes: * Fix event types in `r0::context::get_context` * Fix event types in `r0::sync::sync_events` * Update type of `user_id` in `r0::account::whoami` from `String` to `ruma_identifiers::UserId` +* Update type of `limited` in `r0::sync::sync_events::Timeline` from `Option` to `bool` Improvements: diff --git a/ruma-client-api/src/r0/sync/sync_events.rs b/ruma-client-api/src/r0/sync/sync_events.rs index da5879b3..5f627a59 100644 --- a/ruma-client-api/src/r0/sync/sync_events.rs +++ b/ruma-client-api/src/r0/sync/sync_events.rs @@ -233,8 +233,8 @@ impl UnreadNotificationsCount { #[derive(Clone, Debug, Default, Deserialize, Serialize)] pub struct Timeline { /// True if the number of events returned was limited by the `limit` on the filter. - #[serde(skip_serializing_if = "Option::is_none")] - pub limited: Option, + #[serde(default, skip_serializing_if = "ruma_serde::is_default")] + pub limited: bool, /// A token that can be supplied to to the `from` parameter of the /// `/rooms/{roomId}/messages` endpoint. @@ -406,9 +406,11 @@ impl DeviceLists { mod tests { use std::{convert::TryInto, time::Duration}; + use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; + use matches::assert_matches; - use super::{Filter, PresenceState, Request}; + use super::{Filter, PresenceState, Request, Timeline}; #[test] fn serialize_all_params() { @@ -500,4 +502,31 @@ mod tests { assert_eq!(req.set_presence, PresenceState::Online); assert_eq!(req.timeout, Some(Duration::from_millis(0))); } + + #[test] + fn timeline_serde() { + let timeline = Timeline { limited: true, prev_batch: None, events: vec![] }; + + let timeline_serialized = json!({ + "limited": true, + "events": [] + }); + + assert_eq!(to_json_value(timeline).unwrap(), timeline_serialized); + + let timeline_deserialized: Timeline = from_json_value(timeline_serialized).unwrap(); + assert_eq!(timeline_deserialized.limited, true); + + let timeline_default = Timeline { limited: false, prev_batch: None, events: vec![] }; + + let timeline_default_serialized = json!({ + "events": [] + }); + + assert_eq!(to_json_value(timeline_default).unwrap(), timeline_default_serialized); + + let timeline_default_deserialized: Timeline = + from_json_value(timeline_default_serialized).unwrap(); + assert_eq!(timeline_default_deserialized.limited, false); + } }