Current section

Files

Jump to
telega src telega@internal@registry.erl
Raw

src/telega@internal@registry.erl

-module(telega@internal@registry).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/telega/internal/registry.gleam").
-export([start/1, stop/1, register/3, unregister/2, get/2]).
-export_type([ets_table/0, registry/1]).
-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(false).
-type ets_table() :: any().
-opaque registry(KWA) :: {registry, ets_table()} | {gleam_phantom, KWA}.
-file("src/telega/internal/registry.gleam", 13).
?DOC(false).
-spec start(binary()) -> {ok, registry(any())} |
{error, telega@error:telega_error()}.
start(Name) ->
Table = ets:new(
erlang:binary_to_atom(<<"telega_registry_"/utf8, Name/binary>>),
[erlang:binary_to_atom(<<"set"/utf8>>),
erlang:binary_to_atom(<<"public"/utf8>>)]
),
{ok, {registry, Table}}.
-file("src/telega/internal/registry.gleam", 22).
?DOC(false).
-spec stop(registry(any())) -> boolean().
stop(Registry) ->
ets:delete(erlang:element(2, Registry)).
-file("src/telega/internal/registry.gleam", 26).
?DOC(false).
-spec register(registry(KWH), binary(), gleam@erlang@process:subject(KWH)) -> boolean().
register(Registry, Key, Subject) ->
ets:insert(erlang:element(2, Registry), {Key, Subject}).
-file("src/telega/internal/registry.gleam", 34).
?DOC(false).
-spec unregister(registry(any()), binary()) -> boolean().
unregister(Registry, Key) ->
ets:delete(erlang:element(2, Registry), Key).
-file("src/telega/internal/registry.gleam", 38).
?DOC(false).
-spec get(registry(KWM), binary()) -> gleam@option:option(gleam@erlang@process:subject(KWM)).
get(Registry, Key) ->
case ets:lookup(erlang:element(2, Registry), Key) of
[] ->
none;
[{_, Subject} | _] ->
{some, Subject}
end.