Use folders instead of mods

This commit is contained in:
Alejandro Domínguez 2018-12-19 15:51:24 +01:00 committed by Jonas Platte
parent c78faf0bf3
commit d48fc54c96
84 changed files with 2518 additions and 2554 deletions

View File

@ -14,31 +14,5 @@ use serde_json;
use serde_urlencoded;
use url;
/// Endpoints for the r0.x.x versions of the client API specification.
pub mod r0 {
pub mod account;
pub mod alias;
pub mod config;
pub mod contact;
pub mod context;
pub mod directory;
pub mod filter;
pub mod media;
pub mod membership;
pub mod presence;
pub mod profile;
pub mod push;
pub mod receipt;
pub mod redact;
pub mod room;
pub mod search;
pub mod send;
pub mod server;
pub mod session;
pub mod sync;
pub mod tag;
pub mod typing;
pub mod voip;
}
pub mod r0;
pub mod unversioned;

25
src/r0.rs Normal file
View File

@ -0,0 +1,25 @@
//! Endpoints for the r0.x.x versions of the client API specification.
pub mod account;
pub mod alias;
pub mod config;
pub mod contact;
pub mod context;
pub mod directory;
pub mod filter;
pub mod media;
pub mod membership;
pub mod presence;
pub mod profile;
pub mod push;
pub mod receipt;
pub mod redact;
pub mod room;
pub mod search;
pub mod send;
pub mod server;
pub mod session;
pub mod sync;
pub mod tag;
pub mod typing;
pub mod voip;

View File

@ -1,209 +1,7 @@
//! Endpoints for account registration and management.
/// [POST /_matrix/client/r0/register](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register)
pub mod register {
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Register an account on this homeserver.",
method: POST,
name: "register",
path: "/_matrix/client/r0/register",
rate_limited: true,
requires_authentication: false,
}
request {
/// If true, the server binds the email used for authentication
/// to the Matrix ID with the ID Server.
#[serde(skip_serializing_if = "Option::is_none")]
pub bind_email: Option<bool>,
/// The desired password for the account.
///
/// Should only be empty for guest accounts.
// TODO: the spec says nothing about when it is actually required.
#[serde(skip_serializing_if = "Option::is_none")]
pub password: Option<String>,
/// local part of the desired Matrix ID.
///
/// If omitted, the homeserver MUST generate a Matrix ID local part.
#[serde(skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
/// ID of the client device.
///
/// If this does not correspond to a known client device, a new device will be created.
/// The server will auto-generate a device_id if this is not specified.
#[serde(skip_serializing_if = "Option::is_none")]
pub device_id: Option<String>,
/// A display name to assign to the newly-created device.
///
/// Ignored if `device_id` corresponds to a known device.
#[serde(skip_serializing_if = "Option::is_none")]
pub initial_device_display_name: Option<String>,
/// Additional authentication information for the user-interactive authentication API.
///
/// Note that this information is not used to define how the registered user should be
/// authenticated, but is instead used to authenticate the register call itself.
/// It should be left empty, or omitted, unless an earlier call returned an response
/// with status code 401.
#[serde(skip_serializing_if = "Option::is_none")]
pub auth: Option<AuthenticationData>,
/// Kind of account to register
///
/// Defaults to `User` if ommited.
#[ruma_api(query)]
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<RegistrationKind>,
}
response {
/// An access token for the account.
///
/// This access token can then be used to authorize other requests.
pub access_token: String,
/// The hostname of the homeserver on which the account has been registered.
pub home_server: String,
/// The fully-qualified Matrix ID that has been registered.
pub user_id: UserId,
/// ID of the registered device.
///
/// Will be the same as the corresponding parameter in the request, if one was specified.
pub device_id: String,
}
}
/// Additional authentication information for the user-interactive authentication API.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct AuthenticationData {
/// The login type that the client is attempting to complete.
#[serde(rename = "type")]
kind: String,
/// The value of the session key given by the homeserver.
session: Option<String>,
}
/// The kind of account being registered.
#[derive(Copy, Clone, Debug, Deserialize, Serialize)]
pub enum RegistrationKind {
/// A guest account
///
/// These accounts may have limited permissions and may not be supported by all servers.
#[serde(rename = "guest")]
Guest,
/// A regular user account
#[serde(rename = "user")]
User,
}
}
/// [POST /_matrix/client/r0/account/password/email/requestToken](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-account-password-email-requesttoken)
pub mod request_password_change_token {
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Request that a password change token is sent to the given email address.",
method: POST,
name: "request_password_change_token",
path: "/_matrix/client/r0/account/password/email/requestToken",
rate_limited: false,
requires_authentication: false,
}
request {
/// TODO: This parameter is not documented in the spec.
pub client_secret: String,
/// TODO: This parameter is not documented in the spec.
pub email: String,
/// TODO: This parameter is not documented in the spec.
#[serde(skip_serializing_if = "Option::is_none")]
pub id_server: Option<String>,
/// TODO: This parameter is not documented in the spec.
pub send_attempt: u64,
}
response {}
}
}
/// [POST /_matrix/client/r0/account/deactivate](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-account-deactivate)
pub mod deactivate {
// TODO: missing request parameters
use ruma_api_macros::ruma_api;
ruma_api! {
metadata {
description: "Deactivate the current user's account.",
method: POST,
name: "deactivate",
path: "/_matrix/client/r0/account/deactivate",
rate_limited: true,
requires_authentication: true,
}
request {}
response {}
}
}
/// [POST /_matrix/client/r0/account/password](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-account-password)
pub mod change_password {
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Change the password of the current user's account.",
method: POST,
name: "change_password",
path: "/_matrix/client/r0/account/password",
rate_limited: true,
requires_authentication: true,
}
request {
/// The new password for the account.
pub new_password: String,
// TODO: missing `auth` field
}
response {}
}
}
/// [POST /_matrix/client/r0/register/email/requestToken](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register-email-requesttoken)
pub mod request_register_token {
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Request a register token with a 3rd party email.",
method: POST,
name: "request_register_token",
path: "/_matrix/client/r0/register/email/requestToken",
rate_limited: true,
requires_authentication: true,
}
request {
/// Client-generated secret string used to protect this session.
pub client_secret: String,
/// The email address.
pub email: String,
/// The ID server to send the onward request to as a hostname with an appended colon and port number if the port is not the default.
#[serde(skip_serializing_if = "Option::is_none")]
pub id_server: Option<String>,
/// Used to distinguish protocol level retries from requests to re-send the email.
pub send_attempt: u64,
}
response {}
}
}
pub mod change_password;
pub mod deactivate;
pub mod register;
pub mod request_password_change_token;
pub mod request_register_token;

View File

@ -0,0 +1,23 @@
//! [POST /_matrix/client/r0/account/password](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-account-password)
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Change the password of the current user's account.",
method: POST,
name: "change_password",
path: "/_matrix/client/r0/account/password",
rate_limited: true,
requires_authentication: true,
}
request {
/// The new password for the account.
pub new_password: String,
// TODO: missing `auth` field
}
response {}
}

View File

@ -0,0 +1,19 @@
//! [POST /_matrix/client/r0/account/deactivate](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-account-deactivate)
// TODO: missing request parameters
use ruma_api_macros::ruma_api;
ruma_api! {
metadata {
description: "Deactivate the current user's account.",
method: POST,
name: "deactivate",
path: "/_matrix/client/r0/account/deactivate",
rate_limited: true,
requires_authentication: true,
}
request {}
response {}
}

View File

@ -0,0 +1,97 @@
//! [POST /_matrix/client/r0/register](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register)
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Register an account on this homeserver.",
method: POST,
name: "register",
path: "/_matrix/client/r0/register",
rate_limited: true,
requires_authentication: false,
}
request {
/// If true, the server binds the email used for authentication
/// to the Matrix ID with the ID Server.
#[serde(skip_serializing_if = "Option::is_none")]
pub bind_email: Option<bool>,
/// The desired password for the account.
///
/// Should only be empty for guest accounts.
// TODO: the spec says nothing about when it is actually required.
#[serde(skip_serializing_if = "Option::is_none")]
pub password: Option<String>,
/// local part of the desired Matrix ID.
///
/// If omitted, the homeserver MUST generate a Matrix ID local part.
#[serde(skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
/// ID of the client device.
///
/// If this does not correspond to a known client device, a new device will be created.
/// The server will auto-generate a device_id if this is not specified.
#[serde(skip_serializing_if = "Option::is_none")]
pub device_id: Option<String>,
/// A display name to assign to the newly-created device.
///
/// Ignored if `device_id` corresponds to a known device.
#[serde(skip_serializing_if = "Option::is_none")]
pub initial_device_display_name: Option<String>,
/// Additional authentication information for the user-interactive authentication API.
///
/// Note that this information is not used to define how the registered user should be
/// authenticated, but is instead used to authenticate the register call itself.
/// It should be left empty, or omitted, unless an earlier call returned an response
/// with status code 401.
#[serde(skip_serializing_if = "Option::is_none")]
pub auth: Option<AuthenticationData>,
/// Kind of account to register
///
/// Defaults to `User` if ommited.
#[ruma_api(query)]
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<RegistrationKind>,
}
response {
/// An access token for the account.
///
/// This access token can then be used to authorize other requests.
pub access_token: String,
/// The hostname of the homeserver on which the account has been registered.
pub home_server: String,
/// The fully-qualified Matrix ID that has been registered.
pub user_id: UserId,
/// ID of the registered device.
///
/// Will be the same as the corresponding parameter in the request, if one was specified.
pub device_id: String,
}
}
/// Additional authentication information for the user-interactive authentication API.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct AuthenticationData {
/// The login type that the client is attempting to complete.
#[serde(rename = "type")]
kind: String,
/// The value of the session key given by the homeserver.
session: Option<String>,
}
/// The kind of account being registered.
#[derive(Copy, Clone, Debug, Deserialize, Serialize)]
pub enum RegistrationKind {
/// A guest account
///
/// These accounts may have limited permissions and may not be supported by all servers.
#[serde(rename = "guest")]
Guest,
/// A regular user account
#[serde(rename = "user")]
User,
}

View File

@ -0,0 +1,29 @@
//! [POST /_matrix/client/r0/account/password/email/requestToken](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-account-password-email-requesttoken)
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Request that a password change token is sent to the given email address.",
method: POST,
name: "request_password_change_token",
path: "/_matrix/client/r0/account/password/email/requestToken",
rate_limited: false,
requires_authentication: false,
}
request {
/// TODO: This parameter is not documented in the spec.
pub client_secret: String,
/// TODO: This parameter is not documented in the spec.
pub email: String,
/// TODO: This parameter is not documented in the spec.
#[serde(skip_serializing_if = "Option::is_none")]
pub id_server: Option<String>,
/// TODO: This parameter is not documented in the spec.
pub send_attempt: u64,
}
response {}
}

View File

@ -0,0 +1,29 @@
//! [POST /_matrix/client/r0/register/email/requestToken](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register-email-requesttoken)
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Request a register token with a 3rd party email.",
method: POST,
name: "request_register_token",
path: "/_matrix/client/r0/register/email/requestToken",
rate_limited: true,
requires_authentication: true,
}
request {
/// Client-generated secret string used to protect this session.
pub client_secret: String,
/// The email address.
pub email: String,
/// The ID server to send the onward request to as a hostname with an appended colon and port number if the port is not the default.
#[serde(skip_serializing_if = "Option::is_none")]
pub id_server: Option<String>,
/// Used to distinguish protocol level retries from requests to re-send the email.
pub send_attempt: u64,
}
response {}
}

View File

@ -1,86 +1,5 @@
//! Endpoints for room aliases.
/// [PUT /_matrix/client/r0/directory/room/{roomAlias}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-directory-room-roomalias)
pub mod create_alias {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomAliasId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Add an alias to a room.",
method: PUT,
name: "create_alias",
path: "/_matrix/client/r0/directory/room/:room_alias",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room alias to set.
#[ruma_api(path)]
pub room_alias: RoomAliasId,
/// The room ID to set.
pub room_id: RoomId,
}
response {}
}
}
/// [DELETE /_matrix/client/r0/directory/room/{roomAlias}](https://matrix.org/docs/spec/client_server/r0.2.0.html#delete-matrix-client-r0-directory-room-roomalias)
pub mod delete_alias {
use ruma_api_macros::ruma_api;
use ruma_identifiers::RoomAliasId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Remove an alias from a room.",
method: DELETE,
name: "delete_alias",
path: "/_matrix/client/r0/directory/room/:room_alias",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room alias to remove.
#[ruma_api(path)]
pub room_alias: RoomAliasId,
}
response {}
}
}
/// [GET /_matrix/client/r0/directory/room/{roomAlias}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-directory-room-roomalias)
pub mod get_alias {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomAliasId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Resolve a room alias to a room ID.",
method: GET,
name: "get_alias",
path: "/_matrix/client/r0/directory/room/:room_alias",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room alias.
#[ruma_api(path)]
pub room_alias: RoomAliasId,
}
response {
/// The room ID for this room alias.
pub room_id: RoomId,
/// A list of servers that are aware of this room ID.
pub servers: Vec<String>,
}
}
}
pub mod create_alias;
pub mod delete_alias;
pub mod get_alias;

View File

@ -0,0 +1,26 @@
//! [PUT /_matrix/client/r0/directory/room/{roomAlias}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-directory-room-roomalias)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomAliasId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Add an alias to a room.",
method: PUT,
name: "create_alias",
path: "/_matrix/client/r0/directory/room/:room_alias",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room alias to set.
#[ruma_api(path)]
pub room_alias: RoomAliasId,
/// The room ID to set.
pub room_id: RoomId,
}
response {}
}

View File

@ -0,0 +1,24 @@
//! [DELETE /_matrix/client/r0/directory/room/{roomAlias}](https://matrix.org/docs/spec/client_server/r0.2.0.html#delete-matrix-client-r0-directory-room-roomalias)
use ruma_api_macros::ruma_api;
use ruma_identifiers::RoomAliasId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Remove an alias from a room.",
method: DELETE,
name: "delete_alias",
path: "/_matrix/client/r0/directory/room/:room_alias",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room alias to remove.
#[ruma_api(path)]
pub room_alias: RoomAliasId,
}
response {}
}

29
src/r0/alias/get_alias.rs Normal file
View File

