Introduce OptionFuture helpers

Optimize user directory searches
This commit is contained in:
dasha_uwu
2026-01-17 05:38:09 +05:00
committed by Jason Volk
parent 95121ad905
commit e78bf21085
28 changed files with 454 additions and 567 deletions

View File

@@ -1,7 +1,4 @@
use futures::{
FutureExt, TryFutureExt, TryStreamExt,
future::{OptionFuture, try_join5},
};
use futures::{FutureExt, TryFutureExt, TryStreamExt, future::try_join5};
use ruma::{CanonicalJsonObject, EventId, RoomId, ServerName, UserId, events::StateEventType};
use tuwunel_core::{
Err, Result, debug,
@@ -9,7 +6,7 @@ use tuwunel_core::{
err, implement,
matrix::{Event, room_version},
trace,
utils::stream::IterStream,
utils::{BoolExt, stream::IterStream},
warn,
};
@@ -83,11 +80,10 @@ pub async fn handle_incoming_pdu<'a>(
.try_into()
.map_err(|e| err!(Request(InvalidParam("PDU does not have a valid sender key: {e}"))))?;
let sender_acl_check: OptionFuture<_> = sender
let sender_acl_check = sender
.server_name()
.ne(origin)
.then(|| self.acl_check(sender.server_name(), room_id))
.into();
.then_async(|| self.acl_check(sender.server_name(), room_id));
// Fetch create event
let create_event =

View File

@@ -3,16 +3,16 @@ use std::{
iter::{Iterator, once},
};
use futures::{
FutureExt, StreamExt, TryFutureExt, TryStreamExt,
future::{OptionFuture, try_join},
};
use futures::{FutureExt, StreamExt, TryFutureExt, TryStreamExt, future::try_join};
use ruma::{OwnedEventId, RoomId, RoomVersionId};
use tuwunel_core::{
Result, apply, err, implement,
matrix::{Event, StateMap, state_res::AuthSet},
ref_at, trace,
utils::stream::{BroadbandExt, IterStream, ReadyExt, TryBroadbandExt, TryWidebandExt},
utils::{
option::OptionExt,
stream::{BroadbandExt, IterStream, ReadyExt, TryBroadbandExt, TryWidebandExt},
},
};
use crate::rooms::short::ShortStateHash;
@@ -174,16 +174,15 @@ async fn state_at_incoming_fork<Pdu>(
where
Pdu: Event,
{
let leaf: OptionFuture<_> = prev_event
let leaf = prev_event
.state_key()
.map(async |state_key| {
.map_async(async |state_key| {
self.services
.short
.get_or_create_shortstatekey(&prev_event.kind().to_cow_str().into(), state_key)
.map(|shortstatekey| once((shortstatekey, prev_event.event_id().to_owned())))
.await
})
.into();
});
let leaf_state_after_event: Vec<_> = self
.services