let dump_uri uri =
  sprintf "{ scheme=%s authority=%s path=%S query=%s fragment=%s }"
    (dump_optstr uri.scheme)
    (match uri.authority with | None -> "None" | Some a -> dump_authority a)
    uri.path (dump_optstr uri.query) (dump_optstr uri.fragment)