@ -0,0 +1,29 @@
//! [GET /_matrix/client/r0/directory/room/{roomAlias}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-directory-room-roomalias)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomAliasId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Resolve a room alias to a room ID.",
method: GET,
name: "get_alias",
path: "/_matrix/client/r0/directory/room/:room_alias",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room alias.
#[ruma_api(path)]
pub room_alias: RoomAliasId,
}
response {
/// The room ID for this room alias.
pub room_id: RoomId,
/// A list of servers that are aware of this room ID.
pub servers: Vec<String>,
}
}

View File

@ -1,78 +1,4 @@
//! Endpoints for client configuration.
/// [PUT /_matrix/client/r0/user/{userId}/rooms/{roomId}/account_data/{type}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-user-userid-rooms-roomid-account-data-type)
pub mod set_room_account_data {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
ruma_api! {
metadata {
description: "Associate account data with a room.",
method: PUT,
name: "set_room_account_data",
path: "/_matrix/client/r0/user/:user_id/rooms/:room_id/account_data/:event_type",
rate_limited: false,
requires_authentication: true,
}
request {
/// Arbitrary JSON to store as config data.
#[ruma_api(body)]
pub data: Value,
/// The event type of the account_data to set.
///
/// Custom types should be namespaced to avoid clashes.
#[ruma_api(path)]
pub event_type: String,
/// The ID of the room to set account_data on.
#[ruma_api(path)]
pub room_id: RoomId,
/// The ID of the user to set account_data for.
///
/// The access token must be authorized to make requests for this user ID.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}
}
/// [PUT /_matrix/client/r0/user/{userId}/account_data/{type}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-user-userid-account-data-type)
pub mod set_global_account_data {
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
ruma_api! {
metadata {
description: "Sets global account data.",
method: PUT,
name: "set_global_account_data",
path: "/_matrix/client/r0/user/:user_id/account_data/:event_type",
rate_limited: false,
requires_authentication: true,
}
request {
/// Arbitrary JSON to store as config data.
#[ruma_api(body)]
pub data: Value,
/// The event type of the account_data to set.
///
/// Custom types should be namespaced to avoid clashes.
#[ruma_api(path)]
pub event_type: String,
/// The ID of the user to set account_data for.
///
/// The access token must be authorized to make requests for this user ID.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}
}
pub mod set_global_account_data;
pub mod set_room_account_data;

View File

@ -0,0 +1,35 @@
//! [PUT /_matrix/client/r0/user/{userId}/account_data/{type}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-user-userid-account-data-type)
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
ruma_api! {
metadata {
description: "Sets global account data.",
method: PUT,
name: "set_global_account_data",
path: "/_matrix/client/r0/user/:user_id/account_data/:event_type",
rate_limited: false,
requires_authentication: true,
}
request {
/// Arbitrary JSON to store as config data.
#[ruma_api(body)]
pub data: Value,
/// The event type of the account_data to set.
///
/// Custom types should be namespaced to avoid clashes.
#[ruma_api(path)]
pub event_type: String,
/// The ID of the user to set account_data for.
///
/// The access token must be authorized to make requests for this user ID.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}

View File

@ -0,0 +1,38 @@
//! [PUT /_matrix/client/r0/user/{userId}/rooms/{roomId}/account_data/{type}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-user-userid-rooms-roomid-account-data-type)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
ruma_api! {
metadata {
description: "Associate account data with a room.",
method: PUT,
name: "set_room_account_data",
path: "/_matrix/client/r0/user/:user_id/rooms/:room_id/account_data/:event_type",
rate_limited: false,
requires_authentication: true,
}
request {
/// Arbitrary JSON to store as config data.
#[ruma_api(body)]
pub data: Value,
/// The event type of the account_data to set.
///
/// Custom types should be namespaced to avoid clashes.
#[ruma_api(path)]
pub event_type: String,
/// The ID of the room to set account_data on.
#[ruma_api(path)]
pub room_id: RoomId,
/// The ID of the user to set account_data for.
///
/// The access token must be authorized to make requests for this user ID.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}

View File

@ -1,115 +1,5 @@
//! Endpoints for account contact information.
/// [POST /_matrix/client/r0/account/3pid](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-account-3pid)
pub mod create_contact {
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Adds contact information to the user's account.",
method: POST,
name: "create_contact",
path: "/_matrix/client/r0/account/3pid",
rate_limited: false,
requires_authentication: true,
}
request {
/// Whether the homeserver should also bind this third party identifier to the account's
/// Matrix ID with the passed identity server.
///
/// Default to `false` if not supplied.
#[serde(skip_serializing_if = "Option::is_none")]
pub bind: Option<bool>,
/// The third party credentials to associate with the account.
pub three_pid_creds: ThreePidCredentials,
}
response {}
}
/// The third party credentials to associate with the account.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ThreePidCredentials {
/// The client secret used in the session with the identity server.
pub client_secret: String,
/// The identity server to use.
pub id_server: String,
/// The session identifier given by the identity server.
pub sid: String,
}
}
/// [GET /_matrix/client/r0/account/3pid](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-account-3pid)
pub mod get_contacts {
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get a list of 3rd party contacts associated with the user's account.",
method: GET,
name: "get_contacts",
path: "/_matrix/client/r0/account/3pid",
rate_limited: false,
requires_authentication: true,
}
request {}
response {
/// A list of third party identifiers the homeserver has associated with the user's
/// account.
pub threepids: Vec<ThirdPartyIdentifier>,
}
}
/// The medium of third party identifier.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum Medium {
/// An email address.
#[serde(rename = "email")]
Email,
}
/// An identifier external to Matrix.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ThirdPartyIdentifier {
/// The third party identifier address.
pub address: String,
/// The medium of third party identifier.
pub medium: Medium,
}
}
/// [POST /_matrix/client/r0/account/3pid/email/requestToken](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-account-3pid-email-requesttoken)
pub mod request_contact_verification_token {
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Ask for a verification token for a given 3rd party ID.",
method: POST,
name: "request_contact_verification_token",
path: "/_matrix/client/r0/account/3pid/email/requestToken",
rate_limited: false,
requires_authentication: false,
}
request {
/// Client-generated secret string used to protect this session.
pub client_secret: String,
/// The email address.
pub email: String,
/// The ID server to send the onward request to as a hostname with an appended colon and port number if the port is not the default.
#[serde(skip_serializing_if = "Option::is_none")]
pub id_server: Option<String>,
/// Used to distinguish protocol level retries from requests to re-send the email.
pub send_attempt: u64,
}
response {}
}
}
pub mod create_contact;
pub mod get_contacts;
pub mod request_contact_verification_token;

View File

@ -0,0 +1,39 @@
//! [POST /_matrix/client/r0/account/3pid](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-account-3pid)
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Adds contact information to the user's account.",
method: POST,
name: "create_contact",
path: "/_matrix/client/r0/account/3pid",
rate_limited: false,
requires_authentication: true,
}
request {
/// Whether the homeserver should also bind this third party identifier to the account's
/// Matrix ID with the passed identity server.
///
/// Default to `false` if not supplied.
#[serde(skip_serializing_if = "Option::is_none")]
pub bind: Option<bool>,
/// The third party credentials to associate with the account.
pub three_pid_creds: ThreePidCredentials,
}
response {}
}
/// The third party credentials to associate with the account.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ThreePidCredentials {
/// The client secret used in the session with the identity server.
pub client_secret: String,
/// The identity server to use.
pub id_server: String,
/// The session identifier given by the identity server.
pub sid: String,
}

View File

@ -0,0 +1,40 @@
//! [GET /_matrix/client/r0/account/3pid](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-account-3pid)
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get a list of 3rd party contacts associated with the user's account.",
method: GET,
name: "get_contacts",
path: "/_matrix/client/r0/account/3pid",
rate_limited: false,
requires_authentication: true,
}
request {}
response {
/// A list of third party identifiers the homeserver has associated with the user's
/// account.
pub threepids: Vec<ThirdPartyIdentifier>,
}
}
/// The medium of third party identifier.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum Medium {
/// An email address.
#[serde(rename = "email")]
Email,
}
/// An identifier external to Matrix.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ThirdPartyIdentifier {
/// The third party identifier address.
pub address: String,
/// The medium of third party identifier.
pub medium: Medium,
}

View File

@ -0,0 +1,29 @@
//! [POST /_matrix/client/r0/account/3pid/email/requestToken](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-account-3pid-email-requesttoken)
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Ask for a verification token for a given 3rd party ID.",
method: POST,
name: "request_contact_verification_token",
path: "/_matrix/client/r0/account/3pid/email/requestToken",
rate_limited: false,
requires_authentication: false,
}
request {
/// Client-generated secret string used to protect this session.
pub client_secret: String,
/// The email address.
pub email: String,
/// The ID server to send the onward request to as a hostname with an appended colon and port number if the port is not the default.
#[serde(skip_serializing_if = "Option::is_none")]
pub id_server: Option<String>,
/// Used to distinguish protocol level retries from requests to re-send the email.
pub send_attempt: u64,
}
response {}
}

View File

@ -1,51 +1,3 @@
//! Endpoints for event context.
/// [GET /_matrix/client/r0/rooms/{roomId}/context/{eventId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-context-eventid)
pub mod get_context {
use ruma_api_macros::ruma_api;
use ruma_events::collections::only;
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the events immediately preceding and following a given event.",
method: GET,
path: "/_matrix/client/r0/rooms/:room_id/context/:event_id",
name: "get_context",
rate_limited: false,
requires_authentication: true,
}
request {
/// The event to get context around.
#[ruma_api(path)]
pub event_id: EventId,
/// The maximum number of events to return.
///
/// Defaults to 10 if not supplied.
#[ruma_api(query)]
pub limit: u8,
/// The room to get events from.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {
/// A token that can be used to paginate forwards with.
pub end: String,
/// Details of the requested event.
pub event: only::RoomEvent,
/// A list of room events that happened just after the requested event, in chronological
/// order.
pub events_after: Vec<only::RoomEvent>,
/// A list of room events that happened just before the requested event, in
/// reverse-chronological order.
pub events_before: Vec<only::RoomEvent>,
/// A token that can be used to paginate backwards with.
pub start: String,
/// The state of the room at the last event returned.
pub state: Vec<only::StateEvent>,
}
}
}
pub mod get_context;

View File

@ -0,0 +1,48 @@
//! [GET /_matrix/client/r0/rooms/{roomId}/context/{eventId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-context-eventid)
use ruma_api_macros::ruma_api;
use ruma_events::collections::only;
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the events immediately preceding and following a given event.",
method: GET,
path: "/_matrix/client/r0/rooms/:room_id/context/:event_id",
name: "get_context",
rate_limited: false,
requires_authentication: true,
}
request {
/// The event to get context around.
#[ruma_api(path)]
pub event_id: EventId,
/// The maximum number of events to return.
///
/// Defaults to 10 if not supplied.
#[ruma_api(query)]
pub limit: u8,
/// The room to get events from.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {
/// A token that can be used to paginate forwards with.
pub end: String,
/// Details of the requested event.
pub event: only::RoomEvent,
/// A list of room events that happened just after the requested event, in chronological
/// order.
pub events_after: Vec<only::RoomEvent>,
/// A list of room events that happened just before the requested event, in
/// reverse-chronological order.
pub events_before: Vec<only::RoomEvent>,
/// A token that can be used to paginate backwards with.
pub start: String,
/// The state of the room at the last event returned.
pub state: Vec<only::StateEvent>,
}
}

View File

@ -1,57 +1,3 @@
//! Endpoints for the public room directory.
/// [GET /_matrix/client/r0/publicRooms](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-publicrooms)
pub mod get_public_rooms {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomAliasId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the list of rooms in this homeserver's public directory.",
method: GET,
name: "get_public_rooms",
path: "/_matrix/client/r0/publicRooms",
rate_limited: false,
requires_authentication: false,
}
request {}
response {
/// A pagination token for the response.
pub start: String,
/// A paginated chunk of public rooms.
pub chunk: Vec<PublicRoomsChunk>,
/// A pagination token for the response.
pub end: String
}
}
/// A chunk of the response, describing one room
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct PublicRoomsChunk {
/// Aliases of the room.
//#[serde(skip_serializing_if = "Option::is_none")]
pub aliases: Option<Vec<RoomAliasId>>,
/// The URL for the room's avatar, if one is set.
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>,
/// Whether guest users may join the room and participate in it.
///
/// If they can, they will be subject to ordinary power level rules like any other user.
pub guest_can_join: bool,
/// The name of the room, if any.
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
/// The number of members joined to the room.
pub num_joined_members: u64,
/// The ID of the room.
pub room_id: RoomId,
/// The topic of the room, if any.
#[serde(skip_serializing_if = "Option::is_none")]
pub topic: Option<String>,
/// Whether the room may be viewed by guest users without joining.
pub world_readable: bool,
}
}
pub mod get_public_rooms;

View File

@ -0,0 +1,54 @@
//! [GET /_matrix/client/r0/publicRooms](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-publicrooms)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomAliasId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the list of rooms in this homeserver's public directory.",
method: GET,
name: "get_public_rooms",
path: "/_matrix/client/r0/publicRooms",
rate_limited: false,
requires_authentication: false,
}
request {}
response {
/// A pagination token for the response.
pub start: String,
/// A paginated chunk of public rooms.
pub chunk: Vec<PublicRoomsChunk>,
/// A pagination token for the response.
pub end: String
}
}
/// A chunk of the response, describing one room
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct PublicRoomsChunk {
/// Aliases of the room.
//#[serde(skip_serializing_if = "Option::is_none")]
pub aliases: Option<Vec<RoomAliasId>>,
/// The URL for the room's avatar, if one is set.
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>,
/// Whether guest users may join the room and participate in it.
///
/// If they can, they will be subject to ordinary power level rules like any other user.
pub guest_can_join: bool,
/// The name of the room, if any.
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
/// The number of members joined to the room.
pub num_joined_members: u64,
/// The ID of the room.
pub room_id: RoomId,
/// The topic of the room, if any.
#[serde(skip_serializing_if = "Option::is_none")]
pub topic: Option<String>,
/// Whether the room may be viewed by guest users without joining.
pub world_readable: bool,
}

View File

