-module(fused@erlang@process).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/fused/erlang/process.gleam").
-export([is_available/0, new/0, send/2, recv/1, new_selector/0, select/2, select_map/3, map_selector/2, merge_selector/2, selector_recv/2, spawn_unlinked/1, monitor/2, select_monitors/2, select_specific_monitor/3]).
-file("src/fused/erlang/process.gleam", 7).
-spec is_available() -> boolean().
is_available() ->
true.
-file("src/fused/erlang/process.gleam", 25).
-spec new() -> {gleam@erlang@process:subject(FQK),
gleam@erlang@process:subject(FQK)}.
new() ->
Subject = gleam@erlang@process:new_subject(),
{Subject, Subject}.
-file("src/fused/erlang/process.gleam", 31).
-spec send(gleam@erlang@process:subject(FQN), FQN) -> nil.
send(Send, X) ->
gleam@erlang@process:send(Send, X).
-file("src/fused/erlang/process.gleam", 36).
-spec recv(gleam@erlang@process:subject(FQP)) -> FQP.
recv(Recv) ->
gleam_erlang_ffi:'receive'(Recv).
-file("src/fused/erlang/process.gleam", 45).
-spec new_selector() -> gleam@erlang@process:selector(any()).
new_selector() ->
gleam_erlang_ffi:new_selector().
-file("src/fused/erlang/process.gleam", 50).
-spec select(
gleam@erlang@process:selector(FQU),
gleam@erlang@process:subject(FQU)
) -> gleam@erlang@process:selector(FQU).
select(Selector, Receiver) ->
gleam@erlang@process:select(Selector, Receiver).
-file("src/fused/erlang/process.gleam", 55).
-spec select_map(
gleam@erlang@process:selector(FQY),
gleam@erlang@process:subject(FRA),
fun((FRA) -> FQY)
) -> gleam@erlang@process:selector(FQY).
select_map(Selector, Receiver, Transform) ->
gleam@erlang@process:select_map(Selector, Receiver, Transform).
-file("src/fused/erlang/process.gleam", 64).
-spec map_selector(gleam@erlang@process:selector(FRD), fun((FRD) -> FRF)) -> gleam@erlang@process:selector(FRF).
map_selector(A, B) ->
gleam_erlang_ffi:map_selector(A, B).
-file("src/fused/erlang/process.gleam", 69).
-spec merge_selector(
gleam@erlang@process:selector(FRH),
gleam@erlang@process:selector(FRH)
) -> gleam@erlang@process:selector(FRH).
merge_selector(A, B) ->
gleam_erlang_ffi:merge_selector(A, B).
-file("src/fused/erlang/process.gleam", 74).
-spec selector_recv(
gleam@erlang@process:pid_(),
gleam@erlang@process:selector(FRL)
) -> FRL.
selector_recv(Self, From) ->
_assert_subject = erlang:self(),
case Self =:= _assert_subject of
true -> nil;
false -> erlang:error(#{gleam_error => assert,
message => <<"Assertion failed."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"fused/erlang/process"/utf8>>,
function => <<"selector_recv"/utf8>>,
line => 75,
kind => binary_operator,
operator => '==',
left => #{kind => expression,
value => Self,
start => 1458,
'end' => 1462
},
right => #{kind => expression,
value => _assert_subject,
start => 1466,
'end' => 1480
},
start => 1451,
'end' => 1480,
expression_start => 1458})
end,
gleam_erlang_ffi:select(From).
-file("src/fused/erlang/process.gleam", 88).
-spec spawn_unlinked(fun((gleam@erlang@process:pid_()) -> any())) -> gleam@erlang@process:pid_().
spawn_unlinked(A) ->
proc_lib:spawn(fun() -> A(erlang:self()) end).
-file("src/fused/erlang/process.gleam", 94).
-spec monitor(gleam@erlang@process:pid_(), gleam@erlang@process:pid_()) -> gleam@erlang@process:monitor().
monitor(Self, Pid) ->
_assert_subject = erlang:self(),
case Self =:= _assert_subject of
true -> nil;
false -> erlang:error(#{gleam_error => assert,
message => <<"Assertion failed."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"fused/erlang/process"/utf8>>,
function => <<"monitor"/utf8>>,
line => 95,
kind => binary_operator,
operator => '==',
left => #{kind => expression,
value => Self,
start => 1835,
'end' => 1839
},
right => #{kind => expression,
value => _assert_subject,
start => 1843,
'end' => 1857
},
start => 1828,
'end' => 1857,
expression_start => 1835})
end,
gleam@erlang@process:monitor(Pid).
-file("src/fused/erlang/process.gleam", 100).
-spec select_monitors(
gleam@erlang@process:selector(FRO),
fun((gleam@erlang@process:pid_()) -> FRO)
) -> gleam@erlang@process:selector(FRO).
select_monitors(Selector, Mapping) ->
gleam@erlang@process:select_monitors(
Selector,
fun(Down) ->
Pid@1 = case Down of
{process_down, _, Pid, _} -> Pid;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"fused/erlang/process"/utf8>>,
function => <<"select_monitors"/utf8>>,
line => 105,
value => _assert_fail,
start => 2062,
'end' => 2109,
pattern_start => 2073,
pattern_end => 2102})
end,
Mapping(Pid@1)
end
).
-file("src/fused/erlang/process.gleam", 111).
-spec select_specific_monitor(
gleam@erlang@process:selector(FRR),
gleam@erlang@process:monitor(),
fun((gleam@erlang@process:pid_()) -> FRR)
) -> gleam@erlang@process:selector(FRR).
select_specific_monitor(Selector, Monitor, Mapping) ->
gleam@erlang@process:select_specific_monitor(
Selector,
Monitor,
fun(Down) ->
Pid@1 = case Down of
{process_down, _, Pid, _} -> Pid;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"fused/erlang/process"/utf8>>,
function => <<"select_specific_monitor"/utf8>>,
line => 117,
value => _assert_fail,
start => 2358,
'end' => 2405,
pattern_start => 2369,
pattern_end => 2398})
end,
Mapping(Pid@1)
end
).