src/compile_time.ex

defmodule CompileTime do
  @doc"""
  Evaluate a function at compile time.

  ## Example
    iex> require CompileTime
    iex> CompileTime.eval(&NaiveDateTime.utc_now/0)
    %NaiveDateTime{}
  """
  defmacro eval(f) do
    {fun, _} = Code.eval_quoted(f)
    val = fun.()

    quote do
      unquote(Macro.escape(val))
    end
  end
end