lib/consul/json_codec.ex

defmodule Consul.JsonCodec do
  @type json_value :: nil | true | false | list | float | integer | String.t() | map
  
  @callback decode(iodata) :: {:ok, json_value} | {:error, term}
  @callback decode(iodata, keyword) :: {:ok, json_value} | {:error, term}

  def decode(iodata), do: json_codec().decode(iodata)
  def decode(iodata, opts), do: json_codec().decode(iodata, opts)

  defp json_codec(), do: Application.fetch_env!(:consulex, :json_codec)
end