fn main() {
#[cfg(feature = "cli")]
if let Err(e) = run() {
eprintln!("Error: {e}");
std::process::exit(1);
}
}
#[cfg(feature = "cli")]
fn run() -> anyhow::Result<()> {
use cpufetch_rs::{CpuInfo, Error};
let cpu_info = CpuInfo::new().map_err(Error::from)?;
#[cfg(not(feature = "cli"))]
{
println!("CPU Information:");
println!("Vendor: {}", cpu_info.vendor);
println!("Model: {}", cpu_info.brand_string);
println!(
"Cores: {} physical, {} logical",
cpu_info.physical_cores, cpu_info.logical_cores
);
if let Some(l1i) = cpu_info.cache_sizes[0] {
println!("L1i Cache: {} KB", l1i);
}
if let Some(l1d) = cpu_info.cache_sizes[1] {
println!("L1d Cache: {} KB", l1d);
}
if let Some(l2) = cpu_info.cache_sizes[2] {
println!("L2 Cache: {} KB", l2);
}
if let Some(l3) = cpu_info.cache_sizes[3] {
println!("L3 Cache: {} KB", l3);
}
if cpu_info.frequency.base.is_some() || cpu_info.frequency.current.is_some() || cpu_info.frequency.max.is_some()
{
println!("Frequency: {}", cpu_info.frequency);
}
return Ok(());
}
#[cfg(all(feature = "cli", feature = "display"))]
{
use cpufetch_rs::cli::Args;
let args = <Args as clap::Parser>::parse();
if args.json {
#[cfg(feature = "json")]
{
cpufetch_rs::printer::print_json(&cpu_info)?;
}
#[cfg(not(feature = "json"))]
{
eprintln!("Error: JSON output was requested but the 'json' feature is not enabled");
eprintln!("Recompile with --feature=json to enable JSON output");
return Err(anyhow::anyhow!("JSON feature not enabled"));
}
} else {
cpufetch_rs::printer::print_cpu_info(&cpu_info, &args)?;
}
}
#[cfg(all(feature = "cli", not(feature = "display")))]
{
use cpufetch_rs::cli::Args;
let args = <Args as clap::Parser>::parse();
println!("CPU Information:");
println!("Vendor: {}", cpu_info.vendor);
println!("Model: {}", cpu_info.brand_string);
println!(
"Cores: {} physical, {} logical",
cpu_info.physical_cores, cpu_info.logical_cores
);
if args.cache {
if let Some(l1i) = cpu_info.cache_sizes[0] {
println!("L1i Cache: {} KB", l1i);
}
if let Some(l1d) = cpu_info.cache_sizes[1] {
println!("L1d Cache: {} KB", l1d);
}
if let Some(l2) = cpu_info.cache_sizes[2] {
println!("L2 Cache: {} KB", l2);
}
if let Some(l3) = cpu_info.cache_sizes[3] {
println!("L3 Cache: {} KB", l3);
}
}
if args.frequency {
if cpu_info.frequency.base.is_some()
|| cpu_info.frequency.current.is_some()
|| cpu_info.frequency.max.is_some()
{
println!("Frequency: {}", cpu_info.frequency);
}
}
if args.features {
println!("CPU Features: {:?}", cpu_info.features);
}
if args.json {
#[cfg(feature = "json")]
{
cpufetch_rs::printer::print_json(&cpu_info)?;
}
#[cfg(not(feature = "json"))]
{
eprintln!("Error: JSON output was requested but the 'json' feature is not enabled");
eprintln!("Recompile with --feature=json to enable JSON output");
return Err(anyhow::anyhow!("JSON feature not enabled"));
}
}
}
Ok(())
}