mod app;
#[cfg(any(target_os = "macos", test))]
mod apple;
mod gpu;
mod hist;
#[cfg(not(target_os = "macos"))]
mod nvidia;
mod sys;
mod ui;
use clap::Parser;
use std::time::Duration;
#[derive(Parser)]
#[command(version)]
struct Args {
#[arg(short = 'd', long, default_value_t = 1000, value_parser = clap::value_parser!(u64).range(100..=60000))]
interval: u64,
#[arg(long)]
once: bool,
}
fn main() -> anyhow::Result<()> {
let args = Args::parse();
let app = app::App::new(
sys::Sys::new(),
gpu::Gpus::new(),
Duration::from_millis(args.interval),
);
if args.once {
return match ui::print_once(&app, &mut std::io::stdout().lock()) {
Err(e) if e.kind() == std::io::ErrorKind::BrokenPipe => Ok(()),
r => Ok(r?),
};
}
let mut app = app;
let mut terminal = ratatui::init();
let result = app.run(&mut terminal);
ratatui::restore();
result
}