Merge branch 'master' into new-state-store
commit
c6a80dc921
|
@ -6,5 +6,4 @@ members = [
|
||||||
"matrix_sdk_test_macros",
|
"matrix_sdk_test_macros",
|
||||||
"matrix_sdk_crypto",
|
"matrix_sdk_crypto",
|
||||||
"matrix_sdk_common",
|
"matrix_sdk_common",
|
||||||
"matrix_sdk_common_macros",
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -28,18 +28,16 @@ socks = ["reqwest/socks"]
|
||||||
docs = ["encryption", "sqlite_cryptostore", "messages"]
|
docs = ["encryption", "sqlite_cryptostore", "messages"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-trait = "0.1.41"
|
dashmap = { version = "4.0.1", optional = true }
|
||||||
dashmap = { version = "3.11.10", optional = true }
|
futures = "0.3.8"
|
||||||
futures = "0.3.6"
|
http = "0.2.2"
|
||||||
http = "0.2.1"
|
serde_json = "1.0.61"
|
||||||
serde_json = "1.0.59"
|
thiserror = "1.0.23"
|
||||||
thiserror = "1.0.21"
|
tracing = "0.1.22"
|
||||||
tracing = "0.1.21"
|
url = "2.2.0"
|
||||||
url = "2.1.1"
|
zeroize = "1.2.0"
|
||||||
zeroize = "1.1.1"
|
|
||||||
mime = "0.3.16"
|
mime = "0.3.16"
|
||||||
|
|
||||||
matrix-sdk-common-macros = { version = "0.1.0", path = "../matrix_sdk_common_macros" }
|
|
||||||
matrix-sdk-common = { version = "0.1.0", path = "../matrix_sdk_common" }
|
matrix-sdk-common = { version = "0.1.0", path = "../matrix_sdk_common" }
|
||||||
|
|
||||||
[dependencies.matrix-sdk-base]
|
[dependencies.matrix-sdk-base]
|
||||||
|
@ -48,7 +46,7 @@ path = "../matrix_sdk_base"
|
||||||
default_features = false
|
default_features = false
|
||||||
|
|
||||||
[dependencies.reqwest]
|
[dependencies.reqwest]
|
||||||
version = "0.10.8"
|
version = "0.10.10"
|
||||||
default_features = false
|
default_features = false
|
||||||
|
|
||||||
[dependencies.tracing-futures]
|
[dependencies.tracing-futures]
|
||||||
|
@ -60,7 +58,7 @@ features = ["std", "std-future"]
|
||||||
futures-timer = "3.0.2"
|
futures-timer = "3.0.2"
|
||||||
|
|
||||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
|
||||||
version = "0.2.22"
|
version = "0.2.24"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["fs", "blocking"]
|
features = ["fs", "blocking"]
|
||||||
|
|
||||||
|
@ -69,15 +67,14 @@ version = "3.0.2"
|
||||||
features = ["wasm-bindgen"]
|
features = ["wasm-bindgen"]
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
async-trait = "0.1.41"
|
async-std = { version = "1.8.0", features = ["unstable"] }
|
||||||
async-std = { version = "1.6.5", features = ["unstable"] }
|
|
||||||
dirs = "3.0.1"
|
dirs = "3.0.1"
|
||||||
matrix-sdk-test = { version = "0.1.0", path = "../matrix_sdk_test" }
|
matrix-sdk-test = { version = "0.1.0", path = "../matrix_sdk_test" }
|
||||||
tokio = { version = "0.2.22", default-features = false, features = ["rt-threaded", "macros"] }
|
tokio = { version = "0.2.24", default-features = false, features = ["rt-threaded", "macros"] }
|
||||||
serde_json = "1.0.59"
|
serde_json = "1.0.61"
|
||||||
tracing-subscriber = "0.2.13"
|
tracing-subscriber = "0.2.15"
|
||||||
tempfile = "3.1.0"
|
tempfile = "3.1.0"
|
||||||
mockito = "0.27.0"
|
mockito = "0.28.0"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
|
|
||||||
[[example]]
|
[[example]]
|
||||||
|
|
|
@ -2,11 +2,10 @@ use std::{env, process::exit};
|
||||||
use tokio::time::{delay_for, Duration};
|
use tokio::time::{delay_for, Duration};
|
||||||
|
|
||||||
use matrix_sdk::{
|
use matrix_sdk::{
|
||||||
self,
|
self, async_trait,
|
||||||
events::{room::member::MemberEventContent, StrippedStateEvent},
|
events::{room::member::MemberEventContent, StrippedStateEvent},
|
||||||
Client, ClientConfig, EventEmitter, RoomState, SyncSettings,
|
Client, ClientConfig, EventEmitter, RoomState, SyncSettings,
|
||||||
};
|
};
|
||||||
use matrix_sdk_common_macros::async_trait;
|
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
struct AutoJoinBot {
|
struct AutoJoinBot {
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
use std::{env, process::exit};
|
use std::{env, process::exit};
|
||||||
|
|
||||||
use matrix_sdk::{
|
use matrix_sdk::{
|
||||||
self,
|
self, async_trait,
|
||||||
events::{
|
events::{
|
||||||
room::message::{MessageEventContent, TextMessageEventContent},
|
room::message::{MessageEventContent, TextMessageEventContent},
|
||||||
AnyMessageEventContent, SyncMessageEvent,
|
AnyMessageEventContent, SyncMessageEvent,
|
||||||
},
|
},
|
||||||
Client, ClientConfig, EventEmitter, RoomState, SyncSettings,
|
Client, ClientConfig, EventEmitter, RoomState, SyncSettings,
|
||||||
};
|
};
|
||||||
use matrix_sdk_common_macros::async_trait;
|
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
struct CommandBot {
|
struct CommandBot {
|
||||||
|
|
|
@ -9,14 +9,13 @@ use std::{
|
||||||
use tokio::sync::Mutex;
|
use tokio::sync::Mutex;
|
||||||
|
|
||||||
use matrix_sdk::{
|
use matrix_sdk::{
|
||||||
self,
|
self, async_trait,
|
||||||
events::{
|
events::{
|
||||||
room::message::{MessageEventContent, TextMessageEventContent},
|
room::message::{MessageEventContent, TextMessageEventContent},
|
||||||
SyncMessageEvent,
|
SyncMessageEvent,
|
||||||
},
|
},
|
||||||
Client, ClientConfig, EventEmitter, RoomState, SyncSettings,
|
Client, ClientConfig, EventEmitter, RoomState, SyncSettings,
|
||||||
};
|
};
|
||||||
use matrix_sdk_common_macros::async_trait;
|
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
struct ImageBot {
|
struct ImageBot {
|
||||||
|
|
|
@ -2,14 +2,13 @@ use std::{env, process::exit};
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
use matrix_sdk::{
|
use matrix_sdk::{
|
||||||
self,
|
self, async_trait,
|
||||||
events::{
|
events::{
|
||||||
room::message::{MessageEventContent, TextMessageEventContent},
|
room::message::{MessageEventContent, TextMessageEventContent},
|
||||||
SyncMessageEvent,
|
SyncMessageEvent,
|
||||||
},
|
},
|
||||||
Client, ClientConfig, EventEmitter, RoomState, SyncSettings,
|
Client, ClientConfig, EventEmitter, RoomState, SyncSettings,
|
||||||
};
|
};
|
||||||
use matrix_sdk_common_macros::async_trait;
|
|
||||||
|
|
||||||
struct EventCallback;
|
struct EventCallback;
|
||||||
|
|
||||||
|
|
|
@ -103,10 +103,9 @@ use matrix_sdk_common::{
|
||||||
},
|
},
|
||||||
identifiers::{DeviceIdBox, EventId, RoomId, RoomIdOrAliasId, ServerName, UserId},
|
identifiers::{DeviceIdBox, EventId, RoomId, RoomIdOrAliasId, ServerName, UserId},
|
||||||
instant::{Duration, Instant},
|
instant::{Duration, Instant},
|
||||||
js_int::UInt,
|
|
||||||
presence::PresenceState,
|
presence::PresenceState,
|
||||||
uuid::Uuid,
|
uuid::Uuid,
|
||||||
FromHttpResponseError,
|
FromHttpResponseError, UInt,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(feature = "encryption")]
|
#[cfg(feature = "encryption")]
|
||||||
|
@ -1025,7 +1024,6 @@ impl Client {
|
||||||
/// # use matrix_sdk::api::r0::filter::RoomEventFilter;
|
/// # use matrix_sdk::api::r0::filter::RoomEventFilter;
|
||||||
/// # use matrix_sdk::api::r0::message::get_message_events::Request as MessagesRequest;
|
/// # use matrix_sdk::api::r0::message::get_message_events::Request as MessagesRequest;
|
||||||
/// # use url::Url;
|
/// # use url::Url;
|
||||||
/// # use matrix_sdk::js_int::UInt;
|
|
||||||
///
|
///
|
||||||
/// # let homeserver = Url::parse("http://example.com").unwrap();
|
/// # let homeserver = Url::parse("http://example.com").unwrap();
|
||||||
/// let room_id = room_id!("!roomid:example.com");
|
/// let room_id = room_id!("!roomid:example.com");
|
||||||
|
|
|
@ -20,9 +20,8 @@ use tracing::trace;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
use matrix_sdk_common::{
|
use matrix_sdk_common::{
|
||||||
api::r0::media::create_content, locks::RwLock, AuthScheme, FromHttpResponseError,
|
api::r0::media::create_content, async_trait, locks::RwLock, AuthScheme, FromHttpResponseError,
|
||||||
};
|
};
|
||||||
use matrix_sdk_common_macros::async_trait;
|
|
||||||
|
|
||||||
use crate::{ClientConfig, Error, OutgoingRequest, Result, Session};
|
use crate::{ClientConfig, Error, OutgoingRequest, Result, Session};
|
||||||
|
|
||||||
|
@ -42,8 +41,7 @@ pub trait HttpSend: Sync + Send + Debug {
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use std::convert::TryFrom;
|
/// use std::convert::TryFrom;
|
||||||
/// use matrix_sdk::{HttpSend, Result};
|
/// use matrix_sdk::{HttpSend, Result, async_trait};
|
||||||
/// use matrix_sdk_common_macros::async_trait;
|
|
||||||
///
|
///
|
||||||
/// #[derive(Debug)]
|
/// #[derive(Debug)]
|
||||||
/// struct Client(reqwest::Client);
|
/// struct Client(reqwest::Client);
|
||||||
|
|
|
@ -24,33 +24,31 @@ unstable-synapse-quirks = ["matrix-sdk-common/unstable-synapse-quirks"]
|
||||||
docs = ["encryption", "sqlite_cryptostore", "messages"]
|
docs = ["encryption", "sqlite_cryptostore", "messages"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-trait = "0.1.41"
|
dashmap= "4.0.1"
|
||||||
serde = { version = "1.0.117", features = ["rc"]}
|
serde = { version = "1.0.118", features = ["rc"]}
|
||||||
dashmap= "*"
|
serde_json = "1.0.61"
|
||||||
serde_json = "1.0.59"
|
zeroize = "1.2.0"
|
||||||
zeroize = "1.1.1"
|
tracing = "0.1.22"
|
||||||
tracing = "0.1.21"
|
|
||||||
|
|
||||||
matrix-sdk-common-macros = { version = "0.1.0", path = "../matrix_sdk_common_macros" }
|
|
||||||
matrix-sdk-common = { version = "0.1.0", path = "../matrix_sdk_common" }
|
matrix-sdk-common = { version = "0.1.0", path = "../matrix_sdk_common" }
|
||||||
matrix-sdk-crypto = { version = "0.1.0", path = "../matrix_sdk_crypto", optional = true }
|
matrix-sdk-crypto = { version = "0.1.0", path = "../matrix_sdk_crypto", optional = true }
|
||||||
|
|
||||||
# Misc dependencies
|
# Misc dependencies
|
||||||
thiserror = "1.0.21"
|
thiserror = "1.0.23"
|
||||||
sled = "0.34.4"
|
sled = "0.34.6"
|
||||||
futures = "0.3.6"
|
futures = "0.3.8"
|
||||||
|
|
||||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
|
||||||
version = "0.2.22"
|
version = "0.2.24"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["sync", "fs"]
|
features = ["sync", "fs"]
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
matrix-sdk-test = { version = "0.1.0", path = "../matrix_sdk_test" }
|
matrix-sdk-test = { version = "0.1.0", path = "../matrix_sdk_test" }
|
||||||
http = "0.2.1"
|
http = "0.2.2"
|
||||||
tracing-subscriber = "0.2.13"
|
tracing-subscriber = "0.2.15"
|
||||||
tempfile = "3.1.0"
|
tempfile = "3.1.0"
|
||||||
mockito = "0.27.0"
|
mockito = "0.28.0"
|
||||||
rustyline = "7.0.0"
|
rustyline = "7.0.0"
|
||||||
rustyline-derive = "0.4.0"
|
rustyline-derive = "0.4.0"
|
||||||
atty = "0.2"
|
atty = "0.2"
|
||||||
|
@ -58,7 +56,7 @@ clap = "2.33.3"
|
||||||
syntect = "4.4.0"
|
syntect = "4.4.0"
|
||||||
|
|
||||||
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
|
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
|
||||||
tokio = { version = "0.2.22", default-features = false, features = ["rt-threaded", "macros"] }
|
tokio = { version = "0.2.24", default-features = false, features = ["rt-threaded", "macros"] }
|
||||||
|
|
||||||
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
||||||
wasm-bindgen-test = "0.3.18"
|
wasm-bindgen-test = "0.3.19"
|
||||||
|
|
|
@ -50,7 +50,7 @@ use crate::{
|
||||||
rooms::RoomState,
|
rooms::RoomState,
|
||||||
Store,
|
Store,
|
||||||
};
|
};
|
||||||
use matrix_sdk_common_macros::async_trait;
|
use matrix_sdk_common::async_trait;
|
||||||
|
|
||||||
pub(crate) struct Emitter {
|
pub(crate) struct Emitter {
|
||||||
pub(crate) inner: Box<dyn EventEmitter>,
|
pub(crate) inner: Box<dyn EventEmitter>,
|
||||||
|
@ -278,8 +278,7 @@ pub enum CustomEvent<'c> {
|
||||||
/// # },
|
/// # },
|
||||||
/// # EventEmitter, RoomState
|
/// # EventEmitter, RoomState
|
||||||
/// # };
|
/// # };
|
||||||
/// # use matrix_sdk_common::locks::RwLock;
|
/// # use matrix_sdk_common::{async_trait, locks::RwLock};
|
||||||
/// # use matrix_sdk_common_macros::async_trait;
|
|
||||||
///
|
///
|
||||||
/// struct EventCallback;
|
/// struct EventCallback;
|
||||||
///
|
///
|
||||||
|
@ -303,7 +302,8 @@ pub enum CustomEvent<'c> {
|
||||||
/// }
|
/// }
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
#[async_trait]
|
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||||
|
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
|
||||||
pub trait EventEmitter: Send + Sync {
|
pub trait EventEmitter: Send + Sync {
|
||||||
// ROOM EVENTS from `IncomingTimeline`
|
// ROOM EVENTS from `IncomingTimeline`
|
||||||
/// Fires when `Client` receives a `RoomEvent::RoomMember` event.
|
/// Fires when `Client` receives a `RoomEvent::RoomMember` event.
|
||||||
|
@ -488,8 +488,7 @@ pub trait EventEmitter: Send + Sync {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
use matrix_sdk_common::locks::Mutex;
|
use matrix_sdk_common::{async_trait, locks::Mutex};
|
||||||
use matrix_sdk_common_macros::async_trait;
|
|
||||||
use matrix_sdk_test::{async_test, sync_response, SyncResponseFile};
|
use matrix_sdk_test::{async_test, sync_response, SyncResponseFile};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
@ -499,7 +498,8 @@ mod test {
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct EvEmitterTest(Arc<Mutex<Vec<String>>>);
|
pub struct EvEmitterTest(Arc<Mutex<Vec<String>>>);
|
||||||
|
|
||||||
#[async_trait]
|
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||||
|
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
|
||||||
impl EventEmitter for EvEmitterTest {
|
impl EventEmitter for EvEmitterTest {
|
||||||
async fn on_room_member(&self, _: RoomState, _: &SyncStateEvent<MemberEventContent>) {
|
async fn on_room_member(&self, _: RoomState, _: &SyncStateEvent<MemberEventContent>) {
|
||||||
self.0.lock().await.push("member".to_string())
|
self.0.lock().await.push("member".to_string())
|
||||||
|
|
|
@ -8,7 +8,7 @@ use std::{
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
use matrix_sdk_common::{identifiers::RoomId, locks::RwLock};
|
use matrix_sdk_common::{async_trait, identifiers::RoomId, locks::RwLock};
|
||||||
use tokio::{fs as async_fs, io::AsyncWriteExt};
|
use tokio::{fs as async_fs, io::AsyncWriteExt};
|
||||||
|
|
||||||
use super::{AllRooms, ClientState, StateStore};
|
use super::{AllRooms, ClientState, StateStore};
|
||||||
|
@ -78,7 +78,7 @@ impl fmt::Debug for JsonStore {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait]
|
||||||
impl StateStore for JsonStore {
|
impl StateStore for JsonStore {
|
||||||
async fn load_client_state(&self, sess: &Session) -> Result<Option<ClientState>> {
|
async fn load_client_state(&self, sess: &Session) -> Result<Option<ClientState>> {
|
||||||
if !self.user_path_set.load(Ordering::SeqCst) {
|
if !self.user_path_set.load(Ordering::SeqCst) {
|
||||||
|
|
|
@ -16,8 +16,10 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use matrix_sdk_common::{
|
use matrix_sdk_common::{
|
||||||
|
async_trait,
|
||||||
identifiers::{RoomId, UserId},
|
identifiers::{RoomId, UserId},
|
||||||
push::Ruleset,
|
push::Ruleset,
|
||||||
|
AsyncTraitDeps,
|
||||||
};
|
};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
@ -31,9 +33,6 @@ use crate::{
|
||||||
Result, Room, RoomState, Session,
|
Result, Room, RoomState, Session,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
|
||||||
use matrix_sdk_common_macros::send_sync;
|
|
||||||
|
|
||||||
/// `ClientState` holds all the information to restore a `BaseClient`
|
/// `ClientState` holds all the information to restore a `BaseClient`
|
||||||
/// except the `access_token` as the default store is not secure.
|
/// except the `access_token` as the default store is not secure.
|
||||||
///
|
///
|
||||||
|
@ -70,9 +69,9 @@ pub struct AllRooms {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Abstraction around the data store to avoid unnecessary request on client initialization.
|
/// Abstraction around the data store to avoid unnecessary request on client initialization.
|
||||||
#[async_trait::async_trait]
|
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||||
#[cfg_attr(not(target_arch = "wasm32"), send_sync)]
|
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
|
||||||
pub trait StateStore {
|
pub trait StateStore: AsyncTraitDeps {
|
||||||
/// Loads the state of `BaseClient` through `ClientState` type.
|
/// Loads the state of `BaseClient` through `ClientState` type.
|
||||||
///
|
///
|
||||||
/// An `Option::None` should be returned only if the `StateStore` tries to
|
/// An `Option::None` should be returned only if the `StateStore` tries to
|
||||||
|
|
|
@ -14,9 +14,8 @@ version = "0.1.0"
|
||||||
unstable-synapse-quirks = ["ruma/unstable-synapse-quirks"]
|
unstable-synapse-quirks = ["ruma/unstable-synapse-quirks"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
assign = "1.1.0"
|
instant = { version = "0.1.9", features = ["wasm-bindgen", "now"] }
|
||||||
instant = { version = "0.1.7", features = ["wasm-bindgen", "now"] }
|
async-trait = "0.1.42"
|
||||||
js_int = "0.1.9"
|
|
||||||
|
|
||||||
[dependencies.ruma]
|
[dependencies.ruma]
|
||||||
version = "0.0.2"
|
version = "0.0.2"
|
||||||
|
@ -26,7 +25,7 @@ features = ["client-api", "unstable-pre-spec"]
|
||||||
uuid = { version = "0.8.1", default-features = false, features = ["v4", "serde"] }
|
uuid = { version = "0.8.1", default-features = false, features = ["v4", "serde"] }
|
||||||
|
|
||||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
|
||||||
version = "0.2.22"
|
version = "0.2.24"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["sync"]
|
features = ["sync"]
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
pub use assign::assign;
|
pub use async_trait::async_trait;
|
||||||
pub use instant;
|
pub use instant;
|
||||||
pub use ruma::{
|
pub use ruma::{
|
||||||
api::{
|
api::{
|
||||||
|
@ -6,13 +6,27 @@ pub use ruma::{
|
||||||
error::{FromHttpRequestError, FromHttpResponseError, IntoHttpError, ServerError},
|
error::{FromHttpRequestError, FromHttpResponseError, IntoHttpError, ServerError},
|
||||||
AuthScheme, EndpointError, OutgoingRequest,
|
AuthScheme, EndpointError, OutgoingRequest,
|
||||||
},
|
},
|
||||||
directory, encryption, events,
|
assign, directory, encryption, events, identifiers, int, presence, push,
|
||||||
events::exports::js_int,
|
|
||||||
identifiers, presence, push,
|
|
||||||
serde::{CanonicalJsonValue, Raw},
|
serde::{CanonicalJsonValue, Raw},
|
||||||
thirdparty, Outgoing,
|
thirdparty, uint, Int, Outgoing, UInt,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub use uuid;
|
pub use uuid;
|
||||||
|
|
||||||
pub mod locks;
|
pub mod locks;
|
||||||
|
|
||||||
|
/// Super trait that is used for our store traits, this trait will differ if
|
||||||
|
/// it's used on WASM. WASM targets will not require `Send` and `Sync` to have
|
||||||
|
/// implemented, while other targets will.
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
pub trait AsyncTraitDeps: std::fmt::Debug + Send + Sync {}
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
impl<T: std::fmt::Debug + Send + Sync> AsyncTraitDeps for T {}
|
||||||
|
|
||||||
|
/// Super trait that is used for our store traits, this trait will differ if
|
||||||
|
/// it's used on WASM. WASM targets will not require `Send` and `Sync` to have
|
||||||
|
/// implemented, while other targets will.
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
pub trait AsyncTraitDeps: std::fmt::Debug + Send + Sync {}
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
impl<T: std::fmt::Debug + Send + Sync> AsyncTraitDeps for T {}
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
[package]
|
|
||||||
description = "Helper macros for the Matrix SDK"
|
|
||||||
authors = ["MTRnord <mtrnord1@gmail.com>"]
|
|
||||||
edition = "2018"
|
|
||||||
homepage = "https://github.com/matrix-org/matrix-rust-sdk"
|
|
||||||
keywords = ["matrix", "chat", "messaging", "ruma"]
|
|
||||||
license = "Apache-2.0"
|
|
||||||
name = "matrix-sdk-common-macros"
|
|
||||||
readme = "README.md"
|
|
||||||
repository = "https://github.com/matrix-org/matrix-rust-sdk"
|
|
||||||
version = "0.1.0"
|
|
||||||
|
|
||||||
[lib]
|
|
||||||
proc-macro = true
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
syn = { version = "1.0.45", features = ["proc-macro"], default-features = false }
|
|
||||||
quote = "1.0.7"
|
|
|
@ -1,30 +0,0 @@
|
||||||
use proc_macro::TokenStream;
|
|
||||||
use quote::quote;
|
|
||||||
use syn::{parse_macro_input, parse_quote, ItemTrait};
|
|
||||||
|
|
||||||
/// Attribute to use `Send + Sync` for everything but wasm32
|
|
||||||
#[proc_macro_attribute]
|
|
||||||
pub fn send_sync(_attr: TokenStream, input: TokenStream) -> TokenStream {
|
|
||||||
// Parse the input tokens into a syntax tree
|
|
||||||
let mut input = parse_macro_input!(input as ItemTrait);
|
|
||||||
|
|
||||||
let send_trait_bound = parse_quote!(std::marker::Send);
|
|
||||||
let sync_trait_bound = parse_quote!(std::marker::Sync);
|
|
||||||
input.supertraits.push(send_trait_bound);
|
|
||||||
input.supertraits.push(sync_trait_bound);
|
|
||||||
|
|
||||||
TokenStream::from(quote!(#input))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A wasm32 compatible wrapper for the async_trait::async_trait macro
|
|
||||||
#[proc_macro_attribute]
|
|
||||||
pub fn async_trait(_attr: TokenStream, item: TokenStream) -> TokenStream {
|
|
||||||
let attrs = r#"
|
|
||||||
#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
|
|
||||||
#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
|
|
||||||
"#;
|
|
||||||
|
|
||||||
let mut out: TokenStream = attrs.parse().unwrap();
|
|
||||||
out.extend(item);
|
|
||||||
out
|
|
||||||
}
|
|
|
@ -20,24 +20,21 @@ sqlite_cryptostore = ["sqlx"]
|
||||||
docs = ["sqlite_cryptostore"]
|
docs = ["sqlite_cryptostore"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-trait = "0.1.41"
|
|
||||||
|
|
||||||
matrix-sdk-common-macros = { version = "0.1.0", path = "../matrix_sdk_common_macros" }
|
|
||||||
matrix-sdk-common = { version = "0.1.0", path = "../matrix_sdk_common" }
|
matrix-sdk-common = { version = "0.1.0", path = "../matrix_sdk_common" }
|
||||||
|
|
||||||
olm-rs = { version = "1.0.0", features = ["serde"] }
|
olm-rs = { version = "1.0.0", features = ["serde"] }
|
||||||
getrandom = "0.2.0"
|
getrandom = "0.2.1"
|
||||||
serde = { version = "1.0.117", features = ["derive", "rc"] }
|
serde = { version = "1.0.118", features = ["derive", "rc"] }
|
||||||
serde_json = "1.0.59"
|
serde_json = "1.0.61"
|
||||||
zeroize = { version = "1.1.1", features = ["zeroize_derive"] }
|
zeroize = { version = "1.2.0", features = ["zeroize_derive"] }
|
||||||
|
|
||||||
# Misc dependencies
|
# Misc dependencies
|
||||||
thiserror = "1.0.21"
|
thiserror = "1.0.23"
|
||||||
tracing = "0.1.21"
|
tracing = "0.1.22"
|
||||||
atomic = "0.5.0"
|
atomic = "0.5.0"
|
||||||
dashmap = "3.11.10"
|
dashmap = "4.0.1"
|
||||||
sha2 = "0.9.1"
|
sha2 = "0.9.2"
|
||||||
aes-gcm = "0.7.0"
|
aes-gcm = "0.8.0"
|
||||||
aes-ctr = "0.6.0"
|
aes-ctr = "0.6.0"
|
||||||
pbkdf2 = { version = "0.6.0", default-features = false }
|
pbkdf2 = { version = "0.6.0", default-features = false }
|
||||||
hmac = "0.10.1"
|
hmac = "0.10.1"
|
||||||
|
@ -45,17 +42,17 @@ base64 = "0.13.0"
|
||||||
byteorder = "1.3.4"
|
byteorder = "1.3.4"
|
||||||
|
|
||||||
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.sqlx]
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.sqlx]
|
||||||
version = "0.4.1"
|
version = "0.4.2"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["runtime-tokio-native-tls", "sqlite", "macros"]
|
features = ["runtime-tokio-native-tls", "sqlite", "macros"]
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
tokio = { version = "0.2.22", default-features = false, features = ["rt-threaded", "macros"] }
|
tokio = { version = "0.2.24", default-features = false, features = ["rt-threaded", "macros"] }
|
||||||
futures = "0.3.6"
|
futures = "0.3.8"
|
||||||
proptest = "0.10.1"
|
proptest = "0.10.1"
|
||||||
serde_json = "1.0.59"
|
serde_json = "1.0.61"
|
||||||
tempfile = "3.1.0"
|
tempfile = "3.1.0"
|
||||||
http = "0.2.1"
|
http = "0.2.2"
|
||||||
matrix-sdk-test = { version = "0.1.0", path = "../matrix_sdk_test" }
|
matrix-sdk-test = { version = "0.1.0", path = "../matrix_sdk_test" }
|
||||||
indoc = "1.0.3"
|
indoc = "1.0.3"
|
||||||
|
|
|
@ -39,10 +39,9 @@ use matrix_sdk_common::{
|
||||||
DeviceId, DeviceIdBox, DeviceKeyAlgorithm, EventEncryptionAlgorithm, EventId, RoomId,
|
DeviceId, DeviceIdBox, DeviceKeyAlgorithm, EventEncryptionAlgorithm, EventId, RoomId,
|
||||||
UserId,
|
UserId,
|
||||||
},
|
},
|
||||||
js_int::UInt,
|
|
||||||
locks::Mutex,
|
locks::Mutex,
|
||||||
uuid::Uuid,
|
uuid::Uuid,
|
||||||
Raw,
|
Raw, UInt,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -1202,7 +1201,7 @@ pub(crate) mod test {
|
||||||
/// These keys need to be periodically uploaded to the server.
|
/// These keys need to be periodically uploaded to the server.
|
||||||
type OneTimeKeys = BTreeMap<DeviceKeyId, OneTimeKey>;
|
type OneTimeKeys = BTreeMap<DeviceKeyId, OneTimeKey>;
|
||||||
|
|
||||||
use matrix_sdk_common::js_int::uint;
|
use matrix_sdk_common::uint;
|
||||||
|
|
||||||
fn alice_id() -> UserId {
|
fn alice_id() -> UserId {
|
||||||
user_id!("@alice:example.org")
|
user_id!("@alice:example.org")
|
||||||
|
|
|
@ -41,9 +41,8 @@ use matrix_sdk_common::{
|
||||||
UserId,
|
UserId,
|
||||||
},
|
},
|
||||||
instant::Instant,
|
instant::Instant,
|
||||||
js_int::UInt,
|
|
||||||
locks::Mutex,
|
locks::Mutex,
|
||||||
CanonicalJsonValue, Raw,
|
CanonicalJsonValue, Raw, UInt,
|
||||||
};
|
};
|
||||||
use olm_rs::{
|
use olm_rs::{
|
||||||
account::{IdentityKeys, OlmAccount, OneTimeKeys},
|
account::{IdentityKeys, OlmAccount, OneTimeKeys},
|
||||||
|
|
|
@ -418,7 +418,7 @@ mod test {
|
||||||
|
|
||||||
use matrix_sdk_common::{
|
use matrix_sdk_common::{
|
||||||
events::room::encryption::EncryptionEventContent, identifiers::EventEncryptionAlgorithm,
|
events::room::encryption::EncryptionEventContent, identifiers::EventEncryptionAlgorithm,
|
||||||
js_int::uint,
|
uint,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{EncryptionSettings, ROTATION_MESSAGES, ROTATION_PERIOD};
|
use super::{EncryptionSettings, ROTATION_MESSAGES, ROTATION_PERIOD};
|
||||||
|
|
|
@ -19,10 +19,10 @@ use std::{
|
||||||
|
|
||||||
use dashmap::{DashMap, DashSet};
|
use dashmap::{DashMap, DashSet};
|
||||||
use matrix_sdk_common::{
|
use matrix_sdk_common::{
|
||||||
|
async_trait,
|
||||||
identifiers::{DeviceId, DeviceIdBox, RoomId, UserId},
|
identifiers::{DeviceId, DeviceIdBox, RoomId, UserId},
|
||||||
locks::Mutex,
|
locks::Mutex,
|
||||||
};
|
};
|
||||||
use matrix_sdk_common_macros::async_trait;
|
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
caches::{DeviceStore, GroupSessionStore, SessionStore},
|
caches::{DeviceStore, GroupSessionStore, SessionStore},
|
||||||
|
@ -92,7 +92,8 @@ impl MemoryStore {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||||
|
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
|
||||||
impl CryptoStore for MemoryStore {
|
impl CryptoStore for MemoryStore {
|
||||||
async fn load_account(&self) -> Result<Option<ReadOnlyAccount>> {
|
async fn load_account(&self) -> Result<Option<ReadOnlyAccount>> {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
|
|
|
@ -44,7 +44,6 @@ mod pickle_key;
|
||||||
#[cfg(feature = "sqlite_cryptostore")]
|
#[cfg(feature = "sqlite_cryptostore")]
|
||||||
pub(crate) mod sqlite;
|
pub(crate) mod sqlite;
|
||||||
|
|
||||||
use matrix_sdk_common::identifiers::DeviceIdBox;
|
|
||||||
pub use memorystore::MemoryStore;
|
pub use memorystore::MemoryStore;
|
||||||
pub use pickle_key::{EncryptedPickleKey, PickleKey};
|
pub use pickle_key::{EncryptedPickleKey, PickleKey};
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
@ -70,14 +69,14 @@ use thiserror::Error;
|
||||||
use sqlx::Error as SqlxError;
|
use sqlx::Error as SqlxError;
|
||||||
|
|
||||||
use matrix_sdk_common::{
|
use matrix_sdk_common::{
|
||||||
|
async_trait,
|
||||||
identifiers::{
|
identifiers::{
|
||||||
DeviceId, DeviceKeyAlgorithm, Error as IdentifierValidationError, RoomId, UserId,
|
DeviceId, DeviceIdBox, DeviceKeyAlgorithm, Error as IdentifierValidationError, RoomId,
|
||||||
|
UserId,
|
||||||
},
|
},
|
||||||
locks::Mutex,
|
locks::Mutex,
|
||||||
|
AsyncTraitDeps,
|
||||||
};
|
};
|
||||||
use matrix_sdk_common_macros::async_trait;
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
|
||||||
use matrix_sdk_common_macros::send_sync;
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
error::SessionUnpicklingError,
|
error::SessionUnpicklingError,
|
||||||
|
@ -332,10 +331,9 @@ pub enum CryptoStoreError {
|
||||||
|
|
||||||
/// Trait abstracting a store that the `OlmMachine` uses to store cryptographic
|
/// Trait abstracting a store that the `OlmMachine` uses to store cryptographic
|
||||||
/// keys.
|
/// keys.
|
||||||
#[async_trait]
|
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||||
#[allow(clippy::type_complexity)]
|
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
|
||||||
#[cfg_attr(not(target_arch = "wasm32"), send_sync)]
|
pub trait CryptoStore: AsyncTraitDeps {
|
||||||
pub trait CryptoStore: Debug {
|
|
||||||
/// Load an account that was previously stored.
|
/// Load an account that was previously stored.
|
||||||
async fn load_account(&self) -> Result<Option<ReadOnlyAccount>>;
|
async fn load_account(&self) -> Result<Option<ReadOnlyAccount>>;
|
||||||
|
|
||||||
|
|
|
@ -20,10 +20,10 @@ use std::{
|
||||||
sync::{Arc, Mutex as SyncMutex},
|
sync::{Arc, Mutex as SyncMutex},
|
||||||
};
|
};
|
||||||
|
|
||||||
use async_trait::async_trait;
|
|
||||||
use dashmap::DashSet;
|
use dashmap::DashSet;
|
||||||
use matrix_sdk_common::{
|
use matrix_sdk_common::{
|
||||||
api::r0::keys::{CrossSigningKey, KeyUsage},
|
api::r0::keys::{CrossSigningKey, KeyUsage},
|
||||||
|
async_trait,
|
||||||
identifiers::{
|
identifiers::{
|
||||||
DeviceId, DeviceIdBox, DeviceKeyAlgorithm, DeviceKeyId, EventEncryptionAlgorithm, RoomId,
|
DeviceId, DeviceIdBox, DeviceKeyAlgorithm, DeviceKeyId, EventEncryptionAlgorithm, RoomId,
|
||||||
UserId,
|
UserId,
|
||||||
|
|
|
@ -11,9 +11,9 @@ repository = "https://github.com/matrix-org/matrix-rust-sdk"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde_json = "1.0.59"
|
serde_json = "1.0.61"
|
||||||
http = "0.2.1"
|
http = "0.2.2"
|
||||||
matrix-sdk-common = { version = "0.1.0", path = "../matrix_sdk_common" }
|
matrix-sdk-common = { version = "0.1.0", path = "../matrix_sdk_common" }
|
||||||
matrix-sdk-test-macros = { version = "0.1.0", path = "../matrix_sdk_test_macros" }
|
matrix-sdk-test-macros = { version = "0.1.0", path = "../matrix_sdk_test_macros" }
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
serde = "1.0.117"
|
serde = "1.0.118"
|
||||||
|
|
Loading…
Reference in New Issue