use anyhow::Result;
use clap::{Args, Subcommand};
mod logs;
mod service;
mod start;
#[derive(Args, Debug)]
pub struct Daemon {
#[arg(short, long, action = clap::ArgAction::Count, global = true)]
pub verbose: u8,
#[command(subcommand)]
pub command: DaemonCommand,
}
#[derive(Subcommand, Debug)]
pub enum DaemonCommand {
Run,
Reload,
Logs {
#[arg(trailing_var_arg = true, allow_hyphen_values = true)]
tail_args: Vec<String>,
},
Start {
#[arg(short, long)]
force: bool,
},
Stop,
}
impl Daemon {
pub async fn run(self) -> Result<()> {
match self.command {
DaemonCommand::Run => start::start().await,
DaemonCommand::Reload => {
let mut runner = crate::cmd::connect_default().await?;
runner.reload().await?;
println!("daemon reloaded");
Ok(())
}
DaemonCommand::Logs { tail_args } => logs::logs(&tail_args),
DaemonCommand::Start { force } => service::install(self.verbose.max(1), force),
DaemonCommand::Stop => service::uninstall(),
}
}
}