Skip to main content

tuwunel_admin/query/
room_alias.rs

1use clap::Subcommand;
2use futures::StreamExt;
3use ruma::{OwnedRoomAliasId, OwnedRoomId};
4use tuwunel_core::Result;
5
6use crate::Context;
7
8#[derive(Debug, Subcommand)]
9/// All the getters and iterators from src/service/rooms/alias/
10pub(crate) enum RoomAliasCommand {
11	/// - Resolve any local or remote alias.
12	ResolveAlias {
13		/// Full room alias
14		alias: OwnedRoomAliasId,
15	},
16
17	/// - Resolve an alias on this server.
18	ResolveLocalAlias {
19		/// Full room alias
20		alias: OwnedRoomAliasId,
21	},
22
23	/// - Iterator of all our local room aliases for the room ID
24	LocalAliasesForRoom {
25		/// Full room ID
26		room_id: OwnedRoomId,
27	},
28
29	/// - Iterator of all our local aliases in our database with their room IDs
30	AllLocalAliases,
31}
32
33/// All the getters and iterators from src/service/rooms/alias/
34pub(super) async fn process(subcommand: RoomAliasCommand, context: &Context<'_>) -> Result {
35	let services = context.services;
36
37	match subcommand {
38		| RoomAliasCommand::ResolveAlias { alias } => {
39			let timer = tokio::time::Instant::now();
40			let results = services.alias.resolve_alias(&alias).await;
41			let query_time = timer.elapsed();
42
43			write!(context, "Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```")
44		},
45		| RoomAliasCommand::ResolveLocalAlias { alias } => {
46			let timer = tokio::time::Instant::now();
47			let results = services.alias.resolve_local_alias(&alias).await;
48			let query_time = timer.elapsed();
49
50			write!(context, "Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```")
51		},
52		| RoomAliasCommand::LocalAliasesForRoom { room_id } => {
53			let timer = tokio::time::Instant::now();
54			let aliases: Vec<_> = services
55				.alias
56				.local_aliases_for_room(&room_id)
57				.map(ToOwned::to_owned)
58				.collect()
59				.await;
60			let query_time = timer.elapsed();
61
62			write!(context, "Query completed in {query_time:?}:\n\n```rs\n{aliases:#?}\n```")
63		},
64		| RoomAliasCommand::AllLocalAliases => {
65			let timer = tokio::time::Instant::now();
66			let aliases = services
67				.alias
68				.all_local_aliases()
69				.map(|(room_id, alias)| (room_id.to_owned(), alias.to_owned()))
70				.collect::<Vec<_>>()
71				.await;
72			let query_time = timer.elapsed();
73
74			write!(context, "Query completed in {query_time:?}:\n\n```rs\n{aliases:#?}\n```")
75		},
76	}
77	.await
78}