diff --git a/matrix_sdk/Cargo.toml b/matrix_sdk/Cargo.toml index a581c7b0..0884944b 100644 --- a/matrix_sdk/Cargo.toml +++ b/matrix_sdk/Cargo.toml @@ -26,7 +26,7 @@ rustls-tls = ["reqwest/rustls-tls"] socks = ["reqwest/socks"] sso_login = ["warp", "rand", "tokio-stream"] require_auth_for_profile_requests = [] -appservice = ["matrix-sdk-common/appservice"] +appservice = ["matrix-sdk-common/appservice", "ruma/appservice-api-s", "ruma/appservice-api-helper", "ruma/rand"] docs = ["encryption", "sled_cryptostore", "sled_state_store", "sso_login"] @@ -54,6 +54,10 @@ default_features = false version = "0.11.0" default_features = false +[dependencies.ruma] +version = "0.1.2" +features = ["client-api-c", "unstable-pre-spec"] + [dependencies.tokio-stream] version = "0.1.4" features = ["net"] diff --git a/matrix_sdk/src/client.rs b/matrix_sdk/src/client.rs index 45a17a30..a9102e6c 100644 --- a/matrix_sdk/src/client.rs +++ b/matrix_sdk/src/client.rs @@ -46,15 +46,14 @@ use matrix_sdk_base::crypto::{ }; use matrix_sdk_base::{ deserialized_responses::SyncResponse, - events::AnyMessageEventContent, - identifiers::MxcUri, media::{MediaEventContent, MediaFormat, MediaRequest, MediaThumbnailSize, MediaType}, - BaseClient, BaseClientConfig, SendAccessToken, Session, Store, + BaseClient, BaseClientConfig, Session, Store, }; use mime::{self, Mime}; #[cfg(feature = "sso_login")] use rand::{thread_rng, Rng}; use reqwest::header::InvalidHeaderValue; +use ruma::{api::SendAccessToken, events::AnyMessageEventContent, identifiers::MxcUri}; #[cfg(feature = "sso_login")] use tokio::{net::TcpListener, sync::oneshot}; #[cfg(feature = "sso_login")] @@ -82,44 +81,51 @@ pub enum LoopCtrl { Break, } -#[cfg(feature = "encryption")] -use matrix_sdk_common::api::r0::{ - keys::{get_keys, upload_keys, upload_signing_keys::Request as UploadSigningKeysRequest}, - to_device::send_event_to_device::{ - Request as RumaToDeviceRequest, Response as ToDeviceResponse, - }, -}; use matrix_sdk_common::{ - api::{ - r0::{ - account::register, - device::{delete_devices, get_devices}, - directory::{get_public_rooms, get_public_rooms_filtered}, - filter::{create_filter::Request as FilterUploadRequest, FilterDefinition}, - media::{create_content, get_content, get_content_thumbnail}, - membership::{join_room_by_id, join_room_by_id_or_alias}, - message::send_message_event, - profile::{get_avatar_url, get_display_name, set_avatar_url, set_display_name}, - room::create_room, - session::{get_login_types, login, sso_login}, - sync::sync_events, - uiaa::AuthData, - }, - unversioned::{discover_homeserver, get_supported_versions}, - }, - assign, - identifiers::{DeviceIdBox, RoomId, RoomIdOrAliasId, ServerName, UserId}, instant::{Duration, Instant}, locks::{Mutex, RwLock}, - presence::PresenceState, uuid::Uuid, - FromHttpResponseError, UInt, +}; +#[cfg(feature = "encryption")] +use ruma::{ + api::client::r0::{ + keys::{get_keys, upload_keys, upload_signing_keys::Request as UploadSigningKeysRequest}, + to_device::send_event_to_device::{ + Request as RumaToDeviceRequest, Response as ToDeviceResponse, + }, + }, + DeviceId, +}; +use ruma::{ + api::{ + client::{ + r0::{ + account::register, + device::{delete_devices, get_devices}, + directory::{get_public_rooms, get_public_rooms_filtered}, + filter::{create_filter::Request as FilterUploadRequest, FilterDefinition}, + media::{create_content, get_content, get_content_thumbnail}, + membership::{join_room_by_id, join_room_by_id_or_alias}, + message::send_message_event, + profile::{get_avatar_url, get_display_name, set_avatar_url, set_display_name}, + room::create_room, + session::{get_login_types, login, sso_login}, + sync::sync_events, + uiaa::AuthData, + }, + unversioned::{discover_homeserver, get_supported_versions}, + }, + error::FromHttpResponseError, + OutgoingRequest, + }, + assign, + presence::PresenceState, + DeviceIdBox, RoomId, RoomIdOrAliasId, ServerName, UInt, UserId, }; #[cfg(feature = "encryption")] use crate::{ device::{Device, UserDevices}, - identifiers::DeviceId, sas::Sas, verification_request::VerificationRequest, }; @@ -127,7 +133,7 @@ use crate::{ error::HttpError, event_handler::Handler, http_client::{client_with_config, HttpClient, HttpSend}, - room, Error, EventHandler, OutgoingRequest, Result, + room, Error, EventHandler, Result, }; const DEFAULT_REQUEST_TIMEOUT: Duration = Duration::from_secs(10); @@ -637,7 +643,7 @@ impl Client { #[cfg_attr(feature = "docs", doc(cfg(appservice)))] pub async fn receive_transaction( &self, - incoming_transaction: crate::api_appservice::event::push_events::v1::IncomingRequest, + incoming_transaction: ruma::api::appservice::event::push_events::v1::IncomingRequest, ) -> Result<()> { let txn_id = incoming_transaction.txn_id.clone(); let response = incoming_transaction.try_into_sync_response(txn_id)?; @@ -994,7 +1000,7 @@ impl Client { /// # use std::convert::TryFrom; /// # use matrix_sdk::Client; /// # use matrix_sdk::identifiers::DeviceId; - /// # use matrix_sdk_common::assign; + /// # use matrix_sdk::assign; /// # use futures::executor::block_on; /// # use url::Url; /// # let homeserver = Url::parse("http://example.com").unwrap(); @@ -1253,7 +1259,7 @@ impl Client { /// # use std::convert::TryFrom; /// # use matrix_sdk::Client; /// # use matrix_sdk::identifiers::DeviceId; - /// # use matrix_sdk_common::assign; + /// # use matrix_sdk::assign; /// # use futures::executor::block_on; /// # use url::Url; /// # let homeserver = Url::parse("https://example.com").unwrap(); @@ -1335,7 +1341,7 @@ impl Client { /// # use matrix_sdk::api::r0::account::register::{Request as RegistrationRequest, RegistrationKind}; /// # use matrix_sdk::api::r0::uiaa::AuthData; /// # use matrix_sdk::identifiers::DeviceId; - /// # use matrix_sdk_common::assign; + /// # use matrix_sdk::assign; /// # use futures::executor::block_on; /// # use url::Url; /// # let homeserver = Url::parse("http://example.com").unwrap(); @@ -1558,7 +1564,7 @@ impl Client { /// # use matrix_sdk::Client; /// # use matrix_sdk::directory::{Filter, RoomNetwork}; /// # use matrix_sdk::api::r0::directory::get_public_rooms_filtered::Request as PublicRoomsFilterRequest; - /// # use matrix_sdk_common::assign; + /// # use matrix_sdk::assign; /// # use url::Url; /// # use futures::executor::block_on; /// # let homeserver = Url::parse("http://example.com").unwrap(); @@ -2686,33 +2692,42 @@ mod test { time::Duration, }; - use matrix_sdk_base::{ - api::r0::media::get_content_thumbnail::Method, - events::room::{message::ImageMessageEventContent, ImageInfo}, - identifiers::mxc_uri, - media::{MediaFormat, MediaRequest, MediaThumbnailSize, MediaType}, - uint, - }; - use matrix_sdk_common::{ - api::r0::{ - account::register::Request as RegistrationRequest, - directory::get_public_rooms_filtered::Request as PublicRoomsFilterRequest, - membership::Invite3pidInit, session::get_login_types::LoginType, uiaa::AuthData, + use matrix_sdk_base::media::{MediaFormat, MediaRequest, MediaThumbnailSize, MediaType}; + use matrix_sdk_test::{test_json, EventBuilder, EventsJson}; + use mockito::{mock, Matcher}; + use ruma::{ + api::{ + client::{ + self as client_api, + r0::{ + account::register::{RegistrationKind, Request as RegistrationRequest}, + directory::{ + get_public_rooms, + get_public_rooms_filtered::{self, Request as PublicRoomsFilterRequest}, + }, + media::get_content_thumbnail::Method, + membership::Invite3pidInit, + session::get_login_types::LoginType, + uiaa::{AuthData, UiaaResponse}, + }, + }, + error::{FromHttpResponseError, ServerError}, }, assign, directory::Filter, - events::{room::message::MessageEventContent, AnyMessageEventContent}, - identifiers::{event_id, room_id, user_id, UserId}, - thirdparty, + event_id, + events::{ + room::{ + message::{ImageMessageEventContent, MessageEventContent}, + ImageInfo, + }, + AnyMessageEventContent, + }, + mxc_uri, room_id, thirdparty, uint, user_id, UserId, }; - use matrix_sdk_test::{test_json, EventBuilder, EventsJson}; - use mockito::{mock, Matcher}; use serde_json::json; - use super::{ - get_public_rooms, get_public_rooms_filtered, register::RegistrationKind, Client, Session, - SyncSettings, Url, - }; + use super::{Client, Session, SyncSettings, Url}; use crate::{ClientConfig, HttpError, RequestConfig, RoomMember}; async fn logged_in_client() -> Client { @@ -3002,11 +3017,11 @@ mod test { .create(); if let Err(err) = client.login("example", "wordpass", None, None).await { - if let crate::Error::Http(HttpError::ClientApi(crate::FromHttpResponseError::Http( - crate::ServerError::Known(crate::api::Error { kind, message, status_code }), + if let crate::Error::Http(HttpError::ClientApi(FromHttpResponseError::Http( + ServerError::Known(client_api::Error { kind, message, status_code }), ))) = err { - if let crate::api::error::ErrorKind::Forbidden = kind { + if let client_api::error::ErrorKind::Forbidden = kind { } else { panic!("found the wrong `ErrorKind` {:?}, expected `Forbidden", kind); } @@ -3038,13 +3053,15 @@ mod test { }); if let Err(err) = client.register(user).await { - if let crate::Error::Http(HttpError::UiaaError(crate::FromHttpResponseError::Http( - crate::ServerError::Known(crate::api::r0::uiaa::UiaaResponse::MatrixError( - crate::api::Error { kind, message, status_code }, - )), + if let crate::Error::Http(HttpError::UiaaError(FromHttpResponseError::Http( + ServerError::Known(UiaaResponse::MatrixError(client_api::Error { + kind, + message, + status_code, + })), ))) = err { - if let crate::api::error::ErrorKind::Forbidden = kind { + if let client_api::error::ErrorKind::Forbidden = kind { } else { panic!("found the wrong `ErrorKind` {:?}, expected `Forbidden", kind); } @@ -3387,7 +3404,7 @@ mod test { #[tokio::test] async fn room_state_event_send() { - use crate::events::{ + use ruma::events::{ room::member::{MemberEventContent, MembershipState}, AnyStateEventContent, }; diff --git a/matrix_sdk/src/device.rs b/matrix_sdk/src/device.rs index 718fcb6f..37bf06dc 100644 --- a/matrix_sdk/src/device.rs +++ b/matrix_sdk/src/device.rs @@ -18,7 +18,7 @@ use matrix_sdk_base::crypto::{ store::CryptoStoreError, Device as BaseDevice, LocalTrust, ReadOnlyDevice, UserDevices as BaseUserDevices, }; -use matrix_sdk_common::identifiers::{DeviceId, DeviceIdBox}; +use ruma::{DeviceId, DeviceIdBox}; use crate::{error::Result, Client, Sas}; diff --git a/matrix_sdk/src/error.rs b/matrix_sdk/src/error.rs index 4fa4ff0f..2eb14ecf 100644 --- a/matrix_sdk/src/error.rs +++ b/matrix_sdk/src/error.rs @@ -20,15 +20,17 @@ use http::StatusCode; #[cfg(feature = "encryption")] use matrix_sdk_base::crypto::{store::CryptoStoreError, DecryptorError}; use matrix_sdk_base::{Error as MatrixError, StoreError}; -use matrix_sdk_common::{ +use reqwest::Error as ReqwestError; +use ruma::{ api::{ - r0::uiaa::{UiaaInfo, UiaaResponse as UiaaError}, - Error as RumaClientApiError, + client::{ + r0::uiaa::{UiaaInfo, UiaaResponse as UiaaError}, + Error as RumaClientApiError, + }, + error::{FromHttpResponseError, IntoHttpError, MatrixError as RumaApiError, ServerError}, }, identifiers::Error as IdentifierError, - FromHttpResponseError, IntoHttpError, MatrixError as RumaApiError, ServerError, }; -use reqwest::Error as ReqwestError; use serde_json::Error as JsonError; use thiserror::Error; use url::ParseError as UrlParseError; diff --git a/matrix_sdk/src/event_handler/mod.rs b/matrix_sdk/src/event_handler/mod.rs index 37d8b8e7..391acc79 100644 --- a/matrix_sdk/src/event_handler/mod.rs +++ b/matrix_sdk/src/event_handler/mod.rs @@ -14,25 +14,16 @@ // limitations under the License. use std::ops::Deref; -use matrix_sdk_common::{ - api::r0::push::get_notifications::Notification, - async_trait, - events::{ - fully_read::FullyReadEventContent, AnySyncRoomEvent, GlobalAccountDataEvent, - RoomAccountDataEvent, - }, - identifiers::RoomId, -}; -use serde_json::value::RawValue as RawJsonValue; - -use crate::{ - deserialized_responses::SyncResponse, +use matrix_sdk_common::async_trait; +use ruma::{ + api::client::r0::push::get_notifications::Notification, events::{ call::{ answer::AnswerEventContent, candidates::CandidatesEventContent, hangup::HangupEventContent, invite::InviteEventContent, }, custom::CustomEventContent, + fully_read::FullyReadEventContent, ignored_user_list::IgnoredUserListEventContent, presence::PresenceEvent, push_rules::PushRulesEventContent, @@ -51,12 +42,15 @@ use crate::{ }, typing::TypingEventContent, AnyGlobalAccountDataEvent, AnyRoomAccountDataEvent, AnyStrippedStateEvent, - AnySyncEphemeralRoomEvent, AnySyncMessageEvent, AnySyncStateEvent, StrippedStateEvent, - SyncEphemeralRoomEvent, SyncMessageEvent, SyncStateEvent, + AnySyncEphemeralRoomEvent, AnySyncMessageEvent, AnySyncRoomEvent, AnySyncStateEvent, + GlobalAccountDataEvent, RoomAccountDataEvent, StrippedStateEvent, SyncEphemeralRoomEvent, + SyncMessageEvent, SyncStateEvent, }, - room::Room, - Client, + RoomId, }; +use serde_json::value::RawValue as RawJsonValue; + +use crate::{deserialized_responses::SyncResponse, room::Room, Client}; pub(crate) struct Handler { pub(crate) inner: Box, @@ -507,6 +501,7 @@ mod test { use matrix_sdk_common::{async_trait, locks::Mutex}; use matrix_sdk_test::{async_test, test_json}; use mockito::{mock, Matcher}; + use ruma::user_id; #[cfg(target_arch = "wasm32")] pub use wasm_bindgen_test::*; @@ -712,7 +707,7 @@ mod test { } } - use crate::{identifiers::user_id, Client, Session, SyncSettings}; + use crate::{Client, Session, SyncSettings}; async fn get_client() -> Client { let session = Session { diff --git a/matrix_sdk/src/http_client.rs b/matrix_sdk/src/http_client.rs index a6f54137..6b12a9e1 100644 --- a/matrix_sdk/src/http_client.rs +++ b/matrix_sdk/src/http_client.rs @@ -21,17 +21,16 @@ use backoff::{future::retry, Error as RetryError, ExponentialBackoff}; #[cfg(all(not(target_arch = "wasm32")))] use http::StatusCode; use http::{HeaderValue, Response as HttpResponse}; -use matrix_sdk_common::{ - api::r0::media::create_content, async_trait, locks::RwLock, AsyncTraitDeps, AuthScheme, - FromHttpResponseError, IncomingResponse, SendAccessToken, -}; +use matrix_sdk_common::{async_trait, locks::RwLock, AsyncTraitDeps}; use reqwest::{Client, Response}; +use ruma::api::{ + client::r0::media::create_content, error::FromHttpResponseError, AuthScheme, IncomingResponse, + OutgoingRequest, SendAccessToken, +}; use tracing::trace; use url::Url; -use crate::{ - error::HttpError, Bytes, BytesMut, ClientConfig, OutgoingRequest, RequestConfig, Session, -}; +use crate::{error::HttpError, Bytes, BytesMut, ClientConfig, RequestConfig, Session}; /// Abstraction around the http layer. The allows implementors to use different /// http libraries. @@ -103,7 +102,7 @@ pub(crate) struct HttpClient { } #[cfg(feature = "appservice")] -use crate::OutgoingRequestAppserviceExt; +use ruma::api::OutgoingRequestAppserviceExt; impl HttpClient { pub(crate) fn new( diff --git a/matrix_sdk/src/room/common.rs b/matrix_sdk/src/room/common.rs index e67536a5..cb425425 100644 --- a/matrix_sdk/src/room/common.rs +++ b/matrix_sdk/src/room/common.rs @@ -1,13 +1,14 @@ use std::{ops::Deref, sync::Arc}; -use matrix_sdk_base::{deserialized_responses::MembersResponse, identifiers::UserId}; -use matrix_sdk_common::{ - api::r0::{ +use matrix_sdk_base::deserialized_responses::MembersResponse; +use matrix_sdk_common::locks::Mutex; +use ruma::{ + api::client::r0::{ media::{get_content, get_content_thumbnail}, membership::{get_member_events, join_room_by_id, leave_room}, message::get_message_events, }, - locks::Mutex, + UserId, }; use crate::{BaseRoom, Client, Result, RoomMember}; diff --git a/matrix_sdk/src/room/joined.rs b/matrix_sdk/src/room/joined.rs index f9216d9a..3010dd5f 100644 --- a/matrix_sdk/src/room/joined.rs +++ b/matrix_sdk/src/room/joined.rs @@ -4,8 +4,17 @@ use std::{io::Read, ops::Deref}; #[cfg(feature = "encryption")] use matrix_sdk_base::crypto::AttachmentEncryptor; +#[cfg(feature = "encryption")] +use matrix_sdk_common::locks::Mutex; use matrix_sdk_common::{ - api::r0::{ + instant::{Duration, Instant}, + uuid::Uuid, +}; +use mime::{self, Mime}; +#[cfg(feature = "encryption")] +use ruma::events::room::EncryptedFileInit; +use ruma::{ + api::client::r0::{ membership::{ ban_user, invite_user::{self, InvitationRecipient}, @@ -30,14 +39,9 @@ use matrix_sdk_common::{ AnyMessageEventContent, AnyStateEventContent, }, identifiers::{EventId, UserId}, - instant::{Duration, Instant}, receipt::ReceiptType, - uuid::Uuid, }; #[cfg(feature = "encryption")] -use matrix_sdk_common::{events::room::EncryptedFileInit, locks::Mutex}; -use mime::{self, Mime}; -#[cfg(feature = "encryption")] use tracing::instrument; use crate::{room::Common, BaseRoom, Client, Result, RoomType}; diff --git a/matrix_sdk/src/room/left.rs b/matrix_sdk/src/room/left.rs index 5baded8c..3adeba91 100644 --- a/matrix_sdk/src/room/left.rs +++ b/matrix_sdk/src/room/left.rs @@ -1,6 +1,6 @@ use std::ops::Deref; -use matrix_sdk_common::api::r0::membership::forget_room; +use ruma::api::client::r0::membership::forget_room; use crate::{room::Common, BaseRoom, Client, Result, RoomType}; diff --git a/matrix_sdk/src/room_member.rs b/matrix_sdk/src/room_member.rs index 035cdb5e..e9d06382 100644 --- a/matrix_sdk/src/room_member.rs +++ b/matrix_sdk/src/room_member.rs @@ -1,6 +1,6 @@ use std::ops::Deref; -use matrix_sdk_common::api::r0::media::{get_content, get_content_thumbnail}; +use ruma::api::client::r0::media::{get_content, get_content_thumbnail}; use crate::{BaseRoomMember, Client, Result};