lib/circlex/emulator/state/util.ex

defmodule Circlex.Emulator.State.Util do
  alias Circlex.Struct.{Payout, Transfer}

  defp test_filter(payout = %Payout{}, {:source_wallet_id, source_wallet_id}) do
    payout.source_wallet_id == source_wallet_id
  end

  defp test_filter(transfer = %Transfer{}, {:transfer_source, {type, id}}) do
    transfer.source.type == type and transfer.source.id == id
  end

  def apply_filters(vals, filters) do
    Enum.filter(vals, fn val ->
      Enum.all?(filters, fn filter -> test_filter(val, filter) end)
    end)
  end

  def fetch(m, key) do
    case Map.get(m, key) do
      nil ->
        Map.get(m, to_string(key))

      els ->
        els
    end
  end

  def merchant_id(), do: Circlex.Emulator.merchant_id()
end