Skip to main content

src/fused@erlang@process.erl

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