use crate::prelude::*;
use num_cpus::get as get_num_cpus;
#[derive(Options, Clone, Debug, Deserialize, Serialize)]
pub struct RunnerOptions {
#[arg(long)]
#[options(default_fn = default_cpus, default_doc = "Total CPUs")]
pub cpus: Option<u16>,
}
impl RunnerOptions {
#[expect(clippy::as_conversions, reason = "u16 to usize is safe")]
pub fn get_cpus(&self) -> usize {
self.cpus.expect("cpus should be set").max(1) as usize
}
}
#[expect(
clippy::unnecessary_wraps,
reason = "default_fn signature requires Option for or_else chaining"
)]
#[allow(clippy::as_conversions, clippy::cast_possible_truncation)]
fn default_cpus(_partial: &RunnerOptionsPartial) -> Option<u16> {
Some(get_num_cpus() as u16)
}
impl OptionsContract for RunnerOptions {
type Partial = RunnerOptionsPartial;
fn validate(&self, _validator: &mut OptionsValidator) {}
}