From 06ddfdd68107773509c3fbe8b281fde04862b323 Mon Sep 17 00:00:00 2001 From: Jimmy Cuadra Date: Mon, 3 Jul 2017 16:41:25 -0700 Subject: [PATCH] Use ruma-api-macros for the membership endpoints. --- src/lib.rs | 2 +- src/r0/membership.rs | 547 ++++++++++++------------------------------- 2 files changed, 146 insertions(+), 403 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index fe9a70e7..f36a7000 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -29,7 +29,7 @@ pub mod r0 { pub mod directory; pub mod filter; pub mod media; -// pub mod membership; + pub mod membership; // pub mod presence; // pub mod profile; // pub mod push; diff --git a/src/r0/membership.rs b/src/r0/membership.rs index 540b96f3..ed0b1552 100644 --- a/src/r0/membership.rs +++ b/src/r0/membership.rs @@ -5,7 +5,8 @@ use ruma_signatures::Signatures; // TODO: spec requires a nesting ThirdPartySigned { signed: Signed { mxid: ..., ... } } // for join_room_by_id_or_alias but not for join_room_by_id, inconsistency? -/// A signature of an `m.third_party_invite` token to prove that this user owns a third party identity which has been invited to the room. +/// A signature of an `m.third_party_invite` token to prove that this user owns a third party +/// identity which has been invited to the room. #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ThirdPartySigned { /// The Matrix ID of the invitee. @@ -20,490 +21,232 @@ pub struct ThirdPartySigned { /// [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::{UserId, RoomId}; - /// The request body parameters. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct BodyParams { - pub user_id: UserId, - } - - /// Details about this API endpoint. - #[derive(Clone, Copy, Debug)] - pub struct Endpoint; - - /// This API endpoint's path parameters. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct PathParams { - pub room_id: RoomId, - } - - impl ::Endpoint for Endpoint { - type BodyParams = BodyParams; - type PathParams = PathParams; - type QueryParams = (); - type Response = (); - - fn method() -> ::Method { - ::Method::Post + ruma_api! { + metadata { + description: "Invite a user to a room.", + method: Method::Post, + name: "invite_user", + path: "/_matrix/client/r0/rooms/:room_id/invite", + rate_limited: true, + requires_authentication: true, } - fn request_path(params: Self::PathParams) -> String { - format!( - "/_matrix/client/r0/rooms/{}/invite", - params.room_id - ) + request { + /// The room where the user should be invited. + #[ruma_api(path)] + pub room_id: RoomId, + /// The user to invite. + pub user_id: UserId, } - fn router_path() -> &'static str { - "/_matrix/client/r0/rooms/:room_id/invite" - } - - fn name() -> &'static str { - "invite_user" - } - - fn description() -> &'static str { - "Invite a user to a room." - } - - fn requires_authentication() -> bool { - true - } - - fn rate_limited() -> bool { - true - } + 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 super::ThirdPartySigned; - /// The request type. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct BodyParams { - #[serde(skip_serializing_if = "Option::is_none")] - pub third_party_signed: Option, - } - - /// Details about this API endpoint. - #[derive(Clone, Copy, Debug)] - pub struct Endpoint; - - /// The response type. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct Response { - pub room_id: RoomId, - } - - /// This API endpoint's path parameters. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct PathParams { - pub room_id_or_alias: RoomIdOrAliasId, - } - - impl ::Endpoint for Endpoint { - type BodyParams = BodyParams; - type PathParams = PathParams; - type QueryParams = (); - type Response = Response; - - fn method() -> ::Method { - ::Method::Post + ruma_api! { + metadata { + description: "Join a room using its ID or one of its aliases.", + method: Method::Post, + name: "join_room_by_id_or_alias", + path: "/_matrix/client/r0/join/:room_id_or_alias", + rate_limited: true, + requires_authentication: true, } - fn request_path(params: Self::PathParams) -> String { - match params.room_id_or_alias { - RoomIdOrAliasId::RoomId(room_id) => { - format!( - "/_matrix/client/r0/join/{}", - room_id - ) - } - RoomIdOrAliasId::RoomAliasId(room_alias_id) => { - format!( - "/_matrix/client/r0/join/{}", - room_alias_id - ) - } - } + 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, } - fn router_path() -> &'static str { - "/_matrix/client/r0/join/:room_id_or_alias" - } - - fn name() -> &'static str { - "join_room_by_id_or_alias" - } - - fn description() -> &'static str { - "Join a room using its ID or one of its aliases." - } - - fn requires_authentication() -> bool { - true - } - - fn rate_limited() -> bool { - true + 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 super::ThirdPartySigned; - /// The request type. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct BodyParams { - #[serde(skip_serializing_if = "Option::is_none")] - pub third_party_signed: Option, - } - - /// Details about this API endpoint. - #[derive(Clone, Copy, Debug)] - pub struct Endpoint; - - /// The response type. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct Response { - pub room_id: RoomId, - } - - /// This API endpoint's path parameters. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct PathParams { - pub room_id: RoomId, - } - - impl ::Endpoint for Endpoint { - type BodyParams = BodyParams; - type PathParams = PathParams; - type QueryParams = (); - type Response = Response; - - fn method() -> ::Method { - ::Method::Post + ruma_api! { + metadata { + description: "Join a room using its ID.", + method: Method::Post, + name: "join_room_by_id", + path: "/_matrix/client/r0/rooms/:room_id/join", + rate_limited: true, + requires_authentication: true, } - fn request_path(params: Self::PathParams) -> String { - format!( - "/_matrix/client/r0/rooms/{}/join", - params.room_id - ) + 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, } - fn router_path() -> &'static str { - "/_matrix/client/r0/rooms/:room_id/join" - } - - fn name() -> &'static str { - "join_room_by_id" - } - - fn description() -> &'static str { - "Join a room using its ID." - } - - fn requires_authentication() -> bool { - true - } - - fn rate_limited() -> bool { - true + 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; - /// Details about this API endpoint. - #[derive(Clone, Copy, Debug)] - pub struct Endpoint; - - /// This API endpoint's path parameters. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct PathParams { - pub room_id: RoomId, - } - - impl ::Endpoint for Endpoint { - type BodyParams = (); - type PathParams = PathParams; - type QueryParams = (); - type Response = (); - - fn method() -> ::Method { - ::Method::Post + ruma_api! { + metadata { + description: "Forget a room.", + method: Method::Post, + name: "forget_room", + path: "/_matrix/client/r0/rooms/:room_id/forget", + rate_limited: true, + requires_authentication: true, } - fn request_path(params: Self::PathParams) -> String { - format!( - "/_matrix/client/r0/rooms/{}/forget", - params.room_id - ) + request { + /// The room to forget. + #[ruma_api(path)] + pub room_id: RoomId, } - fn router_path() -> &'static str { - "/_matrix/client/r0/rooms/:room_id/forget" - } - - fn name() -> &'static str { - "forget_room" - } - - fn description() -> &'static str { - "Forget a room." - } - - fn requires_authentication() -> bool { - true - } - - fn rate_limited() -> bool { - true - } + 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; - /// Details about this API endpoint. - #[derive(Clone, Copy, Debug)] - pub struct Endpoint; - - /// This API endpoint's path parameters. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct PathParams { - pub room_id: RoomId, - } - - impl ::Endpoint for Endpoint { - type BodyParams = (); - type PathParams = PathParams; - type QueryParams = (); - type Response = (); - - fn method() -> ::Method { - ::Method::Post + ruma_api! { + metadata { + description: "Leave a room.", + method: Method::Post, + name: "leave_room", + path: "/_matrix/client/r0/rooms/:room_id/leave", + rate_limited: true, + requires_authentication: true, } - fn request_path(params: Self::PathParams) -> String { - format!( - "/_matrix/client/r0/rooms/{}/leave", - params.room_id - ) + request { + /// The room to leave. + #[ruma_api(path)] + pub room_id: RoomId, } - fn router_path() -> &'static str { - "/_matrix/client/r0/rooms/:room_id/leave" - } - - fn name() -> &'static str { - "leave_room" - } - - fn description() -> &'static str { - "Leave a room." - } - - fn requires_authentication() -> bool { - true - } - - fn rate_limited() -> bool { - true - } + 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_identifiers::RoomId; + use ruma_api_macros::ruma_api; + use ruma_identifiers::{RoomId, UserId}; - /// The request type. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct BodyParams { - pub user_id: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub reason: Option, - } - - /// Details about this API endpoint. - #[derive(Clone, Copy, Debug)] - pub struct Endpoint; - - /// This API endpoint's path parameters. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct PathParams { - pub room_id: RoomId, - } - - impl ::Endpoint for Endpoint { - type BodyParams = BodyParams; - type PathParams = PathParams; - type QueryParams = (); - type Response = (); - - fn method() -> ::Method { - ::Method::Post + ruma_api! { + metadata { + description: "Kick a user from a room.", + method: Method::Post, + name: "kick_user", + path: "/_matrix/client/r0/rooms/:room_id/kick", + rate_limited: false, + requires_authentication: true, } - fn request_path(params: Self::PathParams) -> String { - format!( - "/_matrix/client/r0/rooms/{}/kick", - params.room_id - ) + request { + /// The reason for kicking the user. + #[serde(skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// The room to kick the user from. + #[ruma_api(path)] + pub room_id: RoomId, + /// The user to kick. + pub user_id: UserId, } - fn router_path() -> &'static str { - "/_matrix/client/r0/rooms/:room_id/kick" - } - - fn name() -> &'static str { - "kick_user" - } - - fn description() -> &'static str { - "Kick a user from a room." - } - - fn requires_authentication() -> bool { - true - } - - fn rate_limited() -> bool { - false - } + 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_identifiers::RoomId; + use ruma_api_macros::ruma_api; + use ruma_identifiers::{RoomId, UserId}; - /// The request type. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct BodyParams { - pub user_id: String, - } - - /// Details about this API endpoint. - #[derive(Clone, Copy, Debug)] - pub struct Endpoint; - - /// This API endpoint's path parameters. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct PathParams { - pub room_id: RoomId, - } - - impl ::Endpoint for Endpoint { - type BodyParams = BodyParams; - type PathParams = PathParams; - type QueryParams = (); - type Response = (); - - fn method() -> ::Method { - ::Method::Post + ruma_api! { + metadata { + description: "Unban a user from a room.", + method: Method::Post, + name: "unban_user", + path: "/_matrix/client/r0/rooms/:room_id/unban", + rate_limited: false, + requires_authentication: true, } - fn request_path(params: Self::PathParams) -> String { - format!( - "/_matrix/client/r0/rooms/{}/unban", - params.room_id - ) + request { + /// The room to unban the user from. + #[ruma_api(path)] + pub room_id: RoomId, + /// The user to unban. + pub user_id: UserId, } - fn router_path() -> &'static str { - "/_matrix/client/r0/rooms/:room_id/unban" - } - - fn name() -> &'static str { - "unban_user" - } - - fn description() -> &'static str { - "unban a user from a room." - } - - fn requires_authentication() -> bool { - true - } - - fn rate_limited() -> bool { - false - } + 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_identifiers::RoomId; + use ruma_api_macros::ruma_api; + use ruma_identifiers::{RoomId, UserId}; - /// The request type. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct BodyParams { - #[serde(skip_serializing_if = "Option::is_none")] - pub reason: Option, - pub user_id: String, - } - - /// Details about this API endpoint. - #[derive(Clone, Copy, Debug)] - pub struct Endpoint; - - /// This API endpoint's path parameters. - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct PathParams { - pub room_id: RoomId, - } - - impl ::Endpoint for Endpoint { - type BodyParams = BodyParams; - type PathParams = PathParams; - type QueryParams = (); - type Response = (); - - fn method() -> ::Method { - ::Method::Post + ruma_api! { + metadata { + description: "Ban a user from a room.", + method: Method::Post, + name: "ban_user", + path: "/_matrix/client/r0/rooms/:room_id/ban", + rate_limited: false, + requires_authentication: true, } - fn request_path(params: Self::PathParams) -> String { - format!( - "/_matrix/client/r0/rooms/{}/ban", - params.room_id - ) + request { + /// The reason for banning the user. + #[serde(skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// The room to kick the user from. + #[ruma_api(path)] + pub room_id: RoomId, + /// The user to ban. + pub user_id: UserId, } - fn router_path() -> &'static str { - "/_matrix/client/r0/rooms/:room_id/ban" - } - - fn name() -> &'static str { - "ban_user" - } - - fn description() -> &'static str { - "Ban a user from a room." - } - - fn requires_authentication() -> bool { - true - } - - fn rate_limited() -> bool { - false - } + response {} } }