%% -*- coding: utf-8 -*- %% Automatically generated, do not edit %% Generated by gpb_compile version 3.27.4 -module(lasp_pb). -export([encode_msg/1, encode_msg/2]). -export([decode_msg/2, decode_msg/3]). -export([merge_msgs/2, merge_msgs/3]). -export([verify_msg/1, verify_msg/2]). -export([get_msg_defs/0]). -export([get_msg_names/0]). -export([get_group_names/0]). -export([get_msg_or_group_names/0]). -export([get_enum_names/0]). -export([find_msg_def/1, fetch_msg_def/1]). -export([find_enum_def/1, fetch_enum_def/1]). -export([enum_symbol_by_value/2, enum_value_by_symbol/2]). -export([get_service_names/0]). -export([get_service_def/1]). -export([get_rpc_names/1]). -export([find_rpc_def/2, fetch_rpc_def/2]). -export([get_package_name/0]). -export([gpb_version_as_string/0, gpb_version_as_list/0]). -include("lasp_pb.hrl"). -include("gpb.hrl"). -spec encode_msg(_) -> binary(). encode_msg(Msg) -> encode_msg(Msg, []). -spec encode_msg(_, list()) -> binary(). encode_msg(Msg, Opts) -> case proplists:get_bool(verify, Opts) of true -> verify_msg(Msg, Opts); false -> ok end, TrUserData = proplists:get_value(user_data, Opts), case Msg of #req{} -> e_msg_req(Msg, TrUserData); #opget{} -> e_msg_opget(Msg, TrUserData); #opupdate{} -> e_msg_opupdate(Msg, TrUserData); #entry{} -> e_msg_entry(Msg, TrUserData); #pair{} -> e_msg_pair(Msg, TrUserData); #triple{} -> e_msg_triple(Msg, TrUserData); #reqresp{} -> e_msg_reqresp(Msg, TrUserData); #valcounter{} -> e_msg_valcounter(Msg, TrUserData); #valset{} -> e_msg_valset(Msg, TrUserData); #valmap{} -> e_msg_valmap(Msg, TrUserData); #valreg{} -> e_msg_valreg(Msg, TrUserData); #mapentry{} -> e_msg_mapentry(Msg, TrUserData); #mapfield{} -> e_msg_mapfield(Msg, TrUserData) end. e_msg_req(Msg, TrUserData) -> e_msg_req(Msg, <<>>, TrUserData). e_msg_req(#req{u = F1}, Bin, TrUserData) -> case F1 of undefined -> Bin; {get, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_req_get(TrOF1, <>, TrUserData) end; {put, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_req_put(TrOF1, <>, TrUserData) end end. e_msg_opget(Msg, TrUserData) -> e_msg_opget(Msg, <<>>, TrUserData). e_msg_opget(#opget{key = F1, type = F2}, Bin, TrUserData) -> B1 = begin TrF1 = id(F1, TrUserData), e_type_string(TrF1, <>) end, begin TrF2 = id(F2, TrUserData), e_type_string(TrF2, <>) end. e_msg_opupdate(Msg, TrUserData) -> e_msg_opupdate(Msg, <<>>, TrUserData). e_msg_opupdate(#opupdate{k = F1, e = F2, actor = F3}, Bin, TrUserData) -> B1 = begin TrF1 = id(F1, TrUserData), e_mfield_opupdate_k(TrF1, <>, TrUserData) end, B2 = begin TrF2 = id(F2, TrUserData), if TrF2 == [] -> B1; true -> e_field_opupdate_e(TrF2, B1, TrUserData) end end, begin TrF3 = id(F3, TrUserData), e_type_string(TrF3, <>) end. e_msg_entry(Msg, TrUserData) -> e_msg_entry(Msg, <<>>, TrUserData). e_msg_entry(#entry{u = F1}, Bin, TrUserData) -> case F1 of undefined -> Bin; {int, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_type_int64(TrOF1, <>) end; {str, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_type_string(TrOF1, <>) end; {atm, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_type_string(TrOF1, <>) end; {ii, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_entry_ii(TrOF1, <>, TrUserData) end; {iii, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_entry_iii(TrOF1, <>, TrUserData) end end. e_msg_pair(Msg, TrUserData) -> e_msg_pair(Msg, <<>>, TrUserData). e_msg_pair(#pair{a = F1, b = F2}, Bin, TrUserData) -> B1 = begin TrF1 = id(F1, TrUserData), e_mfield_pair_a(TrF1, <>, TrUserData) end, begin TrF2 = id(F2, TrUserData), e_mfield_pair_b(TrF2, <>, TrUserData) end. e_msg_triple(Msg, TrUserData) -> e_msg_triple(Msg, <<>>, TrUserData). e_msg_triple(#triple{a = F1, b = F2, c = F3}, Bin, TrUserData) -> B1 = begin TrF1 = id(F1, TrUserData), e_mfield_triple_a(TrF1, <>, TrUserData) end, B2 = begin TrF2 = id(F2, TrUserData), e_mfield_triple_b(TrF2, <>, TrUserData) end, begin TrF3 = id(F3, TrUserData), e_mfield_triple_c(TrF3, <>, TrUserData) end. e_msg_reqresp(Msg, TrUserData) -> e_msg_reqresp(Msg, <<>>, TrUserData). e_msg_reqresp(#reqresp{v = F1}, Bin, TrUserData) -> case F1 of undefined -> Bin; {error, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_type_string(TrOF1, <>) end; {ctr, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_reqresp_ctr(TrOF1, <>, TrUserData) end; {set, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_reqresp_set(TrOF1, <>, TrUserData) end; {map, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_reqresp_map(TrOF1, <>, TrUserData) end; {reg, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_reqresp_reg(TrOF1, <>, TrUserData) end end. e_msg_valcounter(Msg, TrUserData) -> e_msg_valcounter(Msg, <<>>, TrUserData). e_msg_valcounter(#valcounter{val = F1}, Bin, TrUserData) -> begin TrF1 = id(F1, TrUserData), e_type_int64(TrF1, <>) end. e_msg_valset(Msg, TrUserData) -> e_msg_valset(Msg, <<>>, TrUserData). e_msg_valset(#valset{elems = F1}, Bin, TrUserData) -> begin TrF1 = id(F1, TrUserData), if TrF1 == [] -> Bin; true -> e_field_valset_elems(TrF1, Bin, TrUserData) end end. e_msg_valmap(Msg, TrUserData) -> e_msg_valmap(Msg, <<>>, TrUserData). e_msg_valmap(#valmap{entries = F1}, Bin, TrUserData) -> begin TrF1 = id(F1, TrUserData), if TrF1 == [] -> Bin; true -> e_field_valmap_entries(TrF1, Bin, TrUserData) end end. e_msg_valreg(Msg, TrUserData) -> e_msg_valreg(Msg, <<>>, TrUserData). e_msg_valreg(#valreg{val = F1}, Bin, TrUserData) -> begin TrF1 = id(F1, TrUserData), e_type_string(TrF1, <>) end. e_msg_mapentry(Msg, TrUserData) -> e_msg_mapentry(Msg, <<>>, TrUserData). e_msg_mapentry(#mapentry{key = F1, ktype = F2, val = F3}, Bin, TrUserData) -> B1 = begin TrF1 = id(F1, TrUserData), e_type_string(TrF1, <>) end, B2 = begin TrF2 = id(F2, TrUserData), e_type_string(TrF2, <>) end, begin TrF3 = id(F3, TrUserData), e_mfield_mapentry_val(TrF3, <>, TrUserData) end. e_msg_mapfield(Msg, TrUserData) -> e_msg_mapfield(Msg, <<>>, TrUserData). e_msg_mapfield(#mapfield{v = F1}, Bin, TrUserData) -> case F1 of undefined -> Bin; {c, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_mapfield_c(TrOF1, <>, TrUserData) end; {s, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_mapfield_s(TrOF1, <>, TrUserData) end; {m, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_mapfield_m(TrOF1, <>, TrUserData) end; {r, OF1} -> begin TrOF1 = id(OF1, TrUserData), e_mfield_mapfield_r(TrOF1, <>, TrUserData) end end. e_mfield_req_get(Msg, Bin, TrUserData) -> SubBin = e_msg_opget(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_req_put(Msg, Bin, TrUserData) -> SubBin = e_msg_opupdate(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_opupdate_k(Msg, Bin, TrUserData) -> SubBin = e_msg_opget(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_opupdate_e(Msg, Bin, TrUserData) -> SubBin = e_msg_entry(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_field_opupdate_e([Elem | Rest], Bin, TrUserData) -> Bin2 = <>, Bin3 = e_mfield_opupdate_e(id(Elem, TrUserData), Bin2, TrUserData), e_field_opupdate_e(Rest, Bin3, TrUserData); e_field_opupdate_e([], Bin, _TrUserData) -> Bin. e_mfield_entry_ii(Msg, Bin, TrUserData) -> SubBin = e_msg_pair(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_entry_iii(Msg, Bin, TrUserData) -> SubBin = e_msg_triple(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_pair_a(Msg, Bin, TrUserData) -> SubBin = e_msg_entry(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_pair_b(Msg, Bin, TrUserData) -> SubBin = e_msg_entry(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_triple_a(Msg, Bin, TrUserData) -> SubBin = e_msg_entry(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_triple_b(Msg, Bin, TrUserData) -> SubBin = e_msg_entry(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_triple_c(Msg, Bin, TrUserData) -> SubBin = e_msg_entry(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_reqresp_ctr(Msg, Bin, TrUserData) -> SubBin = e_msg_valcounter(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_reqresp_set(Msg, Bin, TrUserData) -> SubBin = e_msg_valset(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_reqresp_map(Msg, Bin, TrUserData) -> SubBin = e_msg_valmap(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_reqresp_reg(Msg, Bin, TrUserData) -> SubBin = e_msg_valreg(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_field_valset_elems([Elem | Rest], Bin, TrUserData) -> Bin2 = <>, Bin3 = e_type_string(id(Elem, TrUserData), Bin2), e_field_valset_elems(Rest, Bin3, TrUserData); e_field_valset_elems([], Bin, _TrUserData) -> Bin. e_mfield_valmap_entries(Msg, Bin, TrUserData) -> SubBin = e_msg_mapentry(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_field_valmap_entries([Elem | Rest], Bin, TrUserData) -> Bin2 = <>, Bin3 = e_mfield_valmap_entries(id(Elem, TrUserData), Bin2, TrUserData), e_field_valmap_entries(Rest, Bin3, TrUserData); e_field_valmap_entries([], Bin, _TrUserData) -> Bin. e_mfield_mapentry_val(Msg, Bin, TrUserData) -> SubBin = e_msg_mapfield(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_mapfield_c(Msg, Bin, TrUserData) -> SubBin = e_msg_valcounter(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_mapfield_s(Msg, Bin, TrUserData) -> SubBin = e_msg_valset(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_mapfield_m(Msg, Bin, TrUserData) -> SubBin = e_msg_valmap(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_mfield_mapfield_r(Msg, Bin, TrUserData) -> SubBin = e_msg_valreg(Msg, <<>>, TrUserData), Bin2 = e_varint(byte_size(SubBin), Bin), <>. e_type_int64(Value, Bin) when 0 =< Value, Value =< 127 -> <>; e_type_int64(Value, Bin) -> <> = <>, e_varint(N, Bin). e_type_string(S, Bin) -> Utf8 = unicode:characters_to_binary(S), Bin2 = e_varint(byte_size(Utf8), Bin), <>. e_varint(N, Bin) when N =< 127 -> <>; e_varint(N, Bin) -> Bin2 = <>, e_varint(N bsr 7, Bin2). is_empty_string("") -> true; is_empty_string(<<>>) -> true; is_empty_string(L) when is_list(L) -> not string_has_chars(L); is_empty_string(B) when is_binary(B) -> false. string_has_chars([C | _]) when is_integer(C) -> true; string_has_chars([H | T]) -> case string_has_chars(H) of true -> true; false -> string_has_chars(T) end; string_has_chars(B) when is_binary(B), byte_size(B) =/= 0 -> true; string_has_chars(C) when is_integer(C) -> true; string_has_chars(<<>>) -> false; string_has_chars([]) -> false. decode_msg(Bin, MsgName) when is_binary(Bin) -> decode_msg(Bin, MsgName, []). decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> TrUserData = proplists:get_value(user_data, Opts), case MsgName of req -> d_msg_req(Bin, TrUserData); opget -> d_msg_opget(Bin, TrUserData); opupdate -> d_msg_opupdate(Bin, TrUserData); entry -> d_msg_entry(Bin, TrUserData); pair -> d_msg_pair(Bin, TrUserData); triple -> d_msg_triple(Bin, TrUserData); reqresp -> d_msg_reqresp(Bin, TrUserData); valcounter -> d_msg_valcounter(Bin, TrUserData); valset -> d_msg_valset(Bin, TrUserData); valmap -> d_msg_valmap(Bin, TrUserData); valreg -> d_msg_valreg(Bin, TrUserData); mapentry -> d_msg_mapentry(Bin, TrUserData); mapfield -> d_msg_mapfield(Bin, TrUserData) end. d_msg_req(Bin, TrUserData) -> dfp_read_field_def_req(Bin, 0, 0, id(undefined, TrUserData), TrUserData). dfp_read_field_def_req(<<10, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_req_get(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_req(<<18, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_req_put(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_req(<<>>, 0, 0, F1, _) -> #req{u = F1}; dfp_read_field_def_req(Other, Z1, Z2, F1, TrUserData) -> dg_read_field_def_req(Other, Z1, Z2, F1, TrUserData). dg_read_field_def_req(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 32 - 7 -> dg_read_field_def_req(Rest, N + 7, X bsl N + Acc, F1, TrUserData); dg_read_field_def_req(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Key = X bsl N + Acc, case Key of 10 -> d_field_req_get(Rest, 0, 0, F1, TrUserData); 18 -> d_field_req_put(Rest, 0, 0, F1, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_req(Rest, 0, 0, F1, TrUserData); 1 -> skip_64_req(Rest, 0, 0, F1, TrUserData); 2 -> skip_length_delimited_req(Rest, 0, 0, F1, TrUserData); 3 -> skip_group_req(Rest, Key bsr 3, 0, F1, TrUserData); 5 -> skip_32_req(Rest, 0, 0, F1, TrUserData) end end; dg_read_field_def_req(<<>>, 0, 0, F1, _) -> #req{u = F1}. d_field_req_get(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_req_get(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_req_get(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_opget(Bs, TrUserData), TrUserData), dfp_read_field_def_req(Rest2, 0, 0, case F1 of undefined -> {get, NewFValue}; {get, MVF1} -> {get, merge_msg_opget(MVF1, NewFValue, TrUserData)}; _ -> {get, NewFValue} end, TrUserData). d_field_req_put(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_req_put(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_req_put(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_opupdate(Bs, TrUserData), TrUserData), dfp_read_field_def_req(Rest2, 0, 0, case F1 of undefined -> {put, NewFValue}; {put, MVF1} -> {put, merge_msg_opupdate(MVF1, NewFValue, TrUserData)}; _ -> {put, NewFValue} end, TrUserData). skip_varint_req(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> skip_varint_req(Rest, Z1, Z2, F1, TrUserData); skip_varint_req(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_req(Rest, Z1, Z2, F1, TrUserData). skip_length_delimited_req(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> skip_length_delimited_req(Rest, N + 7, X bsl N + Acc, F1, TrUserData); skip_length_delimited_req(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_req(Rest2, 0, 0, F1, TrUserData). skip_group_req(Bin, FNum, Z2, F1, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_req(Rest, 0, Z2, F1, TrUserData). skip_32_req(<<_:32, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_req(Rest, Z1, Z2, F1, TrUserData). skip_64_req(<<_:64, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_req(Rest, Z1, Z2, F1, TrUserData). d_msg_opget(Bin, TrUserData) -> dfp_read_field_def_opget(Bin, 0, 0, id(undefined, TrUserData), id(undefined, TrUserData), TrUserData). dfp_read_field_def_opget(<<10, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> d_field_opget_key(Rest, Z1, Z2, F1, F2, TrUserData); dfp_read_field_def_opget(<<18, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> d_field_opget_type(Rest, Z1, Z2, F1, F2, TrUserData); dfp_read_field_def_opget(<<>>, 0, 0, F1, F2, _) -> #opget{key = F1, type = F2}; dfp_read_field_def_opget(Other, Z1, Z2, F1, F2, TrUserData) -> dg_read_field_def_opget(Other, Z1, Z2, F1, F2, TrUserData). dg_read_field_def_opget(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) when N < 32 - 7 -> dg_read_field_def_opget(Rest, N + 7, X bsl N + Acc, F1, F2, TrUserData); dg_read_field_def_opget(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) -> Key = X bsl N + Acc, case Key of 10 -> d_field_opget_key(Rest, 0, 0, F1, F2, TrUserData); 18 -> d_field_opget_type(Rest, 0, 0, F1, F2, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_opget(Rest, 0, 0, F1, F2, TrUserData); 1 -> skip_64_opget(Rest, 0, 0, F1, F2, TrUserData); 2 -> skip_length_delimited_opget(Rest, 0, 0, F1, F2, TrUserData); 3 -> skip_group_opget(Rest, Key bsr 3, 0, F1, F2, TrUserData); 5 -> skip_32_opget(Rest, 0, 0, F1, F2, TrUserData) end end; dg_read_field_def_opget(<<>>, 0, 0, F1, F2, _) -> #opget{key = F1, type = F2}. d_field_opget_key(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) when N < 57 -> d_field_opget_key(Rest, N + 7, X bsl N + Acc, F1, F2, TrUserData); d_field_opget_key(<<0:1, X:7, Rest/binary>>, N, Acc, _, F2, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = binary:copy(Bytes), dfp_read_field_def_opget(Rest2, 0, 0, NewFValue, F2, TrUserData). d_field_opget_type(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) when N < 57 -> d_field_opget_type(Rest, N + 7, X bsl N + Acc, F1, F2, TrUserData); d_field_opget_type(<<0:1, X:7, Rest/binary>>, N, Acc, F1, _, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = binary:copy(Bytes), dfp_read_field_def_opget(Rest2, 0, 0, F1, NewFValue, TrUserData). skip_varint_opget(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> skip_varint_opget(Rest, Z1, Z2, F1, F2, TrUserData); skip_varint_opget(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> dfp_read_field_def_opget(Rest, Z1, Z2, F1, F2, TrUserData). skip_length_delimited_opget(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) when N < 57 -> skip_length_delimited_opget(Rest, N + 7, X bsl N + Acc, F1, F2, TrUserData); skip_length_delimited_opget(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_opget(Rest2, 0, 0, F1, F2, TrUserData). skip_group_opget(Bin, FNum, Z2, F1, F2, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_opget(Rest, 0, Z2, F1, F2, TrUserData). skip_32_opget(<<_:32, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> dfp_read_field_def_opget(Rest, Z1, Z2, F1, F2, TrUserData). skip_64_opget(<<_:64, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> dfp_read_field_def_opget(Rest, Z1, Z2, F1, F2, TrUserData). d_msg_opupdate(Bin, TrUserData) -> dfp_read_field_def_opupdate(Bin, 0, 0, id(undefined, TrUserData), id([], TrUserData), id(undefined, TrUserData), TrUserData). dfp_read_field_def_opupdate(<<10, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> d_field_opupdate_k(Rest, Z1, Z2, F1, F2, F3, TrUserData); dfp_read_field_def_opupdate(<<18, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> d_field_opupdate_e(Rest, Z1, Z2, F1, F2, F3, TrUserData); dfp_read_field_def_opupdate(<<26, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> d_field_opupdate_actor(Rest, Z1, Z2, F1, F2, F3, TrUserData); dfp_read_field_def_opupdate(<<>>, 0, 0, F1, F2, F3, TrUserData) -> #opupdate{k = F1, e = lists_reverse(F2, TrUserData), actor = F3}; dfp_read_field_def_opupdate(Other, Z1, Z2, F1, F2, F3, TrUserData) -> dg_read_field_def_opupdate(Other, Z1, Z2, F1, F2, F3, TrUserData). dg_read_field_def_opupdate(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 32 - 7 -> dg_read_field_def_opupdate(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); dg_read_field_def_opupdate(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Key = X bsl N + Acc, case Key of 10 -> d_field_opupdate_k(Rest, 0, 0, F1, F2, F3, TrUserData); 18 -> d_field_opupdate_e(Rest, 0, 0, F1, F2, F3, TrUserData); 26 -> d_field_opupdate_actor(Rest, 0, 0, F1, F2, F3, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_opupdate(Rest, 0, 0, F1, F2, F3, TrUserData); 1 -> skip_64_opupdate(Rest, 0, 0, F1, F2, F3, TrUserData); 2 -> skip_length_delimited_opupdate(Rest, 0, 0, F1, F2, F3, TrUserData); 3 -> skip_group_opupdate(Rest, Key bsr 3, 0, F1, F2, F3, TrUserData); 5 -> skip_32_opupdate(Rest, 0, 0, F1, F2, F3, TrUserData) end end; dg_read_field_def_opupdate(<<>>, 0, 0, F1, F2, F3, TrUserData) -> #opupdate{k = F1, e = lists_reverse(F2, TrUserData), actor = F3}. d_field_opupdate_k(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> d_field_opupdate_k(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); d_field_opupdate_k(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_opget(Bs, TrUserData), TrUserData), dfp_read_field_def_opupdate(Rest2, 0, 0, if F1 == undefined -> NewFValue; true -> merge_msg_opget(F1, NewFValue, TrUserData) end, F2, F3, TrUserData). d_field_opupdate_e(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> d_field_opupdate_e(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); d_field_opupdate_e(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_entry(Bs, TrUserData), TrUserData), dfp_read_field_def_opupdate(Rest2, 0, 0, F1, cons(NewFValue, F2, TrUserData), F3, TrUserData). d_field_opupdate_actor(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> d_field_opupdate_actor(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); d_field_opupdate_actor(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, _, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = binary:copy(Bytes), dfp_read_field_def_opupdate(Rest2, 0, 0, F1, F2, NewFValue, TrUserData). skip_varint_opupdate(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> skip_varint_opupdate(Rest, Z1, Z2, F1, F2, F3, TrUserData); skip_varint_opupdate(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> dfp_read_field_def_opupdate(Rest, Z1, Z2, F1, F2, F3, TrUserData). skip_length_delimited_opupdate(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> skip_length_delimited_opupdate(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); skip_length_delimited_opupdate(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_opupdate(Rest2, 0, 0, F1, F2, F3, TrUserData). skip_group_opupdate(Bin, FNum, Z2, F1, F2, F3, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_opupdate(Rest, 0, Z2, F1, F2, F3, TrUserData). skip_32_opupdate(<<_:32, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> dfp_read_field_def_opupdate(Rest, Z1, Z2, F1, F2, F3, TrUserData). skip_64_opupdate(<<_:64, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> dfp_read_field_def_opupdate(Rest, Z1, Z2, F1, F2, F3, TrUserData). d_msg_entry(Bin, TrUserData) -> dfp_read_field_def_entry(Bin, 0, 0, id(undefined, TrUserData), TrUserData). dfp_read_field_def_entry(<<8, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_entry_int(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_entry(<<18, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_entry_str(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_entry(<<26, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_entry_atm(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_entry(<<34, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_entry_ii(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_entry(<<42, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_entry_iii(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_entry(<<>>, 0, 0, F1, _) -> #entry{u = F1}; dfp_read_field_def_entry(Other, Z1, Z2, F1, TrUserData) -> dg_read_field_def_entry(Other, Z1, Z2, F1, TrUserData). dg_read_field_def_entry(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 32 - 7 -> dg_read_field_def_entry(Rest, N + 7, X bsl N + Acc, F1, TrUserData); dg_read_field_def_entry(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Key = X bsl N + Acc, case Key of 8 -> d_field_entry_int(Rest, 0, 0, F1, TrUserData); 18 -> d_field_entry_str(Rest, 0, 0, F1, TrUserData); 26 -> d_field_entry_atm(Rest, 0, 0, F1, TrUserData); 34 -> d_field_entry_ii(Rest, 0, 0, F1, TrUserData); 42 -> d_field_entry_iii(Rest, 0, 0, F1, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_entry(Rest, 0, 0, F1, TrUserData); 1 -> skip_64_entry(Rest, 0, 0, F1, TrUserData); 2 -> skip_length_delimited_entry(Rest, 0, 0, F1, TrUserData); 3 -> skip_group_entry(Rest, Key bsr 3, 0, F1, TrUserData); 5 -> skip_32_entry(Rest, 0, 0, F1, TrUserData) end end; dg_read_field_def_entry(<<>>, 0, 0, F1, _) -> #entry{u = F1}. d_field_entry_int(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_entry_int(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_entry_int(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> <> = <<(X bsl N + Acc):64/unsigned-native>>, dfp_read_field_def_entry(Rest, 0, 0, {int, NewFValue}, TrUserData). d_field_entry_str(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_entry_str(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_entry_str(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = binary:copy(Bytes), dfp_read_field_def_entry(Rest2, 0, 0, {str, NewFValue}, TrUserData). d_field_entry_atm(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_entry_atm(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_entry_atm(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = binary:copy(Bytes), dfp_read_field_def_entry(Rest2, 0, 0, {atm, NewFValue}, TrUserData). d_field_entry_ii(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_entry_ii(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_entry_ii(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_pair(Bs, TrUserData), TrUserData), dfp_read_field_def_entry(Rest2, 0, 0, case F1 of undefined -> {ii, NewFValue}; {ii, MVF1} -> {ii, merge_msg_pair(MVF1, NewFValue, TrUserData)}; _ -> {ii, NewFValue} end, TrUserData). d_field_entry_iii(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_entry_iii(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_entry_iii(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_triple(Bs, TrUserData), TrUserData), dfp_read_field_def_entry(Rest2, 0, 0, case F1 of undefined -> {iii, NewFValue}; {iii, MVF1} -> {iii, merge_msg_triple(MVF1, NewFValue, TrUserData)}; _ -> {iii, NewFValue} end, TrUserData). skip_varint_entry(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> skip_varint_entry(Rest, Z1, Z2, F1, TrUserData); skip_varint_entry(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_entry(Rest, Z1, Z2, F1, TrUserData). skip_length_delimited_entry(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> skip_length_delimited_entry(Rest, N + 7, X bsl N + Acc, F1, TrUserData); skip_length_delimited_entry(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_entry(Rest2, 0, 0, F1, TrUserData). skip_group_entry(Bin, FNum, Z2, F1, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_entry(Rest, 0, Z2, F1, TrUserData). skip_32_entry(<<_:32, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_entry(Rest, Z1, Z2, F1, TrUserData). skip_64_entry(<<_:64, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_entry(Rest, Z1, Z2, F1, TrUserData). d_msg_pair(Bin, TrUserData) -> dfp_read_field_def_pair(Bin, 0, 0, id(undefined, TrUserData), id(undefined, TrUserData), TrUserData). dfp_read_field_def_pair(<<10, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> d_field_pair_a(Rest, Z1, Z2, F1, F2, TrUserData); dfp_read_field_def_pair(<<18, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> d_field_pair_b(Rest, Z1, Z2, F1, F2, TrUserData); dfp_read_field_def_pair(<<>>, 0, 0, F1, F2, _) -> #pair{a = F1, b = F2}; dfp_read_field_def_pair(Other, Z1, Z2, F1, F2, TrUserData) -> dg_read_field_def_pair(Other, Z1, Z2, F1, F2, TrUserData). dg_read_field_def_pair(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) when N < 32 - 7 -> dg_read_field_def_pair(Rest, N + 7, X bsl N + Acc, F1, F2, TrUserData); dg_read_field_def_pair(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) -> Key = X bsl N + Acc, case Key of 10 -> d_field_pair_a(Rest, 0, 0, F1, F2, TrUserData); 18 -> d_field_pair_b(Rest, 0, 0, F1, F2, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_pair(Rest, 0, 0, F1, F2, TrUserData); 1 -> skip_64_pair(Rest, 0, 0, F1, F2, TrUserData); 2 -> skip_length_delimited_pair(Rest, 0, 0, F1, F2, TrUserData); 3 -> skip_group_pair(Rest, Key bsr 3, 0, F1, F2, TrUserData); 5 -> skip_32_pair(Rest, 0, 0, F1, F2, TrUserData) end end; dg_read_field_def_pair(<<>>, 0, 0, F1, F2, _) -> #pair{a = F1, b = F2}. d_field_pair_a(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) when N < 57 -> d_field_pair_a(Rest, N + 7, X bsl N + Acc, F1, F2, TrUserData); d_field_pair_a(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_entry(Bs, TrUserData), TrUserData), dfp_read_field_def_pair(Rest2, 0, 0, if F1 == undefined -> NewFValue; true -> merge_msg_entry(F1, NewFValue, TrUserData) end, F2, TrUserData). d_field_pair_b(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) when N < 57 -> d_field_pair_b(Rest, N + 7, X bsl N + Acc, F1, F2, TrUserData); d_field_pair_b(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_entry(Bs, TrUserData), TrUserData), dfp_read_field_def_pair(Rest2, 0, 0, F1, if F2 == undefined -> NewFValue; true -> merge_msg_entry(F2, NewFValue, TrUserData) end, TrUserData). skip_varint_pair(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> skip_varint_pair(Rest, Z1, Z2, F1, F2, TrUserData); skip_varint_pair(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> dfp_read_field_def_pair(Rest, Z1, Z2, F1, F2, TrUserData). skip_length_delimited_pair(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) when N < 57 -> skip_length_delimited_pair(Rest, N + 7, X bsl N + Acc, F1, F2, TrUserData); skip_length_delimited_pair(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_pair(Rest2, 0, 0, F1, F2, TrUserData). skip_group_pair(Bin, FNum, Z2, F1, F2, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_pair(Rest, 0, Z2, F1, F2, TrUserData). skip_32_pair(<<_:32, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> dfp_read_field_def_pair(Rest, Z1, Z2, F1, F2, TrUserData). skip_64_pair(<<_:64, Rest/binary>>, Z1, Z2, F1, F2, TrUserData) -> dfp_read_field_def_pair(Rest, Z1, Z2, F1, F2, TrUserData). d_msg_triple(Bin, TrUserData) -> dfp_read_field_def_triple(Bin, 0, 0, id(undefined, TrUserData), id(undefined, TrUserData), id(undefined, TrUserData), TrUserData). dfp_read_field_def_triple(<<10, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> d_field_triple_a(Rest, Z1, Z2, F1, F2, F3, TrUserData); dfp_read_field_def_triple(<<18, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> d_field_triple_b(Rest, Z1, Z2, F1, F2, F3, TrUserData); dfp_read_field_def_triple(<<26, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> d_field_triple_c(Rest, Z1, Z2, F1, F2, F3, TrUserData); dfp_read_field_def_triple(<<>>, 0, 0, F1, F2, F3, _) -> #triple{a = F1, b = F2, c = F3}; dfp_read_field_def_triple(Other, Z1, Z2, F1, F2, F3, TrUserData) -> dg_read_field_def_triple(Other, Z1, Z2, F1, F2, F3, TrUserData). dg_read_field_def_triple(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 32 - 7 -> dg_read_field_def_triple(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); dg_read_field_def_triple(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Key = X bsl N + Acc, case Key of 10 -> d_field_triple_a(Rest, 0, 0, F1, F2, F3, TrUserData); 18 -> d_field_triple_b(Rest, 0, 0, F1, F2, F3, TrUserData); 26 -> d_field_triple_c(Rest, 0, 0, F1, F2, F3, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_triple(Rest, 0, 0, F1, F2, F3, TrUserData); 1 -> skip_64_triple(Rest, 0, 0, F1, F2, F3, TrUserData); 2 -> skip_length_delimited_triple(Rest, 0, 0, F1, F2, F3, TrUserData); 3 -> skip_group_triple(Rest, Key bsr 3, 0, F1, F2, F3, TrUserData); 5 -> skip_32_triple(Rest, 0, 0, F1, F2, F3, TrUserData) end end; dg_read_field_def_triple(<<>>, 0, 0, F1, F2, F3, _) -> #triple{a = F1, b = F2, c = F3}. d_field_triple_a(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> d_field_triple_a(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); d_field_triple_a(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_entry(Bs, TrUserData), TrUserData), dfp_read_field_def_triple(Rest2, 0, 0, if F1 == undefined -> NewFValue; true -> merge_msg_entry(F1, NewFValue, TrUserData) end, F2, F3, TrUserData). d_field_triple_b(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> d_field_triple_b(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); d_field_triple_b(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_entry(Bs, TrUserData), TrUserData), dfp_read_field_def_triple(Rest2, 0, 0, F1, if F2 == undefined -> NewFValue; true -> merge_msg_entry(F2, NewFValue, TrUserData) end, F3, TrUserData). d_field_triple_c(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> d_field_triple_c(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); d_field_triple_c(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_entry(Bs, TrUserData), TrUserData), dfp_read_field_def_triple(Rest2, 0, 0, F1, F2, if F3 == undefined -> NewFValue; true -> merge_msg_entry(F3, NewFValue, TrUserData) end, TrUserData). skip_varint_triple(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> skip_varint_triple(Rest, Z1, Z2, F1, F2, F3, TrUserData); skip_varint_triple(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> dfp_read_field_def_triple(Rest, Z1, Z2, F1, F2, F3, TrUserData). skip_length_delimited_triple(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> skip_length_delimited_triple(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); skip_length_delimited_triple(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_triple(Rest2, 0, 0, F1, F2, F3, TrUserData). skip_group_triple(Bin, FNum, Z2, F1, F2, F3, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_triple(Rest, 0, Z2, F1, F2, F3, TrUserData). skip_32_triple(<<_:32, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> dfp_read_field_def_triple(Rest, Z1, Z2, F1, F2, F3, TrUserData). skip_64_triple(<<_:64, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> dfp_read_field_def_triple(Rest, Z1, Z2, F1, F2, F3, TrUserData). d_msg_reqresp(Bin, TrUserData) -> dfp_read_field_def_reqresp(Bin, 0, 0, id(undefined, TrUserData), TrUserData). dfp_read_field_def_reqresp(<<10, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_reqresp_error(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_reqresp(<<18, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_reqresp_ctr(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_reqresp(<<26, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_reqresp_set(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_reqresp(<<34, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_reqresp_map(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_reqresp(<<42, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_reqresp_reg(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_reqresp(<<>>, 0, 0, F1, _) -> #reqresp{v = F1}; dfp_read_field_def_reqresp(Other, Z1, Z2, F1, TrUserData) -> dg_read_field_def_reqresp(Other, Z1, Z2, F1, TrUserData). dg_read_field_def_reqresp(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 32 - 7 -> dg_read_field_def_reqresp(Rest, N + 7, X bsl N + Acc, F1, TrUserData); dg_read_field_def_reqresp(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Key = X bsl N + Acc, case Key of 10 -> d_field_reqresp_error(Rest, 0, 0, F1, TrUserData); 18 -> d_field_reqresp_ctr(Rest, 0, 0, F1, TrUserData); 26 -> d_field_reqresp_set(Rest, 0, 0, F1, TrUserData); 34 -> d_field_reqresp_map(Rest, 0, 0, F1, TrUserData); 42 -> d_field_reqresp_reg(Rest, 0, 0, F1, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_reqresp(Rest, 0, 0, F1, TrUserData); 1 -> skip_64_reqresp(Rest, 0, 0, F1, TrUserData); 2 -> skip_length_delimited_reqresp(Rest, 0, 0, F1, TrUserData); 3 -> skip_group_reqresp(Rest, Key bsr 3, 0, F1, TrUserData); 5 -> skip_32_reqresp(Rest, 0, 0, F1, TrUserData) end end; dg_read_field_def_reqresp(<<>>, 0, 0, F1, _) -> #reqresp{v = F1}. d_field_reqresp_error(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_reqresp_error(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_reqresp_error(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = binary:copy(Bytes), dfp_read_field_def_reqresp(Rest2, 0, 0, {error, NewFValue}, TrUserData). d_field_reqresp_ctr(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_reqresp_ctr(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_reqresp_ctr(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_valcounter(Bs, TrUserData), TrUserData), dfp_read_field_def_reqresp(Rest2, 0, 0, case F1 of undefined -> {ctr, NewFValue}; {ctr, MVF1} -> {ctr, merge_msg_valcounter(MVF1, NewFValue, TrUserData)}; _ -> {ctr, NewFValue} end, TrUserData). d_field_reqresp_set(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_reqresp_set(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_reqresp_set(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_valset(Bs, TrUserData), TrUserData), dfp_read_field_def_reqresp(Rest2, 0, 0, case F1 of undefined -> {set, NewFValue}; {set, MVF1} -> {set, merge_msg_valset(MVF1, NewFValue, TrUserData)}; _ -> {set, NewFValue} end, TrUserData). d_field_reqresp_map(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_reqresp_map(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_reqresp_map(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_valmap(Bs, TrUserData), TrUserData), dfp_read_field_def_reqresp(Rest2, 0, 0, case F1 of undefined -> {map, NewFValue}; {map, MVF1} -> {map, merge_msg_valmap(MVF1, NewFValue, TrUserData)}; _ -> {map, NewFValue} end, TrUserData). d_field_reqresp_reg(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_reqresp_reg(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_reqresp_reg(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_valreg(Bs, TrUserData), TrUserData), dfp_read_field_def_reqresp(Rest2, 0, 0, case F1 of undefined -> {reg, NewFValue}; {reg, MVF1} -> {reg, merge_msg_valreg(MVF1, NewFValue, TrUserData)}; _ -> {reg, NewFValue} end, TrUserData). skip_varint_reqresp(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> skip_varint_reqresp(Rest, Z1, Z2, F1, TrUserData); skip_varint_reqresp(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_reqresp(Rest, Z1, Z2, F1, TrUserData). skip_length_delimited_reqresp(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> skip_length_delimited_reqresp(Rest, N + 7, X bsl N + Acc, F1, TrUserData); skip_length_delimited_reqresp(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_reqresp(Rest2, 0, 0, F1, TrUserData). skip_group_reqresp(Bin, FNum, Z2, F1, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_reqresp(Rest, 0, Z2, F1, TrUserData). skip_32_reqresp(<<_:32, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_reqresp(Rest, Z1, Z2, F1, TrUserData). skip_64_reqresp(<<_:64, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_reqresp(Rest, Z1, Z2, F1, TrUserData). d_msg_valcounter(Bin, TrUserData) -> dfp_read_field_def_valcounter(Bin, 0, 0, id(undefined, TrUserData), TrUserData). dfp_read_field_def_valcounter(<<8, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_valcounter_val(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_valcounter(<<>>, 0, 0, F1, _) -> #valcounter{val = F1}; dfp_read_field_def_valcounter(Other, Z1, Z2, F1, TrUserData) -> dg_read_field_def_valcounter(Other, Z1, Z2, F1, TrUserData). dg_read_field_def_valcounter(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 32 - 7 -> dg_read_field_def_valcounter(Rest, N + 7, X bsl N + Acc, F1, TrUserData); dg_read_field_def_valcounter(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Key = X bsl N + Acc, case Key of 8 -> d_field_valcounter_val(Rest, 0, 0, F1, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_valcounter(Rest, 0, 0, F1, TrUserData); 1 -> skip_64_valcounter(Rest, 0, 0, F1, TrUserData); 2 -> skip_length_delimited_valcounter(Rest, 0, 0, F1, TrUserData); 3 -> skip_group_valcounter(Rest, Key bsr 3, 0, F1, TrUserData); 5 -> skip_32_valcounter(Rest, 0, 0, F1, TrUserData) end end; dg_read_field_def_valcounter(<<>>, 0, 0, F1, _) -> #valcounter{val = F1}. d_field_valcounter_val(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_valcounter_val(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_valcounter_val(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> <> = <<(X bsl N + Acc):64/unsigned-native>>, dfp_read_field_def_valcounter(Rest, 0, 0, NewFValue, TrUserData). skip_varint_valcounter(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> skip_varint_valcounter(Rest, Z1, Z2, F1, TrUserData); skip_varint_valcounter(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valcounter(Rest, Z1, Z2, F1, TrUserData). skip_length_delimited_valcounter(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> skip_length_delimited_valcounter(Rest, N + 7, X bsl N + Acc, F1, TrUserData); skip_length_delimited_valcounter(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_valcounter(Rest2, 0, 0, F1, TrUserData). skip_group_valcounter(Bin, FNum, Z2, F1, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_valcounter(Rest, 0, Z2, F1, TrUserData). skip_32_valcounter(<<_:32, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valcounter(Rest, Z1, Z2, F1, TrUserData). skip_64_valcounter(<<_:64, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valcounter(Rest, Z1, Z2, F1, TrUserData). d_msg_valset(Bin, TrUserData) -> dfp_read_field_def_valset(Bin, 0, 0, id([], TrUserData), TrUserData). dfp_read_field_def_valset(<<10, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_valset_elems(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_valset(<<>>, 0, 0, F1, TrUserData) -> #valset{elems = lists_reverse(F1, TrUserData)}; dfp_read_field_def_valset(Other, Z1, Z2, F1, TrUserData) -> dg_read_field_def_valset(Other, Z1, Z2, F1, TrUserData). dg_read_field_def_valset(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 32 - 7 -> dg_read_field_def_valset(Rest, N + 7, X bsl N + Acc, F1, TrUserData); dg_read_field_def_valset(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Key = X bsl N + Acc, case Key of 10 -> d_field_valset_elems(Rest, 0, 0, F1, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_valset(Rest, 0, 0, F1, TrUserData); 1 -> skip_64_valset(Rest, 0, 0, F1, TrUserData); 2 -> skip_length_delimited_valset(Rest, 0, 0, F1, TrUserData); 3 -> skip_group_valset(Rest, Key bsr 3, 0, F1, TrUserData); 5 -> skip_32_valset(Rest, 0, 0, F1, TrUserData) end end; dg_read_field_def_valset(<<>>, 0, 0, F1, TrUserData) -> #valset{elems = lists_reverse(F1, TrUserData)}. d_field_valset_elems(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_valset_elems(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_valset_elems(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = binary:copy(Bytes), dfp_read_field_def_valset(Rest2, 0, 0, cons(NewFValue, F1, TrUserData), TrUserData). skip_varint_valset(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> skip_varint_valset(Rest, Z1, Z2, F1, TrUserData); skip_varint_valset(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valset(Rest, Z1, Z2, F1, TrUserData). skip_length_delimited_valset(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> skip_length_delimited_valset(Rest, N + 7, X bsl N + Acc, F1, TrUserData); skip_length_delimited_valset(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_valset(Rest2, 0, 0, F1, TrUserData). skip_group_valset(Bin, FNum, Z2, F1, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_valset(Rest, 0, Z2, F1, TrUserData). skip_32_valset(<<_:32, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valset(Rest, Z1, Z2, F1, TrUserData). skip_64_valset(<<_:64, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valset(Rest, Z1, Z2, F1, TrUserData). d_msg_valmap(Bin, TrUserData) -> dfp_read_field_def_valmap(Bin, 0, 0, id([], TrUserData), TrUserData). dfp_read_field_def_valmap(<<10, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_valmap_entries(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_valmap(<<>>, 0, 0, F1, TrUserData) -> #valmap{entries = lists_reverse(F1, TrUserData)}; dfp_read_field_def_valmap(Other, Z1, Z2, F1, TrUserData) -> dg_read_field_def_valmap(Other, Z1, Z2, F1, TrUserData). dg_read_field_def_valmap(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 32 - 7 -> dg_read_field_def_valmap(Rest, N + 7, X bsl N + Acc, F1, TrUserData); dg_read_field_def_valmap(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Key = X bsl N + Acc, case Key of 10 -> d_field_valmap_entries(Rest, 0, 0, F1, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_valmap(Rest, 0, 0, F1, TrUserData); 1 -> skip_64_valmap(Rest, 0, 0, F1, TrUserData); 2 -> skip_length_delimited_valmap(Rest, 0, 0, F1, TrUserData); 3 -> skip_group_valmap(Rest, Key bsr 3, 0, F1, TrUserData); 5 -> skip_32_valmap(Rest, 0, 0, F1, TrUserData) end end; dg_read_field_def_valmap(<<>>, 0, 0, F1, TrUserData) -> #valmap{entries = lists_reverse(F1, TrUserData)}. d_field_valmap_entries(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_valmap_entries(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_valmap_entries(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_mapentry(Bs, TrUserData), TrUserData), dfp_read_field_def_valmap(Rest2, 0, 0, cons(NewFValue, F1, TrUserData), TrUserData). skip_varint_valmap(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> skip_varint_valmap(Rest, Z1, Z2, F1, TrUserData); skip_varint_valmap(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valmap(Rest, Z1, Z2, F1, TrUserData). skip_length_delimited_valmap(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> skip_length_delimited_valmap(Rest, N + 7, X bsl N + Acc, F1, TrUserData); skip_length_delimited_valmap(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_valmap(Rest2, 0, 0, F1, TrUserData). skip_group_valmap(Bin, FNum, Z2, F1, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_valmap(Rest, 0, Z2, F1, TrUserData). skip_32_valmap(<<_:32, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valmap(Rest, Z1, Z2, F1, TrUserData). skip_64_valmap(<<_:64, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valmap(Rest, Z1, Z2, F1, TrUserData). d_msg_valreg(Bin, TrUserData) -> dfp_read_field_def_valreg(Bin, 0, 0, id(undefined, TrUserData), TrUserData). dfp_read_field_def_valreg(<<10, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_valreg_val(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_valreg(<<>>, 0, 0, F1, _) -> #valreg{val = F1}; dfp_read_field_def_valreg(Other, Z1, Z2, F1, TrUserData) -> dg_read_field_def_valreg(Other, Z1, Z2, F1, TrUserData). dg_read_field_def_valreg(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 32 - 7 -> dg_read_field_def_valreg(Rest, N + 7, X bsl N + Acc, F1, TrUserData); dg_read_field_def_valreg(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Key = X bsl N + Acc, case Key of 10 -> d_field_valreg_val(Rest, 0, 0, F1, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_valreg(Rest, 0, 0, F1, TrUserData); 1 -> skip_64_valreg(Rest, 0, 0, F1, TrUserData); 2 -> skip_length_delimited_valreg(Rest, 0, 0, F1, TrUserData); 3 -> skip_group_valreg(Rest, Key bsr 3, 0, F1, TrUserData); 5 -> skip_32_valreg(Rest, 0, 0, F1, TrUserData) end end; dg_read_field_def_valreg(<<>>, 0, 0, F1, _) -> #valreg{val = F1}. d_field_valreg_val(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_valreg_val(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_valreg_val(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = binary:copy(Bytes), dfp_read_field_def_valreg(Rest2, 0, 0, NewFValue, TrUserData). skip_varint_valreg(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> skip_varint_valreg(Rest, Z1, Z2, F1, TrUserData); skip_varint_valreg(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valreg(Rest, Z1, Z2, F1, TrUserData). skip_length_delimited_valreg(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> skip_length_delimited_valreg(Rest, N + 7, X bsl N + Acc, F1, TrUserData); skip_length_delimited_valreg(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_valreg(Rest2, 0, 0, F1, TrUserData). skip_group_valreg(Bin, FNum, Z2, F1, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_valreg(Rest, 0, Z2, F1, TrUserData). skip_32_valreg(<<_:32, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valreg(Rest, Z1, Z2, F1, TrUserData). skip_64_valreg(<<_:64, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_valreg(Rest, Z1, Z2, F1, TrUserData). d_msg_mapentry(Bin, TrUserData) -> dfp_read_field_def_mapentry(Bin, 0, 0, id(undefined, TrUserData), id(undefined, TrUserData), id(undefined, TrUserData), TrUserData). dfp_read_field_def_mapentry(<<10, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> d_field_mapentry_key(Rest, Z1, Z2, F1, F2, F3, TrUserData); dfp_read_field_def_mapentry(<<18, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> d_field_mapentry_ktype(Rest, Z1, Z2, F1, F2, F3, TrUserData); dfp_read_field_def_mapentry(<<26, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> d_field_mapentry_val(Rest, Z1, Z2, F1, F2, F3, TrUserData); dfp_read_field_def_mapentry(<<>>, 0, 0, F1, F2, F3, _) -> #mapentry{key = F1, ktype = F2, val = F3}; dfp_read_field_def_mapentry(Other, Z1, Z2, F1, F2, F3, TrUserData) -> dg_read_field_def_mapentry(Other, Z1, Z2, F1, F2, F3, TrUserData). dg_read_field_def_mapentry(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 32 - 7 -> dg_read_field_def_mapentry(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); dg_read_field_def_mapentry(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Key = X bsl N + Acc, case Key of 10 -> d_field_mapentry_key(Rest, 0, 0, F1, F2, F3, TrUserData); 18 -> d_field_mapentry_ktype(Rest, 0, 0, F1, F2, F3, TrUserData); 26 -> d_field_mapentry_val(Rest, 0, 0, F1, F2, F3, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_mapentry(Rest, 0, 0, F1, F2, F3, TrUserData); 1 -> skip_64_mapentry(Rest, 0, 0, F1, F2, F3, TrUserData); 2 -> skip_length_delimited_mapentry(Rest, 0, 0, F1, F2, F3, TrUserData); 3 -> skip_group_mapentry(Rest, Key bsr 3, 0, F1, F2, F3, TrUserData); 5 -> skip_32_mapentry(Rest, 0, 0, F1, F2, F3, TrUserData) end end; dg_read_field_def_mapentry(<<>>, 0, 0, F1, F2, F3, _) -> #mapentry{key = F1, ktype = F2, val = F3}. d_field_mapentry_key(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> d_field_mapentry_key(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); d_field_mapentry_key(<<0:1, X:7, Rest/binary>>, N, Acc, _, F2, F3, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = binary:copy(Bytes), dfp_read_field_def_mapentry(Rest2, 0, 0, NewFValue, F2, F3, TrUserData). d_field_mapentry_ktype(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> d_field_mapentry_ktype(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); d_field_mapentry_ktype(<<0:1, X:7, Rest/binary>>, N, Acc, F1, _, F3, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = binary:copy(Bytes), dfp_read_field_def_mapentry(Rest2, 0, 0, F1, NewFValue, F3, TrUserData). d_field_mapentry_val(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> d_field_mapentry_val(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); d_field_mapentry_val(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_mapfield(Bs, TrUserData), TrUserData), dfp_read_field_def_mapentry(Rest2, 0, 0, F1, F2, if F3 == undefined -> NewFValue; true -> merge_msg_mapfield(F3, NewFValue, TrUserData) end, TrUserData). skip_varint_mapentry(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> skip_varint_mapentry(Rest, Z1, Z2, F1, F2, F3, TrUserData); skip_varint_mapentry(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> dfp_read_field_def_mapentry(Rest, Z1, Z2, F1, F2, F3, TrUserData). skip_length_delimited_mapentry(<<1:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) when N < 57 -> skip_length_delimited_mapentry(Rest, N + 7, X bsl N + Acc, F1, F2, F3, TrUserData); skip_length_delimited_mapentry(<<0:1, X:7, Rest/binary>>, N, Acc, F1, F2, F3, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_mapentry(Rest2, 0, 0, F1, F2, F3, TrUserData). skip_group_mapentry(Bin, FNum, Z2, F1, F2, F3, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_mapentry(Rest, 0, Z2, F1, F2, F3, TrUserData). skip_32_mapentry(<<_:32, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> dfp_read_field_def_mapentry(Rest, Z1, Z2, F1, F2, F3, TrUserData). skip_64_mapentry(<<_:64, Rest/binary>>, Z1, Z2, F1, F2, F3, TrUserData) -> dfp_read_field_def_mapentry(Rest, Z1, Z2, F1, F2, F3, TrUserData). d_msg_mapfield(Bin, TrUserData) -> dfp_read_field_def_mapfield(Bin, 0, 0, id(undefined, TrUserData), TrUserData). dfp_read_field_def_mapfield(<<10, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_mapfield_c(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_mapfield(<<18, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_mapfield_s(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_mapfield(<<26, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_mapfield_m(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_mapfield(<<34, Rest/binary>>, Z1, Z2, F1, TrUserData) -> d_field_mapfield_r(Rest, Z1, Z2, F1, TrUserData); dfp_read_field_def_mapfield(<<>>, 0, 0, F1, _) -> #mapfield{v = F1}; dfp_read_field_def_mapfield(Other, Z1, Z2, F1, TrUserData) -> dg_read_field_def_mapfield(Other, Z1, Z2, F1, TrUserData). dg_read_field_def_mapfield(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 32 - 7 -> dg_read_field_def_mapfield(Rest, N + 7, X bsl N + Acc, F1, TrUserData); dg_read_field_def_mapfield(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Key = X bsl N + Acc, case Key of 10 -> d_field_mapfield_c(Rest, 0, 0, F1, TrUserData); 18 -> d_field_mapfield_s(Rest, 0, 0, F1, TrUserData); 26 -> d_field_mapfield_m(Rest, 0, 0, F1, TrUserData); 34 -> d_field_mapfield_r(Rest, 0, 0, F1, TrUserData); _ -> case Key band 7 of 0 -> skip_varint_mapfield(Rest, 0, 0, F1, TrUserData); 1 -> skip_64_mapfield(Rest, 0, 0, F1, TrUserData); 2 -> skip_length_delimited_mapfield(Rest, 0, 0, F1, TrUserData); 3 -> skip_group_mapfield(Rest, Key bsr 3, 0, F1, TrUserData); 5 -> skip_32_mapfield(Rest, 0, 0, F1, TrUserData) end end; dg_read_field_def_mapfield(<<>>, 0, 0, F1, _) -> #mapfield{v = F1}. d_field_mapfield_c(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_mapfield_c(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_mapfield_c(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_valcounter(Bs, TrUserData), TrUserData), dfp_read_field_def_mapfield(Rest2, 0, 0, case F1 of undefined -> {c, NewFValue}; {c, MVF1} -> {c, merge_msg_valcounter(MVF1, NewFValue, TrUserData)}; _ -> {c, NewFValue} end, TrUserData). d_field_mapfield_s(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_mapfield_s(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_mapfield_s(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_valset(Bs, TrUserData), TrUserData), dfp_read_field_def_mapfield(Rest2, 0, 0, case F1 of undefined -> {s, NewFValue}; {s, MVF1} -> {s, merge_msg_valset(MVF1, NewFValue, TrUserData)}; _ -> {s, NewFValue} end, TrUserData). d_field_mapfield_m(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_mapfield_m(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_mapfield_m(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_valmap(Bs, TrUserData), TrUserData), dfp_read_field_def_mapfield(Rest2, 0, 0, case F1 of undefined -> {m, NewFValue}; {m, MVF1} -> {m, merge_msg_valmap(MVF1, NewFValue, TrUserData)}; _ -> {m, NewFValue} end, TrUserData). d_field_mapfield_r(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> d_field_mapfield_r(Rest, N + 7, X bsl N + Acc, F1, TrUserData); d_field_mapfield_r(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Len = X bsl N + Acc, <> = Rest, NewFValue = id(d_msg_valreg(Bs, TrUserData), TrUserData), dfp_read_field_def_mapfield(Rest2, 0, 0, case F1 of undefined -> {r, NewFValue}; {r, MVF1} -> {r, merge_msg_valreg(MVF1, NewFValue, TrUserData)}; _ -> {r, NewFValue} end, TrUserData). skip_varint_mapfield(<<1:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> skip_varint_mapfield(Rest, Z1, Z2, F1, TrUserData); skip_varint_mapfield(<<0:1, _:7, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_mapfield(Rest, Z1, Z2, F1, TrUserData). skip_length_delimited_mapfield(<<1:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) when N < 57 -> skip_length_delimited_mapfield(Rest, N + 7, X bsl N + Acc, F1, TrUserData); skip_length_delimited_mapfield(<<0:1, X:7, Rest/binary>>, N, Acc, F1, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, dfp_read_field_def_mapfield(Rest2, 0, 0, F1, TrUserData). skip_group_mapfield(Bin, FNum, Z2, F1, TrUserData) -> {_, Rest} = read_group(Bin, FNum), dfp_read_field_def_mapfield(Rest, 0, Z2, F1, TrUserData). skip_32_mapfield(<<_:32, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_mapfield(Rest, Z1, Z2, F1, TrUserData). skip_64_mapfield(<<_:64, Rest/binary>>, Z1, Z2, F1, TrUserData) -> dfp_read_field_def_mapfield(Rest, Z1, Z2, F1, TrUserData). read_group(Bin, FieldNum) -> {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), <> = Bin, {Group, Rest}. %% Like skipping over fields, but record the total length, %% Each field is <(FieldNum bsl 3) bor FieldType> ++ %% Record the length because varints may be non-optimally encoded. %% %% Groups can be nested, but assume the same FieldNum cannot be nested %% because group field numbers are shared with the rest of the fields %% numbers. Thus we can search just for an group-end with the same %% field number. %% %% (The only time the same group field number could occur would %% be in a nested sub message, but then it would be inside a %% length-delimited entry, which we skip-read by length.) read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) when N < (32-7) -> read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) -> Key = X bsl N + Acc, TagLen1 = TagLen + 1, case {Key bsr 3, Key band 7} of {FieldNum, 4} -> % 4 = group_end {NumBytes, TagLen1}; {_, 0} -> % 0 = varint read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); {_, 1} -> % 1 = bits64 <<_:64, Tl2/binary>> = Tl, read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); {_, 2} -> % 2 = length_delimited read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); {_, 3} -> % 3 = group_start read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); {_, 4} -> % 4 = group_end read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); {_, 5} -> % 5 = bits32 <<_:32, Tl2/binary>> = Tl, read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) end. read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) when N < (64-7) -> read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) when N < (64-7) -> read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> Len = X bsl N + Acc, NumBytes1 = NumBytes + 1, <<_:Len/binary, Tl2/binary>> = Tl, read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). merge_msgs(Prev, New) -> merge_msgs(Prev, New, []). merge_msgs(Prev, New, Opts) when element(1, Prev) =:= element(1, New) -> TrUserData = proplists:get_value(user_data, Opts), case Prev of #req{} -> merge_msg_req(Prev, New, TrUserData); #opget{} -> merge_msg_opget(Prev, New, TrUserData); #opupdate{} -> merge_msg_opupdate(Prev, New, TrUserData); #entry{} -> merge_msg_entry(Prev, New, TrUserData); #pair{} -> merge_msg_pair(Prev, New, TrUserData); #triple{} -> merge_msg_triple(Prev, New, TrUserData); #reqresp{} -> merge_msg_reqresp(Prev, New, TrUserData); #valcounter{} -> merge_msg_valcounter(Prev, New, TrUserData); #valset{} -> merge_msg_valset(Prev, New, TrUserData); #valmap{} -> merge_msg_valmap(Prev, New, TrUserData); #valreg{} -> merge_msg_valreg(Prev, New, TrUserData); #mapentry{} -> merge_msg_mapentry(Prev, New, TrUserData); #mapfield{} -> merge_msg_mapfield(Prev, New, TrUserData) end. merge_msg_req(#req{u = PFu}, #req{u = NFu}, TrUserData) -> #req{u = case {PFu, NFu} of {{get, OPFu}, {get, ONFu}} -> {get, merge_msg_opget(OPFu, ONFu, TrUserData)}; {{put, OPFu}, {put, ONFu}} -> {put, merge_msg_opupdate(OPFu, ONFu, TrUserData)}; {_, undefined} -> PFu; _ -> NFu end}. merge_msg_opget(#opget{}, #opget{key = NFkey, type = NFtype}, _) -> #opget{key = NFkey, type = NFtype}. merge_msg_opupdate(#opupdate{k = PFk, e = PFe}, #opupdate{k = NFk, e = NFe, actor = NFactor}, TrUserData) -> #opupdate{k = if PFk /= undefined, NFk /= undefined -> merge_msg_opget(PFk, NFk, TrUserData); PFk == undefined -> NFk; NFk == undefined -> PFk end, e = if PFe /= undefined, NFe /= undefined -> 'erlang_++'(PFe, NFe, TrUserData); PFe == undefined -> NFe; NFe == undefined -> PFe end, actor = NFactor}. merge_msg_entry(#entry{u = PFu}, #entry{u = NFu}, TrUserData) -> #entry{u = case {PFu, NFu} of {{ii, OPFu}, {ii, ONFu}} -> {ii, merge_msg_pair(OPFu, ONFu, TrUserData)}; {{iii, OPFu}, {iii, ONFu}} -> {iii, merge_msg_triple(OPFu, ONFu, TrUserData)}; {_, undefined} -> PFu; _ -> NFu end}. merge_msg_pair(#pair{a = PFa, b = PFb}, #pair{a = NFa, b = NFb}, TrUserData) -> #pair{a = if PFa /= undefined, NFa /= undefined -> merge_msg_entry(PFa, NFa, TrUserData); PFa == undefined -> NFa; NFa == undefined -> PFa end, b = if PFb /= undefined, NFb /= undefined -> merge_msg_entry(PFb, NFb, TrUserData); PFb == undefined -> NFb; NFb == undefined -> PFb end}. merge_msg_triple(#triple{a = PFa, b = PFb, c = PFc}, #triple{a = NFa, b = NFb, c = NFc}, TrUserData) -> #triple{a = if PFa /= undefined, NFa /= undefined -> merge_msg_entry(PFa, NFa, TrUserData); PFa == undefined -> NFa; NFa == undefined -> PFa end, b = if PFb /= undefined, NFb /= undefined -> merge_msg_entry(PFb, NFb, TrUserData); PFb == undefined -> NFb; NFb == undefined -> PFb end, c = if PFc /= undefined, NFc /= undefined -> merge_msg_entry(PFc, NFc, TrUserData); PFc == undefined -> NFc; NFc == undefined -> PFc end}. merge_msg_reqresp(#reqresp{v = PFv}, #reqresp{v = NFv}, TrUserData) -> #reqresp{v = case {PFv, NFv} of {{ctr, OPFv}, {ctr, ONFv}} -> {ctr, merge_msg_valcounter(OPFv, ONFv, TrUserData)}; {{set, OPFv}, {set, ONFv}} -> {set, merge_msg_valset(OPFv, ONFv, TrUserData)}; {{map, OPFv}, {map, ONFv}} -> {map, merge_msg_valmap(OPFv, ONFv, TrUserData)}; {{reg, OPFv}, {reg, ONFv}} -> {reg, merge_msg_valreg(OPFv, ONFv, TrUserData)}; {_, undefined} -> PFv; _ -> NFv end}. merge_msg_valcounter(#valcounter{}, #valcounter{val = NFval}, _) -> #valcounter{val = NFval}. merge_msg_valset(#valset{elems = PFelems}, #valset{elems = NFelems}, TrUserData) -> #valset{elems = if PFelems /= undefined, NFelems /= undefined -> 'erlang_++'(PFelems, NFelems, TrUserData); PFelems == undefined -> NFelems; NFelems == undefined -> PFelems end}. merge_msg_valmap(#valmap{entries = PFentries}, #valmap{entries = NFentries}, TrUserData) -> #valmap{entries = if PFentries /= undefined, NFentries /= undefined -> 'erlang_++'(PFentries, NFentries, TrUserData); PFentries == undefined -> NFentries; NFentries == undefined -> PFentries end}. merge_msg_valreg(#valreg{}, #valreg{val = NFval}, _) -> #valreg{val = NFval}. merge_msg_mapentry(#mapentry{val = PFval}, #mapentry{key = NFkey, ktype = NFktype, val = NFval}, TrUserData) -> #mapentry{key = NFkey, ktype = NFktype, val = if PFval /= undefined, NFval /= undefined -> merge_msg_mapfield(PFval, NFval, TrUserData); PFval == undefined -> NFval; NFval == undefined -> PFval end}. merge_msg_mapfield(#mapfield{v = PFv}, #mapfield{v = NFv}, TrUserData) -> #mapfield{v = case {PFv, NFv} of {{c, OPFv}, {c, ONFv}} -> {c, merge_msg_valcounter(OPFv, ONFv, TrUserData)}; {{s, OPFv}, {s, ONFv}} -> {s, merge_msg_valset(OPFv, ONFv, TrUserData)}; {{m, OPFv}, {m, ONFv}} -> {m, merge_msg_valmap(OPFv, ONFv, TrUserData)}; {{r, OPFv}, {r, ONFv}} -> {r, merge_msg_valreg(OPFv, ONFv, TrUserData)}; {_, undefined} -> PFv; _ -> NFv end}. verify_msg(Msg) -> verify_msg(Msg, []). verify_msg(Msg, Opts) -> TrUserData = proplists:get_value(user_data, Opts), case Msg of #req{} -> v_msg_req(Msg, [req], TrUserData); #opget{} -> v_msg_opget(Msg, [opget], TrUserData); #opupdate{} -> v_msg_opupdate(Msg, [opupdate], TrUserData); #entry{} -> v_msg_entry(Msg, [entry], TrUserData); #pair{} -> v_msg_pair(Msg, [pair], TrUserData); #triple{} -> v_msg_triple(Msg, [triple], TrUserData); #reqresp{} -> v_msg_reqresp(Msg, [reqresp], TrUserData); #valcounter{} -> v_msg_valcounter(Msg, [valcounter], TrUserData); #valset{} -> v_msg_valset(Msg, [valset], TrUserData); #valmap{} -> v_msg_valmap(Msg, [valmap], TrUserData); #valreg{} -> v_msg_valreg(Msg, [valreg], TrUserData); #mapentry{} -> v_msg_mapentry(Msg, [mapentry], TrUserData); #mapfield{} -> v_msg_mapfield(Msg, [mapfield], TrUserData); _ -> mk_type_error(not_a_known_message, Msg, []) end. -dialyzer({nowarn_function,v_msg_req/3}). v_msg_req(#req{u = F1}, Path, TrUserData) -> case F1 of undefined -> ok; {get, OF1} -> v_msg_opget(OF1, [get, u | Path], TrUserData); {put, OF1} -> v_msg_opupdate(OF1, [put, u | Path], TrUserData); _ -> mk_type_error(invalid_oneof, F1, [u | Path]) end, ok. -dialyzer({nowarn_function,v_msg_opget/3}). v_msg_opget(#opget{key = F1, type = F2}, Path, _) -> v_type_string(F1, [key | Path]), v_type_string(F2, [type | Path]), ok; v_msg_opget(X, Path, _TrUserData) -> mk_type_error({expected_msg, opget}, X, Path). -dialyzer({nowarn_function,v_msg_opupdate/3}). v_msg_opupdate(#opupdate{k = F1, e = F2, actor = F3}, Path, TrUserData) -> v_msg_opget(F1, [k | Path], TrUserData), if is_list(F2) -> _ = [v_msg_entry(Elem, [e | Path], TrUserData) || Elem <- F2], ok; true -> mk_type_error({invalid_list_of, {msg, entry}}, F2, [e | Path]) end, v_type_string(F3, [actor | Path]), ok; v_msg_opupdate(X, Path, _TrUserData) -> mk_type_error({expected_msg, opupdate}, X, Path). -dialyzer({nowarn_function,v_msg_entry/3}). v_msg_entry(#entry{u = F1}, Path, TrUserData) -> case F1 of undefined -> ok; {int, OF1} -> v_type_int64(OF1, [int, u | Path]); {str, OF1} -> v_type_string(OF1, [str, u | Path]); {atm, OF1} -> v_type_string(OF1, [atm, u | Path]); {ii, OF1} -> v_msg_pair(OF1, [ii, u | Path], TrUserData); {iii, OF1} -> v_msg_triple(OF1, [iii, u | Path], TrUserData); _ -> mk_type_error(invalid_oneof, F1, [u | Path]) end, ok; v_msg_entry(X, Path, _TrUserData) -> mk_type_error({expected_msg, entry}, X, Path). -dialyzer({nowarn_function,v_msg_pair/3}). v_msg_pair(#pair{a = F1, b = F2}, Path, TrUserData) -> v_msg_entry(F1, [a | Path], TrUserData), v_msg_entry(F2, [b | Path], TrUserData), ok; v_msg_pair(X, Path, _TrUserData) -> mk_type_error({expected_msg, pair}, X, Path). -dialyzer({nowarn_function,v_msg_triple/3}). v_msg_triple(#triple{a = F1, b = F2, c = F3}, Path, TrUserData) -> v_msg_entry(F1, [a | Path], TrUserData), v_msg_entry(F2, [b | Path], TrUserData), v_msg_entry(F3, [c | Path], TrUserData), ok; v_msg_triple(X, Path, _TrUserData) -> mk_type_error({expected_msg, triple}, X, Path). -dialyzer({nowarn_function,v_msg_reqresp/3}). v_msg_reqresp(#reqresp{v = F1}, Path, TrUserData) -> case F1 of undefined -> ok; {error, OF1} -> v_type_string(OF1, [error, v | Path]); {ctr, OF1} -> v_msg_valcounter(OF1, [ctr, v | Path], TrUserData); {set, OF1} -> v_msg_valset(OF1, [set, v | Path], TrUserData); {map, OF1} -> v_msg_valmap(OF1, [map, v | Path], TrUserData); {reg, OF1} -> v_msg_valreg(OF1, [reg, v | Path], TrUserData); _ -> mk_type_error(invalid_oneof, F1, [v | Path]) end, ok. -dialyzer({nowarn_function,v_msg_valcounter/3}). v_msg_valcounter(#valcounter{val = F1}, Path, _) -> v_type_int64(F1, [val | Path]), ok; v_msg_valcounter(X, Path, _TrUserData) -> mk_type_error({expected_msg, valcounter}, X, Path). -dialyzer({nowarn_function,v_msg_valset/3}). v_msg_valset(#valset{elems = F1}, Path, _) -> if is_list(F1) -> _ = [v_type_string(Elem, [elems | Path]) || Elem <- F1], ok; true -> mk_type_error({invalid_list_of, string}, F1, [elems | Path]) end, ok; v_msg_valset(X, Path, _TrUserData) -> mk_type_error({expected_msg, valset}, X, Path). -dialyzer({nowarn_function,v_msg_valmap/3}). v_msg_valmap(#valmap{entries = F1}, Path, TrUserData) -> if is_list(F1) -> _ = [v_msg_mapentry(Elem, [entries | Path], TrUserData) || Elem <- F1], ok; true -> mk_type_error({invalid_list_of, {msg, mapentry}}, F1, [entries | Path]) end, ok; v_msg_valmap(X, Path, _TrUserData) -> mk_type_error({expected_msg, valmap}, X, Path). -dialyzer({nowarn_function,v_msg_valreg/3}). v_msg_valreg(#valreg{val = F1}, Path, _) -> v_type_string(F1, [val | Path]), ok; v_msg_valreg(X, Path, _TrUserData) -> mk_type_error({expected_msg, valreg}, X, Path). -dialyzer({nowarn_function,v_msg_mapentry/3}). v_msg_mapentry(#mapentry{key = F1, ktype = F2, val = F3}, Path, TrUserData) -> v_type_string(F1, [key | Path]), v_type_string(F2, [ktype | Path]), v_msg_mapfield(F3, [val | Path], TrUserData), ok; v_msg_mapentry(X, Path, _TrUserData) -> mk_type_error({expected_msg, mapentry}, X, Path). -dialyzer({nowarn_function,v_msg_mapfield/3}). v_msg_mapfield(#mapfield{v = F1}, Path, TrUserData) -> case F1 of undefined -> ok; {c, OF1} -> v_msg_valcounter(OF1, [c, v | Path], TrUserData); {s, OF1} -> v_msg_valset(OF1, [s, v | Path], TrUserData); {m, OF1} -> v_msg_valmap(OF1, [m, v | Path], TrUserData); {r, OF1} -> v_msg_valreg(OF1, [r, v | Path], TrUserData); _ -> mk_type_error(invalid_oneof, F1, [v | Path]) end, ok; v_msg_mapfield(X, Path, _TrUserData) -> mk_type_error({expected_msg, mapfield}, X, Path). -dialyzer({nowarn_function,v_type_int64/2}). v_type_int64(N, _Path) when -9223372036854775808 =< N, N =< 9223372036854775807 -> ok; v_type_int64(N, Path) when is_integer(N) -> mk_type_error({value_out_of_range, int64, signed, 64}, N, Path); v_type_int64(X, Path) -> mk_type_error({bad_integer, int64, signed, 64}, X, Path). -dialyzer({nowarn_function,v_type_string/2}). v_type_string(S, Path) when is_list(S); is_binary(S) -> try unicode:characters_to_binary(S) of B when is_binary(B) -> ok; {error, _, _} -> mk_type_error(bad_unicode_string, S, Path) catch error:badarg -> mk_type_error(bad_unicode_string, S, Path) end; v_type_string(X, Path) -> mk_type_error(bad_unicode_string, X, Path). -spec mk_type_error(_, _, list()) -> no_return(). mk_type_error(Error, ValueSeen, Path) -> Path2 = prettify_path(Path), erlang:error({gpb_type_error, {Error, [{value, ValueSeen}, {path, Path2}]}}). prettify_path([]) -> top_level; prettify_path(PathR) -> list_to_atom(string:join(lists:map(fun atom_to_list/1, lists:reverse(PathR)), ".")). -compile({inline,id/2}). id(X, _TrUserData) -> X. -compile({inline,cons/3}). cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. -compile({inline,lists_reverse/2}). 'lists_reverse'(L, _TrUserData) -> lists:reverse(L). -compile({inline,'erlang_++'/3}). 'erlang_++'(A, B, _TrUserData) -> A ++ B. get_msg_defs() -> [{{msg, req}, [#gpb_oneof{name = u, rnum = 2, fields = [#field{name = get, fnum = 1, rnum = 2, type = {msg, opget}, occurrence = optional, opts = []}, #field{name = put, fnum = 2, rnum = 2, type = {msg, opupdate}, occurrence = optional, opts = []}]}]}, {{msg, opget}, [#field{name = key, fnum = 1, rnum = 2, type = string, occurrence = required, opts = []}, #field{name = type, fnum = 2, rnum = 3, type = string, occurrence = required, opts = []}]}, {{msg, opupdate}, [#field{name = k, fnum = 1, rnum = 2, type = {msg, opget}, occurrence = required, opts = []}, #field{name = e, fnum = 2, rnum = 3, type = {msg, entry}, occurrence = repeated, opts = []}, #field{name = actor, fnum = 3, rnum = 4, type = string, occurrence = required, opts = []}]}, {{msg, entry}, [#gpb_oneof{name = u, rnum = 2, fields = [#field{name = int, fnum = 1, rnum = 2, type = int64, occurrence = optional, opts = []}, #field{name = str, fnum = 2, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = atm, fnum = 3, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = ii, fnum = 4, rnum = 2, type = {msg, pair}, occurrence = optional, opts = []}, #field{name = iii, fnum = 5, rnum = 2, type = {msg, triple}, occurrence = optional, opts = []}]}]}, {{msg, pair}, [#field{name = a, fnum = 1, rnum = 2, type = {msg, entry}, occurrence = required, opts = []}, #field{name = b, fnum = 2, rnum = 3, type = {msg, entry}, occurrence = required, opts = []}]}, {{msg, triple}, [#field{name = a, fnum = 1, rnum = 2, type = {msg, entry}, occurrence = required, opts = []}, #field{name = b, fnum = 2, rnum = 3, type = {msg, entry}, occurrence = required, opts = []}, #field{name = c, fnum = 3, rnum = 4, type = {msg, entry}, occurrence = required, opts = []}]}, {{msg, reqresp}, [#gpb_oneof{name = v, rnum = 2, fields = [#field{name = error, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = ctr, fnum = 2, rnum = 2, type = {msg, valcounter}, occurrence = optional, opts = []}, #field{name = set, fnum = 3, rnum = 2, type = {msg, valset}, occurrence = optional, opts = []}, #field{name = map, fnum = 4, rnum = 2, type = {msg, valmap}, occurrence = optional, opts = []}, #field{name = reg, fnum = 5, rnum = 2, type = {msg, valreg}, occurrence = optional, opts = []}]}]}, {{msg, valcounter}, [#field{name = val, fnum = 1, rnum = 2, type = int64, occurrence = required, opts = []}]}, {{msg, valset}, [#field{name = elems, fnum = 1, rnum = 2, type = string, occurrence = repeated, opts = []}]}, {{msg, valmap}, [#field{name = entries, fnum = 1, rnum = 2, type = {msg, mapentry}, occurrence = repeated, opts = []}]}, {{msg, valreg}, [#field{name = val, fnum = 1, rnum = 2, type = string, occurrence = required, opts = []}]}, {{msg, mapentry}, [#field{name = key, fnum = 1, rnum = 2, type = string, occurrence = required, opts = []}, #field{name = ktype, fnum = 2, rnum = 3, type = string, occurrence = required, opts = []}, #field{name = val, fnum = 3, rnum = 4, type = {msg, mapfield}, occurrence = required, opts = []}]}, {{msg, mapfield}, [#gpb_oneof{name = v, rnum = 2, fields = [#field{name = c, fnum = 1, rnum = 2, type = {msg, valcounter}, occurrence = optional, opts = []}, #field{name = s, fnum = 2, rnum = 2, type = {msg, valset}, occurrence = optional, opts = []}, #field{name = m, fnum = 3, rnum = 2, type = {msg, valmap}, occurrence = optional, opts = []}, #field{name = r, fnum = 4, rnum = 2, type = {msg, valreg}, occurrence = optional, opts = []}]}]}]. get_msg_names() -> [req, opget, opupdate, entry, pair, triple, reqresp, valcounter, valset, valmap, valreg, mapentry, mapfield]. get_group_names() -> []. get_msg_or_group_names() -> [req, opget, opupdate, entry, pair, triple, reqresp, valcounter, valset, valmap, valreg, mapentry, mapfield]. get_enum_names() -> []. fetch_msg_def(MsgName) -> case find_msg_def(MsgName) of Fs when is_list(Fs) -> Fs; error -> erlang:error({no_such_msg, MsgName}) end. -spec fetch_enum_def(_) -> no_return(). fetch_enum_def(EnumName) -> erlang:error({no_such_enum, EnumName}). find_msg_def(req) -> [#gpb_oneof{name = u, rnum = 2, fields = [#field{name = get, fnum = 1, rnum = 2, type = {msg, opget}, occurrence = optional, opts = []}, #field{name = put, fnum = 2, rnum = 2, type = {msg, opupdate}, occurrence = optional, opts = []}]}]; find_msg_def(opget) -> [#field{name = key, fnum = 1, rnum = 2, type = string, occurrence = required, opts = []}, #field{name = type, fnum = 2, rnum = 3, type = string, occurrence = required, opts = []}]; find_msg_def(opupdate) -> [#field{name = k, fnum = 1, rnum = 2, type = {msg, opget}, occurrence = required, opts = []}, #field{name = e, fnum = 2, rnum = 3, type = {msg, entry}, occurrence = repeated, opts = []}, #field{name = actor, fnum = 3, rnum = 4, type = string, occurrence = required, opts = []}]; find_msg_def(entry) -> [#gpb_oneof{name = u, rnum = 2, fields = [#field{name = int, fnum = 1, rnum = 2, type = int64, occurrence = optional, opts = []}, #field{name = str, fnum = 2, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = atm, fnum = 3, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = ii, fnum = 4, rnum = 2, type = {msg, pair}, occurrence = optional, opts = []}, #field{name = iii, fnum = 5, rnum = 2, type = {msg, triple}, occurrence = optional, opts = []}]}]; find_msg_def(pair) -> [#field{name = a, fnum = 1, rnum = 2, type = {msg, entry}, occurrence = required, opts = []}, #field{name = b, fnum = 2, rnum = 3, type = {msg, entry}, occurrence = required, opts = []}]; find_msg_def(triple) -> [#field{name = a, fnum = 1, rnum = 2, type = {msg, entry}, occurrence = required, opts = []}, #field{name = b, fnum = 2, rnum = 3, type = {msg, entry}, occurrence = required, opts = []}, #field{name = c, fnum = 3, rnum = 4, type = {msg, entry}, occurrence = required, opts = []}]; find_msg_def(reqresp) -> [#gpb_oneof{name = v, rnum = 2, fields = [#field{name = error, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = ctr, fnum = 2, rnum = 2, type = {msg, valcounter}, occurrence = optional, opts = []}, #field{name = set, fnum = 3, rnum = 2, type = {msg, valset}, occurrence = optional, opts = []}, #field{name = map, fnum = 4, rnum = 2, type = {msg, valmap}, occurrence = optional, opts = []}, #field{name = reg, fnum = 5, rnum = 2, type = {msg, valreg}, occurrence = optional, opts = []}]}]; find_msg_def(valcounter) -> [#field{name = val, fnum = 1, rnum = 2, type = int64, occurrence = required, opts = []}]; find_msg_def(valset) -> [#field{name = elems, fnum = 1, rnum = 2, type = string, occurrence = repeated, opts = []}]; find_msg_def(valmap) -> [#field{name = entries, fnum = 1, rnum = 2, type = {msg, mapentry}, occurrence = repeated, opts = []}]; find_msg_def(valreg) -> [#field{name = val, fnum = 1, rnum = 2, type = string, occurrence = required, opts = []}]; find_msg_def(mapentry) -> [#field{name = key, fnum = 1, rnum = 2, type = string, occurrence = required, opts = []}, #field{name = ktype, fnum = 2, rnum = 3, type = string, occurrence = required, opts = []}, #field{name = val, fnum = 3, rnum = 4, type = {msg, mapfield}, occurrence = required, opts = []}]; find_msg_def(mapfield) -> [#gpb_oneof{name = v, rnum = 2, fields = [#field{name = c, fnum = 1, rnum = 2, type = {msg, valcounter}, occurrence = optional, opts = []}, #field{name = s, fnum = 2, rnum = 2, type = {msg, valset}, occurrence = optional, opts = []}, #field{name = m, fnum = 3, rnum = 2, type = {msg, valmap}, occurrence = optional, opts = []}, #field{name = r, fnum = 4, rnum = 2, type = {msg, valreg}, occurrence = optional, opts = []}]}]; find_msg_def(_) -> error. find_enum_def(_) -> error. -spec enum_symbol_by_value(_, _) -> no_return(). enum_symbol_by_value(E, V) -> erlang:error({no_enum_defs, E, V}). -spec enum_value_by_symbol(_, _) -> no_return(). enum_value_by_symbol(E, V) -> erlang:error({no_enum_defs, E, V}). get_service_names() -> []. get_service_def(_) -> error. get_rpc_names(_) -> error. find_rpc_def(_, _) -> error. -spec fetch_rpc_def(_, _) -> no_return(). fetch_rpc_def(ServiceName, RpcName) -> erlang:error({no_such_rpc, ServiceName, RpcName}). get_package_name() -> undefined. gpb_version_as_string() -> "3.27.4". gpb_version_as_list() -> [3,27,4].