tuwunel_admin/query/
room_alias.rs1use clap::Subcommand;
2use futures::StreamExt;
3use ruma::{OwnedRoomAliasId, OwnedRoomId};
4use tuwunel_core::Result;
5
6use crate::Context;
7
8#[derive(Debug, Subcommand)]
9pub(crate) enum RoomAliasCommand {
11 ResolveAlias {
13 alias: OwnedRoomAliasId,
15 },
16
17 ResolveLocalAlias {
19 alias: OwnedRoomAliasId,
21 },
22
23 LocalAliasesForRoom {
25 room_id: OwnedRoomId,
27 },
28
29 AllLocalAliases,
31}
32
33pub(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}