From 39f2f134bb81bb2767775390c925eb1054fafaf3 Mon Sep 17 00:00:00 2001 From: cool-mist Date: Mon, 6 Jul 2026 15:16:16 +0530 Subject: [PATCH] remove argh dep --- Cargo.lock | 94 ------------------------------------------- Cargo.toml | 3 -- src/main.rs | 112 +++++++++++++++++++++++++++++++++------------------- 3 files changed, 72 insertions(+), 137 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 73f7cc8..10fb9c1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,43 +2,10 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "argh" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ff18325c8a36b82f992e533ece1ec9f9a9db446bd1c14d4f936bac88fcd240" -dependencies = [ - "argh_derive", - "argh_shared", - "rust-fuzzy-search", -] - -[[package]] -name = "argh_derive" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b2b83a50d329d5d8ccc620f5c7064028828538bdf5646acd60dc1f767803" -dependencies = [ - "argh_shared", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "argh_shared" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a464143cc82dedcdc3928737445362466b7674b5db4e2eb8e869846d6d84f4f6" -dependencies = [ - "serde", -] - [[package]] name = "hmon" version = "0.1.0" dependencies = [ - "argh", "json", ] @@ -47,64 +14,3 @@ name = "json" version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd" - -[[package]] -name = "proc-macro2" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rust-fuzzy-search" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a157657054ffe556d8858504af8a672a054a6e0bd9e8ee531059100c0fa11bb2" - -[[package]] -name = "serde" -version = "1.0.164" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.164" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "syn" -version = "2.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" diff --git a/Cargo.toml b/Cargo.toml index 5b99169..09cb7ea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,10 +3,7 @@ name = "hmon" version = "0.1.0" edition = "2024" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] -argh = "0.1.13" json = "0.12.4" [profile.release] diff --git a/src/main.rs b/src/main.rs index 52bd7e6..991d015 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,55 +1,89 @@ use core::panic; use json::JsonValue; -use std::process::Command; +use std::{env, process::Command}; + +const HELP: &str = r#"Usage: hmon + +query: + cpu Get CPU temperature + gpu Get GPU temperature +"#; fn main() { - let args = argh::from_env::(); - if args.query == "cpu" { - let sensors = get_json_command_result(Command::new("sensors").arg("-j")); - let cpu_temp = &sensors["k10temp-pci-00c3"]["Tctl"]["temp1_input"]; - let cpu_temp = json_to_int_value(cpu_temp); - println!("{}", cpu_temp); + let Some(args) = CliArgs::from_env() else { + eprintln!("{}", HELP); return; - } + }; - let gpu_temp = get_string_command_result( - Command::new("nvidia-smi") - .arg("--query-gpu=temperature.gpu") - .arg("--format=csv,noheader"), - ); - let gpu_temp = str_to_int_value(gpu_temp); - - println!("{}", gpu_temp); + match args.query { + HmonCmd::Cpu => { + let sensors = get_json_command_result(Command::new("sensors").arg("-j")); + let cpu_temp = &sensors["k10temp-pci-00c3"]["Tctl"]["temp1_input"]; + let cpu_temp = json_to_int_value(cpu_temp); + println!("{}", cpu_temp); + }, + HmonCmd::Gpu => { + let gpu_temp = get_string_command_result( + Command::new("nvidia-smi") + .arg("--query-gpu=temperature.gpu") + .arg("--format=csv,noheader"), + ); + let gpu_temp = str_to_int_value(gpu_temp); + println!("{}", gpu_temp); + } + }; } -/// Command line interface for querying system temperatures. -#[derive(argh::FromArgs)] -struct Cli { - /// query type, either "cpu" or "gpu" - #[argh(positional)] - query: String, +enum HmonCmd { + Cpu, + Gpu, +} + +struct CliArgs { + query: HmonCmd, +} + +impl CliArgs { + fn from_env() -> Option { + let mut args = env::args(); + if let None = args.next() { + panic!("Program was invoked in an unexpected way"); + }; + + if let Some(query) = args.next() { + let query = match query.as_str() { + "cpu" => Some(HmonCmd::Cpu), + "gpu" => Some(HmonCmd::Gpu), + _ => None, + }; + + let Some(query) = query else { + return None; + }; + + return Some(Self { query }); + }; + + None + } } fn json_to_int_value(number: &JsonValue) -> i64 { match number { - JsonValue::Number(_) => { - match number.as_f64() { - Some(x) => x as i64, - None => -1, - } - } + JsonValue::Number(_) => match number.as_f64() { + Some(x) => x as i64, + None => -1, + }, _ => -2, } } fn str_to_int_value(number: Option) -> i64 { match number { - Some(x) => { - match x.trim().parse::() { - Ok(y) => y, - Err(y) => panic!("{}", y), - } - } + Some(x) => match x.trim().parse::() { + Ok(y) => y, + Err(y) => panic!("{}", y), + }, None => -1, } } @@ -71,12 +105,10 @@ fn get_string_command_result(command: &mut Command) -> Option { fn get_json_command_result(command: &mut Command) -> JsonValue { let string_command_result = get_string_command_result(command); match string_command_result { - Some(x) => { - match json::parse(x.as_str()) { - Ok(x) => x, - Err(_) => JsonValue::new_object(), - } - } + Some(x) => match json::parse(x.as_str()) { + Ok(x) => x, + Err(_) => JsonValue::new_object(), + }, None => JsonValue::new_object(), } }