From 29ba1719531eab67c67cb4e2c77cbcbccb4b62f8 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Fri, 10 Jun 2022 17:28:18 +0200 Subject: [PATCH] Simplify ownership of server_versions We couldn't originally take references to it when it was behind RwLock, with OnceCell this is no longer a problem. --- crates/matrix-sdk/src/client/builder.rs | 4 ++-- crates/matrix-sdk/src/client/mod.rs | 16 ++++++++-------- crates/matrix-sdk/src/http_client.rs | 6 +++--- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/crates/matrix-sdk/src/client/builder.rs b/crates/matrix-sdk/src/client/builder.rs index 2f5d0f1d3..0a22267df 100644 --- a/crates/matrix-sdk/src/client/builder.rs +++ b/crates/matrix-sdk/src/client/builder.rs @@ -66,7 +66,7 @@ pub struct ClientBuilder { request_config: RequestConfig, respect_login_well_known: bool, appservice_mode: bool, - server_versions: Option>, + server_versions: Option>, } impl ClientBuilder { @@ -305,7 +305,7 @@ impl ClientBuilder { None, homeserver, None, - [MatrixVersion::V1_0].into_iter().collect(), + &[MatrixVersion::V1_0], ) .await .map_err(|e| match e { diff --git a/crates/matrix-sdk/src/client/mod.rs b/crates/matrix-sdk/src/client/mod.rs index e01a4e05e..9b49bc7c2 100644 --- a/crates/matrix-sdk/src/client/mod.rs +++ b/crates/matrix-sdk/src/client/mod.rs @@ -134,7 +134,7 @@ pub(crate) struct ClientInner { /// User session data. pub(crate) base_client: BaseClient, /// The Matrix versions the server supports (well-known ones only) - server_versions: OnceCell>, + server_versions: OnceCell>, /// Locks making sure we only have one group session sharing request in /// flight per room. #[cfg(feature = "e2e-encryption")] @@ -649,13 +649,13 @@ impl Client { .try_into_http_request::>( homeserver.as_str(), SendAccessToken::None, - &server_versions, + server_versions, ) } else { sso_login::v3::Request::new(redirect_url).try_into_http_request::>( homeserver.as_str(), SendAccessToken::None, - &server_versions, + server_versions, ) }; @@ -1509,8 +1509,8 @@ impl Client { .await } - async fn request_server_versions(&self) -> HttpResult> { - let server_versions: Arc<[MatrixVersion]> = self + async fn request_server_versions(&self) -> HttpResult> { + let server_versions: Box<[MatrixVersion]> = self .inner .http_client .send( @@ -1518,7 +1518,7 @@ impl Client { None, self.homeserver().await.to_string(), None, - [MatrixVersion::V1_0].into_iter().collect(), + &[MatrixVersion::V1_0], ) .await? .known_versions() @@ -1532,7 +1532,7 @@ impl Client { } } - async fn server_versions(&self) -> HttpResult> { + async fn server_versions(&self) -> HttpResult<&[MatrixVersion]> { #[cfg(target_arch = "wasm32")] let server_versions = self.inner.server_versions.get_or_try_init(self.request_server_versions()).await?; @@ -1541,7 +1541,7 @@ impl Client { let server_versions = self.inner.server_versions.get_or_try_init(|| self.request_server_versions()).await?; - Ok(server_versions.clone()) + Ok(server_versions) } /// Get information of all our own devices. diff --git a/crates/matrix-sdk/src/http_client.rs b/crates/matrix-sdk/src/http_client.rs index e1642d289..9c1136b25 100644 --- a/crates/matrix-sdk/src/http_client.rs +++ b/crates/matrix-sdk/src/http_client.rs @@ -108,7 +108,7 @@ impl HttpClient { config: Option, homeserver: String, session: Option<&Session>, - server_versions: Arc<[MatrixVersion]>, + server_versions: &[MatrixVersion], ) -> Result where Request: OutgoingRequest + Debug, @@ -146,14 +146,14 @@ impl HttpClient { request.try_into_http_request::( &homeserver, send_access_token, - &server_versions, + server_versions, )? } else { request.try_into_http_request_with_user_id::( &homeserver, SendAccessToken::Always(&session.ok_or(HttpError::UserIdRequired)?.access_token), &session.ok_or(HttpError::UserIdRequired)?.user_id, - &server_versions, + server_versions, )? };