-module(internal@metric). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([name_to_string/1, is_valid_name/1, new_name/2]). -export_type([metric_error/0, metric_name/0, metric/3]). -type metric_error() :: invalid_metric_name | {invalid_word_in_name, binary()}. -opaque metric_name() :: {metric_name, binary()}. -type metric(GKZ, GLA, GLB) :: {metric, binary(), gleam@dict:dict(internal@label:label_set(), GLA), GLB} | {gleam_phantom, GKZ}. -file("/git/Themis/src/internal/metric.gleam", 53). -spec name_to_string(metric_name()) -> binary(). name_to_string(From) -> erlang:element(2, From). -file("/git/Themis/src/internal/metric.gleam", 27). -spec is_valid_name(binary()) -> boolean(). is_valid_name(Name) -> _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 => <<"internal/metric"/utf8>>, function => <<"is_valid_name"/utf8>>, line => 28}) end, _pipe@1 = Reg, gleam@regexp:check(_pipe@1, Name). -file("/git/Themis/src/internal/metric.gleam", 35). -spec new_name(binary(), list(binary())) -> {ok, metric_name()} | {error, metric_error()}. new_name(From, Blacklist) -> R = (gleam@list:try_each( Blacklist, fun(Word) -> case gleam_stdlib:contains_string(From, Word) of false -> {ok, nil}; true -> {error, {invalid_word_in_name, Word}} end end )), gleam@result:'try'(R, fun(_) -> case is_valid_name(From) of false -> {error, invalid_metric_name}; true -> {ok, {metric_name, From}} end end).