@@ -150,19 +150,30 @@ defmodule Jason.Encode do
150
150
| list_loop ( tail , escape , encode_map ) ]
151
151
end
152
152
153
+ @ spec keyword ( keyword , opts ) :: iodata
154
+ def keyword ( list , { escape , encode_map } ) do
155
+ encode_map . ( list , escape , encode_map )
156
+ end
157
+
153
158
@ spec map ( map , opts ) :: iodata
154
159
def map ( value , { escape , encode_map } ) do
155
160
encode_map . ( value , escape , encode_map )
156
161
end
157
162
163
+ defp map_naive ( [ ] , _escape , _encode_map ) do
164
+ "{}"
165
+ end
166
+
167
+ defp map_naive ( [ { key , value } | tail ] , escape , encode_map ) do
168
+ [ "{\" " , key ( key , escape ) , "\" :" ,
169
+ value ( value , escape , encode_map )
170
+ | map_naive_loop ( tail , escape , encode_map ) ]
171
+ end
172
+
158
173
defp map_naive ( value , escape , encode_map ) do
159
- case Map . to_list ( value ) do
160
- [ ] -> "{}"
161
- [ { key , value } | tail ] ->
162
- [ "{\" " , key ( key , escape ) , "\" :" ,
163
- value ( value , escape , encode_map )
164
- | map_naive_loop ( tail , escape , encode_map ) ]
165
- end
174
+ value
175
+ |> Map . to_list
176
+ |> map_naive ( escape , encode_map )
166
177
end
167
178
168
179
defp map_naive_loop ( [ ] , _escape , _encode_map ) do
@@ -175,16 +186,22 @@ defmodule Jason.Encode do
175
186
| map_naive_loop ( tail , escape , encode_map ) ]
176
187
end
177
188
189
+ defp map_strict ( [ ] , _escape , _encode_map ) do
190
+ "{}"
191
+ end
192
+
193
+ defp map_strict ( [ { key , value } | tail ] , escape , encode_map ) do
194
+ key = IO . iodata_to_binary ( key ( key , escape ) )
195
+ visited = % { key => [ ] }
196
+ [ "{\" " , key , "\" :" ,
197
+ value ( value , escape , encode_map )
198
+ | map_strict_loop ( tail , escape , encode_map , visited ) ]
199
+ end
200
+
178
201
defp map_strict ( value , escape , encode_map ) do
179
- case Map . to_list ( value ) do
180
- [ ] -> "{}"
181
- [ { key , value } | tail ] ->
182
- key = IO . iodata_to_binary ( key ( key , escape ) )
183
- visited = % { key => [ ] }
184
- [ "{\" " , key , "\" :" ,
185
- value ( value , escape , encode_map )
186
- | map_strict_loop ( tail , escape , encode_map , visited ) ]
187
- end
202
+ value
203
+ |> Map . to_list
204
+ |> map_strict ( escape , encode_map )
188
205
end
189
206
190
207
defp map_strict_loop ( [ ] , _encode_map , _escape , _visited ) do
0 commit comments