A behaviour for JSON serialization.
decode(json :: iodata(), opts :: []) :: {:ok, any()} | {:error, :invalid}
encode!(data :: any()) :: iodata()