diff --git a/src/lib.rs b/src/lib.rs index 72824bc..ff08a22 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,6 +26,8 @@ pub mod reset; pub mod agent; +pub mod symbols; + pub fn iwd_network_name(name: &str) -> String { match name .chars() diff --git a/src/symbols.rs b/src/symbols.rs new file mode 100644 index 0000000..58f6789 --- /dev/null +++ b/src/symbols.rs @@ -0,0 +1,46 @@ +use std::sync::OnceLock; + +static SYMBOL_RENDERER: OnceLock &'static str> = OnceLock::new(); + +pub enum Symbol { + Up, + Down, + Left, + Right, + Tab, + Enter, + Spacebar, + SignalStrength(u8), + Esc, +} + +pub fn render_unicode(sym: Symbol) -> &'static str { + match sym { + Symbol::Up => "↑", + Symbol::Esc => "󱊷", + } +} + +pub fn render_ascii(sym: Symbol) -> &'static str { + match sym { + Symbol::Up => "ARROW_UP", + Symbol::Esc => "ESC", + } +} + +pub fn render(sym: Symbol) -> &'static str { + SYMBOL_RENDERER + .get() + .expect("symbol renderer not initialized")(sym) +} + +pub fn init_renderer(use_unicode: bool) { + let renderer = if use_unicode { + render_unicode + } else { + render_ascii + }; + SYMBOL_RENDERER + .set(renderer) + .expect("symbol renderer already initialized"); +}