summaryrefslogtreecommitdiffstats
path: root/third_party/rust/mime_guess/src/impl_phf.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /third_party/rust/mime_guess/src/impl_phf.rs
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/mime_guess/src/impl_phf.rs')
-rw-r--r--third_party/rust/mime_guess/src/impl_phf.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/third_party/rust/mime_guess/src/impl_phf.rs b/third_party/rust/mime_guess/src/impl_phf.rs
new file mode 100644
index 0000000000..980c31f369
--- /dev/null
+++ b/third_party/rust/mime_guess/src/impl_phf.rs
@@ -0,0 +1,40 @@
+extern crate phf;
+
+use unicase::UniCase;
+
+include!(concat!(env!("OUT_DIR"), "/mime_types_generated.rs"));
+
+#[cfg(feature = "rev-mappings")]
+struct TopLevelExts {
+ start: usize,
+ end: usize,
+ subs: phf::Map<UniCase<&'static str>, (usize, usize)>,
+}
+
+pub fn get_mime_types(ext: &str) -> Option<&'static [&'static str]> {
+ map_lookup(&MIME_TYPES, ext).cloned()
+}
+
+pub fn get_extensions(toplevel: &str, sublevel: &str) -> Option<&'static [&'static str]> {
+ if toplevel == "*" {
+ return Some(EXTS);
+ }
+
+ let top = map_lookup(&REV_MAPPINGS, toplevel)?;
+
+ if sublevel == "*" {
+ return Some(&EXTS[top.start..top.end]);
+ }
+
+ let sub = map_lookup(&top.subs, sublevel)?;
+ Some(&EXTS[sub.0..sub.1])
+}
+
+fn map_lookup<'key, 'map: 'key, V>(
+ map: &'map phf::Map<UniCase<&'static str>, V>,
+ key: &'key str,
+) -> Option<&'map V> {
+ // FIXME: this doesn't compile unless we transmute `key` to `UniCase<&'static str>`
+ // https://github.com/sfackler/rust-phf/issues/169
+ map.get(&UniCase::new(key))
+}