Skip to main content

tuwunel_admin/room/
list_extremities.rs

1use 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}