List with nested maps - Part Deux

Here is a simple and easily configurable example:

defmodule Example do
  @keys [
    Asset: [:amountAsset],
    Last: [:data, :lastPrice],
    Priced_in: [:priceAsset],
    Volume: [:data, :volumeWaves]
  ]

  def sample(list) when is_list(list), do: Enum.map(list, &do_sample/1)

  defp do_sample(element), do: Enum.reduce(@keys, %{}, &do_sample(&1, &2, element))

  defp do_sample({key, value}, acc, element), do: Map.put_new(acc, key, get_in(element, value))
end

Helpful resources:

  1. Enum.map/2
  2. Enum.reduce/3
  3. Map.put_new/3
  4. get_in/2
  5. is_list/1
2 Likes