Current section
Files
Jump to
Current section
Files
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(GZW) :: {group_monitor, gleam@erlang:reference_(), GZW}.
-type group_monitor_event(GZX) :: {process_joined,
GZX,
list(gleam@erlang@process:pid_())} |
{process_left, GZX, list(gleam@erlang@process:pid_())}.
-spec start_link() -> {ok, gleam@erlang@process:pid_()} |
{error, gleam@dynamic:dynamic_()}.
start_link() ->
pg:start_link().
-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).
-spec start(gleam@erlang@atom:atom_()) -> {ok, gleam@erlang@process:pid_()} |
{error, gleam@dynamic:dynamic_()}.
start(Scope) ->
pg:start(Scope).
-spec join(any(), gleam@erlang@process:pid_()) -> nil.
join(Group, Pid) ->
pg:join(Group, Pid).
-spec join_many(any(), list(gleam@erlang@process:pid_())) -> nil.
join_many(Group, Pids) ->
pg:join(Group, Pids).
-spec join_scope(gleam@erlang@atom:atom_(), any(), gleam@erlang@process:pid_()) -> nil.
join_scope(Scope, Group, Pid) ->
pg:join(Scope, Group, Pid).
-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).
-spec leave(any(), gleam@erlang@process:pid_()) -> nil.
leave(Group, Pid) ->
pg:leave(Group, Pid).
-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).
-spec leave_many(any(), list(gleam@erlang@process:pid_())) -> nil.
leave_many(Group, Pids) ->
pg:leave(Group, Pids).
-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).
-spec monitor(HAQ) -> {group_monitor(HAQ), list(gleam@erlang@process:pid_())}.
monitor(Group) ->
{Ref, Pids} = pg:monitor(Group),
{{group_monitor, Ref, Group}, Pids}.
-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).
-spec monitor_scope(gleam@erlang@atom:atom_(), HAV) -> {group_monitor(HAV),
list(gleam@erlang@process:pid_())}.
monitor_scope(Scope, Group) ->
{Ref, Pids} = pg:monitor(Scope, Group),
{{group_monitor, Ref, Group}, Pids}.
-spec selecting_process_group_monitor(
gleam@erlang@process:selector(HBA),
group_monitor(HBC),
fun((group_monitor_event(HBC)) -> HBA)
) -> gleam@erlang@process:selector(HBA).
selecting_process_group_monitor(Selector, Monitor, Mapping) ->
gleam@erlang@process:selecting_record4(
Selector,
erlang:element(2, Monitor),
fun(Event, Group, 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 => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"processgroups"/utf8>>,
function => <<"selecting_process_group_monitor"/utf8>>,
line => 124})
end,
To_pid = fun(D) -> {ok, gleam@dynamic:unsafe_coerce(D)} end,
_assert_subject@1 = (gleam@dynamic:list(To_pid))(Pids),
{ok, Pids@1} = case _assert_subject@1 of
{ok, _} -> _assert_subject@1;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail@1,
module => <<"processgroups"/utf8>>,
function => <<"selecting_process_group_monitor"/utf8>>,
line => 133})
end,
Group@1 = gleam@dynamic:unsafe_coerce(Group),
Payload = case erlang:atom_to_binary(Event@1) of
<<"join"/utf8>> ->
{process_joined, Group@1, Pids@1};
<<"leave"/utf8>> ->
{process_left, Group@1, Pids@1};
_ ->
erlang:error(#{gleam_error => panic,
message => <<"panic expression evaluated"/utf8>>,
module => <<"processgroups"/utf8>>,
function => <<"selecting_process_group_monitor"/utf8>>,
line => 140})
end,
Mapping(Payload)
end
).
-spec demonitor(any()) -> boolean().
demonitor(Group) ->
pg:demonitor(Group).
-spec demonitor_scope(gleam@erlang@atom:atom_(), any()) -> boolean().
demonitor_scope(Scope, Group) ->
pg:demonitor(Scope, Group).
-spec get_local_members(any()) -> list(gleam@erlang@process:pid_()).
get_local_members(Group) ->
pg:get_local_members(Group).
-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).
-spec get_members(any()) -> list(gleam@erlang@process:pid_()).
get_members(Group) ->
pg:get_members(Group).
-spec get_members_scope(gleam@erlang@atom:atom_(), any()) -> list(gleam@erlang@process:pid_()).
get_members_scope(Scope, Group) ->
pg:get_members(Scope, Group).
-spec which_groups() -> list(any()).
which_groups() ->
pg:which_groups().
-spec which_groups_scope(gleam@erlang@atom:atom_()) -> list(any()).
which_groups_scope(Scope) ->
pg:which_groups(Scope).