Remove lots of redundant string allocations
This commit is contained in:
		
							parent
							
								
									fe744c856f
								
							
						
					
					
						commit
						dbe8c2ce19
					
				
					 7 changed files with 87 additions and 95 deletions
				
			
		|  | @ -217,7 +217,7 @@ impl Database { | |||
|     } | ||||
| 
 | ||||
|     pub async fn watch(&self, user_id: &UserId, device_id: &DeviceId) { | ||||
|         let userid_bytes = user_id.to_string().as_bytes().to_vec(); | ||||
|         let userid_bytes = user_id.as_bytes().to_vec(); | ||||
|         let mut userid_prefix = userid_bytes.clone(); | ||||
|         userid_prefix.push(0xff); | ||||
| 
 | ||||
|  | @ -241,7 +241,7 @@ impl Database { | |||
| 
 | ||||
|         // Events for rooms we are in
 | ||||
|         for room_id in self.rooms.rooms_joined(user_id).filter_map(|r| r.ok()) { | ||||
|             let roomid_bytes = room_id.to_string().as_bytes().to_vec(); | ||||
|             let roomid_bytes = room_id.as_bytes().to_vec(); | ||||
|             let mut roomid_prefix = roomid_bytes.clone(); | ||||
|             roomid_prefix.push(0xff); | ||||
| 
 | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ impl AccountData { | |||
|             .as_bytes() | ||||
|             .to_vec(); | ||||
|         prefix.push(0xff); | ||||
|         prefix.extend_from_slice(&user_id.to_string().as_bytes()); | ||||
|         prefix.extend_from_slice(&user_id.as_bytes()); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         // Remove old entry
 | ||||
|  | @ -42,7 +42,7 @@ impl AccountData { | |||
|         let mut key = prefix; | ||||
|         key.extend_from_slice(&globals.next_count()?.to_be_bytes()); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(event_type.to_string().as_bytes()); | ||||
|         key.extend_from_slice(event_type.as_ref().as_bytes()); | ||||
| 
 | ||||
|         let json = serde_json::to_value(data).expect("all types here can be serialized"); // TODO: maybe add error handling
 | ||||
|         if json.get("type").is_none() || json.get("content").is_none() { | ||||
|  | @ -89,7 +89,7 @@ impl AccountData { | |||
|             .as_bytes() | ||||
|             .to_vec(); | ||||
|         prefix.push(0xff); | ||||
|         prefix.extend_from_slice(&user_id.to_string().as_bytes()); | ||||
|         prefix.extend_from_slice(&user_id.as_bytes()); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         // Skip the data that's exactly at since, because we sent that last time
 | ||||
|  | @ -135,7 +135,7 @@ impl AccountData { | |||
|             .as_bytes() | ||||
|             .to_vec(); | ||||
|         prefix.push(0xff); | ||||
|         prefix.extend_from_slice(&user_id.to_string().as_bytes()); | ||||
|         prefix.extend_from_slice(&user_id.as_bytes()); | ||||
|         prefix.push(0xff); | ||||
|         let kind = kind.clone(); | ||||
| 
 | ||||
|  | @ -148,7 +148,7 @@ impl AccountData { | |||
|                         k.rsplit(|&b| b == 0xff) | ||||
|                             .next() | ||||
|                             .map(|current_event_type| { | ||||
|                                 current_event_type == kind.to_string().as_bytes() | ||||
|                                 current_event_type == kind.as_ref().as_bytes() | ||||
|                             }) | ||||
|                             .unwrap_or(false) | ||||
|                     }) | ||||
|  |  | |||
|  | @ -24,7 +24,7 @@ impl KeyBackups { | |||
|     ) -> Result<String> { | ||||
|         let version = globals.next_count()?.to_string(); | ||||
| 
 | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&version.as_bytes()); | ||||
| 
 | ||||
|  | @ -39,7 +39,7 @@ impl KeyBackups { | |||
|     } | ||||
| 
 | ||||
|     pub fn delete_backup(&self, user_id: &UserId, version: &str) -> Result<()> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&version.as_bytes()); | ||||
| 
 | ||||
|  | @ -67,7 +67,7 @@ impl KeyBackups { | |||
|         backup_metadata: &BackupAlgorithm, | ||||
|         globals: &super::globals::Globals, | ||||
|     ) -> Result<String> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&version.as_bytes()); | ||||
| 
 | ||||
|  | @ -89,7 +89,7 @@ impl KeyBackups { | |||
|     } | ||||
| 
 | ||||
|     pub fn get_latest_backup(&self, user_id: &UserId) -> Result<Option<(String, BackupAlgorithm)>> { | ||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = user_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
|         self.backupid_algorithm | ||||
|             .scan_prefix(&prefix) | ||||
|  | @ -113,7 +113,7 @@ impl KeyBackups { | |||
|     } | ||||
| 
 | ||||
|     pub fn get_backup(&self, user_id: &UserId, version: &str) -> Result<Option<BackupAlgorithm>> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(version.as_bytes()); | ||||
| 
 | ||||
|  | @ -132,7 +132,7 @@ impl KeyBackups { | |||
|         key_data: &KeyBackupData, | ||||
|         globals: &super::globals::Globals, | ||||
|     ) -> Result<()> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(version.as_bytes()); | ||||
| 
 | ||||
|  | @ -147,7 +147,7 @@ impl KeyBackups { | |||
|             .insert(&key, &globals.next_count()?.to_be_bytes())?; | ||||
| 
 | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(room_id.to_string().as_bytes()); | ||||
|         key.extend_from_slice(room_id.as_bytes()); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(session_id.as_bytes()); | ||||
| 
 | ||||
|  | @ -160,7 +160,7 @@ impl KeyBackups { | |||
|     } | ||||
| 
 | ||||
|     pub fn count_keys(&self, user_id: &UserId, version: &str) -> Result<usize> { | ||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = user_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
|         prefix.extend_from_slice(version.as_bytes()); | ||||
| 
 | ||||
|  | @ -168,7 +168,7 @@ impl KeyBackups { | |||
|     } | ||||
| 
 | ||||
|     pub fn get_etag(&self, user_id: &UserId, version: &str) -> Result<String> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&version.as_bytes()); | ||||
| 
 | ||||
|  | @ -187,7 +187,7 @@ impl KeyBackups { | |||
|         user_id: &UserId, | ||||
|         version: &str, | ||||
|     ) -> Result<BTreeMap<RoomId, RoomKeyBackup>> { | ||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = user_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
|         prefix.extend_from_slice(version.as_bytes()); | ||||
|         prefix.push(0xff); | ||||
|  | @ -240,7 +240,7 @@ impl KeyBackups { | |||
|         version: &str, | ||||
|         room_id: &RoomId, | ||||
|     ) -> BTreeMap<String, KeyBackupData> { | ||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = user_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
|         prefix.extend_from_slice(version.as_bytes()); | ||||
|         prefix.push(0xff); | ||||
|  | @ -278,7 +278,7 @@ impl KeyBackups { | |||
|         room_id: &RoomId, | ||||
|         session_id: &str, | ||||
|     ) -> Result<Option<KeyBackupData>> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(version.as_bytes()); | ||||
|         key.push(0xff); | ||||
|  | @ -297,7 +297,7 @@ impl KeyBackups { | |||
|     } | ||||
| 
 | ||||
|     pub fn delete_all_keys(&self, user_id: &UserId, version: &str) -> Result<()> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&version.as_bytes()); | ||||
|         key.push(0xff); | ||||
|  | @ -320,7 +320,7 @@ impl KeyBackups { | |||
|         version: &str, | ||||
|         room_id: &RoomId, | ||||
|     ) -> Result<()> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&version.as_bytes()); | ||||
|         key.push(0xff); | ||||
|  | @ -346,7 +346,7 @@ impl KeyBackups { | |||
|         room_id: &RoomId, | ||||
|         session_id: &str, | ||||
|     ) -> Result<()> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&version.as_bytes()); | ||||
|         key.push(0xff); | ||||
|  |  | |||
|  | @ -151,7 +151,7 @@ impl Rooms { | |||
|         event_type: &EventType, | ||||
|         state_key: &str, | ||||
|     ) -> Result<Option<PduEvent>> { | ||||
|         let mut key = event_type.to_string().as_bytes().to_vec(); | ||||
|         let mut key = event_type.as_ref().as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&state_key.as_bytes()); | ||||
| 
 | ||||
|  | @ -416,7 +416,7 @@ impl Rooms { | |||
|     /// Returns the pdu's id.
 | ||||
|     pub fn get_pdu_id(&self, event_id: &EventId) -> Result<Option<IVec>> { | ||||
|         self.eventid_pduid | ||||
|             .get(event_id.to_string().as_bytes())? | ||||
|             .get(event_id.as_bytes())? | ||||
|             .map_or(Ok(None), |pdu_id| Ok(Some(pdu_id))) | ||||
|     } | ||||
| 
 | ||||
|  | @ -690,7 +690,7 @@ impl Rooms { | |||
|                         .split_terminator(|c: char| !c.is_alphanumeric()) | ||||
|                         .map(str::to_lowercase) | ||||
|                     { | ||||
|                         let mut key = pdu.room_id.to_string().as_bytes().to_vec(); | ||||
|                         let mut key = pdu.room_id.as_bytes().to_vec(); | ||||
|                         key.push(0xff); | ||||
|                         key.extend_from_slice(word.as_bytes()); | ||||
|                         key.push(0xff); | ||||
|  | @ -1264,7 +1264,7 @@ impl Rooms { | |||
|         room_id: &RoomId, | ||||
|         since: u64, | ||||
|     ) -> Result<impl DoubleEndedIterator<Item = Result<(IVec, PduEvent)>>> { | ||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = room_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         // Skip the first pdu if it's exactly at since, because we sent that last time
 | ||||
|  | @ -1298,7 +1298,7 @@ impl Rooms { | |||
|         until: u64, | ||||
|     ) -> impl Iterator<Item = Result<(IVec, PduEvent)>> { | ||||
|         // Create the first part of the full pdu id
 | ||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = room_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         let mut current = prefix.clone(); | ||||
|  | @ -1332,7 +1332,7 @@ impl Rooms { | |||
|         from: u64, | ||||
|     ) -> impl Iterator<Item = Result<(IVec, PduEvent)>> { | ||||
|         // Create the first part of the full pdu id
 | ||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = room_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         let mut current = prefix.clone(); | ||||
|  | @ -1883,9 +1883,9 @@ impl Rooms { | |||
|     } | ||||
| 
 | ||||
|     pub fn once_joined(&self, user_id: &UserId, room_id: &RoomId) -> Result<bool> { | ||||
|         let mut userroom_id = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut userroom_id = user_id.as_bytes().to_vec(); | ||||
|         userroom_id.push(0xff); | ||||
|         userroom_id.extend_from_slice(room_id.to_string().as_bytes()); | ||||
|         userroom_id.extend_from_slice(room_id.as_bytes()); | ||||
| 
 | ||||
|         Ok(self.roomuseroncejoinedids.get(userroom_id)?.is_some()) | ||||
|     } | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ impl RoomEdus { | |||
|         event: EduEvent, | ||||
|         globals: &super::super::globals::Globals, | ||||
|     ) -> Result<()> { | ||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = room_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         // Remove old entry
 | ||||
|  | @ -49,7 +49,7 @@ impl RoomEdus { | |||
|                 key.rsplit(|&b| b == 0xff) | ||||
|                     .next() | ||||
|                     .expect("rsplit always returns an element") | ||||
|                     == user_id.to_string().as_bytes() | ||||
|                     == user_id.as_bytes() | ||||
|             }) | ||||
|         { | ||||
|             // This is the old room_latest
 | ||||
|  | @ -59,7 +59,7 @@ impl RoomEdus { | |||
|         let mut room_latest_id = prefix; | ||||
|         room_latest_id.extend_from_slice(&globals.next_count()?.to_be_bytes()); | ||||
|         room_latest_id.push(0xff); | ||||
|         room_latest_id.extend_from_slice(&user_id.to_string().as_bytes()); | ||||
|         room_latest_id.extend_from_slice(&user_id.as_bytes()); | ||||
| 
 | ||||
|         self.readreceiptid_readreceipt.insert( | ||||
|             room_latest_id, | ||||
|  | @ -76,7 +76,7 @@ impl RoomEdus { | |||
|         room_id: &RoomId, | ||||
|         since: u64, | ||||
|     ) -> Result<impl Iterator<Item = Result<Raw<ruma::events::AnySyncEphemeralRoomEvent>>>> { | ||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = room_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         let mut first_possible_edu = prefix.clone(); | ||||
|  | @ -102,9 +102,9 @@ impl RoomEdus { | |||
|         count: u64, | ||||
|         globals: &super::super::globals::Globals, | ||||
|     ) -> Result<()> { | ||||
|         let mut key = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = room_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&user_id.to_string().as_bytes()); | ||||
|         key.extend_from_slice(&user_id.as_bytes()); | ||||
| 
 | ||||
|         self.roomuserid_privateread | ||||
|             .insert(&key, &count.to_be_bytes())?; | ||||
|  | @ -118,9 +118,9 @@ impl RoomEdus { | |||
|     /// Returns the private read marker.
 | ||||
|     #[tracing::instrument(skip(self))] | ||||
|     pub fn private_read_get(&self, room_id: &RoomId, user_id: &UserId) -> Result<Option<u64>> { | ||||
|         let mut key = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = room_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&user_id.to_string().as_bytes()); | ||||
|         key.extend_from_slice(&user_id.as_bytes()); | ||||
| 
 | ||||
|         self.roomuserid_privateread.get(key)?.map_or(Ok(None), |v| { | ||||
|             Ok(Some(utils::u64_from_bytes(&v).map_err(|_| { | ||||
|  | @ -131,9 +131,9 @@ impl RoomEdus { | |||
| 
 | ||||
|     /// Returns the count of the last typing update in this room.
 | ||||
|     pub fn last_privateread_update(&self, user_id: &UserId, room_id: &RoomId) -> Result<u64> { | ||||
|         let mut key = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = room_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&user_id.to_string().as_bytes()); | ||||
|         key.extend_from_slice(&user_id.as_bytes()); | ||||
| 
 | ||||
|         Ok(self | ||||
|             .roomuserid_lastprivatereadupdate | ||||
|  | @ -155,7 +155,7 @@ impl RoomEdus { | |||
|         timeout: u64, | ||||
|         globals: &super::super::globals::Globals, | ||||
|     ) -> Result<()> { | ||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = room_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         let count = globals.next_count()?.to_be_bytes(); | ||||
|  | @ -166,10 +166,10 @@ impl RoomEdus { | |||
|         room_typing_id.extend_from_slice(&count); | ||||
| 
 | ||||
|         self.typingid_userid | ||||
|             .insert(&room_typing_id, &*user_id.to_string().as_bytes())?; | ||||
|             .insert(&room_typing_id, &*user_id.as_bytes())?; | ||||
| 
 | ||||
|         self.roomid_lasttypingupdate | ||||
|             .insert(&room_id.to_string().as_bytes(), &count)?; | ||||
|             .insert(&room_id.as_bytes(), &count)?; | ||||
| 
 | ||||
|         Ok(()) | ||||
|     } | ||||
|  | @ -181,7 +181,7 @@ impl RoomEdus { | |||
|         room_id: &RoomId, | ||||
|         globals: &super::super::globals::Globals, | ||||
|     ) -> Result<()> { | ||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = room_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         let user_id = user_id.to_string(); | ||||
|  | @ -200,10 +200,8 @@ impl RoomEdus { | |||
|         } | ||||
| 
 | ||||
|         if found_outdated { | ||||
|             self.roomid_lasttypingupdate.insert( | ||||
|                 &room_id.to_string().as_bytes(), | ||||
|                 &globals.next_count()?.to_be_bytes(), | ||||
|             )?; | ||||
|             self.roomid_lasttypingupdate | ||||
|                 .insert(&room_id.as_bytes(), &globals.next_count()?.to_be_bytes())?; | ||||
|         } | ||||
| 
 | ||||
|         Ok(()) | ||||
|  | @ -215,7 +213,7 @@ impl RoomEdus { | |||
|         room_id: &RoomId, | ||||
|         globals: &super::super::globals::Globals, | ||||
|     ) -> Result<()> { | ||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = room_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         let current_timestamp = utils::millis_since_unix_epoch(); | ||||
|  | @ -248,10 +246,8 @@ impl RoomEdus { | |||
|         } | ||||
| 
 | ||||
|         if found_outdated { | ||||
|             self.roomid_lasttypingupdate.insert( | ||||
|                 &room_id.to_string().as_bytes(), | ||||
|                 &globals.next_count()?.to_be_bytes(), | ||||
|             )?; | ||||
|             self.roomid_lasttypingupdate | ||||
|                 .insert(&room_id.as_bytes(), &globals.next_count()?.to_be_bytes())?; | ||||
|         } | ||||
| 
 | ||||
|         Ok(()) | ||||
|  | @ -268,7 +264,7 @@ impl RoomEdus { | |||
| 
 | ||||
|         Ok(self | ||||
|             .roomid_lasttypingupdate | ||||
|             .get(&room_id.to_string().as_bytes())? | ||||
|             .get(&room_id.as_bytes())? | ||||
|             .map_or(Ok::<_, Error>(None), |bytes| { | ||||
|                 Ok(Some(utils::u64_from_bytes(&bytes).map_err(|_| { | ||||
|                     Error::bad_database("Count in roomid_lastroomactiveupdate is invalid.") | ||||
|  | @ -281,7 +277,7 @@ impl RoomEdus { | |||
|         &self, | ||||
|         room_id: &RoomId, | ||||
|     ) -> Result<SyncEphemeralRoomEvent<ruma::events::typing::TypingEventContent>> { | ||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = room_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         let mut user_ids = Vec::new(); | ||||
|  | @ -322,11 +318,11 @@ impl RoomEdus { | |||
| 
 | ||||
|         let count = globals.next_count()?.to_be_bytes(); | ||||
| 
 | ||||
|         let mut presence_id = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut presence_id = room_id.as_bytes().to_vec(); | ||||
|         presence_id.push(0xff); | ||||
|         presence_id.extend_from_slice(&count); | ||||
|         presence_id.push(0xff); | ||||
|         presence_id.extend_from_slice(&presence.sender.to_string().as_bytes()); | ||||
|         presence_id.extend_from_slice(&presence.sender.as_bytes()); | ||||
| 
 | ||||
|         self.presenceid_presence.insert( | ||||
|             presence_id, | ||||
|  | @ -334,7 +330,7 @@ impl RoomEdus { | |||
|         )?; | ||||
| 
 | ||||
|         self.userid_lastpresenceupdate.insert( | ||||
|             &user_id.to_string().as_bytes(), | ||||
|             &user_id.as_bytes(), | ||||
|             &utils::millis_since_unix_epoch().to_be_bytes(), | ||||
|         )?; | ||||
| 
 | ||||
|  | @ -345,7 +341,7 @@ impl RoomEdus { | |||
|     #[tracing::instrument(skip(self))] | ||||
|     pub fn ping_presence(&self, user_id: &UserId) -> Result<()> { | ||||
|         self.userid_lastpresenceupdate.insert( | ||||
|             &user_id.to_string().as_bytes(), | ||||
|             &user_id.as_bytes(), | ||||
|             &utils::millis_since_unix_epoch().to_be_bytes(), | ||||
|         )?; | ||||
| 
 | ||||
|  | @ -355,7 +351,7 @@ impl RoomEdus { | |||
|     /// Returns the timestamp of the last presence update of this user in millis since the unix epoch.
 | ||||
|     pub fn last_presence_update(&self, user_id: &UserId) -> Result<Option<u64>> { | ||||
|         self.userid_lastpresenceupdate | ||||
|             .get(&user_id.to_string().as_bytes())? | ||||
|             .get(&user_id.as_bytes())? | ||||
|             .map(|bytes| { | ||||
|                 utils::u64_from_bytes(&bytes).map_err(|_| { | ||||
|                     Error::bad_database("Invalid timestamp in userid_lastpresenceupdate.") | ||||
|  | @ -398,7 +394,7 @@ impl RoomEdus { | |||
|                 .try_into() | ||||
|                 .map_err(|_| Error::bad_database("Invalid UserId in userid_lastpresenceupdate."))?; | ||||
|             for room_id in rooms.rooms_joined(&user_id).filter_map(|r| r.ok()) { | ||||
|                 let mut presence_id = room_id.to_string().as_bytes().to_vec(); | ||||
|                 let mut presence_id = room_id.as_bytes().to_vec(); | ||||
|                 presence_id.push(0xff); | ||||
|                 presence_id.extend_from_slice(&count); | ||||
|                 presence_id.push(0xff); | ||||
|  | @ -424,7 +420,7 @@ impl RoomEdus { | |||
|             } | ||||
| 
 | ||||
|             self.userid_lastpresenceupdate.insert( | ||||
|                 &user_id.to_string().as_bytes(), | ||||
|                 &user_id.as_bytes(), | ||||
|                 &utils::millis_since_unix_epoch().to_be_bytes(), | ||||
|             )?; | ||||
|         } | ||||
|  | @ -443,7 +439,7 @@ impl RoomEdus { | |||
|     ) -> Result<HashMap<UserId, PresenceEvent>> { | ||||
|         self.presence_maintain(rooms, globals)?; | ||||
| 
 | ||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = room_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         let mut first_possible_edu = prefix.clone(); | ||||
|  |  | |||
|  | @ -148,7 +148,7 @@ impl Uiaa { | |||
|         device_id: &DeviceId, | ||||
|         uiaainfo: Option<&UiaaInfo>, | ||||
|     ) -> Result<()> { | ||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||
|         userdeviceid.push(0xff); | ||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||
| 
 | ||||
|  | @ -170,7 +170,7 @@ impl Uiaa { | |||
|         device_id: &DeviceId, | ||||
|         session: &str, | ||||
|     ) -> Result<UiaaInfo> { | ||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||
|         userdeviceid.push(0xff); | ||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||
| 
 | ||||
|  |  | |||
|  | @ -185,7 +185,7 @@ impl Users { | |||
|         // This method should never be called for nonexistent users.
 | ||||
|         assert!(self.exists(user_id)?); | ||||
| 
 | ||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||
|         userdeviceid.push(0xff); | ||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||
| 
 | ||||
|  | @ -208,7 +208,7 @@ impl Users { | |||
| 
 | ||||
|     /// Removes a device from a user.
 | ||||
|     pub fn remove_device(&self, user_id: &UserId, device_id: &DeviceId) -> Result<()> { | ||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||
|         userdeviceid.push(0xff); | ||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||
| 
 | ||||
|  | @ -234,7 +234,7 @@ impl Users { | |||
| 
 | ||||
|     /// Returns an iterator over all device ids of this user.
 | ||||
|     pub fn all_device_ids(&self, user_id: &UserId) -> impl Iterator<Item = Result<Box<DeviceId>>> { | ||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = user_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
|         // All devices have metadata
 | ||||
|         self.userdeviceid_metadata | ||||
|  | @ -254,7 +254,7 @@ impl Users { | |||
| 
 | ||||
|     /// Replaces the access token of one device.
 | ||||
|     pub fn set_token(&self, user_id: &UserId, device_id: &DeviceId, token: &str) -> Result<()> { | ||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||
|         userdeviceid.push(0xff); | ||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||
| 
 | ||||
|  | @ -282,7 +282,7 @@ impl Users { | |||
|         one_time_key_value: &OneTimeKey, | ||||
|         globals: &super::globals::Globals, | ||||
|     ) -> Result<()> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(device_id.as_bytes()); | ||||
| 
 | ||||
|  | @ -305,10 +305,8 @@ impl Users { | |||
|                 .expect("OneTimeKey::to_string always works"), | ||||
|         )?; | ||||
| 
 | ||||
|         self.userid_lastonetimekeyupdate.insert( | ||||
|             &user_id.to_string().as_bytes(), | ||||
|             &globals.next_count()?.to_be_bytes(), | ||||
|         )?; | ||||
|         self.userid_lastonetimekeyupdate | ||||
|             .insert(&user_id.as_bytes(), &globals.next_count()?.to_be_bytes())?; | ||||
| 
 | ||||
|         Ok(()) | ||||
|     } | ||||
|  | @ -316,7 +314,7 @@ impl Users { | |||
|     #[tracing::instrument(skip(self))] | ||||
|     pub fn last_one_time_keys_update(&self, user_id: &UserId) -> Result<u64> { | ||||
|         self.userid_lastonetimekeyupdate | ||||
|             .get(&user_id.to_string().as_bytes())? | ||||
|             .get(&user_id.as_bytes())? | ||||
|             .map(|bytes| { | ||||
|                 utils::u64_from_bytes(&bytes).map_err(|_| { | ||||
|                     Error::bad_database("Count in roomid_lastroomactiveupdate is invalid.") | ||||
|  | @ -332,18 +330,16 @@ impl Users { | |||
|         key_algorithm: &DeviceKeyAlgorithm, | ||||
|         globals: &super::globals::Globals, | ||||
|     ) -> Result<Option<(DeviceKeyId, OneTimeKey)>> { | ||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = user_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
|         prefix.extend_from_slice(device_id.as_bytes()); | ||||
|         prefix.push(0xff); | ||||
|         prefix.push(b'"'); // Annoying quotation mark
 | ||||
|         prefix.extend_from_slice(key_algorithm.to_string().as_bytes()); | ||||
|         prefix.extend_from_slice(key_algorithm.as_ref().as_bytes()); | ||||
|         prefix.push(b':'); | ||||
| 
 | ||||
|         self.userid_lastonetimekeyupdate.insert( | ||||
|             &user_id.to_string().as_bytes(), | ||||
|             &globals.next_count()?.to_be_bytes(), | ||||
|         )?; | ||||
|         self.userid_lastonetimekeyupdate | ||||
|             .insert(&user_id.as_bytes(), &globals.next_count()?.to_be_bytes())?; | ||||
| 
 | ||||
|         self.onetimekeyid_onetimekeys | ||||
|             .scan_prefix(&prefix) | ||||
|  | @ -373,7 +369,7 @@ impl Users { | |||
|         user_id: &UserId, | ||||
|         device_id: &DeviceId, | ||||
|     ) -> Result<BTreeMap<DeviceKeyAlgorithm, UInt>> { | ||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||
|         userdeviceid.push(0xff); | ||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||
| 
 | ||||
|  | @ -409,7 +405,7 @@ impl Users { | |||
|         rooms: &super::rooms::Rooms, | ||||
|         globals: &super::globals::Globals, | ||||
|     ) -> Result<()> { | ||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||
|         userdeviceid.push(0xff); | ||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||
| 
 | ||||
|  | @ -434,7 +430,7 @@ impl Users { | |||
|     ) -> Result<()> { | ||||
|         // TODO: Check signatures
 | ||||
| 
 | ||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = user_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
| 
 | ||||
|         // Master key
 | ||||
|  | @ -532,9 +528,9 @@ impl Users { | |||
|         rooms: &super::rooms::Rooms, | ||||
|         globals: &super::globals::Globals, | ||||
|     ) -> Result<()> { | ||||
|         let mut key = target_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = target_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(key_id.to_string().as_bytes()); | ||||
|         key.extend_from_slice(key_id.as_bytes()); | ||||
| 
 | ||||
|         let mut cross_signing_key = | ||||
|             serde_json::from_slice::<serde_json::Value>(&self.keyid_key.get(&key)?.ok_or( | ||||
|  | @ -617,14 +613,14 @@ impl Users { | |||
|                 continue; | ||||
|             } | ||||
| 
 | ||||
|             let mut key = room_id.to_string().as_bytes().to_vec(); | ||||
|             let mut key = room_id.as_bytes().to_vec(); | ||||
|             key.push(0xff); | ||||
|             key.extend_from_slice(&count); | ||||
| 
 | ||||
|             self.keychangeid_userid.insert(key, &*user_id.to_string())?; | ||||
|         } | ||||
| 
 | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(&count); | ||||
|         self.keychangeid_userid.insert(key, &*user_id.to_string())?; | ||||
|  | @ -637,7 +633,7 @@ impl Users { | |||
|         user_id: &UserId, | ||||
|         device_id: &DeviceId, | ||||
|     ) -> Result<Option<DeviceKeys>> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(device_id.as_bytes()); | ||||
| 
 | ||||
|  | @ -724,7 +720,7 @@ impl Users { | |||
|         content: serde_json::Value, | ||||
|         globals: &super::globals::Globals, | ||||
|     ) -> Result<()> { | ||||
|         let mut key = target_user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = target_user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
|         key.extend_from_slice(target_device_id.as_bytes()); | ||||
|         key.push(0xff); | ||||
|  | @ -751,7 +747,7 @@ impl Users { | |||
|     ) -> Result<Vec<Raw<AnyToDeviceEvent>>> { | ||||
|         let mut events = Vec::new(); | ||||
| 
 | ||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = user_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
|         prefix.extend_from_slice(device_id.as_bytes()); | ||||
|         prefix.push(0xff); | ||||
|  | @ -773,7 +769,7 @@ impl Users { | |||
|         device_id: &DeviceId, | ||||
|         until: u64, | ||||
|     ) -> Result<()> { | ||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut prefix = user_id.as_bytes().to_vec(); | ||||
|         prefix.push(0xff); | ||||
|         prefix.extend_from_slice(device_id.as_bytes()); | ||||
|         prefix.push(0xff); | ||||
|  | @ -808,7 +804,7 @@ impl Users { | |||
|         device_id: &DeviceId, | ||||
|         device: &Device, | ||||
|     ) -> Result<()> { | ||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||
|         userdeviceid.push(0xff); | ||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||
| 
 | ||||
|  | @ -831,7 +827,7 @@ impl Users { | |||
|         user_id: &UserId, | ||||
|         device_id: &DeviceId, | ||||
|     ) -> Result<Option<Device>> { | ||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||
|         userdeviceid.push(0xff); | ||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||
| 
 | ||||
|  | @ -845,7 +841,7 @@ impl Users { | |||
|     } | ||||
| 
 | ||||
|     pub fn all_devices_metadata(&self, user_id: &UserId) -> impl Iterator<Item = Result<Device>> { | ||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); | ||||
|         let mut key = user_id.as_bytes().to_vec(); | ||||
|         key.push(0xff); | ||||
| 
 | ||||
|         self.userdeviceid_metadata | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue