13
13
// See the License for the specific language governing permissions and
14
14
// limitations under the License.
15
15
16
+ #[ cfg( feature = "encryption" ) ]
17
+ use std:: ops:: Deref ;
16
18
use std:: {
17
19
collections:: { BTreeMap , BTreeSet } ,
18
20
convert:: TryFrom ,
@@ -352,7 +354,7 @@ impl BaseClient {
352
354
room_info : & mut RoomInfo ,
353
355
changes : & mut StateChanges ,
354
356
ambiguity_cache : & mut AmbiguityCache ,
355
- user_ids : & mut BTreeSet < UserId > ,
357
+ user_ids : & mut BTreeSet < Box < UserId > > ,
356
358
) -> Result < Timeline > {
357
359
let room_id = room. room_id ( ) ;
358
360
let user_id = room. own_user_id ( ) ;
@@ -388,14 +390,14 @@ impl BaseClient {
388
390
if member. state_key == member. sender {
389
391
changes
390
392
. profiles
391
- . entry ( room_id. clone ( ) )
393
+ . entry ( room_id. to_owned ( ) )
392
394
. or_insert_with ( BTreeMap :: new)
393
395
. insert ( member. sender . clone ( ) , member. content . clone ( ) ) ;
394
396
}
395
397
396
398
changes
397
399
. members
398
- . entry ( room_id. clone ( ) )
400
+ . entry ( room_id. to_owned ( ) )
399
401
. or_insert_with ( BTreeMap :: new)
400
402
. insert ( member. state_key . clone ( ) , member) ;
401
403
}
@@ -443,7 +445,7 @@ impl BaseClient {
443
445
actions,
444
446
event. event . clone ( ) ,
445
447
false ,
446
- room_id. clone ( ) ,
448
+ room_id. to_owned ( ) ,
447
449
MilliSecondsSinceUnixEpoch :: now ( ) ,
448
450
) ,
449
451
) ;
@@ -475,7 +477,7 @@ impl BaseClient {
475
477
events : & [ Raw < AnyStrippedStateEvent > ] ,
476
478
room_info : & mut RoomInfo ,
477
479
) -> (
478
- BTreeMap < UserId , StrippedMemberEvent > ,
480
+ BTreeMap < Box < UserId > , StrippedMemberEvent > ,
479
481
BTreeMap < String , BTreeMap < String , Raw < AnyStrippedStateEvent > > > ,
480
482
) {
481
483
events. iter ( ) . fold (
@@ -520,7 +522,7 @@ impl BaseClient {
520
522
ambiguity_cache : & mut AmbiguityCache ,
521
523
events : & [ Raw < AnySyncStateEvent > ] ,
522
524
room_info : & mut RoomInfo ,
523
- ) -> StoreResult < BTreeSet < UserId > > {
525
+ ) -> StoreResult < BTreeSet < Box < UserId > > > {
524
526
let mut members = BTreeMap :: new ( ) ;
525
527
let mut state_events = BTreeMap :: new ( ) ;
526
528
let mut user_ids = BTreeSet :: new ( ) ;
@@ -577,9 +579,9 @@ impl BaseClient {
577
579
}
578
580
}
579
581
580
- changes. members . insert ( room_id . as_ref ( ) . clone ( ) , members) ;
581
- changes. profiles . insert ( room_id . as_ref ( ) . clone ( ) , profiles) ;
582
- changes. state . insert ( room_id . as_ref ( ) . clone ( ) , state_events) ;
582
+ changes. members . insert ( ( & * room_id ) . to_owned ( ) , members) ;
583
+ changes. profiles . insert ( ( & * room_id ) . to_owned ( ) , profiles) ;
584
+ changes. state . insert ( ( & * room_id ) . to_owned ( ) , state_events) ;
583
585
584
586
Ok ( user_ids)
585
587
}
@@ -748,11 +750,12 @@ impl BaseClient {
748
750
let joined = self . store . get_joined_user_ids ( & room_id) . await ?;
749
751
let invited = self . store . get_invited_user_ids ( & room_id) . await ?;
750
752
751
- let user_ids: Vec < & UserId > = joined. iter ( ) . chain ( & invited) . collect ( ) ;
753
+ let user_ids: Vec < & UserId > =
754
+ joined. iter ( ) . chain ( & invited) . map ( Deref :: deref) . collect ( ) ;
752
755
o. update_tracked_users ( user_ids) . await
753
756
}
754
757
755
- o. update_tracked_users ( & user_ids) . await
758
+ o. update_tracked_users ( user_ids. iter ( ) . map ( Deref :: deref ) ) . await ;
756
759
}
757
760
}
758
761
@@ -923,14 +926,14 @@ impl BaseClient {
923
926
if member. state_key == member. sender {
924
927
changes
925
928
. profiles
926
- . entry ( room_id. clone ( ) )
929
+ . entry ( room_id. to_owned ( ) )
927
930
. or_insert_with ( BTreeMap :: new)
928
931
. insert ( member. sender . clone ( ) , member. content . clone ( ) ) ;
929
932
}
930
933
931
934
changes
932
935
. members
933
- . entry ( room_id. clone ( ) )
936
+ . entry ( room_id. to_owned ( ) )
934
937
. or_insert_with ( BTreeMap :: new)
935
938
. insert ( member. state_key . clone ( ) , member. clone ( ) ) ;
936
939
}
@@ -939,7 +942,7 @@ impl BaseClient {
939
942
#[ cfg( feature = "encryption" ) ]
940
943
if room_info. is_encrypted ( ) {
941
944
if let Some ( o) = self . olm_machine ( ) . await {
942
- o. update_tracked_users ( & user_ids) . await
945
+ o. update_tracked_users ( user_ids. iter ( ) . map ( Deref :: deref ) ) . await
943
946
}
944
947
}
945
948
@@ -1077,7 +1080,7 @@ impl BaseClient {
1077
1080
let settings = settings. ok_or ( MegolmError :: EncryptionNotEnabled ) ?;
1078
1081
let settings = EncryptionSettings :: new ( settings, history_visibility) ;
1079
1082
1080
- Ok ( o. share_group_session ( room_id, members, settings) . await ?)
1083
+ Ok ( o. share_group_session ( room_id, members. map ( Deref :: deref ) , settings) . await ?)
1081
1084
}
1082
1085
None => panic ! ( "Olm machine wasn't started" ) ,
1083
1086
}
@@ -1143,12 +1146,12 @@ impl BaseClient {
1143
1146
/// ```
1144
1147
/// # use std::convert::TryFrom;
1145
1148
/// # use matrix_sdk_base::BaseClient;
1146
- /// # use ruma::UserId ;
1149
+ /// # use ruma::{device_id, user_id} ;
1147
1150
/// # use futures::executor::block_on;
1148
- /// # let alice = UserId::try_from ("@alice:example.org").unwrap ();
1151
+ /// # let alice = user_id! ("@alice:example.org").to_owned ();
1149
1152
/// # let client = BaseClient::new().unwrap();
1150
1153
/// # block_on(async {
1151
- /// let device = client.get_device(&alice, "DEVICEID".into( )).await;
1154
+ /// let device = client.get_device(&alice, device_id!( "DEVICEID")).await;
1152
1155
///
1153
1156
/// println!("{:?}", device);
1154
1157
/// # });
@@ -1201,7 +1204,7 @@ impl BaseClient {
1201
1204
/// # use matrix_sdk_base::BaseClient;
1202
1205
/// # use ruma::UserId;
1203
1206
/// # use futures::executor::block_on;
1204
- /// # let alice = UserId::try_from("@alice:example.org").unwrap();
1207
+ /// # let alice = Box::< UserId> ::try_from("@alice:example.org").unwrap();
1205
1208
/// # let client = BaseClient::new().unwrap();
1206
1209
/// # block_on(async {
1207
1210
/// let devices = client.get_user_devices(&alice).await.unwrap();
@@ -1307,7 +1310,7 @@ impl BaseClient {
1307
1310
} ;
1308
1311
1309
1312
Ok ( Some ( PushConditionRoomCtx {
1310
- room_id : room_id. clone ( ) ,
1313
+ room_id : room_id. to_owned ( ) ,
1311
1314
member_count : UInt :: new ( member_count) . unwrap_or ( UInt :: MAX ) ,
1312
1315
user_display_name,
1313
1316
users_power_levels : room_power_levels. users ,
@@ -1330,15 +1333,16 @@ impl BaseClient {
1330
1333
1331
1334
push_rules. member_count = UInt :: new ( room_info. active_members_count ( ) ) . unwrap_or ( UInt :: MAX ) ;
1332
1335
1333
- if let Some ( member) = changes. members . get ( room_id) . and_then ( |members| members. get ( user_id) )
1336
+ if let Some ( member) =
1337
+ changes. members . get ( & * * room_id) . and_then ( |members| members. get ( user_id) )
1334
1338
{
1335
1339
push_rules. user_display_name =
1336
1340
member. content . displayname . clone ( ) . unwrap_or_else ( || user_id. localpart ( ) . to_owned ( ) )
1337
1341
}
1338
1342
1339
1343
if let Some ( AnySyncStateEvent :: RoomPowerLevels ( event) ) = changes
1340
1344
. state
1341
- . get ( room_id)
1345
+ . get ( & * * room_id)
1342
1346
. and_then ( |types| types. get ( EventType :: RoomPowerLevels . as_str ( ) ) )
1343
1347
. and_then ( |events| events. get ( "" ) )
1344
1348
. and_then ( |e| e. deserialize ( ) . ok ( ) )
0 commit comments