Packages

A protobuffer library for Lasp

Current section

Files

Jump to
lasp_pb src lasp_pb.erl
Raw

src/lasp_pb.erl

%% -*- 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);
#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, <<Bin/binary, 10>>, TrUserData)
end;
{put, OF1} ->
begin
TrOF1 = id(OF1, TrUserData),
e_mfield_req_put(TrOF1, <<Bin/binary, 18>>, 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, <<Bin/binary, 10>>)
end,
begin
TrF2 = id(F2, TrUserData),
e_type_string(TrF2, <<B1/binary, 18>>)
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, <<Bin/binary, 10>>,
TrUserData)
end,
B2 = begin
TrF2 = id(F2, TrUserData),
e_mfield_opupdate_e(TrF2, <<B1/binary, 18>>, TrUserData)
end,
begin
TrF3 = id(F3, TrUserData),
e_type_string(TrF3, <<B2/binary, 26>>)
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, <<Bin/binary, 8>>)
end;
{str, OF1} ->
begin
TrOF1 = id(OF1, TrUserData),
e_type_string(TrOF1, <<Bin/binary, 18>>)
end;
{atm, OF1} ->
begin
TrOF1 = id(OF1, TrUserData),
e_type_string(TrOF1, <<Bin/binary, 26>>)
end;
{ii, OF1} ->
begin
TrOF1 = id(OF1, TrUserData),
e_mfield_entry_ii(TrOF1, <<Bin/binary, 34>>, TrUserData)
end;
{iii, OF1} ->
begin
TrOF1 = id(OF1, TrUserData),
e_mfield_entry_iii(TrOF1, <<Bin/binary, 42>>,
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, <<Bin/binary, 10>>, TrUserData)
end,
begin
TrF2 = id(F2, TrUserData),
e_mfield_pair_b(TrF2, <<B1/binary, 18>>, 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, <<Bin/binary, 10>>, TrUserData)
end,
B2 = begin
TrF2 = id(F2, TrUserData),
e_mfield_triple_b(TrF2, <<B1/binary, 18>>, TrUserData)
end,
begin
TrF3 = id(F3, TrUserData),
e_mfield_triple_c(TrF3, <<B2/binary, 26>>, TrUserData)
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, <<Bin/binary, 8>>)
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, <<Bin/binary, 10>>)
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, <<Bin/binary, 10>>)
end,
B2 = begin
TrF2 = id(F2, TrUserData),
e_type_string(TrF2, <<B1/binary, 18>>)
end,
begin
TrF3 = id(F3, TrUserData),
e_mfield_mapentry_val(TrF3, <<B2/binary, 26>>,
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, <<Bin/binary, 10>>,
TrUserData)
end;
{s, OF1} ->
begin
TrOF1 = id(OF1, TrUserData),
e_mfield_mapfield_s(TrOF1, <<Bin/binary, 18>>,
TrUserData)
end;
{m, OF1} ->
begin
TrOF1 = id(OF1, TrUserData),
e_mfield_mapfield_m(TrOF1, <<Bin/binary, 26>>,
TrUserData)
end;
{r, OF1} ->
begin
TrOF1 = id(OF1, TrUserData),
e_mfield_mapfield_r(TrOF1, <<Bin/binary, 34>>,
TrUserData)
end
end.
e_mfield_req_get(Msg, Bin, TrUserData) ->
SubBin = e_msg_opget(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_req_put(Msg, Bin, TrUserData) ->
SubBin = e_msg_opupdate(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_opupdate_k(Msg, Bin, TrUserData) ->
SubBin = e_msg_opget(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_opupdate_e(Msg, Bin, TrUserData) ->
SubBin = e_msg_entry(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_entry_ii(Msg, Bin, TrUserData) ->
SubBin = e_msg_pair(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_entry_iii(Msg, Bin, TrUserData) ->
SubBin = e_msg_triple(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_pair_a(Msg, Bin, TrUserData) ->
SubBin = e_msg_entry(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_pair_b(Msg, Bin, TrUserData) ->
SubBin = e_msg_entry(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_triple_a(Msg, Bin, TrUserData) ->
SubBin = e_msg_entry(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_triple_b(Msg, Bin, TrUserData) ->
SubBin = e_msg_entry(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_triple_c(Msg, Bin, TrUserData) ->
SubBin = e_msg_entry(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_field_valset_elems([Elem | Rest], Bin, TrUserData) ->
Bin2 = <<Bin/binary, 10>>,
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),
<<Bin2/binary, SubBin/binary>>.
e_field_valmap_entries([Elem | Rest], Bin,
TrUserData) ->
Bin2 = <<Bin/binary, 10>>,
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),
<<Bin2/binary, SubBin/binary>>.
e_mfield_mapfield_c(Msg, Bin, TrUserData) ->
SubBin = e_msg_valcounter(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_mapfield_s(Msg, Bin, TrUserData) ->
SubBin = e_msg_valset(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_mapfield_m(Msg, Bin, TrUserData) ->
SubBin = e_msg_valmap(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_mfield_mapfield_r(Msg, Bin, TrUserData) ->
SubBin = e_msg_valreg(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>.
e_type_int64(Value, Bin)
when 0 =< Value, Value =< 127 ->
<<Bin/binary, Value>>;
e_type_int64(Value, Bin) ->
<<N:64/unsigned-native>> = <<Value:64/signed-native>>,
e_varint(N, Bin).
e_type_string(S, Bin) ->
Utf8 = unicode:characters_to_binary(S),
Bin2 = e_varint(byte_size(Utf8), Bin),
<<Bin2/binary, Utf8/binary>>.
e_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;
e_varint(N, Bin) ->
Bin2 = <<Bin/binary, (N band 127 bor 128)>>,
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);
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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bytes:Len/binary, Rest2/binary>> = 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,
<<Bytes:Len/binary, Rest2/binary>> = 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(undefined, 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,
_) ->
#opupdate{k = F1, e = F2, 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, _) ->
#opupdate{k = F1, e = F2, 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = Rest,
NewFValue = id(d_msg_entry(Bs, TrUserData), TrUserData),
dfp_read_field_def_opupdate(Rest2, 0, 0, F1,
if F2 == undefined -> NewFValue;
true ->
merge_msg_entry(F2, NewFValue,
TrUserData)
end,
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,
<<Bytes:Len/binary, Rest2/binary>> = 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) ->
<<NewFValue:64/signed-native>> = <<(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,
<<Bytes:Len/binary, Rest2/binary>> = 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,
<<Bytes:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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_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) ->
<<NewFValue:64/signed-native>> = <<(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,
<<Bytes:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bytes:Len/binary, Rest2/binary>> = 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,
<<Bytes:Len/binary, Rest2/binary>> = 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,
<<Bytes:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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,
<<Bs:Len/binary, Rest2/binary>> = 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),
<<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,
{Group, Rest}.
%% Like skipping over fields, but record the total length,
%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>
%% 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);
#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 ->
merge_msg_entry(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_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);
#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),
v_msg_entry(F2, [e | Path], TrUserData),
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_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 = required, 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, 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, valcounter,
valset, valmap, valreg, mapentry, mapfield].
get_group_names() -> [].
get_msg_or_group_names() ->
[req, opget, opupdate, entry, pair, triple, 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 = required, 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(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].