From 7a0256cfb924e309c268ac81335065ff3134c67b Mon Sep 17 00:00:00 2001 From: Julien Cretin <cretin@google.com> Date: Mon, 1 Jul 2024 17:40:48 +0200 Subject: [PATCH] Only use one content type per target label --- rust/cli/src/main.rs | 107 ++-- rust/gen/src/main.rs | 71 ++- rust/lib/src/label.rs | 1049 ++++++++++++++++++---------------------- rust/lib/src/output.rs | 26 +- 4 files changed, 562 insertions(+), 691 deletions(-) diff --git a/rust/cli/src/main.rs b/rust/cli/src/main.rs index d34e348b..cf9de5e5 100644 --- a/rust/cli/src/main.rs +++ b/rust/cli/src/main.rs @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +use std::borrow::Cow; use std::fmt::Write; use std::path::{Path, PathBuf}; use std::sync::Arc; @@ -105,8 +106,7 @@ struct Format { /// /// %p The file path /// %c A short code describing the content type - /// %d A short description of the content type - /// %D A long description of the content type + /// %d The description of the content type /// %g The group of the content type /// %m The magic of the content type /// %M The MIME type of the content type @@ -431,7 +431,7 @@ impl Response { format.push_str(match () { () if flags.modifiers.mime_type => "%M", () if flags.modifiers.label => "%c", - () => "%D (%g)", + () => "%d (%g)", }); format.push_str(if flags.modifiers.output_score { " %S" } else { "" }); format @@ -443,12 +443,11 @@ impl Response { Some('%') => match format.next() { Some('p') => write!(&mut result, "{}", self.path.display())?, Some('c') => write!(&mut result, "{}", self.code())?, - Some('d') => write!(&mut result, "{}", self.short_desc()?)?, - Some('D') => write!(&mut result, "{}", self.long_desc()?)?, + Some('d') => write!(&mut result, "{}", self.desc()?)?, Some('g') => write!(&mut result, "{}", self.group())?, Some('m') => write!(&mut result, "{}", self.magic())?, Some('M') => write!(&mut result, "{}", self.mime())?, - Some('e') => write!(&mut result, "{}", self.extension())?, + Some('e') => write!(&mut result, "{}", join(self.extension()))?, Some('s') => write!(&mut result, "{:.2}", self.score())?, Some('S') => write!(&mut result, "{}%", (100. * self.score()).trunc())?, Some(c) => result.push(c), @@ -469,10 +468,10 @@ impl Response { let output = JsonResult { ct_label: Some(self.code().to_string()), score: Some(self.score()), - group: Some(self.group()), + group: Some(self.group().to_string()), mime_type: Some(self.mime().to_string()), magic: Some(self.magic().to_string()), - description: Some(self.long_desc()?.to_string()), + description: Some(self.desc()?.to_string()), }; let dl = if self.is_dl { output.clone() } else { JsonResult::default() }; Ok(Json { path: self.path.to_path_buf(), dl, output }) @@ -489,68 +488,60 @@ impl Response { } } - fn short_desc(&self) -> Result<String> { + fn desc(&self) -> Result<Cow<str>> { Ok(match &self.output { - CliOutput::Empty => "Empty file".to_string(), + CliOutput::Empty => "Empty file".into(), CliOutput::Symlink => { - format!("Symbolic link to {}", std::fs::read_link(&self.path)?.display()) + format!("Symbolic link to {}", std::fs::read_link(&self.path)?.display()).into() } - CliOutput::Directory => "A directory".to_string(), - CliOutput::Error(e) => e.clone(), - CliOutput::Label(x) => join(x.short_desc()), - CliOutput::Output(x) => join(x.label().short_desc()), + CliOutput::Directory => "A directory".into(), + CliOutput::Error(e) => e.into(), + CliOutput::Label(x) => x.desc().into(), + CliOutput::Output(x) => x.label().desc().into(), }) } - fn long_desc(&self) -> Result<String> { - Ok(match &self.output { - CliOutput::Label(x) => join(x.long_desc()), - CliOutput::Output(x) => join(x.label().long_desc()), - _ => return self.short_desc(), - }) - } - - fn group(&self) -> String { + fn group(&self) -> &str { match &self.output { - CliOutput::Empty => "inode".to_string(), - CliOutput::Symlink => "inode".to_string(), - CliOutput::Directory => "inode".to_string(), - CliOutput::Error(_) => "error".to_string(), - CliOutput::Label(x) => join(x.group()), - CliOutput::Output(x) => join(x.label().group()), + CliOutput::Empty => "inode", + CliOutput::Symlink => "inode", + CliOutput::Directory => "inode", + CliOutput::Error(_) => "error", + CliOutput::Label(x) => x.group(), + CliOutput::Output(x) => x.label().group(), } } - fn magic(&self) -> String { + fn magic(&self) -> Cow<str> { match &self.output { - CliOutput::Empty => self.code().to_string(), - CliOutput::Symlink => format!("symlink link to {}", self.path.display()), - CliOutput::Directory => self.code().to_string(), - CliOutput::Error(_) => self.code().to_string(), - CliOutput::Label(x) => join(x.magic()), - CliOutput::Output(x) => join(x.label().magic()), + CliOutput::Empty => self.code().into(), + CliOutput::Symlink => format!("symlink link to {}", self.path.display()).into(), + CliOutput::Directory => self.code().into(), + CliOutput::Error(_) => self.code().into(), + CliOutput::Label(x) => x.magic().into(), + CliOutput::Output(x) => x.label().magic().into(), } } - fn mime(&self) -> String { + fn mime(&self) -> &str { match &self.output { - CliOutput::Empty => "inode/x-empty".to_string(), - CliOutput::Symlink => "inode/symlink".to_string(), - CliOutput::Directory => "inode/directory".to_string(), - CliOutput::Error(_) => "error".to_string(), - CliOutput::Label(x) => join(x.mime()), - CliOutput::Output(x) => join(x.label().mime()), + CliOutput::Empty => "inode/x-empty", + CliOutput::Symlink => "inode/symlink", + CliOutput::Directory => "inode/directory", + CliOutput::Error(_) => "error", + CliOutput::Label(x) => x.mime(), + CliOutput::Output(x) => x.label().mime(), } } - fn extension(&self) -> String { + fn extension(&self) -> &[&str] { match &self.output { - CliOutput::Empty => String::new(), - CliOutput::Symlink => String::new(), - CliOutput::Directory => String::new(), - CliOutput::Error(_) => String::new(), - CliOutput::Label(x) => join(x.extension()), - CliOutput::Output(x) => join(x.label().extension()), + CliOutput::Empty => &[], + CliOutput::Symlink => &[], + CliOutput::Directory => &[], + CliOutput::Error(_) => &[], + CliOutput::Label(x) => x.extension(), + CliOutput::Output(x) => x.label().extension(), } } @@ -566,13 +557,13 @@ impl Response { } fn color(&self) -> Option<Color> { - let groups = match &self.output { + let group = match &self.output { CliOutput::Error(_) => return Some(Color::Red), - CliOutput::Label(x) => x.group(), - CliOutput::Output(x) => x.label().group(), - _ => &[], + CliOutput::Label(x) => Some(x.group()), + CliOutput::Output(x) => Some(x.label().group()), + _ => None, }; - groups.iter().find_map(|x| group_color(x)) + group.iter().find_map(|x| group_color(x)) } } @@ -591,12 +582,14 @@ fn group_color(group: &str) -> Option<Color> { fn join<T: AsRef<str>>(xs: impl IntoIterator<Item = T>) -> String { let mut result = String::new(); + result.push('['); for (i, x) in xs.into_iter().enumerate() { if i != 0 { - result.push_str(" | "); + result.push('|'); } result.push_str(x.as_ref()); } + result.push(']'); result } diff --git a/rust/gen/src/main.rs b/rust/gen/src/main.rs index 6dfeaf3d..b6bcaf2a 100644 --- a/rust/gen/src/main.rs +++ b/rust/gen/src/main.rs @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::collections::{BTreeMap, BTreeSet}; +use std::collections::BTreeMap; use std::fs::File; use std::io::Write; @@ -22,28 +22,36 @@ use serde::Deserialize; fn main() -> Result<()> { let configs: BTreeMap<String, Config> = serde_json::from_reader(File::open("data/config.json")?)?; - let mut labels = BTreeMap::<String, Vec<Label>>::new(); - for (short, config) in configs { + let mut labels = BTreeMap::<String, Option<Label>>::new(); + for (key, config) in configs { if !config.in_scope_for_output_content_type { continue; } - if ["directory", "empty", "symlink"].contains(&short.as_str()) { + if ["directory", "empty", "symlink"].contains(&key.as_str()) { continue; } - let target = match config.target_label { - Some(x) => x, - None => continue, - }; + let target = config.target_label.unwrap_or_else(|| key.clone()); + let is_target = target == key; + let entry = labels.entry(target).or_default(); + if !is_target { + continue; + } + assert!(entry.is_none()); let exts = config.extensions; - let mime = unwrap(config.mime_type, "mime_type", &short)?; - let group = unwrap(config.group, "group", &short)?; - let magic = unwrap(config.magic, "magic", &short)?; - let long = unwrap(config.description, "description", &short)?; + let mime = unwrap(config.mime_type, "mime_type", &key)?; + let group = unwrap(config.group, "group", &key)?; + let magic = unwrap(config.magic, "magic", &key)?; + let desc = unwrap(config.description, "description", &key)?; let text = config.tags.iter().any(|x| *x == "text"); - let label = Label { short, long, magic, group, mime, exts, text }; - labels.entry(target).or_default().push(label); + *entry = Some(Label { desc, magic, group, mime, exts, text }); } - let labels = labels; + let labels = labels + .into_iter() + .map(|(target, label)| { + let label = label.with_context(|| format!("missing label for {target}"))?; + Ok((target, label)) + }) + .collect::<Result<BTreeMap<_, _>>>()?; let mut output = File::create("../lib/src/label.rs")?; let header = std::fs::read_to_string(file!())?; let header = header.split("\n\n").next().context("main.rs does not contain an empty line")?; @@ -54,24 +62,23 @@ fn main() -> Result<()> { writeln!(output, "/// Content type of a file.")?; writeln!(output, "#[derive(Debug, Copy, Clone, PartialEq, Eq)]\n#[repr(u32)]")?; writeln!(output, "pub enum Label {{")?; - for (target, labels) in &labels { - let doc = merge_ref(labels, |x| &x.long).join(" | "); - writeln!(output, " /// {doc}")?; + for (target, Label { desc, .. }) in &labels { + writeln!(output, " /// {desc}")?; writeln!(output, " {},", capitalize(target))?; } writeln!(output, "}}\n")?; writeln!(output, "pub(crate) const MAX_LABEL: u32 = {};\n", labels.len() - 1)?; writeln!(output, "pub(crate) const METADATA: [Metadata; {}] = [", labels.len())?; - for (target, labels) in &labels { + for (target, label) in &labels { + let Label { desc, magic, group, mime, exts, text } = label; writeln!(output, " Metadata {{")?; writeln!(output, " code: {target:?},")?; - writeln!(output, " short_desc: &{:?},", merge_ref(labels, |x| &x.short))?; - writeln!(output, " long_desc: &{:?},", merge_ref(labels, |x| &x.long))?; - writeln!(output, " magic: &{:?},", merge_ref(labels, |x| &x.magic))?; - writeln!(output, " group: &{:?},", merge_ref(labels, |x| &x.group))?; - writeln!(output, " mime: &{:?},", merge_ref(labels, |x| &x.mime))?; - writeln!(output, " extension: &{:?},", merge(labels, |x| &x.exts))?; - writeln!(output, " is_text: {:?},", labels.iter().all(|x| x.text))?; + writeln!(output, " desc: {desc:?},")?; + writeln!(output, " magic: {magic:?},")?; + writeln!(output, " group: {group:?},")?; + writeln!(output, " mime: {mime:?},")?; + writeln!(output, " extension: &{exts:?},")?; + writeln!(output, " is_text: {text:?},")?; writeln!(output, " }},")?; } writeln!(output, "];")?; @@ -92,8 +99,7 @@ struct Config { #[derive(Debug)] struct Label { - short: String, - long: String, + desc: String, magic: String, group: String, mime: String, @@ -105,15 +111,6 @@ fn unwrap<T>(x: Option<T>, f: &str, n: &str) -> Result<T> { x.ok_or_else(|| anyhow!("missing {f} for {n:?}")) } -fn merge_ref<T: Ord + AsRef<str>>(labels: &[Label], field: impl Fn(&Label) -> &T) -> Vec<String> { - merge(labels, |x| std::slice::from_ref(field(x))) -} - -fn merge<T: Ord + AsRef<str>>(labels: &[Label], field: impl Fn(&Label) -> &[T]) -> Vec<String> { - let labels: BTreeSet<&T> = labels.iter().flat_map(field).collect(); - labels.into_iter().map(|x| x.as_ref().to_string()).collect() -} - fn capitalize(xs: &str) -> String { let mut xs = xs.as_bytes().to_vec(); xs[0] = xs[0].to_ascii_uppercase(); diff --git a/rust/lib/src/label.rs b/rust/lib/src/label.rs index b1bc85ec..97445d78 100644 --- a/rust/lib/src/label.rs +++ b/rust/lib/src/label.rs @@ -147,7 +147,7 @@ pub enum Label { Pcap, /// PDF document Pdf, - /// ELF executable | PE Windows executable + /// PE executable Pebin, /// PEM certificate Pem, @@ -254,1131 +254,1018 @@ pub(crate) const MAX_LABEL: u32 = 112; pub(crate) const METADATA: [Metadata; 113] = [ Metadata { code: "ai", - short_desc: &["ai"], - long_desc: &["Adobe Illustrator Artwork"], - magic: &["PDF document"], - group: &["document"], - mime: &["application/pdf"], + desc: "Adobe Illustrator Artwork", + magic: "PDF document", + group: "document", + mime: "application/pdf", extension: &["ai"], is_text: false, }, Metadata { code: "apk", - short_desc: &["apk"], - long_desc: &["Android package"], - magic: &["Java archive data"], - group: &["executable"], - mime: &["application/vnd.android.package-archive"], + desc: "Android package", + magic: "Java archive data", + group: "executable", + mime: "application/vnd.android.package-archive", extension: &["apk"], is_text: false, }, Metadata { code: "appleplist", - short_desc: &["appleplist"], - long_desc: &["Apple property list"], - magic: &["Apple binary property list"], - group: &["application"], - mime: &["application/x-plist"], + desc: "Apple property list", + magic: "Apple binary property list", + group: "application", + mime: "application/x-plist", extension: &["bplist", "plist"], is_text: true, }, Metadata { code: "asm", - short_desc: &["asm"], - long_desc: &["Assembly"], - magic: &["assembler source"], - group: &["code"], - mime: &["text/x-asm"], + desc: "Assembly", + magic: "assembler source", + group: "code", + mime: "text/x-asm", extension: &["S", "asm"], is_text: true, }, Metadata { code: "asp", - short_desc: &["asp"], - long_desc: &["ASP source"], - magic: &["HTML document"], - group: &["code"], - mime: &["text/html"], - extension: &["asp", "aspx"], + desc: "ASP source", + magic: "HTML document", + group: "code", + mime: "text/html", + extension: &["aspx", "asp"], is_text: true, }, Metadata { code: "batch", - short_desc: &["batch"], - long_desc: &["DOS batch file"], - magic: &["DOS batch file"], - group: &["code"], - mime: &["text/x-msdos-batch"], + desc: "DOS batch file", + magic: "DOS batch file", + group: "code", + mime: "text/x-msdos-batch", extension: &["bat"], is_text: true, }, Metadata { code: "bmp", - short_desc: &["bmp"], - long_desc: &["BMP image data"], - magic: &["PC bitmap"], - group: &["image"], - mime: &["image/bmp"], + desc: "BMP image data", + magic: "PC bitmap", + group: "image", + mime: "image/bmp", extension: &["bmp"], is_text: false, }, Metadata { code: "bzip", - short_desc: &["bzip"], - long_desc: &["bzip2 compressed data"], - magic: &["bzip2 compressed data"], - group: &["archive"], - mime: &["application/x-bzip2"], - extension: &["bz2", "tar.bz2", "tbz2"], + desc: "bzip2 compressed data", + magic: "bzip2 compressed data", + group: "archive", + mime: "application/x-bzip2", + extension: &["bz2", "tbz2", "tar.bz2"], is_text: false, }, Metadata { code: "c", - short_desc: &["c"], - long_desc: &["C source"], - magic: &["C source"], - group: &["code"], - mime: &["text/x-c"], - extension: &["c", "cc", "cpp", "h", "hpp"], + desc: "C source", + magic: "C source", + group: "code", + mime: "text/x-c", + extension: &["c", "cpp", "h", "hpp", "cc"], is_text: true, }, Metadata { code: "cab", - short_desc: &["cab"], - long_desc: &["Microsoft Cabinet archive data"], - magic: &["Microsoft Cabinet archive data"], - group: &["archive"], - mime: &["application/vnd.ms-cab-compressed"], + desc: "Microsoft Cabinet archive data", + magic: "Microsoft Cabinet archive data", + group: "archive", + mime: "application/vnd.ms-cab-compressed", extension: &["cab"], is_text: false, }, Metadata { code: "cat", - short_desc: &["cat"], - long_desc: &["Windows Catalog file"], - magic: &["data"], - group: &["application"], - mime: &["application/octet-stream"], + desc: "Windows Catalog file", + magic: "data", + group: "application", + mime: "application/octet-stream", extension: &["cat"], is_text: false, }, Metadata { code: "chm", - short_desc: &["chm"], - long_desc: &["MS Windows HtmlHelp Data"], - magic: &["MS Windows HtmlHelp Data"], - group: &["application"], - mime: &["application/chm"], + desc: "MS Windows HtmlHelp Data", + magic: "MS Windows HtmlHelp Data", + group: "application", + mime: "application/chm", extension: &["chm"], is_text: false, }, Metadata { code: "coff", - short_desc: &["coff"], - long_desc: &["Intel 80386 COFF"], - magic: &["Intel 80386 COFF"], - group: &["executable"], - mime: &["application/x-coff"], + desc: "Intel 80386 COFF", + magic: "Intel 80386 COFF", + group: "executable", + mime: "application/x-coff", extension: &[], is_text: false, }, Metadata { code: "crx", - short_desc: &["crx"], - long_desc: &["Google Chrome extension"], - magic: &["Google Chrome extension"], - group: &["executable"], - mime: &["application/x-chrome-extension"], + desc: "Google Chrome extension", + magic: "Google Chrome extension", + group: "executable", + mime: "application/x-chrome-extension", extension: &["crx"], is_text: false, }, Metadata { code: "cs", - short_desc: &["cs"], - long_desc: &["C# source"], - magic: &["ASCII text"], - group: &["code"], - mime: &["text/plain"], + desc: "C# source", + magic: "ASCII text", + group: "code", + mime: "text/plain", extension: &["cs"], is_text: true, }, Metadata { code: "css", - short_desc: &["css"], - long_desc: &["CSS source"], - magic: &["ASCII text"], - group: &["code"], - mime: &["text/css"], + desc: "CSS source", + magic: "ASCII text", + group: "code", + mime: "text/css", extension: &["css"], is_text: true, }, Metadata { code: "csv", - short_desc: &["csv"], - long_desc: &["CSV document"], - magic: &["CSV text"], - group: &["code"], - mime: &["text/csv"], + desc: "CSV document", + magic: "CSV text", + group: "code", + mime: "text/csv", extension: &["csv"], is_text: true, }, Metadata { code: "deb", - short_desc: &["deb"], - long_desc: &["Debian binary package"], - magic: &["Debian binary package"], - group: &["archive"], - mime: &["application/vnd.debian.binary-package"], + desc: "Debian binary package", + magic: "Debian binary package", + group: "archive", + mime: "application/vnd.debian.binary-package", extension: &["deb"], is_text: false, }, Metadata { code: "dex", - short_desc: &["dex"], - long_desc: &["Dalvik dex file"], - magic: &["Dalvik dex file"], - group: &["executable"], - mime: &["application/x-android-dex"], + desc: "Dalvik dex file", + magic: "Dalvik dex file", + group: "executable", + mime: "application/x-android-dex", extension: &["dex"], is_text: false, }, Metadata { code: "dmg", - short_desc: &["dmg"], - long_desc: &["Apple disk image"], - magic: &["Apple disk image"], - group: &["archive"], - mime: &["application/x-apple-diskimage"], + desc: "Apple disk image", + magic: "Apple disk image", + group: "archive", + mime: "application/x-apple-diskimage", extension: &["dmg"], is_text: false, }, Metadata { code: "doc", - short_desc: &["doc"], - long_desc: &["Microsoft Word CDF document"], - magic: &["Composite Document File"], - group: &["document"], - mime: &["application/msword"], + desc: "Microsoft Word CDF document", + magic: "Composite Document File", + group: "document", + mime: "application/msword", extension: &["doc"], is_text: false, }, Metadata { code: "docx", - short_desc: &["docx"], - long_desc: &["Microsoft Word 2007+ document"], - magic: &["Microsoft Word 2007+"], - group: &["document"], - mime: &["application/vnd.openxmlformats-officedocument.wordprocessingml.document"], - extension: &["docm", "docx"], + desc: "Microsoft Word 2007+ document", + magic: "Microsoft Word 2007+", + group: "document", + mime: "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + extension: &["docx", "docm"], is_text: false, }, Metadata { code: "elf", - short_desc: &["elf", "ko", "so"], - long_desc: &["ELF executable"], - magic: &["ELF executable"], - group: &["executable"], - mime: &["application/x-executable-elf"], - extension: &["elf", "ko", "so"], + desc: "ELF executable", + magic: "ELF executable", + group: "executable", + mime: "application/x-executable-elf", + extension: &["elf", "so"], is_text: false, }, Metadata { code: "emf", - short_desc: &["emf"], - long_desc: &["Windows Enhanced Metafile image data"], - magic: &["Windows Enhanced Metafile"], - group: &["application"], - mime: &["application/octet-stream"], + desc: "Windows Enhanced Metafile image data", + magic: "Windows Enhanced Metafile", + group: "application", + mime: "application/octet-stream", extension: &["emf"], is_text: false, }, Metadata { code: "eml", - short_desc: &["eml"], - long_desc: &["RFC 822 mail"], - magic: &["RFC 822 mail"], - group: &["text"], - mime: &["message/rfc822"], + desc: "RFC 822 mail", + magic: "RFC 822 mail", + group: "text", + mime: "message/rfc822", extension: &["eml"], is_text: true, }, Metadata { code: "epub", - short_desc: &["epub"], - long_desc: &["EPUB document"], - magic: &["EPUB document"], - group: &["document"], - mime: &["application/epub+zip"], + desc: "EPUB document", + magic: "EPUB document", + group: "document", + mime: "application/epub+zip", extension: &["epub"], is_text: false, }, Metadata { code: "flac", - short_desc: &["flac"], - long_desc: &["FLAC audio bitstream data"], - magic: &["FLAC audio bitstream data"], - group: &["audio"], - mime: &["audio/flac"], + desc: "FLAC audio bitstream data", + magic: "FLAC audio bitstream data", + group: "audio", + mime: "audio/flac", extension: &["flac"], is_text: false, }, Metadata { code: "gif", - short_desc: &["gif"], - long_desc: &["GIF image data"], - magic: &["GIF image data"], - group: &["image"], - mime: &["image/gif"], + desc: "GIF image data", + magic: "GIF image data", + group: "image", + mime: "image/gif", extension: &["gif"], is_text: false, }, Metadata { code: "go", - short_desc: &["go"], - long_desc: &["Golang source"], - magic: &["ASCII text"], - group: &["code"], - mime: &["text/x-golang"], + desc: "Golang source", + magic: "ASCII text", + group: "code", + mime: "text/x-golang", extension: &["go"], is_text: true, }, Metadata { code: "gzip", - short_desc: &["gzip"], - long_desc: &["gzip compressed data"], - magic: &["gzip compressed data"], - group: &["archive"], - mime: &["application/gzip"], - extension: &["gz", "gzip", "tar.gz", "tgz"], + desc: "gzip compressed data", + magic: "gzip compressed data", + group: "archive", + mime: "application/gzip", + extension: &["gz", "gzip", "tgz", "tar.gz"], is_text: false, }, Metadata { code: "hlp", - short_desc: &["hlp"], - long_desc: &["MS Windows help"], - magic: &["MS Windows help"], - group: &["application"], - mime: &["application/winhlp"], + desc: "MS Windows help", + magic: "MS Windows help", + group: "application", + mime: "application/winhlp", extension: &["hlp"], is_text: false, }, Metadata { code: "html", - short_desc: &["html"], - long_desc: &["HTML document"], - magic: &["HTML document"], - group: &["code"], - mime: &["text/html"], - extension: &["htm", "html", "xht", "xhtml"], + desc: "HTML document", + magic: "HTML document", + group: "code", + mime: "text/html", + extension: &["html", "htm", "xhtml", "xht"], is_text: true, }, Metadata { code: "ico", - short_desc: &["ico"], - long_desc: &["MS Windows icon resource"], - magic: &["MS Windows icon resource"], - group: &["image"], - mime: &["image/vnd.microsoft.icon"], + desc: "MS Windows icon resource", + magic: "MS Windows icon resource", + group: "image", + mime: "image/vnd.microsoft.icon", extension: &["ico"], is_text: false, }, Metadata { code: "ini", - short_desc: &["ini"], - long_desc: &["INI configuration file"], - magic: &["Generic INItialization configuration"], - group: &["text"], - mime: &["text/plain"], + desc: "INI configuration file", + magic: "Generic INItialization configuration", + group: "text", + mime: "text/plain", extension: &["ini"], is_text: true, }, Metadata { code: "internetshortcut", - short_desc: &["internetshortcut"], - long_desc: &["MS Windows Internet shortcut"], - magic: &["MS Windows 95 Internet shortcut"], - group: &["application"], - mime: &["application/x-mswinurl"], + desc: "MS Windows Internet shortcut", + magic: "MS Windows 95 Internet shortcut", + group: "application", + mime: "application/x-mswinurl", extension: &["url"], is_text: true, }, Metadata { code: "iso", - short_desc: &["iso"], - long_desc: &["ISO 9660 CD-ROM filesystem data"], - magic: &["ISO 9660 CD-ROM filesystem data"], - group: &["archive"], - mime: &["application/x-iso9660-image"], + desc: "ISO 9660 CD-ROM filesystem data", + magic: "ISO 9660 CD-ROM filesystem data", + group: "archive", + mime: "application/x-iso9660-image", extension: &["iso"], is_text: false, }, Metadata { code: "jar", - short_desc: &["jar"], - long_desc: &["Java archive data (JAR)"], - magic: &["Java archive data (JAR)"], - group: &["archive"], - mime: &["application/java-archive"], + desc: "Java archive data (JAR)", + magic: "Java archive data (JAR)", + group: "archive", + mime: "application/java-archive", extension: &["jar"], is_text: false, }, Metadata { code: "java", - short_desc: &["java"], - long_desc: &["Java source"], - magic: &["Java source"], - group: &["code"], - mime: &["text/x-java"], + desc: "Java source", + magic: "Java source", + group: "code", + mime: "text/x-java", extension: &["java"], is_text: true, }, Metadata { code: "javabytecode", - short_desc: &["javabytecode"], - long_desc: &["Java compiled bytecode"], - magic: &["compiled Java class data"], - group: &["executable"], - mime: &["application/x-java-applet"], + desc: "Java compiled bytecode", + magic: "compiled Java class data", + group: "executable", + mime: "application/x-java-applet", extension: &["class"], is_text: false, }, Metadata { code: "javascript", - short_desc: &["javascript"], - long_desc: &["JavaScript source"], - magic: &["JavaScript source"], - group: &["code"], - mime: &["application/javascript"], + desc: "JavaScript source", + magic: "JavaScript source", + group: "code", + mime: "application/javascript", extension: &["js"], is_text: true, }, Metadata { code: "jpeg", - short_desc: &["jpeg"], - long_desc: &["JPEG image data"], - magic: &["JPEG image data"], - group: &["image"], - mime: &["image/jpeg"], - extension: &["jpeg", "jpg"], + desc: "JPEG image data", + magic: "JPEG image data", + group: "image", + mime: "image/jpeg", + extension: &["jpg", "jpeg"], is_text: false, }, Metadata { code: "json", - short_desc: &["json"], - long_desc: &["JSON document"], - magic: &["JSON data"], - group: &["code"], - mime: &["application/json"], + desc: "JSON document", + magic: "JSON data", + group: "code", + mime: "application/json", extension: &["json"], is_text: true, }, Metadata { code: "latex", - short_desc: &["latex"], - long_desc: &["LaTeX document"], - magic: &["LaTeX document"], - group: &["text"], - mime: &["text/x-tex"], + desc: "LaTeX document", + magic: "LaTeX document", + group: "text", + mime: "text/x-tex", extension: &["tex"], is_text: true, }, Metadata { code: "lisp", - short_desc: &["lisp"], - long_desc: &["Lisp source"], - magic: &["Lisp/Scheme program"], - group: &["code"], - mime: &["text/x-lisp"], + desc: "Lisp source", + magic: "Lisp/Scheme program", + group: "code", + mime: "text/x-lisp", extension: &["lisp"], is_text: true, }, Metadata { code: "lnk", - short_desc: &["lnk"], - long_desc: &["MS Windows shortcut"], - magic: &["MS Windows shortcut"], - group: &["application"], - mime: &["application/x-ms-shortcut"], + desc: "MS Windows shortcut", + magic: "MS Windows shortcut", + group: "application", + mime: "application/x-ms-shortcut", extension: &["lnk"], is_text: false, }, Metadata { code: "m3u", - short_desc: &["m3u"], - long_desc: &["M3U playlist"], - magic: &["M3U playlist"], - group: &["application"], - mime: &["text/plain"], - extension: &["m3u", "m3u8"], + desc: "M3U playlist", + magic: "M3U playlist", + group: "application", + mime: "text/plain", + extension: &["m3u8", "m3u"], is_text: false, }, Metadata { code: "macho", - short_desc: &["dylib", "macho"], - long_desc: &["Mach-O executable"], - magic: &["Mach-O executable"], - group: &["executable"], - mime: &["application/x-mach-o"], - extension: &["dylib"], + desc: "Mach-O executable", + magic: "Mach-O executable", + group: "executable", + mime: "application/x-mach-o", + extension: &[], is_text: false, }, Metadata { code: "makefile", - short_desc: &["makefile"], - long_desc: &["Makefile source"], - magic: &["makefile script"], - group: &["code"], - mime: &["text/x-makefile"], + desc: "Makefile source", + magic: "makefile script", + group: "code", + mime: "text/x-makefile", extension: &["=Makefile"], is_text: true, }, Metadata { code: "markdown", - short_desc: &["markdown"], - long_desc: &["Markdown document"], - magic: &["ASCII text"], - group: &["text"], - mime: &["text/markdown"], + desc: "Markdown document", + magic: "ASCII text", + group: "text", + mime: "text/markdown", extension: &["md"], is_text: true, }, Metadata { code: "mht", - short_desc: &["mht"], - long_desc: &["MHTML document"], - magic: &["HTML document"], - group: &["code"], - mime: &["application/x-mimearchive"], + desc: "MHTML document", + magic: "HTML document", + group: "code", + mime: "application/x-mimearchive", extension: &["mht"], is_text: true, }, Metadata { code: "mp3", - short_desc: &["mp3"], - long_desc: &["MP3 media file"], - magic: &["Audio file with ID3"], - group: &["audio"], - mime: &["audio/mpeg"], + desc: "MP3 media file", + magic: "Audio file with ID3", + group: "audio", + mime: "audio/mpeg", extension: &["mp3"], is_text: false, }, Metadata { code: "mp4", - short_desc: &["mp4"], - long_desc: &["MP4 media file"], - magic: &["ISO Media"], - group: &["video"], - mime: &["video/mp4"], + desc: "MP4 media file", + magic: "ISO Media", + group: "video", + mime: "video/mp4", extension: &["mov", "mp4"], is_text: false, }, Metadata { code: "mscompress", - short_desc: &["mscompress"], - long_desc: &["MS Compress archive data"], - magic: &["MS Compress archive data"], - group: &["archive"], - mime: &["application/x-ms-compress-szdd"], + desc: "MS Compress archive data", + magic: "MS Compress archive data", + group: "archive", + mime: "application/x-ms-compress-szdd", extension: &[], is_text: false, }, Metadata { code: "msi", - short_desc: &["msi"], - long_desc: &["Microsoft Installer file"], - magic: &["Composite Document File"], - group: &["archive"], - mime: &["application/x-msi"], + desc: "Microsoft Installer file", + magic: "Composite Document File", + group: "archive", + mime: "application/x-msi", extension: &["msi"], is_text: false, }, Metadata { code: "mum", - short_desc: &["mum"], - long_desc: &["Windows Update Package file"], - magic: &["XML document"], - group: &["application"], - mime: &["text/xml"], + desc: "Windows Update Package file", + magic: "XML document", + group: "application", + mime: "text/xml", extension: &["mum"], is_text: true, }, Metadata { code: "odex", - short_desc: &["odex"], - long_desc: &["ODEX ELF executable"], - magic: &["ELF executable"], - group: &["executable"], - mime: &["application/x-executable-elf"], + desc: "ODEX ELF executable", + magic: "ELF executable", + group: "executable", + mime: "application/x-executable-elf", extension: &["odex"], is_text: false, }, Metadata { code: "odp", - short_desc: &["odp"], - long_desc: &["OpenDocument Presentation"], - magic: &["OpenDocument Presentation"], - group: &["document"], - mime: &["application/vnd.oasis.opendocument.presentation"], + desc: "OpenDocument Presentation", + magic: "OpenDocument Presentation", + group: "document", + mime: "application/vnd.oasis.opendocument.presentation", extension: &["odp"], is_text: false, }, Metadata { code: "ods", - short_desc: &["ods"], - long_desc: &["OpenDocument Spreadsheet"], - magic: &["OpenDocument Spreadsheet"], - group: &["document"], - mime: &["application/vnd.oasis.opendocument.spreadsheet"], + desc: "OpenDocument Spreadsheet", + magic: "OpenDocument Spreadsheet", + group: "document", + mime: "application/vnd.oasis.opendocument.spreadsheet", extension: &["ods"], is_text: false, }, Metadata { code: "odt", - short_desc: &["odt"], - long_desc: &["OpenDocument Text"], - magic: &["OpenDocument Text"], - group: &["document"], - mime: &["application/vnd.oasis.opendocument.text"], + desc: "OpenDocument Text", + magic: "OpenDocument Text", + group: "document", + mime: "application/vnd.oasis.opendocument.text", extension: &["odt"], is_text: false, }, Metadata { code: "ogg", - short_desc: &["ogg"], - long_desc: &["Ogg data"], - magic: &["Ogg data"], - group: &["audio"], - mime: &["audio/ogg"], + desc: "Ogg data", + magic: "Ogg data", + group: "audio", + mime: "audio/ogg", extension: &["ogg"], is_text: false, }, Metadata { code: "outlook", - short_desc: &["outlook"], - long_desc: &["MS Outlook Message"], - magic: &["CDFV2 Microsoft Outlook Message"], - group: &["application"], - mime: &["application/vnd.ms-outlook"], + desc: "MS Outlook Message", + magic: "CDFV2 Microsoft Outlook Message", + group: "application", + mime: "application/vnd.ms-outlook", extension: &[], is_text: false, }, Metadata { code: "pcap", - short_desc: &["pcap"], - long_desc: &["pcap capture file"], - magic: &["pcap capture file"], - group: &["application"], - mime: &["application/vnd.tcpdump.pcap"], + desc: "pcap capture file", + magic: "pcap capture file", + group: "application", + mime: "application/vnd.tcpdump.pcap", extension: &["pcap", "pcapng"], is_text: false, }, Metadata { code: "pdf", - short_desc: &["pdf"], - long_desc: &["PDF document"], - magic: &["PDF document"], - group: &["document"], - mime: &["application/pdf"], + desc: "PDF document", + magic: "PDF document", + group: "document", + mime: "application/pdf", extension: &["pdf"], is_text: false, }, Metadata { code: "pebin", - short_desc: &["cpl", "dll", "exe", "mui", "ocx", "scr", "sys"], - long_desc: &["ELF executable", "PE Windows executable"], - magic: &["ELF executable", "PE Windows executable", "PE32 executable"], - group: &["application", "executable"], - mime: &["application/x-dosexec", "application/x-windows-driver"], - extension: &["cpl", "dll", "exe", "mui", "ocx", "scr", "sys"], + desc: "PE executable", + magic: "PE executable", + group: "executable", + mime: "application/x-dosexec", + extension: &["exe", "dll", "sys"], is_text: false, }, Metadata { code: "pem", - short_desc: &["pem"], - long_desc: &["PEM certificate"], - magic: &["PEM certificate"], - group: &["application"], - mime: &["application/x-pem-file"], + desc: "PEM certificate", + magic: "PEM certificate", + group: "application", + mime: "application/x-pem-file", extension: &["pem", "pub"], is_text: true, }, Metadata { code: "perl", - short_desc: &["perl"], - long_desc: &["Perl source"], - magic: &["Perl script text executable"], - group: &["code"], - mime: &["text/x-perl"], + desc: "Perl source", + magic: "Perl script text executable", + group: "code", + mime: "text/x-perl", extension: &["pl"], is_text: true, }, Metadata { code: "php", - short_desc: &["php"], - long_desc: &["PHP source"], - magic: &["PHP script"], - group: &["code"], - mime: &["text/x-php"], + desc: "PHP source", + magic: "PHP script", + group: "code", + mime: "text/x-php", extension: &["php"], is_text: true, }, Metadata { code: "png", - short_desc: &["png"], - long_desc: &["PNG image data"], - magic: &["PNG image data"], - group: &["image"], - mime: &["image/png"], + desc: "PNG image data", + magic: "PNG image data", + group: "image", + mime: "image/png", extension: &["png"], is_text: false, }, Metadata { code: "postscript", - short_desc: &["postscript"], - long_desc: &["PostScript document"], - magic: &["PostScript document text"], - group: &["document"], - mime: &["application/postscript"], + desc: "PostScript document", + magic: "PostScript document text", + group: "document", + mime: "application/postscript", extension: &["ps"], is_text: false, }, Metadata { code: "powershell", - short_desc: &["powershell"], - long_desc: &["Powershell source"], - magic: &["a powershell script"], - group: &["code"], - mime: &["application/x-powershell"], + desc: "Powershell source", + magic: "a powershell script", + group: "code", + mime: "application/x-powershell", extension: &["ps1"], is_text: true, }, Metadata { code: "ppt", - short_desc: &["ppt"], - long_desc: &["Microsoft PowerPoint CDF document"], - magic: &["Composite Document File"], - group: &["document"], - mime: &["application/vnd.ms-powerpoint"], + desc: "Microsoft PowerPoint CDF document", + magic: "Composite Document File", + group: "document", + mime: "application/vnd.ms-powerpoint", extension: &["ppt"], is_text: false, }, Metadata { code: "pptx", - short_desc: &["pptx"], - long_desc: &["Microsoft PowerPoint 2007+ document"], - magic: &["Microsoft PowerPoint 2007+"], - group: &["document"], - mime: &["application/vnd.openxmlformats-officedocument.presentationml.presentation"], - extension: &["pptm", "pptx"], + desc: "Microsoft PowerPoint 2007+ document", + magic: "Microsoft PowerPoint 2007+", + group: "document", + mime: "application/vnd.openxmlformats-officedocument.presentationml.presentation", + extension: &["pptx", "pptm"], is_text: false, }, Metadata { code: "python", - short_desc: &["python"], - long_desc: &["Python source"], - magic: &["Python script"], - group: &["code"], - mime: &["text/x-python"], + desc: "Python source", + magic: "Python script", + group: "code", + mime: "text/x-python", extension: &["py"], is_text: true, }, Metadata { code: "pythonbytecode", - short_desc: &["pythonbytecode"], - long_desc: &["Python compiled bytecode"], - magic: &["python byte-compiled"], - group: &["executable"], - mime: &["application/x-bytecode.python"], + desc: "Python compiled bytecode", + magic: "python byte-compiled", + group: "executable", + mime: "application/x-bytecode.python", extension: &["pyc", "pyo"], is_text: false, }, Metadata { code: "rar", - short_desc: &["rar"], - long_desc: &["RAR archive data"], - magic: &["RAR archive data"], - group: &["archive"], - mime: &["application/x-rar"], + desc: "RAR archive data", + magic: "RAR archive data", + group: "archive", + mime: "application/x-rar", extension: &["rar"], is_text: false, }, Metadata { code: "rdf", - short_desc: &["rdf"], - long_desc: &["Resource Description Framework document (RDF)"], - magic: &["XML document"], - group: &["text"], - mime: &["application/rdf+xml"], + desc: "Resource Description Framework document (RDF)", + magic: "XML document", + group: "text", + mime: "application/rdf+xml", extension: &["rdf"], is_text: true, }, Metadata { code: "rpm", - short_desc: &["rpm"], - long_desc: &["RedHat Package Manager archive (RPM)"], - magic: &["RPM"], - group: &["archive"], - mime: &["application/x-rpm"], + desc: "RedHat Package Manager archive (RPM)", + magic: "RPM", + group: "archive", + mime: "application/x-rpm", extension: &["rpm"], is_text: false, }, Metadata { code: "rst", - short_desc: &["rst"], - long_desc: &["ReStructuredText document"], - magic: &["ReStructuredText file"], - group: &["text"], - mime: &["text/x-rst"], + desc: "ReStructuredText document", + magic: "ReStructuredText file", + group: "text", + mime: "text/x-rst", extension: &["rst"], is_text: true, }, Metadata { code: "rtf", - short_desc: &["rtf"], - long_desc: &["Rich Text Format document"], - magic: &["Rich Text Format data"], - group: &["text"], - mime: &["text/rtf"], + desc: "Rich Text Format document", + magic: "Rich Text Format data", + group: "text", + mime: "text/rtf", extension: &["rtf"], is_text: true, }, Metadata { code: "ruby", - short_desc: &["ruby"], - long_desc: &["Ruby source"], - magic: &["Ruby script"], - group: &["code"], - mime: &["application/x-ruby"], + desc: "Ruby source", + magic: "Ruby script", + group: "code", + mime: "application/x-ruby", extension: &["rb"], is_text: true, }, Metadata { code: "rust", - short_desc: &["rust"], - long_desc: &["Rust source"], - magic: &["ASCII text"], - group: &["code"], - mime: &["application/x-rust"], + desc: "Rust source", + magic: "ASCII text", + group: "code", + mime: "application/x-rust", extension: &["rs"], is_text: true, }, Metadata { code: "scala", - short_desc: &["scala"], - long_desc: &["Scala source"], - magic: &["ASCII text"], - group: &["code"], - mime: &["application/x-scala"], + desc: "Scala source", + magic: "ASCII text", + group: "code", + mime: "application/x-scala", extension: &["scala"], is_text: true, }, Metadata { code: "sevenzip", - short_desc: &["sevenzip"], - long_desc: &["7-zip archive data"], - magic: &["7-zip archive data"], - group: &["archive"], - mime: &["application/x-7z-compressed"], + desc: "7-zip archive data", + magic: "7-zip archive data", + group: "archive", + mime: "application/x-7z-compressed", extension: &["7z"], is_text: false, }, Metadata { code: "shell", - short_desc: &["shell"], - long_desc: &["Shell script"], - magic: &["shell script"], - group: &["code"], - mime: &["text/x-shellscript"], + desc: "Shell script", + magic: "shell script", + group: "code", + mime: "text/x-shellscript", extension: &["sh"], is_text: true, }, Metadata { code: "smali", - short_desc: &["smali"], - long_desc: &["Smali source"], - magic: &["ASCII text"], - group: &["code"], - mime: &["application/x-smali"], + desc: "Smali source", + magic: "ASCII text", + group: "code", + mime: "application/x-smali", extension: &["smali"], is_text: true, }, Metadata { code: "sql", - short_desc: &["sql"], - long_desc: &["SQL source"], - magic: &["ASCII text"], - group: &["code"], - mime: &["application/x-sql"], + desc: "SQL source", + magic: "ASCII text", + group: "code", + mime: "application/x-sql", extension: &["sql"], is_text: true, }, Metadata { code: "squashfs", - short_desc: &["squashfs"], - long_desc: &["Squash filesystem"], - magic: &["Squashfs filesystem"], - group: &["archive"], - mime: &["application/octet-stream"], + desc: "Squash filesystem", + magic: "Squashfs filesystem", + group: "archive", + mime: "application/octet-stream", extension: &[], is_text: false, }, Metadata { code: "svg", - short_desc: &["svg"], - long_desc: &["SVG Scalable Vector Graphics image data"], - magic: &["SVG Scalable Vector Graphics image"], - group: &["image"], - mime: &["image/svg+xml"], + desc: "SVG Scalable Vector Graphics image data", + magic: "SVG Scalable Vector Graphics image", + group: "image", + mime: "image/svg+xml", extension: &["svg"], is_text: true, }, Metadata { code: "swf", - short_desc: &["swf"], - long_desc: &["Macromedia Flash data"], - magic: &["Macromedia Flash data"], - group: &["executable"], - mime: &["application/x-shockwave-flash"], + desc: "Macromedia Flash data", + magic: "Macromedia Flash data", + group: "executable", + mime: "application/x-shockwave-flash", extension: &["swf"], is_text: false, }, Metadata { code: "symlinktext", - short_desc: &["symlinktext"], - long_desc: &["Symbolic link (textual representation)"], - magic: &["ASCII text"], - group: &["application"], - mime: &["text/plain"], + desc: "Symbolic link (textual representation)", + magic: "ASCII text", + group: "application", + mime: "text/plain", extension: &[], is_text: true, }, Metadata { code: "tar", - short_desc: &["tar"], - long_desc: &["POSIX tar archive"], - magic: &["POSIX tar archive"], - group: &["archive"], - mime: &["application/x-tar"], + desc: "POSIX tar archive", + magic: "POSIX tar archive", + group: "archive", + mime: "application/x-tar", extension: &["tar"], is_text: false, }, Metadata { code: "tga", - short_desc: &["tga"], - long_desc: &["Targa image data"], - magic: &["Targa image data"], - group: &["image"], - mime: &["image/x-tga"], + desc: "Targa image data", + magic: "Targa image data", + group: "image", + mime: "image/x-tga", extension: &["tga"], is_text: false, }, Metadata { code: "tiff", - short_desc: &["tiff"], - long_desc: &["TIFF image data"], - magic: &["TIFF image data"], - group: &["image"], - mime: &["image/tiff"], - extension: &["tif", "tiff"], + desc: "TIFF image data", + magic: "TIFF image data", + group: "image", + mime: "image/tiff", + extension: &["tiff", "tif"], is_text: false, }, Metadata { code: "torrent", - short_desc: &["torrent"], - long_desc: &["BitTorrent file"], - magic: &["BitTorrent file"], - group: &["application"], - mime: &["application/x-bittorrent"], + desc: "BitTorrent file", + magic: "BitTorrent file", + group: "application", + mime: "application/x-bittorrent", extension: &["torrent"], is_text: false, }, Metadata { code: "ttf", - short_desc: &["ttf"], - long_desc: &["TrueType Font data"], - magic: &["TrueType Font data"], - group: &["font"], - mime: &["font/sfnt"], + desc: "TrueType Font data", + magic: "TrueType Font data", + group: "font", + mime: "font/sfnt", extension: &["ttf"], is_text: false, }, Metadata { code: "txt", - short_desc: &["txt"], - long_desc: &["Generic text document"], - magic: &["ASCII text"], - group: &["text"], - mime: &["text/plain"], + desc: "Generic text document", + magic: "ASCII text", + group: "text", + mime: "text/plain", extension: &["txt"], is_text: true, }, Metadata { code: "unknown", - short_desc: &["unknown"], - long_desc: &["Unknown binary data"], - magic: &["data"], - group: &["unknown"], - mime: &["application/octet-stream"], + desc: "Unknown binary data", + magic: "data", + group: "unknown", + mime: "application/octet-stream", extension: &[], is_text: false, }, Metadata { code: "vba", - short_desc: &["vba"], - long_desc: &["MS Visual Basic source (VBA)"], - magic: &["ASCII text"], - group: &["code"], - mime: &["text/vbscript"], + desc: "MS Visual Basic source (VBA)", + magic: "ASCII text", + group: "code", + mime: "text/vbscript", extension: &["vbs"], is_text: true, }, Metadata { code: "wav", - short_desc: &["wav"], - long_desc: &["Waveform Audio file (WAV)"], - magic: &["RIFF data"], - group: &["audio"], - mime: &["audio/x-wav"], + desc: "Waveform Audio file (WAV)", + magic: "RIFF data", + group: "audio", + mime: "audio/x-wav", extension: &["wav"], is_text: false, }, Metadata { code: "webm", - short_desc: &["webm"], - long_desc: &["WebM data"], - magic: &["WebM"], - group: &["video"], - mime: &["video/webm"], + desc: "WebM data", + magic: "WebM", + group: "video", + mime: "video/webm", extension: &["webm"], is_text: false, }, Metadata { code: "webp", - short_desc: &["webp"], - long_desc: &["WebP data"], - magic: &["RIFF data"], - group: &["image"], - mime: &["image/webp"], + desc: "WebP data", + magic: "RIFF data", + group: "image", + mime: "image/webp", extension: &["webp"], is_text: false, }, Metadata { code: "winregistry", - short_desc: &["winregistry"], - long_desc: &["Windows Registry text"], - magic: &["Windows Registry text"], - group: &["application"], - mime: &["text/x-ms-regedit"], + desc: "Windows Registry text", + magic: "Windows Registry text", + group: "application", + mime: "text/x-ms-regedit", extension: &["reg"], is_text: true, }, Metadata { code: "wmf", - short_desc: &["wmf"], - long_desc: &["Windows metafile"], - magic: &["Windows metafile"], - group: &["image"], - mime: &["image/wmf"], + desc: "Windows metafile", + magic: "Windows metafile", + group: "image", + mime: "image/wmf", extension: &["wmf"], is_text: false, }, Metadata { code: "xar", - short_desc: &["xar"], - long_desc: &["XAR archive compressed data"], - magic: &["xar archive compressed"], - group: &["archive"], - mime: &["application/x-xar"], + desc: "XAR archive compressed data", + magic: "xar archive compressed", + group: "archive", + mime: "application/x-xar", extension: &["pkg", "xar"], is_text: false, }, Metadata { code: "xls", - short_desc: &["xls"], - long_desc: &["Microsoft Excel CDF document"], - magic: &["Composite Document File"], - group: &["document"], - mime: &["application/vnd.ms-excel"], + desc: "Microsoft Excel CDF document", + magic: "Composite Document File", + group: "document", + mime: "application/vnd.ms-excel", extension: &["xls"], is_text: false, }, Metadata { code: "xlsb", - short_desc: &["xlsb"], - long_desc: &["Microsoft Excel 2007+ document (binary format)"], - magic: &["Microsoft Excel 2007+"], - group: &["document"], - mime: &["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"], + desc: "Microsoft Excel 2007+ document (binary format)", + magic: "Microsoft Excel 2007+", + group: "document", + mime: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", extension: &["xlsb"], is_text: false, }, Metadata { code: "xlsx", - short_desc: &["xlsx"], - long_desc: &["Microsoft Excel 2007+ document"], - magic: &["Microsoft Excel 2007+"], - group: &["document"], - mime: &["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"], - extension: &["xlsm", "xlsx"], + desc: "Microsoft Excel 2007+ document", + magic: "Microsoft Excel 2007+", + group: "document", + mime: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + extension: &["xlsx", "xlsm"], is_text: false, }, Metadata { code: "xml", - short_desc: &["xml"], - long_desc: &["XML document"], - magic: &["XML document"], - group: &["code"], - mime: &["text/xml"], + desc: "XML document", + magic: "XML document", + group: "code", + mime: "text/xml", extension: &["xml"], is_text: true, }, Metadata { code: "xpi", - short_desc: &["xpi"], - long_desc: &["Compressed installation archive (XPI)"], - magic: &["Zip archive data"], - group: &["archive"], - mime: &["application/zip"], + desc: "Compressed installation archive (XPI)", + magic: "Zip archive data", + group: "archive", + mime: "application/zip", extension: &["xpi"], is_text: false, }, Metadata { code: "xz", - short_desc: &["xz"], - long_desc: &["XZ compressed data"], - magic: &["XZ compressed data"], - group: &["archive"], - mime: &["application/x-xz"], + desc: "XZ compressed data", + magic: "XZ compressed data", + group: "archive", + mime: "application/x-xz", extension: &["xz"], is_text: false, }, Metadata { code: "yaml", - short_desc: &["yaml"], - long_desc: &["YAML source"], - magic: &["ASCII text"], - group: &["code"], - mime: &["application/x-yaml"], - extension: &["yaml", "yml"], + desc: "YAML source", + magic: "ASCII text", + group: "code", + mime: "application/x-yaml", + extension: &["yml", "yaml"], is_text: true, }, Metadata { code: "zip", - short_desc: &["zip"], - long_desc: &["Zip archive data"], - magic: &["Zip archive data"], - group: &["archive"], - mime: &["application/zip"], + desc: "Zip archive data", + magic: "Zip archive data", + group: "archive", + mime: "application/zip", extension: &["zip"], is_text: false, }, Metadata { code: "zlibstream", - short_desc: &["zlibstream"], - long_desc: &["zlib compressed data"], - magic: &["zlib compressed data"], - group: &["application"], - mime: &["application/zlib"], + desc: "zlib compressed data", + magic: "zlib compressed data", + group: "application", + mime: "application/zlib", extension: &[], is_text: false, }, diff --git a/rust/lib/src/output.rs b/rust/lib/src/output.rs index cd9ad56b..28ac0a1f 100644 --- a/rust/lib/src/output.rs +++ b/rust/lib/src/output.rs @@ -44,28 +44,23 @@ impl Label { METADATA[self as usize].code } - /// Returns a short description of the content type. - pub fn short_desc(self) -> &'static [&'static str] { - METADATA[self as usize].short_desc - } - - /// Returns a long description of the content type. - pub fn long_desc(self) -> &'static [&'static str] { - METADATA[self as usize].long_desc + /// Returns the description of the content type. + pub fn desc(self) -> &'static str { + METADATA[self as usize].desc } /// Returns the magic of the content type. - pub fn magic(self) -> &'static [&'static str] { + pub fn magic(self) -> &'static str { METADATA[self as usize].magic } /// Returns the group of the content type. - pub fn group(self) -> &'static [&'static str] { + pub fn group(self) -> &'static str { METADATA[self as usize].group } /// Returns the MIME type of the content type. - pub fn mime(self) -> &'static [&'static str] { + pub fn mime(self) -> &'static str { METADATA[self as usize].mime } @@ -82,11 +77,10 @@ impl Label { pub(crate) struct Metadata { pub(crate) code: &'static str, - pub(crate) short_desc: &'static [&'static str], - pub(crate) long_desc: &'static [&'static str], - pub(crate) magic: &'static [&'static str], - pub(crate) group: &'static [&'static str], - pub(crate) mime: &'static [&'static str], + pub(crate) desc: &'static str, + pub(crate) magic: &'static str, + pub(crate) group: &'static str, + pub(crate) mime: &'static str, pub(crate) extension: &'static [&'static str], pub(crate) is_text: bool, }