-module(themis@internal@metric). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([make_histogram_metric_names/1, name_to_string/1, is_valid_name/1, new_name/2]). -export_type([metric_error/0, metric_name/0]). -type metric_error() :: {invalid_metric_name, binary()} | {invalid_word_in_name, binary()}. -opaque metric_name() :: {metric_name, binary()}. -file("/git/Themis/src/themis/internal/metric.gleam", 60). -spec make_histogram_metric_names(metric_name()) -> {metric_name(), metric_name(), metric_name()}. make_histogram_metric_names(From) -> Base_name = erlang:element(2, From), {{metric_name, <>}, {metric_name, <>}, {metric_name, <>}}. -file("/git/Themis/src/themis/internal/metric.gleam", 71). -spec name_to_string(metric_name()) -> binary(). name_to_string(From) -> erlang:element(2, From). -file("/git/Themis/src/themis/internal/metric.gleam", 32). -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 => <<"themis/internal/metric"/utf8>>, function => <<"is_valid_name"/utf8>>, line => 33}) end, begin _pipe@1 = Reg, gleam@regexp:check(_pipe@1, Name) end andalso begin _pipe@2 = gleam@list:map( [<<"_count"/utf8>>, <<"_sum"/utf8>>, <<"_bucket"/utf8>>], fun(Word) -> not gleam_stdlib:string_ends_with(Name, Word) end ), gleam@list:all(_pipe@2, fun gleam@function:identity/1) end. -file("/git/Themis/src/themis/internal/metric.gleam", 42). -spec new_name(binary(), list(binary())) -> {ok, metric_name()} | {error, metric_error()}. new_name(From, Blacklist) -> R = begin 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 ) end, gleam@result:'try'(R, fun(_) -> case is_valid_name(From) of false -> {error, {invalid_metric_name, From}}; true -> {ok, {metric_name, From}} end end).