diff --git a/src/service/globals/mod.rs b/src/service/globals/mod.rs index 90d6df4a..9bf325d5 100644 --- a/src/service/globals/mod.rs +++ b/src/service/globals/mod.rs @@ -1,10 +1,9 @@ mod data; pub use data::{Data, SigningKeys}; -use hmac::digest::typenum::Pow; use ruma::{ serde::Base64, MilliSecondsSinceUnixEpoch, OwnedDeviceId, OwnedEventId, OwnedRoomAliasId, - OwnedRoomId, OwnedRoomOrAliasId, OwnedServerName, OwnedUserId, RoomAliasId, RoomId, + OwnedRoomId, OwnedRoomOrAliasId, OwnedServerName, OwnedUserId, RoomAliasId, }; use crate::api::{client_server::get_alias_helper, server_server::DestinationResponse}; @@ -25,7 +24,6 @@ use std::{ future::{self, Future}, iter, net::{IpAddr, SocketAddr}, - ops::Deref, path::PathBuf, str::FromStr, sync::{ @@ -511,29 +509,27 @@ impl Service { pub async fn default_rooms(&self) -> Result> { let server_name = &self.config.server_name; - let fallback = || { - format!("#{s}:{server_name}") - .parse() - .map_err(|_| Error::bad_config("Invalid opaque identifier.")) - }; - - let f = |s| match OwnedRoomOrAliasId::from_str(s).map(OwnedRoomId::try_from) { - Ok(Ok(room_id)) => room_id - .server_name() - .ok_or_else(|| Error::bad_config("Invalid room ID due to missing server name.")) - .map(|_| room_id), - result => get_alias_helper(result.map(Result::unwrap_err).or_else(fallback)?) + let f = |s| async move { + match OwnedRoomOrAliasId::from_str(s).map(OwnedRoomId::try_from) { + Ok(Ok(room_id)) => room_id + .server_name() + .ok_or_else(|| Error::bad_config("Invalid room ID due to missing server name.")) + .map(|_| room_id.clone()), + result => get_alias_helper(result.map(Result::unwrap_err).or_else(|_| { + format!("#{s}:{server_name}") + .parse() + .map_err(|_| Error::bad_config("Invalid opaque identifier.")) + })?) .await .map(|response| response.room_id), + } }; - self.config - .default_rooms - .rooms - .iter() - .map(String::as_str) - .map(|s| f) - .collect::>() + let rooms = self.config.default_rooms.rooms.iter().map(String::as_str); + futures_util::future::try_join_all(rooms.map(f)) + .await + .map(Vec::into_iter) + .map(BTreeSet::from_iter) } pub fn shutdown(&self) {