ExAws v2.0.0 ExAws.JSON.Codec behaviour View Source

Defines the specification for a JSON codec.

ExAws supports the use of your favorite JSON codec provided it fulfills this specification. Poison fulfills this spec without modification, and is the default.

See the contents of ExAws.JSON.JSX for an example of an alternative implementation.

Example

Here for example is the code required to make jsx comply with this spec.

In your config you would do:

config :ex_aws,
  json_codec: ExAws.JSON.JSX
defmodule ExAws.JSON.JSX do
  @behaviour ExAws.JSON.Codec

  @moduledoc false

  def encode!(%{} = map) do
    map |> :jsx.encode
  end

  def encode(map) do
    try do
      {:ok, encode!(map)}
    rescue
      ArgumentError -> {:error, :badarg}
    end
  end

  def decode!(string) do
    :jsx.decode(string, [:return_maps])
  end

  def decode(string) do
    try do
      {:ok, decode!(string)}
    rescue
      ArgumentError -> {:error, :badarg}
    end
  end
end

Link to this section Summary

Link to this section Callbacks

Link to this callback decode(arg0) View Source
decode(String.t) :: {:ok, %{}} | {:error, %{}}
Link to this callback decode!(arg0) View Source
decode!(String.t) :: %{}
Link to this callback encode(%{}) View Source
encode(%{}) :: {:ok, String.t} | {:error, String.t}