Skip to content

Commit 9e505fb

Browse files
committed
default_encode/2
1 parent 345a880 commit 9e505fb

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

lib/elixir/lib/json.ex

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ defmodule JSON do
333333
334334
"""
335335
@spec encode!(a, (a -> iodata())) :: binary() when a: var
336-
def encode!(term, encoder \\ &encode_value/2) do
336+
def encode!(term, encoder \\ &default_encode/2) do
337337
IO.iodata_to_binary(encoder.(term, encoder))
338338
end
339339

@@ -353,15 +353,19 @@ defmodule JSON do
353353
"[123,\"string\",{\"key\":\"value\"}]"
354354
355355
"""
356-
@spec encode!(a, (a -> iodata())) :: iodata() when a: var
357-
def encode_to_iodata!(term, encoder \\ &encode_value/2) do
356+
@spec encode_to_iodata!(a, (a -> iodata())) :: iodata() when a: var
357+
def encode_to_iodata!(term, encoder \\ &default_encode/2) do
358358
encoder.(term, encoder)
359359
end
360360

361361
@doc """
362-
This is the default function used to recursively encode each value.
362+
This is the default encode implementation passed to `encode!/1`.
363+
364+
This function is most typically passed as second argument to
365+
`encode!/2` and `encode_to_iodata!/2`. The default implementation
366+
simply dispatches to `JSON.Encoder.encode/2`.
363367
"""
364-
def encode_value(value, encoder) when is_atom(value) do
368+
def default_encode(value, encoder) when is_atom(value) do
365369
case value do
366370
nil -> "null"
367371
true -> "true"
@@ -370,21 +374,21 @@ defmodule JSON do
370374
end
371375
end
372376

373-
def encode_value(value, _encoder) when is_binary(value),
377+
def default_encode(value, _encoder) when is_binary(value),
374378
do: :elixir_json.encode_binary(value)
375379

376-
def encode_value(value, _encoder) when is_integer(value),
380+
def default_encode(value, _encoder) when is_integer(value),
377381
do: :elixir_json.encode_integer(value)
378382

379-
def encode_value(value, _encoder) when is_float(value),
383+
def default_encode(value, _encoder) when is_float(value),
380384
do: :elixir_json.encode_float(value)
381385

382-
def encode_value(value, encoder) when is_list(value),
386+
def default_encode(value, encoder) when is_list(value),
383387
do: :elixir_json.encode_list(value, encoder)
384388

385-
def encode_value(%{} = value, encoder) when not is_map_key(value, :__struct__),
389+
def default_encode(%{} = value, encoder) when not is_map_key(value, :__struct__),
386390
do: :elixir_json.encode_map(value, encoder)
387391

388-
def encode_value(value, encoder),
392+
def default_encode(value, encoder),
389393
do: JSON.Encoder.encode(value, encoder)
390394
end

lib/elixir/test/elixir/json_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ defmodule JSONTest do
5151
describe "JSON.Encoder" do
5252
defp protocol_encode(term) do
5353
term
54-
|> JSON.Encoder.encode(&JSON.encode_value/2)
54+
|> JSON.Encoder.encode(&JSON.default_encode/2)
5555
|> IO.iodata_to_binary()
5656
end
5757

0 commit comments

Comments
 (0)