#![allow(clippy::exhaustive_structs)] #[derive(Copy, Clone, Debug, ruma_common::serde::Incoming, serde::Serialize)] pub struct OtherThing<'t> { pub some: &'t str, pub t: &'t [u8], } mod empty_response { use ruma_common::{ api::{request, response, Metadata}, metadata, RoomAliasId, RoomId, }; const METADATA: Metadata = metadata! { description: "Add an alias to a room.", method: PUT, name: "create_alias", rate_limited: false, authentication: AccessToken, history: { unstable => "/_matrix/client/r0/directory/room/:room_alias", } }; #[request] pub struct Request<'a> { /// The room alias to set. #[ruma_api(path)] pub room_alias: &'a RoomAliasId, /// The room ID to set. pub room_id: &'a RoomId, } #[response] pub struct Response {} } mod nested_types { use ruma_common::{ api::{request, response, Metadata}, metadata, RoomAliasId, }; const METADATA: Metadata = metadata! { description: "Add an alias to a room.", method: PUT, name: "create_alias", rate_limited: false, authentication: AccessToken, history: { unstable => "/_matrix/client/r0/directory/room", } }; #[request] pub struct Request<'a> { /// The room alias to set. pub room_alias: &'a [Option<&'a RoomAliasId>], /// The room ID to set. pub room_id: &'a [Option>], } #[response] pub struct Response {} } mod full_request_response { use http::header::CONTENT_TYPE; use ruma_common::{ api::{request, response, Metadata}, metadata, }; use super::{IncomingOtherThing, OtherThing}; const METADATA: Metadata = metadata! { description: "Does something.", method: POST, name: "no_fields", rate_limited: false, authentication: None, history: { unstable => "/_matrix/my/endpoint/:thing", } }; #[request] pub struct Request<'a> { #[ruma_api(query)] pub abc: &'a str, #[ruma_api(path)] pub thing: &'a str, #[ruma_api(header = CONTENT_TYPE)] pub stuff: &'a str, pub more: OtherThing<'a>, } #[response] pub struct Response { #[ruma_api(body)] pub thing: Vec, #[ruma_api(header = CONTENT_TYPE)] pub stuff: String, } } mod full_request_response_with_query_map { use http::header::CONTENT_TYPE; use ruma_common::{ api::{request, response, Metadata}, metadata, }; const METADATA: Metadata = metadata! { description: "Does something.", method: GET, name: "no_fields", rate_limited: false, authentication: None, history: { unstable => "/_matrix/my/endpoint/:thing", } }; #[request] pub struct Request<'a> { #[ruma_api(query_map)] // pub abc: &'a [(&'a str, &'a str)], // TODO handle this use case pub abc: Vec<(String, String)>, #[ruma_api(path)] pub thing: &'a str, #[ruma_api(header = CONTENT_TYPE)] pub stuff: &'a str, } #[response] pub struct Response { #[ruma_api(body)] pub thing: String, #[ruma_api(header = CONTENT_TYPE)] pub stuff: String, } } mod query_fields { use ruma_common::{ api::{request, response, Metadata}, metadata, }; const METADATA: Metadata = metadata! { description: "Get the list of rooms in this homeserver's public directory.", method: GET, name: "get_public_rooms", rate_limited: false, authentication: None, history: { unstable => "/_matrix/client/r0/publicRooms", } }; #[request] pub struct Request<'a> { /// Limit for the number of results to return. #[serde(skip_serializing_if = "Option::is_none")] #[ruma_api(query)] pub limit: Option, /// Pagination token from a previous request. #[serde(skip_serializing_if = "Option::is_none")] #[ruma_api(query)] pub since: Option<&'a str>, /// The server to fetch the public room lists from. /// /// `None` means the server this request is sent to. #[serde(skip_serializing_if = "Option::is_none")] #[ruma_api(query)] pub server: Option<&'a str>, } #[response] pub struct Response {} }