-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}.