rust-sdk: Cleanup the docs and fix the examples up.
parent
de154e272a
commit
c41d3873b6
|
@ -35,6 +35,6 @@ cjson = { version = "0.1.0", optional = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
tokio = { version = "0.2.11", features = ["full"] }
|
tokio = { version = "0.2.11", features = ["full"] }
|
||||||
async-std = { version = "1.5.0", features = ["attributes"] }
|
async-std = { version = "1.5.0", features = ["unstable", "attributes"] }
|
||||||
url = "2.1.1"
|
url = "2.1.1"
|
||||||
mockito = "0.23.3"
|
mockito = "0.23.3"
|
||||||
|
|
|
@ -67,10 +67,9 @@ pub struct AsyncClient {
|
||||||
/// # Example
|
/// # Example
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
|
/// # use matrix_sdk::AsyncClientConfig;
|
||||||
/// // To pass all the request through mitmproxy set the proxy and disable SSL
|
/// // To pass all the request through mitmproxy set the proxy and disable SSL
|
||||||
/// // verification
|
/// // verification
|
||||||
/// use matrix_sdk::AsyncClientConfig;
|
|
||||||
///
|
|
||||||
/// let client_config = AsyncClientConfig::new()
|
/// let client_config = AsyncClientConfig::new()
|
||||||
/// .proxy("http://localhost:8080")
|
/// .proxy("http://localhost:8080")
|
||||||
/// .unwrap()
|
/// .unwrap()
|
||||||
|
@ -265,7 +264,17 @@ impl AsyncClient {
|
||||||
/// received.
|
/// received.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
/// ```noexecute
|
/// ```
|
||||||
|
/// # use matrix_sdk::events::{
|
||||||
|
/// # collections::all::RoomEvent,
|
||||||
|
/// # room::message::{MessageEvent, MessageEventContent, TextMessageEventContent},
|
||||||
|
/// # EventResult,
|
||||||
|
/// # };
|
||||||
|
/// # use matrix_sdk::Room;
|
||||||
|
/// # use std::sync::{Arc, RwLock};
|
||||||
|
/// # use matrix_sdk::AsyncClient;
|
||||||
|
/// # use url::Url;
|
||||||
|
///
|
||||||
/// async fn async_cb(room: Arc<RwLock<Room>>, event: Arc<EventResult<RoomEvent>>) {
|
/// async fn async_cb(room: Arc<RwLock<Room>>, event: Arc<EventResult<RoomEvent>>) {
|
||||||
/// let room = room.read().unwrap();
|
/// let room = room.read().unwrap();
|
||||||
/// let event = if let EventResult::Ok(event) = &*event {
|
/// let event = if let EventResult::Ok(event) = &*event {
|
||||||
|
@ -287,11 +296,15 @@ impl AsyncClient {
|
||||||
/// );
|
/// );
|
||||||
/// }
|
/// }
|
||||||
/// }
|
/// }
|
||||||
|
/// # fn main() -> Result<(), matrix_sdk::Error> {
|
||||||
|
/// let homeserver = Url::parse("http://localhost:8080")?;
|
||||||
///
|
///
|
||||||
/// async fn main(client: AsyncClient) {
|
/// let mut client = AsyncClient::new(homeserver, None)?;
|
||||||
/// client.add_event_callback(async_cb);
|
///
|
||||||
/// }
|
/// client.add_event_callback(async_cb);
|
||||||
///```
|
/// # Ok(())
|
||||||
|
/// # }
|
||||||
|
/// ```
|
||||||
pub fn add_event_callback<C: 'static>(
|
pub fn add_event_callback<C: 'static>(
|
||||||
&mut self,
|
&mut self,
|
||||||
mut callback: impl FnMut(Arc<RwLock<Room>>, Arc<EventResult<RoomEvent>>) -> C + 'static + Send,
|
mut callback: impl FnMut(Arc<RwLock<Room>>, Arc<EventResult<RoomEvent>>) -> C + 'static + Send,
|
||||||
|
@ -309,9 +322,11 @@ impl AsyncClient {
|
||||||
///
|
///
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// `user` - The user that should be logged in to the homeserver.
|
/// * `user` - The user that should be logged in to the homeserver.
|
||||||
/// `password` - The password of the user.
|
///
|
||||||
/// `device_id` - A unique id that will be associated with this session. If
|
/// * `password` - The password of the user.
|
||||||
|
///
|
||||||
|
/// * `device_id` - A unique id that will be associated with this session. If
|
||||||
/// not given the homeserver will create one. Can be an exising
|
/// not given the homeserver will create one. Can be an exising
|
||||||
/// device_id from a previous login call. Note that this should be done
|
/// device_id from a previous login call. Note that this should be done
|
||||||
/// only if the client also holds the encryption keys for this devcie.
|
/// only if the client also holds the encryption keys for this devcie.
|
||||||
|
@ -408,6 +423,7 @@ impl AsyncClient {
|
||||||
///
|
///
|
||||||
/// * `sync_settings` - Settings for the sync call. Note that those settings
|
/// * `sync_settings` - Settings for the sync call. Note that those settings
|
||||||
/// will be only used for the first sync call.
|
/// will be only used for the first sync call.
|
||||||
|
///
|
||||||
/// * `callback` - A callback that will be called every time a successful
|
/// * `callback` - A callback that will be called every time a successful
|
||||||
/// response has been fetched from the server.
|
/// response has been fetched from the server.
|
||||||
///
|
///
|
||||||
|
@ -417,16 +433,35 @@ impl AsyncClient {
|
||||||
/// the interesting events through a mpsc channel to another thread e.g. a
|
/// the interesting events through a mpsc channel to another thread e.g. a
|
||||||
/// UI thread.
|
/// UI thread.
|
||||||
///
|
///
|
||||||
/// ```noexecute
|
/// ```compile_fail,E0658
|
||||||
|
/// # use matrix_sdk::events::{
|
||||||
|
/// # collections::all::RoomEvent,
|
||||||
|
/// # room::message::{MessageEvent, MessageEventContent, TextMessageEventContent},
|
||||||
|
/// # EventResult,
|
||||||
|
/// # };
|
||||||
|
/// # use matrix_sdk::Room;
|
||||||
|
/// # use std::sync::{Arc, RwLock};
|
||||||
|
/// # use matrix_sdk::{AsyncClient, SyncSettings};
|
||||||
|
/// # use url::Url;
|
||||||
|
/// # use futures::executor::block_on;
|
||||||
|
/// # block_on(async {
|
||||||
|
/// # let homeserver = Url::parse("http://localhost:8080").unwrap();
|
||||||
|
/// # let mut client = AsyncClient::new(homeserver, None).unwrap();
|
||||||
|
///
|
||||||
|
/// use async_std::sync::channel;
|
||||||
|
///
|
||||||
|
/// let (tx, rx) = channel(100);
|
||||||
|
///
|
||||||
|
/// let sync_channel = &tx;
|
||||||
|
/// let sync_settings = SyncSettings::new()
|
||||||
|
/// .timeout(30_000)
|
||||||
|
/// .unwrap();
|
||||||
|
///
|
||||||
/// client
|
/// client
|
||||||
/// .sync_forever(sync_settings, async move |response| {
|
/// .sync_forever(sync_settings, async move |response| {
|
||||||
/// let channel = sync_channel;
|
/// let channel = sync_channel;
|
||||||
|
///
|
||||||
/// for (room_id, room) in response.rooms.join {
|
/// for (room_id, room) in response.rooms.join {
|
||||||
/// for event in room.state.events {
|
|
||||||
/// if let EventResult::Ok(e) = event {
|
|
||||||
/// channel.send(e).await;
|
|
||||||
/// }
|
|
||||||
/// }
|
|
||||||
/// for event in room.timeline.events {
|
/// for event in room.timeline.events {
|
||||||
/// if let EventResult::Ok(e) = event {
|
/// if let EventResult::Ok(e) = event {
|
||||||
/// channel.send(e).await;
|
/// channel.send(e).await;
|
||||||
|
@ -435,6 +470,7 @@ impl AsyncClient {
|
||||||
/// }
|
/// }
|
||||||
/// })
|
/// })
|
||||||
/// .await;
|
/// .await;
|
||||||
|
/// })
|
||||||
/// ```
|
/// ```
|
||||||
pub async fn sync_forever<C>(
|
pub async fn sync_forever<C>(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
@ -542,12 +578,13 @@ impl AsyncClient {
|
||||||
|
|
||||||
/// Send a room message to the homeserver.
|
/// Send a room message to the homeserver.
|
||||||
///
|
///
|
||||||
|
/// Returns the parsed response from the server.
|
||||||
|
///
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// `room_id` - The id of the room that should receive the message.
|
/// * `room_id` - The id of the room that should receive the message.
|
||||||
/// `data` - The content of the message.
|
|
||||||
///
|
///
|
||||||
/// Returns the parsed response from the server.
|
/// * `data` - The content of the message.
|
||||||
pub async fn room_send(
|
pub async fn room_send(
|
||||||
&mut self,
|
&mut self,
|
||||||
room_id: &str,
|
room_id: &str,
|
||||||
|
|
|
@ -58,9 +58,11 @@ pub struct Room {
|
||||||
|
|
||||||
impl Room {
|
impl Room {
|
||||||
/// Create a new room.
|
/// Create a new room.
|
||||||
|
///
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// * `room_id` - The unique id of the room.
|
/// * `room_id` - The unique id of the room.
|
||||||
|
///
|
||||||
/// * `own_user_id` - The mxid of our own user.
|
/// * `own_user_id` - The mxid of our own user.
|
||||||
pub fn new(room_id: &str, own_user_id: &str) -> Self {
|
pub fn new(room_id: &str, own_user_id: &str) -> Self {
|
||||||
Room {
|
Room {
|
||||||
|
@ -137,11 +139,12 @@ impl Room {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Receive a timeline event for this room and update the room state.
|
/// Receive a timeline event for this room and update the room state.
|
||||||
/// # Arguments
|
|
||||||
///
|
|
||||||
/// `event` - The event of the room.
|
|
||||||
///
|
///
|
||||||
/// Returns true if the joined member list changed, false otherwise.
|
/// Returns true if the joined member list changed, false otherwise.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `event` - The event of the room.
|
||||||
pub fn receive_timeline_event(&mut self, event: &RoomEvent) -> bool {
|
pub fn receive_timeline_event(&mut self, event: &RoomEvent) -> bool {
|
||||||
match event {
|
match event {
|
||||||
RoomEvent::RoomMember(m) => self.handle_membership(m),
|
RoomEvent::RoomMember(m) => self.handle_membership(m),
|
||||||
|
@ -150,11 +153,12 @@ impl Room {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Receive a state event for this room and update the room state.
|
/// Receive a state event for this room and update the room state.
|
||||||
/// # Arguments
|
|
||||||
///
|
|
||||||
/// `event` - The event of the room.
|
|
||||||
///
|
///
|
||||||
/// Returns true if the joined member list changed, false otherwise.
|
/// Returns true if the joined member list changed, false otherwise.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `event` - The event of the room.
|
||||||
pub fn receive_state_event(&mut self, event: &StateEvent) -> bool {
|
pub fn receive_state_event(&mut self, event: &StateEvent) -> bool {
|
||||||
match event {
|
match event {
|
||||||
StateEvent::RoomMember(m) => self.handle_membership(m),
|
StateEvent::RoomMember(m) => self.handle_membership(m),
|
||||||
|
@ -180,9 +184,10 @@ pub struct Client {
|
||||||
|
|
||||||
impl Client {
|
impl Client {
|
||||||
/// Create a new client.
|
/// Create a new client.
|
||||||
|
///
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// `session` - An optional session if the user already has one from a
|
/// * `session` - An optional session if the user already has one from a
|
||||||
/// previous login call.
|
/// previous login call.
|
||||||
pub fn new(session: Option<Session>) -> Self {
|
pub fn new(session: Option<Session>) -> Self {
|
||||||
Client {
|
Client {
|
||||||
|
@ -198,9 +203,10 @@ impl Client {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Receive a login response and update the session of the client.
|
/// Receive a login response and update the session of the client.
|
||||||
|
///
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// `response` - A successful login response that contains our access token
|
/// * `response` - A successful login response that contains our access token
|
||||||
/// and device id.
|
/// and device id.
|
||||||
pub fn receive_login_response(&mut self, response: &api::session::login::Response) {
|
pub fn receive_login_response(&mut self, response: &api::session::login::Response) {
|
||||||
let session = Session {
|
let session = Session {
|
||||||
|
@ -228,13 +234,14 @@ impl Client {
|
||||||
|
|
||||||
/// Receive a timeline event for a joined room and update the client state.
|
/// Receive a timeline event for a joined room and update the client state.
|
||||||
///
|
///
|
||||||
/// # Arguments
|
|
||||||
///
|
|
||||||
/// `room_id` - The unique id of the room the event belongs to.
|
|
||||||
/// `event` - The event that should be handled by the client.
|
|
||||||
///
|
|
||||||
/// Returns true if the membership list of the room changed, false
|
/// Returns true if the membership list of the room changed, false
|
||||||
/// otherwise.
|
/// otherwise.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `room_id` - The unique id of the room the event belongs to.
|
||||||
|
///
|
||||||
|
/// * `event` - The event that should be handled by the client.
|
||||||
pub fn receive_joined_timeline_event(
|
pub fn receive_joined_timeline_event(
|
||||||
&mut self,
|
&mut self,
|
||||||
room_id: &str,
|
room_id: &str,
|
||||||
|
@ -251,13 +258,14 @@ impl Client {
|
||||||
|
|
||||||
/// Receive a state event for a joined room and update the client state.
|
/// Receive a state event for a joined room and update the client state.
|
||||||
///
|
///
|
||||||
/// # Arguments
|
|
||||||
///
|
|
||||||
/// `room_id` - The unique id of the room the event belongs to.
|
|
||||||
/// `event` - The event that should be handled by the client.
|
|
||||||
///
|
|
||||||
/// Returns true if the membership list of the room changed, false
|
/// Returns true if the membership list of the room changed, false
|
||||||
/// otherwise.
|
/// otherwise.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `room_id` - The unique id of the room the event belongs to.
|
||||||
|
///
|
||||||
|
/// * `event` - The event that should be handled by the client.
|
||||||
pub fn receive_joined_state_event(&mut self, room_id: &str, event: &StateEvent) -> bool {
|
pub fn receive_joined_state_event(&mut self, room_id: &str, event: &StateEvent) -> bool {
|
||||||
let mut room = self.get_or_create_room(room_id).write().unwrap();
|
let mut room = self.get_or_create_room(room_id).write().unwrap();
|
||||||
room.receive_state_event(event)
|
room.receive_state_event(event)
|
||||||
|
@ -267,7 +275,7 @@ impl Client {
|
||||||
///
|
///
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// `response` - The response that we received after a successful sync.
|
/// * `response` - The response that we received after a successful sync.
|
||||||
pub fn receive_sync_response(&mut self, response: &api::sync::sync_events::IncomingResponse) {
|
pub fn receive_sync_response(&mut self, response: &api::sync::sync_events::IncomingResponse) {
|
||||||
self.sync_token = Some(response.next_batch.clone());
|
self.sync_token = Some(response.next_batch.clone());
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,7 @@ impl OlmMachine {
|
||||||
///
|
///
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// `response` - The keys upload response of the request that the client
|
/// * `response` - The keys upload response of the request that the client
|
||||||
/// performed.
|
/// performed.
|
||||||
pub async fn receive_keys_upload_response(&mut self, response: &keys::upload_keys::Response) {
|
pub async fn receive_keys_upload_response(&mut self, response: &keys::upload_keys::Response) {
|
||||||
self.account.shared = true;
|
self.account.shared = true;
|
||||||
|
@ -186,7 +186,13 @@ impl OlmMachine {
|
||||||
Ok(one_time_key_map)
|
Ok(one_time_key_map)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert a JSON value to the canonical representation and sign the JSON string.
|
/// Convert a JSON value to the canonical representation and sign the JSON
|
||||||
|
/// string.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `json` - The value that should be converted into a canonical JSON
|
||||||
|
/// string.
|
||||||
fn sign_json(&self, json: &Value) -> String {
|
fn sign_json(&self, json: &Value) -> String {
|
||||||
let canonical_json = cjson::to_string(json)
|
let canonical_json = cjson::to_string(json)
|
||||||
.unwrap_or_else(|_| panic!(format!("Can't serialize {} to canonical JSON", json)));
|
.unwrap_or_else(|_| panic!(format!("Can't serialize {} to canonical JSON", json)));
|
||||||
|
@ -198,16 +204,19 @@ impl OlmMachine {
|
||||||
/// The object must have a signatures key associated with an object of the
|
/// The object must have a signatures key associated with an object of the
|
||||||
/// form `user_id: {key_id: signature}`.
|
/// form `user_id: {key_id: signature}`.
|
||||||
///
|
///
|
||||||
|
/// Returns Ok if the signature was successfully verified, otherwise an
|
||||||
|
/// SignatureError.
|
||||||
|
///
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// * `user_id` - The user who signed the JSON object.
|
/// * `user_id` - The user who signed the JSON object.
|
||||||
|
///
|
||||||
/// * `device_id` - The device that signed the JSON object.
|
/// * `device_id` - The device that signed the JSON object.
|
||||||
|
///
|
||||||
/// * `user_key` - The public ed25519 key which was used to sign the JSON
|
/// * `user_key` - The public ed25519 key which was used to sign the JSON
|
||||||
/// object.
|
/// object.
|
||||||
/// * `json` - The JSON object that should be verified.
|
|
||||||
///
|
///
|
||||||
/// Returns Ok if the signature was successfully verified, otherwise an
|
/// * `json` - The JSON object that should be verified.
|
||||||
/// SignatureError.
|
|
||||||
fn verify_json(
|
fn verify_json(
|
||||||
&self,
|
&self,
|
||||||
user_id: &str,
|
user_id: &str,
|
||||||
|
|
Loading…
Reference in New Issue