Skip to content

Commit 0949842

Browse files
author
José Valim
committed
Speed up URI.decode_query/1
Signed-off-by: José Valim <[email protected]>
1 parent a697bab commit 0949842

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

lib/elixir/lib/uri.ex

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,10 @@ defmodule URI do
9595
9696
"""
9797
def decode_query(q, dict \\ %{}) when is_binary(q) do
98-
Enum.reduce query_decoder(q), dict, fn({k, v}, acc) -> Dict.put(acc, k, v) end
98+
case do_decode_query(q) do
99+
nil -> dict
100+
{{k, v}, q} -> decode_query(q, Dict.put(dict, k, v))
101+
end
99102
end
100103

101104
@doc """
@@ -104,19 +107,19 @@ defmodule URI do
104107
105108
## Examples
106109
107-
iex> URI.query_decoder("foo=1&bar=2") |> Enum.map &(&1)
110+
iex> URI.query_decoder("foo=1&bar=2") |> Enum.map(&(&1))
108111
[{"foo", "1"}, {"bar", "2"}]
109112
110113
"""
111114
def query_decoder(q) when is_binary(q) do
112-
Stream.unfold(q, &do_decoder/1)
115+
Stream.unfold(q, &do_decode_query/1)
113116
end
114117

115-
defp do_decoder("") do
118+
defp do_decode_query("") do
116119
nil
117120
end
118121

119-
defp do_decoder(q) do
122+
defp do_decode_query(q) do
120123
{first, next} =
121124
case :binary.split(q, "&") do
122125
[first, rest] -> {first, rest}

0 commit comments

Comments
 (0)