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: