Skip to main content

travsr_plugin_protocol/
language_map.rs

1use travsr_core::Language;
2
3/// Map a canonical proto language string to a Language variant.
4/// Case-sensitive. Returns None for unrecognised values.
5pub fn language_from_proto_str(s: &str) -> Option<Language> {
6    match s {
7        "typescript" | "javascript" => Some(Language::TypeScript),
8        "rust" => Some(Language::Rust),
9        "python" => Some(Language::Python),
10        "go" => Some(Language::Go),
11        "java" => Some(Language::Java),
12        "kotlin" => Some(Language::Kotlin),
13        "ruby" => Some(Language::Ruby),
14        "csharp" => Some(Language::CSharp),
15        "php" => Some(Language::Php),
16        _ => None,
17    }
18}
19
20pub fn language_to_proto_str(lang: Language) -> &'static str {
21    lang.as_str()
22}
23
24#[cfg(test)]
25mod tests {
26    use super::*;
27    #[test]
28    fn known_languages_round_trip() {
29        for (s, expected) in [
30            ("typescript", Language::TypeScript),
31            ("javascript", Language::TypeScript),
32            ("rust", Language::Rust),
33            ("python", Language::Python),
34            ("go", Language::Go),
35            ("java", Language::Java),
36            ("kotlin", Language::Kotlin),
37        ] {
38            assert_eq!(language_from_proto_str(s), Some(expected), "failed for {s}");
39        }
40    }
41    #[test]
42    fn unknown_language_returns_none() {
43        assert_eq!(language_from_proto_str("TypeScript"), None); // case-sensitive
44        assert_eq!(language_from_proto_str("Kotlin"), None); // case-sensitive
45        assert_eq!(language_from_proto_str(""), None);
46    }
47}