-module(themis@counter). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([register/3, init_record/3, increment/3, increment_by/4, unregister/2]). -file("/git/Themis/src/themis/counter.gleam", 29). -spec register(themis:store(), binary(), binary()) -> {ok, themis:store()} | {error, themis:store_error()}. register(Store, Name_string, Description) -> gleam@result:'try'( begin _pipe = internal@metric@counter:new(Name_string, Description), gleam@result:try_recover( _pipe, fun(E) -> {error, {metric_error, E}} end ) end, fun(_use0) -> {Name, Counter} = _use0, gleam@bool:guard( themis:is_metric_name_used(Store, Name), {error, metric_name_already_in_use}, fun() -> {ok, erlang:setelement( 3, Store, gleam@dict:insert( erlang:element(3, Store), Name, Counter ) )} end ) end ). -file("/git/Themis/src/themis/counter.gleam", 64). -spec init_record(themis:store(), binary(), gleam@dict:dict(binary(), binary())) -> {ok, themis:store()} | {error, themis:store_error()}. init_record(Store, Name_string, Labels_dict) -> gleam@result:'try'( begin _pipe = internal@label:from_dict(Labels_dict), gleam@result:try_recover( _pipe, fun(E) -> {error, {label_error, E}} end ) end, fun(Labels) -> gleam@result:'try'( begin _pipe@1 = internal@metric@counter:new_name(Name_string), gleam@result:try_recover( _pipe@1, fun(E@1) -> {error, {metric_error, E@1}} end ) end, fun(Name) -> gleam@result:'try'( begin _pipe@2 = gleam_stdlib:map_get( erlang:element(3, Store), Name ), gleam@result:replace_error( _pipe@2, metric_name_not_found ) end, fun(Counter) -> Updated_counter = internal@metric@counter:init_record( Counter, Labels ), {ok, erlang:setelement( 3, Store, gleam@dict:insert( erlang:element(3, Store), Name, Updated_counter ) )} end ) end ) end ). -file("/git/Themis/src/themis/counter.gleam", 105). -spec increment(themis:store(), binary(), gleam@dict:dict(binary(), binary())) -> {ok, themis:store()} | {error, themis:store_error()}. increment(Store, Name_string, Labels_dict) -> gleam@result:'try'( begin _pipe = internal@label:from_dict(Labels_dict), gleam@result:try_recover( _pipe, fun(E) -> {error, {label_error, E}} end ) end, fun(Labels) -> gleam@result:'try'( begin _pipe@1 = internal@metric@counter:new_name(Name_string), gleam@result:try_recover( _pipe@1, fun(E@1) -> {error, {metric_error, E@1}} end ) end, fun(Name) -> gleam@result:'try'( begin _pipe@2 = gleam_stdlib:map_get( erlang:element(3, Store), Name ), gleam@result:replace_error( _pipe@2, metric_name_not_found ) end, fun(Counter) -> Updated_counter = internal@metric@counter:increment( Counter, Labels ), {ok, erlang:setelement( 3, Store, gleam@dict:insert( erlang:element(3, Store), Name, Updated_counter ) )} end ) end ) end ). -file("/git/Themis/src/themis/counter.gleam", 147). -spec increment_by( themis:store(), binary(), gleam@dict:dict(binary(), binary()), themis@number:number_() ) -> {ok, themis:store()} | {error, themis:store_error()}. increment_by(Store, Name_string, Labels_dict, By) -> gleam@result:'try'( begin _pipe = internal@label:from_dict(Labels_dict), gleam@result:try_recover( _pipe, fun(E) -> {error, {label_error, E}} end ) end, fun(Labels) -> gleam@result:'try'( begin _pipe@1 = internal@metric@counter:new_name(Name_string), gleam@result:try_recover( _pipe@1, fun(E@1) -> {error, {metric_error, E@1}} end ) end, fun(Name) -> gleam@result:'try'( begin _pipe@2 = gleam_stdlib:map_get( erlang:element(3, Store), Name ), gleam@result:replace_error( _pipe@2, metric_name_not_found ) end, fun(Counter) -> Updated_counter = internal@metric@counter:increment_by( Counter, Labels, By ), {ok, erlang:setelement( 3, Store, gleam@dict:insert( erlang:element(3, Store), Name, Updated_counter ) )} end ) end ) end ). -file("/git/Themis/src/themis/counter.gleam", 183). -spec unregister(themis:store(), binary()) -> {ok, themis:store()} | {error, themis:store_error()}. unregister(Store, Name_string) -> gleam@result:'try'( begin _pipe = internal@metric@counter:new_name(Name_string), gleam@result:try_recover( _pipe, fun(E) -> {error, {metric_error, E}} end ) end, fun(Name) -> gleam@bool:guard( not gleam@dict:has_key(erlang:element(3, Store), Name), {error, metric_name_not_found}, fun() -> New_counters = gleam@dict:delete( erlang:element(3, Store), Name ), {ok, erlang:setelement(3, Store, New_counters)} end ) end ).