use check_macos_updates::*;
use clap::Parser;
use plist::from_file;
use std::process;
#[derive(Parser, Debug)]
#[command(author, version, about = None, long_about = None)]
struct Args {
#[arg(short, long)]
force_manual: bool,
#[arg(short, long)]
critical_on_updates: bool,
}
fn exit_with_message(status: Status) {
println!("{}", status);
process::exit(status.to_int());
}
fn main() {
let mut status = Status::Unknown(UnkownVariant::NotMacOS);
if !cfg!(target_os = "macos") {
exit_with_message(status)
}
let args = Args::parse();
if args.force_manual {
status = check_softwareupdate_output(&softwareupdate_output());
} else {
let software_update_plist = from_file(PLIST_FILE);
status = match software_update_plist {
Ok(u) => determine_updates(&u),
Err(_) => Status::Unknown(UnkownVariant::UnableToParsePlist),
};
}
if args.critical_on_updates {
if let Status::Warning = status {
status = Status::Critical;
}
}
exit_with_message(status);
}