-module(glimit@utils). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/glimit/utils.gleam"). -export([now/0, rescue/1, safe_call/3]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC(false). -file("src/glimit/utils.gleam", 13). ?DOC(false). -spec now() -> integer(). now() -> glimit_ffi:monotonic_now_ms(). -file("src/glimit/utils.gleam", 21). ?DOC(false). -spec rescue(fun(() -> FJI)) -> {ok, FJI} | {error, nil}. rescue(F) -> glimit_ffi:rescue(F). -file("src/glimit/utils.gleam", 26). ?DOC(false). -spec safe_call( gleam@erlang@process:subject(FJL), fun((gleam@erlang@process:subject(FJN)) -> FJL), integer() ) -> {ok, FJN} | {error, nil}. safe_call(Subject, Make_request, Timeout) -> case gleam@erlang@process:subject_owner(Subject) of {error, _} -> {error, nil}; {ok, Callee} -> Reply_subject = gleam@erlang@process:new_subject(), Monitor = gleam@erlang@process:monitor(Callee), gleam@erlang@process:send(Subject, Make_request(Reply_subject)), Result = begin _pipe = gleam_erlang_ffi:new_selector(), _pipe@1 = gleam@erlang@process:select_map( _pipe, Reply_subject, fun(Reply) -> {ok, Reply} end ), _pipe@2 = gleam@erlang@process:select_specific_monitor( _pipe@1, Monitor, fun(_) -> {error, nil} end ), gleam_erlang_ffi:select(_pipe@2, Timeout) end, gleam@erlang@process:demonitor_process(Monitor), _pipe@3 = Result, gleam@result:flatten(_pipe@3) end.