Skip to main content

changepacks_cli/options/
language_options.rs

1use changepacks_core::Language;
2use clap::ValueEnum;
3
4#[derive(ValueEnum, Debug, Clone, Copy, PartialEq, Eq)]
5pub enum CliLanguage {
6    Python,
7    Node,
8    Rust,
9    Dart,
10    Java,
11    CSharp,
12}
13
14impl From<CliLanguage> for Language {
15    fn from(value: CliLanguage) -> Self {
16        match value {
17            CliLanguage::Python => Self::Python,
18            CliLanguage::Node => Self::Node,
19            CliLanguage::Rust => Self::Rust,
20            CliLanguage::Dart => Self::Dart,
21            CliLanguage::Java => Self::Java,
22            CliLanguage::CSharp => Self::CSharp,
23        }
24    }
25}
26
27#[cfg(test)]
28mod tests {
29    use super::*;
30    use rstest::rstest;
31
32    #[rstest]
33    #[case(CliLanguage::Python, Language::Python)]
34    #[case(CliLanguage::Node, Language::Node)]
35    #[case(CliLanguage::Rust, Language::Rust)]
36    #[case(CliLanguage::Dart, Language::Dart)]
37    #[case(CliLanguage::Java, Language::Java)]
38    #[case(CliLanguage::CSharp, Language::CSharp)]
39    fn test_cli_language_to_language(#[case] cli_lang: CliLanguage, #[case] expected: Language) {
40        let result: Language = cli_lang.into();
41        assert_eq!(result, expected);
42    }
43}