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 StartCommand {
#[arg(long, value_name = "PATH")]
pub socket: Option<PathBuf>,
}
impl StartCommand {
pub async fn execute(self) -> Result<()> {
let socket_path = server::resolve_socket(self.socket)?;
if DaemonClient::new(&socket_path).ping().await.is_ok() {
println!("daemon already running (socket {})", socket_path.display());
return Ok(());
}
control::launch(&socket_path)?;
control::wait_until_ready(&socket_path).await?;
println!("daemon started (socket {})", socket_path.display());
Ok(())
}
}