Skip to content

Commit b174cef

Browse files
committed
Simplify keyword encoding
1 parent 525a801 commit b174cef

File tree

1 file changed

+10
-23
lines changed

1 file changed

+10
-23
lines changed

lib/encode.ex

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@ defmodule Jason.Encode do
9797
end
9898

9999
def value(value, escape, encode_map) when is_map(value) do
100-
encode_map.(value, escape, encode_map)
100+
case Map.to_list(value) do
101+
[] -> "{}"
102+
keyword -> encode_map.(keyword, escape, encode_map)
103+
end
101104
end
102105

103106
def value(value, escape, encode_map) do
@@ -151,17 +154,17 @@ defmodule Jason.Encode do
151154
end
152155

153156
@spec keyword(keyword, opts) :: iodata
154-
def keyword(list, {escape, encode_map}) do
157+
def keyword(list, _) when list == [], do: "{}"
158+
def keyword(list, {escape, encode_map}) when is_list(list) do
155159
encode_map.(list, escape, encode_map)
156160
end
157161

158162
@spec map(map, opts) :: iodata
159163
def map(value, {escape, encode_map}) do
160-
encode_map.(value, escape, encode_map)
161-
end
162-
163-
defp map_naive([], _escape, _encode_map) do
164-
"{}"
164+
case Map.to_list(value) do
165+
[] -> "{}"
166+
keyword -> encode_map.(keyword, escape, encode_map)
167+
end
165168
end
166169

167170
defp map_naive([{key, value} | tail], escape, encode_map) do
@@ -170,12 +173,6 @@ defmodule Jason.Encode do
170173
| map_naive_loop(tail, escape, encode_map)]
171174
end
172175

173-
defp map_naive(value, escape, encode_map) do
174-
value
175-
|> Map.to_list
176-
|> map_naive(escape, encode_map)
177-
end
178-
179176
defp map_naive_loop([], _escape, _encode_map) do
180177
'}'
181178
end
@@ -186,10 +183,6 @@ defmodule Jason.Encode do
186183
| map_naive_loop(tail, escape, encode_map)]
187184
end
188185

189-
defp map_strict([], _escape, _encode_map) do
190-
"{}"
191-
end
192-
193186
defp map_strict([{key, value} | tail], escape, encode_map) do
194187
key = IO.iodata_to_binary(key(key, escape))
195188
visited = %{key => []}
@@ -198,12 +191,6 @@ defmodule Jason.Encode do
198191
| map_strict_loop(tail, escape, encode_map, visited)]
199192
end
200193

201-
defp map_strict(value, escape, encode_map) do
202-
value
203-
|> Map.to_list
204-
|> map_strict(escape, encode_map)
205-
end
206-
207194
defp map_strict_loop([], _encode_map, _escape, _visited) do
208195
'}'
209196
end

0 commit comments

Comments
 (0)