Skip to content

Commit d644cb9

Browse files
committed
Preparing for version 3.0.0 release - remove references to :decode_sets config option, change JSON codec from Poison to Jason as per ex_aws, update README, add upgraede guide.
1 parent 66414d8 commit d644cb9

File tree

7 files changed

+64
-136
lines changed

7 files changed

+64
-136
lines changed

README.md

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,21 @@ Service module for https://github.com/ex-aws/ex_aws
88
## Installation
99

1010
The package can be installed by adding `ex_aws_dynamo` to your list of dependencies in `mix.exs`
11-
along with `:ex_aws` and your preferred JSON codec / http client
11+
along with `:ex_aws` and your preferred JSON codec and HTTP client:
1212

1313
```elixir
1414
def deps do
1515
[
16-
{:ex_aws, "~> 2.0"},
17-
{:ex_aws_dynamo, "~> 2.3"},
18-
{:poison, "~> 3.0"},
19-
{:hackney, "~> 1.9"},
16+
{:ex_aws, "~> 2.1"},
17+
{:ex_aws_dynamo, "~> 3.0"},
18+
{:jason, "~> 1.0"},
19+
{:hackney, "~> 1.9"}
2020
]
2121
end
2222
```
2323

24+
`ex_aws` currently uses [Jason](https://github.com/michalmuskala/jason) as its default JSON codec - see (ex_aws)[https://github.com/ex-aws/ex_aws] for more information about setting a custom `:json_codec`.
25+
2426
Documentation can be found at [https://hexdocs.pm/ex_aws_dynamo](https://hexdocs.pm/ex_aws_dynamo).
2527

2628
## Requirements
@@ -29,27 +31,6 @@ Documentation can be found at [https://hexdocs.pm/ex_aws_dynamo](https://hexdocs
2931

3032
If you are running this module against a local development instance of DynamoDB, you'll want to make sure that you have installed at least version `1.11.477` (released 2019-02-06). You can find links to download the latest version [here](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html).
3133

32-
## Configuration
33-
34-
### `decode_sets`
35-
36-
The default behavior of this application is to encode Elixir `MapSet` data to one of DynamoDB's three set types - number set, string set, or binary set; however, those DynamoDB datatypes will be decoded to Elixir `List`. If you wish to decode DynamoDB set types to Elixir `MapSet`, you can set the configuration for this application to include `decode_sets: true`.
37-
38-
For example:
39-
40-
```
41-
config :ex_aws, :dynamodb,
42-
decode_sets: true
43-
```
44-
45-
## Local testing
46-
47-
This application supports three test commands:
48-
49-
* `mix test` - run the normal test suite
50-
* `mix test.options` - run the test suite with options enabled (see `config/test_options.exs`)
51-
* `mix test.all` - run `mix test` and `mix test.options` sequentially
52-
5334
### Integration tests (optional)
5435

5536
The tests in `test/lib/dynamo/integration_test.exs` will attempt to run against a local instance of DynamoDB - in order to run these tests, you will need both a running local instance of DynamoDB as well as a `config/ddb_local_test.exs` file (.gitignored) formatted like so:
@@ -74,6 +55,8 @@ config :ex_aws, :dynamodb,
7455

7556
Before setting the `:port` and running tests, be aware that `test/lib/dynamo/integration_test.exs` will create and delete tables with the names `"TestUsers"`, `"Test.User"`, `"TestSeveralUsers"`, `"TestFoo"`, `"test_books"`, `"TestUsersWithRange"`, `"TestTransactions"`, `"TestTransactions2"` - test operations may affect your current tables if they share any of those names.
7657

58+
If DynamoDB is not running locally or the config file has not been provided, the integration tests will be skipped.
59+
7760
## License
7861

7962
The MIT License (MIT)

config/test_options.exs

Lines changed: 0 additions & 5 deletions
This file was deleted.

lib/ex_aws/dynamo/decoder.ex

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,11 @@ defmodule ExAws.Dynamo.Decoder do
1616
end
1717

1818
@doc """
19-
Convert dynamo format to elixir
19+
Convert Dynamo format to Elixir
2020
21-
Functions which convert the dynamo style values into normal elixir values.
22-
Use these if you just want the dynamo result to look more like elixir without
21+
Functions which convert the Dynamo-style values into normal Elixir values.
22+
Use these if you just want the Dynamo result to look more like Elixir without
2323
coercing it into a particular struct.
24-
25-
By default this will decode various dynamodb sets into lists. If you'd
26-
prefer they be decoded into `MapSet`s instead, set `decode_sets: true` in
27-
your compile-time (not runtime) configuration:
28-
29-
```elixir
30-
config :ex_aws, :dynamodb, decode_sets: true
31-
```
3224
"""
3325
def decode(%{"BOOL" => true}), do: true
3426
def decode(%{"BOOL" => false}), do: false
@@ -40,22 +32,13 @@ defmodule ExAws.Dynamo.Decoder do
4032
def decode(%{"S" => value}), do: value
4133
def decode(%{"M" => value}), do: value |> decode
4234

43-
if Application.get_env(:ex_aws, :dynamodb, [])[:decode_sets] do
44-
def decode(%{"BS" => values}), do: MapSet.new(values)
45-
def decode(%{"SS" => values}), do: MapSet.new(values)
35+
def decode(%{"BS" => values}), do: MapSet.new(values)
36+
def decode(%{"SS" => values}), do: MapSet.new(values)
4637

47-
def decode(%{"NS" => values}) do
48-
values
49-
|> Stream.map(&binary_to_number/1)
50-
|> Enum.into(MapSet.new())
51-
end
52-
else
53-
def decode(%{"BS" => values}), do: values
54-
def decode(%{"SS" => values}), do: values
55-
56-
def decode(%{"NS" => values}) do
57-
Enum.map(values, &binary_to_number/1)
58-
end
38+
def decode(%{"NS" => values}) do
39+
values
40+
|> Stream.map(&binary_to_number/1)
41+
|> Enum.into(MapSet.new())
5942
end
6043

6144
def decode(%{"L" => values}) do

mix.exs

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule ExAws.Dynamo.Mixfile do
22
use Mix.Project
33

4-
@version "2.3.4"
4+
@version "3.0.0"
55
@service "dynamo"
66
@url "https://github.com/ex-aws/ex_aws_#{@service}"
77
@name __MODULE__ |> Module.split() |> Enum.take(2) |> Enum.join(".")
@@ -16,8 +16,7 @@ defmodule ExAws.Dynamo.Mixfile do
1616
deps: deps(),
1717
name: @name,
1818
package: package(),
19-
docs: [main: @name, source_ref: "v#{@version}", source_url: @url],
20-
aliases: aliases()
19+
docs: [main: @name, source_ref: "v#{@version}", source_url: @url]
2120
]
2221
end
2322

@@ -32,7 +31,6 @@ defmodule ExAws.Dynamo.Mixfile do
3231
end
3332

3433
defp elixirc_paths(:test), do: ["lib", "test/support"]
35-
defp elixirc_paths(:test_options), do: ["lib", "test/support"]
3634
defp elixirc_paths(_), do: ["lib"]
3735

3836
# Run "mix help compile.app" to learn about applications.
@@ -46,40 +44,17 @@ defmodule ExAws.Dynamo.Mixfile do
4644
defp deps do
4745
[
4846
{:ex_doc, ">= 0.0.0", only: :dev},
49-
{:hackney, ">= 0.0.0", only: [:dev, :test, :test_options]},
50-
{:sweet_xml, ">= 0.0.0", only: [:dev, :test, :test_options]},
51-
{:poison, ">= 0.0.0", only: [:dev, :test, :test_options]},
47+
{:hackney, ">= 0.0.0", only: [:dev, :test]},
48+
{:sweet_xml, ">= 0.0.0", only: [:dev, :test]},
49+
{:jason, ">= 0.0.0", only: [:dev, :test]},
5250
ex_aws()
5351
]
5452
end
5553

5654
defp ex_aws() do
5755
case System.get_env("AWS") do
5856
"LOCAL" -> {:ex_aws, path: "../ex_aws"}
59-
_ -> {:ex_aws, "~> 2.0"}
57+
_ -> {:ex_aws, "~> 2.1"}
6058
end
6159
end
62-
63-
defp aliases do
64-
[
65-
{:"test.all", [&run_tests/1, "test.options"]},
66-
{:"test.options", [&run_options_tests/1]}
67-
]
68-
end
69-
70-
defp run_tests(_) do
71-
Mix.shell().cmd(
72-
"mix test --color",
73-
env: [{"MIX_ENV", "test"}]
74-
)
75-
end
76-
77-
defp run_options_tests(_) do
78-
IO.puts("\nRunning tests with options enabled...")
79-
80-
Mix.shell().cmd(
81-
"mix test --color",
82-
env: [{"MIX_ENV", "test_options"}]
83-
)
84-
end
8560
end

mix.lock

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
%{
2-
"certifi": {:hex, :certifi, "2.0.0", "a0c0e475107135f76b8c1d5bc7efb33cd3815cb3cf3dea7aefdd174dabead064", [:rebar3], [], "hexpm"},
3-
"earmark": {:hex, :earmark, "1.3.2", "b840562ea3d67795ffbb5bd88940b1bed0ed9fa32834915125ea7d02e35888a5", [:mix], [], "hexpm"},
4-
"ex_aws": {:hex, :ex_aws, "2.0.0", "9c83ca070b7ddc1079e61a07ba8d97d9c335888881f841bd54691d34fbf0e116", [:mix], [{:configparser_ex, "~> 2.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}, {:xml_builder, "~> 0.1.0", [hex: :xml_builder, repo: "hexpm", optional: true]}], "hexpm"},
5-
"ex_doc": {:hex, :ex_doc, "0.20.2", "1bd0dfb0304bade58beb77f20f21ee3558cc3c753743ae0ddbb0fd7ba2912331", [:mix], [{:earmark, "~> 1.3", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.10", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"},
6-
"hackney": {:hex, :hackney, "1.9.0", "51c506afc0a365868469dcfc79a9d0b94d896ec741cfd5bd338f49a5ec515bfe", [:rebar3], [{:certifi, "2.0.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
7-
"idna": {:hex, :idna, "5.1.0", "d72b4effeb324ad5da3cab1767cb16b17939004e789d8c0ad5b70f3cea20c89a", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"},
8-
"makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"},
9-
"makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm"},
10-
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},
11-
"mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm"},
12-
"nimble_parsec": {:hex, :nimble_parsec, "0.5.0", "90e2eca3d0266e5c53f8fbe0079694740b9c91b6747f2b7e3c5d21966bba8300", [:mix], [], "hexpm"},
13-
"poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"},
14-
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"},
15-
"sweet_xml": {:hex, :sweet_xml, "0.6.5", "dd9cde443212b505d1b5f9758feb2000e66a14d3c449f04c572f3048c66e6697", [:mix], [], "hexpm"},
16-
"unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm"},
2+
"certifi": {:hex, :certifi, "2.5.1", "867ce347f7c7d78563450a18a6a28a8090331e77fa02380b4a21962a65d36ee5", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "805abd97539caf89ec6d4732c91e62ba9da0cda51ac462380bbd28ee697a8c42"},
3+
"earmark": {:hex, :earmark, "1.3.2", "b840562ea3d67795ffbb5bd88940b1bed0ed9fa32834915125ea7d02e35888a5", [:mix], [], "hexpm", "e3be2bc3ae67781db529b80aa7e7c49904a988596e2dbff897425b48b3581161"},
4+
"ex_aws": {:hex, :ex_aws, "2.1.2", "a0f8443556eb527e042c749eb87347d9cd1d13688da4e5354ddee51f99272360", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "b1d24a9afa850963ff2874762316744ddcf48e1f9bad416c57b95e1c5a080f11"},
5+
"ex_doc": {:hex, :ex_doc, "0.20.2", "1bd0dfb0304bade58beb77f20f21ee3558cc3c753743ae0ddbb0fd7ba2912331", [:mix], [{:earmark, "~> 1.3", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.10", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "8e24fc8ff9a50b9f557ff020d6c91a03cded7e59ac3e0eec8a27e771430c7d27"},
6+
"hackney": {:hex, :hackney, "1.15.2", "07e33c794f8f8964ee86cebec1a8ed88db5070e52e904b8f12209773c1036085", [:rebar3], [{:certifi, "2.5.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.5", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "e0100f8ef7d1124222c11ad362c857d3df7cb5f4204054f9f0f4a728666591fc"},
7+
"idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"},
8+
"jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fdf843bca858203ae1de16da2ee206f53416bbda5dc8c9e78f43243de4bc3afe"},
9+
"makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a10c6eb62cca416019663129699769f0c2ccf39428b3bb3c0cb38c718a0c186d"},
10+
"makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"},
11+
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
12+
"mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
13+
"nimble_parsec": {:hex, :nimble_parsec, "0.5.0", "90e2eca3d0266e5c53f8fbe0079694740b9c91b6747f2b7e3c5d21966bba8300", [:mix], [], "hexpm", "5c040b8469c1ff1b10093d3186e2e10dbe483cd73d79ec017993fb3985b8a9b3"},
14+
"parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"},
15+
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm", "13104d7897e38ed7f044c4de953a6c28597d1c952075eb2e328bc6d6f2bfc496"},
16+
"sweet_xml": {:hex, :sweet_xml, "0.6.6", "fc3e91ec5dd7c787b6195757fbcf0abc670cee1e4172687b45183032221b66b8", [:mix], [], "hexpm", "2e1ec458f892ffa81f9f8386e3f35a1af6db7a7a37748a64478f13163a1f3573"},
17+
"unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"},
1718
}

test/lib/dynamo/decoder_test.exs

Lines changed: 13 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,42 +3,22 @@ defmodule ExAws.Dynamo.DecoderTest do
33
alias ExAws.Dynamo.Decoder
44
alias ExAws.Dynamo.Encoder
55

6-
if Application.get_env(:ex_aws, :dynamodb, [])[:decode_sets] do
7-
test "decoder decodes numberset to a mapset of numbers" do
8-
assert %{"NS" => ["1", "2", "3"]}
9-
|> Decoder.decode() == MapSet.new([1, 2, 3])
6+
test "decoder decodes numberset to a mapset of numbers" do
7+
assert %{"NS" => ["1", "2", "3"]}
8+
|> Decoder.decode() == MapSet.new([1, 2, 3])
109

11-
assert %{"NS" => [1, 2, 3]}
12-
|> Decoder.decode() == MapSet.new([1, 2, 3])
13-
end
14-
15-
test "decoder decodes stringset to a mapset of strings" do
16-
assert %{"SS" => ["foo", "bar", "baz"]}
17-
|> Decoder.decode() == MapSet.new(["foo", "bar", "baz"])
18-
end
19-
20-
test "decoder decodes binaryset to a mapset of strings" do
21-
assert %{"BS" => ["U3Vubnk=", "UmFpbnk=", "U25vd3k="]}
22-
|> Decoder.decode() == MapSet.new(["U3Vubnk=", "UmFpbnk=", "U25vd3k="])
23-
end
24-
else
25-
test "decoder decodes numberset to a list of numbers" do
26-
assert %{"NS" => ["1", "2", "3"]}
27-
|> Decoder.decode() == [1, 2, 3]
28-
29-
assert %{"NS" => [1, 2, 3]}
30-
|> Decoder.decode() == [1, 2, 3]
31-
end
10+
assert %{"NS" => [1, 2, 3]}
11+
|> Decoder.decode() == MapSet.new([1, 2, 3])
12+
end
3213

33-
test "decoder decodes stringset to a list of strings" do
34-
assert %{"SS" => ["foo", "bar", "baz"]}
35-
|> Decoder.decode() == ["foo", "bar", "baz"]
36-
end
14+
test "decoder decodes stringset to a mapset of strings" do
15+
assert %{"SS" => ["foo", "bar", "baz"]}
16+
|> Decoder.decode() == MapSet.new(["foo", "bar", "baz"])
17+
end
3718

38-
test "decoder decodes binaryset to a list of strings" do
39-
assert %{"BS" => ["U3Vubnk=", "UmFpbnk=", "U25vd3k="]}
40-
|> Decoder.decode() == ["U3Vubnk=", "UmFpbnk=", "U25vd3k="]
41-
end
19+
test "decoder decodes binaryset to a mapset of strings" do
20+
assert %{"BS" => ["U3Vubnk=", "UmFpbnk=", "U25vd3k="]}
21+
|> Decoder.decode() == MapSet.new(["U3Vubnk=", "UmFpbnk=", "U25vd3k="])
4222
end
4323

4424
test "lists of different types" do

upgrade_guides/v3.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Upgrading from version 2.X.X to version 3.X.X
2+
3+
## MapSet
4+
5+
Prior to version **2.2.0**, **ex_aws_dynamo** was encoding **MapSet** data into one of the three Dynamo set types (number, string, and binary), but was decoding those types into Elixir **List** data. In version **2.2.0**, a PR added a boolean configuration option, `:decode_sets`, that would allow the user to specify that these types should be decoded into **MapSet** as well.
6+
7+
In this major release, Dynamo set types decode to Elixir **MapSet** by default, so the `:decode_sets` configuration option can be removed if it was included. If it this option was not included or was explicitly set to `false`, you'll need to be prepared to handle any decoded Dynamo sets as **MapSet** instead of **List**.
8+
9+
## Jason
10+
11+
Several months ago, `ex_aws` switched its default JSON codec from **Poison** to **Jason** (see https://github.com/ex-aws/ex_aws/pull/658). In this major release, the encoder used for `dev` and `test` environments has been changed to **Jason**, and the README file has been updated to show **Jason** in use instead of **Poison**, and refers the user to the `ex_aws` docs for information about how to provide a custom JSON codec.

0 commit comments

Comments
 (0)