-module(dp_decoder). -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). -endif. -export([recombine_tags/1, to_number/1, protocol/1, parse/2]). -export_type([metric/0, protocol/0]). -type metric() :: #{ metric => [binary()], key => [binary()], tags => [{binary(), binary(), binary()}], time => pos_integer(), value => integer() }. -type protocol() :: dp_line_proto. -callback parse(In::binary()) -> {ok, [dp_decoder:metric()]} | {error, term()} | undefined. -callback protocol() -> dp_decoder:protocol(). recombine_tags(Tags) -> [<>, Acc) -> <>; fix_num(<<".", R/binary>>, Acc) -> <>; fix_num(<>, Acc) -> fix_num(R, <>). -ifdef(TEST). to_number_test_() -> [?_assertEqual(to_number(<<"21.12">>), 21.12), ?_assertEqual(to_number(<<"21">>), 21), ?_assertEqual(to_number(<<"1.2e-2">>), 0.012), ?_assertEqual(to_number(<<"12e-2">>), 0.12)]. -endif.