federation-api: Add get_missing_events endpoint v1
This commit is contained in:
parent
a8b4bad684
commit
dd87484a92
@ -13,6 +13,7 @@ Improvements:
|
||||
backfill::get_backfill::v1,
|
||||
device::get_devices::v1,
|
||||
directory::get_public_rooms_filtered::v1,
|
||||
event::get_missing_events::v1,
|
||||
keys::{
|
||||
claim_keys::v1,
|
||||
query_keys::v1,
|
||||
|
3
ruma-federation-api/src/event.rs
Normal file
3
ruma-federation-api/src/event.rs
Normal file
@ -0,0 +1,3 @@
|
||||
//! Endpoints to get general information about events
|
||||
|
||||
pub mod get_missing_events;
|
3
ruma-federation-api/src/event/get_missing_events.rs
Normal file
3
ruma-federation-api/src/event/get_missing_events.rs
Normal file
@ -0,0 +1,3 @@
|
||||
//! Retrieves previous events that the sender is missing.
|
||||
|
||||
pub mod v1;
|
75
ruma-federation-api/src/event/get_missing_events/v1.rs
Normal file
75
ruma-federation-api/src/event/get_missing_events/v1.rs
Normal file
@ -0,0 +1,75 @@
|
||||
//! [POST /_matrix/federation/v1/get_missing_events/{roomId}](https://matrix.org/docs/spec/server_server/r0.1.4#post-matrix-federation-v1-get-missing-events-roomid)
|
||||
|
||||
use js_int::{uint, UInt};
|
||||
use ruma_api::ruma_api;
|
||||
use ruma_events::pdu::Pdu;
|
||||
use ruma_identifiers::{EventId, RoomId};
|
||||
|
||||
ruma_api! {
|
||||
metadata: {
|
||||
description: "Retrieves previous events that the sender is missing.",
|
||||
method: POST,
|
||||
name: "get_missing_events",
|
||||
path: "/_matrix/federation/v1/get_missing_events/:room_id",
|
||||
rate_limited: false,
|
||||
requires_authentication: true,
|
||||
}
|
||||
|
||||
#[non_exhaustive]
|
||||
request: {
|
||||
/// The room ID to search in.
|
||||
#[ruma_api(path)]
|
||||
room_id: &'a RoomId,
|
||||
|
||||
/// The maximum number of events to retrieve. Defaults to 10.
|
||||
#[serde(default = "default_limit", skip_serializing_if = "is_default_limit")]
|
||||
limit: UInt,
|
||||
|
||||
/// The minimum depth of events to retrieve. Defaults to 0.
|
||||
#[serde(default, skip_serializing_if = "ruma_serde::is_default")]
|
||||
min_depth: UInt,
|
||||
|
||||
/// The latest event IDs that the sender already has. These are skipped when retrieving the previous events of `latest_events`.
|
||||
earliest_events: &'a [EventId],
|
||||
|
||||
/// The event IDs to retrieve the previous events for.
|
||||
latest_events: &'a [EventId],
|
||||
}
|
||||
|
||||
response: {
|
||||
/// The missing events.
|
||||
events: Vec<Pdu>
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Request<'a> {
|
||||
/// Creates a new `Request` for events in the given room with the given constraints.
|
||||
pub fn new(
|
||||
room_id: &'a RoomId,
|
||||
earliest_events: &'a [EventId],
|
||||
latest_events: &'a [EventId],
|
||||
) -> Self {
|
||||
Self {
|
||||
room_id,
|
||||
limit: default_limit(),
|
||||
min_depth: UInt::default(),
|
||||
earliest_events,
|
||||
latest_events,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Response {
|
||||
/// Creates a new `Response` with the given events.
|
||||
pub fn new(events: Vec<Pdu>) -> Self {
|
||||
Self { events }
|
||||
}
|
||||
}
|
||||
|
||||
fn default_limit() -> UInt {
|
||||
uint!(10)
|
||||
}
|
||||
|
||||
fn is_default_limit(val: &UInt) -> bool {
|
||||
*val == default_limit()
|
||||
}
|
@ -9,6 +9,7 @@ pub mod backfill;
|
||||
pub mod device;
|
||||
pub mod directory;
|
||||
pub mod discovery;
|
||||
pub mod event;
|
||||
pub mod keys;
|
||||
pub mod membership;
|
||||
pub mod openid;
|
||||
|
Loading…
x
Reference in New Issue
Block a user