aboutsummaryrefslogtreecommitdiff
path: root/src/print.rs
diff options
context:
space:
mode:
authorache <ache@ache.one>2026-08-04 09:43:58 +0200
committerache <ache@ache.one>2026-08-04 09:43:58 +0200
commitaecb7ac234ddb38772f3a968c3fa43ec3b507315 (patch)
tree8752022ffab608719305103b53209910801f20b4 /src/print.rs
Init commit
Diffstat (limited to 'src/print.rs')
-rw-r--r--src/print.rs96
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)
+}