Current section

Files

Jump to
themis src internal@metric.erl
Raw

src/internal@metric.erl

-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).