Current section

Files

Jump to
birl src birl@instant.erl
Raw

src/birl@instant.erl

-module(birl@instant).
-compile(no_auto_import).
-export([now/0, compare/2, difference/2, add/2, subtract/2]).
-export_type([instant/0]).
-opaque instant() :: {instant, integer()}.
-spec now() -> instant().
now() ->
_pipe = birl_ffi:monotonic_now(),
{instant, _pipe}.
-spec compare(instant(), instant()) -> gleam@order:order().
compare(A, B) ->
{instant, Ia} = A,
{instant, Ib} = B,
case Ia =:= Ib of
true ->
eq;
false ->
case Ia < Ib of
true ->
lt;
false ->
gt
end
end.
-spec difference(instant(), instant()) -> birl@duration:duration().
difference(A, B) ->
{instant, Ia} = A,
{instant, Ib} = B,
{duration, Ib - Ia}.
-spec add(instant(), birl@duration:duration()) -> instant().
add(Value, Duration) ->
{instant, Instant} = Value,
{duration, Duration@1} = Duration,
{instant, Instant + Duration@1}.
-spec subtract(instant(), birl@duration:duration()) -> instant().
subtract(Value, Duration) ->
{instant, Instant} = Value,
{duration, Duration@1} = Duration,
{instant, Instant - Duration@1}.