chatty-rs 0.0.1-alpha1

A terminal-based chat client for OpenAI's GPT models.
Documentation
use once_cell::sync::Lazy;
use ratatui::style::Color;
use syntect::parsing::{SyntaxReference, SyntaxSet};

pub static SYNTAX_SET: Lazy<SyntaxSet> = Lazy::new(Syntaxes::load);

pub struct Syntaxes;

impl Syntaxes {
    fn load() -> SyntaxSet {
        SyntaxSet::load_defaults_newlines()
    }

    pub fn get(name: &str) -> &SyntaxReference {
        if let Some(syntax) = SYNTAX_SET.find_syntax_by_extension(name) {
            return syntax;
        }

        if let Some(syntax) = SYNTAX_SET.find_syntax_by_name(name) {
            return syntax;
        }

        if let Some(syntax) = SYNTAX_SET.find_syntax_by_token(name) {
            return syntax;
        }

        SYNTAX_SET.find_syntax_plain_text()
    }

    pub fn list() -> Vec<String> {
        let mut list = SYNTAX_SET
            .syntaxes()
            .iter()
            .map(|s| s.name.clone())
            .collect::<Vec<String>>();
        list.sort();
        list
    }

    pub fn translate_colour(synntect_color: syntect::highlighting::Color) -> Option<Color> {
        let syntect::highlighting::Color { r, g, b, .. } = synntect_color;
        Some(Color::Rgb(r, g, b))
    }
}