-module(themis@internal@metric). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/themis/internal/metric.gleam"). -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]). -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). -type metric_error() :: {invalid_metric_name, binary()} | {invalid_word_in_name, binary()}. -opaque metric_name() :: {metric_name, binary()}. -file("src/themis/internal/metric.gleam", 60). ?DOC(false). -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("src/themis/internal/metric.gleam", 71). ?DOC(false). -spec name_to_string(metric_name()) -> binary(). name_to_string(From) -> erlang:element(2, From). -file("src/themis/internal/metric.gleam", 32). ?DOC(false). -spec is_valid_name(binary()) -> boolean(). is_valid_name(Name) -> 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/metric"/utf8>>, function => <<"is_valid_name"/utf8>>, line => 33, value => _assert_fail, start => 616, 'end' => 685, pattern_start => 627, pattern_end => 634}) end, begin _pipe@1 = Reg@1, 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("src/themis/internal/metric.gleam", 42). ?DOC(false). -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).