use serde::Serializer;
use std::fmt;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum Language {
Ada,
AppleScript,
Assembly,
C,
Clojure,
ClojureScript,
Cobol,
CoffeeScript,
Cpp,
CSharp,
Css,
Dart,
Elixir,
Elm,
Erlang,
Fortran,
Go,
Groovy,
Handlebars,
Haskell,
Html,
Java,
JavaScript,
Json,
Julia,
Kotlin,
Less,
Lua,
Markdown,
Mustache,
ObjectiveC,
OCaml,
Pascal,
Perl,
Php,
Prolog,
ProtocolBuffer,
Python,
R,
Racket,
Rhai,
ReasonMl,
Ruby,
Rust,
Sass,
Scala,
Scheme,
Shell,
Sql,
Stylus,
Svelte,
Swift,
Toml,
TypeScript,
Vue,
WebAssembly,
Xml,
Yaml,
Zig,
}
impl Language {
pub fn as_str(&self) -> &'static str {
match self {
Language::Ada => "Ada",
Language::AppleScript => "AppleScript",
Language::Assembly => "Assembly",
Language::C => "C",
Language::Clojure => "Clojure",
Language::ClojureScript => "ClojureScript",
Language::Cobol => "COBOL",
Language::CoffeeScript => "CoffeeScript",
Language::Cpp => "C++",
Language::CSharp => "C#",
Language::Css => "CSS",
Language::Dart => "Dart",
Language::Elixir => "Elixir",
Language::Elm => "Elm",
Language::Erlang => "Erlang",
Language::Fortran => "Fortran",
Language::Go => "Go",
Language::Groovy => "Groovy",
Language::Handlebars => "Handlebars",
Language::Haskell => "Haskell",
Language::Html => "HTML",
Language::Java => "Java",
Language::JavaScript => "JavaScript",
Language::Json => "JSON",
Language::Julia => "Julia",
Language::Kotlin => "Kotlin",
Language::Less => "LESS",
Language::Lua => "Lua",
Language::Markdown => "Markdown",
Language::Mustache => "Mustache",
Language::ObjectiveC => "Objective-C",
Language::OCaml => "OCaml",
Language::Pascal => "Pascal",
Language::Perl => "Perl",
Language::Php => "PHP",
Language::Prolog => "Prolog",
Language::ProtocolBuffer => "ProtocolBuffer",
Language::Python => "Python",
Language::R => "R",
Language::Racket => "Racket",
Language::Rhai => "Rhai",
Language::ReasonMl => "ReasonML",
Language::Ruby => "Ruby",
Language::Rust => "Rust",
Language::Sass => "SASS",
Language::Scala => "Scala",
Language::Scheme => "Scheme",
Language::Shell => "Shell",
Language::Sql => "SQL",
Language::Stylus => "Stylus",
Language::Svelte => "Svelte",
Language::Swift => "Swift",
Language::Toml => "TOML",
Language::TypeScript => "TypeScript",
Language::Vue => "Vue",
Language::WebAssembly => "WebAssembly",
Language::Xml => "XML",
Language::Yaml => "YAML",
Language::Zig => "Zig",
}
}
}
impl serde::Serialize for Language {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_str(self.as_str())
}
}
impl fmt::Display for Language {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
fmt::Debug::fmt(self, f)
}
}
pub fn get_language(s: &str) -> Option<Language> {
Some(match s {
"adb" => Language::Ada,
"ads" => Language::Ada,
"applescript" => Language::AppleScript,
"asm" => Language::Assembly,
"c" => Language::C,
"cbl" => Language::Cobol,
"cc" => Language::Cpp,
"clj" => Language::Clojure,
"cljs" => Language::ClojureScript,
"cob" => Language::Cobol,
"coffee" => Language::CoffeeScript,
"cpp" => Language::Cpp,
"cpy" => Language::Cobol,
"cs" => Language::CSharp,
"css" => Language::Css,
"cxx" => Language::Cpp,
"dart" => Language::Dart,
"elm" => Language::Elm,
"erl" => Language::Erlang,
"ex" => Language::Elixir,
"exs" => Language::Elixir,
"f" => Language::Fortran,
"f90" => Language::Fortran,
"for" => Language::Fortran,
"go" => Language::Go,
"groovy" => Language::Groovy,
"gsh" => Language::Groovy,
"gvy" => Language::Groovy,
"gy" => Language::Groovy,
"h" => Language::C,
"handlebars" => Language::Handlebars,
"hbs" => Language::Handlebars,
"hh" => Language::Cpp,
"hpp" => Language::Cpp,
"hrl" => Language::Erlang,
"hs" => Language::Haskell,
"htm" => Language::Html,
"html" => Language::Html,
"hxx" => Language::Cpp,
"inc" => Language::Pascal,
"java" => Language::Java,
"jl" => Language::Julia,
"js" => Language::JavaScript,
"json" => Language::Json,
"jsx" => Language::JavaScript,
"kt" => Language::Kotlin,
"kts" => Language::Kotlin,
"less" => Language::Less,
"lua" => Language::Lua,
"m" => Language::ObjectiveC,
"md" => Language::Markdown,
"mjs" => Language::JavaScript,
"ml" => Language::OCaml,
"mli" => Language::OCaml,
"mustache" => Language::Mustache,
"p" => Language::Prolog,
"pas" => Language::Pascal,
"php" => Language::Php,
"pl" => Language::Perl,
"pm" => Language::Perl,
"pp" => Language::Pascal,
"pro" => Language::Prolog,
"proto" => Language::ProtocolBuffer,
"py" => Language::Python,
"r" => Language::R,
"rb" => Language::Ruby,
"re" => Language::ReasonMl,
"rhai" => Language::Rhai,
"rkt" => Language::Racket,
"rs" => Language::Rust,
"s" => Language::Assembly,
"sass" => Language::Sass,
"scala" => Language::Scala,
"scm" => Language::Scheme,
"scpt" => Language::AppleScript,
"scptd" => Language::AppleScript,
"scss" => Language::Sass,
"sh" => Language::Shell,
"sql" => Language::Sql,
"styl" => Language::Stylus,
"svelte" => Language::Svelte,
"swift" => Language::Swift,
"toml" => Language::Toml,
"ts" => Language::TypeScript,
"tsx" => Language::TypeScript,
"vue" => Language::Vue,
"wat" => Language::WebAssembly,
"xml" => Language::Xml,
"yaml" => Language::Yaml,
"yml" => Language::Yaml,
"zig" => Language::Zig,
_ => return None,
})
}