erlang自定义二进制协议
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

2016 wiersze
68 KiB

  1. %% -*- coding: utf-8 -*-
  2. %% @private
  3. %% Automatically generated, do not edit
  4. %% Generated by gpb_compile version 4.8.0
  5. -module(mytest).
  6. -export([encode_msg/1, encode_msg/2, encode_msg/3]).
  7. -export([decode_msg/2, decode_msg/3]).
  8. -export([merge_msgs/2, merge_msgs/3, merge_msgs/4]).
  9. -export([verify_msg/1, verify_msg/2, verify_msg/3]).
  10. -export([get_msg_defs/0]).
  11. -export([get_msg_names/0]).
  12. -export([get_group_names/0]).
  13. -export([get_msg_or_group_names/0]).
  14. -export([get_enum_names/0]).
  15. -export([find_msg_def/1, fetch_msg_def/1]).
  16. -export([find_enum_def/1, fetch_enum_def/1]).
  17. -export([enum_symbol_by_value/2, enum_value_by_symbol/2]).
  18. -export([get_service_names/0]).
  19. -export([get_service_def/1]).
  20. -export([get_rpc_names/1]).
  21. -export([find_rpc_def/2, fetch_rpc_def/2]).
  22. -export([fqbin_to_service_name/1]).
  23. -export([service_name_to_fqbin/1]).
  24. -export([fqbins_to_service_and_rpc_name/2]).
  25. -export([service_and_rpc_name_to_fqbins/2]).
  26. -export([fqbin_to_msg_name/1]).
  27. -export([msg_name_to_fqbin/1]).
  28. -export([fqbin_to_enum_name/1]).
  29. -export([enum_name_to_fqbin/1]).
  30. -export([get_package_name/0]).
  31. -export([uses_packages/0]).
  32. -export([source_basename/0]).
  33. -export([get_all_source_basenames/0]).
  34. -export([get_all_proto_names/0]).
  35. -export([get_msg_containment/1]).
  36. -export([get_pkg_containment/1]).
  37. -export([get_service_containment/1]).
  38. -export([get_rpc_containment/1]).
  39. -export([get_enum_containment/1]).
  40. -export([get_proto_by_msg_name_as_fqbin/1]).
  41. -export([get_proto_by_service_name_as_fqbin/1]).
  42. -export([get_proto_by_enum_name_as_fqbin/1]).
  43. -export([get_protos_by_pkg_name_as_fqbin/1]).
  44. -export([gpb_version_as_string/0, gpb_version_as_list/0]).
  45. -include("mytest.hrl").
  46. -include("gpb.hrl").
  47. %% enumerated types
  48. -export_type([]).
  49. %% message types
  50. -type test() :: #test{}.
  51. -type phoneNumber() :: #phoneNumber{}.
  52. -type person() :: #person{}.
  53. -type addressBook() :: #addressBook{}.
  54. -type tint32() :: #tint32{}.
  55. -export_type(['test'/0, 'phoneNumber'/0, 'person'/0, 'addressBook'/0, 'tint32'/0]).
  56. -compile(export_all).
  57. encode_int32(N) ->
  58. TT = #tint32{int1 = 1, int2 = -1, int3 = 128, int4 = -128, int5 = 65536,
  59. int6 = -65536, int7 = 2100000000, int8 = -2100000000, int9 = 678665, int10 = -678665},
  60. tt1(N, TT).
  61. tt1(0, TT) ->
  62. ok;
  63. tt1(N, TT) ->
  64. encode_msg(TT),
  65. tt1(N - 1, TT).
  66. decode_int32(N) ->
  67. TT = #tint32{int1 = 1, int2 = -1, int3 = 128, int4 = -128, int5 = 65536,
  68. int6 = -65536, int7 = 2100000000, int8 = -2100000000, int9 = 678665, int10 = -678665},
  69. Bin = encode_msg(TT),
  70. tt2(N, Bin).
  71. tt2(0, Bin) ->
  72. Bin;
  73. tt2(N, Bin) ->
  74. decode_msg(Bin, tint32),
  75. tt2(N - 1, Bin).
  76. encode_addressBook(N) ->
  77. Add = #addressBook{
  78. person1 = [
  79. #person{
  80. name = "Alice",
  81. integer = 10000,
  82. phone = [
  83. #phoneNumber{number = #test{aa = "123456789"}, type = 1},
  84. #phoneNumber{number = #test{aa = "87654321"}, type = 2}
  85. ]
  86. },
  87. #person{
  88. name = "Bob",
  89. integer = 20000,
  90. phone = [
  91. #phoneNumber{number = #test{aa = "01234567890"}, type = 3}
  92. ]
  93. }
  94. ]
  95. },
  96. tt3(N, Add).
  97. tt3(0, Add) ->
  98. ok;
  99. tt3(N, Add) ->
  100. encode_msg(Add),
  101. tt3(N - 1, Add).
  102. decode_addressBook(N) ->
  103. AddressBook = #addressBook{
  104. person1 = [
  105. #person{
  106. name = "Alice",
  107. integer = 10000,
  108. phone = [
  109. #phoneNumber{number = #test{aa = "123456789"}, type = 1},
  110. #phoneNumber{number = #test{aa = "87654321"}, type = 2}
  111. ]
  112. },
  113. #person{
  114. name = "Bob",
  115. integer = 20000,
  116. phone = [
  117. #phoneNumber{number = #test{aa = "01234567890"}, type = 3}
  118. ]
  119. }
  120. ]
  121. },
  122. Bin = encode_msg(AddressBook),
  123. tt4(N, Bin).
  124. tt4(0, Bin) ->
  125. Bin;
  126. tt4(N, Bin) ->
  127. decode_msg(Bin, addressBook),
  128. tt4(N - 1, Bin).
  129. -spec encode_msg(#test{} | #phoneNumber{} | #person{} | #addressBook{} | #tint32{}) -> binary().
  130. encode_msg(Msg) when tuple_size(Msg) >= 1 ->
  131. encode_msg(Msg, element(1, Msg), []).
  132. -spec encode_msg(#test{} | #phoneNumber{} | #person{} | #addressBook{} | #tint32{}, atom() | list()) -> binary().
  133. encode_msg(Msg, MsgName) when is_atom(MsgName) ->
  134. encode_msg(Msg, MsgName, []);
  135. encode_msg(Msg, Opts)
  136. when tuple_size(Msg) >= 1, is_list(Opts) ->
  137. encode_msg(Msg, element(1, Msg), Opts).
  138. -spec encode_msg(#test{} | #phoneNumber{} | #person{} | #addressBook{} | #tint32{}, atom(), list()) -> binary().
  139. encode_msg(Msg, MsgName, Opts) ->
  140. case proplists:get_bool(verify, Opts) of
  141. true -> verify_msg(Msg, MsgName, Opts);
  142. false -> ok
  143. end,
  144. TrUserData = proplists:get_value(user_data, Opts),
  145. case MsgName of
  146. test ->
  147. encode_msg_test(id(Msg, TrUserData), TrUserData);
  148. phoneNumber ->
  149. encode_msg_phoneNumber(id(Msg, TrUserData), TrUserData);
  150. person ->
  151. encode_msg_person(id(Msg, TrUserData), TrUserData);
  152. addressBook ->
  153. encode_msg_addressBook(id(Msg, TrUserData), TrUserData);
  154. tint32 ->
  155. encode_msg_tint32(id(Msg, TrUserData), TrUserData)
  156. end.
  157. encode_msg_test(Msg, TrUserData) ->
  158. encode_msg_test(Msg, <<>>, TrUserData).
  159. encode_msg_test(#test{aa = F1}, Bin, TrUserData) ->
  160. begin
  161. TrF1 = id(F1, TrUserData),
  162. e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)
  163. end.
  164. encode_msg_phoneNumber(Msg, TrUserData) ->
  165. encode_msg_phoneNumber(Msg, <<>>, TrUserData).
  166. encode_msg_phoneNumber(#phoneNumber{number = F1,
  167. type = F2},
  168. Bin, TrUserData) ->
  169. B1 = begin
  170. TrF1 = id(F1, TrUserData),
  171. e_mfield_phoneNumber_number(TrF1, <<Bin/binary, 10>>,
  172. TrUserData)
  173. end,
  174. begin
  175. TrF2 = id(F2, TrUserData),
  176. e_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)
  177. end.
  178. encode_msg_person(Msg, TrUserData) ->
  179. encode_msg_person(Msg, <<>>, TrUserData).
  180. encode_msg_person(#person{name = F1, integer = F2,
  181. email = F3, phone = F4},
  182. Bin, TrUserData) ->
  183. B1 = begin
  184. TrF1 = id(F1, TrUserData),
  185. e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)
  186. end,
  187. B2 = begin
  188. TrF2 = id(F2, TrUserData),
  189. e_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)
  190. end,
  191. B3 = if F3 == undefined -> B2;
  192. true ->
  193. begin
  194. TrF3 = id(F3, TrUserData),
  195. e_type_string(TrF3, <<B2/binary, 26>>, TrUserData)
  196. end
  197. end,
  198. begin
  199. TrF4 = id(F4, TrUserData),
  200. if TrF4 == [] -> B3;
  201. true -> e_field_person_phone(TrF4, B3, TrUserData)
  202. end
  203. end.
  204. encode_msg_addressBook(Msg, TrUserData) ->
  205. encode_msg_addressBook(Msg, <<>>, TrUserData).
  206. encode_msg_addressBook(#addressBook{person1 = F1,
  207. others = F2},
  208. Bin, TrUserData) ->
  209. B1 = begin
  210. TrF1 = id(F1, TrUserData),
  211. if TrF1 == [] -> Bin;
  212. true ->
  213. e_field_addressBook_person1(TrF1, Bin, TrUserData)
  214. end
  215. end,
  216. begin
  217. TrF2 = id(F2, TrUserData),
  218. if TrF2 == [] -> B1;
  219. true -> e_field_addressBook_others(TrF2, B1, TrUserData)
  220. end
  221. end.
  222. encode_msg_tint32(Msg, TrUserData) ->
  223. encode_msg_tint32(Msg, <<>>, TrUserData).
  224. encode_msg_tint32(#tint32{int1 = F1, int2 = F2,
  225. int3 = F3, int4 = F4, int5 = F5, int6 = F6, int7 = F7,
  226. int8 = F8, int9 = F9, int10 = F10},
  227. Bin, TrUserData) ->
  228. B1 = begin
  229. TrF1 = id(F1, TrUserData),
  230. e_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)
  231. end,
  232. B2 = begin
  233. TrF2 = id(F2, TrUserData),
  234. e_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)
  235. end,
  236. B3 = begin
  237. TrF3 = id(F3, TrUserData),
  238. e_type_int32(TrF3, <<B2/binary, 24>>, TrUserData)
  239. end,
  240. B4 = begin
  241. TrF4 = id(F4, TrUserData),
  242. e_type_int32(TrF4, <<B3/binary, 32>>, TrUserData)
  243. end,
  244. B5 = begin
  245. TrF5 = id(F5, TrUserData),
  246. e_type_int32(TrF5, <<B4/binary, 40>>, TrUserData)
  247. end,
  248. B6 = begin
  249. TrF6 = id(F6, TrUserData),
  250. e_type_int32(TrF6, <<B5/binary, 48>>, TrUserData)
  251. end,
  252. B7 = begin
  253. TrF7 = id(F7, TrUserData),
  254. e_type_int32(TrF7, <<B6/binary, 56>>, TrUserData)
  255. end,
  256. B8 = begin
  257. TrF8 = id(F8, TrUserData),
  258. e_type_int32(TrF8, <<B7/binary, 64>>, TrUserData)
  259. end,
  260. B9 = begin
  261. TrF9 = id(F9, TrUserData),
  262. e_type_int32(TrF9, <<B8/binary, 72>>, TrUserData)
  263. end,
  264. begin
  265. TrF10 = id(F10, TrUserData),
  266. e_type_int32(TrF10, <<B9/binary, 80>>, TrUserData)
  267. end.
  268. e_mfield_phoneNumber_number(Msg, Bin, TrUserData) ->
  269. SubBin = encode_msg_test(Msg, <<>>, TrUserData),
  270. Bin2 = e_varint(byte_size(SubBin), Bin),
  271. <<Bin2/binary, SubBin/binary>>.
  272. e_mfield_person_phone(Msg, Bin, TrUserData) ->
  273. SubBin = encode_msg_phoneNumber(Msg, <<>>, TrUserData),
  274. Bin2 = e_varint(byte_size(SubBin), Bin),
  275. <<Bin2/binary, SubBin/binary>>.
  276. e_field_person_phone([Elem | Rest], Bin, TrUserData) ->
  277. Bin2 = <<Bin/binary, 34>>,
  278. Bin3 = e_mfield_person_phone(id(Elem, TrUserData), Bin2,
  279. TrUserData),
  280. e_field_person_phone(Rest, Bin3, TrUserData);
  281. e_field_person_phone([], Bin, _TrUserData) -> Bin.
  282. e_mfield_addressBook_person1(Msg, Bin, TrUserData) ->
  283. SubBin = encode_msg_person(Msg, <<>>, TrUserData),
  284. Bin2 = e_varint(byte_size(SubBin), Bin),
  285. <<Bin2/binary, SubBin/binary>>.
  286. e_field_addressBook_person1([Elem | Rest], Bin,
  287. TrUserData) ->
  288. Bin2 = <<Bin/binary, 10>>,
  289. Bin3 = e_mfield_addressBook_person1(id(Elem,
  290. TrUserData),
  291. Bin2, TrUserData),
  292. e_field_addressBook_person1(Rest, Bin3, TrUserData);
  293. e_field_addressBook_person1([], Bin, _TrUserData) ->
  294. Bin.
  295. e_mfield_addressBook_others(Msg, Bin, TrUserData) ->
  296. SubBin = encode_msg_person(Msg, <<>>, TrUserData),
  297. Bin2 = e_varint(byte_size(SubBin), Bin),
  298. <<Bin2/binary, SubBin/binary>>.
  299. e_field_addressBook_others([Elem | Rest], Bin,
  300. TrUserData) ->
  301. Bin2 = <<Bin/binary, 18>>,
  302. Bin3 = e_mfield_addressBook_others(id(Elem, TrUserData),
  303. Bin2, TrUserData),
  304. e_field_addressBook_others(Rest, Bin3, TrUserData);
  305. e_field_addressBook_others([], Bin, _TrUserData) -> Bin.
  306. -compile({nowarn_unused_function,e_type_sint/3}).
  307. e_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->
  308. e_varint(Value * 2, Bin);
  309. e_type_sint(Value, Bin, _TrUserData) ->
  310. e_varint(Value * -2 - 1, Bin).
  311. -compile({nowarn_unused_function,e_type_int32/3}).
  312. e_type_int32(Value, Bin, _TrUserData)
  313. when 0 =< Value, Value =< 127 ->
  314. <<Bin/binary, Value>>;
  315. e_type_int32(Value, Bin, _TrUserData) ->
  316. <<N:64/unsigned-native>> = <<Value:64/signed-native>>,
  317. e_varint(N, Bin).
  318. -compile({nowarn_unused_function,e_type_int64/3}).
  319. e_type_int64(Value, Bin, _TrUserData)
  320. when 0 =< Value, Value =< 127 ->
  321. <<Bin/binary, Value>>;
  322. e_type_int64(Value, Bin, _TrUserData) ->
  323. <<N:64/unsigned-native>> = <<Value:64/signed-native>>,
  324. e_varint(N, Bin).
  325. -compile({nowarn_unused_function,e_type_bool/3}).
  326. e_type_bool(true, Bin, _TrUserData) ->
  327. <<Bin/binary, 1>>;
  328. e_type_bool(false, Bin, _TrUserData) ->
  329. <<Bin/binary, 0>>;
  330. e_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;
  331. e_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.
  332. -compile({nowarn_unused_function,e_type_string/3}).
  333. e_type_string(S, Bin, _TrUserData) ->
  334. Utf8 = unicode:characters_to_binary(S),
  335. Bin2 = e_varint(byte_size(Utf8), Bin),
  336. <<Bin2/binary, Utf8/binary>>.
  337. -compile({nowarn_unused_function,e_type_bytes/3}).
  338. e_type_bytes(Bytes, Bin, _TrUserData)
  339. when is_binary(Bytes) ->
  340. Bin2 = e_varint(byte_size(Bytes), Bin),
  341. <<Bin2/binary, Bytes/binary>>;
  342. e_type_bytes(Bytes, Bin, _TrUserData)
  343. when is_list(Bytes) ->
  344. BytesBin = iolist_to_binary(Bytes),
  345. Bin2 = e_varint(byte_size(BytesBin), Bin),
  346. <<Bin2/binary, BytesBin/binary>>.
  347. -compile({nowarn_unused_function,e_type_fixed32/3}).
  348. e_type_fixed32(Value, Bin, _TrUserData) ->
  349. <<Bin/binary, Value:32/little>>.
  350. -compile({nowarn_unused_function,e_type_sfixed32/3}).
  351. e_type_sfixed32(Value, Bin, _TrUserData) ->
  352. <<Bin/binary, Value:32/little-signed>>.
  353. -compile({nowarn_unused_function,e_type_fixed64/3}).
  354. e_type_fixed64(Value, Bin, _TrUserData) ->
  355. <<Bin/binary, Value:64/little>>.
  356. -compile({nowarn_unused_function,e_type_sfixed64/3}).
  357. e_type_sfixed64(Value, Bin, _TrUserData) ->
  358. <<Bin/binary, Value:64/little-signed>>.
  359. -compile({nowarn_unused_function,e_type_float/3}).
  360. e_type_float(V, Bin, _) when is_number(V) ->
  361. <<Bin/binary, V:32/little-float>>;
  362. e_type_float(infinity, Bin, _) ->
  363. <<Bin/binary, 0:16, 128, 127>>;
  364. e_type_float('-infinity', Bin, _) ->
  365. <<Bin/binary, 0:16, 128, 255>>;
  366. e_type_float(nan, Bin, _) ->
  367. <<Bin/binary, 0:16, 192, 127>>.
  368. -compile({nowarn_unused_function,e_type_double/3}).
  369. e_type_double(V, Bin, _) when is_number(V) ->
  370. <<Bin/binary, V:64/little-float>>;
  371. e_type_double(infinity, Bin, _) ->
  372. <<Bin/binary, 0:48, 240, 127>>;
  373. e_type_double('-infinity', Bin, _) ->
  374. <<Bin/binary, 0:48, 240, 255>>;
  375. e_type_double(nan, Bin, _) ->
  376. <<Bin/binary, 0:48, 248, 127>>.
  377. -compile({nowarn_unused_function,e_varint/3}).
  378. e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).
  379. -compile({nowarn_unused_function,e_varint/2}).
  380. e_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;
  381. e_varint(N, Bin) ->
  382. Bin2 = <<Bin/binary, (N band 127 bor 128)>>,
  383. e_varint(N bsr 7, Bin2).
  384. decode_msg(Bin, MsgName) when is_binary(Bin) ->
  385. decode_msg(Bin, MsgName, []).
  386. decode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->
  387. TrUserData = proplists:get_value(user_data, Opts),
  388. decode_msg_1_catch(Bin, MsgName, TrUserData).
  389. -ifdef('OTP_RELEASE').
  390. decode_msg_1_catch(Bin, MsgName, TrUserData) ->
  391. try decode_msg_2_doit(MsgName, Bin, TrUserData)
  392. catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})
  393. end.
  394. -else.
  395. decode_msg_1_catch(Bin, MsgName, TrUserData) ->
  396. try decode_msg_2_doit(MsgName, Bin, TrUserData)
  397. catch Class:Reason ->
  398. StackTrace = erlang:get_stacktrace(),
  399. error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})
  400. end.
  401. -endif.
  402. decode_msg_2_doit(test, Bin, TrUserData) ->
  403. id(decode_msg_test(Bin, TrUserData), TrUserData);
  404. decode_msg_2_doit(phoneNumber, Bin, TrUserData) ->
  405. id(decode_msg_phoneNumber(Bin, TrUserData), TrUserData);
  406. decode_msg_2_doit(person, Bin, TrUserData) ->
  407. id(decode_msg_person(Bin, TrUserData), TrUserData);
  408. decode_msg_2_doit(addressBook, Bin, TrUserData) ->
  409. id(decode_msg_addressBook(Bin, TrUserData), TrUserData);
  410. decode_msg_2_doit(tint32, Bin, TrUserData) ->
  411. id(decode_msg_tint32(Bin, TrUserData), TrUserData).
  412. decode_msg_test(Bin, TrUserData) ->
  413. dfp_read_field_def_test(Bin, 0, 0,
  414. id(undefined, TrUserData), TrUserData).
  415. dfp_read_field_def_test(<<10, Rest/binary>>, Z1, Z2,
  416. F@_1, TrUserData) ->
  417. d_field_test_aa(Rest, Z1, Z2, F@_1, TrUserData);
  418. dfp_read_field_def_test(<<>>, 0, 0, F@_1, _) ->
  419. #test{aa = F@_1};
  420. dfp_read_field_def_test(Other, Z1, Z2, F@_1,
  421. TrUserData) ->
  422. dg_read_field_def_test(Other, Z1, Z2, F@_1, TrUserData).
  423. dg_read_field_def_test(<<1:1, X:7, Rest/binary>>, N,
  424. Acc, F@_1, TrUserData)
  425. when N < 32 - 7 ->
  426. dg_read_field_def_test(Rest, N + 7, X bsl N + Acc, F@_1,
  427. TrUserData);
  428. dg_read_field_def_test(<<0:1, X:7, Rest/binary>>, N,
  429. Acc, F@_1, TrUserData) ->
  430. Key = X bsl N + Acc,
  431. case Key of
  432. 10 -> d_field_test_aa(Rest, 0, 0, F@_1, TrUserData);
  433. _ ->
  434. case Key band 7 of
  435. 0 -> skip_varint_test(Rest, 0, 0, F@_1, TrUserData);
  436. 1 -> skip_64_test(Rest, 0, 0, F@_1, TrUserData);
  437. 2 ->
  438. skip_length_delimited_test(Rest, 0, 0, F@_1,
  439. TrUserData);
  440. 3 ->
  441. skip_group_test(Rest, Key bsr 3, 0, F@_1, TrUserData);
  442. 5 -> skip_32_test(Rest, 0, 0, F@_1, TrUserData)
  443. end
  444. end;
  445. dg_read_field_def_test(<<>>, 0, 0, F@_1, _) ->
  446. #test{aa = F@_1}.
  447. d_field_test_aa(<<1:1, X:7, Rest/binary>>, N, Acc, F@_1,
  448. TrUserData)
  449. when N < 57 ->
  450. d_field_test_aa(Rest, N + 7, X bsl N + Acc, F@_1,
  451. TrUserData);
  452. d_field_test_aa(<<0:1, X:7, Rest/binary>>, N, Acc, _,
  453. TrUserData) ->
  454. {NewFValue, RestF} = begin
  455. Len = X bsl N + Acc,
  456. <<Utf8:Len/binary, Rest2/binary>> = Rest,
  457. {id(unicode:characters_to_list(Utf8, unicode),
  458. TrUserData),
  459. Rest2}
  460. end,
  461. dfp_read_field_def_test(RestF, 0, 0, NewFValue,
  462. TrUserData).
  463. skip_varint_test(<<1:1, _:7, Rest/binary>>, Z1, Z2,
  464. F@_1, TrUserData) ->
  465. skip_varint_test(Rest, Z1, Z2, F@_1, TrUserData);
  466. skip_varint_test(<<0:1, _:7, Rest/binary>>, Z1, Z2,
  467. F@_1, TrUserData) ->
  468. dfp_read_field_def_test(Rest, Z1, Z2, F@_1, TrUserData).
  469. skip_length_delimited_test(<<1:1, X:7, Rest/binary>>, N,
  470. Acc, F@_1, TrUserData)
  471. when N < 57 ->
  472. skip_length_delimited_test(Rest, N + 7, X bsl N + Acc,
  473. F@_1, TrUserData);
  474. skip_length_delimited_test(<<0:1, X:7, Rest/binary>>, N,
  475. Acc, F@_1, TrUserData) ->
  476. Length = X bsl N + Acc,
  477. <<_:Length/binary, Rest2/binary>> = Rest,
  478. dfp_read_field_def_test(Rest2, 0, 0, F@_1, TrUserData).
  479. skip_group_test(Bin, FNum, Z2, F@_1, TrUserData) ->
  480. {_, Rest} = read_group(Bin, FNum),
  481. dfp_read_field_def_test(Rest, 0, Z2, F@_1, TrUserData).
  482. skip_32_test(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
  483. TrUserData) ->
  484. dfp_read_field_def_test(Rest, Z1, Z2, F@_1, TrUserData).
  485. skip_64_test(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
  486. TrUserData) ->
  487. dfp_read_field_def_test(Rest, Z1, Z2, F@_1, TrUserData).
  488. decode_msg_phoneNumber(Bin, TrUserData) ->
  489. dfp_read_field_def_phoneNumber(Bin, 0, 0,
  490. id(undefined, TrUserData),
  491. id(undefined, TrUserData), TrUserData).
  492. dfp_read_field_def_phoneNumber(<<10, Rest/binary>>, Z1,
  493. Z2, F@_1, F@_2, TrUserData) ->
  494. d_field_phoneNumber_number(Rest, Z1, Z2, F@_1, F@_2,
  495. TrUserData);
  496. dfp_read_field_def_phoneNumber(<<16, Rest/binary>>, Z1,
  497. Z2, F@_1, F@_2, TrUserData) ->
  498. d_field_phoneNumber_type(Rest, Z1, Z2, F@_1, F@_2,
  499. TrUserData);
  500. dfp_read_field_def_phoneNumber(<<>>, 0, 0, F@_1, F@_2,
  501. _) ->
  502. #phoneNumber{number = F@_1, type = F@_2};
  503. dfp_read_field_def_phoneNumber(Other, Z1, Z2, F@_1,
  504. F@_2, TrUserData) ->
  505. dg_read_field_def_phoneNumber(Other, Z1, Z2, F@_1, F@_2,
  506. TrUserData).
  507. dg_read_field_def_phoneNumber(<<1:1, X:7, Rest/binary>>,
  508. N, Acc, F@_1, F@_2, TrUserData)
  509. when N < 32 - 7 ->
  510. dg_read_field_def_phoneNumber(Rest, N + 7,
  511. X bsl N + Acc, F@_1, F@_2, TrUserData);
  512. dg_read_field_def_phoneNumber(<<0:1, X:7, Rest/binary>>,
  513. N, Acc, F@_1, F@_2, TrUserData) ->
  514. Key = X bsl N + Acc,
  515. case Key of
  516. 10 ->
  517. d_field_phoneNumber_number(Rest, 0, 0, F@_1, F@_2,
  518. TrUserData);
  519. 16 ->
  520. d_field_phoneNumber_type(Rest, 0, 0, F@_1, F@_2,
  521. TrUserData);
  522. _ ->
  523. case Key band 7 of
  524. 0 ->
  525. skip_varint_phoneNumber(Rest, 0, 0, F@_1, F@_2,
  526. TrUserData);
  527. 1 ->
  528. skip_64_phoneNumber(Rest, 0, 0, F@_1, F@_2, TrUserData);
  529. 2 ->
  530. skip_length_delimited_phoneNumber(Rest, 0, 0, F@_1,
  531. F@_2, TrUserData);
  532. 3 ->
  533. skip_group_phoneNumber(Rest, Key bsr 3, 0, F@_1, F@_2,
  534. TrUserData);
  535. 5 ->
  536. skip_32_phoneNumber(Rest, 0, 0, F@_1, F@_2, TrUserData)
  537. end
  538. end;
  539. dg_read_field_def_phoneNumber(<<>>, 0, 0, F@_1, F@_2,
  540. _) ->
  541. #phoneNumber{number = F@_1, type = F@_2}.
  542. d_field_phoneNumber_number(<<1:1, X:7, Rest/binary>>, N,
  543. Acc, F@_1, F@_2, TrUserData)
  544. when N < 57 ->
  545. d_field_phoneNumber_number(Rest, N + 7, X bsl N + Acc,
  546. F@_1, F@_2, TrUserData);
  547. d_field_phoneNumber_number(<<0:1, X:7, Rest/binary>>, N,
  548. Acc, Prev, F@_2, TrUserData) ->
  549. {NewFValue, RestF} = begin
  550. Len = X bsl N + Acc,
  551. <<Bs:Len/binary, Rest2/binary>> = Rest,
  552. {id(decode_msg_test(Bs, TrUserData), TrUserData),
  553. Rest2}
  554. end,
  555. dfp_read_field_def_phoneNumber(RestF, 0, 0,
  556. if Prev == undefined -> NewFValue;
  557. true ->
  558. merge_msg_test(Prev, NewFValue,
  559. TrUserData)
  560. end,
  561. F@_2, TrUserData).
  562. d_field_phoneNumber_type(<<1:1, X:7, Rest/binary>>, N,
  563. Acc, F@_1, F@_2, TrUserData)
  564. when N < 57 ->
  565. d_field_phoneNumber_type(Rest, N + 7, X bsl N + Acc,
  566. F@_1, F@_2, TrUserData);
  567. d_field_phoneNumber_type(<<0:1, X:7, Rest/binary>>, N,
  568. Acc, F@_1, _, TrUserData) ->
  569. {NewFValue, RestF} = {begin
  570. <<Res:32/signed-native>> = <<(X bsl N +
  571. Acc):32/unsigned-native>>,
  572. id(Res, TrUserData)
  573. end,
  574. Rest},
  575. dfp_read_field_def_phoneNumber(RestF, 0, 0, F@_1,
  576. NewFValue, TrUserData).
  577. skip_varint_phoneNumber(<<1:1, _:7, Rest/binary>>, Z1,
  578. Z2, F@_1, F@_2, TrUserData) ->
  579. skip_varint_phoneNumber(Rest, Z1, Z2, F@_1, F@_2,
  580. TrUserData);
  581. skip_varint_phoneNumber(<<0:1, _:7, Rest/binary>>, Z1,
  582. Z2, F@_1, F@_2, TrUserData) ->
  583. dfp_read_field_def_phoneNumber(Rest, Z1, Z2, F@_1, F@_2,
  584. TrUserData).
  585. skip_length_delimited_phoneNumber(<<1:1, X:7,
  586. Rest/binary>>,
  587. N, Acc, F@_1, F@_2, TrUserData)
  588. when N < 57 ->
  589. skip_length_delimited_phoneNumber(Rest, N + 7,
  590. X bsl N + Acc, F@_1, F@_2, TrUserData);
  591. skip_length_delimited_phoneNumber(<<0:1, X:7,
  592. Rest/binary>>,
  593. N, Acc, F@_1, F@_2, TrUserData) ->
  594. Length = X bsl N + Acc,
  595. <<_:Length/binary, Rest2/binary>> = Rest,
  596. dfp_read_field_def_phoneNumber(Rest2, 0, 0, F@_1, F@_2,
  597. TrUserData).
  598. skip_group_phoneNumber(Bin, FNum, Z2, F@_1, F@_2,
  599. TrUserData) ->
  600. {_, Rest} = read_group(Bin, FNum),
  601. dfp_read_field_def_phoneNumber(Rest, 0, Z2, F@_1, F@_2,
  602. TrUserData).
  603. skip_32_phoneNumber(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
  604. F@_2, TrUserData) ->
  605. dfp_read_field_def_phoneNumber(Rest, Z1, Z2, F@_1, F@_2,
  606. TrUserData).
  607. skip_64_phoneNumber(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
  608. F@_2, TrUserData) ->
  609. dfp_read_field_def_phoneNumber(Rest, Z1, Z2, F@_1, F@_2,
  610. TrUserData).
  611. decode_msg_person(Bin, TrUserData) ->
  612. dfp_read_field_def_person(Bin, 0, 0,
  613. id(undefined, TrUserData),
  614. id(undefined, TrUserData),
  615. id(undefined, TrUserData), id([], TrUserData),
  616. TrUserData).
  617. dfp_read_field_def_person(<<10, Rest/binary>>, Z1, Z2,
  618. F@_1, F@_2, F@_3, F@_4, TrUserData) ->
  619. d_field_person_name(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  620. F@_4, TrUserData);
  621. dfp_read_field_def_person(<<16, Rest/binary>>, Z1, Z2,
  622. F@_1, F@_2, F@_3, F@_4, TrUserData) ->
  623. d_field_person_integer(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  624. F@_4, TrUserData);
  625. dfp_read_field_def_person(<<26, Rest/binary>>, Z1, Z2,
  626. F@_1, F@_2, F@_3, F@_4, TrUserData) ->
  627. d_field_person_email(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  628. F@_4, TrUserData);
  629. dfp_read_field_def_person(<<34, Rest/binary>>, Z1, Z2,
  630. F@_1, F@_2, F@_3, F@_4, TrUserData) ->
  631. d_field_person_phone(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  632. F@_4, TrUserData);
  633. dfp_read_field_def_person(<<>>, 0, 0, F@_1, F@_2, F@_3,
  634. R1, TrUserData) ->
  635. #person{name = F@_1, integer = F@_2, email = F@_3,
  636. phone = lists_reverse(R1, TrUserData)};
  637. dfp_read_field_def_person(Other, Z1, Z2, F@_1, F@_2,
  638. F@_3, F@_4, TrUserData) ->
  639. dg_read_field_def_person(Other, Z1, Z2, F@_1, F@_2,
  640. F@_3, F@_4, TrUserData).
  641. dg_read_field_def_person(<<1:1, X:7, Rest/binary>>, N,
  642. Acc, F@_1, F@_2, F@_3, F@_4, TrUserData)
  643. when N < 32 - 7 ->
  644. dg_read_field_def_person(Rest, N + 7, X bsl N + Acc,
  645. F@_1, F@_2, F@_3, F@_4, TrUserData);
  646. dg_read_field_def_person(<<0:1, X:7, Rest/binary>>, N,
  647. Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) ->
  648. Key = X bsl N + Acc,
  649. case Key of
  650. 10 ->
  651. d_field_person_name(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  652. TrUserData);
  653. 16 ->
  654. d_field_person_integer(Rest, 0, 0, F@_1, F@_2, F@_3,
  655. F@_4, TrUserData);
  656. 26 ->
  657. d_field_person_email(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  658. TrUserData);
  659. 34 ->
  660. d_field_person_phone(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  661. TrUserData);
  662. _ ->
  663. case Key band 7 of
  664. 0 ->
  665. skip_varint_person(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  666. TrUserData);
  667. 1 ->
  668. skip_64_person(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  669. TrUserData);
  670. 2 ->
  671. skip_length_delimited_person(Rest, 0, 0, F@_1, F@_2,
  672. F@_3, F@_4, TrUserData);
  673. 3 ->
  674. skip_group_person(Rest, Key bsr 3, 0, F@_1, F@_2, F@_3,
  675. F@_4, TrUserData);
  676. 5 ->
  677. skip_32_person(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  678. TrUserData)
  679. end
  680. end;
  681. dg_read_field_def_person(<<>>, 0, 0, F@_1, F@_2, F@_3,
  682. R1, TrUserData) ->
  683. #person{name = F@_1, integer = F@_2, email = F@_3,
  684. phone = lists_reverse(R1, TrUserData)}.
  685. d_field_person_name(<<1:1, X:7, Rest/binary>>, N, Acc,
  686. F@_1, F@_2, F@_3, F@_4, TrUserData)
  687. when N < 57 ->
  688. d_field_person_name(Rest, N + 7, X bsl N + Acc, F@_1,
  689. F@_2, F@_3, F@_4, TrUserData);
  690. d_field_person_name(<<0:1, X:7, Rest/binary>>, N, Acc,
  691. _, F@_2, F@_3, F@_4, TrUserData) ->
  692. {NewFValue, RestF} = begin
  693. Len = X bsl N + Acc,
  694. <<Utf8:Len/binary, Rest2/binary>> = Rest,
  695. {id(unicode:characters_to_list(Utf8, unicode),
  696. TrUserData),
  697. Rest2}
  698. end,
  699. dfp_read_field_def_person(RestF, 0, 0, NewFValue, F@_2,
  700. F@_3, F@_4, TrUserData).
  701. d_field_person_integer(<<1:1, X:7, Rest/binary>>, N,
  702. Acc, F@_1, F@_2, F@_3, F@_4, TrUserData)
  703. when N < 57 ->
  704. d_field_person_integer(Rest, N + 7, X bsl N + Acc, F@_1,
  705. F@_2, F@_3, F@_4, TrUserData);
  706. d_field_person_integer(<<0:1, X:7, Rest/binary>>, N,
  707. Acc, F@_1, _, F@_3, F@_4, TrUserData) ->
  708. {NewFValue, RestF} = {begin
  709. <<Res:32/signed-native>> = <<(X bsl N +
  710. Acc):32/unsigned-native>>,
  711. id(Res, TrUserData)
  712. end,
  713. Rest},
  714. dfp_read_field_def_person(RestF, 0, 0, F@_1, NewFValue,
  715. F@_3, F@_4, TrUserData).
  716. d_field_person_email(<<1:1, X:7, Rest/binary>>, N, Acc,
  717. F@_1, F@_2, F@_3, F@_4, TrUserData)
  718. when N < 57 ->
  719. d_field_person_email(Rest, N + 7, X bsl N + Acc, F@_1,
  720. F@_2, F@_3, F@_4, TrUserData);
  721. d_field_person_email(<<0:1, X:7, Rest/binary>>, N, Acc,
  722. F@_1, F@_2, _, F@_4, TrUserData) ->
  723. {NewFValue, RestF} = begin
  724. Len = X bsl N + Acc,
  725. <<Utf8:Len/binary, Rest2/binary>> = Rest,
  726. {id(unicode:characters_to_list(Utf8, unicode),
  727. TrUserData),
  728. Rest2}
  729. end,
  730. dfp_read_field_def_person(RestF, 0, 0, F@_1, F@_2,
  731. NewFValue, F@_4, TrUserData).
  732. d_field_person_phone(<<1:1, X:7, Rest/binary>>, N, Acc,
  733. F@_1, F@_2, F@_3, F@_4, TrUserData)
  734. when N < 57 ->
  735. d_field_person_phone(Rest, N + 7, X bsl N + Acc, F@_1,
  736. F@_2, F@_3, F@_4, TrUserData);
  737. d_field_person_phone(<<0:1, X:7, Rest/binary>>, N, Acc,
  738. F@_1, F@_2, F@_3, Prev, TrUserData) ->
  739. {NewFValue, RestF} = begin
  740. Len = X bsl N + Acc,
  741. <<Bs:Len/binary, Rest2/binary>> = Rest,
  742. {id(decode_msg_phoneNumber(Bs, TrUserData),
  743. TrUserData),
  744. Rest2}
  745. end,
  746. dfp_read_field_def_person(RestF, 0, 0, F@_1, F@_2, F@_3,
  747. cons(NewFValue, Prev, TrUserData), TrUserData).
  748. skip_varint_person(<<1:1, _:7, Rest/binary>>, Z1, Z2,
  749. F@_1, F@_2, F@_3, F@_4, TrUserData) ->
  750. skip_varint_person(Rest, Z1, Z2, F@_1, F@_2, F@_3, F@_4,
  751. TrUserData);
  752. skip_varint_person(<<0:1, _:7, Rest/binary>>, Z1, Z2,
  753. F@_1, F@_2, F@_3, F@_4, TrUserData) ->
  754. dfp_read_field_def_person(Rest, Z1, Z2, F@_1, F@_2,
  755. F@_3, F@_4, TrUserData).
  756. skip_length_delimited_person(<<1:1, X:7, Rest/binary>>,
  757. N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData)
  758. when N < 57 ->
  759. skip_length_delimited_person(Rest, N + 7, X bsl N + Acc,
  760. F@_1, F@_2, F@_3, F@_4, TrUserData);
  761. skip_length_delimited_person(<<0:1, X:7, Rest/binary>>,
  762. N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) ->
  763. Length = X bsl N + Acc,
  764. <<_:Length/binary, Rest2/binary>> = Rest,
  765. dfp_read_field_def_person(Rest2, 0, 0, F@_1, F@_2, F@_3,
  766. F@_4, TrUserData).
  767. skip_group_person(Bin, FNum, Z2, F@_1, F@_2, F@_3, F@_4,
  768. TrUserData) ->
  769. {_, Rest} = read_group(Bin, FNum),
  770. dfp_read_field_def_person(Rest, 0, Z2, F@_1, F@_2, F@_3,
  771. F@_4, TrUserData).
  772. skip_32_person(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
  773. F@_2, F@_3, F@_4, TrUserData) ->
  774. dfp_read_field_def_person(Rest, Z1, Z2, F@_1, F@_2,
  775. F@_3, F@_4, TrUserData).
  776. skip_64_person(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
  777. F@_2, F@_3, F@_4, TrUserData) ->
  778. dfp_read_field_def_person(Rest, Z1, Z2, F@_1, F@_2,
  779. F@_3, F@_4, TrUserData).
  780. decode_msg_addressBook(Bin, TrUserData) ->
  781. dfp_read_field_def_addressBook(Bin, 0, 0,
  782. id([], TrUserData), id([], TrUserData),
  783. TrUserData).
  784. dfp_read_field_def_addressBook(<<10, Rest/binary>>, Z1,
  785. Z2, F@_1, F@_2, TrUserData) ->
  786. d_field_addressBook_person1(Rest, Z1, Z2, F@_1, F@_2,
  787. TrUserData);
  788. dfp_read_field_def_addressBook(<<18, Rest/binary>>, Z1,
  789. Z2, F@_1, F@_2, TrUserData) ->
  790. d_field_addressBook_others(Rest, Z1, Z2, F@_1, F@_2,
  791. TrUserData);
  792. dfp_read_field_def_addressBook(<<>>, 0, 0, R1, R2,
  793. TrUserData) ->
  794. #addressBook{person1 = lists_reverse(R1, TrUserData),
  795. others = lists_reverse(R2, TrUserData)};
  796. dfp_read_field_def_addressBook(Other, Z1, Z2, F@_1,
  797. F@_2, TrUserData) ->
  798. dg_read_field_def_addressBook(Other, Z1, Z2, F@_1, F@_2,
  799. TrUserData).
  800. dg_read_field_def_addressBook(<<1:1, X:7, Rest/binary>>,
  801. N, Acc, F@_1, F@_2, TrUserData)
  802. when N < 32 - 7 ->
  803. dg_read_field_def_addressBook(Rest, N + 7,
  804. X bsl N + Acc, F@_1, F@_2, TrUserData);
  805. dg_read_field_def_addressBook(<<0:1, X:7, Rest/binary>>,
  806. N, Acc, F@_1, F@_2, TrUserData) ->
  807. Key = X bsl N + Acc,
  808. case Key of
  809. 10 ->
  810. d_field_addressBook_person1(Rest, 0, 0, F@_1, F@_2,
  811. TrUserData);
  812. 18 ->
  813. d_field_addressBook_others(Rest, 0, 0, F@_1, F@_2,
  814. TrUserData);
  815. _ ->
  816. case Key band 7 of
  817. 0 ->
  818. skip_varint_addressBook(Rest, 0, 0, F@_1, F@_2,
  819. TrUserData);
  820. 1 ->
  821. skip_64_addressBook(Rest, 0, 0, F@_1, F@_2, TrUserData);
  822. 2 ->
  823. skip_length_delimited_addressBook(Rest, 0, 0, F@_1,
  824. F@_2, TrUserData);
  825. 3 ->
  826. skip_group_addressBook(Rest, Key bsr 3, 0, F@_1, F@_2,
  827. TrUserData);
  828. 5 ->
  829. skip_32_addressBook(Rest, 0, 0, F@_1, F@_2, TrUserData)
  830. end
  831. end;
  832. dg_read_field_def_addressBook(<<>>, 0, 0, R1, R2,
  833. TrUserData) ->
  834. #addressBook{person1 = lists_reverse(R1, TrUserData),
  835. others = lists_reverse(R2, TrUserData)}.
  836. d_field_addressBook_person1(<<1:1, X:7, Rest/binary>>,
  837. N, Acc, F@_1, F@_2, TrUserData)
  838. when N < 57 ->
  839. d_field_addressBook_person1(Rest, N + 7, X bsl N + Acc,
  840. F@_1, F@_2, TrUserData);
  841. d_field_addressBook_person1(<<0:1, X:7, Rest/binary>>,
  842. N, Acc, Prev, F@_2, TrUserData) ->
  843. {NewFValue, RestF} = begin
  844. Len = X bsl N + Acc,
  845. <<Bs:Len/binary, Rest2/binary>> = Rest,
  846. {id(decode_msg_person(Bs, TrUserData), TrUserData),
  847. Rest2}
  848. end,
  849. dfp_read_field_def_addressBook(RestF, 0, 0,
  850. cons(NewFValue, Prev, TrUserData), F@_2,
  851. TrUserData).
  852. d_field_addressBook_others(<<1:1, X:7, Rest/binary>>, N,
  853. Acc, F@_1, F@_2, TrUserData)
  854. when N < 57 ->
  855. d_field_addressBook_others(Rest, N + 7, X bsl N + Acc,
  856. F@_1, F@_2, TrUserData);
  857. d_field_addressBook_others(<<0:1, X:7, Rest/binary>>, N,
  858. Acc, F@_1, Prev, TrUserData) ->
  859. {NewFValue, RestF} = begin
  860. Len = X bsl N + Acc,
  861. <<Bs:Len/binary, Rest2/binary>> = Rest,
  862. {id(decode_msg_person(Bs, TrUserData), TrUserData),
  863. Rest2}
  864. end,
  865. dfp_read_field_def_addressBook(RestF, 0, 0, F@_1,
  866. cons(NewFValue, Prev, TrUserData),
  867. TrUserData).
  868. skip_varint_addressBook(<<1:1, _:7, Rest/binary>>, Z1,
  869. Z2, F@_1, F@_2, TrUserData) ->
  870. skip_varint_addressBook(Rest, Z1, Z2, F@_1, F@_2,
  871. TrUserData);
  872. skip_varint_addressBook(<<0:1, _:7, Rest/binary>>, Z1,
  873. Z2, F@_1, F@_2, TrUserData) ->
  874. dfp_read_field_def_addressBook(Rest, Z1, Z2, F@_1, F@_2,
  875. TrUserData).
  876. skip_length_delimited_addressBook(<<1:1, X:7,
  877. Rest/binary>>,
  878. N, Acc, F@_1, F@_2, TrUserData)
  879. when N < 57 ->
  880. skip_length_delimited_addressBook(Rest, N + 7,
  881. X bsl N + Acc, F@_1, F@_2, TrUserData);
  882. skip_length_delimited_addressBook(<<0:1, X:7,
  883. Rest/binary>>,
  884. N, Acc, F@_1, F@_2, TrUserData) ->
  885. Length = X bsl N + Acc,
  886. <<_:Length/binary, Rest2/binary>> = Rest,
  887. dfp_read_field_def_addressBook(Rest2, 0, 0, F@_1, F@_2,
  888. TrUserData).
  889. skip_group_addressBook(Bin, FNum, Z2, F@_1, F@_2,
  890. TrUserData) ->
  891. {_, Rest} = read_group(Bin, FNum),
  892. dfp_read_field_def_addressBook(Rest, 0, Z2, F@_1, F@_2,
  893. TrUserData).
  894. skip_32_addressBook(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
  895. F@_2, TrUserData) ->
  896. dfp_read_field_def_addressBook(Rest, Z1, Z2, F@_1, F@_2,
  897. TrUserData).
  898. skip_64_addressBook(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
  899. F@_2, TrUserData) ->
  900. dfp_read_field_def_addressBook(Rest, Z1, Z2, F@_1, F@_2,
  901. TrUserData).
  902. decode_msg_tint32(Bin, TrUserData) ->
  903. dfp_read_field_def_tint32(Bin, 0, 0,
  904. id(undefined, TrUserData),
  905. id(undefined, TrUserData),
  906. id(undefined, TrUserData),
  907. id(undefined, TrUserData),
  908. id(undefined, TrUserData),
  909. id(undefined, TrUserData),
  910. id(undefined, TrUserData),
  911. id(undefined, TrUserData),
  912. id(undefined, TrUserData),
  913. id(undefined, TrUserData), TrUserData).
  914. dfp_read_field_def_tint32(<<8, Rest/binary>>, Z1, Z2,
  915. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  916. F@_10, TrUserData) ->
  917. d_field_tint32_int1(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  918. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  919. dfp_read_field_def_tint32(<<16, Rest/binary>>, Z1, Z2,
  920. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  921. F@_10, TrUserData) ->
  922. d_field_tint32_int2(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  923. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  924. dfp_read_field_def_tint32(<<24, Rest/binary>>, Z1, Z2,
  925. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  926. F@_10, TrUserData) ->
  927. d_field_tint32_int3(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  928. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  929. dfp_read_field_def_tint32(<<32, Rest/binary>>, Z1, Z2,
  930. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  931. F@_10, TrUserData) ->
  932. d_field_tint32_int4(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  933. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  934. dfp_read_field_def_tint32(<<40, Rest/binary>>, Z1, Z2,
  935. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  936. F@_10, TrUserData) ->
  937. d_field_tint32_int5(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  938. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  939. dfp_read_field_def_tint32(<<48, Rest/binary>>, Z1, Z2,
  940. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  941. F@_10, TrUserData) ->
  942. d_field_tint32_int6(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  943. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  944. dfp_read_field_def_tint32(<<56, Rest/binary>>, Z1, Z2,
  945. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  946. F@_10, TrUserData) ->
  947. d_field_tint32_int7(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  948. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  949. dfp_read_field_def_tint32(<<64, Rest/binary>>, Z1, Z2,
  950. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  951. F@_10, TrUserData) ->
  952. d_field_tint32_int8(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  953. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  954. dfp_read_field_def_tint32(<<72, Rest/binary>>, Z1, Z2,
  955. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  956. F@_10, TrUserData) ->
  957. d_field_tint32_int9(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  958. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  959. dfp_read_field_def_tint32(<<80, Rest/binary>>, Z1, Z2,
  960. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  961. F@_10, TrUserData) ->
  962. d_field_tint32_int10(Rest, Z1, Z2, F@_1, F@_2, F@_3,
  963. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  964. dfp_read_field_def_tint32(<<>>, 0, 0, F@_1, F@_2, F@_3,
  965. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, _) ->
  966. #tint32{int1 = F@_1, int2 = F@_2, int3 = F@_3,
  967. int4 = F@_4, int5 = F@_5, int6 = F@_6, int7 = F@_7,
  968. int8 = F@_8, int9 = F@_9, int10 = F@_10};
  969. dfp_read_field_def_tint32(Other, Z1, Z2, F@_1, F@_2,
  970. F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  971. TrUserData) ->
  972. dg_read_field_def_tint32(Other, Z1, Z2, F@_1, F@_2,
  973. F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  974. TrUserData).
  975. dg_read_field_def_tint32(<<1:1, X:7, Rest/binary>>, N,
  976. Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,
  977. F@_9, F@_10, TrUserData)
  978. when N < 32 - 7 ->
  979. dg_read_field_def_tint32(Rest, N + 7, X bsl N + Acc,
  980. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,
  981. F@_9, F@_10, TrUserData);
  982. dg_read_field_def_tint32(<<0:1, X:7, Rest/binary>>, N,
  983. Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,
  984. F@_9, F@_10, TrUserData) ->
  985. Key = X bsl N + Acc,
  986. case Key of
  987. 8 ->
  988. d_field_tint32_int1(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  989. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  990. 16 ->
  991. d_field_tint32_int2(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  992. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  993. 24 ->
  994. d_field_tint32_int3(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  995. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  996. 32 ->
  997. d_field_tint32_int4(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  998. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  999. 40 ->
  1000. d_field_tint32_int5(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  1001. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  1002. 48 ->
  1003. d_field_tint32_int6(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  1004. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  1005. 56 ->
  1006. d_field_tint32_int7(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  1007. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  1008. 64 ->
  1009. d_field_tint32_int8(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  1010. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  1011. 72 ->
  1012. d_field_tint32_int9(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  1013. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  1014. 80 ->
  1015. d_field_tint32_int10(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  1016. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  1017. _ ->
  1018. case Key band 7 of
  1019. 0 ->
  1020. skip_varint_tint32(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4,
  1021. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1022. TrUserData);
  1023. 1 ->
  1024. skip_64_tint32(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5,
  1025. F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  1026. 2 ->
  1027. skip_length_delimited_tint32(Rest, 0, 0, F@_1, F@_2,
  1028. F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,
  1029. F@_9, F@_10, TrUserData);
  1030. 3 ->
  1031. skip_group_tint32(Rest, Key bsr 3, 0, F@_1, F@_2, F@_3,
  1032. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1033. TrUserData);
  1034. 5 ->
  1035. skip_32_tint32(Rest, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5,
  1036. F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData)
  1037. end
  1038. end;
  1039. dg_read_field_def_tint32(<<>>, 0, 0, F@_1, F@_2, F@_3,
  1040. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, _) ->
  1041. #tint32{int1 = F@_1, int2 = F@_2, int3 = F@_3,
  1042. int4 = F@_4, int5 = F@_5, int6 = F@_6, int7 = F@_7,
  1043. int8 = F@_8, int9 = F@_9, int10 = F@_10}.
  1044. d_field_tint32_int1(<<1:1, X:7, Rest/binary>>, N, Acc,
  1045. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1046. F@_10, TrUserData)
  1047. when N < 57 ->
  1048. d_field_tint32_int1(Rest, N + 7, X bsl N + Acc, F@_1,
  1049. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1050. TrUserData);
  1051. d_field_tint32_int1(<<0:1, X:7, Rest/binary>>, N, Acc,
  1052. _, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1053. F@_10, TrUserData) ->
  1054. {NewFValue, RestF} = {begin
  1055. <<Res:32/signed-native>> = <<(X bsl N +
  1056. Acc):32/unsigned-native>>,
  1057. id(Res, TrUserData)
  1058. end,
  1059. Rest},
  1060. dfp_read_field_def_tint32(RestF, 0, 0, NewFValue, F@_2,
  1061. F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1062. TrUserData).
  1063. d_field_tint32_int2(<<1:1, X:7, Rest/binary>>, N, Acc,
  1064. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1065. F@_10, TrUserData)
  1066. when N < 57 ->
  1067. d_field_tint32_int2(Rest, N + 7, X bsl N + Acc, F@_1,
  1068. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1069. TrUserData);
  1070. d_field_tint32_int2(<<0:1, X:7, Rest/binary>>, N, Acc,
  1071. F@_1, _, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1072. F@_10, TrUserData) ->
  1073. {NewFValue, RestF} = {begin
  1074. <<Res:32/signed-native>> = <<(X bsl N +
  1075. Acc):32/unsigned-native>>,
  1076. id(Res, TrUserData)
  1077. end,
  1078. Rest},
  1079. dfp_read_field_def_tint32(RestF, 0, 0, F@_1, NewFValue,
  1080. F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1081. TrUserData).
  1082. d_field_tint32_int3(<<1:1, X:7, Rest/binary>>, N, Acc,
  1083. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1084. F@_10, TrUserData)
  1085. when N < 57 ->
  1086. d_field_tint32_int3(Rest, N + 7, X bsl N + Acc, F@_1,
  1087. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1088. TrUserData);
  1089. d_field_tint32_int3(<<0:1, X:7, Rest/binary>>, N, Acc,
  1090. F@_1, F@_2, _, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1091. F@_10, TrUserData) ->
  1092. {NewFValue, RestF} = {begin
  1093. <<Res:32/signed-native>> = <<(X bsl N +
  1094. Acc):32/unsigned-native>>,
  1095. id(Res, TrUserData)
  1096. end,
  1097. Rest},
  1098. dfp_read_field_def_tint32(RestF, 0, 0, F@_1, F@_2,
  1099. NewFValue, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1100. F@_10, TrUserData).
  1101. d_field_tint32_int4(<<1:1, X:7, Rest/binary>>, N, Acc,
  1102. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1103. F@_10, TrUserData)
  1104. when N < 57 ->
  1105. d_field_tint32_int4(Rest, N + 7, X bsl N + Acc, F@_1,
  1106. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1107. TrUserData);
  1108. d_field_tint32_int4(<<0:1, X:7, Rest/binary>>, N, Acc,
  1109. F@_1, F@_2, F@_3, _, F@_5, F@_6, F@_7, F@_8, F@_9,
  1110. F@_10, TrUserData) ->
  1111. {NewFValue, RestF} = {begin
  1112. <<Res:32/signed-native>> = <<(X bsl N +
  1113. Acc):32/unsigned-native>>,
  1114. id(Res, TrUserData)
  1115. end,
  1116. Rest},
  1117. dfp_read_field_def_tint32(RestF, 0, 0, F@_1, F@_2, F@_3,
  1118. NewFValue, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1119. TrUserData).
  1120. d_field_tint32_int5(<<1:1, X:7, Rest/binary>>, N, Acc,
  1121. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1122. F@_10, TrUserData)
  1123. when N < 57 ->
  1124. d_field_tint32_int5(Rest, N + 7, X bsl N + Acc, F@_1,
  1125. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1126. TrUserData);
  1127. d_field_tint32_int5(<<0:1, X:7, Rest/binary>>, N, Acc,
  1128. F@_1, F@_2, F@_3, F@_4, _, F@_6, F@_7, F@_8, F@_9,
  1129. F@_10, TrUserData) ->
  1130. {NewFValue, RestF} = {begin
  1131. <<Res:32/signed-native>> = <<(X bsl N +
  1132. Acc):32/unsigned-native>>,
  1133. id(Res, TrUserData)
  1134. end,
  1135. Rest},
  1136. dfp_read_field_def_tint32(RestF, 0, 0, F@_1, F@_2, F@_3,
  1137. F@_4, NewFValue, F@_6, F@_7, F@_8, F@_9, F@_10,
  1138. TrUserData).
  1139. d_field_tint32_int6(<<1:1, X:7, Rest/binary>>, N, Acc,
  1140. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1141. F@_10, TrUserData)
  1142. when N < 57 ->
  1143. d_field_tint32_int6(Rest, N + 7, X bsl N + Acc, F@_1,
  1144. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1145. TrUserData);
  1146. d_field_tint32_int6(<<0:1, X:7, Rest/binary>>, N, Acc,
  1147. F@_1, F@_2, F@_3, F@_4, F@_5, _, F@_7, F@_8, F@_9,
  1148. F@_10, TrUserData) ->
  1149. {NewFValue, RestF} = {begin
  1150. <<Res:32/signed-native>> = <<(X bsl N +
  1151. Acc):32/unsigned-native>>,
  1152. id(Res, TrUserData)
  1153. end,
  1154. Rest},
  1155. dfp_read_field_def_tint32(RestF, 0, 0, F@_1, F@_2, F@_3,
  1156. F@_4, F@_5, NewFValue, F@_7, F@_8, F@_9, F@_10,
  1157. TrUserData).
  1158. d_field_tint32_int7(<<1:1, X:7, Rest/binary>>, N, Acc,
  1159. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1160. F@_10, TrUserData)
  1161. when N < 57 ->
  1162. d_field_tint32_int7(Rest, N + 7, X bsl N + Acc, F@_1,
  1163. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1164. TrUserData);
  1165. d_field_tint32_int7(<<0:1, X:7, Rest/binary>>, N, Acc,
  1166. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _, F@_8, F@_9,
  1167. F@_10, TrUserData) ->
  1168. {NewFValue, RestF} = {begin
  1169. <<Res:32/signed-native>> = <<(X bsl N +
  1170. Acc):32/unsigned-native>>,
  1171. id(Res, TrUserData)
  1172. end,
  1173. Rest},
  1174. dfp_read_field_def_tint32(RestF, 0, 0, F@_1, F@_2, F@_3,
  1175. F@_4, F@_5, F@_6, NewFValue, F@_8, F@_9, F@_10,
  1176. TrUserData).
  1177. d_field_tint32_int8(<<1:1, X:7, Rest/binary>>, N, Acc,
  1178. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1179. F@_10, TrUserData)
  1180. when N < 57 ->
  1181. d_field_tint32_int8(Rest, N + 7, X bsl N + Acc, F@_1,
  1182. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1183. TrUserData);
  1184. d_field_tint32_int8(<<0:1, X:7, Rest/binary>>, N, Acc,
  1185. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, _, F@_9,
  1186. F@_10, TrUserData) ->
  1187. {NewFValue, RestF} = {begin
  1188. <<Res:32/signed-native>> = <<(X bsl N +
  1189. Acc):32/unsigned-native>>,
  1190. id(Res, TrUserData)
  1191. end,
  1192. Rest},
  1193. dfp_read_field_def_tint32(RestF, 0, 0, F@_1, F@_2, F@_3,
  1194. F@_4, F@_5, F@_6, F@_7, NewFValue, F@_9, F@_10,
  1195. TrUserData).
  1196. d_field_tint32_int9(<<1:1, X:7, Rest/binary>>, N, Acc,
  1197. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1198. F@_10, TrUserData)
  1199. when N < 57 ->
  1200. d_field_tint32_int9(Rest, N + 7, X bsl N + Acc, F@_1,
  1201. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1202. TrUserData);
  1203. d_field_tint32_int9(<<0:1, X:7, Rest/binary>>, N, Acc,
  1204. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _,
  1205. F@_10, TrUserData) ->
  1206. {NewFValue, RestF} = {begin
  1207. <<Res:32/signed-native>> = <<(X bsl N +
  1208. Acc):32/unsigned-native>>,
  1209. id(Res, TrUserData)
  1210. end,
  1211. Rest},
  1212. dfp_read_field_def_tint32(RestF, 0, 0, F@_1, F@_2, F@_3,
  1213. F@_4, F@_5, F@_6, F@_7, F@_8, NewFValue, F@_10,
  1214. TrUserData).
  1215. d_field_tint32_int10(<<1:1, X:7, Rest/binary>>, N, Acc,
  1216. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1217. F@_10, TrUserData)
  1218. when N < 57 ->
  1219. d_field_tint32_int10(Rest, N + 7, X bsl N + Acc, F@_1,
  1220. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1221. TrUserData);
  1222. d_field_tint32_int10(<<0:1, X:7, Rest/binary>>, N, Acc,
  1223. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, _,
  1224. TrUserData) ->
  1225. {NewFValue, RestF} = {begin
  1226. <<Res:32/signed-native>> = <<(X bsl N +
  1227. Acc):32/unsigned-native>>,
  1228. id(Res, TrUserData)
  1229. end,
  1230. Rest},
  1231. dfp_read_field_def_tint32(RestF, 0, 0, F@_1, F@_2, F@_3,
  1232. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, NewFValue,
  1233. TrUserData).
  1234. skip_varint_tint32(<<1:1, _:7, Rest/binary>>, Z1, Z2,
  1235. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1236. F@_10, TrUserData) ->
  1237. skip_varint_tint32(Rest, Z1, Z2, F@_1, F@_2, F@_3, F@_4,
  1238. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData);
  1239. skip_varint_tint32(<<0:1, _:7, Rest/binary>>, Z1, Z2,
  1240. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9,
  1241. F@_10, TrUserData) ->
  1242. dfp_read_field_def_tint32(Rest, Z1, Z2, F@_1, F@_2,
  1243. F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1244. TrUserData).
  1245. skip_length_delimited_tint32(<<1:1, X:7, Rest/binary>>,
  1246. N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,
  1247. F@_8, F@_9, F@_10, TrUserData)
  1248. when N < 57 ->
  1249. skip_length_delimited_tint32(Rest, N + 7, X bsl N + Acc,
  1250. F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,
  1251. F@_9, F@_10, TrUserData);
  1252. skip_length_delimited_tint32(<<0:1, X:7, Rest/binary>>,
  1253. N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,
  1254. F@_8, F@_9, F@_10, TrUserData) ->
  1255. Length = X bsl N + Acc,
  1256. <<_:Length/binary, Rest2/binary>> = Rest,
  1257. dfp_read_field_def_tint32(Rest2, 0, 0, F@_1, F@_2, F@_3,
  1258. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1259. TrUserData).
  1260. skip_group_tint32(Bin, FNum, Z2, F@_1, F@_2, F@_3, F@_4,
  1261. F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData) ->
  1262. {_, Rest} = read_group(Bin, FNum),
  1263. dfp_read_field_def_tint32(Rest, 0, Z2, F@_1, F@_2, F@_3,
  1264. F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1265. TrUserData).
  1266. skip_32_tint32(<<_:32, Rest/binary>>, Z1, Z2, F@_1,
  1267. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1268. TrUserData) ->
  1269. dfp_read_field_def_tint32(Rest, Z1, Z2, F@_1, F@_2,
  1270. F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1271. TrUserData).
  1272. skip_64_tint32(<<_:64, Rest/binary>>, Z1, Z2, F@_1,
  1273. F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1274. TrUserData) ->
  1275. dfp_read_field_def_tint32(Rest, Z1, Z2, F@_1, F@_2,
  1276. F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10,
  1277. TrUserData).
  1278. read_group(Bin, FieldNum) ->
  1279. {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),
  1280. <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,
  1281. {Group, Rest}.
  1282. %% Like skipping over fields, but record the total length,
  1283. %% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>
  1284. %% Record the length because varints may be non-optimally encoded.
  1285. %%
  1286. %% Groups can be nested, but assume the same FieldNum cannot be nested
  1287. %% because group field numbers are shared with the rest of the fields
  1288. %% numbers. Thus we can search just for an group-end with the same
  1289. %% field number.
  1290. %%
  1291. %% (The only time the same group field number could occur would
  1292. %% be in a nested sub message, but then it would be inside a
  1293. %% length-delimited entry, which we skip-read by length.)
  1294. read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)
  1295. when N < (32-7) ->
  1296. read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);
  1297. read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,
  1298. FieldNum) ->
  1299. Key = X bsl N + Acc,
  1300. TagLen1 = TagLen + 1,
  1301. case {Key bsr 3, Key band 7} of
  1302. {FieldNum, 4} -> % 4 = group_end
  1303. {NumBytes, TagLen1};
  1304. {_, 0} -> % 0 = varint
  1305. read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);
  1306. {_, 1} -> % 1 = bits64
  1307. <<_:64, Tl2/binary>> = Tl,
  1308. read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);
  1309. {_, 2} -> % 2 = length_delimited
  1310. read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);
  1311. {_, 3} -> % 3 = group_start
  1312. read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);
  1313. {_, 4} -> % 4 = group_end
  1314. read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);
  1315. {_, 5} -> % 5 = bits32
  1316. <<_:32, Tl2/binary>> = Tl,
  1317. read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)
  1318. end.
  1319. read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)
  1320. when N < (64-7) ->
  1321. read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);
  1322. read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->
  1323. read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).
  1324. read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)
  1325. when N < (64-7) ->
  1326. read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);
  1327. read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->
  1328. Len = X bsl N + Acc,
  1329. NumBytes1 = NumBytes + 1,
  1330. <<_:Len/binary, Tl2/binary>> = Tl,
  1331. read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).
  1332. merge_msgs(Prev, New)
  1333. when element(1, Prev) =:= element(1, New) ->
  1334. merge_msgs(Prev, New, element(1, Prev), []).
  1335. merge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->
  1336. merge_msgs(Prev, New, MsgName, []);
  1337. merge_msgs(Prev, New, Opts)
  1338. when element(1, Prev) =:= element(1, New),
  1339. is_list(Opts) ->
  1340. merge_msgs(Prev, New, element(1, Prev), Opts).
  1341. merge_msgs(Prev, New, MsgName, Opts) ->
  1342. TrUserData = proplists:get_value(user_data, Opts),
  1343. case MsgName of
  1344. test -> merge_msg_test(Prev, New, TrUserData);
  1345. phoneNumber ->
  1346. merge_msg_phoneNumber(Prev, New, TrUserData);
  1347. person -> merge_msg_person(Prev, New, TrUserData);
  1348. addressBook ->
  1349. merge_msg_addressBook(Prev, New, TrUserData);
  1350. tint32 -> merge_msg_tint32(Prev, New, TrUserData)
  1351. end.
  1352. -compile({nowarn_unused_function,merge_msg_test/3}).
  1353. merge_msg_test(#test{}, #test{aa = NFaa}, _) ->
  1354. #test{aa = NFaa}.
  1355. -compile({nowarn_unused_function,merge_msg_phoneNumber/3}).
  1356. merge_msg_phoneNumber(#phoneNumber{number = PFnumber},
  1357. #phoneNumber{number = NFnumber, type = NFtype},
  1358. TrUserData) ->
  1359. #phoneNumber{number =
  1360. merge_msg_test(PFnumber, NFnumber, TrUserData),
  1361. type = NFtype}.
  1362. -compile({nowarn_unused_function,merge_msg_person/3}).
  1363. merge_msg_person(#person{email = PFemail,
  1364. phone = PFphone},
  1365. #person{name = NFname, integer = NFinteger,
  1366. email = NFemail, phone = NFphone},
  1367. TrUserData) ->
  1368. #person{name = NFname, integer = NFinteger,
  1369. email =
  1370. if NFemail =:= undefined -> PFemail;
  1371. true -> NFemail
  1372. end,
  1373. phone =
  1374. if PFphone /= undefined, NFphone /= undefined ->
  1375. 'erlang_++'(PFphone, NFphone, TrUserData);
  1376. PFphone == undefined -> NFphone;
  1377. NFphone == undefined -> PFphone
  1378. end}.
  1379. -compile({nowarn_unused_function,merge_msg_addressBook/3}).
  1380. merge_msg_addressBook(#addressBook{person1 = PFperson1,
  1381. others = PFothers},
  1382. #addressBook{person1 = NFperson1, others = NFothers},
  1383. TrUserData) ->
  1384. #addressBook{person1 =
  1385. if PFperson1 /= undefined, NFperson1 /= undefined ->
  1386. 'erlang_++'(PFperson1, NFperson1, TrUserData);
  1387. PFperson1 == undefined -> NFperson1;
  1388. NFperson1 == undefined -> PFperson1
  1389. end,
  1390. others =
  1391. if PFothers /= undefined, NFothers /= undefined ->
  1392. 'erlang_++'(PFothers, NFothers, TrUserData);
  1393. PFothers == undefined -> NFothers;
  1394. NFothers == undefined -> PFothers
  1395. end}.
  1396. -compile({nowarn_unused_function,merge_msg_tint32/3}).
  1397. merge_msg_tint32(#tint32{},
  1398. #tint32{int1 = NFint1, int2 = NFint2, int3 = NFint3,
  1399. int4 = NFint4, int5 = NFint5, int6 = NFint6,
  1400. int7 = NFint7, int8 = NFint8, int9 = NFint9,
  1401. int10 = NFint10},
  1402. _) ->
  1403. #tint32{int1 = NFint1, int2 = NFint2, int3 = NFint3,
  1404. int4 = NFint4, int5 = NFint5, int6 = NFint6,
  1405. int7 = NFint7, int8 = NFint8, int9 = NFint9,
  1406. int10 = NFint10}.
  1407. verify_msg(Msg) when tuple_size(Msg) >= 1 ->
  1408. verify_msg(Msg, element(1, Msg), []);
  1409. verify_msg(X) ->
  1410. mk_type_error(not_a_known_message, X, []).
  1411. verify_msg(Msg, MsgName) when is_atom(MsgName) ->
  1412. verify_msg(Msg, MsgName, []);
  1413. verify_msg(Msg, Opts) when tuple_size(Msg) >= 1 ->
  1414. verify_msg(Msg, element(1, Msg), Opts);
  1415. verify_msg(X, _Opts) ->
  1416. mk_type_error(not_a_known_message, X, []).
  1417. verify_msg(Msg, MsgName, Opts) ->
  1418. TrUserData = proplists:get_value(user_data, Opts),
  1419. case MsgName of
  1420. test -> v_msg_test(Msg, [MsgName], TrUserData);
  1421. phoneNumber ->
  1422. v_msg_phoneNumber(Msg, [MsgName], TrUserData);
  1423. person -> v_msg_person(Msg, [MsgName], TrUserData);
  1424. addressBook ->
  1425. v_msg_addressBook(Msg, [MsgName], TrUserData);
  1426. tint32 -> v_msg_tint32(Msg, [MsgName], TrUserData);
  1427. _ -> mk_type_error(not_a_known_message, Msg, [])
  1428. end.
  1429. -compile({nowarn_unused_function,v_msg_test/3}).
  1430. -dialyzer({nowarn_function,v_msg_test/3}).
  1431. v_msg_test(#test{aa = F1}, Path, TrUserData) ->
  1432. v_type_string(F1, [aa | Path], TrUserData), ok;
  1433. v_msg_test(X, Path, _TrUserData) ->
  1434. mk_type_error({expected_msg, test}, X, Path).
  1435. -compile({nowarn_unused_function,v_msg_phoneNumber/3}).
  1436. -dialyzer({nowarn_function,v_msg_phoneNumber/3}).
  1437. v_msg_phoneNumber(#phoneNumber{number = F1, type = F2},
  1438. Path, TrUserData) ->
  1439. v_msg_test(F1, [number | Path], TrUserData),
  1440. v_type_int32(F2, [type | Path], TrUserData),
  1441. ok;
  1442. v_msg_phoneNumber(X, Path, _TrUserData) ->
  1443. mk_type_error({expected_msg, phoneNumber}, X, Path).
  1444. -compile({nowarn_unused_function,v_msg_person/3}).
  1445. -dialyzer({nowarn_function,v_msg_person/3}).
  1446. v_msg_person(#person{name = F1, integer = F2,
  1447. email = F3, phone = F4},
  1448. Path, TrUserData) ->
  1449. v_type_string(F1, [name | Path], TrUserData),
  1450. v_type_int32(F2, [integer | Path], TrUserData),
  1451. if F3 == undefined -> ok;
  1452. true -> v_type_string(F3, [email | Path], TrUserData)
  1453. end,
  1454. if is_list(F4) ->
  1455. _ = [v_msg_phoneNumber(Elem, [phone | Path], TrUserData)
  1456. || Elem <- F4],
  1457. ok;
  1458. true ->
  1459. mk_type_error({invalid_list_of, {msg, phoneNumber}}, F4,
  1460. [phone | Path])
  1461. end,
  1462. ok;
  1463. v_msg_person(X, Path, _TrUserData) ->
  1464. mk_type_error({expected_msg, person}, X, Path).
  1465. -compile({nowarn_unused_function,v_msg_addressBook/3}).
  1466. -dialyzer({nowarn_function,v_msg_addressBook/3}).
  1467. v_msg_addressBook(#addressBook{person1 = F1,
  1468. others = F2},
  1469. Path, TrUserData) ->
  1470. if is_list(F1) ->
  1471. _ = [v_msg_person(Elem, [person1 | Path], TrUserData)
  1472. || Elem <- F1],
  1473. ok;
  1474. true ->
  1475. mk_type_error({invalid_list_of, {msg, person}}, F1,
  1476. [person1 | Path])
  1477. end,
  1478. if is_list(F2) ->
  1479. _ = [v_msg_person(Elem, [others | Path], TrUserData)
  1480. || Elem <- F2],
  1481. ok;
  1482. true ->
  1483. mk_type_error({invalid_list_of, {msg, person}}, F2,
  1484. [others | Path])
  1485. end,
  1486. ok;
  1487. v_msg_addressBook(X, Path, _TrUserData) ->
  1488. mk_type_error({expected_msg, addressBook}, X, Path).
  1489. -compile({nowarn_unused_function,v_msg_tint32/3}).
  1490. -dialyzer({nowarn_function,v_msg_tint32/3}).
  1491. v_msg_tint32(#tint32{int1 = F1, int2 = F2, int3 = F3,
  1492. int4 = F4, int5 = F5, int6 = F6, int7 = F7, int8 = F8,
  1493. int9 = F9, int10 = F10},
  1494. Path, TrUserData) ->
  1495. v_type_int32(F1, [int1 | Path], TrUserData),
  1496. v_type_int32(F2, [int2 | Path], TrUserData),
  1497. v_type_int32(F3, [int3 | Path], TrUserData),
  1498. v_type_int32(F4, [int4 | Path], TrUserData),
  1499. v_type_int32(F5, [int5 | Path], TrUserData),
  1500. v_type_int32(F6, [int6 | Path], TrUserData),
  1501. v_type_int32(F7, [int7 | Path], TrUserData),
  1502. v_type_int32(F8, [int8 | Path], TrUserData),
  1503. v_type_int32(F9, [int9 | Path], TrUserData),
  1504. v_type_int32(F10, [int10 | Path], TrUserData),
  1505. ok;
  1506. v_msg_tint32(X, Path, _TrUserData) ->
  1507. mk_type_error({expected_msg, tint32}, X, Path).
  1508. -compile({nowarn_unused_function,v_type_int32/3}).
  1509. -dialyzer({nowarn_function,v_type_int32/3}).
  1510. v_type_int32(N, _Path, _TrUserData)
  1511. when -2147483648 =< N, N =< 2147483647 ->
  1512. ok;
  1513. v_type_int32(N, Path, _TrUserData) when is_integer(N) ->
  1514. mk_type_error({value_out_of_range, int32, signed, 32},
  1515. N, Path);
  1516. v_type_int32(X, Path, _TrUserData) ->
  1517. mk_type_error({bad_integer, int32, signed, 32}, X,
  1518. Path).
  1519. -compile({nowarn_unused_function,v_type_string/3}).
  1520. -dialyzer({nowarn_function,v_type_string/3}).
  1521. v_type_string(S, Path, _TrUserData)
  1522. when is_list(S); is_binary(S) ->
  1523. try unicode:characters_to_binary(S) of
  1524. B when is_binary(B) -> ok;
  1525. {error, _, _} ->
  1526. mk_type_error(bad_unicode_string, S, Path)
  1527. catch
  1528. error:badarg ->
  1529. mk_type_error(bad_unicode_string, S, Path)
  1530. end;
  1531. v_type_string(X, Path, _TrUserData) ->
  1532. mk_type_error(bad_unicode_string, X, Path).
  1533. -compile({nowarn_unused_function,mk_type_error/3}).
  1534. -spec mk_type_error(_, _, list()) -> no_return().
  1535. mk_type_error(Error, ValueSeen, Path) ->
  1536. Path2 = prettify_path(Path),
  1537. erlang:error({gpb_type_error,
  1538. {Error, [{value, ValueSeen}, {path, Path2}]}}).
  1539. -compile({nowarn_unused_function,prettify_path/1}).
  1540. -dialyzer({nowarn_function,prettify_path/1}).
  1541. prettify_path([]) -> top_level;
  1542. prettify_path(PathR) ->
  1543. list_to_atom(lists:append(lists:join(".",
  1544. lists:map(fun atom_to_list/1,
  1545. lists:reverse(PathR))))).
  1546. -compile({nowarn_unused_function,id/2}).
  1547. -compile({inline,id/2}).
  1548. id(X, _TrUserData) -> X.
  1549. -compile({nowarn_unused_function,v_ok/3}).
  1550. -compile({inline,v_ok/3}).
  1551. v_ok(_Value, _Path, _TrUserData) -> ok.
  1552. -compile({nowarn_unused_function,m_overwrite/3}).
  1553. -compile({inline,m_overwrite/3}).
  1554. m_overwrite(_Prev, New, _TrUserData) -> New.
  1555. -compile({nowarn_unused_function,cons/3}).
  1556. -compile({inline,cons/3}).
  1557. cons(Elem, Acc, _TrUserData) -> [Elem | Acc].
  1558. -compile({nowarn_unused_function,lists_reverse/2}).
  1559. -compile({inline,lists_reverse/2}).
  1560. 'lists_reverse'(L, _TrUserData) -> lists:reverse(L).
  1561. -compile({nowarn_unused_function,'erlang_++'/3}).
  1562. -compile({inline,'erlang_++'/3}).
  1563. 'erlang_++'(A, B, _TrUserData) -> A ++ B.
  1564. get_msg_defs() ->
  1565. [{{msg, test},
  1566. [#field{name = aa, fnum = 1, rnum = 2, type = string,
  1567. occurrence = required, opts = []}]},
  1568. {{msg, phoneNumber},
  1569. [#field{name = number, fnum = 1, rnum = 2,
  1570. type = {msg, test}, occurrence = required, opts = []},
  1571. #field{name = type, fnum = 2, rnum = 3, type = int32,
  1572. occurrence = required, opts = []}]},
  1573. {{msg, person},
  1574. [#field{name = name, fnum = 1, rnum = 2, type = string,
  1575. occurrence = required, opts = []},
  1576. #field{name = integer, fnum = 2, rnum = 3, type = int32,
  1577. occurrence = required, opts = []},
  1578. #field{name = email, fnum = 3, rnum = 4, type = string,
  1579. occurrence = optional, opts = []},
  1580. #field{name = phone, fnum = 4, rnum = 5,
  1581. type = {msg, phoneNumber}, occurrence = repeated,
  1582. opts = []}]},
  1583. {{msg, addressBook},
  1584. [#field{name = person1, fnum = 1, rnum = 2,
  1585. type = {msg, person}, occurrence = repeated, opts = []},
  1586. #field{name = others, fnum = 2, rnum = 3,
  1587. type = {msg, person}, occurrence = repeated,
  1588. opts = []}]},
  1589. {{msg, tint32},
  1590. [#field{name = int1, fnum = 1, rnum = 2, type = int32,
  1591. occurrence = required, opts = []},
  1592. #field{name = int2, fnum = 2, rnum = 3, type = int32,
  1593. occurrence = required, opts = []},
  1594. #field{name = int3, fnum = 3, rnum = 4, type = int32,
  1595. occurrence = required, opts = []},
  1596. #field{name = int4, fnum = 4, rnum = 5, type = int32,
  1597. occurrence = required, opts = []},
  1598. #field{name = int5, fnum = 5, rnum = 6, type = int32,
  1599. occurrence = required, opts = []},
  1600. #field{name = int6, fnum = 6, rnum = 7, type = int32,
  1601. occurrence = required, opts = []},
  1602. #field{name = int7, fnum = 7, rnum = 8, type = int32,
  1603. occurrence = required, opts = []},
  1604. #field{name = int8, fnum = 8, rnum = 9, type = int32,
  1605. occurrence = required, opts = []},
  1606. #field{name = int9, fnum = 9, rnum = 10, type = int32,
  1607. occurrence = required, opts = []},
  1608. #field{name = int10, fnum = 10, rnum = 11, type = int32,
  1609. occurrence = required, opts = []}]}].
  1610. get_msg_names() ->
  1611. [test, phoneNumber, person, addressBook, tint32].
  1612. get_group_names() -> [].
  1613. get_msg_or_group_names() ->
  1614. [test, phoneNumber, person, addressBook, tint32].
  1615. get_enum_names() -> [].
  1616. fetch_msg_def(MsgName) ->
  1617. case find_msg_def(MsgName) of
  1618. Fs when is_list(Fs) -> Fs;
  1619. error -> erlang:error({no_such_msg, MsgName})
  1620. end.
  1621. -spec fetch_enum_def(_) -> no_return().
  1622. fetch_enum_def(EnumName) ->
  1623. erlang:error({no_such_enum, EnumName}).
  1624. find_msg_def(test) ->
  1625. [#field{name = aa, fnum = 1, rnum = 2, type = string,
  1626. occurrence = required, opts = []}];
  1627. find_msg_def(phoneNumber) ->
  1628. [#field{name = number, fnum = 1, rnum = 2,
  1629. type = {msg, test}, occurrence = required, opts = []},
  1630. #field{name = type, fnum = 2, rnum = 3, type = int32,
  1631. occurrence = required, opts = []}];
  1632. find_msg_def(person) ->
  1633. [#field{name = name, fnum = 1, rnum = 2, type = string,
  1634. occurrence = required, opts = []},
  1635. #field{name = integer, fnum = 2, rnum = 3, type = int32,
  1636. occurrence = required, opts = []},
  1637. #field{name = email, fnum = 3, rnum = 4, type = string,
  1638. occurrence = optional, opts = []},
  1639. #field{name = phone, fnum = 4, rnum = 5,
  1640. type = {msg, phoneNumber}, occurrence = repeated,
  1641. opts = []}];
  1642. find_msg_def(addressBook) ->
  1643. [#field{name = person1, fnum = 1, rnum = 2,
  1644. type = {msg, person}, occurrence = repeated, opts = []},
  1645. #field{name = others, fnum = 2, rnum = 3,
  1646. type = {msg, person}, occurrence = repeated,
  1647. opts = []}];
  1648. find_msg_def(tint32) ->
  1649. [#field{name = int1, fnum = 1, rnum = 2, type = int32,
  1650. occurrence = required, opts = []},
  1651. #field{name = int2, fnum = 2, rnum = 3, type = int32,
  1652. occurrence = required, opts = []},
  1653. #field{name = int3, fnum = 3, rnum = 4, type = int32,
  1654. occurrence = required, opts = []},
  1655. #field{name = int4, fnum = 4, rnum = 5, type = int32,
  1656. occurrence = required, opts = []},
  1657. #field{name = int5, fnum = 5, rnum = 6, type = int32,
  1658. occurrence = required, opts = []},
  1659. #field{name = int6, fnum = 6, rnum = 7, type = int32,
  1660. occurrence = required, opts = []},
  1661. #field{name = int7, fnum = 7, rnum = 8, type = int32,
  1662. occurrence = required, opts = []},
  1663. #field{name = int8, fnum = 8, rnum = 9, type = int32,
  1664. occurrence = required, opts = []},
  1665. #field{name = int9, fnum = 9, rnum = 10, type = int32,
  1666. occurrence = required, opts = []},
  1667. #field{name = int10, fnum = 10, rnum = 11, type = int32,
  1668. occurrence = required, opts = []}];
  1669. find_msg_def(_) -> error.
  1670. find_enum_def(_) -> error.
  1671. -spec enum_symbol_by_value(_, _) -> no_return().
  1672. enum_symbol_by_value(E, V) ->
  1673. erlang:error({no_enum_defs, E, V}).
  1674. -spec enum_value_by_symbol(_, _) -> no_return().
  1675. enum_value_by_symbol(E, V) ->
  1676. erlang:error({no_enum_defs, E, V}).
  1677. get_service_names() -> [].
  1678. get_service_def(_) -> error.
  1679. get_rpc_names(_) -> error.
  1680. find_rpc_def(_, _) -> error.
  1681. -spec fetch_rpc_def(_, _) -> no_return().
  1682. fetch_rpc_def(ServiceName, RpcName) ->
  1683. erlang:error({no_such_rpc, ServiceName, RpcName}).
  1684. %% Convert a a fully qualified (ie with package name) service name
  1685. %% as a binary to a service name as an atom.
  1686. -spec fqbin_to_service_name(_) -> no_return().
  1687. fqbin_to_service_name(X) ->
  1688. error({gpb_error, {badservice, X}}).
  1689. %% Convert a service name as an atom to a fully qualified
  1690. %% (ie with package name) name as a binary.
  1691. -spec service_name_to_fqbin(_) -> no_return().
  1692. service_name_to_fqbin(X) ->
  1693. error({gpb_error, {badservice, X}}).
  1694. %% Convert a a fully qualified (ie with package name) service name
  1695. %% and an rpc name, both as binaries to a service name and an rpc
  1696. %% name, as atoms.
  1697. -spec fqbins_to_service_and_rpc_name(_, _) -> no_return().
  1698. fqbins_to_service_and_rpc_name(S, R) ->
  1699. error({gpb_error, {badservice_or_rpc, {S, R}}}).
  1700. %% Convert a service name and an rpc name, both as atoms,
  1701. %% to a fully qualified (ie with package name) service name and
  1702. %% an rpc name as binaries.
  1703. -spec service_and_rpc_name_to_fqbins(_, _) -> no_return().
  1704. service_and_rpc_name_to_fqbins(S, R) ->
  1705. error({gpb_error, {badservice_or_rpc, {S, R}}}).
  1706. fqbin_to_msg_name(<<"test">>) -> test;
  1707. fqbin_to_msg_name(<<"phoneNumber">>) -> phoneNumber;
  1708. fqbin_to_msg_name(<<"person">>) -> person;
  1709. fqbin_to_msg_name(<<"addressBook">>) -> addressBook;
  1710. fqbin_to_msg_name(<<"tint32">>) -> tint32;
  1711. fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).
  1712. msg_name_to_fqbin(test) -> <<"test">>;
  1713. msg_name_to_fqbin(phoneNumber) -> <<"phoneNumber">>;
  1714. msg_name_to_fqbin(person) -> <<"person">>;
  1715. msg_name_to_fqbin(addressBook) -> <<"addressBook">>;
  1716. msg_name_to_fqbin(tint32) -> <<"tint32">>;
  1717. msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).
  1718. -spec fqbin_to_enum_name(_) -> no_return().
  1719. fqbin_to_enum_name(E) ->
  1720. error({gpb_error, {badenum, E}}).
  1721. -spec enum_name_to_fqbin(_) -> no_return().
  1722. enum_name_to_fqbin(E) ->
  1723. error({gpb_error, {badenum, E}}).
  1724. get_package_name() -> undefined.
  1725. %% Whether or not the message names
  1726. %% are prepended with package name or not.
  1727. uses_packages() -> false.
  1728. source_basename() -> "mytest.proto".
  1729. %% Retrieve all proto file names, also imported ones.
  1730. %% The order is top-down. The first element is always the main
  1731. %% source file. The files are returned with extension,
  1732. %% see get_all_proto_names/0 for a version that returns
  1733. %% the basenames sans extension
  1734. get_all_source_basenames() -> ["mytest.proto"].
  1735. %% Retrieve all proto file names, also imported ones.
  1736. %% The order is top-down. The first element is always the main
  1737. %% source file. The files are returned sans .proto extension,
  1738. %% to make it easier to use them with the various get_xyz_containment
  1739. %% functions.
  1740. get_all_proto_names() -> ["mytest"].
  1741. get_msg_containment("mytest") ->
  1742. [addressBook, person, phoneNumber, test, tint32];
  1743. get_msg_containment(P) ->
  1744. error({gpb_error, {badproto, P}}).
  1745. get_pkg_containment("mytest") -> undefined;
  1746. get_pkg_containment(P) ->
  1747. error({gpb_error, {badproto, P}}).
  1748. get_service_containment("mytest") -> [];
  1749. get_service_containment(P) ->
  1750. error({gpb_error, {badproto, P}}).
  1751. get_rpc_containment("mytest") -> [];
  1752. get_rpc_containment(P) ->
  1753. error({gpb_error, {badproto, P}}).
  1754. get_enum_containment("mytest") -> [];
  1755. get_enum_containment(P) ->
  1756. error({gpb_error, {badproto, P}}).
  1757. get_proto_by_msg_name_as_fqbin(<<"tint32">>) -> "mytest";
  1758. get_proto_by_msg_name_as_fqbin(<<"phoneNumber">>) -> "mytest";
  1759. get_proto_by_msg_name_as_fqbin(<<"test">>) -> "mytest";
  1760. get_proto_by_msg_name_as_fqbin(<<"addressBook">>) -> "mytest";
  1761. get_proto_by_msg_name_as_fqbin(<<"person">>) -> "mytest";
  1762. get_proto_by_msg_name_as_fqbin(E) ->
  1763. error({gpb_error, {badmsg, E}}).
  1764. -spec get_proto_by_service_name_as_fqbin(_) -> no_return().
  1765. get_proto_by_service_name_as_fqbin(E) ->
  1766. error({gpb_error, {badservice, E}}).
  1767. -spec get_proto_by_enum_name_as_fqbin(_) -> no_return().
  1768. get_proto_by_enum_name_as_fqbin(E) ->
  1769. error({gpb_error, {badenum, E}}).
  1770. -spec get_protos_by_pkg_name_as_fqbin(_) -> no_return().
  1771. get_protos_by_pkg_name_as_fqbin(E) ->
  1772. error({gpb_error, {badpkg, E}}).
  1773. gpb_version_as_string() ->
  1774. "4.8.0".
  1775. gpb_version_as_list() ->
  1776. [4,8,0].