use crate::util::*;
pub trait ChecksOpt {
fn check(&self) -> Option<CheckCommands>;
fn check_its_trigger_period(&self) -> Option<u16>;
}
impl<T> ChecksOpt for &T
where
T: ChecksOpt,
{
fn check(&self) -> Option<CheckCommands> {
(*self).check()
}
fn check_its_trigger_period(&self) -> Option<u16> {
(*self).check_its_trigger_period()
}
}
impl<T> ChecksOpt for Box<T>
where
T: ChecksOpt,
{
fn check(&self) -> Option<CheckCommands> {
(**self).check()
}
fn check_its_trigger_period(&self) -> Option<u16> {
(**self).check_its_trigger_period()
}
}
impl<T> ChecksOpt for Arc<T>
where
T: ChecksOpt,
{
fn check(&self) -> Option<CheckCommands> {
(**self).check()
}
fn check_its_trigger_period(&self) -> Option<u16> {
(**self).check_its_trigger_period()
}
}
#[derive(Subcommand, Debug, Clone, PartialEq)]
pub enum CheckCommands {
All(CheckModeArgs),
Sanity(CheckModeArgs),
}
#[derive(Debug, Args, Clone, PartialEq, Default)]
#[command(args_conflicts_with_subcommands = true)]
pub struct CheckModeArgs {
#[command(subcommand)]
pub target: Option<System>,
#[command(flatten)]
pub path: CmdPathArg,
}
#[derive(Debug, Default, Args, Clone, PartialEq)]
pub struct CmdPathArg {
#[arg(short = 'r', long)]
path: Option<PathBuf>,
}
#[derive(Subcommand, Copy, Clone, Debug, PartialEq, Eq)]
pub enum System {
ITS,
ITS_Stave,
}