Current section

Files

Jump to
processgroups src processgroups.erl
Raw

src/processgroups.erl

-module(processgroups).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([start_link/0, start_link_with_scope/1, start/1, join/2, join_many/2, join_scope/3, join_scope_many/3, leave/2, leave_scope/3, leave_many/2, leave_many_scope/3, monitor/1, erlang_monitor_scope/2, monitor_scope/2, selecting_process_group_monitor/3, demonitor/1, demonitor_scope/2, get_local_members/1, get_local_members_scope/2, get_members/1, get_members_scope/2, which_groups/0, which_groups_scope/1]).
-export_type([group_monitor/1, group_monitor_event/1]).
-opaque group_monitor(HJS) :: {group_monitor, gleam@erlang:reference_(), HJS}.
-type group_monitor_event(HJT) :: {process_joined,
HJT,
list(gleam@erlang@process:pid_())} |
{process_left, HJT, list(gleam@erlang@process:pid_())}.
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 12).
-spec start_link() -> {ok, gleam@erlang@process:pid_()} |
{error, gleam@dynamic:dynamic_()}.
start_link() ->
pg:start_link().
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 15).
-spec start_link_with_scope(gleam@erlang@atom:atom_()) -> {ok,
gleam@erlang@process:pid_()} |
{error, gleam@dynamic:dynamic_()}.
start_link_with_scope(Scope) ->
pg:start_link(Scope).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 20).
-spec start(gleam@erlang@atom:atom_()) -> {ok, gleam@erlang@process:pid_()} |
{error, gleam@dynamic:dynamic_()}.
start(Scope) ->
pg:start(Scope).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 23).
-spec join(any(), gleam@erlang@process:pid_()) -> nil.
join(Group, Pid) ->
pg:join(Group, Pid).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 26).
-spec join_many(any(), list(gleam@erlang@process:pid_())) -> nil.
join_many(Group, Pids) ->
pg:join(Group, Pids).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 29).
-spec join_scope(gleam@erlang@atom:atom_(), any(), gleam@erlang@process:pid_()) -> nil.
join_scope(Scope, Group, Pid) ->
pg:join(Scope, Group, Pid).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 32).
-spec join_scope_many(
gleam@erlang@atom:atom_(),
any(),
list(gleam@erlang@process:pid_())
) -> nil.
join_scope_many(Scope, Group, Pids) ->
pg:join(Scope, Group, Pids).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 39).
-spec leave(any(), gleam@erlang@process:pid_()) -> nil.
leave(Group, Pid) ->
pg:leave(Group, Pid).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 42).
-spec leave_scope(gleam@erlang@atom:atom_(), any(), gleam@erlang@process:pid_()) -> gleam@erlang@atom:atom_().
leave_scope(Scope, Group, Pid) ->
pg:leave(Scope, Group, Pid).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 45).
-spec leave_many(any(), list(gleam@erlang@process:pid_())) -> nil.
leave_many(Group, Pids) ->
pg:leave(Group, Pids).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 48).
-spec leave_many_scope(
gleam@erlang@atom:atom_(),
any(),
list(gleam@erlang@process:pid_())
) -> gleam@erlang@atom:atom_().
leave_many_scope(Scope, Group, Pids) ->
pg:leave(Scope, Group, Pids).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 71).
-spec monitor(HKM) -> {group_monitor(HKM), list(gleam@erlang@process:pid_())}.
monitor(Group) ->
{Ref, Pids} = pg:monitor(Group),
{{group_monitor, Ref, Group}, Pids}.
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 88).
-spec erlang_monitor_scope(gleam@erlang@atom:atom_(), any()) -> {gleam@erlang:reference_(),
list(gleam@erlang@process:pid_())}.
erlang_monitor_scope(Scope, Group) ->
pg:monitor(Scope, Group).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 79).
-spec monitor_scope(gleam@erlang@atom:atom_(), HKR) -> {group_monitor(HKR),
list(gleam@erlang@process:pid_())}.
monitor_scope(Scope, Group) ->
{Ref, Pids} = pg:monitor(Scope, Group),
{{group_monitor, Ref, Group}, Pids}.
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 115).
-spec selecting_process_group_monitor(
gleam@erlang@process:selector(HKW),
group_monitor(HKY),
fun((group_monitor_event(HKY)) -> HKW)
) -> gleam@erlang@process:selector(HKW).
selecting_process_group_monitor(Selector, Monitor, Mapping) ->
gleam@erlang@process:selecting_record4(
Selector,
erlang:element(2, Monitor),
fun(Event, _, Pids) ->
_assert_subject = gleam_erlang_ffi:atom_from_dynamic(Event),
{ok, Event@1} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"processgroups"/utf8>>,
function => <<"selecting_process_group_monitor"/utf8>>,
line => 125})
end,
_assert_subject@1 = gleam@dynamic@decode:run(
Pids,
gleam@dynamic@decode:list(
gleam@dynamic@decode:new_primitive_decoder(
<<"pid"/utf8>>,
fun(D) -> case gleam_erlang_ffi:pid_from_dynamic(D) of
{ok, Pid} ->
{ok, Pid};
{error, _} ->
{error, erlang:self()}
end end
)
)
),
{ok, Pids@1} = case _assert_subject@1 of
{ok, _} -> _assert_subject@1;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail@1,
module => <<"processgroups"/utf8>>,
function => <<"selecting_process_group_monitor"/utf8>>,
line => 127})
end,
Payload = case erlang:atom_to_binary(Event@1) of
<<"join"/utf8>> ->
{process_joined, erlang:element(3, Monitor), Pids@1};
<<"leave"/utf8>> ->
{process_left, erlang:element(3, Monitor), Pids@1};
_ ->
erlang:error(#{gleam_error => panic,
message => <<"`panic` expression evaluated."/utf8>>,
module => <<"processgroups"/utf8>>,
function => <<"selecting_process_group_monitor"/utf8>>,
line => 143})
end,
Mapping(Payload)
end
).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 152).
-spec demonitor(any()) -> boolean().
demonitor(Group) ->
pg:demonitor(Group).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 155).
-spec demonitor_scope(gleam@erlang@atom:atom_(), any()) -> boolean().
demonitor_scope(Scope, Group) ->
pg:demonitor(Scope, Group).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 158).
-spec get_local_members(any()) -> list(gleam@erlang@process:pid_()).
get_local_members(Group) ->
pg:get_local_members(Group).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 161).
-spec get_local_members_scope(gleam@erlang@atom:atom_(), any()) -> list(gleam@erlang@process:pid_()).
get_local_members_scope(Scope, Group) ->
pg:get_local_members(Scope, Group).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 164).
-spec get_members(any()) -> list(gleam@erlang@process:pid_()).
get_members(Group) ->
pg:get_members(Group).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 167).
-spec get_members_scope(gleam@erlang@atom:atom_(), any()) -> list(gleam@erlang@process:pid_()).
get_members_scope(Scope, Group) ->
pg:get_members(Scope, Group).
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 170).
-spec which_groups() -> list(any()).
which_groups() ->
pg:which_groups().
-file("/home/nathan/projects/private/gleam_processgroups/src/processgroups.gleam", 173).
-spec which_groups_scope(gleam@erlang@atom:atom_()) -> list(any()).
which_groups_scope(Scope) ->
pg:which_groups(Scope).