matrix-sdk: Move the bulk of the sdk into a separate base crate.
parent
06707bd95e
commit
30f8ccd2de
|
@ -1,6 +1,7 @@
|
||||||
[workspace]
|
[workspace]
|
||||||
members = [
|
members = [
|
||||||
"matrix_sdk",
|
"matrix_sdk",
|
||||||
|
"matrix_sdk_base",
|
||||||
"matrix_sdk_crypto",
|
"matrix_sdk_crypto",
|
||||||
"matrix_sdk_common",
|
"matrix_sdk_common",
|
||||||
]
|
]
|
||||||
|
|
|
@ -27,6 +27,7 @@ serde = "1.0.106"
|
||||||
serde_json = "1.0.52"
|
serde_json = "1.0.52"
|
||||||
uuid = { version = "0.8.1", features = ["v4"] }
|
uuid = { version = "0.8.1", features = ["v4"] }
|
||||||
|
|
||||||
|
matrix-sdk-base = { path = "../matrix_sdk_base" }
|
||||||
matrix-sdk-common = { path = "../matrix_sdk_common" }
|
matrix-sdk-common = { path = "../matrix_sdk_common" }
|
||||||
matrix-sdk-crypto = { path = "../matrix_sdk_crypto", optional = true }
|
matrix-sdk-crypto = { path = "../matrix_sdk_crypto", optional = true }
|
||||||
|
|
||||||
|
|
|
@ -44,12 +44,12 @@ use crate::Endpoint;
|
||||||
use crate::identifiers::DeviceId;
|
use crate::identifiers::DeviceId;
|
||||||
|
|
||||||
use crate::api;
|
use crate::api;
|
||||||
use crate::base_client::Client as BaseClient;
|
|
||||||
use crate::models::Room;
|
|
||||||
use crate::session::Session;
|
|
||||||
use crate::state::StateStore;
|
|
||||||
use crate::VERSION;
|
use crate::VERSION;
|
||||||
use crate::{Error, EventEmitter, Result};
|
use crate::{Error, EventEmitter, Result};
|
||||||
|
use matrix_sdk_base::Client as BaseClient;
|
||||||
|
use matrix_sdk_base::Room;
|
||||||
|
use matrix_sdk_base::Session;
|
||||||
|
use matrix_sdk_base::StateStore;
|
||||||
|
|
||||||
const DEFAULT_SYNC_TIMEOUT: Duration = Duration::from_secs(30);
|
const DEFAULT_SYNC_TIMEOUT: Duration = Duration::from_secs(30);
|
||||||
|
|
||||||
|
|
|
@ -26,29 +26,15 @@
|
||||||
//! destroyed.
|
//! destroyed.
|
||||||
#![deny(missing_docs)]
|
#![deny(missing_docs)]
|
||||||
|
|
||||||
pub use crate::{error::Error, error::Result, session::Session};
|
pub use matrix_sdk_base::{Error, EventEmitter, Result, Room, Session};
|
||||||
|
pub use matrix_sdk_base::{JsonStore, StateStore};
|
||||||
pub use matrix_sdk_common::*;
|
pub use matrix_sdk_common::*;
|
||||||
pub use reqwest::header::InvalidHeaderValue;
|
pub use reqwest::header::InvalidHeaderValue;
|
||||||
|
|
||||||
mod async_client;
|
|
||||||
mod base_client;
|
|
||||||
mod error;
|
|
||||||
mod event_emitter;
|
|
||||||
mod models;
|
|
||||||
mod request_builder;
|
|
||||||
mod session;
|
|
||||||
mod state;
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
pub mod test_builder;
|
|
||||||
|
|
||||||
pub use async_client::{AsyncClient, AsyncClientConfig, SyncSettings};
|
|
||||||
pub use base_client::{Client, RoomState, RoomStateType};
|
|
||||||
pub use event_emitter::EventEmitter;
|
|
||||||
#[cfg(feature = "encryption")]
|
#[cfg(feature = "encryption")]
|
||||||
pub use matrix_sdk_crypto::{Device, TrustState};
|
pub use matrix_sdk_base::{Device, TrustState};
|
||||||
pub use models::Room;
|
|
||||||
pub use request_builder::{MessagesRequestBuilder, RoomBuilder};
|
mod async_client;
|
||||||
pub use state::{JsonStore, StateStore};
|
pub use async_client::{AsyncClient, AsyncClientConfig, SyncSettings};
|
||||||
|
|
||||||
pub(crate) const VERSION: &str = env!("CARGO_PKG_VERSION");
|
pub(crate) const VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
[package]
|
||||||
|
authors = ["Damir Jelić <poljar@termina.org.uk"]
|
||||||
|
description = "A high level Matrix client-server library."
|
||||||
|
edition = "2018"
|
||||||
|
homepage = "https://github.com/matrix-org/matrix-rust-sdk"
|
||||||
|
keywords = ["matrix", "chat", "messaging", "ruma", "nio"]
|
||||||
|
license = "Apache-2.0"
|
||||||
|
name = "matrix-sdk-base"
|
||||||
|
readme = "README.md"
|
||||||
|
repository = "https://github.com/matrix-org/matrix-rust-sdk"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["encryption", "sqlite-cryptostore"]
|
||||||
|
messages = []
|
||||||
|
encryption = ["matrix-sdk-crypto"]
|
||||||
|
sqlite-cryptostore = ["matrix-sdk-crypto/sqlite-cryptostore"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
dirs = "2.0.2"
|
||||||
|
futures = "0.3.4"
|
||||||
|
reqwest = "0.10.4"
|
||||||
|
http = "0.2.1"
|
||||||
|
url = "2.1.1"
|
||||||
|
async-trait = "0.1.30"
|
||||||
|
serde = "1.0.106"
|
||||||
|
serde_json = "1.0.52"
|
||||||
|
uuid = { version = "0.8.1", features = ["v4"] }
|
||||||
|
|
||||||
|
matrix-sdk-common = { path = "../matrix_sdk_common" }
|
||||||
|
matrix-sdk-crypto = { path = "../matrix_sdk_crypto", optional = true }
|
||||||
|
|
||||||
|
# Misc dependencies
|
||||||
|
thiserror = "1.0.16"
|
||||||
|
tracing = "0.1.13"
|
||||||
|
|
||||||
|
[dependencies.tracing-futures]
|
||||||
|
version = "0.2.4"
|
||||||
|
default-features = false
|
||||||
|
features = ["std", "std-future"]
|
||||||
|
|
||||||
|
[dependencies.tokio]
|
||||||
|
version = "0.2.20"
|
||||||
|
default-features = false
|
||||||
|
features = ["sync", "time", "fs"]
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
tokio = { version = "0.2.20", features = ["rt-threaded", "macros"] }
|
||||||
|
ruma-identifiers = { version = "0.16.1", features = ["rand"] }
|
||||||
|
serde_json = "1.0.52"
|
||||||
|
tracing-subscriber = "0.2.5"
|
||||||
|
tempfile = "3.1.0"
|
||||||
|
mockito = "0.25.1"
|
||||||
|
lazy_static = "1.4.0"
|
|
@ -210,7 +210,7 @@ impl Client {
|
||||||
/// When a client is provided the state store will load state from the `StateStore`.
|
/// When a client is provided the state store will load state from the `StateStore`.
|
||||||
///
|
///
|
||||||
/// Returns `true` when a state store sync has successfully completed.
|
/// Returns `true` when a state store sync has successfully completed.
|
||||||
pub(crate) async fn sync_with_state_store(&self) -> Result<bool> {
|
pub async fn sync_with_state_store(&self) -> Result<bool> {
|
||||||
let store = self.state_store.read().await;
|
let store = self.state_store.read().await;
|
||||||
if let Some(store) = store.as_ref() {
|
if let Some(store) = store.as_ref() {
|
||||||
if let Some(sess) = self.session.read().await.as_ref() {
|
if let Some(sess) = self.session.read().await.as_ref() {
|
||||||
|
@ -290,7 +290,7 @@ impl Client {
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// `room_id` - The unique id of the room that should be fetched.
|
/// `room_id` - The unique id of the room that should be fetched.
|
||||||
pub(crate) async fn get_joined_room(&self, room_id: &RoomId) -> Option<Arc<RwLock<Room>>> {
|
pub async fn get_joined_room(&self, room_id: &RoomId) -> Option<Arc<RwLock<Room>>> {
|
||||||
self.joined_rooms.read().await.get(room_id).cloned()
|
self.joined_rooms.read().await.get(room_id).cloned()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,7 +324,7 @@ impl Client {
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// `room_id` - The unique id of the room that should be fetched.
|
/// `room_id` - The unique id of the room that should be fetched.
|
||||||
pub(crate) async fn get_invited_room(&self, room_id: &RoomId) -> Option<Arc<RwLock<Room>>> {
|
pub async fn get_invited_room(&self, room_id: &RoomId) -> Option<Arc<RwLock<Room>>> {
|
||||||
self.invited_rooms.read().await.get(room_id).cloned()
|
self.invited_rooms.read().await.get(room_id).cloned()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,7 +358,7 @@ impl Client {
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// `room_id` - The unique id of the room that should be fetched.
|
/// `room_id` - The unique id of the room that should be fetched.
|
||||||
pub(crate) async fn get_left_room(&self, room_id: &RoomId) -> Option<Arc<RwLock<Room>>> {
|
pub async fn get_left_room(&self, room_id: &RoomId) -> Option<Arc<RwLock<Room>>> {
|
||||||
self.left_rooms.read().await.get(room_id).cloned()
|
self.left_rooms.read().await.get(room_id).cloned()
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
// Copyright 2020 Damir Jelić
|
||||||
|
// Copyright 2020 The Matrix.org Foundation C.I.C.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
//! This crate implements a [Matrix](https://matrix.org/) client library.
|
||||||
|
//!
|
||||||
|
//! ## Crate Feature Flags
|
||||||
|
//!
|
||||||
|
//! The following crate feature flags are available:
|
||||||
|
//!
|
||||||
|
//! * `encryption`: Enables end-to-end encryption support in the library.
|
||||||
|
//! * `sqlite-cryptostore`: Enables a SQLite based store for the encryption
|
||||||
|
//! keys. If this is disabled and `encryption` support is enabled the keys will
|
||||||
|
//! by default be stored only in memory and thus lost after the client is
|
||||||
|
//! destroyed.
|
||||||
|
#![deny(missing_docs)]
|
||||||
|
|
||||||
|
pub use crate::{error::Error, error::Result, session::Session};
|
||||||
|
pub use matrix_sdk_common::*;
|
||||||
|
pub use reqwest::header::InvalidHeaderValue;
|
||||||
|
|
||||||
|
mod base_client;
|
||||||
|
mod error;
|
||||||
|
mod event_emitter;
|
||||||
|
mod models;
|
||||||
|
mod request_builder;
|
||||||
|
mod session;
|
||||||
|
mod state;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
pub mod test_builder;
|
||||||
|
|
||||||
|
pub use base_client::{Client, RoomState, RoomStateType};
|
||||||
|
pub use event_emitter::EventEmitter;
|
||||||
|
#[cfg(feature = "encryption")]
|
||||||
|
pub use matrix_sdk_crypto::{Device, TrustState};
|
||||||
|
pub use models::Room;
|
||||||
|
pub use request_builder::{MessagesRequestBuilder, RoomBuilder};
|
||||||
|
pub use state::{JsonStore, StateStore};
|
Loading…
Reference in New Issue