Uri_parsing.ComponentsSourceRepresents parts of a URL.
Each kind of parser consumes from this "pool" of parts of a url.
Parsers that consume from the query will lookup the query map, parse, and consume the element from the query.
Parsers that consume from the path will read the path in sequential order, from the beginning of the path to the end of the path. Once a path parser, is done parsing, it will remove its consumed elements from the path, and the next path parser will continue where it left off.
type t = {path : string list;"foo/bar" -> "foo"; "bar"
query : string list Core.String.Map.t;"?foo=1&bar=2" -> String.Map.of_alist_exn "foo", ["1"]; "bar", ["2"]
}