Skip to main content

fluidattacks_blends_domain/
language.rs

1//! Counterpart of the `Language` enum in `blends/models/__init__.py`.
2
3use crate::syntax::dispatchers::{self, Dispatcher};
4
5#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
6pub enum Language {
7    CSharp,
8    Elixir,
9    Go,
10    Hcl,
11    Java,
12    JavaScript,
13    Json,
14    Kotlin,
15    Php,
16    Python,
17    Ruby,
18    Rust,
19    Scala,
20    Swift,
21    TypeScript,
22    Yaml,
23}
24
25impl Language {
26    #[must_use]
27    pub fn from_extension(extension: &str) -> Option<Self> {
28        match extension {
29            "cs" => Some(Self::CSharp),
30            "ex" | "exs" => Some(Self::Elixir),
31            "go" => Some(Self::Go),
32            "hcl" | "tf" => Some(Self::Hcl),
33            "java" => Some(Self::Java),
34            "js" | "jsx" => Some(Self::JavaScript),
35            "json" => Some(Self::Json),
36            "kt" | "ktm" | "kts" => Some(Self::Kotlin),
37            "swift" => Some(Self::Swift),
38            "ts" | "tsx" => Some(Self::TypeScript),
39            "php" => Some(Self::Php),
40            "py" => Some(Self::Python),
41            "rb" => Some(Self::Ruby),
42            "rs" => Some(Self::Rust),
43            "scala" => Some(Self::Scala),
44            "yaml" | "yml" => Some(Self::Yaml),
45            _ => None,
46        }
47    }
48
49    pub(crate) fn syntax_dispatcher(self) -> Option<Dispatcher> {
50        match self {
51            Self::CSharp => Some(dispatchers::c_sharp::dispatcher),
52            Self::Java => Some(dispatchers::java::dispatcher),
53            Self::JavaScript => Some(dispatchers::javascript::dispatcher),
54            Self::Json => Some(dispatchers::json::dispatcher),
55            Self::Python => Some(dispatchers::python::dispatcher),
56            Self::TypeScript => Some(dispatchers::typescript::dispatcher),
57            Self::Yaml => Some(dispatchers::yaml::dispatcher),
58            _ => None,
59        }
60    }
61}