-module(lamb@table). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([from_name/1, is_alive/1, create/1, delete/1]). -export_type([table/2, config/0, kind/0, access/0, error/0]). -type table(GND, GNE) :: {table, gleam@erlang:reference_(), gleam@erlang@atom:atom_(), kind(), access(), boolean()} | {gleam_phantom, GND, GNE}. -type config() :: {config, binary(), access(), kind(), boolean()}. -type kind() :: set | bag. -type access() :: public | protected | private. -type error() :: {already_registered, gleam@erlang@atom:atom_()}. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb/table.gleam", 76). -spec from_name(binary()) -> {ok, gleam@erlang:reference_()} | {error, nil}. from_name(Name) -> case gleam_erlang_ffi:atom_from_string(Name) of {ok, Atom} -> lamb_erlang_ffi:table_id(Atom); {error, _} -> {error, nil} end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb/table.gleam", 83). -spec is_alive(table(any(), any())) -> boolean(). is_alive(Table) -> case lamb_erlang_ffi:table_id(erlang:element(2, Table)) of {ok, _} -> true; {error, _} -> false end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb/table.gleam", 45). -spec create(config()) -> {ok, table(any(), any())} | {error, error()}. create(Config) -> {config, Name, Access, Kind, Registered} = Config, Name@1 = erlang:binary_to_atom(Name), Create = fun() -> Table_id = lamb_erlang_ffi:create_table( Name@1, Access, Kind, Registered ), {table, Table_id, Name@1, Kind, Access, Registered} end, case {Registered, lamb_erlang_ffi:table_id(Name@1)} of {true, {ok, _}} -> {error, {already_registered, Name@1}}; {_, _} -> {ok, Create()} end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb/table.gleam", 62). -spec delete(table(any(), any())) -> nil. delete(Table) -> case is_alive(Table) of true -> ets:delete(erlang:element(2, Table)), nil; false -> nil end.