diff --git a/ruma-federation-api/CHANGELOG.md b/ruma-federation-api/CHANGELOG.md index aea80796..4336ac48 100644 --- a/ruma-federation-api/CHANGELOG.md +++ b/ruma-federation-api/CHANGELOG.md @@ -11,6 +11,7 @@ Improvements: ``` backfill::get_backfill::v1, device::get_devices::v1, + directory::get_public_rooms_filtered::v1, keys::{ claim_keys::v1, query_keys::v1, diff --git a/ruma-federation-api/src/directory.rs b/ruma-federation-api/src/directory.rs index d33d3254..66550381 100644 --- a/ruma-federation-api/src/directory.rs +++ b/ruma-federation-api/src/directory.rs @@ -1,3 +1,4 @@ //! Room directory endpoints. pub mod get_public_rooms; +pub mod get_public_rooms_filtered; diff --git a/ruma-federation-api/src/directory/get_public_rooms_filtered/mod.rs b/ruma-federation-api/src/directory/get_public_rooms_filtered/mod.rs new file mode 100644 index 00000000..937e5fed --- /dev/null +++ b/ruma-federation-api/src/directory/get_public_rooms_filtered/mod.rs @@ -0,0 +1,3 @@ +//! Endpoint to query a homeserver's public rooms with an optional filter. + +pub mod v1; diff --git a/ruma-federation-api/src/directory/get_public_rooms_filtered/v1.rs b/ruma-federation-api/src/directory/get_public_rooms_filtered/v1.rs new file mode 100644 index 00000000..8b2073e6 --- /dev/null +++ b/ruma-federation-api/src/directory/get_public_rooms_filtered/v1.rs @@ -0,0 +1,48 @@ +//! [POST /_matrix/federation/v1/publicRooms](https://matrix.org/docs/spec/server_server/r0.1.4#post-matrix-federation-v1-publicrooms) + +use js_int::UInt; +use ruma_api::ruma_api; +use ruma_common::directory::{Filter, PublicRoomsChunk, RoomNetwork}; + +ruma_api! { + metadata: { + description: "Get the list of rooms in this homeserver's public directory.", + method: POST, + name: "get_public_rooms_filtered", + path: "/_matrix/federation/v1/publicRooms", + rate_limited: false, + requires_authentication: true, + } + + request: { + /// Limit for the number of results to return. + #[serde(skip_serializing_if = "Option::is_none")] + pub limit: Option, + + /// Pagination token from a previous request. + #[serde(skip_serializing_if = "Option::is_none")] + pub since: Option<&'a str>, + + /// Filter to apply to the results. + #[serde(skip_serializing_if = "Option::is_none")] + pub filter: Option, + + /// Network to fetch the public room lists from. + #[serde(flatten, skip_serializing_if = "ruma_serde::is_default")] + pub room_network: RoomNetwork, + } + + response: { + /// A paginated chunk of public rooms. + pub chunk: Vec, + + /// A pagination token for the response. + pub next_batch: Option, + + /// A pagination token that allows fetching previous results. + pub prev_batch: Option, + + /// An estimate on the total number of public rooms, if the server has an estimate. + pub total_room_count_estimate: Option, + } +}