macro_rules! list {
($($variant:ident $(as $as:literal)?),* $(,)?) => {
#[derive(
strum::Display,
strum::AsRefStr,
strum::IntoStaticStr,
strum::EnumString,
strum::EnumVariantNames,
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,
$(
#[doc = concat!("(De)serialized as `", $($as, "`, **not** `",)? casey::lower!(stringify!($variant)), "`.")]
$(#[strum(serialize = $as)])?
$variant,
)*
}
};
}
list! {
A2ps,
A65,
Aap,
Abap,
Abaqus,
Abc,
Abel,
Acedb,
Ada,
Ahdl,
Aidl,
AlsaConf,
Aml,
Ampl,
Ant,
Apache,
ApacheStyle,
AppleScript,
AptConf,
Arch,
Arduino,
Art,
AsciiDoc,
Asm,
Asn,
AspPerl,
AspVbs,
Asterisk,
AsteriskVoiceMail as "asteriskvm",
Astro,
Atlas,
AutoHotKey,
AutoIt,
Automake,
Ave,
Awk,
B,
Bash,
Basic,
Bass,
Bat,
Bc,
Bdf,
BeanCount,
Bib,
Bicep,
Bindzone,
Bitbake,
Blank,
Blueprint,
Bsdl,
Bst,
Btm,
Bzl,
Bzr,
C,
Cabal,
CabalConfig,
CabalProject,
Cairo,
Calendar,
Capnp,
Catalog,
Cdc,
Cdl,
CdrdaoConf,
Cdrtoc,
Cf,
CfEngine,
Cfg,
Ch,
ChaiScript,
Change,
Changelog,
Chaskell,
Chatito,
Chill,
Chordpro,
Cl,
Clean,
Clipper,
Clojure,
CMake,
CMod,
Cmusrc,
Cobol,
Coco,
ConaryRecipe,
Conf,
Config,
ConfIni,
Context,
Cook,
Coq,
Corn,
Cpon,
Cpp,
Cqlang,
Crm,
Crontab,
Crystal,
Csc,
Csdl,
Csh,
CSharp,
Csp,
Css,
Csv,
CTerm,
Cucumber,
Cuda,
Cue,
Cupl,
Cuplsim,
Cvs,
Cvsrc,
Cweb,
Cynpp,
D,
Dart,
DataScript,
Dcd,
Dcl,
DebChangelog,
DebControl,
DebCopyright,
DebSources,
Def,
DenyHosts,
Dep3Patch,
Desc,
Desktop,
Dhall,
DictConf,
DictdConf,
Diff,
DirColors,
Diva,
DnsMasq,
DocBookSgml4 as "docbk-sgml-4",
DocBookXml4 as "docbk-xml-4",
DocBookXml5 as "docbk-xml-5",
Dockerfile,
DosBatch,
DosIni,
Dot,
Dracula,
Dsl,
Dtd,
DTrace,
Dts,
Dune,
Dylan,
DylanIntr,
DylanLid,
Ebnf,
Ecd,
Edif,
EditorConfig,
EElixir,
Eiffel,
Eighth,
EJavaScript,
Elf,
ELinks,
Elixir,
Elm,
ElmFilt,
Elsa,
Elvish,
EPuppet,
Erlang,
ERuby,
Esdl,
Esmtprc,
Esqlc,
Esterel,
Eterm,
Euphoria3,
Exim,
Expect,
Exports,
Factor,
Falcon,
Fan,
Fennel,
FetchMail,
Fgl,
Firrtl,
Fish,
Foam,
FocExec,
Form,
Forth,
Fortran,
FpcMake,
FrameScript,
FreeBasic,
Fsh,
FSharp,
FsTab,
Func,
Fusion,
Fvwm,
Fvwm1 as "fvwm-1",
Fvwm2 as "fvwm-2",
Fvwm2M4,
Gdb,
Gdmo,
GdResource,
GdScript,
GdShader,
Gedcom,
GemText,
Gift,
Git,
GitAttributes,
GitCommit,
GitConfig,
GitIgnore,
GitOlite,
GitRebase,
GitSendEmail,
Gkrellmrc,
Gleam,
Glsl,
Gnash,
GnuPlot,
Go,
GoMod,
GoSum,
GoWork,
Gp,
Gpg,
Grads,
GraphQl,
Gretl,
Groovy,
Group,
Grub,
Gsp,
Gtkrc,
Gyp,
Hack,
Haml,
Hamster,
Handlebars,
Hare,
Haskell,
Haste,
HastePreProc,
Hb,
Hcl,
Heex,
Hercules,
Hex,
HexDump,
Hgcommit,
HJson,
HlsPlaylist,
Hog,
Hollywood,
Hoon,
HostConf,
HostsAccess,
Html,
HtmlDjango,
HtmlM4,
HtTest,
I3Config,
IBasic,
IceMenu,
Icon,
Idl,
Idlang,
Indent,
Inform,
Initng,
InitTab,
InstallShield,
IpFilter,
Iss,
Ist,
J,
Jal,
Jam,
Java,
JavaCc,
JavaScript,
JavaScriptGlimmer as "javascript.glimmer",
Jess,
JGraph,
Jovial,
JProperties,
Jq,
Json,
Json5,
JsonC,
JsonL,
Jsonnet,
Jsp,
Jsx,
Julia,
KConfig,
Kdl,
Kivy,
Kix,
Kotlin,
Krl,
KScript,
Ksh,
Kwt,
Lace,
LambdaProlog,
Larch,
Latte,
Ld,
Ldif,
Lean,
Ledger,
Less,
Lex,
Lftp,
LHaskell,
Libao,
Lilo,
Lilypond,
Limits,
Liquid,
Lisp,
Lite,
LiteStep,
Livebook,
Llvm,
LogCheck,
LoginAccess,
LoginDefs,
Logtalk,
Lotos,
Lout,
Lpc,
Lsl,
Lss,
Lua,
Luau,
Lynx,
Lyrics,
M3Build,
M3Quake,
M4,
Mail,
MailAliases,
MailCap,
Make,
Mallard,
ManConf,
Map,
Maple,
Markdown,
Mason,
Master,
Matlab,
Maxima,
Mel,
Mermaid,
Meson,
Messages,
Mf,
Mgl,
Mgp,
Mib,
Mix,
Mma,
Mmix,
Mmp,
ModConf,
Modsim3,
Modula2,
Modula3,
Monk,
Moo,
MoonScript,
Move,
Mp,
MPlayerConf,
MpMetafun as "mp-metafun",
Mrxvtrc,
Msidl,
MsMessages,
Msql,
Mupad,
Murphi,
Mush,
Muttrc,
MySql,
N1ql,
Named,
Nanorc,
Natural,
Ncf,
Neomuttrc,
Netrc,
Nginx,
Nim,
Ninja,
Nix,
Nqc,
Nroff,
Nsis,
Nu,
Obj,
ObjC,
ObjCpp,
Obse,
OCaml,
OCamlInterface,
Occam,
Octave,
Odin,
OmniMark,
Opam,
OpenRoad,
OpenScad,
OpenVpn,
Opl,
Ora,
Org,
PamConf,
PamEnv,
Papp,
Pascal,
Passwd,
Pbtxt,
Pccts,
Pcmk,
Pdf,
Pem,
Perl,
Pf,
PfMain,
Php,
Pike,
Pilrc,
Pine,
PInfo,
PlainTex,
Pli,
Plm,
Plp,
Plsql,
Po,
Pod,
PoeFilter,
Poke,
Pony,
Postscr,
Pov,
PovIni,
Ppd,
Ppwiz,
Prisma,
Privoxy,
Proc,
ProcMail,
Progress,
Prolog,
Promela,
Proto,
Protocols,
Prql,
Ps1,
Ps1Xml,
Psf,
Psl,
PtcapPrint as "ptcap-print",
PtcapTerm as "ptcap-term",
Pug,
Puppet,
Pyret,
Pyrex,
Python,
Qb64,
Ql,
QmlDir,
Quake,
Quarto,
R,
Racc,
Racket,
Radiance,
Raku,
Raml,
Rapid,
RatPoison,
Rbs,
Rc,
Rcs,
Readline,
Rebol,
Redif,
Registry,
Rego,
Remind,
ReScript,
Resolv,
Reva,
Rexx,
RHelp,
Rib,
Rmd,
Rnc,
Rng,
Rnoweb,
Robot,
Robots,
Ron,
RouterOs,
Rpcgen,
Rpgle,
Rpl,
Rrst,
Rst,
Rtf,
Ruby,
Rush,
Rust,
Sage,
Samba,
Sas,
Sass,
Sather,
Sbt,
Scala,
Scdoc,
Scheme,
Scilab,
Screen,
Scss,
Sd,
Sdc,
Sdl,
Sed,
Sensors,
Services,
SetSerial,
Sexplib,
Sgml,
SgmlDecl,
Sh,
Sieve,
Sil,
Sile,
Simula,
Sinda,
Sisu,
Skill,
Slang,
Slice,
SlpConf,
SlpReg,
SlpSpi,
Slrnrc,
Slrnsc,
Sm,
Smali,
Smarty,
Smcl,
Smgllnx,
Smil,
Smith,
Smithy,
Sml,
Snobol4,
Solidity,
Solution,
Sparql,
Spec,
SpecMan,
Spice,
Spup,
Spyce,
Sql,
Sqlj,
Sqr,
Squid,
Squirrel,
Srec,
Srt,
Ssa,
SshConfig,
SshdConfig,
St,
Starlark,
Stata,
Stp,
Structurizr,
Sudoers,
Supercollider,
Surface,
Svelte,
Svg,
Svn,
SwayConfig,
Swift,
SwiftGyb,
Sysctl,
Systemd,
SystemVerilog,
Tablegen,
Tads,
Tags,
Tak,
Tal,
TaskData,
TaskEdit,
Tcl,
Tcsh,
Teal,
Template,
Teraterm,
Terminfo,
Terraform,
TerraformVars as "terraform-vars",
Tex,
TexInfo,
TexMF,
Tf,
Thrift,
Tidy,
Tilde,
Tla,
Tli,
Tmux,
Toml,
Tpp,
Trace32,
Trasys,
TreeSitterQuery as "query",
Treetop,
Trustees,
Tsalt,
Tsscl,
Tssgm,
Tssop,
Tsv,
Tsx,
Turtle,
Tutor,
Twig,
TypeScript,
TypeScriptGlimmer as "typescript.glimmer",
Typst,
Uc,
UdevConf,
UdevPerm,
UdevRules,
Uil,
Ungrammar,
UpdateDb,
Upstart,
UpstreamDat,
UpstreamInstallLog,
UpstreamLog,
UrlShortcut,
Ursa,
Usd,
UsServerLog,
Usw2KagtLog,
V,
Vala,
Vb,
Vdf,
Vdmpp,
Vdmrt,
Vdmsl,
Vera,
Verilog,
Verilogams,
Vgrindefs,
Vhdl,
Vhs,
Vim,
VimHelp as "help",
VimInfo,
Virata,
Vmasm,
Voscm,
Vrml,
Vroom,
Vue,
Wast,
Wat,
Wdl,
Web,
WebMacro,
Wget,
Wget2,
WinBatch,
Wit,
Wml,
Wsh,
Wsml,
WvDial,
Xbl,
XDefaults,
XF86Conf,
XF86Conf3 as "xf86conf-3",
XF86Conf4 as "xf86conf-4",
Xhtml,
Xinetd,
XMath,
Xml,
XModMap,
Xpm,
Xpm2,
XQuery,
Xs,
Xsd,
Xslt,
Yacc,
Yaml,
Yang,
Yuck,
Z8a,
Zig,
Zimbu,
ZimbuTempl,
Zir,
Zserio,
Zsh,
}