From a1ee6c74c0acdb724ba33b20d1d9ba81857d6a13 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Mon, 17 Aug 2020 21:46:34 +0200 Subject: [PATCH] Update FilterDefinition to be lifetime-generic --- ruma-client-api/src/r0/filter.rs | 10 ++++++---- ruma-client-api/src/r0/filter/create_filter.rs | 6 +++--- ruma-client-api/src/r0/filter/get_filter.rs | 6 +++--- ruma-client-api/src/r0/sync/sync_events.rs | 4 ++-- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/ruma-client-api/src/r0/filter.rs b/ruma-client-api/src/r0/filter.rs index 12a8c8af..1090a706 100644 --- a/ruma-client-api/src/r0/filter.rs +++ b/ruma-client-api/src/r0/filter.rs @@ -6,6 +6,7 @@ pub mod get_filter; use std::fmt; use js_int::UInt; +use ruma_api::Outgoing; use ruma_identifiers::{RoomId, UserId}; use serde::{ de::{MapAccess, Visitor}, @@ -184,8 +185,9 @@ impl Filter { } /// A filter definition -#[derive(Clone, Debug, Default, Deserialize, Serialize)] -pub struct FilterDefinition { +#[derive(Clone, Debug, Default, Outgoing, Serialize)] +#[incoming_derive(Clone, Serialize)] +pub struct FilterDefinition<'a> { /// List of event fields to include. /// /// If this list is absent then all fields are included. The entries may include '.' charaters @@ -193,7 +195,7 @@ pub struct FilterDefinition { /// object. A literal '.' character in a field name may be escaped using a '\'. A server may /// include more fields than were requested. #[serde(default, skip_serializing_if = "Option::is_none")] - pub event_fields: Option>, + pub event_fields: Option<&'a [String]>, /// The format to use for events. /// @@ -215,7 +217,7 @@ pub struct FilterDefinition { pub room: Option, } -impl FilterDefinition { +impl<'a> FilterDefinition<'a> { /// A filter that can be used to ignore all events pub fn ignore_all() -> Self { Self { diff --git a/ruma-client-api/src/r0/filter/create_filter.rs b/ruma-client-api/src/r0/filter/create_filter.rs index b37ca3f5..f7620a9e 100644 --- a/ruma-client-api/src/r0/filter/create_filter.rs +++ b/ruma-client-api/src/r0/filter/create_filter.rs @@ -3,7 +3,7 @@ use ruma_api::ruma_api; use ruma_identifiers::UserId; -use super::FilterDefinition; +use super::{FilterDefinition, IncomingFilterDefinition}; ruma_api! { metadata: { @@ -25,7 +25,7 @@ ruma_api! { /// The filter definition. #[ruma_api(body)] - pub filter: FilterDefinition, + pub filter: FilterDefinition<'a>, } #[non_exhaustive] @@ -39,7 +39,7 @@ ruma_api! { impl<'a> Request<'a> { /// Creates a new `Request` with the given user ID and filter definition. - pub fn new(user_id: &'a UserId, filter: FilterDefinition) -> Self { + pub fn new(user_id: &'a UserId, filter: FilterDefinition<'a>) -> Self { Self { user_id, filter } } } diff --git a/ruma-client-api/src/r0/filter/get_filter.rs b/ruma-client-api/src/r0/filter/get_filter.rs index 87b69f1b..8b179d3b 100644 --- a/ruma-client-api/src/r0/filter/get_filter.rs +++ b/ruma-client-api/src/r0/filter/get_filter.rs @@ -3,7 +3,7 @@ use ruma_api::ruma_api; use ruma_identifiers::UserId; -use super::FilterDefinition; +use super::IncomingFilterDefinition; ruma_api! { metadata: { @@ -30,7 +30,7 @@ ruma_api! { response: { /// The filter definition. #[ruma_api(body)] - pub filter: FilterDefinition, + pub filter: IncomingFilterDefinition, } error: crate::Error @@ -45,7 +45,7 @@ impl<'a> Request<'a> { impl Response { /// Creates a new `Response` with the given filter definition. - pub fn new(filter: FilterDefinition) -> Self { + pub fn new(filter: IncomingFilterDefinition) -> Self { Self { filter } } } diff --git a/ruma-client-api/src/r0/sync/sync_events.rs b/ruma-client-api/src/r0/sync/sync_events.rs index c4bea870..4f87c659 100644 --- a/ruma-client-api/src/r0/sync/sync_events.rs +++ b/ruma-client-api/src/r0/sync/sync_events.rs @@ -12,7 +12,7 @@ use ruma_events::{ use ruma_identifiers::{DeviceKeyAlgorithm, RoomId, UserId}; use serde::{Deserialize, Serialize}; -use crate::r0::filter::FilterDefinition; +use crate::r0::filter::{FilterDefinition, IncomingFilterDefinition}; ruma_api! { metadata: { @@ -110,7 +110,7 @@ pub enum Filter<'a> { // (there are probably some corner cases like leading whitespace) #[serde(with = "ruma_serde::json_string")] /// A complete filter definition serialized to JSON. - FilterDefinition(FilterDefinition), + FilterDefinition(FilterDefinition<'a>), /// The ID of a filter saved on the server. FilterId(&'a str),