///|
fn ext_from_url(url : String) -> String {
  let sv = url[:]
  let query_idx = sv.find("?")
  let hash_idx = sv.find("#")
  let frag_pos = match (query_idx, hash_idx) {
    (Some(qi), Some(hi)) => qi.min(hi)
    (Some(qi), None) => qi
    (None, Some(hi)) => hi
    (None, None) => url.length()
  }
  let last_slash = sv.sub(start=0, end=frag_pos).rev_find("/")
  let base_start = match last_slash {
    Some(pos) => pos + 1
    None => 0
  }
  let region = sv[base_start:frag_pos]
  let dot_in_region = region.rev_find(".")
  match dot_in_region {
    Some(di) => sv[base_start + di:frag_pos].to_owned().to_lower()
    None => ""
  }
}

///|
let mime_map : Map[String, String] = {
  ".png": "image/png",
  ".flv": "video/x-flv",
  ".jpeg": "image/jpeg",
  ".jpg": "image/jpeg",
  ".gif": "image/gif",
  ".mp3": "audio/mpeg",
  ".mp4": "video/mp4",
  ".m4a": "audio/mp4",
  ".m4b": "audio/mp4",
  ".m4v": "video/mp4",
  ".aac": "audio/aac",
  ".flac": "audio/flac",
  ".opus": "audio/opus",
  ".avif": "image/avif",
  ".webp": "image/webp",
  ".svg": "image/svg+xml",
  ".webm": "video/webm",
  ".ogg": "audio/ogg",
  ".oga": "audio/ogg",
  ".ogv": "video/ogg",
  ".wav": "audio/wav",
  ".pdf": "application/pdf",
}

///|
fn mime_from_url(url : String) -> String {
  let ext = ext_from_url(url)
  match mime_map.get(ext) {
    Some(m) => m
    None => "application/octet-stream"
  }
}