-module(internal@label). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([new/0, print/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/internal/label.gleam", 32). -spec new() -> label_set(). new() -> {label_set, maps:new()}. -file("/git/Themis/src/internal/label.gleam", 53). -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/internal/label.gleam", 65). -spec new_label_name(binary()) -> {ok, label_name()} | {error, label_error()}. new_label_name(From) -> case internal@prometheus:is_valid_label(From) of false -> {error, invalid_label_name}; true -> {ok, {label_name, From}} end. -file("/git/Themis/src/internal/label.gleam", 20). -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/internal/label.gleam", 36). -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/internal/label.gleam", 45). -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 ).