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