Skip to content

Commit 6286006

Browse files
committed
refactor: Adapt to use of SupportedVersions for endpoints
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
1 parent 1bcf38a commit 6286006

File tree

7 files changed

+50
-26
lines changed

7 files changed

+50
-26
lines changed

crates/matrix-sdk-base/src/store/integration_tests.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -476,9 +476,10 @@ impl StateStoreIntegrationTests for DynStateStore {
476476
}
477477

478478
async fn test_server_info_saving(&self) {
479-
let versions = &[MatrixVersion::V1_1, MatrixVersion::V1_2, MatrixVersion::V1_11];
479+
let versions =
480+
BTreeSet::from([MatrixVersion::V1_1, MatrixVersion::V1_2, MatrixVersion::V1_11]);
480481
let server_info = ServerInfo::new(
481-
versions.iter().map(|version| version.to_string()).collect(),
482+
versions.iter().map(|version| version.as_str().unwrap().to_owned()).collect(),
482483
[("org.matrix.experimental".to_owned(), true)].into(),
483484
Some(WellKnownResponse {
484485
homeserver: HomeserverInfo::new("matrix.example.com".to_owned()),
@@ -504,7 +505,7 @@ impl StateStoreIntegrationTests for DynStateStore {
504505
let decoded_server_info = stored_info.maybe_decode().unwrap();
505506
let stored_supported = decoded_server_info.supported_versions();
506507

507-
assert_eq!(stored_supported.versions.as_ref(), versions);
508+
assert_eq!(stored_supported.versions, versions);
508509
assert_eq!(stored_supported.features.len(), 1);
509510
assert!(stored_supported.features.contains(&FeatureFlag::from("org.matrix.experimental")));
510511

crates/matrix-sdk/src/authentication/matrix/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,20 +105,20 @@ impl MatrixAuth {
105105
idp_id: Option<&str>,
106106
) -> Result<String> {
107107
let homeserver = self.client.homeserver();
108-
let server_versions = self.client.server_versions().await?;
108+
let supported_versions = self.client.supported_versions().await?;
109109

110110
let request = if let Some(id) = idp_id {
111111
sso_login_with_provider::v3::Request::new(id.to_owned(), redirect_url.to_owned())
112112
.try_into_http_request::<Vec<u8>>(
113113
homeserver.as_str(),
114114
SendAccessToken::None,
115-
&server_versions,
115+
&supported_versions,
116116
)
117117
} else {
118118
sso_login::v3::Request::new(redirect_url.to_owned()).try_into_http_request::<Vec<u8>>(
119119
homeserver.as_str(),
120120
SendAccessToken::None,
121-
&server_versions,
121+
&supported_versions,
122122
)
123123
};
124124

crates/matrix-sdk/src/authentication/oauth/qrcode/rendezvous_channel.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,18 @@ impl RendezvousChannel {
114114
client: HttpClient,
115115
rendezvous_server: &Url,
116116
) -> Result<Self, HttpError> {
117-
use ruma::api::client::rendezvous::create_rendezvous_session;
117+
use ruma::api::{client::rendezvous::create_rendezvous_session, SupportedVersions};
118118

119119
let request = create_rendezvous_session::unstable::Request::default();
120120
let response = client
121-
.send(request, None, rendezvous_server.to_string(), None, &[], Default::default())
121+
.send(
122+
request,
123+
None,
124+
rendezvous_server.to_string(),
125+
None,
126+
&SupportedVersions { versions: Default::default(), features: Default::default() },
127+
Default::default(),
128+
)
122129
.await?;
123130

124131
let rendezvous_url = response.url;

crates/matrix-sdk/src/client/builder/homeserver_config.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
use ruma::{
1616
api::{
1717
client::discovery::{discover_homeserver, get_supported_versions},
18-
MatrixVersion,
18+
MatrixVersion, SupportedVersions,
1919
},
2020
OwnedServerName, ServerName,
2121
};
@@ -185,7 +185,10 @@ async fn discover_homeserver(
185185
Some(RequestConfig::short_retry()),
186186
server.to_string(),
187187
None,
188-
&[MatrixVersion::V1_0],
188+
&SupportedVersions {
189+
versions: [MatrixVersion::V1_0].into(),
190+
features: Default::default(),
191+
},
189192
Default::default(),
190193
)
191194
.await
@@ -209,7 +212,10 @@ pub(super) async fn get_supported_versions(
209212
Some(RequestConfig::short_retry()),
210213
homeserver_url.to_string(),
211214
None,
212-
&[MatrixVersion::V1_0],
215+
&SupportedVersions {
216+
versions: [MatrixVersion::V1_0].into(),
217+
features: Default::default(),
218+
},
213219
Default::default(),
214220
)
215221
.await

crates/matrix-sdk/src/client/builder/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ mod homeserver_config;
1717

1818
#[cfg(feature = "sqlite")]
1919
use std::path::Path;
20-
use std::{fmt, sync::Arc};
20+
use std::{collections::BTreeSet, fmt, sync::Arc};
2121

2222
use homeserver_config::*;
2323
#[cfg(feature = "e2e-encryption")]
@@ -101,7 +101,7 @@ pub struct ClientBuilder {
101101
store_config: BuilderStoreConfig,
102102
request_config: RequestConfig,
103103
respect_login_well_known: bool,
104-
server_versions: Option<Box<[MatrixVersion]>>,
104+
server_versions: Option<BTreeSet<MatrixVersion>>,
105105
handle_refresh_tokens: bool,
106106
base_client: Option<BaseClient>,
107107
#[cfg(feature = "e2e-encryption")]

crates/matrix-sdk/src/client/mod.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1790,7 +1790,7 @@ impl Client {
17901790
config,
17911791
homeserver,
17921792
access_token.as_deref(),
1793-
&self.server_versions().await?,
1793+
&self.supported_versions().await?,
17941794
send_progress,
17951795
)
17961796
.await
@@ -1817,7 +1817,10 @@ impl Client {
18171817
request_config,
18181818
self.homeserver().to_string(),
18191819
None,
1820-
&[MatrixVersion::V1_0],
1820+
&SupportedVersions {
1821+
versions: [MatrixVersion::V1_0].into(),
1822+
features: Default::default(),
1823+
},
18211824
Default::default(),
18221825
)
18231826
.await?;
@@ -1844,7 +1847,10 @@ impl Client {
18441847
Some(RequestConfig::short_retry()),
18451848
server_url_string,
18461849
None,
1847-
&[MatrixVersion::V1_0],
1850+
&SupportedVersions {
1851+
versions: [MatrixVersion::V1_0].into(),
1852+
features: Default::default(),
1853+
},
18481854
Default::default(),
18491855
)
18501856
.await;
@@ -1988,7 +1994,7 @@ impl Client {
19881994
/// println!("The homeserver supports Matrix 1.1: {supports_1_1:?}");
19891995
/// # anyhow::Ok(()) };
19901996
/// ```
1991-
pub async fn server_versions(&self) -> HttpResult<Box<[MatrixVersion]>> {
1997+
pub async fn server_versions(&self) -> HttpResult<BTreeSet<MatrixVersion>> {
19921998
self.get_or_load_and_cache_server_info(|server_info| {
19931999
server_info.supported_versions.as_ref().map(|supported| supported.versions.clone())
19942000
})

crates/matrix-sdk/src/http_client/mod.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
use std::{
1616
any::type_name,
17+
borrow::Cow,
1718
fmt::Debug,
1819
num::NonZeroUsize,
1920
sync::{
@@ -29,7 +30,7 @@ use eyeball::SharedObservable;
2930
use http::Method;
3031
use ruma::api::{
3132
error::{FromHttpResponseError, IntoHttpError},
32-
AuthScheme, MatrixVersion, OutgoingRequest, SendAccessToken,
33+
AuthScheme, OutgoingRequest, SendAccessToken, SupportedVersions,
3334
};
3435
use tokio::sync::{Semaphore, SemaphorePermit};
3536
use tracing::{debug, field::debug, instrument, trace};
@@ -101,17 +102,20 @@ impl HttpClient {
101102
config: RequestConfig,
102103
homeserver: String,
103104
access_token: Option<&str>,
104-
server_versions: &[MatrixVersion],
105+
supported_versions: &SupportedVersions,
105106
) -> Result<http::Request<Bytes>, IntoHttpError>
106107
where
107108
R: OutgoingRequest + Debug,
108109
{
109110
trace!(request_type = type_name::<R>(), "Serializing request");
110111

111-
let server_versions = if config.force_matrix_version.is_some() {
112-
config.force_matrix_version.as_slice()
112+
let supported_versions = if let Some(matrix_version) = config.force_matrix_version {
113+
Cow::Owned(SupportedVersions {
114+
versions: [matrix_version].into(),
115+
features: Default::default(),
116+
})
113117
} else {
114-
server_versions
118+
Cow::Borrowed(supported_versions)
115119
};
116120

117121
let send_access_token = match access_token {
@@ -126,15 +130,15 @@ impl HttpClient {
126130
};
127131

128132
let request = request
129-
.try_into_http_request::<BytesMut>(&homeserver, send_access_token, server_versions)?
133+
.try_into_http_request::<BytesMut>(&homeserver, send_access_token, &supported_versions)?
130134
.map(|body| body.freeze());
131135

132136
Ok(request)
133137
}
134138

135139
#[allow(clippy::too_many_arguments)]
136140
#[instrument(
137-
skip(self, request, config, homeserver, access_token, server_versions, send_progress),
141+
skip(self, request, config, homeserver, access_token, supported_versions, send_progress),
138142
fields(uri, method, request_size, request_id, status, response_size, sentry_event_id)
139143
)]
140144
pub async fn send<R>(
@@ -143,7 +147,7 @@ impl HttpClient {
143147
config: Option<RequestConfig>,
144148
homeserver: String,
145149
access_token: Option<&str>,
146-
server_versions: &[MatrixVersion],
150+
supported_versions: &SupportedVersions,
147151
send_progress: SharedObservable<TransmissionProgress>,
148152
) -> Result<R::IncomingResponse, HttpError>
149153
where
@@ -177,7 +181,7 @@ impl HttpClient {
177181
}
178182

179183
let request = self
180-
.serialize_request(request, config, homeserver, access_token, server_versions)
184+
.serialize_request(request, config, homeserver, access_token, supported_versions)
181185
.map_err(HttpError::IntoHttp)?;
182186

183187
let method = request.method();

0 commit comments

Comments
 (0)