-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) -> _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), _pipe@4 = gleam@string:drop_end(_pipe@3, 1), gleam@string:append(_pipe@4, <<"}"/utf8>>). -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 => <>, 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", 90). ?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 ).