Current section

Files

Jump to
themis src themis@internal@label.erl
Raw

src/themis@internal@label.erl

-module(themis@internal@label).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-define(FILEPATH, "src/themis/internal/label.gleam").
-export([new/0, to_dict/1, to_strings/1, print/1, is_valid_label/1, from_dict/1, add_label/3, delete_label/2]).
-export_type([label_name/0, label_set/0, label_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).
-opaque label_name() :: {label_name, binary()}.
-opaque label_set() :: {label_set, gleam@dict:dict(label_name(), binary())}.
-type label_error() :: invalid_label_name.
-file("src/themis/internal/label.gleam", 42).
?DOC(false).
-spec new() -> label_set().
new() ->
{label_set, maps:new()}.
-file("src/themis/internal/label.gleam", 46).
?DOC(false).
-spec to_dict(label_set()) -> gleam@dict:dict(binary(), binary()).
to_dict(Labels) ->
_pipe = erlang:element(2, Labels),
_pipe@1 = maps:to_list(_pipe),
_pipe@2 = gleam@list:map(
_pipe@1,
fun(Label_entry) ->
{Label_name, Label_value} = Label_entry,
{erlang:element(2, Label_name), Label_value}
end
),
maps:from_list(_pipe@2).
-file("src/themis/internal/label.gleam", 56).
?DOC(false).
-spec to_strings(label_set()) -> list(binary()).
to_strings(Labels) ->
gleam@list:map(
maps:to_list(erlang:element(2, Labels)),
fun(_use0) ->
{Key, Value} = _use0,
<<<<(erlang:element(2, Key))/binary, ":"/utf8>>/binary,
Value/binary>>
end
).
-file("src/themis/internal/label.gleam", 78).
?DOC(false).
-spec print(label_set()) -> binary().
print(Labels) ->
case begin
_pipe = begin
gleam@dict:fold(
erlang:element(2, Labels),
[<<"{"/utf8>>],
fun(Current, Name, Value) ->
[<<<<<<(erlang:element(2, Name))/binary, "=\""/utf8>>/binary,
Value/binary>>/binary,
"\","/utf8>> |
Current]
end
)
end,
_pipe@1 = lists:reverse(_pipe),
_pipe@2 = gleam_stdlib:identity(_pipe@1),
_pipe@3 = unicode:characters_to_binary(_pipe@2),
gleam@string:drop_end(_pipe@3, 1)
end of
<<""/utf8>> ->
<<""/utf8>>;
Not_empty ->
<<Not_empty/binary, "}"/utf8>>
end.
-file("src/themis/internal/label.gleam", 22).
?DOC(false).
-spec is_valid_label(binary()) -> boolean().
is_valid_label(Label) ->
Reg@1 = case begin
_pipe = <<"^[a-zA-Z][a-zA-Z0-9_]*$"/utf8>>,
gleam@regexp:from_string(_pipe)
end of
{ok, Reg} -> Reg;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"themis/internal/label"/utf8>>,
function => <<"is_valid_label"/utf8>>,
line => 23,
value => _assert_fail,
start => 413,
'end' => 483,
pattern_start => 424,
pattern_end => 431})
end,
_pipe@1 = Reg@1,
gleam@regexp:check(_pipe@1, Label).
-file("src/themis/internal/label.gleam", 94).
?DOC(false).
-spec new_label_name(binary()) -> {ok, label_name()} | {error, label_error()}.
new_label_name(From) ->
case is_valid_label(From) of
false ->
{error, invalid_label_name};
true ->
{ok, {label_name, From}}
end.
-file("src/themis/internal/label.gleam", 30).
?DOC(false).
-spec from_dict(gleam@dict:dict(binary(), binary())) -> {ok, label_set()} |
{error, label_error()}.
from_dict(Labels) ->
R = begin
gleam@list:try_map(
maps:to_list(Labels),
fun(_use0) ->
{Name_string, Value} = _use0,
gleam@result:'try'(
new_label_name(Name_string),
fun(Name) -> {ok, {Name, Value}} end
)
end
)
end,
gleam@result:map(
R,
fun(Checked_dict) -> {label_set, maps:from_list(Checked_dict)} end
).
-file("src/themis/internal/label.gleam", 61).
?DOC(false).
-spec add_label(label_set(), binary(), binary()) -> {ok, label_set()} |
{error, label_error()}.
add_label(Labels, Key, Value) ->
gleam@result:map(
new_label_name(Key),
fun(Label_name) ->
{label_set,
gleam@dict:insert(erlang:element(2, Labels), Label_name, Value)}
end
).
-file("src/themis/internal/label.gleam", 70).
?DOC(false).
-spec delete_label(label_set(), binary()) -> {ok, label_set()} |
{error, label_error()}.
delete_label(Labels, Key) ->
gleam@result:map(
new_label_name(Key),
fun(Label_name) ->
{label_set,
gleam@dict:delete(erlang:element(2, Labels), Label_name)}
end
).