use std::path::Path;
pub mod rust;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Language {
Rust,
Go,
Python,
JavaScript,
JavaScriptJSX, TypeScript,
TypeScriptTSX, Solidity,
Cairo, C, Cpp, Unknown,
}
impl Language {
pub fn from_path(path: &Path) -> Self {
path.extension()
.and_then(|ext| ext.to_str())
.and_then(Self::from_extension)
.unwrap_or(Language::Unknown)
}
pub fn from_extension(ext: &str) -> Option<Self> {
let lang = match ext {
"rs" => Language::Rust,
"go" => Language::Go,
"py" => Language::Python,
"js" | "mjs" => Language::JavaScript,
"jsx" => Language::JavaScriptJSX,
"ts" => Language::TypeScript,
"tsx" => Language::TypeScriptTSX,
"sol" => Language::Solidity,
"cairo" => Language::Cairo,
"c" | "h" => Language::C,
"cpp" | "cc" | "cxx" | "hpp" | "hxx" | "h++" => Language::Cpp,
_ => return None,
};
Some(lang)
}
}