bar-rubble 0.5.2

Quickly generate output for viewing in swaybar or similar
Documentation
use crate::RubbleResult;
use glob::glob;
use serde_json::json;
use std::fs;

fn trim_newline(s: &mut String) {
    if s.ends_with('\n') {
        s.pop();
        if s.ends_with('\r') {
            s.pop();
        }
    }
}

pub fn mouse_battery_level() -> RubbleResult {
    for entry in
        glob("/sys/bus/hid/drivers/razermouse/*/charge_level").expect("failed to read glob")
    {
        match entry {
            Ok(path) => {
                let level = fs::read_to_string(path); //.unwrap_or(String::from("0"));
                let mut charge_string = match level {
                    Ok(r) => r,
                    Err(_) => String::from("0"),
                };
                trim_newline(&mut charge_string);
                let charge = charge_string.parse::<i32>().unwrap() * 100 / 255;
                let r = Ok(json!({
                  "charge": charge,
                }));
                return RubbleResult::new(r, default_format());
            }
            Err(_) => {
                return RubbleResult::new(Err("dunno how we got here".into()), default_format());
                // solve
                // this case
            }
        }
    }
    return RubbleResult::new(Err("no mouse found".into()), default_format());
}

crate::avaliable_formattings!("{{charge}}%", "charge");