lib/config.ex

defmodule DigitalToken.Config do
  poison = if(Code.ensure_loaded?(Poison), do: Poison, else: nil)
  jason = if(Code.ensure_loaded?(Jason), do: Jason, else: nil)
  digital_token_json = Application.compile_env(:digital_token, :json_library)
  @json_lib digital_token_json || jason || poison

  cond do
    Code.ensure_loaded?(@json_lib) and function_exported?(@json_lib, :decode!, 1) ->
      :ok

    digital_token_json ->
      raise ArgumentError,
            "Could not load configured :json_library, " <>
              "make sure #{inspect(digital_token_json)} is listed as a dependency"

    true ->
      raise ArgumentError, """
      A JSON library has not been configured.\n
      Please configure a JSON lib in your `mix.exs`
      file. The suggested library is `:jason`.

      For example in your `mix.exs`:

          def deps() do
            [
              {:jason, "~> 1.0"},
              ...
            ]
          end

      You can then configure this library for `ex_cldr`
      in your `config.exs` as follows:

          config :digital_token,
            json_library: Jason

      If no configuration is provided, `digital_token` will
      attempt to detect if Jason or Poison are configured.
      """
  end

  @doc """
  Return the configured json lib
  """
  def json_library do
    @json_lib
  end
end