From 87d6a17f0a631fb2b45fbd45a2e132f83dcad476 Mon Sep 17 00:00:00 2001
From: strawberry <june@girlboss.ceo>
Date: Wed, 29 Nov 2023 21:36:02 -0500
Subject: [PATCH] fix all the warnings!!!! (0 clippy and rustc warnings now)

too many changes to list, codebase significantly better than it was a few weeks ago though

Signed-off-by: strawberry <june@girlboss.ceo>
---
 src/api/client_server/media.rs               |  4 +-
 src/api/client_server/membership.rs          |  7 +-
 src/api/server_server.rs                     |  2 +-
 src/config/mod.rs                            |  8 ++-
 src/database/abstraction/watchers.rs         |  4 +-
 src/database/key_value/account_data.rs       | 11 +--
 src/database/key_value/rooms/pdu_metadata.rs |  9 ++-
 src/database/key_value/rooms/search.rs       |  8 +--
 src/database/key_value/rooms/short.rs        |  9 +--
 src/database/key_value/rooms/state_cache.rs  | 16 ++---
 src/database/key_value/rooms/threads.rs      |  4 +-
 src/database/key_value/rooms/timeline.rs     | 15 ++---
 src/database/key_value/users.rs              | 10 +--
 src/main.rs                                  |  4 +-
 src/service/globals/mod.rs                   |  6 +-
 src/service/rooms/edus/read_receipt/data.rs  | 24 +++----
 src/service/rooms/event_handler/mod.rs       | 10 ++-
 src/service/rooms/lazy_loading/mod.rs        |  6 +-
 src/service/rooms/pdu_metadata/data.rs       |  7 +-
 src/service/rooms/search/data.rs             |  8 +--
 src/service/rooms/state_cache/data.rs        | 16 ++---
 src/service/rooms/state_compressor/mod.rs    | 71 +++++++++++---------
 src/service/rooms/threads/data.rs            |  4 +-
 src/service/rooms/timeline/data.rs           | 17 ++---
 src/service/rooms/timeline/mod.rs            |  2 +-
 src/service/sending/data.rs                  | 13 ++--
 src/service/users/mod.rs                     |  6 +-
 27 files changed, 162 insertions(+), 139 deletions(-)

diff --git a/src/api/client_server/media.rs b/src/api/client_server/media.rs
index 1e753a7a5..2c34a24ec 100644
--- a/src/api/client_server/media.rs
+++ b/src/api/client_server/media.rs
@@ -50,8 +50,10 @@ pub async fn create_content_route(
         )
         .await?;
 
+    let content_uri = mxc.into();
+
     Ok(create_content::v3::Response {
-        content_uri: mxc.try_into()?,
+        content_uri,
         blurhash: None,
     })
 }
diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs
index e2a14c585..82ed9a2f2 100644
--- a/src/api/client_server/membership.rs
+++ b/src/api/client_server/membership.rs
@@ -722,7 +722,8 @@ async fn join_room_by_id_helper(
         }
 
         info!("Running send_join auth check");
