-module(bigben@clock). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([new/0, now/1, from_fake/1]). -export_type([clock/0]). -opaque clock() :: {clock, fun(() -> birl:time())}. -spec new() -> clock(). new() -> {clock, fun birl:utc_now/0}. -spec now(clock()) -> birl:time(). now(Clock) -> (erlang:element(2, Clock))(). -spec from_fake(bigben@fake_clock:fake_clock()) -> clock(). from_fake(Clock) -> {clock, fun() -> bigben@fake_clock:now(Clock) end}.