Current section

Files

Jump to
themis src themis@internal@erlang@ets.erl
Raw

src/themis@internal@erlang@ets.erl

-module(themis@internal@erlang@ets).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/themis/internal/erlang/ets.gleam").
-export([new/2, info/1, insert/3, insert_many/2, insert_raw/2, insert_new_raw/2, lookup/2, counter_increment/2, match_metric/2, match_record/2, counter_increment_by/3, delete_table/1]).
-export_type([table_builder/0, table/0, table_type/0, table_info/0, table_access/0, tid/0, table_error/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(false).
-type table_builder() :: {table_builder, table_type(), table_access()}.
-type table() :: any().
-type table_type() :: set | ordered_set | bag | duplicate_bag.
-type table_info() :: {table_info,
tid(),
boolean(),
boolean(),
boolean(),
boolean(),
integer(),
gleam@erlang@process:pid_(),
gleam@option:option(gleam@erlang@process:pid_()),
gleam@erlang@atom:atom_(),
integer(),
gleam@erlang@atom:atom_(),
boolean(),
table_type(),
integer(),
table_access()}.
-type table_access() :: public | protected | private.
-type tid() :: any().
-type table_error() :: atom_from_string_error |
{decode_error, list(gleam@dynamic@decode:decode_error())} |
insert_failed.
-file("src/themis/internal/erlang/ets.gleam", 172).
?DOC(false).
-spec guard_atom_from_string(
binary(),
fun((gleam@erlang@atom:atom_()) -> {ok, EUX} | {error, table_error()})
) -> {ok, EUX} | {error, table_error()}.
guard_atom_from_string(Table_name, Fun) ->
R = begin
_pipe = gleam_erlang_ffi:atom_from_string(Table_name),
gleam@result:replace_error(_pipe, atom_from_string_error)
end,
gleam@result:'try'(R, Fun).
-file("src/themis/internal/erlang/ets.gleam", 59).
?DOC(false).
-spec new(table_builder(), binary()) -> gleam@erlang@atom:atom_().
new(Builder, Name) ->
_pipe = erlang:binary_to_atom(Name),
themis_external:new(
_pipe,
erlang:element(2, Builder),
erlang:element(3, Builder)
).
-file("src/themis/internal/erlang/ets.gleam", 64).
?DOC(false).
-spec info(gleam@erlang@atom:atom_()) -> table_info().
info(Table_name) ->
R = themis_external:info(Table_name),
{table_info,
erlang:element(2, erlang:element(1, R)),
erlang:element(2, erlang:element(2, R)),
erlang:element(2, erlang:element(3, R)),
erlang:element(2, erlang:element(4, R)),
erlang:element(2, erlang:element(5, R)),
erlang:element(2, erlang:element(6, R)),
erlang:element(2, erlang:element(7, R)),
erlang:element(2, erlang:element(8, R)),
erlang:element(2, erlang:element(9, R)),
erlang:element(2, erlang:element(10, R)),
erlang:element(2, erlang:element(11, R)),
erlang:element(2, erlang:element(12, R)),
erlang:element(2, erlang:element(13, R)),
erlang:element(2, erlang:element(14, R)),
erlang:element(2, erlang:element(15, R))}.
-file("src/themis/internal/erlang/ets.gleam", 85).
?DOC(false).
-spec insert(binary(), any(), any()) -> {ok, boolean()} | {error, table_error()}.
insert(Table_name, Key, Value) ->
guard_atom_from_string(
Table_name,
fun(Table_name_atom) ->
{ok, ets:insert(Table_name_atom, {Key, Value})}
end
).
-file("src/themis/internal/erlang/ets.gleam", 105).
?DOC(false).
-spec insert_many(binary(), gleam@dict:dict(any(), any())) -> {ok, boolean()} |
{error, table_error()}.
insert_many(Table_name, To_insert) ->
Objects = maps:to_list(To_insert),
guard_atom_from_string(
Table_name,
fun(Table_name_atom) -> _pipe = ets:insert(Table_name_atom, Objects),
{ok, _pipe} end
).
-file("src/themis/internal/erlang/ets.gleam", 115).
?DOC(false).
-spec insert_raw(binary(), any()) -> {ok, boolean()} | {error, table_error()}.
insert_raw(Table_name, Object) ->
guard_atom_from_string(
Table_name,
fun(Table_name_atom) -> _pipe = ets:insert(Table_name_atom, Object),
{ok, _pipe} end
).
-file("src/themis/internal/erlang/ets.gleam", 94).
?DOC(false).
-spec insert_new_raw(binary(), {binary(), binary(), binary(), list(float())}) -> {ok,
nil} |
{error, table_error()}.
insert_new_raw(Table_name, Object) ->
guard_atom_from_string(
Table_name,
fun(Table_name_atom) -> case ets:insert_new(Table_name_atom, Object) of
true ->
{ok, nil};
false ->
{error, insert_failed}
end end
).
-file("src/themis/internal/erlang/ets.gleam", 120).
?DOC(false).
-spec lookup(binary(), any()) -> {ok, list(gleam@dynamic:dynamic_())} |
{error, table_error()}.
lookup(Table_name, Key) ->
guard_atom_from_string(
Table_name,
fun(Table_name_atom) -> _pipe = ets:lookup(Table_name_atom, Key),
{ok, _pipe} end
).
-file("src/themis/internal/erlang/ets.gleam", 142).
?DOC(false).
-spec counter_increment(binary(), any()) -> {ok, nil} | {error, table_error()}.
counter_increment(Table_name, Key) ->
guard_atom_from_string(
Table_name,
fun(Table_name_atom) ->
themis_external:counter_increment_by(Table_name_atom, Key, 1),
_pipe = nil,
{ok, _pipe}
end
).
-file("src/themis/internal/erlang/ets.gleam", 151).
?DOC(false).
-spec match_metric(binary(), any()) -> {ok, list(gleam@dynamic:dynamic_())} |
{error, table_error()}.
match_metric(Table_name, Kind) ->
guard_atom_from_string(
Table_name,
fun(Table_name_atom) ->
_pipe = themis_external:match_metric(Table_name_atom, Kind),
{ok, _pipe}
end
).
-file("src/themis/internal/erlang/ets.gleam", 159).
?DOC(false).
-spec match_record(binary(), binary()) -> {ok, list(gleam@dynamic:dynamic_())} |
{error, table_error()}.
match_record(Table_name, Name) ->
guard_atom_from_string(
Table_name,
fun(Table_name_atom) ->
_pipe = themis_external:match_record(Table_name_atom, Name),
{ok, _pipe}
end
).
-file("src/themis/internal/erlang/ets.gleam", 125).
?DOC(false).
-spec counter_increment_by(binary(), any(), themis@number:number_()) -> {ok,
nil} |
{error, table_error()}.
counter_increment_by(Table_name, Key, By) ->
guard_atom_from_string(
Table_name,
fun(Table_name_atom) ->
case By of
{dec, Val} ->
themis_external:counter_increment_by_decimal(
Table_name_atom,
Key,
Val
);
{int, Val@1} ->
themis_external:counter_increment_by(
Table_name_atom,
Key,
Val@1
);
na_n ->
erlang:error(#{gleam_error => panic,
message => <<"can not increment a counter by NaN"/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"themis/internal/erlang/ets"/utf8>>,
function => <<"counter_increment_by"/utf8>>,
line => 135});
neg_inf ->
erlang:error(#{gleam_error => panic,
message => <<"can not increment a counter by -Inf"/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"themis/internal/erlang/ets"/utf8>>,
function => <<"counter_increment_by"/utf8>>,
line => 136});
pos_inf ->
erlang:error(#{gleam_error => panic,
message => <<"can not increment a counter by +Inf"/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"themis/internal/erlang/ets"/utf8>>,
function => <<"counter_increment_by"/utf8>>,
line => 137})
end,
_pipe = nil,
{ok, _pipe}
end
).
-file("src/themis/internal/erlang/ets.gleam", 167).
?DOC(false).
-spec delete_table(binary()) -> {ok, boolean()} | {error, table_error()}.
delete_table(Table_name) ->
guard_atom_from_string(
Table_name,
fun(Table_name_atom) -> _pipe = ets:delete(Table_name_atom),
{ok, _pipe} end
).