defmodule Adventurous.Util do defmodule Timer do defstruct start: System.monotonic_time() end def timed(func, msg \\ nil) do timer = %Timer{} result = func.() diff = time_diff(timer) if msg do IO.puts("#{msg}: took #{diff/1_000_000}ms") end {result, diff} end @spec time_diff(atom | %{:start => number, optional(any) => any}) :: number def time_diff(timer, msg \\ nil) do diff = System.monotonic_time() - timer.start if msg do IO.puts("#{msg}: took #{diff/1_000_000}ms") end diff end end