scatter_net/legacy/utils/
spawn_and_forget.rs1use std::future::Future;
2
3use anyhow::Result;
4use tokio::spawn;
5
6pub fn spawn_and_forget<F, O>(future: F)
7where
8 F: Future<Output = Result<O>> + Send + 'static,
9{
10 spawn(async move {
11 if let Err(err) = future.await {
12 print_error_details(&err);
13 }
14 });
15}
16
17use anyhow::Error;
18
19fn print_error_details(err: &Error) {
20 let mut output = String::new();
21
22 output.push_str(&"-".repeat(80));
23 output.push_str(&format!("\nError: {err}\n"));
24 output.push_str("\nCaused by:\n");
25
26 for (i, cause) in err.chain().enumerate() {
27 output.push_str(&format!(" {i}: {cause}\n"));
28 }
29
30 output.push_str("\nBacktrace:\n");
31 output.push_str(&format!("{}\n", err.backtrace()));
32 output.push_str(&"-".repeat(80));
33
34 eprintln!("{output}\n");
35}