diff --git a/src/admin/processor.rs b/src/admin/processor.rs index 5bc456b2..4099d193 100644 --- a/src/admin/processor.rs +++ b/src/admin/processor.rs @@ -54,7 +54,7 @@ async fn handle_command(services: Arc, command: CommandInput) -> Proce async fn process_command(services: Arc, input: &CommandInput) -> ProcessorResult { let (command, args, body) = match parse(&services, input) { - | Err(error) => return Err(error), + | Err(error) => return Err(Box::new(error)), | Ok(parsed) => parsed, }; @@ -90,12 +90,14 @@ async fn process_command(services: Arc, input: &CommandInput) -> Proce write!(&mut logs, "Command failed with error:\n```\n{error:#?}\n```") .expect("output buffer"); - Err(reply(RoomMessageEventContent::notice_markdown(logs), context.reply_id)) + Err(Box::new(reply( + RoomMessageEventContent::notice_markdown(logs), + context.reply_id, + ))) }, } } -#[allow(clippy::result_large_err)] fn handle_panic(error: &Error, command: &CommandInput) -> ProcessorResult { let link = "Please submit a [bug report](https://github.com/matrix-construct/tuwunel/issues/new). \ @@ -103,7 +105,7 @@ fn handle_panic(error: &Error, command: &CommandInput) -> ProcessorResult { let msg = format!("Panic occurred while processing command:\n```\n{error:#?}\n```\n{link}"); let content = RoomMessageEventContent::notice_markdown(msg); error!("Panic while processing command: {error:?}"); - Err(reply(content, command.reply_id.as_deref())) + Err(Box::new(reply(content, command.reply_id.as_deref()))) } /// Parse and process a message from the admin room diff --git a/src/service/admin/mod.rs b/src/service/admin/mod.rs index 6c6da30e..7faff373 100644 --- a/src/service/admin/mod.rs +++ b/src/service/admin/mod.rs @@ -54,7 +54,7 @@ pub type ProcessorFuture = Pin + Send>> /// events which have digested any prior errors. The wrapping preserves whether /// the command failed without interpreting the text. Ok(None) outputs are /// dropped to produce no response. -pub type ProcessorResult = Result, CommandOutput>; +pub type ProcessorResult = Result, Box>; /// Alias for the output structure. pub type CommandOutput = RoomMessageEventContent; @@ -199,14 +199,18 @@ impl Service { async fn handle_command(&self, command: CommandInput) { match self.process_command(command).await { + | Err(output) => self.handle_command_output(*output).await, + | Ok(Some(output)) => self.handle_command_output(output).await, | Ok(None) => debug!("Command successful with no response"), - | Ok(Some(output)) | Err(output) => self - .handle_response(output) - .await - .unwrap_or_else(default_log), } } + async fn handle_command_output(&self, content: RoomMessageEventContent) { + self.handle_response(content) + .await + .unwrap_or_else(default_log); + } + async fn process_command(&self, command: CommandInput) -> ProcessorResult { let handle = &self .handle