lib/r_map/support.ex

defmodule RMap.Support do
  @moduledoc """
  Summarized other useful functions related to Lit.
  Defines all of here functions when `use RMap.Support`.
  """
  @spec __using__(any) :: list
  defmacro __using__(_opts) do
    RUtils.define_all_functions!(__MODULE__)
  end

  @doc """
  Returns list recursively converted  from given map to list.
  ## Examples
      iex> RMap.deep_to_list(%{a: 1, b: %{c: 2, d: {1, 2}, e: [1, 2]}})
      [[:a, 1], [:b, [[:c, 2], [:d, [1, 2]], [:e, [1, 2]]]]]
  """
  @spec deep_to_list(map()) :: list()
  def deep_to_list(map) when is_map(map) do
    map
    |> Enum.map(&deep_to_list(&1))
  end

  def deep_to_list(tuple) when is_tuple(tuple) do
    Tuple.to_list(tuple)
    |> Enum.map(&deep_to_list(&1))
  end

  def deep_to_list(any), do: any
end