Skip to content

Commit ed3787e

Browse files
committed
Handle support for both Jason and JSON
We will simply rescue the exception thrown by both libraries and return a simple `:error` to keep the interface consistent. We will need to keep an eye on upstream changes in Ecto as support for both `JSON` and `Jason` evolve. closes: #159
1 parent afe87eb commit ed3787e

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

lib/ecto/adapters/sqlite3/codec.ex

+6-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ defmodule Ecto.Adapters.SQLite3.Codec do
1010
def bool_decode(v), do: {:ok, v}
1111

1212
def json_decode(v) when is_binary(v) do
13-
Application.get_env(:ecto_sqlite3, :json_library, Jason).decode(v)
13+
{:ok, Application.get_env(:ecto_sqlite3, :json_library, Jason).decode!(v)}
14+
rescue
15+
_ -> :error
1416
end
1517

1618
def json_decode(v), do: {:ok, v}
@@ -89,7 +91,9 @@ defmodule Ecto.Adapters.SQLite3.Codec do
8991
def json_encode(value) when is_bitstring(value), do: {:ok, value}
9092

9193
def json_encode(value) do
92-
Application.get_env(:ecto_sqlite3, :json_library, Jason).encode(value)
94+
{:ok, Application.get_env(:ecto_sqlite3, :json_library, Jason).encode!(value)}
95+
rescue
96+
_err -> :error
9397
end
9498

9599
def blob_encode(nil), do: {:ok, nil}

test/ecto/adapters/sqlite3/codec_test.exs

+4-4
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ defmodule Ecto.Adapters.SQLite3.CodecTest do
3535
end
3636

3737
test "handles malformed json" do
38-
{:error, _} = Codec.json_decode("")
39-
{:error, _} = Codec.json_decode(" ")
40-
{:error, _} = Codec.json_decode("{")
41-
{:error, _} = Codec.json_decode("[")
38+
:error = Codec.json_decode("")
39+
:error = Codec.json_decode(" ")
40+
:error = Codec.json_decode("{")
41+
:error = Codec.json_decode("[")
4242
end
4343
end
4444

0 commit comments

Comments
 (0)