Simplify state_cache.user_memberships() masking for callers.

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-10-09 05:30:46 +00:00
parent 02ccb1dceb
commit e5bf005eaf

View File

@@ -396,9 +396,7 @@ pub fn all_user_memberships<'a>(
&'a self, &'a self,
user_id: &'a UserId, user_id: &'a UserId,
) -> impl Stream<Item = (MembershipState, &RoomId)> + Send + 'a { ) -> impl Stream<Item = (MembershipState, &RoomId)> + Send + 'a {
use MembershipState::*; self.user_memberships(user_id, None)
self.user_memberships(user_id, &[Join, Invite, Knock, Leave])
} }
/// Returns an iterator over all specified memberships for a user. /// Returns an iterator over all specified memberships for a user.
@@ -407,13 +405,13 @@ pub fn all_user_memberships<'a>(
pub fn user_memberships<'a>( pub fn user_memberships<'a>(
&'a self, &'a self,
user_id: &'a UserId, user_id: &'a UserId,
filter: &[MembershipState], mask: Option<&[MembershipState]>,
) -> impl Stream<Item = (MembershipState, &RoomId)> + Send + 'a { ) -> impl Stream<Item = (MembershipState, &RoomId)> + Send + 'a {
use MembershipState::*; use MembershipState::*;
use futures::stream::select; use futures::stream::select;
let joined: OptionFuture<_> = filter let joined: OptionFuture<_> = mask
.contains(&Join) .is_none_or(|mask| mask.contains(&Join))
.then(|| { .then(|| {
self.rooms_joined(user_id) self.rooms_joined(user_id)
.map(|room_id| (Join, room_id)) .map(|room_id| (Join, room_id))
@@ -421,8 +419,8 @@ pub fn user_memberships<'a>(
}) })
.into(); .into();
let invited: OptionFuture<_> = filter let invited: OptionFuture<_> = mask
.contains(&Invite) .is_none_or(|mask| mask.contains(&Invite))
.then(|| { .then(|| {
self.rooms_invited(user_id) self.rooms_invited(user_id)
.map(|room_id| (Invite, room_id)) .map(|room_id| (Invite, room_id))
@@ -430,8 +428,8 @@ pub fn user_memberships<'a>(
}) })
.into(); .into();
let knocked: OptionFuture<_> = filter let knocked: OptionFuture<_> = mask
.contains(&Knock) .is_none_or(|mask| mask.contains(&Knock))
.then(|| { .then(|| {
self.rooms_knocked(user_id) self.rooms_knocked(user_id)
.map(|room_id| (Knock, room_id)) .map(|room_id| (Knock, room_id))
@@ -439,8 +437,8 @@ pub fn user_memberships<'a>(
}) })
.into(); .into();
let left: OptionFuture<_> = filter let left: OptionFuture<_> = mask
.contains(&Leave) .is_none_or(|mask| mask.contains(&Leave))
.then(|| { .then(|| {
self.rooms_left(user_id) self.rooms_left(user_id)
.map(|room_id| (Leave, room_id)) .map(|room_id| (Leave, room_id))