@ -1,5 +1,8 @@
//! Endpoints for event filters.
pub mod create_filter;
pub mod get_filter;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
@ -165,74 +168,3 @@ pub struct FilterDefinition {
#[serde(skip_serializing_if = "Option::is_none")]
pub presence: Option<Filter>,
}
/// [POST /_matrix/client/r0/user/{userId}/filter](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-user-userid-filter)
pub mod create_filter {
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
use super::FilterDefinition;
ruma_api! {
metadata {
description: "Create a new filter for event retrieval.",
method: POST,
name: "create_filter",
path: "/_matrix/client/r0/user/:user_id/filter",
rate_limited: false,
requires_authentication: true,
}
request {
/// The filter definition.
#[ruma_api(body)]
pub filter: FilterDefinition,
/// The ID of the user uploading the filter.
///
/// The access token must be authorized to make requests for this user ID.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The ID of the filter that was created.
pub filter_id: String,
}
}
}
/// [GET /_matrix/client/r0/user/{userId}/filter/{filterId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-user-userid-filter-filterid)
pub mod get_filter {
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
use super::FilterDefinition;
ruma_api! {
metadata {
description: "Retrieve a previously created filter.",
method: GET,
name: "get_filter",
path: "/_matrix/client/r0/user/:user_id/filter/:filter_id",
rate_limited: false,
requires_authentication: false,
}
request {
/// The ID of the filter to download.
#[ruma_api(path)]
pub filter_id: String,
/// The user ID to download a filter for.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The filter definition.
#[ruma_api(body)]
pub filter: FilterDefinition,
}
}
}

View File

@ -0,0 +1,34 @@
//! [POST /_matrix/client/r0/user/{userId}/filter](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-user-userid-filter)
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
use super::FilterDefinition;
ruma_api! {
metadata {
description: "Create a new filter for event retrieval.",
method: POST,
name: "create_filter",
path: "/_matrix/client/r0/user/:user_id/filter",
rate_limited: false,
requires_authentication: true,
}
request {
/// The filter definition.
#[ruma_api(body)]
pub filter: FilterDefinition,
/// The ID of the user uploading the filter.
///
/// The access token must be authorized to make requests for this user ID.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The ID of the filter that was created.
pub filter_id: String,
}
}

View File

@ -0,0 +1,33 @@
//! [GET /_matrix/client/r0/user/{userId}/filter/{filterId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-user-userid-filter-filterid)
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
use super::FilterDefinition;
ruma_api! {
metadata {
description: "Retrieve a previously created filter.",
method: GET,
name: "get_filter",
path: "/_matrix/client/r0/user/:user_id/filter/:filter_id",
rate_limited: false,
requires_authentication: false,
}
request {
/// The ID of the filter to download.
#[ruma_api(path)]
pub filter_id: String,
/// The user ID to download a filter for.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The filter definition.
#[ruma_api(body)]
pub filter: FilterDefinition,
}
}

View File

@ -1,121 +1,5 @@
//! Endpoints for the media repository.
/// [GET /_matrix/media/r0/download/{serverName}/{mediaId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-media-r0-download-servername-mediaid)
pub mod get_content {
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Retrieve content from the media store.",
method: GET,
name: "get_media_content",
path: "/_matrix/media/r0/download/:server_name/:media_id",
rate_limited: false,
requires_authentication: false,
}
request {
/// The media ID from the mxc:// URI (the path component).
#[ruma_api(path)]
pub media_id: String,
/// The server name from the mxc:// URI (the authoritory component).
#[ruma_api(path)]
pub server_name: String,
}
response {
/// The content that was previously uploaded.
#[ruma_api(body)]
pub file: Vec<u8>,
/// The content type of the file that was previously uploaded.
#[ruma_api(header = "CONTENT_TYPE")]
pub content_type: String,
/// The name of the file that was previously uploaded, if set.
#[ruma_api(header = "CONTENT_DISPOSITION")]
pub content_disposition: String,
}
}
}
/// [POST /_matrix/media/r0/upload](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-media-r0-upload)
pub mod create_content {
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Upload content to the media store.",
method: POST,
name: "create_media_content",
path: "/_matrix/media/r0/upload",
rate_limited: false,
requires_authentication: false,
}
request {
/// The content type of the file being uploaded.
#[ruma_api(header = "CONTENT_TYPE")]
pub content_type: String,
}
response {
/// The MXC URI for the uploaded content.
pub content_uri: String,
}
}
}
/// [GET /_matrix/media/r0/thumbnail/{serverName}/{mediaId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-media-r0-thumbnail-servername-mediaid)
pub mod get_content_thumbnail {
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
/// The desired resizing method.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum Method {
/// Crop the original to produce the requested image dimensions.
#[serde(rename = "crop")]
Crop,
/// Maintain the original aspect ratio of the source image.
#[serde(rename = "scale")]
Scale,
}
ruma_api! {
metadata {
description: "Get a thumbnail of content from the media store.",
method: GET,
name: "get_content_thumbnail",
path: "/_matrix/media/r0/thumbnail/:server_name/:media_id",
rate_limited: false,
requires_authentication: false,
}
request {
/// The media ID from the mxc:// URI (the path component).
#[ruma_api(path)]
pub media_id: String,
/// The server name from the mxc:// URI (the authoritory component).
#[ruma_api(path)]
pub server_name: String,
/// The *desired* height of the thumbnail. The actual thumbnail may not match the size
/// specified.
#[ruma_api(query)]
pub height: Option<u64>,
/// The desired resizing method.
#[ruma_api(query)]
pub method: Option<Method>,
/// The *desired* width of the thumbnail. The actual thumbnail may not match the size
/// specified.
#[ruma_api(query)]
pub width: Option<u64>,
}
response {
/// A thumbnail of the requested content.
#[ruma_api(body)]
pub file: Vec<u8>,
}
}
}
pub mod create_content;
pub mod get_content;
pub mod get_content_thumbnail;

View File

@ -0,0 +1,26 @@
//! [POST /_matrix/media/r0/upload](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-media-r0-upload)
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Upload content to the media store.",
method: POST,
name: "create_media_content",
path: "/_matrix/media/r0/upload",
rate_limited: false,
requires_authentication: false,
}
request {
/// The content type of the file being uploaded.
#[ruma_api(header = "CONTENT_TYPE")]
pub content_type: String,
}
response {
/// The MXC URI for the uploaded content.
pub content_uri: String,
}
}

View File

@ -0,0 +1,38 @@
//! Endpoints for the media repository.
//! [GET /_matrix/media/r0/download/{serverName}/{mediaId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-media-r0-download-servername-mediaid)
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Retrieve content from the media store.",
method: GET,
name: "get_media_content",
path: "/_matrix/media/r0/download/:server_name/:media_id",
rate_limited: false,
requires_authentication: false,
}
request {
/// The media ID from the mxc:// URI (the path component).
#[ruma_api(path)]
pub media_id: String,
/// The server name from the mxc:// URI (the authoritory component).
#[ruma_api(path)]
pub server_name: String,
}
response {
/// The content that was previously uploaded.
#[ruma_api(body)]
pub file: Vec<u8>,
/// The content type of the file that was previously uploaded.
#[ruma_api(header = "CONTENT_TYPE")]
pub content_type: String,
/// The name of the file that was previously uploaded, if set.
#[ruma_api(header = "CONTENT_DISPOSITION")]
pub content_disposition: String,
}
}

View File

@ -0,0 +1,52 @@
//! [GET /_matrix/media/r0/thumbnail/{serverName}/{mediaId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-media-r0-thumbnail-servername-mediaid)
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
/// The desired resizing method.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum Method {
/// Crop the original to produce the requested image dimensions.
#[serde(rename = "crop")]
Crop,
/// Maintain the original aspect ratio of the source image.
#[serde(rename = "scale")]
Scale,
}
ruma_api! {
metadata {
description: "Get a thumbnail of content from the media store.",
method: GET,
name: "get_content_thumbnail",
path: "/_matrix/media/r0/thumbnail/:server_name/:media_id",
rate_limited: false,
requires_authentication: false,
}
request {
/// The media ID from the mxc:// URI (the path component).
#[ruma_api(path)]
pub media_id: String,
/// The server name from the mxc:// URI (the authoritory component).
#[ruma_api(path)]
pub server_name: String,
/// The *desired* height of the thumbnail. The actual thumbnail may not match the size
/// specified.
#[ruma_api(query)]
pub height: Option<u64>,
/// The desired resizing method.
#[ruma_api(query)]
pub method: Option<Method>,
/// The *desired* width of the thumbnail. The actual thumbnail may not match the size
/// specified.
#[ruma_api(query)]
pub width: Option<u64>,
}
response {
/// A thumbnail of the requested content.
#[ruma_api(body)]
pub file: Vec<u8>,
}
}

View File

@ -1,5 +1,14 @@
//! Endpoints for room membership.
pub mod ban_user;
pub mod forget_room;
pub mod invite_user;
pub mod join_room_by_id;
pub mod join_room_by_id_or_alias;
pub mod kick_user;
pub mod leave_room;
pub mod unban_user;
use ruma_signatures::Signatures;
use serde_derive::{Deserialize, Serialize};
@ -19,243 +28,3 @@ pub struct ThirdPartySigned {
/// The state key of the m.third_party_invite event.
pub token: String,
}
/// [POST /_matrix/client/r0/rooms/{roomId}/invite](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-invite)
pub mod invite_user {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Invite a user to a room.",
method: POST,
name: "invite_user",
path: "/_matrix/client/r0/rooms/:room_id/invite",
rate_limited: true,
requires_authentication: true,
}
request {
/// The room where the user should be invited.
#[ruma_api(path)]
pub room_id: RoomId,
/// The user to invite.
pub user_id: UserId,
}
response {}
}
}
/// [POST /_matrix/client/r0/join/{roomIdOrAlias}](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-join-roomidoralias)
pub mod join_room_by_id_or_alias {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, RoomIdOrAliasId};
use serde_derive::{Deserialize, Serialize};
use super::ThirdPartySigned;
ruma_api! {
metadata {
description: "Join a room using its ID or one of its aliases.",
method: POST,
name: "join_room_by_id_or_alias",
path: "/_matrix/client/r0/join/:room_id_or_alias",
rate_limited: true,
requires_authentication: true,
}
request {
/// The room where the user should be invited.
#[ruma_api(path)]
pub room_id_or_alias: RoomIdOrAliasId,
/// The signature of a `m.third_party_invite` token to prove that this user owns a third
/// party identity which has been invited to the room.
#[serde(skip_serializing_if = "Option::is_none")]
pub third_party_signed: Option<ThirdPartySigned>,
}
response {
/// The room that the user joined.
pub room_id: RoomId,
}
}
}
/// [POST /_matrix/client/r0/rooms/{roomId}/join](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-join)
pub mod join_room_by_id {
use ruma_api_macros::ruma_api;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
use super::ThirdPartySigned;
ruma_api! {
metadata {
description: "Join a room using its ID.",
method: POST,
name: "join_room_by_id",
path: "/_matrix/client/r0/rooms/:room_id/join",
rate_limited: true,
requires_authentication: true,
}
request {
/// The room where the user should be invited.
#[ruma_api(path)]
pub room_id: RoomId,
/// The signature of a `m.third_party_invite` token to prove that this user owns a third
/// party identity which has been invited to the room.
#[serde(skip_serializing_if = "Option::is_none")]
pub third_party_signed: Option<ThirdPartySigned>,
}
response {
/// The room that the user joined.
pub room_id: RoomId,
}
}
}
/// [POST /_matrix/client/r0/rooms/{roomId}/forget](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-forget)
pub mod forget_room {
use ruma_api_macros::ruma_api;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Forget a room.",
method: POST,
name: "forget_room",
path: "/_matrix/client/r0/rooms/:room_id/forget",
rate_limited: true,
requires_authentication: true,
}
request {
/// The room to forget.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {}
}
}
/// [POST /_matrix/client/r0/rooms/{roomId}/leave](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-leave)
pub mod leave_room {
use ruma_api_macros::ruma_api;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Leave a room.",
method: POST,
name: "leave_room",
path: "/_matrix/client/r0/rooms/:room_id/leave",
rate_limited: true,
requires_authentication: true,
}
request {
/// The room to leave.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {}
}
}
/// [POST /_matrix/client/r0/rooms/{roomId}/kick](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-kick)
pub mod kick_user {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Kick a user from a room.",
method: POST,
name: "kick_user",
path: "/_matrix/client/r0/rooms/:room_id/kick",
rate_limited: false,
requires_authentication: true,
}
request {
/// The reason for kicking the user.
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
/// The room to kick the user from.
#[ruma_api(path)]
pub room_id: RoomId,
/// The user to kick.
pub user_id: UserId,
}
response {}
}
}
/// [POST /_matrix/client/r0/rooms/{roomId}/unban](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban)
pub mod unban_user {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Unban a user from a room.",
method: POST,
name: "unban_user",
path: "/_matrix/client/r0/rooms/:room_id/unban",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to unban the user from.
#[ruma_api(path)]
pub room_id: RoomId,
/// The user to unban.
pub user_id: UserId,
}
response {}
}
}
/// [POST /_matrix/client/r0/rooms/{roomId}/ban](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-ban)
pub mod ban_user {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Ban a user from a room.",
method: POST,
name: "ban_user",
path: "/_matrix/client/r0/rooms/:room_id/ban",
rate_limited: false,
requires_authentication: true,
}
request {
/// The reason for banning the user.
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
/// The room to kick the user from.
#[ruma_api(path)]
pub room_id: RoomId,
/// The user to ban.
pub user_id: UserId,
}
response {}
}
}

View File

@ -0,0 +1,29 @@
//! [POST /_matrix/client/r0/rooms/{roomId}/ban](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-ban)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Ban a user from a room.",
method: POST,
name: "ban_user",
path: "/_matrix/client/r0/rooms/:room_id/ban",
rate_limited: false,
requires_authentication: true,
}
request {
/// The reason for banning the user.
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
/// The room to kick the user from.
#[ruma_api(path)]
pub room_id: RoomId,
/// The user to ban.
pub user_id: UserId,
}
response {}
}

View File

@ -0,0 +1,24 @@
//! [POST /_matrix/client/r0/rooms/{roomId}/forget](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-forget)
use ruma_api_macros::ruma_api;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Forget a room.",
method: POST,
name: "forget_room",
path: "/_matrix/client/r0/rooms/:room_id/forget",
rate_limited: true,
requires_authentication: true,
}
request {
/// The room to forget.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {}
}

View File

