lib/hologram/compiler/binder.ex

defmodule Hologram.Compiler.Binder do
  alias Hologram.Compiler.IR.{MapAccess, MapType, Variable}

  def bind(value, path \\ [])

  def bind(%MapType{data: data}, path) do
    Enum.reduce(data, [], fn {key, value}, acc ->
      acc ++ bind(value, path ++ [%MapAccess{key: key}])
    end)
  end

  def bind(%Variable{} = var, path) do
    [path ++ [var]]
  end

  def bind(_, _) do
    []
  end
end