mod linux; mod art; mod windows; mod macos; mod cla; use std::env;
fn main() {
let args = match cla::Args::parse() {
Ok(args) => args,
Err(e) => {
eprintln!("{}", e);
eprintln!("Try 'rcpufetch --help' for more information.");
std::process::exit(1);
}
};
if args.help {
cla::print_help();
return;
}
if args.version {
cla::print_version();
return;
}
if args.license {
cla::print_license();
return;
}
if let Some(shell) = args.completions {
cla::print_completions(&shell);
return;
}
let logo_override = args.logo.as_ref().and_then(|logo| {
match logo.to_lowercase().as_str() {
"nvidia" => Some("NVIDIA"),
"powerpc" => Some("PowerPC"),
"arm" => Some("ARM"),
"amd" => Some("AuthenticAMD"),
"intel" => Some("GenuineIntel"),
"apple" => Some("Apple"),
_ => {
eprintln!("Warning: Unknown logo vendor '{}'. Valid options: nvidia, powerpc, arm, amd, intel, apple", logo);
None
}
}
});
let os = env::consts::OS;
match os {
"linux" => {
use crate::linux::linux::LinuxCpuInfo;
match LinuxCpuInfo::new() {
Ok(cpu_info) => {
if args.no_logo {
cpu_info.display_info_no_logo();
} else {
cpu_info.display_info_with_logo(logo_override);
}
}
Err(e) => {
eprintln!("Error fetching CPU info: {}", e);
}
}
}
"windows" => {
use crate::windows::windows::WindowsCpuInfo;
match WindowsCpuInfo::new() {
Ok(cpu_info) => {
if args.no_logo {
cpu_info.display_info_no_logo();
} else {
cpu_info.display_info_with_logo(logo_override);
}
}
Err(e) => {
eprintln!("Error fetching CPU info: {}", e);
}
}
}
"macos" => {
use crate::macos::macos::MacOSCpuInfo;
match MacOSCpuInfo::new() {
Ok(cpu_info) => {
if args.no_logo {
cpu_info.display_info_no_logo();
} else {
cpu_info.display_info_with_logo(logo_override);
}
}
Err(e) => {
eprintln!("Error fetching CPU info: {}", e);
}
}
}
_ => {
eprintln!("Unsupported operating system: {}", os);
}
}
}