@ -0,0 +1,26 @@
//! [POST /_matrix/client/r0/rooms/{roomId}/invite](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-invite)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Invite a user to a room.",
method: POST,
name: "invite_user",
path: "/_matrix/client/r0/rooms/:room_id/invite",
rate_limited: true,
requires_authentication: true,
}
request {
/// The room where the user should be invited.
#[ruma_api(path)]
pub room_id: RoomId,
/// The user to invite.
pub user_id: UserId,
}
response {}
}

View File

@ -0,0 +1,33 @@
//! [POST /_matrix/client/r0/rooms/{roomId}/join](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-join)
use ruma_api_macros::ruma_api;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
use super::ThirdPartySigned;
ruma_api! {
metadata {
description: "Join a room using its ID.",
method: POST,
name: "join_room_by_id",
path: "/_matrix/client/r0/rooms/:room_id/join",
rate_limited: true,
requires_authentication: true,
}
request {
/// The room where the user should be invited.
#[ruma_api(path)]
pub room_id: RoomId,
/// The signature of a `m.third_party_invite` token to prove that this user owns a third
/// party identity which has been invited to the room.
#[serde(skip_serializing_if = "Option::is_none")]
pub third_party_signed: Option<ThirdPartySigned>,
}
response {
/// The room that the user joined.
pub room_id: RoomId,
}
}

View File

@ -0,0 +1,33 @@
//! [POST /_matrix/client/r0/join/{roomIdOrAlias}](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-join-roomidoralias)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, RoomIdOrAliasId};
use serde_derive::{Deserialize, Serialize};
use super::ThirdPartySigned;
ruma_api! {
metadata {
description: "Join a room using its ID or one of its aliases.",
method: POST,
name: "join_room_by_id_or_alias",
path: "/_matrix/client/r0/join/:room_id_or_alias",
rate_limited: true,
requires_authentication: true,
}
request {
/// The room where the user should be invited.
#[ruma_api(path)]
pub room_id_or_alias: RoomIdOrAliasId,
/// The signature of a `m.third_party_invite` token to prove that this user owns a third
/// party identity which has been invited to the room.
#[serde(skip_serializing_if = "Option::is_none")]
pub third_party_signed: Option<ThirdPartySigned>,
}
response {
/// The room that the user joined.
pub room_id: RoomId,
}
}

View File

@ -0,0 +1,29 @@
//! [POST /_matrix/client/r0/rooms/{roomId}/kick](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-kick)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Kick a user from a room.",
method: POST,
name: "kick_user",
path: "/_matrix/client/r0/rooms/:room_id/kick",
rate_limited: false,
requires_authentication: true,
}
request {
/// The reason for kicking the user.
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
/// The room to kick the user from.
#[ruma_api(path)]
pub room_id: RoomId,
/// The user to kick.
pub user_id: UserId,
}
response {}
}

View File

@ -0,0 +1,24 @@
//! [POST /_matrix/client/r0/rooms/{roomId}/leave](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-leave)
use ruma_api_macros::ruma_api;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Leave a room.",
method: POST,
name: "leave_room",
path: "/_matrix/client/r0/rooms/:room_id/leave",
rate_limited: true,
requires_authentication: true,
}
request {
/// The room to leave.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {}
}

View File

@ -0,0 +1,26 @@
//! [POST /_matrix/client/r0/rooms/{roomId}/unban](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Unban a user from a room.",
method: POST,
name: "unban_user",
path: "/_matrix/client/r0/rooms/:room_id/unban",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to unban the user from.
#[ruma_api(path)]
pub room_id: RoomId,
/// The user to unban.
pub user_id: UserId,
}
response {}
}

View File

@ -1,137 +1,6 @@
//! Endpoints for user presence.
/// [PUT /_matrix/client/r0/presence/{userId}/status](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-presence-userid-status)
pub mod set_presence {
use ruma_api_macros::ruma_api;
use ruma_events::presence::PresenceState;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Set presence status for this user.",
method: PUT,
name: "set_presence",
path: "/_matrix/client/r0/presence/:user_id/status",
rate_limited: true,
requires_authentication: true,
}
request {
/// The new presence state.
pub presence: PresenceState,
/// The status message to attach to this state.
#[serde(skip_serializing_if = "Option::is_none")]
pub status_msg: Option<String>,
/// The user whose presence state will be updated.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}
}
/// [GET /_matrix/client/r0/presence/{userId}/status](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-presence-userid-status)
pub mod get_presence {
use ruma_api_macros::ruma_api;
use ruma_events::presence::PresenceState;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get presence status for this user.",
method: GET,
name: "get_presence",
path: "/_matrix/client/r0/presence/:user_id/status",
rate_limited: false,
requires_authentication: false,
}
request {
/// The user whose presence state will be retrieved.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The state message for this user if one was set.
#[serde(skip_serializing_if = "Option::is_none")]
pub status_msg: Option<String>,
/// Whether or not the user is currently active.
#[serde(skip_serializing_if = "Option::is_none")]
pub currently_active: Option<bool>,
/// The length of time in milliseconds since an action was performed by the user.
#[serde(skip_serializing_if = "Option::is_none")]
pub last_active_ago: Option<u64>,
/// The user's presence state.
pub presence: PresenceState,
}
}
}
/// [POST /_matrix/client/r0/presence/list/{userId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-presence-list-userid)
pub mod update_presence_subscriptions {
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Update the presence subscriptions of the user.",
method: POST,
name: "update_presence_subscriptions",
path: "/_matrix/client/r0/presence/list/:user_id",
rate_limited: true,
requires_authentication: true,
}
request {
/// A list of user IDs to remove from the list.
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub drop: Vec<UserId>,
/// A list of user IDs to add to the list.
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub invite: Vec<UserId>,
/// The user whose presence state will be updated.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}
}
/// [GET /_matrix/client/r0/presence/list/{userId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-presence-list-userid)
pub mod get_subscribed_presences {
use ruma_api_macros::ruma_api;
use ruma_events::presence::PresenceEvent;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the precence status from the user's subscriptions.",
method: GET,
name: "get_subscribed_presences",
path: "/_matrix/client/r0/presence/list/:user_id",
rate_limited: false,
requires_authentication: true,
}
request {
/// The user whose presence state will be retrieved.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// A list of presence events for every user on this list.
#[ruma_api(body)]
pub presence_events: Vec<PresenceEvent>,
}
}
}
pub mod get_presence;
pub mod get_subscribed_presences;
pub mod set_presence;
pub mod update_presence_subscriptions;

View File

@ -0,0 +1,37 @@
//! [GET /_matrix/client/r0/presence/{userId}/status](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-presence-userid-status)
use ruma_api_macros::ruma_api;
use ruma_events::presence::PresenceState;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get presence status for this user.",
method: GET,
name: "get_presence",
path: "/_matrix/client/r0/presence/:user_id/status",
rate_limited: false,
requires_authentication: false,
}
request {
/// The user whose presence state will be retrieved.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The state message for this user if one was set.
#[serde(skip_serializing_if = "Option::is_none")]
pub status_msg: Option<String>,
/// Whether or not the user is currently active.
#[serde(skip_serializing_if = "Option::is_none")]
pub currently_active: Option<bool>,
/// The length of time in milliseconds since an action was performed by the user.
#[serde(skip_serializing_if = "Option::is_none")]
pub last_active_ago: Option<u64>,
/// The user's presence state.
pub presence: PresenceState,
}
}

View File

@ -0,0 +1,29 @@
//! [GET /_matrix/client/r0/presence/list/{userId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-presence-list-userid)
use ruma_api_macros::ruma_api;
use ruma_events::presence::PresenceEvent;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the precence status from the user's subscriptions.",
method: GET,
name: "get_subscribed_presences",
path: "/_matrix/client/r0/presence/list/:user_id",
rate_limited: false,
requires_authentication: true,
}
request {
/// The user whose presence state will be retrieved.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// A list of presence events for every user on this list.
#[ruma_api(body)]
pub presence_events: Vec<PresenceEvent>,
}
}

View File

@ -0,0 +1,30 @@
//! [PUT /_matrix/client/r0/presence/{userId}/status](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-presence-userid-status)
use ruma_api_macros::ruma_api;
use ruma_events::presence::PresenceState;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Set presence status for this user.",
method: PUT,
name: "set_presence",
path: "/_matrix/client/r0/presence/:user_id/status",
rate_limited: true,
requires_authentication: true,
}
request {
/// The new presence state.
pub presence: PresenceState,
/// The status message to attach to this state.
#[serde(skip_serializing_if = "Option::is_none")]
pub status_msg: Option<String>,
/// The user whose presence state will be updated.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}

View File

@ -0,0 +1,32 @@
//! [POST /_matrix/client/r0/presence/list/{userId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-presence-list-userid)
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Update the presence subscriptions of the user.",
method: POST,
name: "update_presence_subscriptions",
path: "/_matrix/client/r0/presence/list/:user_id",
rate_limited: true,
requires_authentication: true,
}
request {
/// A list of user IDs to remove from the list.
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub drop: Vec<UserId>,
/// A list of user IDs to add to the list.
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub invite: Vec<UserId>,
/// The user whose presence state will be updated.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}

View File

@ -1,151 +1,7 @@
//! Endpoints for user profiles.
/// [GET /_matrix/client/r0/profile/{userId}/displayname](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-displayname)
pub mod get_display_name {
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the display name of a user.",
method: GET,
name: "get_display_name",
path: "/_matrix/client/r0/profile/:user_id/displayname",
rate_limited: false,
requires_authentication: false,
}
request {
/// The user whose display name will be retrieved.
#[ruma_api(path)]
pub user_id: UserId
}
response {
/// The user's display name, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub displayname: Option<String>
}
}
}
/// [PUT /_matrix/client/r0/profile/{userId}/displayname](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-profile-userid-displayname)
pub mod set_display_name {
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Set the display name of the user.",
method: PUT,
name: "set_display_name",
path: "/_matrix/client/r0/profile/:user_id/displayname",
rate_limited: true,
requires_authentication: true,
}
request {
/// The new display name for the user.
#[serde(skip_serializing_if = "Option::is_none")]
pub displayname: Option<String>,
/// The user whose display name will be set.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}
}
/// [GET /_matrix/client/r0/profile/{userId}/avatar_url](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-avatar-url)
pub mod get_avatar_url {
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the avatar URL of a user.",
method: GET,
name: "get_avatar_url",
path: "/_matrix/client/r0/profile/:user_id/avatar_url",
rate_limited: false,
requires_authentication: false,
}
request {
/// The user whose avatar URL will be retrieved.
#[ruma_api(path)]
pub user_id: UserId
}
response {
/// The user's avatar URL, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>
}
}
}
/// [PUT /_matrix/client/r0/profile/{userId}/avatar_url](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-profile-userid-avatar-url)
pub mod set_avatar_url {
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Set the avatar URL of the user.",
method: PUT,
name: "set_avatar_url",
path: "/_matrix/client/r0/profile/:user_id/avatar_url",
rate_limited: true,
requires_authentication: true,
}
request {
/// The new avatar URL for the user.
pub avatar_url: String,
/// The user whose avatar URL will be set.
#[ruma_api(path)]
pub user_id: UserId
}
response {}
}
}
/// [GET /_matrix/client/r0/profile/{userId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid)
pub mod get_profile {
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get all profile information of an user.",
method: GET,
name: "get_profile",
path: "/_matrix/client/r0/profile/:user_id",
rate_limited: false,
requires_authentication: false,
}
request {
/// The user whose profile will be retrieved.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The user's avatar URL, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>,
/// The user's display name, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub displayname: Option<String>,
}
}
}
pub mod get_avatar_url;
pub mod get_display_name;
pub mod get_profile;
pub mod set_avatar_url;
pub mod set_display_name;

View File

@ -0,0 +1,28 @@
//! [GET /_matrix/client/r0/profile/{userId}/avatar_url](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-avatar-url)
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the avatar URL of a user.",
method: GET,
name: "get_avatar_url",
path: "/_matrix/client/r0/profile/:user_id/avatar_url",
rate_limited: false,
requires_authentication: false,
}
request {
/// The user whose avatar URL will be retrieved.
#[ruma_api(path)]
pub user_id: UserId
}
response {
/// The user's avatar URL, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>
}
}

View File

@ -0,0 +1,28 @@
//! [GET /_matrix/client/r0/profile/{userId}/displayname](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-displayname)
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the display name of a user.",
method: GET,
name: "get_display_name",
path: "/_matrix/client/r0/profile/:user_id/displayname",
rate_limited: false,
requires_authentication: false,
}
request {
/// The user whose display name will be retrieved.
#[ruma_api(path)]
pub user_id: UserId
}
response {
/// The user's display name, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub displayname: Option<String>
}
}

View File

@ -0,0 +1,31 @@
//! [GET /_matrix/client/r0/profile/{userId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid)
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get all profile information of an user.",
method: GET,
name: "get_profile",
path: "/_matrix/client/r0/profile/:user_id",
rate_limited: false,
requires_authentication: false,
}
request {
/// The user whose profile will be retrieved.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The user's avatar URL, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>,
/// The user's display name, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub displayname: Option<String>,
}
}

View File

@ -0,0 +1,26 @@
//! [PUT /_matrix/client/r0/profile/{userId}/avatar_url](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-profile-userid-avatar-url)
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Set the avatar URL of the user.",
method: PUT,
name: "set_avatar_url",
path: "/_matrix/client/r0/profile/:user_id/avatar_url",
rate_limited: true,
requires_authentication: true,
}
request {
/// The new avatar URL for the user.
pub avatar_url: String,
/// The user whose avatar URL will be set.
#[ruma_api(path)]
pub user_id: UserId
}
response {}
}

View File

@ -0,0 +1,27 @@
//! [PUT /_matrix/client/r0/profile/{userId}/displayname](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-profile-userid-displayname)
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Set the display name of the user.",
method: PUT,
name: "set_display_name",
path: "/_matrix/client/r0/profile/:user_id/displayname",
rate_limited: true,
requires_authentication: true,
}
request {
/// The new display name for the user.
#[serde(skip_serializing_if = "Option::is_none")]
pub displayname: Option<String>,
/// The user whose display name will be set.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}

View File

@ -1,51 +1,3 @@
//! Endpoints for event receipts.
/// [POST /_matrix/client/r0/rooms/{roomId}/receipt/{receiptType}/{eventId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-receipt-receipttype-eventid)
pub mod create_receipt {
use std::fmt::{Display, Error as FmtError, Formatter};
use ruma_api_macros::ruma_api;
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Send a receipt event to a room.",
method: POST,
name: "create_receipt",
path: "/_matrix/client/r0/rooms/:room_id/receipt/:receipt_type/:event_id",
rate_limited: true,
requires_authentication: true,
}
request {
/// The event ID to acknowledge up to.
#[ruma_api(path)]
pub event_id: EventId,
/// The type of receipt to send.
#[ruma_api(path)]
pub receipt_type: ReceiptType,
/// The room in which to send the event.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {}
}
/// The type of receipt.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum ReceiptType {
/// m.read
#[serde(rename = "m.read")]
Read,
}
impl Display for ReceiptType {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError> {
match *self {
ReceiptType::Read => write!(f, "m.read"),
}
}
}
}
pub mod create_receipt;

