summaryrefslogtreecommitdiffstats
path: root/third_party/rust/mime_guess/src/impl_phf.rs
diff options
context:
space:
mode:
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))
+}