rice 3.0.0

🍚 A modern, feature-rich system information tool written in Rust
Documentation
use anyhow::Result;
use sysinfo::{Disks, System};

pub fn get_cpu_info() -> Result<String> {
    let mut sys = System::new();
    sys.refresh_cpu_all();

    let cpus = sys.cpus();
    if cpus.is_empty() {
        return Ok("Unknown CPU".to_string());
    }

    let cpu = &cpus[0];
    let brand = cpu.brand().trim();
    let frequency = cpu.frequency();
    let core_count = cpus.len();

    if frequency > 0 {
        Ok(format!(
            "{} ({} cores) @ {} MHz",
            brand, core_count, frequency
        ))
    } else {
        Ok(format!("{} ({} cores)", brand, core_count))
    }
}

pub fn get_memory_info() -> Result<String> {
    let mut sys = System::new_all();
    sys.refresh_memory();

    let total = sys.total_memory();
    let used = sys.used_memory();
    let usage_percent = (used as f64 / total as f64) * 100.0;

    Ok(format!(
        "{} MB / {} MB ({:.1}%)",
        used / 1024 / 1024,
        total / 1024 / 1024,
        usage_percent
    ))
}

pub fn get_disk_info() -> Result<String> {
    let disks = Disks::new_with_refreshed_list();

    if disks.is_empty() {
        return Ok("No disks found".to_string());
    }

    let mut total_space = 0u64;
    let mut total_used = 0u64;

    for disk in &disks {
        total_space += disk.total_space();
        total_used += disk.total_space() - disk.available_space();
    }

    if total_space == 0 {
        return Ok("Unknown disk usage".to_string());
    }

    let usage_percent = (total_used as f64 / total_space as f64) * 100.0;

    Ok(format!(
        "{} GB / {} GB ({:.1}%)",
        total_used / 1024 / 1024 / 1024,
        total_space / 1024 / 1024 / 1024,
        usage_percent
    ))
}