macro_rules! list {
($($(#[$($attr:meta),+])? $variant:ident $(as $as:literal)?),* $(,)?) => {
#[derive(
strum::Display,
strum::AsRefStr,
strum::IntoStaticStr,
strum_macros::EnumString,
strum_macros::VariantNames,
Clone,
Copy,
Debug,
Hash,
PartialEq,
Eq,
Default,
)]
#[strum(serialize_all = "lowercase", use_phf)]
#[cfg_attr(
feature = "serde",
derive(serde_with::SerializeDisplay, serde_with::DeserializeFromStr)
)]
#[non_exhaustive]
pub enum FileType {
#[default]
Text,
$(
$(#[$($attr),+])?
#[doc = concat!("(De)serialized as `", $($as, "`, **not** `",)? casey::lower!(stringify!($variant)), "`")]
$(#[strum(serialize = $as)])?
$variant,
)*
}
};
}
list! {
Eighth as "8th",
A2ps,
A65,
Aap,
Abap,
Abaqus,
Abc,
Abel,
Abnf,
Acedb,
Actionscript,
Ada,
Agda,
Ahdl,
Aidl,
AlsaConf,
Aml,
Ampl,
Ant,
Antlr4,
Apache,
ApacheStyle,
Apex,
Apkbuild,
AppleScript,
AptConf,
Arch,
Arduino,
Art,
AsciiDoc,
Asm,
M68k as "asm68k",
Asn,
AspPerl,
AspVbs,
Asterisk,
AsteriskVoiceMail as "asteriskvm",
Astro,
Asy,
Atlas,
Authzed,
AutoHotKey,
AutoIt,
Automake,
Autopkgtest,
Ave,
Awk,
B,
Bash,
Basic,
Bass,
Bat,
Bc,
Bdf,
BeanCount,
Bib,
Bicep,
BicepParams as "bicep-params",
Bindzone,
Bitbake,
Blade,
Blank,
Blueprint,
Bp,
Bpftrace,
Brighterscript,
Brightscript,
Bsdl,
Bst,
Btm,
Bzl,
Bzr,
C,
C3,
Cabal,
CabalConfig,
CabalProject,
Caddy,
Cairo,
Calendar,
Cangjie,
Capnp,
Catalog,
Cdc,
Cdl,
CdrdaoConf,
Cdrtoc,
Cedar,
Cf,
CfEngine,
Cfg,
Cgdbrc,
Ch,
ChaiScript,
Change,
Changelog,
Chaskell,
Chatito,
Chill,
Chordpro,
Chuck,
Circom,
Cl,
Clarity,
Clean,
Clipper,
Clojure,
CMake,
CMakeCache,
CMod,
Cmusrc,
Cobol,
Coco,
Codeowners,
Comment,
ConaryRecipe,
Conf,
Config,
Context,
Cook,
Coq,
Corn,
Cpon,
Cpp,
Cqlang,
Crm,
Crontab,
Crystal,
Csc,
Csdl,
Csh,
#[strum(serialize = "cs")]
CSharp as "csharp",
Csp,
Css,
Csv,
CTerm,
Cucumber,
Cuda,
Cue,
Cupl,
Cuplsim,
Cvs,
Cvsrc,
Cweb,
Cylc,
Cynpp,
Cypher,
D,
Dafny,
Dart,
DataScript,
Dax,
Dcd,
Dcl,
DebSources as "deb822sources",
DebChangelog,
DebControl,
DebCopyright,
Def,
DenyHosts,
Dep3Patch,
Desc,
Desktop,
Dhall,
DictConf,
DictdConf,
DirColors,
Disassembly,
Diva,
Djot,
DnsMasq,
DocBookSgml4 as "docbk-sgml-4",
DocBookXml4 as "docbk-xml-4",
DocBookXml5 as "docbk-xml-5",
Docbookxml4,
Docbookxml5,
Dockerfile,
DosBatch,
DosIni,
Dot,
Doxygen,
Dracula,
Dsl,
Dtd,
DTrace,
Dts,
Dune,
Dylan,
DylanIntr,
DylanLid,
Earthfile,
Ebnf,
Ecd,
Edif,
EditorConfig,
Eds,
EElixir,
Eiffel,
EJavaScript,
Ejs,
Elf,
ELinks,
Elisp,
Elixir,
Elm,
ElmFilt,
Elsa,
Elvish,
Enforce,
EPuppet,
Erlang,
ERuby,
Esdl,
Esmtprc,
Esqlc,
Esterel,
Eterm,
Euphoria3,
Execline,
Exim,
Expect,
Exports,
Factor,
Falcon,
Fan,
Faust,
Fennel,
FetchMail,
Fga,
Fgl,
Fidl,
Firrtl,
Fish,
Flix,
Fluent,
Foam,
FocExec,
Form,
Forth,
Fortran,
FpcMake,
FrameScript,
FreeBasic,
Facility as "fsd",
Fsh,
FSharp,
FsTab,
Func,
Fusion,
Fvwm,
Fvwm1 as "fvwm-1",
Fvwm2 as "fvwm-2",
Fvwm2M4,
Gap,
Gaptst,
Gdb,
Gdmo,
GdResource,
GdScript,
GdShader,
Gdshader as "gdshaderinc",
Gedcom,
Gel,
GemText,
Gift,
Git,
GitAttributes,
GitCommit,
GitConfig,
#[strum(serialize = "diff")]
Diff as "gitdiff",
GitIgnore,
GitOlite,
GitRebase,
GitSendEmail,
Gkrellmrc,
Gleam,
Glsl,
Gn,
Gnash,
GnuPlot,
Go,
Goaccess,
Goctl,
GoMod,
GoSum,
Gotmpl,
GoWork,
Gp,
Gpg,
Grads,
GraphQl,
Gren,
Gretl,
Groff,
Groovy,
Groq,
Group,
Grub,
Gsp,
Gstlaunch,
Gtkrc,
Gyp,
Hack,
Haml,
Hamster,
Handlebars,
Hare,
Haskell,
HaskellPersistent,
Haste,
HastePreProc,
Haxe,
Hb,
Hcl,
Heex,
Helm,
VimHelp as "help",
Hercules,
Hex,
HexDump,
Hgcommit,
HJson,
Hlsl,
HlsPlaylist,
Hocon,
Hog,
Hollywood,
Hoon,
HostConf,
HostsAccess,
Html,
Angular as "htmlangular",
HtmlDjango,
HtmlM4,
HtTest,
Http,
Hurl,
Hy,
Hylo,
Hyprlang,
I3Config,
IBasic,
IceMenu,
Icon,
Idl,
Idlang,
Idris as "idris2",
Indent,
Inform,
ConfIni as "ini",
Initng,
InitTab,
Inko,
InstallShield,
IpFilter,
Ipkg,
Ispc,
Iss,
Ist,
J,
Jal,
Jam,
JanetSimple as "janet",
Java,
JavaCc,
Javadoc,
JavaScript,
JavaScriptGlimmer as "javascript.glimmer",
Jess,
JGraph,
Jinja,
JinjaInline as "jinja_inline",
Jjdescription,
Jovial,
JProperties,
Jq,
Jsdoc,
Json,
Json5,
JsonC,
JsonL,
Jsonnet,
Jsp,
#[strum(serialize = "javascriptreact")]
Jsx as "jsx",
Julia,
Just,
Karel,
Kcl,
KConfig,
Kdl,
Kerml,
Kitty,
Kivy,
Kix,
Koka,
Kos,
Kotlin,
Koto,
Krl,
KScript,
Ksh,
Kusto,
Kwt,
Lace,
Lalrpop,
LambdaProlog,
Larch,
Latte,
Ld,
Ldapconf,
Ldif,
Lean,
Ledger,
Leex,
Leo,
Less,
Lex,
Lf,
Lftp,
LHaskell,
Libao,
Lidris2,
Lilo,
Lilypond,
Limits,
Liquid,
Liquidsoap,
Lisp,
Lite,
LiteStep,
Livebook,
Llvm,
LogCheck,
LoginAccess,
LoginDefs,
Logtalk,
Lotos,
Lout,
Lpc,
Lsl,
Lss,
Lua,
Luadoc,
Luap,
Luau,
Lynx,
Lyrics,
M17ndb,
M2,
M3Build,
M3Quake,
M4,
Magik,
Mail,
MailAliases,
MailCap,
Make,
Mallard,
ManConf,
Map,
Maple,
Markdown,
MarkdownInline as "markdown_inline",
Masm,
Mason,
Master,
Matlab,
Maxima,
Mbsync,
Mediawiki,
Mel,
Menhir,
Mermaid,
Meson,
Messages,
Mf,
Mgl,
Mgp,
Mi,
Mib,
Mix,
Mlir,
Mma,
Mmix,
Mmp,
ModConf,
Modsim3,
Modula2,
Modula3,
Mojo,
Monk,
Moo,
MoonScript,
Move,
Mp,
MpMetafun as "mp-metafun",
MPlayerConf,
Mrxvtrc,
Msidl,
MsMessages,
Msmtp,
Msql,
Mss,
Mupad,
Murphi,
Mush,
Mustache,
Muttrc,
MySql,
N1ql,
Named,
Nanorc,
Nasm,
Natural,
Ncf,
Neomuttlog,
Neomuttrc,
Netlinx,
Netrc,
Nginx,
Nickel,
Nim,
NimFormatString as "nim_format_string",
Ninja,
Nix,
Norg,
Nq,
Nqc,
Nroff,
Nsis,
Ntriples,
Nu,
Numbat,
Obj,
ObjC,
ObjCpp,
Objdump,
Obse,
OCaml,
OCamlInterface,
Ocamllex,
Occam,
Octave,
Odin,
OmniMark,
Ondir,
Opam,
OpenRoad,
OpenScad,
OpenVpn,
Opl,
Ora,
Org,
PamConf,
PamEnv,
Pandoc,
Papp,
Pascal,
Passwd,
Pbtxt,
Pccts,
Pcmk,
Pdf,
Pem,
Perl,
Pf,
PfMain,
Pgn,
Php,
PhpOnly as "php_only",
Phpdoc,
Pike,
Pilrc,
Pine,
PInfo,
Pioasm,
Pkl,
PlainTex,
Pli,
Plm,
Plp,
Plsql,
Po,
Pod,
PoeFilter,
Poke,
Pony,
Postscr,
Pov,
PovIni,
Ppd,
Ppwiz,
Pq,
Printf,
Prisma,
Privoxy,
Problog,
Proc,
ProcMail,
Progress,
Prolog,
Promela,
Promql,
Proto,
Protocols,
Prql,
Ps1,
Ps1Xml,
Psf,
Psl,
Psv,
PtcapPrint as "ptcap-print",
PtcapTerm as "ptcap-term",
Ptx,
Pug,
Puppet,
Purescript,
Pymanifest,
Pyret,
Pyrex,
Python,
Qb64,
Ql,
Qmljs as "qml",
QmlDir,
Quake,
Quarto,
TreeSitterQuery as "query",
Quickbms,
R,
Racc,
Racket,
Radiance,
Raku,
Ralph,
Raml,
Rapid,
Rasi,
RatPoison,
Razor,
Rbs,
Rc,
Rcs,
Re2c,
Readline,
Rebol,
Redif,
Regex,
Registry,
Rego,
Remind,
Requirements,
ReScript,
Resolv,
Reva,
Rexx,
RHelp,
Rib,
Rifleconf,
Rmd,
Rnc,
Rng,
Rnoweb,
Robot,
Robots,
Roc,
Ron,
RouterOs,
Rpcgen,
Rpgle,
Rpl,
Rrst,
Rst,
Rtf,
Ruby,
Runescript,
Rush,
Rust,
Sage,
Salt,
Samba,
Sas,
Sass,
Sather,
Sbt,
Scala,
Scdoc,
Scfg,
Scheme,
Scilab,
Screen,
Scss,
Sd,
Sdc,
Sdl,
Sed,
Sensors,
Services,
SetSerial,
Sexplib,
Surface as "sface",
Sflog,
Sgml,
SgmlDecl,
Sh,
Slang as "shaderslang",
Sieve,
Sil,
Sile,
Simula,
Sinda,
Sisu,
Skill,
Slice,
Slim,
Slint,
SlpConf,
SlpReg,
SlpSpi,
Slrnrc,
Slrnsc,
Sm,
Smali,
Smarty,
Smcl,
Smgllnx,
Smil,
Smith,
Smithy,
Sml,
Snakemake,
Snobol4,
Solidity,
Solution,
Soql,
Sosl,
Sourcepawn,
Soy,
Spajson,
Sparql,
Spec,
SpecMan,
Spice,
Sproto,
Spup,
Spyce,
Sql,
Sqlj,
Sqr,
Squid,
Squirrel,
Srec,
Srt,
Ssa,
SshConfig,
SshdConfig,
St,
Starlark,
Stata,
Stp,
Strace,
Structurizr,
Styled,
Stylus,
Sudoers,
Supercollider,
Superhtml,
Svelte,
Svg,
Svn,
Sway,
SwayConfig,
Swift,
SwiftGyb,
Swig,
Sxhkdrc,
Sysctl,
Sysml,
Systemd,
Systemtap,
SystemVerilog,
Tablegen,
Tact,
Tads,
Tags,
Tak,
Tal,
Vhs as "tape",
TaskData,
TaskEdit,
Tcl,
Tcsh,
Teal,
Templ,
Template,
Tera,
Teraterm,
Terminfo,
Terraform,
TerraformVars as "terraform-vars",
Tex,
TexInfo,
TexMF,
Tf,
Thrift,
Tiasm,
Tidy,
Tiger,
Tilde,
Tiltfile,
Tla,
Tli,
Tmux,
Todotxt,
Toml,
Tpp,
Trace32,
Trasys,
Treetop,
Trig,
Trustees,
Tsalt,
Tsscl,
Tssgm,
Tssop,
Tsv,
#[strum(serialize = "typescriptreact")]
Tsx as "tsx",
Turtle,
Tutor,
Twig,
TypeScript,
TypeScriptGlimmer as "typescript.glimmer",
Typespec,
Typoscript,
Typst,
Uc,
UdevConf,
UdevPerm,
UdevRules,
Uil,
Ungrammar,
Unison,
UpdateDb,
Upstart,
UpstreamDat,
UpstreamInstallLog,
UpstreamLog,
UrlShortcut,
Ursa,
Usd,
UsServerLog,
Usw2KagtLog,
V,
Vala,
Vb,
Vdf,
Vdmpp,
Vdmrt,
Vdmsl,
Vera,
Verilog,
Verilogams,
Vgrindefs,
Vh,
Vhdl,
Vim,
Vimhelp,
VimInfo,
Virata,
Vlg,
Vmasm,
Voscm,
Vrl,
Vrml,
Vroom,
Vento as "vto",
Vue,
Wast,
Wat,
Wdl,
Web,
WebMacro,
Wget,
Wget2,
Wgsl,
WgslBevy as "wgsl_bevy",
WinBatch,
Wing,
Wit,
Wml,
Wsh,
Wsml,
WvDial,
Wxml,
Xbl,
Xcompose,
XDefaults,
XF86Conf,
XF86Conf3 as "xf86conf-3",
XF86Conf4 as "xf86conf-4",
Xf86conf3,
Xhtml,
Xinetd,
XMath,
Xml,
XModMap,
Xpm,
Xpm2,
XQuery,
Xs,
Xsd,
Xslt,
Yacc,
Yaml,
Yang,
Yasm,
Yuck,
Z8a,
Zathurarc,
Zig,
Ziggy,
ZiggySchema as "ziggy_schema",
Zimbu,
ZimbuTempl,
Zir,
Zserio,
Zsh,
}