hot_restart/hot_restart/
fn.rs1use crate::*;
2
3fn run_hot_restart(run_args: &[&str], wait: bool) -> ResultHotRestartError {
4 let check_output: Output = Command::new("cargo")
5 .args(&["install", "--list"])
6 .output()
7 .map_err(|e| HotRestartError::Other(e.to_string()))?;
8 let check_output_str: Cow<'_, str> = String::from_utf8_lossy(&check_output.stdout);
9 if !check_output_str.contains("cargo-watch") {
10 eprintln!("Cargo-watch is not installed. Attempting to install...");
11 let install_status: ExitStatus = Command::new("cargo")
12 .args(&["install", "cargo-watch"])
13 .stdout(Stdio::inherit())
14 .stderr(Stdio::inherit())
15 .spawn()?
16 .wait()?;
17 if !install_status.success() {
18 return Err(HotRestartError::CargoWatchNotInstalled);
19 }
20 eprintln!("Cargo-watch installed successfully.");
21 }
22 let mut command: Command = Command::new("cargo-watch");
23 command
24 .args(run_args)
25 .stdout(Stdio::inherit())
26 .stderr(Stdio::inherit())
27 .stdin(Stdio::inherit());
28 let mut child: Child = command
29 .spawn()
30 .map_err(|e| HotRestartError::CommandSpawnFailed(e.to_string()))?;
31 if wait {
32 child
33 .wait()
34 .map_err(|e| HotRestartError::CommandWaitFailed(e.to_string()))?;
35 }
36 exit(0);
37}
38
39pub fn hot_restart(run_args: &[&str]) -> ResultHotRestartError {
40 run_hot_restart(run_args, false)
41}
42
43pub fn hot_restart_wait(run_args: &[&str]) -> ResultHotRestartError {
44 run_hot_restart(run_args, true)
45}