pomprt 0.6.1

A small yet feature-rich readline prompt
Documentation
// pomprt, a line editor prompt library
// Copyright (c) 2023 rini
//
// SPDX-License-Identifier: Apache-2.0

struct Rainbow;

impl pomprt::Editor for Rainbow {
    fn highlight(&self, buffer: &str) -> String {
        let mut colored = String::new();
        let colors = [196, 208, 220, 76, 26, 57];
        for (i, c) in buffer.chars().enumerate() {
            colored.push_str(&format!("\x1b[38;5;{}m{c}", colors[i % colors.len()]));
        }

        colored
    }
}

fn main() {
    let mut rainbow = pomprt::with(Rainbow, "><> ");

    loop {
        match rainbow.read() {
            Ok(input) => println!("\x1b[37m{input}"),
            Err(pomprt::Eof) => return println!("\x1b[31mctrl-d"),
            Err(pomprt::Interrupt) => return println!("\x1b[31mctrl-c"),
            Err(e) => return eprintln!("\x1b[31merror\x1b[m: {e}"),
        }
    }
}