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