lib/hologram/compiler/decoders/map_type_decoder.ex

defmodule Hologram.Compiler.MapTypeDecoder do
  alias Hologram.Compiler.Decoder

  def decode(%{"data" => data}) do
    Enum.map(data, fn {key, value} -> {decode_key(key), Decoder.decode(value)} end)
    |> Enum.into(%{})
  end

  defp decode_key(key) do
    [_, type, value] =
      ~r/~(\w+)\[(.+)\]/
      |> Regex.run(key)

    case type do
      "atom" ->
        String.to_atom(value)

      "string" ->
        value
    end
  end
end