View File

@ -0,0 +1,48 @@
//! [POST /_matrix/client/r0/rooms/{roomId}/receipt/{receiptType}/{eventId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-receipt-receipttype-eventid)
use std::fmt::{Display, Error as FmtError, Formatter};
use ruma_api_macros::ruma_api;
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Send a receipt event to a room.",
method: POST,
name: "create_receipt",
path: "/_matrix/client/r0/rooms/:room_id/receipt/:receipt_type/:event_id",
rate_limited: true,
requires_authentication: true,
}
request {
/// The event ID to acknowledge up to.
#[ruma_api(path)]
pub event_id: EventId,
/// The type of receipt to send.
#[ruma_api(path)]
pub receipt_type: ReceiptType,
/// The room in which to send the event.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {}
}
/// The type of receipt.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum ReceiptType {
/// m.read
#[serde(rename = "m.read")]
Read,
}
impl Display for ReceiptType {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError> {
match *self {
ReceiptType::Read => write!(f, "m.read"),
}
}
}

View File

@ -1,41 +1,3 @@
//! Endpoints for event redaction.
/// [PUT /_matrix/client/r0/rooms/{roomId}/redact/{eventId}/{txnId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-redact-eventid-txnid)
pub mod redact_event {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Redact an event, stripping all information not critical to the event graph integrity.",
method: PUT,
name: "redact_event",
path: "/_matrix/client/r0/rooms/:room_id/redact/:event_id/:txn_id",
rate_limited: false,
requires_authentication: true,
}
request {
/// The ID of the event to redact.
#[ruma_api(path)]
pub event_id: EventId,
/// The reason for the redaction.
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
/// The ID of the room of the event to redact.
#[ruma_api(path)]
pub room_id: RoomId,
/// The transaction ID for this event.
///
/// Clients should generate a unique ID; it will be used by the server to ensure idempotency of requests.
#[ruma_api(path)]
pub txn_id: String,
}
response {
/// The ID of the redacted event.
pub event_id: EventId,
}
}
}
pub mod redact_event;

View File

@ -0,0 +1,38 @@
//! [PUT /_matrix/client/r0/rooms/{roomId}/redact/{eventId}/{txnId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-redact-eventid-txnid)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Redact an event, stripping all information not critical to the event graph integrity.",
method: PUT,
name: "redact_event",
path: "/_matrix/client/r0/rooms/:room_id/redact/:event_id/:txn_id",
rate_limited: false,
requires_authentication: true,
}
request {
/// The ID of the event to redact.
#[ruma_api(path)]
pub event_id: EventId,
/// The reason for the redaction.
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
/// The ID of the room of the event to redact.
#[ruma_api(path)]
pub room_id: RoomId,
/// The transaction ID for this event.
///
/// Clients should generate a unique ID; it will be used by the server to ensure idempotency of requests.
#[ruma_api(path)]
pub txn_id: String,
}
response {
/// The ID of the redacted event.
pub event_id: EventId,
}
}

View File

@ -1,92 +1,3 @@
//! Endpoints for room creation.
/// [POST /_matrix/client/r0/createRoom](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom)
pub mod create_room {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Create a new room.",
method: POST,
name: "create_room",
path: "/_matrix/client/r0/createRoom",
rate_limited: false,
requires_authentication: true,
}
request {
/// Extra keys to be added to the content of the `m.room.create`.
#[serde(skip_serializing_if = "Option::is_none")]
pub creation_content: Option<CreationContent>,
/// A list of user IDs to invite to the room.
///
/// This will tell the server to invite everyone in the list to the newly created room.
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub invite: Vec<UserId>,
/// If this is included, an `m.room.name` event will be sent into the room to indicate
/// the name of the room.
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
/// Convenience parameter for setting various default state events based on a preset.
#[serde(skip_serializing_if = "Option::is_none")]
pub preset: Option<RoomPreset>,
/// The desired room alias local part.
#[serde(skip_serializing_if = "Option::is_none")]
pub room_alias_name: Option<String>,
/// If this is included, an `m.room.topic` event will be sent into the room to indicate
/// the topic for the room.
#[serde(skip_serializing_if = "Option::is_none")]
pub topic: Option<String>,
/// A public visibility indicates that the room will be shown in the published room
/// list. A private visibility will hide the room from the published room list. Rooms
/// default to private visibility if this key is not included.
#[serde(skip_serializing_if = "Option::is_none")]
pub visibility: Option<Visibility>,
// TODO: missing `invite_3pid`, `initial_state`
}
response {
/// The created room's ID.
pub room_id: RoomId,
}
}
/// Extra options to be added to the `m.room.create` event.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CreationContent {
/// Whether users on other servers can join this room.
///
/// Defaults to `true` if key does not exist.
#[serde(rename = "m.federate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub federate: Option<bool>,
}
/// A convenience parameter for setting a few default state events.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum RoomPreset {
/// `join_rules` is set to `invite` and `history_visibility` is set to `shared`.
#[serde(rename = "private_chat")]
PrivateChat,
/// `join_rules` is set to `public` and `history_visibility` is set to `shared`.
#[serde(rename = "public_chat")]
PublicChat,
/// Same as `PrivateChat`, but all initial invitees get the same power level as the creator.
#[serde(rename = "trusted_private_chat")]
TrustedPrivateChat,
}
/// Whether or not a newly created room will be listed in the room directory.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum Visibility {
/// Indicates that the room will be shown in the published room list.
#[serde(rename = "public")]
Public,
/// Indicates that the room from the published room list.
#[serde(rename = "private")]
Private,
}
}
pub mod create_room;

View File

@ -0,0 +1,89 @@
//! [POST /_matrix/client/r0/createRoom](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Create a new room.",
method: POST,
name: "create_room",
path: "/_matrix/client/r0/createRoom",
rate_limited: false,
requires_authentication: true,
}
request {
/// Extra keys to be added to the content of the `m.room.create`.
#[serde(skip_serializing_if = "Option::is_none")]
pub creation_content: Option<CreationContent>,
/// A list of user IDs to invite to the room.
///
/// This will tell the server to invite everyone in the list to the newly created room.
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub invite: Vec<UserId>,
/// If this is included, an `m.room.name` event will be sent into the room to indicate
/// the name of the room.
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
/// Convenience parameter for setting various default state events based on a preset.
#[serde(skip_serializing_if = "Option::is_none")]
pub preset: Option<RoomPreset>,
/// The desired room alias local part.
#[serde(skip_serializing_if = "Option::is_none")]
pub room_alias_name: Option<String>,
/// If this is included, an `m.room.topic` event will be sent into the room to indicate
/// the topic for the room.
#[serde(skip_serializing_if = "Option::is_none")]
pub topic: Option<String>,
/// A public visibility indicates that the room will be shown in the published room
/// list. A private visibility will hide the room from the published room list. Rooms
/// default to private visibility if this key is not included.
#[serde(skip_serializing_if = "Option::is_none")]
pub visibility: Option<Visibility>,
// TODO: missing `invite_3pid`, `initial_state`
}
response {
/// The created room's ID.
pub room_id: RoomId,
}
}
/// Extra options to be added to the `m.room.create` event.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CreationContent {
/// Whether users on other servers can join this room.
///
/// Defaults to `true` if key does not exist.
#[serde(rename = "m.federate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub federate: Option<bool>,
}
/// A convenience parameter for setting a few default state events.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum RoomPreset {
/// `join_rules` is set to `invite` and `history_visibility` is set to `shared`.
#[serde(rename = "private_chat")]
PrivateChat,
/// `join_rules` is set to `public` and `history_visibility` is set to `shared`.
#[serde(rename = "public_chat")]
PublicChat,
/// Same as `PrivateChat`, but all initial invitees get the same power level as the creator.
#[serde(rename = "trusted_private_chat")]
TrustedPrivateChat,
}
/// Whether or not a newly created room will be listed in the room directory.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum Visibility {
/// Indicates that the room will be shown in the published room list.
#[serde(rename = "public")]
Public,
/// Indicates that the room from the published room list.
#[serde(rename = "private")]
Private,
}

View File

@ -1,223 +1,3 @@
//! Endpoints for event searches.
/// [POST /_matrix/client/r0/search](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-search)
pub mod search_events {
use std::collections::HashMap;
use ruma_api_macros::ruma_api;
use ruma_events::collections::all::Event;
use ruma_identifiers::{EventId, RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
use crate::r0::filter::RoomEventFilter;
ruma_api! {
metadata {
description: "Search events.",
method: POST,
name: "search",
path: "/_matrix/client/r0/search",
rate_limited: true,
requires_authentication: true,
}
request {
/// The point to return events from.
///
/// If given, this should be a `next_batch` result from a previous call to this endpoint.
#[ruma_api(query)]
pub next_batch: Option<String>,
/// Describes which categories to search in and their criteria.
pub search_categories: Categories,
}
response {
/// A grouping of search results by category.
pub search_categories: ResultCategories,
}
}
/// Categories of events that can be searched for.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Categories {
/// Criteria for searching a category of events.
#[serde(skip_serializing_if = "Option::is_none")]
pub room_events: Option<Criteria>,
}
/// Criteria for searching a category of events.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Criteria {
/// Configures whether any context for the events returned are included in the response.
#[serde(skip_serializing_if = "Option::is_none")]
pub event_context: Option<EventContext>,
/// A `Filter` to apply to the search.
// TODO: "timeline" key might need to be included.
// See https://github.com/matrix-org/matrix-doc/issues/598.
#[serde(skip_serializing_if = "Option::is_none")]
pub filter: Option<RoomEventFilter>,
/// Requests that the server partitions the result set based on the provided list of keys.
#[serde(skip_serializing_if = "Option::is_none")]
pub groupings: Option<Groupings>,
/// Requests the server return the current state for each room returned.
#[serde(skip_serializing_if = "Option::is_none")]
pub include_state: Option<bool>,
/// The keys to search for. Defaults to all keys.
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub keys: Vec<SearchKeys>,
/// The order in which to search for results.
#[serde(skip_serializing_if = "Option::is_none")]
pub order_by: Option<OrderBy>,
/// The string to search events for.
pub search_term: String,
}
/// Configures whether any context for the events returned are included in the response.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct EventContext {
/// How many events after the result are returned.
pub after_limit: u64,
/// How many events before the result are returned.
pub before_limit: u64,
/// Requests that the server returns the historic profile information for the users that
/// sent the events that were returned.
pub include_profile: bool,
}
/// Context for search results, if requested.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct EventContextResult {
/// Pagination token for the end of the chunk.
pub end: String,
/// Events just after the result.
#[serde(skip_serializing_if = "Option::is_none")]
pub events_after: Option<Vec<Event>>,
/// Events just before the result.
#[serde(skip_serializing_if = "Option::is_none")]
pub events_before: Option<Vec<Event>>,
/// The historic profile information of the users that sent the events returned.
// TODO: Not sure this is right. https://github.com/matrix-org/matrix-doc/issues/773
#[serde(skip_serializing_if = "Option::is_none")]
pub profile_info: Option<HashMap<UserId, UserProfile>>,
/// Pagination token for the start of the chunk.
pub start: String,
}
/// A grouping for partioning the result set.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Grouping {
/// The key within events to use for this grouping.
pub key: GroupingKey,
}
/// The key within events to use for this grouping.
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub enum GroupingKey {
/// `room_id`
#[serde(rename = "room_id")]
RoomId,
/// `sender`
#[serde(rename = "sender")]
Sender,
}
/// Requests that the server partitions the result set based on the provided list of keys.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Groupings {
/// List of groups to request.
pub group_by: Vec<Grouping>,
}
/// The keys to search for.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum SearchKeys {
/// content.body
#[serde(rename = "content.body")]
ContentBody,
/// content.name
#[serde(rename = "content.name")]
ContentName,
/// content.topic
#[serde(rename = "content.topic")]
ContentTopic,
}
/// The order in which to search for results.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum OrderBy {
/// Prioritize events by a numerical ranking of how closely they matched the search
/// criteria.
#[serde(rename = "rank")]
Rank,
/// Prioritize recent events.
#[serde(rename = "recent")]
Recent,
}
/// Categories of events that can be searched for.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ResultCategories {
/// Room event results.
#[serde(skip_serializing_if = "Option::is_none")]
pub room_events: Option<RoomEventResults>,
}
/// Categories of events that can be searched for.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct RoomEventResults {
/// An approximate count of the total number of results found.
pub count: u64,
/// Any groups that were requested.
// TODO: Not sure this is right. https://github.com/matrix-org/matrix-doc/issues/773
pub groups: HashMap<GroupingKey, HashMap<RoomId, ResultGroup>>,
/// Token that can be used to get the next batch of results, by passing as the `next_batch`
/// parameter to the next call. If this field is absent, there are no more results.
#[serde(skip_serializing_if = "Option::is_none")]
pub next_batch: Option<String>,
/// List of results in the requested order.
pub results: Vec<SearchResult>,
/// The current state for every room in the results. This is included if the request had the
/// `include_state` key set with a value of `true`.
#[serde(skip_serializing_if = "Option::is_none")]
// TODO: Major WTF here. https://github.com/matrix-org/matrix-doc/issues/773
pub state: Option<()>,
}
/// A grouping of results, if requested.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ResultGroup {
/// Token that can be used to get the next batch of results in the group, by passing as the
/// `next_batch` parameter to the next call. If this field is absent, there are no more
/// results in this group.
#[serde(skip_serializing_if = "Option::is_none")]
pub next_batch: Option<String>,
/// Key that can be used to order different groups.
pub order: u64,
/// Which results are in this group.
pub results: Vec<EventId>,
}
/// A search result.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SearchResult {
/// Context for result, if requested.
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<EventContextResult>,
/// A number that describes how closely this result matches the search. Higher is closer.
pub rank: f64,
/// The event that matched.
pub result: Event,
}
/// A user profile.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct UserProfile {
/// The user's avatar URL, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>,
/// The user's display name, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub displayname: Option<String>,
}
}
pub mod search_events;

