Current section
Files
Jump to
Current section
Files
src/glimit@utils.erl
-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(() -> FPH)) -> {ok, FPH} | {error, nil}.
rescue(F) ->
glimit_ffi:rescue(F).
-file("src/glimit/utils.gleam", 26).
?DOC(false).
-spec safe_call(
gleam@erlang@process:subject(FPK),
fun((gleam@erlang@process:subject(FPM)) -> FPK),
integer()
) -> {ok, FPM} | {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.