libfetch 0.1.0

Simple but reliable library for fetch tools
Documentation
use std::{fs, env::var};
use crate::{shared::{self, procfs::Memory}, platform::Platform};

pub struct Linux;

impl Platform for Linux {
    fn new() -> Self {
        Linux
    }

    fn name(&self) -> Option<String> {
        shared::os_release()
    }

    fn shell(&self) -> Option<String> {
        var("SHELL").ok()
    }

    fn memory(&self) -> Option<Memory> {
        shared::procfs::memory()
    }

    fn kernel(&self) -> Option<String> {
        let kernel = fs::read_to_string("/proc/sys/kernel/osrelease").ok()?;
        
        Some(kernel.trim().to_string())
    }

    fn uptime(&self) -> Option<usize> {
        let uptime_file = fs::read_to_string("/proc/uptime").ok()?;
        let uptime = uptime_file.split_whitespace().next()?;

        let uptime = uptime.parse::<f64>().ok()? as usize;
        Some(uptime)
    }

    fn user(&self) -> Option<String> {
        var("USER").ok()
    }

    fn hostname(&self) -> Option<String> {
        shared::libc_hostname()
    }

    fn desktop(&self) -> Option<String> {
        var("XDG_CURRENT_DESKTOP").ok()
    }
}