View File

@ -0,0 +1,220 @@
//! [POST /_matrix/client/r0/search](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-search)
use std::collections::HashMap;
use ruma_api_macros::ruma_api;
use ruma_events::collections::all::Event;
use ruma_identifiers::{EventId, RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
use crate::r0::filter::RoomEventFilter;
ruma_api! {
metadata {
description: "Search events.",
method: POST,
name: "search",
path: "/_matrix/client/r0/search",
rate_limited: true,
requires_authentication: true,
}
request {
/// The point to return events from.
///
/// If given, this should be a `next_batch` result from a previous call to this endpoint.
#[ruma_api(query)]
pub next_batch: Option<String>,
/// Describes which categories to search in and their criteria.
pub search_categories: Categories,
}
response {
/// A grouping of search results by category.
pub search_categories: ResultCategories,
}
}
/// Categories of events that can be searched for.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Categories {
/// Criteria for searching a category of events.
#[serde(skip_serializing_if = "Option::is_none")]
pub room_events: Option<Criteria>,
}
/// Criteria for searching a category of events.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Criteria {
/// Configures whether any context for the events returned are included in the response.
#[serde(skip_serializing_if = "Option::is_none")]
pub event_context: Option<EventContext>,
/// A `Filter` to apply to the search.
// TODO: "timeline" key might need to be included.
// See https://github.com/matrix-org/matrix-doc/issues/598.
#[serde(skip_serializing_if = "Option::is_none")]
pub filter: Option<RoomEventFilter>,
/// Requests that the server partitions the result set based on the provided list of keys.
#[serde(skip_serializing_if = "Option::is_none")]
pub groupings: Option<Groupings>,
/// Requests the server return the current state for each room returned.
#[serde(skip_serializing_if = "Option::is_none")]
pub include_state: Option<bool>,
/// The keys to search for. Defaults to all keys.
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub keys: Vec<SearchKeys>,
/// The order in which to search for results.
#[serde(skip_serializing_if = "Option::is_none")]
pub order_by: Option<OrderBy>,
/// The string to search events for.
pub search_term: String,
}
/// Configures whether any context for the events returned are included in the response.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct EventContext {
/// How many events after the result are returned.
pub after_limit: u64,
/// How many events before the result are returned.
pub before_limit: u64,
/// Requests that the server returns the historic profile information for the users that
/// sent the events that were returned.
pub include_profile: bool,
}
/// Context for search results, if requested.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct EventContextResult {
/// Pagination token for the end of the chunk.
pub end: String,
/// Events just after the result.
#[serde(skip_serializing_if = "Option::is_none")]
pub events_after: Option<Vec<Event>>,
/// Events just before the result.
#[serde(skip_serializing_if = "Option::is_none")]
pub events_before: Option<Vec<Event>>,
/// The historic profile information of the users that sent the events returned.
// TODO: Not sure this is right. https://github.com/matrix-org/matrix-doc/issues/773
#[serde(skip_serializing_if = "Option::is_none")]
pub profile_info: Option<HashMap<UserId, UserProfile>>,
/// Pagination token for the start of the chunk.
pub start: String,
}
/// A grouping for partioning the result set.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Grouping {
/// The key within events to use for this grouping.
pub key: GroupingKey,
}
/// The key within events to use for this grouping.
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub enum GroupingKey {
/// `room_id`
#[serde(rename = "room_id")]
RoomId,
/// `sender`
#[serde(rename = "sender")]
Sender,
}
/// Requests that the server partitions the result set based on the provided list of keys.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Groupings {
/// List of groups to request.
pub group_by: Vec<Grouping>,
}
/// The keys to search for.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum SearchKeys {
/// content.body
#[serde(rename = "content.body")]
ContentBody,
/// content.name
#[serde(rename = "content.name")]
ContentName,
/// content.topic
#[serde(rename = "content.topic")]
ContentTopic,
}
/// The order in which to search for results.
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
pub enum OrderBy {
/// Prioritize events by a numerical ranking of how closely they matched the search
/// criteria.
#[serde(rename = "rank")]
Rank,
/// Prioritize recent events.
#[serde(rename = "recent")]
Recent,
}
/// Categories of events that can be searched for.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ResultCategories {
/// Room event results.
#[serde(skip_serializing_if = "Option::is_none")]
pub room_events: Option<RoomEventResults>,
}
/// Categories of events that can be searched for.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct RoomEventResults {
/// An approximate count of the total number of results found.
pub count: u64,
/// Any groups that were requested.
// TODO: Not sure this is right. https://github.com/matrix-org/matrix-doc/issues/773
pub groups: HashMap<GroupingKey, HashMap<RoomId, ResultGroup>>,
/// Token that can be used to get the next batch of results, by passing as the `next_batch`
/// parameter to the next call. If this field is absent, there are no more results.
#[serde(skip_serializing_if = "Option::is_none")]
pub next_batch: Option<String>,
/// List of results in the requested order.
pub results: Vec<SearchResult>,
/// The current state for every room in the results. This is included if the request had the
/// `include_state` key set with a value of `true`.
#[serde(skip_serializing_if = "Option::is_none")]
// TODO: Major WTF here. https://github.com/matrix-org/matrix-doc/issues/773
pub state: Option<()>,
}
/// A grouping of results, if requested.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ResultGroup {
/// Token that can be used to get the next batch of results in the group, by passing as the
/// `next_batch` parameter to the next call. If this field is absent, there are no more
/// results in this group.
#[serde(skip_serializing_if = "Option::is_none")]
pub next_batch: Option<String>,
/// Key that can be used to order different groups.
pub order: u64,
/// Which results are in this group.
pub results: Vec<EventId>,
}
/// A search result.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SearchResult {
/// Context for result, if requested.
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<EventContextResult>,
/// A number that describes how closely this result matches the search. Higher is closer.
pub rank: f64,
/// The event that matched.
pub result: Event,
}
/// A user profile.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct UserProfile {
/// The user's avatar URL, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>,
/// The user's display name, if set.
#[serde(skip_serializing_if = "Option::is_none")]
pub displayname: Option<String>,
}

View File

@ -1,121 +1,5 @@
//! Endpoints for sending events.
/// [PUT /_matrix/client/r0/rooms/{roomId}/state/{eventType}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-state-eventtype)
pub mod send_state_event_for_empty_key {
use ruma_api_macros::ruma_api;
use ruma_events::EventType;
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
ruma_api! {
metadata {
description: "Send a state event to a room associated with the empty state key.",
method: PUT,
name: "send_state_event_for_empty_key",
path: "/_matrix/client/r0/rooms/:room_id/state/:event_type",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to set the state in.
#[ruma_api(path)]
pub room_id: RoomId,
/// The type of event to send.
#[ruma_api(path)]
pub event_type: EventType,
/// The event's content.
#[ruma_api(body)]
pub data: Value,
}
response {
/// A unique identifier for the event.
pub event_id: EventId,
}
}
}
/// [PUT /_matrix/client/r0/rooms/{roomId}/state/{eventType}/{stateKey}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-state-eventtype-statekey)
pub mod send_state_event_for_key {
use ruma_api_macros::ruma_api;
use ruma_events::EventType;
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
ruma_api! {
metadata {
description: "Send a state event to a room associated with a given state key.",
method: PUT,
name: "send_state_event_for_key",
path: "/_matrix/client/r0/rooms/:room_id/state/:event_type/:state_key",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to set the state in.
#[ruma_api(path)]
pub room_id: RoomId,
/// The type of event to send.
#[ruma_api(path)]
pub event_type: EventType,
/// The state_key for the state to send. Defaults to the empty string.
#[ruma_api(path)]
pub state_key: String,
/// The event's content.
#[ruma_api(body)]
pub data: Value,
}
response {
/// A unique identifier for the event.
pub event_id: EventId,
}
}
}
/// [PUT /_matrix/client/r0/rooms/{roomId}/send/{eventType}/{txnId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid)
pub mod send_message_event {
use ruma_api_macros::ruma_api;
use ruma_events::{room::message::MessageEventContent, EventType};
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Send a message event to a room.",
method: PUT,
name: "send_message_event",
path: "/_matrix/client/r0/rooms/:room_id/send/:event_type/:txn_id",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to send the event to.
#[ruma_api(path)]
pub room_id: RoomId,
/// The type of event to send.
#[ruma_api(path)]
pub event_type: EventType,
/// The transaction ID for this event.
///
/// Clients should generate an ID unique across requests with the
/// same access token; it will be used by the server to ensure
/// idempotency of requests.
#[ruma_api(path)]
pub txn_id: String,
/// The event's content.
#[ruma_api(body)]
pub data: MessageEventContent,
}
response {
/// A unique identifier for the event.
pub event_id: EventId,
}
}
}
pub mod send_message_event;
pub mod send_state_event_for_empty_key;
pub mod send_state_event_for_key;

View File

@ -0,0 +1,41 @@
//! [PUT /_matrix/client/r0/rooms/{roomId}/send/{eventType}/{txnId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid)
use ruma_api_macros::ruma_api;
use ruma_events::{room::message::MessageEventContent, EventType};
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Send a message event to a room.",
method: PUT,
name: "send_message_event",
path: "/_matrix/client/r0/rooms/:room_id/send/:event_type/:txn_id",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to send the event to.
#[ruma_api(path)]
pub room_id: RoomId,
/// The type of event to send.
#[ruma_api(path)]
pub event_type: EventType,
/// The transaction ID for this event.
///
/// Clients should generate an ID unique across requests with the
/// same access token; it will be used by the server to ensure
/// idempotency of requests.
#[ruma_api(path)]
pub txn_id: String,
/// The event's content.
#[ruma_api(body)]
pub data: MessageEventContent,
}
response {
/// A unique identifier for the event.
pub event_id: EventId,
}
}

View File

@ -0,0 +1,35 @@
//! [PUT /_matrix/client/r0/rooms/{roomId}/state/{eventType}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-state-eventtype)
use ruma_api_macros::ruma_api;
use ruma_events::EventType;
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
ruma_api! {
metadata {
description: "Send a state event to a room associated with the empty state key.",
method: PUT,
name: "send_state_event_for_empty_key",
path: "/_matrix/client/r0/rooms/:room_id/state/:event_type",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to set the state in.
#[ruma_api(path)]
pub room_id: RoomId,
/// The type of event to send.
#[ruma_api(path)]
pub event_type: EventType,
/// The event's content.
#[ruma_api(body)]
pub data: Value,
}
response {
/// A unique identifier for the event.
pub event_id: EventId,
}
}

View File

@ -0,0 +1,38 @@
//! [PUT /_matrix/client/r0/rooms/{roomId}/state/{eventType}/{stateKey}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-state-eventtype-statekey)
use ruma_api_macros::ruma_api;
use ruma_events::EventType;
use ruma_identifiers::{EventId, RoomId};
use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
ruma_api! {
metadata {
description: "Send a state event to a room associated with a given state key.",
method: PUT,
name: "send_state_event_for_key",
path: "/_matrix/client/r0/rooms/:room_id/state/:event_type/:state_key",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to set the state in.
#[ruma_api(path)]
pub room_id: RoomId,
/// The type of event to send.
#[ruma_api(path)]
pub event_type: EventType,
/// The state_key for the state to send. Defaults to the empty string.
#[ruma_api(path)]
pub state_key: String,
/// The event's content.
#[ruma_api(body)]
pub data: Value,
}
response {
/// A unique identifier for the event.
pub event_id: EventId,
}
}

View File

@ -1,59 +1,3 @@
//! Endpoints for server administration.
/// [GET /_matrix/client/r0/admin/whois/{userId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-admin-whois-userid)
pub mod get_user_info {
use std::collections::HashMap;
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get information about a particular user.",
method: GET,
name: "get_user_info",
path: "/_matrix/client/r0/admin/whois/:user_id",
rate_limited: false,
requires_authentication: true,
}
request {
/// The user to look up.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The Matrix user ID of the user.
pub user_id: UserId,
/// A map of the user's device identifiers to information about that device.
pub devices: HashMap<String, DeviceInfo>,
}
}
/// Information about a connection in a user session.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ConnectionInfo {
/// Most recently seen IP address of the session.
pub ip: String,
/// Unix timestamp that the session was last active.
pub last_seen: u64,
/// User agent string last seen in the session.
pub user_agent: String,
}
/// Information about a user's device.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct DeviceInfo {
/// A list of user sessions on this device.
pub sessions: Vec<SessionInfo>,
}
/// Information about a user session.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SessionInfo {
/// A list of connections in this session.
pub connections: Vec<ConnectionInfo>,
}
}
pub mod get_user_info;

View File

@ -0,0 +1,56 @@
//! [GET /_matrix/client/r0/admin/whois/{userId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-admin-whois-userid)
use std::collections::HashMap;
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get information about a particular user.",
method: GET,
name: "get_user_info",
path: "/_matrix/client/r0/admin/whois/:user_id",
rate_limited: false,
requires_authentication: true,
}
request {
/// The user to look up.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The Matrix user ID of the user.
pub user_id: UserId,
/// A map of the user's device identifiers to information about that device.
pub devices: HashMap<String, DeviceInfo>,
}
}
/// Information about a connection in a user session.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ConnectionInfo {
/// Most recently seen IP address of the session.
pub ip: String,
/// Unix timestamp that the session was last active.
pub last_seen: u64,
/// User agent string last seen in the session.
pub user_agent: String,
}
/// Information about a user's device.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct DeviceInfo {
/// A list of user sessions on this device.
pub sessions: Vec<SessionInfo>,
}
/// Information about a user session.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct SessionInfo {
/// A list of connections in this session.
pub connections: Vec<ConnectionInfo>,
}

View File

