@@ -319,11 +319,11 @@ impl RoomEventCache {
319
319
///
320
320
/// **Warning**! It looks into the loaded events from the in-memory linked
321
321
/// chunk **only**. It doesn't look inside the storage.
322
- pub async fn rfind_event_in_memory_by < P > ( & self , predicate : P ) -> Option < Event >
322
+ pub async fn rfind_map_event_in_memory_by < O , P > ( & self , predicate : P ) -> Option < O >
323
323
where
324
- P : FnMut ( & Event ) -> bool ,
324
+ P : FnMut ( & Event ) -> Option < O > ,
325
325
{
326
- self . inner . state . read ( ) . await . rfind_event_in_memory_by ( predicate)
326
+ self . inner . state . read ( ) . await . rfind_map_event_in_memory_by ( predicate)
327
327
}
328
328
329
329
/// Try to find an event by ID in this room.
@@ -1291,13 +1291,11 @@ mod private {
1291
1291
/// **Warning**! It looks into the loaded events from the in-memory
1292
1292
/// linked chunk **only**. It doesn't look inside the storage,
1293
1293
/// contrary to [`Self::find_event`].
1294
- pub fn rfind_event_in_memory_by < P > ( & self , mut predicate : P ) -> Option < Event >
1294
+ pub fn rfind_map_event_in_memory_by < O , P > ( & self , mut predicate : P ) -> Option < O >
1295
1295
where
1296
- P : FnMut ( & Event ) -> bool ,
1296
+ P : FnMut ( & Event ) -> Option < O > ,
1297
1297
{
1298
- self . room_linked_chunk
1299
- . revents ( )
1300
- . find_map ( |( _position, event) | predicate ( event) . then ( || event. clone ( ) ) )
1298
+ self . room_linked_chunk . revents ( ) . find_map ( |( _position, event) | predicate ( event) )
1301
1299
}
1302
1300
1303
1301
/// Find a single event in this room.
@@ -3195,7 +3193,7 @@ mod timed_tests {
3195
3193
}
3196
3194
3197
3195
#[ async_test]
3198
- async fn test_rfind_event_in_memory_by ( ) {
3196
+ async fn test_rfind_map_event_in_memory_by ( ) {
3199
3197
let user_id = user_id ! ( "@mnt_io:matrix.org" ) ;
3200
3198
let room_id = room_id ! ( "!raclette:patate.ch" ) ;
3201
3199
let client = MockClientBuilder :: new ( None ) . build ( ) . await ;
@@ -3258,37 +3256,39 @@ mod timed_tests {
3258
3256
// Look for an event from `BOB`: it must be `event_0`.
3259
3257
assert_matches ! (
3260
3258
room_event_cache
3261
- . rfind_event_in_memory_by ( |event| {
3262
- event. raw( ) . get_field:: <OwnedUserId >( "sender" ) . unwrap( ) . as_deref( ) == Some ( * BOB )
3259
+ . rfind_map_event_in_memory_by ( |event| {
3260
+ ( event. raw( ) . get_field:: <OwnedUserId >( "sender" ) . unwrap( ) . as_deref( ) == Some ( * BOB ) ) . then ( || event . event_id ( ) )
3263
3261
} )
3264
3262
. await ,
3265
- Some ( event ) => {
3266
- assert_eq!( event . event_id( ) . as_deref( ) , Some ( event_id_0) ) ;
3263
+ Some ( event_id ) => {
3264
+ assert_eq!( event_id. as_deref( ) , Some ( event_id_0) ) ;
3267
3265
}
3268
3266
) ;
3269
3267
3270
3268
// Look for an event from `ALICE`: it must be `event_2`, right before `event_1`
3271
3269
// because events are looked for in reverse order.
3272
3270
assert_matches ! (
3273
3271
room_event_cache
3274
- . rfind_event_in_memory_by ( |event| {
3275
- event. raw( ) . get_field:: <OwnedUserId >( "sender" ) . unwrap( ) . as_deref( ) == Some ( * ALICE )
3272
+ . rfind_map_event_in_memory_by ( |event| {
3273
+ ( event. raw( ) . get_field:: <OwnedUserId >( "sender" ) . unwrap( ) . as_deref( ) == Some ( * ALICE ) ) . then ( || event . event_id ( ) )
3276
3274
} )
3277
3275
. await ,
3278
- Some ( event ) => {
3279
- assert_eq!( event . event_id( ) . as_deref( ) , Some ( event_id_2) ) ;
3276
+ Some ( event_id ) => {
3277
+ assert_eq!( event_id. as_deref( ) , Some ( event_id_2) ) ;
3280
3278
}
3281
3279
) ;
3282
3280
3283
3281
// Look for an event that is inside the storage, but not loaded.
3284
3282
assert ! ( room_event_cache
3285
- . rfind_event_in_memory_by( |event| {
3286
- event. raw( ) . get_field:: <OwnedUserId >( "sender" ) . unwrap( ) . as_deref( ) == Some ( user_id)
3283
+ . rfind_map_event_in_memory_by( |event| {
3284
+ ( event. raw( ) . get_field:: <OwnedUserId >( "sender" ) . unwrap( ) . as_deref( )
3285
+ == Some ( user_id) )
3286
+ . then( || event. event_id( ) )
3287
3287
} )
3288
3288
. await
3289
3289
. is_none( ) ) ;
3290
3290
3291
3291
// Look for an event that doesn't exist.
3292
- assert ! ( room_event_cache. rfind_event_in_memory_by ( |_| false ) . await . is_none( ) ) ;
3292
+ assert ! ( room_event_cache. rfind_map_event_in_memory_by ( |_| None :: < ( ) > ) . await . is_none( ) ) ;
3293
3293
}
3294
3294
}
0 commit comments