use std::path::PathBuf;
use anyhow::Result;
use clap::Parser;
use super::control;
use crate::daemon::client::DaemonClient;
use crate::daemon::server;
#[derive(Parser)]
pub struct RestartCommand {
#[arg(long, value_name = "PATH")]
pub socket: Option<PathBuf>,
}
impl RestartCommand {
pub async fn execute(self) -> Result<()> {
let socket_path = server::resolve_socket(self.socket)?;
let client = DaemonClient::new(&socket_path);
if client.ping().await.is_ok() {
client.shutdown().await.ok();
control::wait_until_down(&socket_path).await?;
}
control::launch(&socket_path)?;
control::wait_until_ready(&socket_path).await?;
println!("daemon restarted (socket {})", socket_path.display());
Ok(())
}
}