@ -1,92 +1,4 @@
//! Endpoints for user session management.
/// [POST /_matrix/client/r0/login](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-login)
pub mod login {
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Login to the homeserver.",
method: POST,
name: "login",
path: "/_matrix/client/r0/login",
rate_limited: true,
requires_authentication: false,
}
request {
/// The user's password.
pub password: String,
/// When logging in using a third party identifier, the medium of the identifier.
#[serde(skip_serializing_if = "Option::is_none")]
pub medium: Option<Medium>,
/// The authentication mechanism.
#[serde(rename = "type")]
pub login_type: LoginType,
/// The fully qualified user ID or just local part of the user ID.
pub user: String,
/// Third party identifier for the user.
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<String>,
/// ID of the client device
#[serde(skip_serializing_if = "Option::is_none")]
pub device_id: Option<String>,
}
response {
/// An access token for the account.
pub access_token: String,
/// The hostname of the homeserver on which the account has been registered.
pub home_server: String,
/// A refresh token may be exchanged for a new access token using the /tokenrefresh API
/// endpoint.
#[serde(skip_serializing_if = "Option::is_none")]
pub refresh_token: Option<String>,
/// The fully-qualified Matrix ID that has been registered.
pub user_id: UserId,
/// ID of the logged-in device.
///
/// Will be the same as the corresponging parameter in the request, if one was
/// specified.
pub device_id: String,
}
}
/// The medium of a third party identifier.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum Medium {
/// An email address.
#[serde(rename = "email")]
Email,
}
/// The authentication mechanism.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum LoginType {
/// A password is supplied to authenticate.
#[serde(rename = "m.login.password")]
Password,
}
}
/// [POST /_matrix/client/r0/logout](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-logout)
pub mod logout {
use ruma_api_macros::ruma_api;
ruma_api! {
metadata {
description: "Log out of the homeserver.",
method: POST,
name: "logout",
path: "/_matrix/client/r0/logout",
rate_limited: false,
requires_authentication: true,
}
request {}
response {}
}
}
pub mod login;
pub mod logout;

69
src/r0/session/login.rs Normal file
View File

@ -0,0 +1,69 @@
//! [POST /_matrix/client/r0/login](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-login)
use ruma_api_macros::ruma_api;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Login to the homeserver.",
method: POST,
name: "login",
path: "/_matrix/client/r0/login",
rate_limited: true,
requires_authentication: false,
}
request {
/// The user's password.
pub password: String,
/// When logging in using a third party identifier, the medium of the identifier.
#[serde(skip_serializing_if = "Option::is_none")]
pub medium: Option<Medium>,
/// The authentication mechanism.
#[serde(rename = "type")]
pub login_type: LoginType,
/// The fully qualified user ID or just local part of the user ID.
pub user: String,
/// Third party identifier for the user.
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<String>,
/// ID of the client device
#[serde(skip_serializing_if = "Option::is_none")]
pub device_id: Option<String>,
}
response {
/// An access token for the account.
pub access_token: String,
/// The hostname of the homeserver on which the account has been registered.
pub home_server: String,
/// A refresh token may be exchanged for a new access token using the /tokenrefresh API
/// endpoint.
#[serde(skip_serializing_if = "Option::is_none")]
pub refresh_token: Option<String>,
/// The fully-qualified Matrix ID that has been registered.
pub user_id: UserId,
/// ID of the logged-in device.
///
/// Will be the same as the corresponging parameter in the request, if one was
/// specified.
pub device_id: String,
}
}
/// The medium of a third party identifier.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum Medium {
/// An email address.
#[serde(rename = "email")]
Email,
}
/// The authentication mechanism.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum LoginType {
/// A password is supplied to authenticate.
#[serde(rename = "m.login.password")]
Password,
}

18
src/r0/session/logout.rs Normal file
View File

@ -0,0 +1,18 @@
//! [POST /_matrix/client/r0/logout](https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-logout)
use ruma_api_macros::ruma_api;
ruma_api! {
metadata {
description: "Log out of the homeserver.",
method: POST,
name: "logout",
path: "/_matrix/client/r0/logout",
rate_limited: false,
requires_authentication: true,
}
request {}
response {}
}

View File

@ -1,381 +1,8 @@
//! Endpoints for getting and synchronizing events.
/// [GET /_matrix/client/r0/rooms/{roomId}/state](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-state)
pub mod get_state_events {
use ruma_api_macros::ruma_api;
use ruma_events::collections::only;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get state events for a room.",
method: GET,
name: "get_state_events",
path: "/_matrix/client/r0/rooms/:room_id/state",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to look up the state for.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {
/// If the user is a member of the room this will be the current state of the room as a
/// list of events. If the user has left the room then this will be the state of the
/// room when they left as a list of events.
#[ruma_api(body)]
pub room_state: Vec<only::StateEvent>,
}
}
}
/// [GET /_matrix/client/r0/rooms/{roomId}/state/{eventType}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-state-eventtype)
pub mod get_state_events_for_empty_key {
use ruma_api_macros::ruma_api;
use ruma_events::EventType;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get state events of a given type associated with the empty key.",
method: GET,
name: "get_state_events_for_empty_key",
path: "/_matrix/client/r0/rooms/:room_id/state/:event_type",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to look up the state for.
#[ruma_api(path)]
pub room_id: RoomId,
/// The type of state to look up.
#[ruma_api(path)]
pub event_type: EventType,
}
response {
/// The content of the state event.
#[ruma_api(body)]
pub content: ::serde_json::Value,
}
}
}
/// [GET /_matrix/client/r0/rooms/{roomId}/state/{eventType}/{stateKey}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-state-eventtype-state-key)
pub mod get_state_events_for_key {
use ruma_api_macros::ruma_api;
use ruma_events::EventType;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get state events associated with a given key.",
method: GET,
name: "get_state_events_for_key",
path: "/_matrix/client/r0/rooms/:room_id/state/:event_type/:state_key",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to look up the state for.
#[ruma_api(path)]
pub room_id: RoomId,
/// The type of state to look up.
#[ruma_api(path)]
pub event_type: EventType,
/// The key of the state to look up.
#[ruma_api(path)]
pub state_key: String,
}
response {
/// The content of the state event.
#[ruma_api(body)]
pub content: ::serde_json::Value,
}
}
}
/// [GET /_matrix/client/r0/rooms/{roomId}/members](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-members)
pub mod get_member_events {
use ruma_api_macros::ruma_api;
use ruma_events::room::member::MemberEvent;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get membership events for a room.",
method: GET,
name: "get_member_events",
path: "/_matrix/client/r0/rooms/:room_id/members",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to get the member events for.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {
/// A list of member events.
pub chunk: Vec<MemberEvent>
}
}
}
/// [GET /_matrix/client/r0/rooms/{roomId}/messages](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-messages)
pub mod get_message_events {
use ruma_api_macros::ruma_api;
use ruma_events::collections::only;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get message events for a room.",
method: GET,
name: "get_message_events",
path: "/_matrix/client/r0/rooms/:room_id/messages",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to get events from.
#[ruma_api(path)]
pub room_id: RoomId,
/// The token to start returning events from.
///
/// This token can be obtained from a
/// prev_batch token returned for each room by the sync API, or from a start or end token
/// returned by a previous request to this endpoint.
pub from: String,
/// The token to stop returning events at.
///
/// This token can be obtained from a prev_batch
/// token returned for each room by the sync endpoint, or from a start or end token returned
/// by a previous request to this endpoint.
#[serde(skip_serializing_if = "Option::is_none")]
pub to: Option<String>,
/// The direction to return events from.
pub dir: Direction,
/// The maximum number of events to return.
///
/// Default: 10.
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u64>,
}
response {
/// The token the pagination starts from.
pub start: String,
/// A list of room events.
pub chunk: Vec<only::RoomEvent>,
/// The token the pagination ends at.
pub end: String,
}
}
/// The direction to return events from.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum Direction {
/// Return events backwards in time from the requested `from` token.
#[serde(rename = "b")]
Backward,
/// Return events forwards in time from the requested `from` token.
#[serde(rename = "f")]
Forward,
}
}
/// [GET /_matrix/client/r0/sync](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-sync)
pub mod sync_events {
use std::collections::HashMap;
use ruma_api_macros::ruma_api;
use ruma_events::{
collections::{all, only},
stripped,
};
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
use crate::r0::filter::FilterDefinition;
ruma_api! {
metadata {
description: "Get all new events from all rooms since the last sync or a given point of time.",
method: GET,
name: "sync",
path: "/_matrix/client/r0/sync",
rate_limited: false,
requires_authentication: true,
}
request {
/// A filter represented either as its full JSON definition or the ID of a saved filter.
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub filter: Option<Filter>,
/// A point in time to continue a sync from.
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub since: Option<String>,
/// Controls whether to include the full state for all rooms the user is a member of.
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub full_state: Option<bool>,
/// Controls whether the client is automatically marked as online by polling this API.
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub set_presence: Option<SetPresence>,
/// The maximum time to poll in milliseconds before returning this request.
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub timeout: Option<u64>,
}
response {
/// The batch token to supply in the `since` param of the next `/sync` request.
pub next_batch: String,
/// Updates to rooms.
pub rooms: Rooms,
/// Updates to the presence status of other users.
pub presence: Presence,
}
}
/// Whether to set presence or not during sync.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum SetPresence {
/// Do not set the presence of the user calling this API.
#[serde(rename = "offline")]
Offline,
}
/// A filter represented either as its full JSON definition or the ID of a saved filter.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(untagged)]
pub enum Filter {
/// A complete filter definition serialized to JSON.
FilterDefinition(FilterDefinition),
/// The ID of a filter saved on the server.
FilterId(String),
}
/// Updates to rooms.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Rooms {
/// The rooms that the user has left or been banned from.
pub leave: HashMap<RoomId, LeftRoom>,
/// The rooms that the user has joined.
pub join: HashMap<RoomId, JoinedRoom>,
/// The rooms that the user has been invited to.
pub invite: HashMap<RoomId, InvitedRoom>,
}
/// Historical updates to left rooms.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct LeftRoom {
/// The timeline of messages and state changes in the room up to the point when the user
/// left.
pub timeline: Timeline,
/// The state updates for the room up to the start of the timeline.
pub state: State,
}
/// Updates to joined rooms.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct JoinedRoom {
/// Counts of unread notifications for this room.
pub unread_notifications: UnreadNotificationsCount,
/// The timeline of messages and state changes in the room.
pub timeline: Timeline,
/// Updates to the state, between the time indicated by the `since` parameter, and the start
/// of the `timeline` (or all state up to the start of the `timeline`, if `since` is not
/// given, or `full_state` is true).
pub state: State,
/// The private data that this user has attached to this room.
pub account_data: AccountData,
/// The ephemeral events in the room that aren't recorded in the timeline or state of the
/// room. e.g. typing.
pub ephemeral: Ephemeral,
}
/// unread notifications count
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct UnreadNotificationsCount {
/// The number of unread notifications for this room with the highlight flag set.
#[serde(skip_serializing_if = "Option::is_none")]
pub highlight_count: Option<u64>,
/// The total number of unread notifications for this room.
#[serde(skip_serializing_if = "Option::is_none")]
pub notification_count: Option<u64>,
}
/// Events in the room.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Timeline {
/// True if the number of events returned was limited by the `limit` on the filter.
pub limited: bool,
/// A token that can be supplied to to the `from` parameter of the
/// `/rooms/{roomId}/messages` endpoint.
pub prev_batch: String,
/// A list of events.
pub events: Vec<all::RoomEvent>,
}
/// State events in the room.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct State {
/// A list of state events.
pub events: Vec<only::StateEvent>,
}
/// The private data that this user has attached to this room.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct AccountData {
/// A list of events.
pub events: Vec<only::Event>,
}
/// Ephemeral events not recorded in the timeline or state of the room.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Ephemeral {
/// A list of events.
pub events: Vec<only::Event>,
}
/// Updates to the rooms that the user has been invited to.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct InvitedRoom {
/// The state of a room that the user has been invited to.
pub invite_state: InviteState,
}
/// The state of a room that the user has been invited to.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct InviteState {
/// A list of state events.
pub events: Vec<stripped::StrippedState>,
}
/// Updates to the presence status of other users.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Presence {
/// A list of events.
pub events: Vec<only::Event>,
}
}
pub mod get_member_events;
pub mod get_message_events;
pub mod get_state_events;
pub mod get_state_events_for_empty_key;
pub mod get_state_events_for_key;
pub mod sync_events;

View File

@ -0,0 +1,28 @@
//! [GET /_matrix/client/r0/rooms/{roomId}/members](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-members)
use ruma_api_macros::ruma_api;
use ruma_events::room::member::MemberEvent;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get membership events for a room.",
method: GET,
name: "get_member_events",
path: "/_matrix/client/r0/rooms/:room_id/members",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to get the member events for.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {
/// A list of member events.
pub chunk: Vec<MemberEvent>
}
}

View File

@ -0,0 +1,63 @@
//! [GET /_matrix/client/r0/rooms/{roomId}/messages](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-messages)
use ruma_api_macros::ruma_api;
use ruma_events::collections::only;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get message events for a room.",
method: GET,
name: "get_message_events",
path: "/_matrix/client/r0/rooms/:room_id/messages",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to get events from.
#[ruma_api(path)]
pub room_id: RoomId,
/// The token to start returning events from.
///
/// This token can be obtained from a
/// prev_batch token returned for each room by the sync API, or from a start or end token
/// returned by a previous request to this endpoint.
pub from: String,
/// The token to stop returning events at.
///
/// This token can be obtained from a prev_batch
/// token returned for each room by the sync endpoint, or from a start or end token returned
/// by a previous request to this endpoint.
#[serde(skip_serializing_if = "Option::is_none")]
pub to: Option<String>,
/// The direction to return events from.
pub dir: Direction,
/// The maximum number of events to return.
///
/// Default: 10.
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u64>,
}
response {
/// The token the pagination starts from.
pub start: String,
/// A list of room events.
pub chunk: Vec<only::RoomEvent>,
/// The token the pagination ends at.
pub end: String,
}
}
/// The direction to return events from.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum Direction {
/// Return events backwards in time from the requested `from` token.
#[serde(rename = "b")]
Backward,
/// Return events forwards in time from the requested `from` token.
#[serde(rename = "f")]
Forward,
}

View File

@ -0,0 +1,31 @@
//! [GET /_matrix/client/r0/rooms/{roomId}/state](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-state)
use ruma_api_macros::ruma_api;
use ruma_events::collections::only;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get state events for a room.",
method: GET,
name: "get_state_events",
path: "/_matrix/client/r0/rooms/:room_id/state",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to look up the state for.
#[ruma_api(path)]
pub room_id: RoomId,
}
response {
/// If the user is a member of the room this will be the current state of the room as a
/// list of events. If the user has left the room then this will be the state of the
/// room when they left as a list of events.
#[ruma_api(body)]
pub room_state: Vec<only::StateEvent>,
}
}

