use std::collections::HashMap;
#[allow(non_upper_case_globals)]
pub const ESCAPE_CHAR: &str = "\x01";
pub struct KshPromptRenderer;
impl KshPromptRenderer {
#[allow(non_upper_case_globals)]
pub const escape_hl_start: &'static str = "\x01";
#[allow(non_upper_case_globals)]
pub const escape_hl_end: &'static str = "\x01";
pub fn render_prefix() -> &'static str {
"\x01\r"
}
pub fn render<F>(super_render: F) -> String
where
F: FnOnce() -> String,
{
format!("{}{}", Self::render_prefix(), super_render())
}
pub fn character_translations() -> HashMap<char, &'static str> {
HashMap::new()
}
}
#[allow(non_camel_case_types)]
pub type renderer = KshPromptRenderer;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn ksh_uses_soh_for_both_markers() {
assert_eq!(KshPromptRenderer::escape_hl_start, "\x01");
assert_eq!(KshPromptRenderer::escape_hl_end, "\x01");
assert_eq!(ESCAPE_CHAR, "\x01");
}
#[test]
fn ksh_render_prefix_carries_soh_cr() {
assert_eq!(KshPromptRenderer::render_prefix(), "\x01\r");
}
#[test]
fn ksh_render_prepends_soh_cr_to_super_output() {
let result = KshPromptRenderer::render(|| "PROMPT".to_string());
assert_eq!(result, "\x01\rPROMPT");
}
#[test]
fn ksh_render_empty_super_yields_just_prefix() {
let result = KshPromptRenderer::render(String::new);
assert_eq!(result, "\x01\r");
}
}