use clap::{Parser, Subcommand};
use crate::{Path, daemon::command::DaemonCommand};
#[derive(Parser, Debug, Default)]
#[command(about, long_about = None, version, propagate_version = true)]
struct Cli {
#[command(subcommand)]
pub command: CliCommand,
}
#[derive(Subcommand, Debug)]
enum CliCommand {
Daemon {
#[arg(short = 'c', long = "config")]
config_path: Option<Box<Path>>,
},
Ping,
Show,
Hide,
Toggle,
Quit,
}
impl Default for CliCommand {
fn default() -> Self {
Self::Daemon { config_path: None }
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RunMode {
Daemon { config_path: Option<Box<Path>> },
Send(DaemonCommand),
}
impl From<CliCommand> for RunMode {
fn from(cmd: CliCommand) -> Self {
match cmd {
CliCommand::Daemon { config_path } => RunMode::Daemon { config_path },
CliCommand::Ping => RunMode::Send(DaemonCommand::Ping),
CliCommand::Show => RunMode::Send(DaemonCommand::Show),
CliCommand::Hide => RunMode::Send(DaemonCommand::Hide),
CliCommand::Toggle => RunMode::Send(DaemonCommand::Toggle),
CliCommand::Quit => RunMode::Send(DaemonCommand::Quit),
}
}
}
pub fn parse_cli() -> RunMode {
RunMode::from(Cli::parse().command)
}