lib/omise/account.ex

defmodule Omise.Account do
  @moduledoc ~S"""
  Provides Account API interfaces.

  <https://www.omise.co/account-api>
  """

  use Omise.HTTPClient, endpoint: "account"

  defstruct object: "account",
            id: nil,
            livemode: nil,
            location: nil,
            email: nil,
            currency: nil,
            supported_currencies: nil,
            created: nil,
            api_version: nil,
            auto_activate_recipients: nil,
            chain_enabled: nil,
            chain_return_uri: nil,
            country: nil,
            metadata_export_keys: nil,
            team: nil,
            webhook_uri: nil

  @type t :: %__MODULE__{
          object: String.t(),
          id: String.t(),
          livemode: boolean,
          location: String.t(),
          email: String.t(),
          currency: String.t(),
          supported_currencies: list,
          created: String.t(),
          api_version: String.t(),
          auto_activate_recipients: boolean,
          chain_enabled: boolean,
          chain_return_uri: String.t(),
          country: String.t(),
          metadata_export_keys: map,
          team: String.t(),
          webhook_uri: String.t()
        }

  @doc ~S"""
  Retrieve the account.

  Returns `{:ok, account}` if the request is successful, `{:error, error}` otherwise.

  ## Examples

      Omise.Account.retrieve

      Omise.Account.retrieve(key: "skey_56ia27lqtvg32u7iww8")

  """
  @spec retrieve(Keyword.t()) :: {:ok, t} | {:error, Omise.Error.t()}
  def retrieve(opts \\ []) do
    opts = Keyword.merge(opts, as: %__MODULE__{})
    get(@endpoint, [], opts)
  end
end