migrated daemon to tokio with seperate hardware threads + thiserror

This commit is contained in:
2026-04-01 16:49:03 +02:00
parent 6fa14c0b84
commit ed0051f2c9
19 changed files with 517 additions and 333 deletions
+18 -16
View File
@@ -1,20 +1,22 @@
use crate::config::Config;
use crate::error::Result;
use crate::modules::WaybarModule;
use crate::output::WaybarOutput;
use crate::state::SharedState;
use crate::utils::{TokenValue, format_template};
use anyhow::Result;
pub struct MemoryModule;
impl WaybarModule for MemoryModule {
fn run(&self, config: &Config, state: &SharedState, _args: &[&str]) -> Result<WaybarOutput> {
async fn run(
&self,
config: &Config,
state: &SharedState,
_args: &[&str],
) -> Result<WaybarOutput> {
let (used_gb, total_gb) = {
if let Ok(state_lock) = state.read() {
(state_lock.memory.used_gb, state_lock.memory.total_gb)
} else {
(0.0, 0.0)
}
let state_lock = state.read().await;
(state_lock.memory.used_gb, state_lock.memory.total_gb)
};
let ratio = if total_gb > 0.0 {
@@ -53,8 +55,8 @@ mod tests {
use super::*;
use crate::state::{AppState, MemoryState, mock_state};
#[test]
fn test_memory_normal() {
#[tokio::test]
async fn test_memory_normal() {
let state = mock_state(AppState {
memory: MemoryState {
used_gb: 8.0,
@@ -63,15 +65,15 @@ mod tests {
..Default::default()
});
let config = Config::default();
let output = MemoryModule.run(&config, &state, &[]).unwrap();
let output = MemoryModule.run(&config, &state, &[]).await.unwrap();
assert!(output.text.contains("8.00"));
assert!(output.text.contains("32.00"));
assert_eq!(output.class.as_deref(), Some("normal"));
assert_eq!(output.percentage, Some(25)); // 8/32 = 25%
}
#[test]
fn test_memory_high() {
#[tokio::test]
async fn test_memory_high() {
let state = mock_state(AppState {
memory: MemoryState {
used_gb: 26.0,
@@ -80,12 +82,12 @@ mod tests {
..Default::default()
});
let config = Config::default();
let output = MemoryModule.run(&config, &state, &[]).unwrap();
let output = MemoryModule.run(&config, &state, &[]).await.unwrap();
assert_eq!(output.class.as_deref(), Some("high")); // 81%
}
#[test]
fn test_memory_zero_total() {
#[tokio::test]
async fn test_memory_zero_total() {
let state = mock_state(AppState {
memory: MemoryState {
used_gb: 0.0,
@@ -94,7 +96,7 @@ mod tests {
..Default::default()
});
let config = Config::default();
let output = MemoryModule.run(&config, &state, &[]).unwrap();
let output = MemoryModule.run(&config, &state, &[]).await.unwrap();
assert_eq!(output.class.as_deref(), Some("normal"));
assert_eq!(output.percentage, Some(0));
}