tuwunel_admin/room/
list_extremities.rs1use futures::{StreamExt, TryStreamExt};
2use ruma::OwnedRoomOrAliasId;
3use tuwunel_core::{Error, Result};
4
5use crate::admin_command;
6
7#[admin_command]
8#[tracing::instrument(level = "debug", skip(self))]
9pub(super) async fn room_list_extremities(&self, room_id: OwnedRoomOrAliasId) -> Result {
10 let room_id = self
11 .services
12 .alias
13 .maybe_resolve(&room_id)
14 .await?;
15
16 write!(self, "Forward extremities for {room_id}:\n```\n").await?;
17
18 let total = self
19 .services
20 .state
21 .get_forward_extremities(&room_id)
22 .map(Ok::<_, Error>)
23 .try_fold(0_usize, async |count, event_id| {
24 writeln!(self, "{event_id}").await?;
25
26 Ok(count.saturating_add(1))
27 })
28 .await?;
29
30 write!(self, "```\nTotal: {total}").await
31}