diff options
| author | ache <ache@ache.one> | 2026-08-04 09:43:58 +0200 |
|---|---|---|
| committer | ache <ache@ache.one> | 2026-08-04 09:43:58 +0200 |
| commit | aecb7ac234ddb38772f3a968c3fa43ec3b507315 (patch) | |
| tree | 8752022ffab608719305103b53209910801f20b4 /src/print.rs | |
Init commit
Diffstat (limited to 'src/print.rs')
| -rw-r--r-- | src/print.rs | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/print.rs b/src/print.rs new file mode 100644 index 0000000..9d71a78 --- /dev/null +++ b/src/print.rs @@ -0,0 +1,96 @@ +// src/print.rs + +use crate::state::State; + +struct SymbolTableElement { + fg: &'static str, + bg: &'static str, + character: &'static str, +} + +const GREEN_FG :&str = "\x1b[32m"; +const ORANGE_FG:&str = "\x1b[38;5;208m"; +const RED_FG:&str = "\x1b[31m"; +const BLACK_FG:&str = "\x1b[31m"; +const BLACK_BG:&str = "\x1b[40m"; +const GREEN_BG:&str = "\x1b[40m"; +const ORANGE_BG:&str = "\x1b[48;5;208m"; +const RESET :&str= "\x1b[40m"; + +const CHARS_TABLE :[SymbolTableElement; 25] = [ + SymbolTableElement{ fg: GREEN_FG, bg: BLACK_BG, character: "▁"}, + SymbolTableElement{ fg: GREEN_FG, bg: BLACK_BG, character: "▂"}, + SymbolTableElement{ fg: GREEN_FG, bg: BLACK_BG, character: "▃"}, + SymbolTableElement{ fg: GREEN_FG, bg: BLACK_BG, character: "▄"}, + SymbolTableElement{ fg: GREEN_FG, bg: BLACK_BG, character: "▅"}, + SymbolTableElement{ fg: GREEN_FG, bg: BLACK_BG, character: "▆"}, + SymbolTableElement{ fg: GREEN_FG, bg: BLACK_BG, character: "▇"}, + SymbolTableElement{ fg: GREEN_FG, bg: BLACK_BG, character: "█"}, + SymbolTableElement{ fg: ORANGE_FG, bg: GREEN_BG, character: "▁"}, + SymbolTableElement{ fg: ORANGE_FG, bg: GREEN_BG, character: "▂"}, + SymbolTableElement{ fg: ORANGE_FG, bg: GREEN_BG, character: "▃"}, + SymbolTableElement{ fg: ORANGE_FG, bg: GREEN_BG, character: "▄"}, + SymbolTableElement{ fg: ORANGE_FG, bg: GREEN_BG, character: "▅"}, + SymbolTableElement{ fg: ORANGE_FG, bg: GREEN_BG, character: "▆"}, + SymbolTableElement{ fg: ORANGE_FG, bg: GREEN_BG, character: "▇"}, + SymbolTableElement{ fg: ORANGE_FG, bg: GREEN_BG, character: "█"}, + SymbolTableElement{ fg: RED_FG, bg: ORANGE_BG, character: "▁"}, + SymbolTableElement{ fg: RED_FG, bg: ORANGE_BG, character: "▂"}, + SymbolTableElement{ fg: RED_FG, bg: ORANGE_BG, character: "▃"}, + SymbolTableElement{ fg: RED_FG, bg: ORANGE_BG, character: "▄"}, + SymbolTableElement{ fg: RED_FG, bg: ORANGE_BG, character: "▅"}, + SymbolTableElement{ fg: RED_FG, bg: ORANGE_BG, character: "▆"}, + SymbolTableElement{ fg: RED_FG, bg: ORANGE_BG, character: "▇"}, + SymbolTableElement{ fg: RED_FG, bg: ORANGE_BG, character: "█"}, + SymbolTableElement{ fg: RED_FG, bg: BLACK_BG, character: "?"} +]; + +pub fn print_info_line() { + for n in 0..24 { + let (fg, bg, symbol) = get_symbol_and_colors_for_rrt(n as u64); + print!("{} {}{}{}\x1b033[0m ", n*10, fg, bg, symbol); + } +} + +pub fn print_legende_line() { + for (index, element) in CHARS_TABLE.iter().enumerate() { + let val = 10 * index as u64; + print!("{} {}{}{}\x1b[0m ", val, element.fg, element.bg, element.character); + } + println!(""); +} + +pub fn print_ping_line(states: &Vec<State>) { + for state in states { + match state { + State::Received { rtt, .. } => { + let (fg, bg, symbol) = get_symbol_and_colors_for_rrt(*rtt); + print!("{}{}{}{}", fg, bg, symbol, "\x1b[0m"); + } + State::Lost => { + let (fg, bg, symbol) = get_symbol_and_colors_for_rrt(250); + print!("{}{}{}{}", fg, bg, symbol, "\x1b[0m"); + } + State::NotYetReceived { .. } => { + // fg grey, bg black + print!("\x1b[35;40m?\x1b[0m"); + } + State::SendError => { + print!("!"); + } + } + } + + println!(""); +} + +fn get_symbol_and_colors_for_rrt(rrt: u64) -> (&'static str, &'static str, &'static str) { + let index: usize = if rrt >= 240 { + 24 + } else { + rrt / 10 + } as usize; + let SymbolTableElement{fg, bg, character} = CHARS_TABLE[index]; + + (fg, bg, character) +} |