Current section
Files
Jump to
Current section
Files
src/themis@internal@label.erl
-module(themis@internal@label).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-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]).
-opaque label_name() :: {label_name, binary()}.
-opaque label_set() :: {label_set, gleam@dict:dict(label_name(), binary())}.
-type label_error() :: invalid_label_name.
-file("/git/Themis/src/themis/internal/label.gleam", 42).
-spec new() -> label_set().
new() ->
{label_set, maps:new()}.
-file("/git/Themis/src/themis/internal/label.gleam", 46).
-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("/git/Themis/src/themis/internal/label.gleam", 56).
-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("/git/Themis/src/themis/internal/label.gleam", 78).
-spec print(label_set()) -> binary().
print(Labels) ->
_pipe = (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
)),
_pipe@1 = lists:reverse(_pipe),
_pipe@2 = gleam_stdlib:identity(_pipe@1),
_pipe@3 = unicode:characters_to_binary(_pipe@2),
_pipe@4 = gleam@string:drop_end(_pipe@3, 1),
gleam@string:append(_pipe@4, <<"}"/utf8>>).
-file("/git/Themis/src/themis/internal/label.gleam", 22).
-spec is_valid_label(binary()) -> boolean().
is_valid_label(Label) ->
_assert_subject = begin
_pipe = <<"^[a-zA-Z][a-zA-Z0-9_]*$"/utf8>>,
gleam@regexp:from_string(_pipe)
end,
{ok, Reg} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"themis/internal/label"/utf8>>,
function => <<"is_valid_label"/utf8>>,
line => 23})
end,
_pipe@1 = Reg,
gleam@regexp:check(_pipe@1, Label).
-file("/git/Themis/src/themis/internal/label.gleam", 90).
-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("/git/Themis/src/themis/internal/label.gleam", 30).
-spec from_dict(gleam@dict:dict(binary(), binary())) -> {ok, label_set()} |
{error, label_error()}.
from_dict(Labels) ->
R = (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
)),
gleam@result:map(
R,
fun(Checked_dict) -> {label_set, maps:from_list(Checked_dict)} end
).
-file("/git/Themis/src/themis/internal/label.gleam", 61).
-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("/git/Themis/src/themis/internal/label.gleam", 70).
-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
).