Current section
Files
Jump to
Current section
Files
src/glixir@registry.erl
-module(glixir@registry).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-define(FILEPATH, "src/glixir/registry.gleam").
-export([start_registry/2, start_unique_registry/1, register_subject/3, lookup_subject/2, unregister_subject/2, register_with_key/3, lookup_with_key/2, unregister_with_key/2]).
-export_type([registry/0, registry_keys/0, registry_error/0, registry_start_result/0, registry_register_result/0, registry_lookup_result/1, registry_unregister_result/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Registry support for Subject lookup with dynamic spawning\n"
" \n"
" This module provides a Gleam-friendly interface to Elixir's Registry,\n"
" using our Elixir helper module for clean data conversion.\n"
).
-opaque registry() :: {registry, gleam@erlang@process:pid_()}.
-type registry_keys() :: unique | duplicate.
-type registry_error() :: {start_error, binary()} |
{register_error, binary()} |
{lookup_error, binary()} |
{unregister_error, binary()} |
already_exists |
not_found.
-type registry_start_result() :: {registry_start_ok,
gleam@erlang@process:pid_()} |
{registry_start_error, gleam@dynamic:dynamic_()}.
-type registry_register_result() :: registry_register_ok |
{registry_register_error, gleam@dynamic:dynamic_()}.
-type registry_lookup_result(EOQ) :: {registry_lookup_ok,
gleam@erlang@process:subject(EOQ)} |
registry_lookup_not_found |
{registry_lookup_error, gleam@dynamic:dynamic_()}.
-type registry_unregister_result() :: registry_unregister_ok |
{registry_unregister_error, gleam@dynamic:dynamic_()}.
-file("src/glixir/registry.gleam", 88).
-spec keys_to_string(registry_keys()) -> binary().
keys_to_string(Keys) ->
case Keys of
unique ->
<<"unique"/utf8>>;
duplicate ->
<<"duplicate"/utf8>>
end.
-file("src/glixir/registry.gleam", 100).
?DOC(" Start a new Registry with the given name and key type\n").
-spec start_registry(binary(), registry_keys()) -> {ok, registry()} |
{error, registry_error()}.
start_registry(Name, Keys) ->
case 'Elixir.Glixir.Registry':start_registry(Name, keys_to_string(Keys)) of
{registry_start_ok, Pid} ->
{ok, {registry, Pid}};
{registry_start_error, Reason} ->
{error, {start_error, gleam@string:inspect(Reason)}}
end.
-file("src/glixir/registry.gleam", 111).
?DOC(" Start a unique key registry (most common use case)\n").
-spec start_unique_registry(binary()) -> {ok, registry()} |
{error, registry_error()}.
start_unique_registry(Name) ->
start_registry(Name, unique).
-file("src/glixir/registry.gleam", 116).
?DOC(" Register a Subject with a key in the registry\n").
-spec register_subject(binary(), binary(), gleam@erlang@process:subject(any())) -> {ok,
nil} |
{error, registry_error()}.
register_subject(Registry_name, Key, Subject) ->
case 'Elixir.Glixir.Registry':register_subject(Registry_name, Key, Subject) of
registry_register_ok ->
{ok, nil};
{registry_register_error, Reason} ->
{error, {register_error, gleam@string:inspect(Reason)}}
end.
-file("src/glixir/registry.gleam", 129).
?DOC(" Look up a Subject by key in the registry\n").
-spec lookup_subject(binary(), binary()) -> {ok,
gleam@erlang@process:subject(any())} |
{error, registry_error()}.
lookup_subject(Registry_name, Key) ->
case 'Elixir.Glixir.Registry':lookup_subject(Registry_name, Key) of
{registry_lookup_ok, Subject} ->
{ok, Subject};
registry_lookup_not_found ->
{error, not_found};
{registry_lookup_error, Reason} ->
{error, {lookup_error, gleam@string:inspect(Reason)}}
end.
-file("src/glixir/registry.gleam", 141).
?DOC(" Unregister a key from the registry\n").
-spec unregister_subject(binary(), binary()) -> {ok, nil} |
{error, registry_error()}.
unregister_subject(Registry_name, Key) ->
case 'Elixir.Glixir.Registry':unregister_subject(Registry_name, Key) of
registry_unregister_ok ->
{ok, nil};
{registry_unregister_error, Reason} ->
{error, {unregister_error, gleam@string:inspect(Reason)}}
end.
-file("src/glixir/registry.gleam", 157).
?DOC(" Register a subject with a custom key\n").
-spec register_with_key(binary(), binary(), gleam@erlang@process:subject(any())) -> {ok,
nil} |
{error, registry_error()}.
register_with_key(Registry_name, Key, Subject) ->
register_subject(Registry_name, Key, Subject).
-file("src/glixir/registry.gleam", 166).
?DOC(" Look up a subject by custom key\n").
-spec lookup_with_key(binary(), binary()) -> {ok,
gleam@erlang@process:subject(any())} |
{error, registry_error()}.
lookup_with_key(Registry_name, Key) ->
lookup_subject(Registry_name, Key).
-file("src/glixir/registry.gleam", 174).
?DOC(" Unregister a subject by custom key\n").
-spec unregister_with_key(binary(), binary()) -> {ok, nil} |
{error, registry_error()}.
unregister_with_key(Registry_name, Key) ->
unregister_subject(Registry_name, Key).