Skip to content

Commit ad0f57b

Browse files
tcoopmanmichalmuskala
authored andcommitted
don't throw on Protocol.UndefinedError
1 parent 88dd85c commit ad0f57b

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

lib/encode.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,16 @@ defmodule Jason.Encode do
2727
# @compile :native
2828

2929
@doc false
30-
@spec encode(any, map) :: {:ok, iodata} | {:error, EncodeError.t}
30+
@spec encode(any, map) :: {:ok, iodata} | {:error, EncodeError.t} | {:error, Protocol.UndefinedError}
3131
def encode(value, opts) do
3232
escape = escape_function(opts)
3333
encode_map = encode_map_function(opts)
3434
try do
3535
{:ok, value(value, escape, encode_map)}
3636
catch
37-
%EncodeError{} = e ->
37+
:throw, %EncodeError{} = e ->
38+
{:error, e}
39+
:error, %Protocol.UndefinedError{protocol: Jason.Encoder} = e ->
3840
{:error, e}
3941
end
4042
end

test/encode_test.exs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,10 @@ defmodule Jason.EncoderTest do
147147
end
148148
end
149149

150+
test "encode should not raise on Protocol.UndefinedError" do
151+
assert {:error, %Protocol.UndefinedError{}} = Jason.encode(self())
152+
end
153+
150154
defp to_json(value, opts \\ []) do
151155
Jason.encode!(value, opts)
152156
end

0 commit comments

Comments
 (0)