From f69c596f5607e596ee5e79ff8347dcbba676144f Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Tue, 26 Nov 2024 00:35:03 +0000 Subject: [PATCH] generalize return value wrapping to not require Arc Signed-off-by: Jason Volk --- src/service/rooms/short/mod.rs | 13 ++++++++++--- src/service/rooms/state/mod.rs | 8 ++++++-- src/service/rooms/state_accessor/data.rs | 4 ++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/service/rooms/short/mod.rs b/src/service/rooms/short/mod.rs index e4ff2975..0f100348 100644 --- a/src/service/rooms/short/mod.rs +++ b/src/service/rooms/short/mod.rs @@ -1,10 +1,11 @@ -use std::{fmt::Debug, mem::size_of_val, sync::Arc}; +use std::{borrow::Borrow, fmt::Debug, mem::size_of_val, sync::Arc}; pub use conduit::pdu::{ShortEventId, ShortId, ShortRoomId}; use conduit::{err, implement, utils, utils::stream::ReadyExt, Result}; use database::{Deserialized, Map}; use futures::{Stream, StreamExt}; use ruma::{events::StateEventType, EventId, RoomId}; +use serde::Deserialize; use crate::{globals, Dep}; @@ -136,7 +137,11 @@ pub async fn get_shortstatekey(&self, event_type: &StateEventType, state_key: &s } #[implement(Service)] -pub async fn get_eventid_from_short(&self, shorteventid: ShortEventId) -> Result> { +pub async fn get_eventid_from_short(&self, shorteventid: ShortEventId) -> Result +where + Id: for<'de> Deserialize<'de> + Send + Sized + ToOwned, + ::Owned: Borrow, +{ const BUFSIZE: usize = size_of::(); self.db @@ -148,8 +153,10 @@ pub async fn get_eventid_from_short(&self, shorteventid: ShortEventId) -> Result } #[implement(Service)] -pub async fn multi_get_eventid_from_short(&self, shorteventid: I) -> Vec>> +pub async fn multi_get_eventid_from_short(&self, shorteventid: I) -> Vec> where + Id: for<'de> Deserialize<'de> + Send + Sized + ToOwned, + ::Owned: Borrow, I: Iterator + Send, { const BUFSIZE: usize = size_of::(); diff --git a/src/service/rooms/state/mod.rs b/src/service/rooms/state/mod.rs index 4429e912..3227b935 100644 --- a/src/service/rooms/state/mod.rs +++ b/src/service/rooms/state/mod.rs @@ -102,7 +102,11 @@ impl Service { .iter() .stream() .map(|&new| parse_compressed_state_event(new).1) - .then(|shorteventid| self.services.short.get_eventid_from_short(shorteventid)) + .then(|shorteventid| { + self.services + .short + .get_eventid_from_short::>(shorteventid) + }) .ignore_err(); pin_mut!(event_ids); @@ -433,7 +437,7 @@ impl Service { .await .into_iter() .stream() - .and_then(|event_id| async move { self.services.timeline.get_pdu(&event_id).await }) + .and_then(|event_id: OwnedEventId| async move { self.services.timeline.get_pdu(&event_id).await }) .collect() .await; diff --git a/src/service/rooms/state_accessor/data.rs b/src/service/rooms/state_accessor/data.rs index 62e1f550..1ef91221 100644 --- a/src/service/rooms/state_accessor/data.rs +++ b/src/service/rooms/state_accessor/data.rs @@ -7,7 +7,7 @@ use conduit::{ }; use database::{Deserialized, Map}; use futures::{StreamExt, TryFutureExt}; -use ruma::{events::StateEventType, EventId, RoomId}; +use ruma::{events::StateEventType, EventId, OwnedEventId, RoomId}; use crate::{ rooms, @@ -74,7 +74,7 @@ impl Data { .into_iter() .stream() .ready_filter_map(Result::ok) - .filter_map(|event_id| async move { self.services.timeline.get_pdu(&event_id).await.ok() }) + .filter_map(|event_id: OwnedEventId| async move { self.services.timeline.get_pdu(&event_id).await.ok() }) .collect() .await;