View File

@ -0,0 +1,32 @@
//! [GET /_matrix/client/r0/rooms/{roomId}/state/{eventType}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-state-eventtype)
use ruma_api_macros::ruma_api;
use ruma_events::EventType;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get state events of a given type associated with the empty key.",
method: GET,
name: "get_state_events_for_empty_key",
path: "/_matrix/client/r0/rooms/:room_id/state/:event_type",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to look up the state for.
#[ruma_api(path)]
pub room_id: RoomId,
/// The type of state to look up.
#[ruma_api(path)]
pub event_type: EventType,
}
response {
/// The content of the state event.
#[ruma_api(body)]
pub content: ::serde_json::Value,
}
}

View File

@ -0,0 +1,35 @@
//! [GET /_matrix/client/r0/rooms/{roomId}/state/{eventType}/{stateKey}](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-state-eventtype-state-key)
use ruma_api_macros::ruma_api;
use ruma_events::EventType;
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get state events associated with a given key.",
method: GET,
name: "get_state_events_for_key",
path: "/_matrix/client/r0/rooms/:room_id/state/:event_type/:state_key",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to look up the state for.
#[ruma_api(path)]
pub room_id: RoomId,
/// The type of state to look up.
#[ruma_api(path)]
pub event_type: EventType,
/// The key of the state to look up.
#[ruma_api(path)]
pub state_key: String,
}
response {
/// The content of the state event.
#[ruma_api(body)]
pub content: ::serde_json::Value,
}
}

179
src/r0/sync/sync_events.rs Normal file
View File

@ -0,0 +1,179 @@
//! [GET /_matrix/client/r0/sync](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-sync)
use std::collections::HashMap;
use ruma_api_macros::ruma_api;
use ruma_events::{
collections::{all, only},
stripped,
};
use ruma_identifiers::RoomId;
use serde_derive::{Deserialize, Serialize};
use crate::r0::filter::FilterDefinition;
ruma_api! {
metadata {
description: "Get all new events from all rooms since the last sync or a given point of time.",
method: GET,
name: "sync",
path: "/_matrix/client/r0/sync",
rate_limited: false,
requires_authentication: true,
}
request {
/// A filter represented either as its full JSON definition or the ID of a saved filter.
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub filter: Option<Filter>,
/// A point in time to continue a sync from.
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub since: Option<String>,
/// Controls whether to include the full state for all rooms the user is a member of.
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub full_state: Option<bool>,
/// Controls whether the client is automatically marked as online by polling this API.
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub set_presence: Option<SetPresence>,
/// The maximum time to poll in milliseconds before returning this request.
#[serde(skip_serializing_if = "Option::is_none")]
#[ruma_api(query)]
pub timeout: Option<u64>,
}
response {
/// The batch token to supply in the `since` param of the next `/sync` request.
pub next_batch: String,
/// Updates to rooms.
pub rooms: Rooms,
/// Updates to the presence status of other users.
pub presence: Presence,
}
}
/// Whether to set presence or not during sync.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum SetPresence {
/// Do not set the presence of the user calling this API.
#[serde(rename = "offline")]
Offline,
}
/// A filter represented either as its full JSON definition or the ID of a saved filter.
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(untagged)]
pub enum Filter {
/// A complete filter definition serialized to JSON.
FilterDefinition(FilterDefinition),
/// The ID of a filter saved on the server.
FilterId(String),
}
/// Updates to rooms.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Rooms {
/// The rooms that the user has left or been banned from.
pub leave: HashMap<RoomId, LeftRoom>,
/// The rooms that the user has joined.
pub join: HashMap<RoomId, JoinedRoom>,
/// The rooms that the user has been invited to.
pub invite: HashMap<RoomId, InvitedRoom>,
}
/// Historical updates to left rooms.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct LeftRoom {
/// The timeline of messages and state changes in the room up to the point when the user
/// left.
pub timeline: Timeline,
/// The state updates for the room up to the start of the timeline.
pub state: State,
}
/// Updates to joined rooms.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct JoinedRoom {
/// Counts of unread notifications for this room.
pub unread_notifications: UnreadNotificationsCount,
/// The timeline of messages and state changes in the room.
pub timeline: Timeline,
/// Updates to the state, between the time indicated by the `since` parameter, and the start
/// of the `timeline` (or all state up to the start of the `timeline`, if `since` is not
/// given, or `full_state` is true).
pub state: State,
/// The private data that this user has attached to this room.
pub account_data: AccountData,
/// The ephemeral events in the room that aren't recorded in the timeline or state of the
/// room. e.g. typing.
pub ephemeral: Ephemeral,
}
/// unread notifications count
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct UnreadNotificationsCount {
/// The number of unread notifications for this room with the highlight flag set.
#[serde(skip_serializing_if = "Option::is_none")]
pub highlight_count: Option<u64>,
/// The total number of unread notifications for this room.
#[serde(skip_serializing_if = "Option::is_none")]
pub notification_count: Option<u64>,
}
/// Events in the room.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Timeline {
/// True if the number of events returned was limited by the `limit` on the filter.
pub limited: bool,
/// A token that can be supplied to to the `from` parameter of the
/// `/rooms/{roomId}/messages` endpoint.
pub prev_batch: String,
/// A list of events.
pub events: Vec<all::RoomEvent>,
}
/// State events in the room.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct State {
/// A list of state events.
pub events: Vec<only::StateEvent>,
}
/// The private data that this user has attached to this room.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct AccountData {
/// A list of events.
pub events: Vec<only::Event>,
}
/// Ephemeral events not recorded in the timeline or state of the room.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Ephemeral {
/// A list of events.
pub events: Vec<only::Event>,
}
/// Updates to the rooms that the user has been invited to.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct InvitedRoom {
/// The state of a room that the user has been invited to.
pub invite_state: InviteState,
}
/// The state of a room that the user has been invited to.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct InviteState {
/// A list of state events.
pub events: Vec<stripped::StrippedState>,
}
/// Updates to the presence status of other users.
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Presence {
/// A list of events.
pub events: Vec<only::Event>,
}

View File

@ -1,102 +1,5 @@
//! Endpoints for tagging rooms.
/// [PUT /_matrix/client/r0/user/{userId}/rooms/{roomId}/tags/{tag}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-user-userid-rooms-roomid-tags-tag)
pub mod create_tag {
use ruma_api_macros::ruma_api;
use ruma_events::tag::TagInfo;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Add a new tag to a room.",
method: PUT,
name: "create_tag",
path: "/_matrix/client/r0/user/:user_id/rooms/:room_id/tags/:tag",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to tag.
#[ruma_api(path)]
pub room_id: RoomId,
/// The name of the tag to create.
#[ruma_api(path)]
pub tag: String,
/// Info about the tag.
#[ruma_api(body)]
pub tag_info: TagInfo,
/// The ID of the user creating the tag.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}
}
/// [GET /_matrix/client/r0/user/{userId}/rooms/{roomId}/tags](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-user-userid-rooms-roomid-tags)
pub mod get_tags {
use ruma_api_macros::ruma_api;
use ruma_events::tag::TagEventContent;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the tags associated with a room.",
method: GET,
name: "get_tags",
path: "/_matrix/client/r0/user/:user_id/rooms/:room_id/tags",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room from which tags will be retrieved.
#[ruma_api(path)]
pub room_id: RoomId,
/// The user whose tags will be retrieved.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The user's tags for the room.
pub tags: TagEventContent,
}
}
}
/// [DELETE /_matrix/client/r0/user/{userId}/rooms/{roomId}/tags/{tag}](https://matrix.org/docs/spec/client_server/r0.2.0.html#delete-matrix-client-r0-user-userid-rooms-roomid-tags-tag)
pub mod delete_tag {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Remove a tag from a room.",
method: DELETE,
name: "delete_tag",
path: "/_matrix/client/r0/user/:user_id/rooms/:room_id/tags/:tag",
rate_limited: false,
requires_authentication: true,
}
request {
/// The tagged room.
#[ruma_api(path)]
pub room_id: RoomId,
/// The name of the tag to delete.
#[ruma_api(path)]
pub tag: String,
/// The user whose tag will be deleted.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}
}
pub mod create_tag;
pub mod delete_tag;
pub mod get_tags;

34
src/r0/tag/create_tag.rs Normal file
View File

@ -0,0 +1,34 @@
//! [PUT /_matrix/client/r0/user/{userId}/rooms/{roomId}/tags/{tag}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-user-userid-rooms-roomid-tags-tag)
use ruma_api_macros::ruma_api;
use ruma_events::tag::TagInfo;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Add a new tag to a room.",
method: PUT,
name: "create_tag",
path: "/_matrix/client/r0/user/:user_id/rooms/:room_id/tags/:tag",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room to tag.
#[ruma_api(path)]
pub room_id: RoomId,
/// The name of the tag to create.
#[ruma_api(path)]
pub tag: String,
/// Info about the tag.
#[ruma_api(body)]
pub tag_info: TagInfo,
/// The ID of the user creating the tag.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}

30
src/r0/tag/delete_tag.rs Normal file
View File

@ -0,0 +1,30 @@
//! [DELETE /_matrix/client/r0/user/{userId}/rooms/{roomId}/tags/{tag}](https://matrix.org/docs/spec/client_server/r0.2.0.html#delete-matrix-client-r0-user-userid-rooms-roomid-tags-tag)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Remove a tag from a room.",
method: DELETE,
name: "delete_tag",
path: "/_matrix/client/r0/user/:user_id/rooms/:room_id/tags/:tag",
rate_limited: false,
requires_authentication: true,
}
request {
/// The tagged room.
#[ruma_api(path)]
pub room_id: RoomId,
/// The name of the tag to delete.
#[ruma_api(path)]
pub tag: String,
/// The user whose tag will be deleted.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}

31
src/r0/tag/get_tags.rs Normal file
View File

@ -0,0 +1,31 @@
//! [GET /_matrix/client/r0/user/{userId}/rooms/{roomId}/tags](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-user-userid-rooms-roomid-tags)
use ruma_api_macros::ruma_api;
use ruma_events::tag::TagEventContent;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the tags associated with a room.",
method: GET,
name: "get_tags",
path: "/_matrix/client/r0/user/:user_id/rooms/:room_id/tags",
rate_limited: false,
requires_authentication: true,
}
request {
/// The room from which tags will be retrieved.
#[ruma_api(path)]
pub room_id: RoomId,
/// The user whose tags will be retrieved.
#[ruma_api(path)]
pub user_id: UserId,
}
response {
/// The user's tags for the room.
pub tags: TagEventContent,
}
}

View File

@ -1,35 +1,3 @@
//! Endpoints for typing notifications.
/// [PUT /_matrix/client/r0/rooms/{roomId}/typing/{userId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-typing-userid)
pub mod create_typing_event {
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
method: PUT,
path: "/_matrix/client/r0/rooms/:room_id/typing/:user_id",
name: "create_typing_event",
description: "Send a typing event to a room.",
requires_authentication: true,
rate_limited: true,
}
request {
/// The room in which the user is typing.
#[ruma_api(path)]
pub room_id: RoomId,
/// The length of time in milliseconds to mark this user as typing.
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout: Option<u64>,
/// Whether the user is typing or not. If `false`, the `timeout` key can be omitted.
pub typing: bool,
/// The user who has started to type.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}
}
pub mod create_typing_event;

View File

@ -0,0 +1,32 @@
//! [PUT /_matrix/client/r0/rooms/{roomId}/typing/{userId}](https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-typing-userid)
use ruma_api_macros::ruma_api;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
method: PUT,
path: "/_matrix/client/r0/rooms/:room_id/typing/:user_id",
name: "create_typing_event",
description: "Send a typing event to a room.",
requires_authentication: true,
rate_limited: true,
}
request {
/// The room in which the user is typing.
#[ruma_api(path)]
pub room_id: RoomId,
/// The length of time in milliseconds to mark this user as typing.
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout: Option<u64>,
/// Whether the user is typing or not. If `false`, the `timeout` key can be omitted.
pub typing: bool,
/// The user who has started to type.
#[ruma_api(path)]
pub user_id: UserId,
}
response {}
}

View File

@ -1,31 +1,3 @@
//! Endpoints for Voice over IP.
/// [GET /_matrix/client/r0/voip/turnServer](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-voip-turnserver)
pub mod get_turn_server_info {
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get credentials for the client to use when initiating VoIP calls.",
method: GET,
name: "turn_server_info",
path: "_matrix/client/r0/voip/turnServer",
rate_limited: true,
requires_authentication: true,
}
request {}
response {
/// The password to use.
pub password: String,
/// The time-to-live in seconds.
pub ttl: u64,
/// A list of TURN URIs.
pub uris: Vec<String>,
/// The username to use.
pub username: String,
}
}
}
pub mod get_turn_server_info;

View File

@ -0,0 +1,28 @@
//! [GET /_matrix/client/r0/voip/turnServer](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-voip-turnserver)
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get credentials for the client to use when initiating VoIP calls.",
method: GET,
name: "turn_server_info",
path: "_matrix/client/r0/voip/turnServer",
rate_limited: true,
requires_authentication: true,
}
request {}
response {
/// The password to use.
pub password: String,
/// The time-to-live in seconds.
pub ttl: u64,
/// A list of TURN URIs.
pub uris: Vec<String>,
/// The username to use.
pub username: String,
}
}

View File

@ -1,25 +1,3 @@
//! Endpoints that cannot change with new versions of the Matrix specification.
/// [GET /_matrix/client/versions](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-versions)
pub mod get_supported_versions {
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the versions of the client-server API supported by this homeserver.",
method: GET,
name: "api_versions",
path: "/_matrix/client/versions",
rate_limited: false,
requires_authentication: false,
}
request {}
response {
/// A list of Matrix client API protocol versions supported by the homeserver.
pub versions: Vec<String>,
}
}
}
pub mod get_supported_versions;

View File

@ -0,0 +1,22 @@
//! [GET /_matrix/client/versions](https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-versions)
use ruma_api_macros::ruma_api;
use serde_derive::{Deserialize, Serialize};
ruma_api! {
metadata {
description: "Get the versions of the client-server API supported by this homeserver.",
method: GET,
name: "api_versions",
path: "/_matrix/client/versions",
rate_limited: false,
requires_authentication: false,
}
request {}
response {
/// A list of Matrix client API protocol versions supported by the homeserver.
pub versions: Vec<String>,
}
}