How to programmatically call macros?

Holy moly… thanks for that super detailed explanation!

Let me see if I understand. The strategy here is not to “programmatically call” the Absinthe macros, but rather examine the AST they output and mimic it with my own macro?

Why can the def macro be used with unquote but the Absinthe macros not?

defmodule Foo do
  Enum.each(["foo", "bar"], fn name ->
    def unquote(:"#{name}")() do
      IO.puts unquote(name)
    end
  end)
end

And lastly, does the metadata element of the AST tuple not matter?

Thanks!