// 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) { 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) }