-        if !state_res::event_auth::auth_check(
+
+        let auth_check = state_res::event_auth::auth_check(
             &state_res::RoomVersion::new(&room_version_id).expect("room version is supported"),
             &parsed_join_pdu,
             None::<PduEvent>, // TODO: third party invite
@@ -745,7 +746,9 @@ async fn join_room_by_id_helper(
         .map_err(|e| {
             warn!("Auth check failed: {e}");
             Error::BadRequest(ErrorKind::InvalidParam, "Auth check failed")
-        })? {
+        })?;
+
+        if !auth_check {
             return Err(Error::BadRequest(
                 ErrorKind::InvalidParam,
                 "Auth check failed",
diff --git a/src/api/server_server.rs b/src/api/server_server.rs
index a361c848b..1dffb4811 100644
--- a/src/api/server_server.rs
+++ b/src/api/server_server.rs
@@ -572,7 +572,7 @@ pub async fn get_server_version_route(
 
     Ok(get_server_version::v1::Response {
         server: Some(get_server_version::v1::Server {
-            name: Some("cowonduit".to_owned()),
+            name: Some(env!("CARGO_CRATE_NAME").to_owned()),
             version: Some(env!("CARGO_PKG_VERSION").to_owned()),
         }),
     })
diff --git a/src/config/mod.rs b/src/config/mod.rs
index a26b47142..758ad180c 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -122,6 +122,7 @@ pub struct TlsConfig {
 const DEPRECATED_KEYS: &[&str] = &["cache_capacity"];
 
 impl Config {
+    /// Iterates over all the keys in the config file and warns if there is a deprecated key specified
     pub fn warn_deprecated(&self) {
         let mut was_deprecated = false;
         for key in self
@@ -139,16 +140,17 @@ pub fn warn_deprecated(&self) {
     }
 
     /// Checks the presence of the `address` and `unix_socket_path` keys in the raw_config, exiting the process if both keys were detected.
-    pub fn error_dual_listening(&self, raw_config: Figment) -> Result<(), ()> {
+    pub fn is_dual_listening(&self, raw_config: Figment) -> bool {
         let check_address = raw_config.find_value("address");
         let check_unix_socket = raw_config.find_value("unix_socket_path");
 
+        // are the check_address and check_unix_socket keys both Ok (specified) at the same time?
         if check_address.is_ok() && check_unix_socket.is_ok() {
             error!("TOML keys \"address\" and \"unix_socket_path\" were both defined. Please specify only one option.");
-            return Err(());
+            return true;
         }
 
-        Ok(())
+        false
     }
 }
 
diff --git a/src/database/abstraction/watchers.rs b/src/database/abstraction/watchers.rs
index 55cb60b36..07087c1f1 100644
--- a/src/database/abstraction/watchers.rs
+++ b/src/database/abstraction/watchers.rs
@@ -6,9 +6,11 @@
 };
 use tokio::sync::watch;
 
+type Watcher = RwLock<HashMap<Vec<u8>, (watch::Sender<()>, watch::Receiver<()>)>>;
+
 #[derive(Default)]
 pub(super) struct Watchers {
-    watchers: RwLock<HashMap<Vec<u8>, (watch::Sender<()>, watch::Receiver<()>)>>,
+    watchers: Watcher,
 }
 
 impl Watchers {
diff --git a/src/database/key_value/account_data.rs b/src/database/key_value/account_data.rs
index e1eef9663..daa63901a 100644
--- a/src/database/key_value/account_data.rs
+++ b/src/database/key_value/account_data.rs
@@ -6,6 +6,7 @@
     serde::Raw,
     RoomId, UserId,
 };
+use tracing::warn;
 
 use crate::{database::KeyValueDatabase, service, services, utils, Error, Result};
 
@@ -123,13 +124,15 @@ fn changes_since(
             .take_while(move |(k, _)| k.starts_with(&prefix))
             .map(|(k, v)| {
                 Ok::<_, Error>((
-                    RoomAccountDataEventType::try_from(
+                    RoomAccountDataEventType::from(
                         utils::string_from_bytes(k.rsplit(|&b| b == 0xff).next().ok_or_else(
                             || Error::bad_database("RoomUserData ID in db is invalid."),
                         )?)
-                        .map_err(|_| Error::bad_database("RoomUserData ID in db is invalid."))?,
-                    )
-                    .map_err(|_| Error::bad_database("RoomUserData ID in db is invalid."))?,
+                        .map_err(|e| {
+                            warn!("RoomUserData ID in database is invalid: {}", e);
+                            Error::bad_database("RoomUserData ID in db is invalid.")
+                        })?,
+                    ),
                     serde_json::from_slice::<Raw<AnyEphemeralRoomEvent>>(&v).map_err(|_| {
                         Error::bad_database("Database contains invalid account data.")
                     })?,
diff --git a/src/database/key_value/rooms/pdu_metadata.rs b/src/database/key_value/rooms/pdu_metadata.rs
index 0641f9d8d..ebfba814b 100644
--- a/src/database/key_value/rooms/pdu_metadata.rs
+++ b/src/database/key_value/rooms/pdu_metadata.rs
@@ -4,8 +4,11 @@
 
 use crate::{
     database::KeyValueDatabase,
-    service::{self, rooms::timeline::PduCount},
-    services, utils, Error, PduEvent, Result,
+    service::{
+        self,
+        rooms::timeline::{data::PduData, PduCount},
+    },
+    services, utils, Error, Result,
 };
 
 impl service::rooms::pdu_metadata::Data for KeyValueDatabase {
@@ -22,7 +25,7 @@ fn relations_until<'a>(
         shortroomid: u64,
         target: u64,
         until: PduCount,
-    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>> {
+    ) -> PduData<'a> {
         let prefix = target.to_be_bytes().to_vec();
         let mut current = prefix.clone();
 
diff --git a/src/database/key_value/rooms/search.rs b/src/database/key_value/rooms/search.rs
index ad573f065..9aceaa63c 100644
--- a/src/database/key_value/rooms/search.rs
+++ b/src/database/key_value/rooms/search.rs
@@ -2,6 +2,8 @@
 
 use crate::{database::KeyValueDatabase, service, services, utils, Result};
 
+type SearchPdusResult<'a> = Result<Option<(Box<dyn Iterator<Item = Vec<u8>> + 'a>, Vec<String>)>>;
+
 impl service::rooms::search::Data for KeyValueDatabase {
     fn index_pdu<'a>(&self, shortroomid: u64, pdu_id: &[u8], message_body: &str) -> Result<()> {
         let mut batch = message_body
@@ -20,11 +22,7 @@ fn index_pdu<'a>(&self, shortroomid: u64, pdu_id: &[u8], message_body: &str) ->
         self.tokenids.insert_batch(&mut batch)
     }
 
-    fn search_pdus<'a>(
-        &'a self,
-        room_id: &RoomId,
-        search_string: &str,
-    ) -> Result<Option<(Box<dyn Iterator<Item = Vec<u8>> + 'a>, Vec<String>)>> {
+    fn search_pdus<'a>(&'a self, room_id: &RoomId, search_string: &str) -> SearchPdusResult<'a> {
         let prefix = services()
             .rooms
             .short
diff --git a/src/database/key_value/rooms/short.rs b/src/database/key_value/rooms/short.rs
index c02231706..502557a0d 100644
--- a/src/database/key_value/rooms/short.rs
+++ b/src/database/key_value/rooms/short.rs
@@ -1,6 +1,7 @@
 use std::sync::Arc;
 
 use ruma::{events::StateEventType, EventId, RoomId};
+use tracing::warn;
 
 use crate::{database::KeyValueDatabase, service, services, utils, Error, Result};
 
@@ -157,10 +158,10 @@ fn get_statekey_from_short(&self, shortstatekey: u64) -> Result<(StateEventType,
             .ok_or_else(|| Error::bad_database("Invalid statekey in shortstatekey_statekey."))?;
 
         let event_type =
-            StateEventType::try_from(utils::string_from_bytes(eventtype_bytes).map_err(|_| {
-                Error::bad_database("Event type in shortstatekey_statekey is invalid unicode.")
-            })?)
-            .map_err(|_| Error::bad_database("Event type in shortstatekey_statekey is invalid."))?;
+            StateEventType::from(utils::string_from_bytes(eventtype_bytes).map_err(|e| {
+                warn!("Event type in shortstatekey_statekey is invalid: {}", e);
+                Error::bad_database("Event type in shortstatekey_statekey is invalid.")
+            })?);
 
         let state_key = utils::string_from_bytes(statekey_bytes).map_err(|_| {
             Error::bad_database("Statekey in shortstatekey_statekey is invalid unicode.")
diff --git a/src/database/key_value/rooms/state_cache.rs b/src/database/key_value/rooms/state_cache.rs
index d0ea0c2cf..7894b0f3e 100644
--- a/src/database/key_value/rooms/state_cache.rs
+++ b/src/database/key_value/rooms/state_cache.rs
@@ -9,6 +9,12 @@
 
 use crate::{database::KeyValueDatabase, service, services, utils, Error, Result};
 
+type StrippedStateEventIter<'a> =
+    Box<dyn Iterator<Item = Result<(OwnedRoomId, Vec<Raw<AnyStrippedStateEvent>>)>> + 'a>;
+
+type AnySyncStateEventIter<'a> =
+    Box<dyn Iterator<Item = Result<(OwnedRoomId, Vec<Raw<AnySyncStateEvent>>)>> + 'a>;
+
 impl service::rooms::state_cache::Data for KeyValueDatabase {
     fn mark_as_once_joined(&self, user_id: &UserId, room_id: &RoomId) -> Result<()> {
         let mut userroom_id = user_id.as_bytes().to_vec();
@@ -472,10 +478,7 @@ fn rooms_joined<'a>(
 
     /// Returns an iterator over all rooms a user was invited to.
     #[tracing::instrument(skip(self))]
-    fn rooms_invited<'a>(
-        &'a self,
-        user_id: &UserId,
-    ) -> Box<dyn Iterator<Item = Result<(OwnedRoomId, Vec<Raw<AnyStrippedStateEvent>>)>> + 'a> {
+    fn rooms_invited<'a>(&'a self, user_id: &UserId) -> StrippedStateEventIter<'a> {
         let mut prefix = user_id.as_bytes().to_vec();
         prefix.push(0xff);
 
@@ -550,10 +553,7 @@ fn left_state(
 
     /// Returns an iterator over all rooms a user left.
     #[tracing::instrument(skip(self))]
-    fn rooms_left<'a>(
-        &'a self,
-        user_id: &UserId,
-    ) -> Box<dyn Iterator<Item = Result<(OwnedRoomId, Vec<Raw<AnySyncStateEvent>>)>> + 'a> {
+    fn rooms_left<'a>(&'a self, user_id: &UserId) -> AnySyncStateEventIter<'a> {
         let mut prefix = user_id.as_bytes().to_vec();
         prefix.push(0xff);
 
diff --git a/src/database/key_value/rooms/threads.rs b/src/database/key_value/rooms/threads.rs
index 5e3dc9707..02176feed 100644
--- a/src/database/key_value/rooms/threads.rs
+++ b/src/database/key_value/rooms/threads.rs
@@ -4,6 +4,8 @@
 
 use crate::{database::KeyValueDatabase, service, services, utils, Error, PduEvent, Result};
 
+type PduEventIterResult<'a> = Result<Box<dyn Iterator<Item = Result<(u64, PduEvent)>> + 'a>>;
+
 impl service::rooms::threads::Data for KeyValueDatabase {
     fn threads_until<'a>(
         &'a self,
@@ -11,7 +13,7 @@ fn threads_until<'a>(
         room_id: &'a RoomId,
         until: u64,
         _include: &'a IncludeThreads,
-    ) -> Result<Box<dyn Iterator<Item = Result<(u64, PduEvent)>> + 'a>> {
+    ) -> PduEventIterResult<'a> {
         let prefix = services()
             .rooms
             .short
diff --git a/src/database/key_value/rooms/timeline.rs b/src/database/key_value/rooms/timeline.rs
index f322d4304..d097aaf18 100644
--- a/src/database/key_value/rooms/timeline.rs
+++ b/src/database/key_value/rooms/timeline.rs
@@ -5,7 +5,11 @@
 };
 use tracing::error;
 
-use crate::{database::KeyValueDatabase, service, services, utils, Error, PduEvent, Result};
+use crate::{
+    database::KeyValueDatabase,
+    service::{self, rooms::timeline::data::PduData},
+    services, utils, Error, PduEvent, Result,
+};
 
 use service::rooms::timeline::PduCount;
 
@@ -228,7 +232,7 @@ fn pdus_until<'a>(
         user_id: &UserId,
         room_id: &RoomId,
         until: PduCount,
-    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>> {
+    ) -> PduData<'a> {
         let (prefix, current) = count_to_id(room_id, until, 1, true)?;
 
         let user_id = user_id.to_owned();
@@ -250,12 +254,7 @@ fn pdus_until<'a>(
         ))
     }
 
-    fn pdus_after<'a>(
-        &'a self,
-        user_id: &UserId,
-        room_id: &RoomId,
-        from: PduCount,
-    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>> {
+    fn pdus_after<'a>(&'a self, user_id: &UserId, room_id: &RoomId, from: PduCount) -> PduData<'a> {
         let (prefix, current) = count_to_id(room_id, from, 1, false)?;
 
         let user_id = user_id.to_owned();
diff --git a/src/database/key_value/users.rs b/src/database/key_value/users.rs
index 2b09d684a..76e41f1bc 100644
--- a/src/database/key_value/users.rs
+++ b/src/database/key_value/users.rs
@@ -146,10 +146,12 @@ fn avatar_url(&self, user_id: &UserId) -> Result<Option<OwnedMxcUri>> {
         self.userid_avatarurl
             .get(user_id.as_bytes())?
             .map(|bytes| {
-                let s = utils::string_from_bytes(&bytes)
-                    .map_err(|_| Error::bad_database("Avatar URL in db is invalid."))?;
-                s.try_into()
-                    .map_err(|_| Error::bad_database("Avatar URL in db is invalid."))
+                let s_bytes = utils::string_from_bytes(&bytes).map_err(|e| {
+                    warn!("Avatar URL in db is invalid: {}", e);
+                    Error::bad_database("Avatar URL in db is invalid.")
+                })?;
+                let mxc_uri: OwnedMxcUri = s_bytes.into();
+                Ok(mxc_uri)
             })
             .transpose()
     }
diff --git a/src/main.rs b/src/main.rs
index 88acf002c..686742930 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -145,7 +145,7 @@ async fn main() {
     maximize_fd_limit().expect("should be able to increase the soft limit to the hard limit");
 
     config.warn_deprecated();
-    if config.error_dual_listening(raw_config).is_err() {
+    if config.is_dual_listening(raw_config) {
         return;
     };
 
@@ -542,7 +542,7 @@ async fn initial_sync(_uri: Uri) -> impl IntoResponse {
 }
 
 async fn it_works() -> &'static str {
-    "hewwo from cowonduit woof!"
+    "hewwo from conduwuit woof!"
 }
 
 /*
diff --git a/src/service/globals/mod.rs b/src/service/globals/mod.rs
index bb202c67f..d41e7e6a4 100644
--- a/src/service/globals/mod.rs
+++ b/src/service/globals/mod.rs
@@ -109,13 +109,15 @@ fn default() -> Self {
     }
 }
 
+type DnsOverrides = Box<dyn Fn(&str) -> Option<SocketAddr> + Send + Sync>;
+
 pub struct Resolver {
     inner: GaiResolver,
-    overrides: Box<dyn Fn(&str) -> Option<SocketAddr> + Send + Sync>,
+    overrides: DnsOverrides,
 }
 
 impl Resolver {
-    pub fn new(overrides: Box<dyn Fn(&str) -> Option<SocketAddr> + Send + Sync>) -> Resolver {
+    pub fn new(overrides: DnsOverrides) -> Resolver {
         Resolver {
             inner: GaiResolver::new(),
             overrides,
diff --git a/src/service/rooms/edus/read_receipt/data.rs b/src/service/rooms/edus/read_receipt/data.rs
index a183d196f..29b4a9862 100644
--- a/src/service/rooms/edus/read_receipt/data.rs
+++ b/src/service/rooms/edus/read_receipt/data.rs
@@ -1,5 +1,12 @@
 use crate::Result;
-use ruma::{events::receipt::ReceiptEvent, serde::Raw, OwnedUserId, RoomId, UserId};
+use ruma::{
+    events::{receipt::ReceiptEvent, AnySyncEphemeralRoomEvent},
+    serde::Raw,
+    OwnedUserId, RoomId, UserId,
+};
+
+type AnySyncEphemeralRoomEventIter<'a> =
+    Box<dyn Iterator<Item = Result<(OwnedUserId, u64, Raw<AnySyncEphemeralRoomEvent>)>> + 'a>;
 
 pub trait Data: Send + Sync {
     /// Replaces the previous read receipt.
@@ -11,19 +18,8 @@ fn readreceipt_update(
     ) -> Result<()>;
 
     /// Returns an iterator over the most recent read_receipts in a room that happened after the event with id `since`.
-    fn readreceipts_since<'a>(
-        &'a self,
-        room_id: &RoomId,
-        since: u64,
-    ) -> Box<
-        dyn Iterator<
-                Item = Result<(
-                    OwnedUserId,
-                    u64,
-                    Raw<ruma::events::AnySyncEphemeralRoomEvent>,
-                )>,
-            > + 'a,
-    >;
+    fn readreceipts_since(&self, room_id: &RoomId, since: u64)
+        -> AnySyncEphemeralRoomEventIter<'_>;
 
     /// Sets a private read marker at `count`.
     fn private_read_set(&self, room_id: &RoomId, user_id: &UserId, count: u64) -> Result<()>;
diff --git a/src/service/rooms/event_handler/mod.rs b/src/service/rooms/event_handler/mod.rs
index 8d633529d..dcadece63 100644
--- a/src/service/rooms/event_handler/mod.rs
+++ b/src/service/rooms/event_handler/mod.rs
@@ -40,6 +40,11 @@
 
 use super::state_compressor::CompressedStateEvent;
 
+type AsyncRecursiveCanonicalJsonVec<'a> =
+    AsyncRecursiveType<'a, Vec<(Arc<PduEvent>, Option<BTreeMap<String, CanonicalJsonValue>>)>>;
+type AsyncRecursiveCanonicalJsonResult<'a> =
+    AsyncRecursiveType<'a, Result<(Arc<PduEvent>, BTreeMap<String, CanonicalJsonValue>)>>;
+
 pub struct Service;
 
 impl Service {
@@ -287,7 +292,7 @@ fn handle_outlier_pdu<'a>(
         mut value: BTreeMap<String, CanonicalJsonValue>,
         auth_events_known: bool,
         pub_key_map: &'a RwLock<BTreeMap<String, BTreeMap<String, Base64>>>,
-    ) -> AsyncRecursiveType<'a, Result<(Arc<PduEvent>, BTreeMap<String, CanonicalJsonValue>)>> {
+    ) -> AsyncRecursiveCanonicalJsonResult<'a> {
         Box::pin(async move {
             // 1. Remove unsigned field
             value.remove("unsigned");
@@ -1022,8 +1027,7 @@ pub(crate) fn fetch_and_handle_outliers<'a>(
         room_id: &'a RoomId,
         room_version_id: &'a RoomVersionId,
         pub_key_map: &'a RwLock<BTreeMap<String, BTreeMap<String, Base64>>>,
-    ) -> AsyncRecursiveType<'a, Vec<(Arc<PduEvent>, Option<BTreeMap<String, CanonicalJsonValue>>)>>
-    {
+    ) -> AsyncRecursiveCanonicalJsonVec<'a> {
         Box::pin(async move {
             let back_off = |id| match services()
                 .globals
diff --git a/src/service/rooms/lazy_loading/mod.rs b/src/service/rooms/lazy_loading/mod.rs
index e6e4f8963..d466231ed 100644
--- a/src/service/rooms/lazy_loading/mod.rs
+++ b/src/service/rooms/lazy_loading/mod.rs
@@ -11,11 +11,13 @@
 
 use super::timeline::PduCount;
 
+type LazyLoadWaitingMutex =
+    Mutex<HashMap<(OwnedUserId, OwnedDeviceId, OwnedRoomId, PduCount), HashSet<OwnedUserId>>>;
+
 pub struct Service {
     pub db: &'static dyn Data,
 
-    pub lazy_load_waiting:
-        Mutex<HashMap<(OwnedUserId, OwnedDeviceId, OwnedRoomId, PduCount), HashSet<OwnedUserId>>>,
+    pub lazy_load_waiting: LazyLoadWaitingMutex,
 }
 
 impl Service {
diff --git a/src/service/rooms/pdu_metadata/data.rs b/src/service/rooms/pdu_metadata/data.rs
index 6c4cb3ced..121d80dc7 100644
--- a/src/service/rooms/pdu_metadata/data.rs
+++ b/src/service/rooms/pdu_metadata/data.rs
@@ -1,6 +1,9 @@
 use std::sync::Arc;
 
-use crate::{service::rooms::timeline::PduCount, PduEvent, Result};
+use crate::{
+    service::rooms::timeline::{data::PduData, PduCount},
+    Result,
+};
 use ruma::{EventId, RoomId, UserId};
 
 pub trait Data: Send + Sync {
@@ -11,7 +14,7 @@ fn relations_until<'a>(
         room_id: u64,
         target: u64,
         until: PduCount,
-    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>>;
+    ) -> PduData<'a>;
     fn mark_as_referenced(&self, room_id: &RoomId, event_ids: &[Arc<EventId>]) -> Result<()>;
     fn is_event_referenced(&self, room_id: &RoomId, event_id: &EventId) -> Result<bool>;
     fn mark_event_soft_failed(&self, event_id: &EventId) -> Result<()>;
diff --git a/src/service/rooms/search/data.rs b/src/service/rooms/search/data.rs
index 6eef38fbe..88fd88e58 100644
--- a/src/service/rooms/search/data.rs
+++ b/src/service/rooms/search/data.rs
@@ -1,12 +1,10 @@
 use crate::Result;
 use ruma::RoomId;
 
+type SearchPdusResult<'a> = Result<Option<(Box<dyn Iterator<Item = Vec<u8>> + 'a>, Vec<String>)>>;
+
 pub trait Data: Send + Sync {
     fn index_pdu(&self, shortroomid: u64, pdu_id: &[u8], message_body: &str) -> Result<()>;
 
-    fn search_pdus<'a>(
-        &'a self,
-        room_id: &RoomId,
-        search_string: &str,
-    ) -> Result<Option<(Box<dyn Iterator<Item = Vec<u8>> + 'a>, Vec<String>)>>;
+    fn search_pdus<'a>(&'a self, room_id: &RoomId, search_string: &str) -> SearchPdusResult<'a>;
 }
diff --git a/src/service/rooms/state_cache/data.rs b/src/service/rooms/state_cache/data.rs
index d8bb4a44f..ed8685290 100644
--- a/src/service/rooms/state_cache/data.rs
+++ b/src/service/rooms/state_cache/data.rs
@@ -7,6 +7,12 @@
     OwnedRoomId, OwnedServerName, OwnedUserId, RoomId, ServerName, UserId,
 };
 
+type StrippedStateEventIter<'a> =
+    Box<dyn Iterator<Item = Result<(OwnedRoomId, Vec<Raw<AnyStrippedStateEvent>>)>> + 'a>;
+
+type AnySyncStateEventIter<'a> =
+    Box<dyn Iterator<Item = Result<(OwnedRoomId, Vec<Raw<AnySyncStateEvent>>)>> + 'a>;
+
 pub trait Data: Send + Sync {
     fn mark_as_once_joined(&self, user_id: &UserId, room_id: &RoomId) -> Result<()>;
     fn mark_as_joined(&self, user_id: &UserId, room_id: &RoomId) -> Result<()>;
@@ -78,10 +84,7 @@ fn rooms_joined<'a>(
     ) -> Box<dyn Iterator<Item = Result<OwnedRoomId>> + 'a>;
 
     /// Returns an iterator over all rooms a user was invited to.
-    fn rooms_invited<'a>(
-        &'a self,
-        user_id: &UserId,
-    ) -> Box<dyn Iterator<Item = Result<(OwnedRoomId, Vec<Raw<AnyStrippedStateEvent>>)>> + 'a>;
+    fn rooms_invited<'a>(&'a self, user_id: &UserId) -> StrippedStateEventIter<'a>;
 
     fn invite_state(
         &self,
@@ -96,10 +99,7 @@ fn left_state(
     ) -> Result<Option<Vec<Raw<AnyStrippedStateEvent>>>>;
 
     /// Returns an iterator over all rooms a user left.
-    fn rooms_left<'a>(
-        &'a self,
-        user_id: &UserId,
-    ) -> Box<dyn Iterator<Item = Result<(OwnedRoomId, Vec<Raw<AnySyncStateEvent>>)>> + 'a>;
+    fn rooms_left<'a>(&'a self, user_id: &UserId) -> AnySyncStateEventIter<'a>;
 
     fn once_joined(&self, user_id: &UserId, room_id: &RoomId) -> Result<bool>;
 
diff --git a/src/service/rooms/state_compressor/mod.rs b/src/service/rooms/state_compressor/mod.rs
index b0ede3ee1..338249f64 100644
--- a/src/service/rooms/state_compressor/mod.rs
+++ b/src/service/rooms/state_compressor/mod.rs
@@ -13,20 +13,44 @@
 
 use self::data::StateDiff;
 
+type StateInfoLruCache = Mutex<
+    LruCache<
+        u64,
+        Vec<(
+            u64,                                // sstatehash
+            Arc<HashSet<CompressedStateEvent>>, // full state
+            Arc<HashSet<CompressedStateEvent>>, // added
+            Arc<HashSet<CompressedStateEvent>>, // removed
+        )>,
+    >,
+>;
+
+type ShortStateInfoResult = Result<
+    Vec<(
+        u64,                                // sstatehash
+        Arc<HashSet<CompressedStateEvent>>, // full state
+        Arc<HashSet<CompressedStateEvent>>, // added
+        Arc<HashSet<CompressedStateEvent>>, // removed
+    )>,
+>;
+
+type ParentStatesVec = Vec<(
+    u64,                                // sstatehash
+    Arc<HashSet<CompressedStateEvent>>, // full state
+    Arc<HashSet<CompressedStateEvent>>, // added
+    Arc<HashSet<CompressedStateEvent>>, // removed
+)>;
+
+type HashSetCompressStateEvent = Result<(
+    u64,
+    Arc<HashSet<CompressedStateEvent>>,
+    Arc<HashSet<CompressedStateEvent>>,
+)>;
+
 pub struct Service {
     pub db: &'static dyn Data,
 
-    pub stateinfo_cache: Mutex<
-        LruCache<
-            u64,
-            Vec<(
-                u64,                                // sstatehash
-                Arc<HashSet<CompressedStateEvent>>, // full state
-                Arc<HashSet<CompressedStateEvent>>, // added
-                Arc<HashSet<CompressedStateEvent>>, // removed
-            )>,
-        >,
-    >,
+    pub stateinfo_cache: StateInfoLruCache,
 }
 
 pub type CompressedStateEvent = [u8; 2 * size_of::<u64>()];
@@ -34,17 +58,7 @@ pub struct Service {
 impl Service {
     /// Returns a stack with info on shortstatehash, full state, added diff and removed diff for the selected shortstatehash and each parent layer.
     #[tracing::instrument(skip(self))]
-    pub fn load_shortstatehash_info(
-        &self,
-        shortstatehash: u64,
-    ) -> Result<
-        Vec<(
-            u64,                                // sstatehash
-            Arc<HashSet<CompressedStateEvent>>, // full state
-            Arc<HashSet<CompressedStateEvent>>, // added
-            Arc<HashSet<CompressedStateEvent>>, // removed
-        )>,
-    > {
+    pub fn load_shortstatehash_info(&self, shortstatehash: u64) -> ShortStateInfoResult {
         if let Some(r) = self
             .stateinfo_cache
             .lock()
@@ -144,12 +158,7 @@ pub fn save_state_from_diff(
         statediffnew: Arc<HashSet<CompressedStateEvent>>,
         statediffremoved: Arc<HashSet<CompressedStateEvent>>,
         diff_to_sibling: usize,
-        mut parent_states: Vec<(
-            u64,                                // sstatehash
-            Arc<HashSet<CompressedStateEvent>>, // full state
-            Arc<HashSet<CompressedStateEvent>>, // added
-            Arc<HashSet<CompressedStateEvent>>, // removed
-        )>,
+        mut parent_states: ParentStatesVec,
     ) -> Result<()> {
         let diffsum = statediffnew.len() + statediffremoved.len();
 
@@ -257,11 +266,7 @@ pub fn save_state(
         &self,
         room_id: &RoomId,
         new_state_ids_compressed: Arc<HashSet<CompressedStateEvent>>,
-    ) -> Result<(
-        u64,
-        Arc<HashSet<CompressedStateEvent>>,
-        Arc<HashSet<CompressedStateEvent>>,
-    )> {
+    ) -> HashSetCompressStateEvent {
         let previous_shortstatehash = services().rooms.state.get_room_shortstatehash(room_id)?;
 
         let state_hash = utils::calculate_hash(
diff --git a/src/service/rooms/threads/data.rs b/src/service/rooms/threads/data.rs
index 9221e8e89..2f062e233 100644
--- a/src/service/rooms/threads/data.rs
+++ b/src/service/rooms/threads/data.rs
@@ -1,6 +1,8 @@
 use crate::{PduEvent, Result};
 use ruma::{api::client::threads::get_threads::v1::IncludeThreads, OwnedUserId, RoomId, UserId};
 
+type PduEventIterResult<'a> = Result<Box<dyn Iterator<Item = Result<(u64, PduEvent)>> + 'a>>;
+
 pub trait Data: Send + Sync {
     fn threads_until<'a>(
         &'a self,
@@ -8,7 +10,7 @@ fn threads_until<'a>(
         room_id: &'a RoomId,
         until: u64,
         include: &'a IncludeThreads,
-    ) -> Result<Box<dyn Iterator<Item = Result<(u64, PduEvent)>> + 'a>>;
+    ) -> PduEventIterResult<'a>;
 
     fn update_participants(&self, root_id: &[u8], participants: &[OwnedUserId]) -> Result<()>;
     fn get_participants(&self, root_id: &[u8]) -> Result<Option<Vec<OwnedUserId>>>;
diff --git a/src/service/rooms/timeline/data.rs b/src/service/rooms/timeline/data.rs
index afa2cfbf0..df329fece 100644
--- a/src/service/rooms/timeline/data.rs
+++ b/src/service/rooms/timeline/data.rs
@@ -6,6 +6,8 @@
 
 use super::PduCount;
 
+pub type PduData<'a> = Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>>;
+
 pub trait Data: Send + Sync {
     fn last_timeline_count(&self, sender_user: &UserId, room_id: &RoomId) -> Result<PduCount>;
 
@@ -66,21 +68,12 @@ fn replace_pdu(
 
     /// Returns an iterator over all events and their tokens in a room that happened before the
     /// event with id `until` in reverse-chronological order.
-    fn pdus_until<'a>(
-        &'a self,
-        user_id: &UserId,
-        room_id: &RoomId,
-        until: PduCount,
-    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>>;
+    fn pdus_until<'a>(&'a self, user_id: &UserId, room_id: &RoomId, until: PduCount)
+        -> PduData<'a>;
 
     /// Returns an iterator over all events in a room that happened after the event with id `from`
     /// in chronological order.
-    fn pdus_after<'a>(
-        &'a self,
-        user_id: &UserId,
-        room_id: &RoomId,
-        from: PduCount,
-    ) -> Result<Box<dyn Iterator<Item = Result<(PduCount, PduEvent)>> + 'a>>;
+    fn pdus_after<'a>(&'a self, user_id: &UserId, room_id: &RoomId, from: PduCount) -> PduData<'a>;
 
     fn increment_notification_counts(
         &self,
diff --git a/src/service/rooms/timeline/mod.rs b/src/service/rooms/timeline/mod.rs
index 048ffe9a3..5133015a5 100644
--- a/src/service/rooms/timeline/mod.rs
+++ b/src/service/rooms/timeline/mod.rs
@@ -1,4 +1,4 @@
-mod data;
+pub(crate) mod data;
 
 use std::{
     cmp::Ordering,
diff --git a/src/service/sending/data.rs b/src/service/sending/data.rs
index 2e574e235..427ee9393 100644
--- a/src/service/sending/data.rs
+++ b/src/service/sending/data.rs
@@ -4,14 +4,13 @@
 
 use super::{OutgoingKind, SendingEventType};
 
+type OutgoingSendingIter<'a> =
+    Box<dyn Iterator<Item = Result<(Vec<u8>, OutgoingKind, SendingEventType)>> + 'a>;
+type SendingEventTypeIter<'a> = Box<dyn Iterator<Item = Result<(Vec<u8>, SendingEventType)>> + 'a>;
+
 pub trait Data: Send + Sync {
-    fn active_requests<'a>(
-        &'a self,
-    ) -> Box<dyn Iterator<Item = Result<(Vec<u8>, OutgoingKind, SendingEventType)>> + 'a>;
-    fn active_requests_for<'a>(
-        &'a self,
-        outgoing_kind: &OutgoingKind,
-    ) -> Box<dyn Iterator<Item = Result<(Vec<u8>, SendingEventType)>> + 'a>;
+    fn active_requests(&self) -> OutgoingSendingIter<'_>;
+    fn active_requests_for(&self, outgoing_kind: &OutgoingKind) -> SendingEventTypeIter<'_>;
     fn delete_active_request(&self, key: Vec<u8>) -> Result<()>;
     fn delete_all_active_requests_for(&self, outgoing_kind: &OutgoingKind) -> Result<()>;
     fn delete_all_requests_for(&self, outgoing_kind: &OutgoingKind) -> Result<()>;
diff --git a/src/service/users/mod.rs b/src/service/users/mod.rs
index 6299b9ea0..10578679d 100644
--- a/src/service/users/mod.rs
+++ b/src/service/users/mod.rs
@@ -32,10 +32,12 @@ pub struct SlidingSyncCache {
     extensions: ExtensionsConfig,
 }
 
+type DbConnections =
+    Mutex<BTreeMap<(OwnedUserId, OwnedDeviceId, String), Arc<Mutex<SlidingSyncCache>>>>;
+
 pub struct Service {
     pub db: &'static dyn Data,
-    pub connections:
-        Mutex<BTreeMap<(OwnedUserId, OwnedDeviceId, String), Arc<Mutex<SlidingSyncCache>>>>,
+    pub connections: DbConnections,
 }
 
 impl Service {
-- 
GitLab