changepacks_core/
language.rs

1use colored::Colorize;
2use std::fmt::Display;
3
4#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
5pub enum Language {
6    Python,
7    Node,
8    Rust,
9    Dart,
10}
11
12impl Display for Language {
13    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14        write!(
15            f,
16            "{}",
17            match self {
18                Language::Python => "Python".yellow().bold(),
19                Language::Node => "Node.js".green().bold(),
20                Language::Rust => "Rust".truecolor(139, 69, 19).bold(),
21                Language::Dart => "Dart".blue().bold(),
22            }
23        )
24    }
25}
26
27#[cfg(test)]
28mod tests {
29    use super::*;
30    use rstest::rstest;
31
32    #[rstest]
33    #[case(Language::Python, "Python")]
34    #[case(Language::Node, "Node")]
35    #[case(Language::Rust, "Rust")]
36    #[case(Language::Dart, "Dart")]
37    fn test_language_display(#[case] language: Language, #[case] expected: &str) {
38        let display = format!("{}", language);
39        assert!(display.contains(expected));
40    }
41}