use std::io::Write;
use crossterm::style::Color;
pub use crate::ui::widgets::draw_bar;
pub fn get_utilization_block(utilization: f64) -> (&'static str, Color) {
match utilization {
u if u >= 90.0 => ("█", Color::Red), u if u >= 80.0 => ("▇", Color::Magenta), u if u >= 70.0 => ("▆", Color::Yellow), u if u >= 60.0 => ("▅", Color::Yellow), u if u >= 50.0 => ("▄", Color::Green), u if u >= 40.0 => ("▃", Color::Green), u if u >= 30.0 => ("▂", Color::Cyan), u if u >= 20.0 => ("▁", Color::Cyan), u if u >= 10.0 => ("▁", Color::Blue), _ => ("▁", Color::DarkGrey), }
}
#[allow(dead_code)]
pub fn render_gauge<W: Write>(
stdout: &mut W,
label: &str,
value: f64,
max_value: f64,
width: usize,
_label_color: Color,
show_text: Option<String>,
) {
draw_bar(stdout, label, value, max_value, width, show_text);
}
#[allow(dead_code)]
pub const GAUGE_HIGH_COLOR: Color = Color::Red;
#[allow(dead_code)]
pub const GAUGE_MEDIUM_COLOR: Color = Color::Yellow;
#[allow(dead_code)]
pub const GAUGE_LOW_COLOR: Color = Color::Green;
#[allow(dead_code)]
pub const GAUGE_MINIMAL_COLOR: Color = Color::Blue;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_utilization_block() {
let (block, color) = get_utilization_block(95.0);
assert_eq!(block, "█");
assert_eq!(color, Color::Red);
let (block, color) = get_utilization_block(85.0);
assert_eq!(block, "▇");
assert_eq!(color, Color::Magenta);
let (block, color) = get_utilization_block(75.0);
assert_eq!(block, "▆");
assert_eq!(color, Color::Yellow);
let (block, color) = get_utilization_block(55.0);
assert_eq!(block, "▄");
assert_eq!(color, Color::Green);
let (block, color) = get_utilization_block(35.0);
assert_eq!(block, "▂");
assert_eq!(color, Color::Cyan);
let (block, color) = get_utilization_block(15.0);
assert_eq!(block, "▁");
assert_eq!(color, Color::Blue);
let (block, color) = get_utilization_block(5.0);
assert_eq!(block, "▁");
assert_eq!(color, Color::DarkGrey);
let (block, color) = get_utilization_block(0.0);
assert_eq!(block, "▁");
assert_eq!(color, Color::DarkGrey);
}
#[test]
fn test_render_gauge() {
use std::io::Cursor;
let mut buffer = Cursor::new(Vec::new());
render_gauge(
&mut buffer,
"Test",
50.0,
100.0,
20,
Color::Blue,
Some("50%".to_string()),
);
let output = String::from_utf8(buffer.into_inner()).unwrap();
assert!(output.contains("Test"));
}
}