diff --git a/include/service_pb.hrl b/include/service_pb.hrl new file mode 100644 index 0000000..ab20c18 --- /dev/null +++ b/include/service_pb.hrl @@ -0,0 +1,72 @@ +%% -*- coding: utf-8 -*- +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.21.7 + +-ifndef(service_pb). +-define(service_pb, true). + +-define(service_pb_gpb_version, "4.21.7"). + + +-ifndef('SERVICEREQUEST.REGISTER_PB_H'). +-define('SERVICEREQUEST.REGISTER_PB_H', true). +-record('ServiceRequest.Register', + {service_id = <<>> :: unicode:chardata() | undefined % = 1, optional + }). +-endif. + +-ifndef('SERVICEREQUEST.SUBSCRIBE_PB_H'). +-define('SERVICEREQUEST.SUBSCRIBE_PB_H', true). +-record('ServiceRequest.Subscribe', + {topic = <<>> :: unicode:chardata() | undefined % = 1, optional + }). +-endif. + +-ifndef('SERVICEREQUEST_PB_H'). +-define('SERVICEREQUEST_PB_H', true). +-record('ServiceRequest', + {packet_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + request :: {register, service_pb:'ServiceRequest.Register'()} | {subscribe, service_pb:'ServiceRequest.Subscribe'()} | undefined % oneof + }). +-endif. + +-ifndef('SERVICEREPLY.ERROR_PB_H'). +-define('SERVICEREPLY.ERROR_PB_H', true). +-record('ServiceReply.Error', + {code = 0 :: integer() | undefined, % = 1, optional, 32 bits + message = <<>> :: unicode:chardata() | undefined % = 2, optional + }). +-endif. + +-ifndef('SERVICEREPLY_PB_H'). +-define('SERVICEREPLY_PB_H', true). +-record('ServiceReply', + {packet_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + reply :: {result, iodata()} | {error, service_pb:'ServiceReply.Error'()} | undefined % oneof + }). +-endif. + +-ifndef('SERVICECAST.METRICDATA_PB_H'). +-define('SERVICECAST.METRICDATA_PB_H', true). +-record('ServiceCast.MetricData', + {route_key = <<>> :: iodata() | undefined, % = 1, optional + metric = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('SERVICECAST.TOPICEVENT_PB_H'). +-define('SERVICECAST.TOPICEVENT_PB_H', true). +-record('ServiceCast.TopicEvent', + {topic = <<>> :: unicode:chardata() | undefined, % = 1, optional + content = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('SERVICECAST_PB_H'). +-define('SERVICECAST_PB_H', true). +-record('ServiceCast', + {body :: {topic_event, service_pb:'ServiceCast.TopicEvent'()} | {metric_data, service_pb:'ServiceCast.MetricData'()} | undefined % oneof + }). +-endif. + +-endif. diff --git a/src/protobuf/service_pb.erl b/src/protobuf/service_pb.erl new file mode 100644 index 0000000..9d4b763 --- /dev/null +++ b/src/protobuf/service_pb.erl @@ -0,0 +1,1498 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically @generated, do not edit +%% Generated by gpb_compile version 4.21.7 +%% Version source: file +-module(service_pb). + +-export([encode_msg/1, encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/2, merge_msgs/3, merge_msgs/4]). +-export([verify_msg/1, verify_msg/2, verify_msg/3]). +-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([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). +-export([gpb_version_source/0]). + +-include("service_pb.hrl"). +-include_lib("gpb/include/gpb.hrl"). + +%% enumerated types + +-export_type([]). + +%% message types +-type 'ServiceRequest.Register'() :: #'ServiceRequest.Register'{}. + +-type 'ServiceRequest.Subscribe'() :: #'ServiceRequest.Subscribe'{}. + +-type 'ServiceRequest'() :: #'ServiceRequest'{}. + +-type 'ServiceReply.Error'() :: #'ServiceReply.Error'{}. + +-type 'ServiceReply'() :: #'ServiceReply'{}. + +-type 'ServiceCast.MetricData'() :: #'ServiceCast.MetricData'{}. + +-type 'ServiceCast.TopicEvent'() :: #'ServiceCast.TopicEvent'{}. + +-type 'ServiceCast'() :: #'ServiceCast'{}. + +-export_type(['ServiceRequest.Register'/0, 'ServiceRequest.Subscribe'/0, 'ServiceRequest'/0, 'ServiceReply.Error'/0, 'ServiceReply'/0, 'ServiceCast.MetricData'/0, 'ServiceCast.TopicEvent'/0, 'ServiceCast'/0]). +-type '$msg_name'() :: 'ServiceRequest.Register' | 'ServiceRequest.Subscribe' | 'ServiceRequest' | 'ServiceReply.Error' | 'ServiceReply' | 'ServiceCast.MetricData' | 'ServiceCast.TopicEvent' | 'ServiceCast'. +-type '$msg'() :: 'ServiceRequest.Register'() | 'ServiceRequest.Subscribe'() | 'ServiceRequest'() | 'ServiceReply.Error'() | 'ServiceReply'() | 'ServiceCast.MetricData'() | 'ServiceCast.TopicEvent'() | 'ServiceCast'(). +-export_type(['$msg_name'/0, '$msg'/0]). + +-if(?OTP_RELEASE >= 24). +-dialyzer({no_underspecs, encode_msg/1}). +-endif. +-spec encode_msg('$msg'()) -> binary(). +encode_msg(Msg) when tuple_size(Msg) >= 1 -> encode_msg(Msg, element(1, Msg), []). + +-if(?OTP_RELEASE >= 24). +-dialyzer({no_underspecs, encode_msg/2}). +-endif. +-spec encode_msg('$msg'(), '$msg_name'() | list()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> encode_msg(Msg, MsgName, []); +encode_msg(Msg, Opts) when tuple_size(Msg) >= 1, is_list(Opts) -> encode_msg(Msg, element(1, Msg), Opts). + +-if(?OTP_RELEASE >= 24). +-dialyzer({no_underspecs, encode_msg/3}). +-endif. +-spec encode_msg('$msg'(), '$msg_name'(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'ServiceRequest.Register' -> 'encode_msg_ServiceRequest.Register'(id(Msg, TrUserData), TrUserData); + 'ServiceRequest.Subscribe' -> 'encode_msg_ServiceRequest.Subscribe'(id(Msg, TrUserData), TrUserData); + 'ServiceRequest' -> encode_msg_ServiceRequest(id(Msg, TrUserData), TrUserData); + 'ServiceReply.Error' -> 'encode_msg_ServiceReply.Error'(id(Msg, TrUserData), TrUserData); + 'ServiceReply' -> encode_msg_ServiceReply(id(Msg, TrUserData), TrUserData); + 'ServiceCast.MetricData' -> 'encode_msg_ServiceCast.MetricData'(id(Msg, TrUserData), TrUserData); + 'ServiceCast.TopicEvent' -> 'encode_msg_ServiceCast.TopicEvent'(id(Msg, TrUserData), TrUserData); + 'ServiceCast' -> encode_msg_ServiceCast(id(Msg, TrUserData), TrUserData) + end. + + +'encode_msg_ServiceRequest.Register'(Msg, TrUserData) -> 'encode_msg_ServiceRequest.Register'(Msg, <<>>, TrUserData). + + +'encode_msg_ServiceRequest.Register'(#'ServiceRequest.Register'{service_id = F1}, Bin, TrUserData) -> + if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) + end + end + end. + +'encode_msg_ServiceRequest.Subscribe'(Msg, TrUserData) -> 'encode_msg_ServiceRequest.Subscribe'(Msg, <<>>, TrUserData). + + +'encode_msg_ServiceRequest.Subscribe'(#'ServiceRequest.Subscribe'{topic = F1}, Bin, TrUserData) -> + if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) + end + end + end. + +encode_msg_ServiceRequest(Msg, TrUserData) -> encode_msg_ServiceRequest(Msg, <<>>, TrUserData). + + +encode_msg_ServiceRequest(#'ServiceRequest'{packet_id = F1, request = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end, + if F2 =:= undefined -> B1; + true -> + case id(F2, TrUserData) of + {register, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_ServiceRequest_register(TrTF2, <>, TrUserData) end; + {subscribe, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_ServiceRequest_subscribe(TrTF2, <>, TrUserData) end + end + end. + +'encode_msg_ServiceReply.Error'(Msg, TrUserData) -> 'encode_msg_ServiceReply.Error'(Msg, <<>>, TrUserData). + + +'encode_msg_ServiceReply.Error'(#'ServiceReply.Error'{code = F1, message = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_type_int32(TrF1, <>, TrUserData) + end + end + end, + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> e_type_string(TrF2, <>, TrUserData) + end + end + end. + +encode_msg_ServiceReply(Msg, TrUserData) -> encode_msg_ServiceReply(Msg, <<>>, TrUserData). + + +encode_msg_ServiceReply(#'ServiceReply'{packet_id = F1, reply = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end, + if F2 =:= undefined -> B1; + true -> + case id(F2, TrUserData) of + {result, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_type_bytes(TrTF2, <>, TrUserData) end; + {error, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_ServiceReply_error(TrTF2, <>, TrUserData) end + end + end. + +'encode_msg_ServiceCast.MetricData'(Msg, TrUserData) -> 'encode_msg_ServiceCast.MetricData'(Msg, <<>>, TrUserData). + + +'encode_msg_ServiceCast.MetricData'(#'ServiceCast.MetricData'{route_key = F1, metric = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end + end, + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end + end. + +'encode_msg_ServiceCast.TopicEvent'(Msg, TrUserData) -> 'encode_msg_ServiceCast.TopicEvent'(Msg, <<>>, TrUserData). + + +'encode_msg_ServiceCast.TopicEvent'(#'ServiceCast.TopicEvent'{topic = F1, content = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) + end + end + end, + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end + end. + +encode_msg_ServiceCast(Msg, TrUserData) -> encode_msg_ServiceCast(Msg, <<>>, TrUserData). + + +encode_msg_ServiceCast(#'ServiceCast'{body = F1}, Bin, TrUserData) -> + if F1 =:= undefined -> Bin; + true -> + case id(F1, TrUserData) of + {topic_event, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_ServiceCast_topic_event(TrTF1, <>, TrUserData) end; + {metric_data, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_ServiceCast_metric_data(TrTF1, <>, TrUserData) end + end + end. + +e_mfield_ServiceRequest_register(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_ServiceRequest.Register'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_ServiceRequest_subscribe(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_ServiceRequest.Subscribe'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_ServiceReply_error(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_ServiceReply.Error'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_ServiceCast_topic_event(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_ServiceCast.TopicEvent'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_ServiceCast_metric_data(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_ServiceCast.MetricData'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) when 0 =< Value, Value =< 127 -> <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) when 0 =< Value, Value =< 127 -> <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> <>; +e_type_bool(false, Bin, _TrUserData) -> <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> <>; +e_type_float(infinity, Bin, _) -> <>; +e_type_float('-infinity', Bin, _) -> <>; +e_type_float(nan, Bin, _) -> <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> <>; +e_type_double(infinity, Bin, _) -> <>; +e_type_double('-infinity', Bin, _) -> <>; +e_type_double(nan, Bin, _) -> <>. + +-compile({nowarn_unused_function,e_unknown_elems/2}). +e_unknown_elems([Elem | Rest], Bin) -> + BinR = case Elem of + {varint, FNum, N} -> + BinF = e_varint(FNum bsl 3, Bin), + e_varint(N, BinF); + {length_delimited, FNum, Data} -> + BinF = e_varint(FNum bsl 3 bor 2, Bin), + BinL = e_varint(byte_size(Data), BinF), + <>; + {group, FNum, GroupFields} -> + Bin1 = e_varint(FNum bsl 3 bor 3, Bin), + Bin2 = e_unknown_elems(GroupFields, Bin1), + e_varint(FNum bsl 3 bor 4, Bin2); + {fixed32, FNum, V} -> + BinF = e_varint(FNum bsl 3 bor 5, Bin), + <>; + {fixed64, FNum, V} -> + BinF = e_varint(FNum bsl 3 bor 1, Bin), + <> + end, + e_unknown_elems(Rest, BinR); +e_unknown_elems([], Bin) -> Bin. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + +is_empty_string("") -> true; +is_empty_string(<<>>) -> true; +is_empty_string(L) when is_list(L) -> not string_has_chars(L); +is_empty_string(B) when is_binary(B) -> false. + +string_has_chars([C | _]) when is_integer(C) -> true; +string_has_chars([H | T]) -> + case string_has_chars(H) of + true -> true; + false -> string_has_chars(T) + end; +string_has_chars(B) when is_binary(B), byte_size(B) =/= 0 -> true; +string_has_chars(C) when is_integer(C) -> true; +string_has_chars(<<>>) -> false; +string_has_chars([]) -> false. + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch + error:{gpb_error,_}=Reason:StackTrace -> + erlang:raise(error, Reason, StackTrace); + Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch + error:{gpb_error,_}=Reason -> + erlang:raise(error, Reason, + erlang:get_stacktrace()); + Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit('ServiceRequest.Register', Bin, TrUserData) -> id('decode_msg_ServiceRequest.Register'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('ServiceRequest.Subscribe', Bin, TrUserData) -> id('decode_msg_ServiceRequest.Subscribe'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('ServiceRequest', Bin, TrUserData) -> id(decode_msg_ServiceRequest(Bin, TrUserData), TrUserData); +decode_msg_2_doit('ServiceReply.Error', Bin, TrUserData) -> id('decode_msg_ServiceReply.Error'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('ServiceReply', Bin, TrUserData) -> id(decode_msg_ServiceReply(Bin, TrUserData), TrUserData); +decode_msg_2_doit('ServiceCast.MetricData', Bin, TrUserData) -> id('decode_msg_ServiceCast.MetricData'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('ServiceCast.TopicEvent', Bin, TrUserData) -> id('decode_msg_ServiceCast.TopicEvent'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('ServiceCast', Bin, TrUserData) -> id(decode_msg_ServiceCast(Bin, TrUserData), TrUserData). + + + +'decode_msg_ServiceRequest.Register'(Bin, TrUserData) -> 'dfp_read_field_def_ServiceRequest.Register'(Bin, 0, 0, 0, id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_ServiceRequest.Register'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_ServiceRequest.Register_service_id'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_ServiceRequest.Register'(<<>>, 0, 0, _, F@_1, _) -> #'ServiceRequest.Register'{service_id = F@_1}; +'dfp_read_field_def_ServiceRequest.Register'(Other, Z1, Z2, F, F@_1, TrUserData) -> 'dg_read_field_def_ServiceRequest.Register'(Other, Z1, Z2, F, F@_1, TrUserData). + +'dg_read_field_def_ServiceRequest.Register'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_ServiceRequest.Register'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'dg_read_field_def_ServiceRequest.Register'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_ServiceRequest.Register_service_id'(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_ServiceRequest.Register'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> 'skip_64_ServiceRequest.Register'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> 'skip_length_delimited_ServiceRequest.Register'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> 'skip_group_ServiceRequest.Register'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> 'skip_32_ServiceRequest.Register'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +'dg_read_field_def_ServiceRequest.Register'(<<>>, 0, 0, _, F@_1, _) -> #'ServiceRequest.Register'{service_id = F@_1}. + +'d_field_ServiceRequest.Register_service_id'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_ServiceRequest.Register_service_id'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_ServiceRequest.Register_service_id'(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_ServiceRequest.Register'(RestF, 0, 0, F, NewFValue, TrUserData). + +'skip_varint_ServiceRequest.Register'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'skip_varint_ServiceRequest.Register'(Rest, Z1, Z2, F, F@_1, TrUserData); +'skip_varint_ServiceRequest.Register'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_ServiceRequest.Register'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_length_delimited_ServiceRequest.Register'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'skip_length_delimited_ServiceRequest.Register'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'skip_length_delimited_ServiceRequest.Register'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_ServiceRequest.Register'(Rest2, 0, 0, F, F@_1, TrUserData). + +'skip_group_ServiceRequest.Register'(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_ServiceRequest.Register'(Rest, 0, Z2, FNum, F@_1, TrUserData). + +'skip_32_ServiceRequest.Register'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_ServiceRequest.Register'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_64_ServiceRequest.Register'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_ServiceRequest.Register'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'decode_msg_ServiceRequest.Subscribe'(Bin, TrUserData) -> 'dfp_read_field_def_ServiceRequest.Subscribe'(Bin, 0, 0, 0, id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_ServiceRequest.Subscribe'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_ServiceRequest.Subscribe_topic'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_ServiceRequest.Subscribe'(<<>>, 0, 0, _, F@_1, _) -> #'ServiceRequest.Subscribe'{topic = F@_1}; +'dfp_read_field_def_ServiceRequest.Subscribe'(Other, Z1, Z2, F, F@_1, TrUserData) -> 'dg_read_field_def_ServiceRequest.Subscribe'(Other, Z1, Z2, F, F@_1, TrUserData). + +'dg_read_field_def_ServiceRequest.Subscribe'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_ServiceRequest.Subscribe'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'dg_read_field_def_ServiceRequest.Subscribe'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_ServiceRequest.Subscribe_topic'(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_ServiceRequest.Subscribe'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> 'skip_64_ServiceRequest.Subscribe'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> 'skip_length_delimited_ServiceRequest.Subscribe'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> 'skip_group_ServiceRequest.Subscribe'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> 'skip_32_ServiceRequest.Subscribe'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +'dg_read_field_def_ServiceRequest.Subscribe'(<<>>, 0, 0, _, F@_1, _) -> #'ServiceRequest.Subscribe'{topic = F@_1}. + +'d_field_ServiceRequest.Subscribe_topic'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_ServiceRequest.Subscribe_topic'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_ServiceRequest.Subscribe_topic'(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_ServiceRequest.Subscribe'(RestF, 0, 0, F, NewFValue, TrUserData). + +'skip_varint_ServiceRequest.Subscribe'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'skip_varint_ServiceRequest.Subscribe'(Rest, Z1, Z2, F, F@_1, TrUserData); +'skip_varint_ServiceRequest.Subscribe'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_ServiceRequest.Subscribe'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_length_delimited_ServiceRequest.Subscribe'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'skip_length_delimited_ServiceRequest.Subscribe'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'skip_length_delimited_ServiceRequest.Subscribe'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_ServiceRequest.Subscribe'(Rest2, 0, 0, F, F@_1, TrUserData). + +'skip_group_ServiceRequest.Subscribe'(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_ServiceRequest.Subscribe'(Rest, 0, Z2, FNum, F@_1, TrUserData). + +'skip_32_ServiceRequest.Subscribe'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_ServiceRequest.Subscribe'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_64_ServiceRequest.Subscribe'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_ServiceRequest.Subscribe'(Rest, Z1, Z2, F, F@_1, TrUserData). + +decode_msg_ServiceRequest(Bin, TrUserData) -> dfp_read_field_def_ServiceRequest(Bin, 0, 0, 0, id(0, TrUserData), id(undefined, TrUserData), TrUserData). + +dfp_read_field_def_ServiceRequest(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_ServiceRequest_packet_id(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_ServiceRequest(<<82, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_ServiceRequest_register(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_ServiceRequest(<<90, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_ServiceRequest_subscribe(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_ServiceRequest(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'ServiceRequest'{packet_id = F@_1, request = F@_2}; +dfp_read_field_def_ServiceRequest(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_ServiceRequest(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_ServiceRequest(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_ServiceRequest(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_ServiceRequest(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_ServiceRequest_packet_id(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 82 -> d_field_ServiceRequest_register(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 90 -> d_field_ServiceRequest_subscribe(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_ServiceRequest(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_ServiceRequest(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_ServiceRequest(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_ServiceRequest(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_ServiceRequest(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_ServiceRequest(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'ServiceRequest'{packet_id = F@_1, request = F@_2}. + +d_field_ServiceRequest_packet_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_ServiceRequest_packet_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_ServiceRequest_packet_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_ServiceRequest(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_ServiceRequest_register(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_ServiceRequest_register(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_ServiceRequest_register(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_ServiceRequest.Register'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_ServiceRequest(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({register, NewFValue}, TrUserData); + {register, MVPrev} -> id({register, 'merge_msg_ServiceRequest.Register'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({register, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_ServiceRequest_subscribe(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_ServiceRequest_subscribe(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_ServiceRequest_subscribe(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_ServiceRequest.Subscribe'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_ServiceRequest(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({subscribe, NewFValue}, TrUserData); + {subscribe, MVPrev} -> id({subscribe, 'merge_msg_ServiceRequest.Subscribe'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({subscribe, NewFValue}, TrUserData) + end, + TrUserData). + +skip_varint_ServiceRequest(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_ServiceRequest(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_ServiceRequest(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ServiceRequest(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_ServiceRequest(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_ServiceRequest(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_ServiceRequest(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_ServiceRequest(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_ServiceRequest(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_ServiceRequest(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_ServiceRequest(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ServiceRequest(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_ServiceRequest(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ServiceRequest(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_ServiceReply.Error'(Bin, TrUserData) -> 'dfp_read_field_def_ServiceReply.Error'(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_ServiceReply.Error'(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_ServiceReply.Error_code'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_ServiceReply.Error'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_ServiceReply.Error_message'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_ServiceReply.Error'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'ServiceReply.Error'{code = F@_1, message = F@_2}; +'dfp_read_field_def_ServiceReply.Error'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_ServiceReply.Error'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_ServiceReply.Error'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_ServiceReply.Error'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_ServiceReply.Error'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> 'd_field_ServiceReply.Error_code'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> 'd_field_ServiceReply.Error_message'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_ServiceReply.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_ServiceReply.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_ServiceReply.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_ServiceReply.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_ServiceReply.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_ServiceReply.Error'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'ServiceReply.Error'{code = F@_1, message = F@_2}. + +'d_field_ServiceReply.Error_code'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_ServiceReply.Error_code'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_ServiceReply.Error_code'(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {begin <> = <<(X bsl N + Acc):32/unsigned-native>>, id(Res, TrUserData) end, Rest}, + 'dfp_read_field_def_ServiceReply.Error'(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +'d_field_ServiceReply.Error_message'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_ServiceReply.Error_message'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_ServiceReply.Error_message'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_ServiceReply.Error'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_ServiceReply.Error'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_ServiceReply.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_ServiceReply.Error'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_ServiceReply.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_ServiceReply.Error'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_ServiceReply.Error'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_ServiceReply.Error'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_ServiceReply.Error'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_ServiceReply.Error'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_ServiceReply.Error'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_ServiceReply.Error'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_ServiceReply.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_ServiceReply.Error'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_ServiceReply.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +decode_msg_ServiceReply(Bin, TrUserData) -> dfp_read_field_def_ServiceReply(Bin, 0, 0, 0, id(0, TrUserData), id(undefined, TrUserData), TrUserData). + +dfp_read_field_def_ServiceReply(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_ServiceReply_packet_id(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_ServiceReply(<<82, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_ServiceReply_result(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_ServiceReply(<<90, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_ServiceReply_error(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_ServiceReply(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'ServiceReply'{packet_id = F@_1, reply = F@_2}; +dfp_read_field_def_ServiceReply(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_ServiceReply(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_ServiceReply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_ServiceReply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_ServiceReply(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_ServiceReply_packet_id(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 82 -> d_field_ServiceReply_result(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 90 -> d_field_ServiceReply_error(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_ServiceReply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_ServiceReply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_ServiceReply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_ServiceReply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_ServiceReply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_ServiceReply(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'ServiceReply'{packet_id = F@_1, reply = F@_2}. + +d_field_ServiceReply_packet_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_ServiceReply_packet_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_ServiceReply_packet_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_ServiceReply(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_ServiceReply_result(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_ServiceReply_result(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_ServiceReply_result(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_ServiceReply(RestF, 0, 0, F, F@_1, id({result, NewFValue}, TrUserData), TrUserData). + +d_field_ServiceReply_error(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_ServiceReply_error(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_ServiceReply_error(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_ServiceReply.Error'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_ServiceReply(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({error, NewFValue}, TrUserData); + {error, MVPrev} -> id({error, 'merge_msg_ServiceReply.Error'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({error, NewFValue}, TrUserData) + end, + TrUserData). + +skip_varint_ServiceReply(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_ServiceReply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_ServiceReply(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ServiceReply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_ServiceReply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_ServiceReply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_ServiceReply(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_ServiceReply(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_ServiceReply(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_ServiceReply(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_ServiceReply(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ServiceReply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_ServiceReply(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ServiceReply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_ServiceCast.MetricData'(Bin, TrUserData) -> 'dfp_read_field_def_ServiceCast.MetricData'(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_ServiceCast.MetricData'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_ServiceCast.MetricData_route_key'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_ServiceCast.MetricData'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_ServiceCast.MetricData_metric'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_ServiceCast.MetricData'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'ServiceCast.MetricData'{route_key = F@_1, metric = F@_2}; +'dfp_read_field_def_ServiceCast.MetricData'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_ServiceCast.MetricData'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_ServiceCast.MetricData'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_ServiceCast.MetricData'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_ServiceCast.MetricData'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_ServiceCast.MetricData_route_key'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> 'd_field_ServiceCast.MetricData_metric'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_ServiceCast.MetricData'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_ServiceCast.MetricData'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_ServiceCast.MetricData'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_ServiceCast.MetricData'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_ServiceCast.MetricData'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_ServiceCast.MetricData'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'ServiceCast.MetricData'{route_key = F@_1, metric = F@_2}. + +'d_field_ServiceCast.MetricData_route_key'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_ServiceCast.MetricData_route_key'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_ServiceCast.MetricData_route_key'(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_ServiceCast.MetricData'(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +'d_field_ServiceCast.MetricData_metric'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_ServiceCast.MetricData_metric'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_ServiceCast.MetricData_metric'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_ServiceCast.MetricData'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_ServiceCast.MetricData'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_ServiceCast.MetricData'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_ServiceCast.MetricData'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_ServiceCast.MetricData'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_ServiceCast.MetricData'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_ServiceCast.MetricData'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_ServiceCast.MetricData'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_ServiceCast.MetricData'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_ServiceCast.MetricData'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_ServiceCast.MetricData'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_ServiceCast.MetricData'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_ServiceCast.MetricData'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_ServiceCast.MetricData'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_ServiceCast.MetricData'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_ServiceCast.TopicEvent'(Bin, TrUserData) -> 'dfp_read_field_def_ServiceCast.TopicEvent'(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_ServiceCast.TopicEvent'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_ServiceCast.TopicEvent_topic'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_ServiceCast.TopicEvent'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_ServiceCast.TopicEvent_content'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_ServiceCast.TopicEvent'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'ServiceCast.TopicEvent'{topic = F@_1, content = F@_2}; +'dfp_read_field_def_ServiceCast.TopicEvent'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_ServiceCast.TopicEvent'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_ServiceCast.TopicEvent'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_ServiceCast.TopicEvent'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_ServiceCast.TopicEvent'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_ServiceCast.TopicEvent_topic'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> 'd_field_ServiceCast.TopicEvent_content'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_ServiceCast.TopicEvent'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_ServiceCast.TopicEvent'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_ServiceCast.TopicEvent'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_ServiceCast.TopicEvent'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_ServiceCast.TopicEvent'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_ServiceCast.TopicEvent'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'ServiceCast.TopicEvent'{topic = F@_1, content = F@_2}. + +'d_field_ServiceCast.TopicEvent_topic'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_ServiceCast.TopicEvent_topic'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_ServiceCast.TopicEvent_topic'(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_ServiceCast.TopicEvent'(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +'d_field_ServiceCast.TopicEvent_content'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_ServiceCast.TopicEvent_content'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_ServiceCast.TopicEvent_content'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_ServiceCast.TopicEvent'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_ServiceCast.TopicEvent'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_ServiceCast.TopicEvent'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_ServiceCast.TopicEvent'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_ServiceCast.TopicEvent'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_ServiceCast.TopicEvent'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_ServiceCast.TopicEvent'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_ServiceCast.TopicEvent'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_ServiceCast.TopicEvent'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_ServiceCast.TopicEvent'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_ServiceCast.TopicEvent'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_ServiceCast.TopicEvent'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_ServiceCast.TopicEvent'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_ServiceCast.TopicEvent'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_ServiceCast.TopicEvent'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +decode_msg_ServiceCast(Bin, TrUserData) -> dfp_read_field_def_ServiceCast(Bin, 0, 0, 0, id(undefined, TrUserData), TrUserData). + +dfp_read_field_def_ServiceCast(<<82, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_ServiceCast_topic_event(Rest, Z1, Z2, F, F@_1, TrUserData); +dfp_read_field_def_ServiceCast(<<90, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_ServiceCast_metric_data(Rest, Z1, Z2, F, F@_1, TrUserData); +dfp_read_field_def_ServiceCast(<<>>, 0, 0, _, F@_1, _) -> #'ServiceCast'{body = F@_1}; +dfp_read_field_def_ServiceCast(Other, Z1, Z2, F, F@_1, TrUserData) -> dg_read_field_def_ServiceCast(Other, Z1, Z2, F, F@_1, TrUserData). + +dg_read_field_def_ServiceCast(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> dg_read_field_def_ServiceCast(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +dg_read_field_def_ServiceCast(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 82 -> d_field_ServiceCast_topic_event(Rest, 0, 0, 0, F@_1, TrUserData); + 90 -> d_field_ServiceCast_metric_data(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_ServiceCast(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> skip_64_ServiceCast(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> skip_length_delimited_ServiceCast(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> skip_group_ServiceCast(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> skip_32_ServiceCast(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +dg_read_field_def_ServiceCast(<<>>, 0, 0, _, F@_1, _) -> #'ServiceCast'{body = F@_1}. + +d_field_ServiceCast_topic_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_ServiceCast_topic_event(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +d_field_ServiceCast_topic_event(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_ServiceCast.TopicEvent'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_ServiceCast(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({topic_event, NewFValue}, TrUserData); + {topic_event, MVPrev} -> id({topic_event, 'merge_msg_ServiceCast.TopicEvent'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({topic_event, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_ServiceCast_metric_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_ServiceCast_metric_data(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +d_field_ServiceCast_metric_data(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_ServiceCast.MetricData'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_ServiceCast(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({metric_data, NewFValue}, TrUserData); + {metric_data, MVPrev} -> id({metric_data, 'merge_msg_ServiceCast.MetricData'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({metric_data, NewFValue}, TrUserData) + end, + TrUserData). + +skip_varint_ServiceCast(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> skip_varint_ServiceCast(Rest, Z1, Z2, F, F@_1, TrUserData); +skip_varint_ServiceCast(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_ServiceCast(Rest, Z1, Z2, F, F@_1, TrUserData). + +skip_length_delimited_ServiceCast(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> skip_length_delimited_ServiceCast(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +skip_length_delimited_ServiceCast(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_ServiceCast(Rest2, 0, 0, F, F@_1, TrUserData). + +skip_group_ServiceCast(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_ServiceCast(Rest, 0, Z2, FNum, F@_1, TrUserData). + +skip_32_ServiceCast(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_ServiceCast(Rest, Z1, Z2, F, F@_1, TrUserData). + +skip_64_ServiceCast(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_ServiceCast(Rest, Z1, Z2, F, F@_1, TrUserData). + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New) when element(1, Prev) =:= element(1, New) -> merge_msgs(Prev, New, element(1, Prev), []). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> merge_msgs(Prev, New, MsgName, []); +merge_msgs(Prev, New, Opts) when element(1, Prev) =:= element(1, New), is_list(Opts) -> merge_msgs(Prev, New, element(1, Prev), Opts). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'ServiceRequest.Register' -> 'merge_msg_ServiceRequest.Register'(Prev, New, TrUserData); + 'ServiceRequest.Subscribe' -> 'merge_msg_ServiceRequest.Subscribe'(Prev, New, TrUserData); + 'ServiceRequest' -> merge_msg_ServiceRequest(Prev, New, TrUserData); + 'ServiceReply.Error' -> 'merge_msg_ServiceReply.Error'(Prev, New, TrUserData); + 'ServiceReply' -> merge_msg_ServiceReply(Prev, New, TrUserData); + 'ServiceCast.MetricData' -> 'merge_msg_ServiceCast.MetricData'(Prev, New, TrUserData); + 'ServiceCast.TopicEvent' -> 'merge_msg_ServiceCast.TopicEvent'(Prev, New, TrUserData); + 'ServiceCast' -> merge_msg_ServiceCast(Prev, New, TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_ServiceRequest.Register'/3}). +'merge_msg_ServiceRequest.Register'(#'ServiceRequest.Register'{service_id = PFservice_id}, #'ServiceRequest.Register'{service_id = NFservice_id}, _) -> + #'ServiceRequest.Register'{service_id = + if NFservice_id =:= undefined -> PFservice_id; + true -> NFservice_id + end}. + +-compile({nowarn_unused_function,'merge_msg_ServiceRequest.Subscribe'/3}). +'merge_msg_ServiceRequest.Subscribe'(#'ServiceRequest.Subscribe'{topic = PFtopic}, #'ServiceRequest.Subscribe'{topic = NFtopic}, _) -> + #'ServiceRequest.Subscribe'{topic = + if NFtopic =:= undefined -> PFtopic; + true -> NFtopic + end}. + +-compile({nowarn_unused_function,merge_msg_ServiceRequest/3}). +merge_msg_ServiceRequest(#'ServiceRequest'{packet_id = PFpacket_id, request = PFrequest}, #'ServiceRequest'{packet_id = NFpacket_id, request = NFrequest}, TrUserData) -> + #'ServiceRequest'{packet_id = + if NFpacket_id =:= undefined -> PFpacket_id; + true -> NFpacket_id + end, + request = + case {PFrequest, NFrequest} of + {{register, OPFrequest}, {register, ONFrequest}} -> {register, 'merge_msg_ServiceRequest.Register'(OPFrequest, ONFrequest, TrUserData)}; + {{subscribe, OPFrequest}, {subscribe, ONFrequest}} -> {subscribe, 'merge_msg_ServiceRequest.Subscribe'(OPFrequest, ONFrequest, TrUserData)}; + {_, undefined} -> PFrequest; + _ -> NFrequest + end}. + +-compile({nowarn_unused_function,'merge_msg_ServiceReply.Error'/3}). +'merge_msg_ServiceReply.Error'(#'ServiceReply.Error'{code = PFcode, message = PFmessage}, #'ServiceReply.Error'{code = NFcode, message = NFmessage}, _) -> + #'ServiceReply.Error'{code = + if NFcode =:= undefined -> PFcode; + true -> NFcode + end, + message = + if NFmessage =:= undefined -> PFmessage; + true -> NFmessage + end}. + +-compile({nowarn_unused_function,merge_msg_ServiceReply/3}). +merge_msg_ServiceReply(#'ServiceReply'{packet_id = PFpacket_id, reply = PFreply}, #'ServiceReply'{packet_id = NFpacket_id, reply = NFreply}, TrUserData) -> + #'ServiceReply'{packet_id = + if NFpacket_id =:= undefined -> PFpacket_id; + true -> NFpacket_id + end, + reply = + case {PFreply, NFreply} of + {{error, OPFreply}, {error, ONFreply}} -> {error, 'merge_msg_ServiceReply.Error'(OPFreply, ONFreply, TrUserData)}; + {_, undefined} -> PFreply; + _ -> NFreply + end}. + +-compile({nowarn_unused_function,'merge_msg_ServiceCast.MetricData'/3}). +'merge_msg_ServiceCast.MetricData'(#'ServiceCast.MetricData'{route_key = PFroute_key, metric = PFmetric}, #'ServiceCast.MetricData'{route_key = NFroute_key, metric = NFmetric}, _) -> + #'ServiceCast.MetricData'{route_key = + if NFroute_key =:= undefined -> PFroute_key; + true -> NFroute_key + end, + metric = + if NFmetric =:= undefined -> PFmetric; + true -> NFmetric + end}. + +-compile({nowarn_unused_function,'merge_msg_ServiceCast.TopicEvent'/3}). +'merge_msg_ServiceCast.TopicEvent'(#'ServiceCast.TopicEvent'{topic = PFtopic, content = PFcontent}, #'ServiceCast.TopicEvent'{topic = NFtopic, content = NFcontent}, _) -> + #'ServiceCast.TopicEvent'{topic = + if NFtopic =:= undefined -> PFtopic; + true -> NFtopic + end, + content = + if NFcontent =:= undefined -> PFcontent; + true -> NFcontent + end}. + +-compile({nowarn_unused_function,merge_msg_ServiceCast/3}). +merge_msg_ServiceCast(#'ServiceCast'{body = PFbody}, #'ServiceCast'{body = NFbody}, TrUserData) -> + #'ServiceCast'{body = + case {PFbody, NFbody} of + {{topic_event, OPFbody}, {topic_event, ONFbody}} -> {topic_event, 'merge_msg_ServiceCast.TopicEvent'(OPFbody, ONFbody, TrUserData)}; + {{metric_data, OPFbody}, {metric_data, ONFbody}} -> {metric_data, 'merge_msg_ServiceCast.MetricData'(OPFbody, ONFbody, TrUserData)}; + {_, undefined} -> PFbody; + _ -> NFbody + end}. + + +verify_msg(Msg) when tuple_size(Msg) >= 1 -> verify_msg(Msg, element(1, Msg), []); +verify_msg(X) -> mk_type_error(not_a_known_message, X, []). + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> verify_msg(Msg, MsgName, []); +verify_msg(Msg, Opts) when tuple_size(Msg) >= 1 -> verify_msg(Msg, element(1, Msg), Opts); +verify_msg(X, _Opts) -> mk_type_error(not_a_known_message, X, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'ServiceRequest.Register' -> 'v_msg_ServiceRequest.Register'(Msg, [MsgName], TrUserData); + 'ServiceRequest.Subscribe' -> 'v_msg_ServiceRequest.Subscribe'(Msg, [MsgName], TrUserData); + 'ServiceRequest' -> v_msg_ServiceRequest(Msg, [MsgName], TrUserData); + 'ServiceReply.Error' -> 'v_msg_ServiceReply.Error'(Msg, [MsgName], TrUserData); + 'ServiceReply' -> v_msg_ServiceReply(Msg, [MsgName], TrUserData); + 'ServiceCast.MetricData' -> 'v_msg_ServiceCast.MetricData'(Msg, [MsgName], TrUserData); + 'ServiceCast.TopicEvent' -> 'v_msg_ServiceCast.TopicEvent'(Msg, [MsgName], TrUserData); + 'ServiceCast' -> v_msg_ServiceCast(Msg, [MsgName], TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_submsg_ServiceRequest.Register'/3}). +-dialyzer({nowarn_function,'v_submsg_ServiceRequest.Register'/3}). +'v_submsg_ServiceRequest.Register'(Msg, Path, TrUserData) -> 'v_msg_ServiceRequest.Register'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_ServiceRequest.Register'/3}). +-dialyzer({nowarn_function,'v_msg_ServiceRequest.Register'/3}). +'v_msg_ServiceRequest.Register'(#'ServiceRequest.Register'{service_id = F1}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_string(F1, [service_id | Path], TrUserData) + end, + ok; +'v_msg_ServiceRequest.Register'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'ServiceRequest.Register'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_ServiceRequest.Subscribe'/3}). +-dialyzer({nowarn_function,'v_submsg_ServiceRequest.Subscribe'/3}). +'v_submsg_ServiceRequest.Subscribe'(Msg, Path, TrUserData) -> 'v_msg_ServiceRequest.Subscribe'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_ServiceRequest.Subscribe'/3}). +-dialyzer({nowarn_function,'v_msg_ServiceRequest.Subscribe'/3}). +'v_msg_ServiceRequest.Subscribe'(#'ServiceRequest.Subscribe'{topic = F1}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_string(F1, [topic | Path], TrUserData) + end, + ok; +'v_msg_ServiceRequest.Subscribe'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'ServiceRequest.Subscribe'}, X, Path). + +-compile({nowarn_unused_function,v_msg_ServiceRequest/3}). +-dialyzer({nowarn_function,v_msg_ServiceRequest/3}). +v_msg_ServiceRequest(#'ServiceRequest'{packet_id = F1, request = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [packet_id | Path], TrUserData) + end, + case F2 of + undefined -> ok; + {register, OF2} -> 'v_submsg_ServiceRequest.Register'(OF2, [register, request | Path], TrUserData); + {subscribe, OF2} -> 'v_submsg_ServiceRequest.Subscribe'(OF2, [subscribe, request | Path], TrUserData); + _ -> mk_type_error(invalid_oneof, F2, [request | Path]) + end, + ok; +v_msg_ServiceRequest(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'ServiceRequest'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_ServiceReply.Error'/3}). +-dialyzer({nowarn_function,'v_submsg_ServiceReply.Error'/3}). +'v_submsg_ServiceReply.Error'(Msg, Path, TrUserData) -> 'v_msg_ServiceReply.Error'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_ServiceReply.Error'/3}). +-dialyzer({nowarn_function,'v_msg_ServiceReply.Error'/3}). +'v_msg_ServiceReply.Error'(#'ServiceReply.Error'{code = F1, message = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_int32(F1, [code | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_string(F2, [message | Path], TrUserData) + end, + ok; +'v_msg_ServiceReply.Error'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'ServiceReply.Error'}, X, Path). + +-compile({nowarn_unused_function,v_msg_ServiceReply/3}). +-dialyzer({nowarn_function,v_msg_ServiceReply/3}). +v_msg_ServiceReply(#'ServiceReply'{packet_id = F1, reply = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [packet_id | Path], TrUserData) + end, + case F2 of + undefined -> ok; + {result, OF2} -> v_type_bytes(OF2, [result, reply | Path], TrUserData); + {error, OF2} -> 'v_submsg_ServiceReply.Error'(OF2, [error, reply | Path], TrUserData); + _ -> mk_type_error(invalid_oneof, F2, [reply | Path]) + end, + ok; +v_msg_ServiceReply(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'ServiceReply'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_ServiceCast.MetricData'/3}). +-dialyzer({nowarn_function,'v_submsg_ServiceCast.MetricData'/3}). +'v_submsg_ServiceCast.MetricData'(Msg, Path, TrUserData) -> 'v_msg_ServiceCast.MetricData'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_ServiceCast.MetricData'/3}). +-dialyzer({nowarn_function,'v_msg_ServiceCast.MetricData'/3}). +'v_msg_ServiceCast.MetricData'(#'ServiceCast.MetricData'{route_key = F1, metric = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_bytes(F1, [route_key | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [metric | Path], TrUserData) + end, + ok; +'v_msg_ServiceCast.MetricData'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'ServiceCast.MetricData'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_ServiceCast.TopicEvent'/3}). +-dialyzer({nowarn_function,'v_submsg_ServiceCast.TopicEvent'/3}). +'v_submsg_ServiceCast.TopicEvent'(Msg, Path, TrUserData) -> 'v_msg_ServiceCast.TopicEvent'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_ServiceCast.TopicEvent'/3}). +-dialyzer({nowarn_function,'v_msg_ServiceCast.TopicEvent'/3}). +'v_msg_ServiceCast.TopicEvent'(#'ServiceCast.TopicEvent'{topic = F1, content = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_string(F1, [topic | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [content | Path], TrUserData) + end, + ok; +'v_msg_ServiceCast.TopicEvent'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'ServiceCast.TopicEvent'}, X, Path). + +-compile({nowarn_unused_function,v_msg_ServiceCast/3}). +-dialyzer({nowarn_function,v_msg_ServiceCast/3}). +v_msg_ServiceCast(#'ServiceCast'{body = F1}, Path, TrUserData) -> + case F1 of + undefined -> ok; + {topic_event, OF1} -> 'v_submsg_ServiceCast.TopicEvent'(OF1, [topic_event, body | Path], TrUserData); + {metric_data, OF1} -> 'v_submsg_ServiceCast.MetricData'(OF1, [metric_data, body | Path], TrUserData); + _ -> mk_type_error(invalid_oneof, F1, [body | Path]) + end, + ok; +v_msg_ServiceCast(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'ServiceCast'}, X, Path). + +-compile({nowarn_unused_function,v_type_int32/3}). +-dialyzer({nowarn_function,v_type_int32/3}). +v_type_int32(N, _Path, _TrUserData) when is_integer(N), -2147483648 =< N, N =< 2147483647 -> ok; +v_type_int32(N, Path, _TrUserData) when is_integer(N) -> mk_type_error({value_out_of_range, int32, signed, 32}, N, Path); +v_type_int32(X, Path, _TrUserData) -> mk_type_error({bad_integer, int32, signed, 32}, X, Path). + +-compile({nowarn_unused_function,v_type_uint32/3}). +-dialyzer({nowarn_function,v_type_uint32/3}). +v_type_uint32(N, _Path, _TrUserData) when is_integer(N), 0 =< N, N =< 4294967295 -> ok; +v_type_uint32(N, Path, _TrUserData) when is_integer(N) -> mk_type_error({value_out_of_range, uint32, unsigned, 32}, N, Path); +v_type_uint32(X, Path, _TrUserData) -> mk_type_error({bad_integer, uint32, unsigned, 32}, X, Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) 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, _TrUserData) -> mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,v_type_bytes/3}). +-dialyzer({nowarn_function,v_type_bytes/3}). +v_type_bytes(B, _Path, _TrUserData) when is_binary(B) -> ok; +v_type_bytes(B, _Path, _TrUserData) when is_list(B) -> ok; +v_type_bytes(X, Path, _TrUserData) -> mk_type_error(bad_binary_value, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-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}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> lists:append(lists:join(".", lists:map(fun atom_to_list/1, lists:reverse(PathR)))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. + + +get_msg_defs() -> + [{{msg, 'ServiceRequest.Register'}, [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}]}, + {{msg, 'ServiceRequest.Subscribe'}, [#field{name = topic, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}]}, + {{msg, 'ServiceRequest'}, + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = request, rnum = 3, + fields = + [#field{name = register, fnum = 10, rnum = 3, type = {msg, 'ServiceRequest.Register'}, occurrence = optional, opts = []}, #field{name = subscribe, fnum = 11, rnum = 3, type = {msg, 'ServiceRequest.Subscribe'}, occurrence = optional, opts = []}], + opts = []}]}, + {{msg, 'ServiceReply.Error'}, [#field{name = code, fnum = 1, rnum = 2, type = int32, occurrence = optional, opts = []}, #field{name = message, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]}, + {{msg, 'ServiceReply'}, + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = reply, rnum = 3, fields = [#field{name = result, fnum = 10, rnum = 3, type = bytes, occurrence = optional, opts = []}, #field{name = error, fnum = 11, rnum = 3, type = {msg, 'ServiceReply.Error'}, occurrence = optional, opts = []}], + opts = []}]}, + {{msg, 'ServiceCast.MetricData'}, [#field{name = route_key, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}, #field{name = metric, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'ServiceCast.TopicEvent'}, [#field{name = topic, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = content, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'ServiceCast'}, + [#gpb_oneof{name = body, rnum = 2, + fields = + [#field{name = topic_event, fnum = 10, rnum = 2, type = {msg, 'ServiceCast.TopicEvent'}, occurrence = optional, opts = []}, #field{name = metric_data, fnum = 11, rnum = 2, type = {msg, 'ServiceCast.MetricData'}, occurrence = optional, opts = []}], + opts = []}]}]. + + +get_msg_names() -> ['ServiceRequest.Register', 'ServiceRequest.Subscribe', 'ServiceRequest', 'ServiceReply.Error', 'ServiceReply', 'ServiceCast.MetricData', 'ServiceCast.TopicEvent', 'ServiceCast']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> ['ServiceRequest.Register', 'ServiceRequest.Subscribe', 'ServiceRequest', 'ServiceReply.Error', 'ServiceReply', 'ServiceCast.MetricData', 'ServiceCast.TopicEvent', 'ServiceCast']. + + +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('ServiceRequest.Register') -> [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}]; +find_msg_def('ServiceRequest.Subscribe') -> [#field{name = topic, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}]; +find_msg_def('ServiceRequest') -> + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = request, rnum = 3, + fields = + [#field{name = register, fnum = 10, rnum = 3, type = {msg, 'ServiceRequest.Register'}, occurrence = optional, opts = []}, #field{name = subscribe, fnum = 11, rnum = 3, type = {msg, 'ServiceRequest.Subscribe'}, occurrence = optional, opts = []}], + opts = []}]; +find_msg_def('ServiceReply.Error') -> [#field{name = code, fnum = 1, rnum = 2, type = int32, occurrence = optional, opts = []}, #field{name = message, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]; +find_msg_def('ServiceReply') -> + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = reply, rnum = 3, fields = [#field{name = result, fnum = 10, rnum = 3, type = bytes, occurrence = optional, opts = []}, #field{name = error, fnum = 11, rnum = 3, type = {msg, 'ServiceReply.Error'}, occurrence = optional, opts = []}], + opts = []}]; +find_msg_def('ServiceCast.MetricData') -> [#field{name = route_key, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}, #field{name = metric, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('ServiceCast.TopicEvent') -> [#field{name = topic, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = content, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('ServiceCast') -> + [#gpb_oneof{name = body, rnum = 2, + fields = + [#field{name = topic_event, fnum = 10, rnum = 2, type = {msg, 'ServiceCast.TopicEvent'}, occurrence = optional, opts = []}, #field{name = metric_data, fnum = 11, rnum = 2, type = {msg, 'ServiceCast.MetricData'}, occurrence = optional, opts = []}], + 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}). + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +-spec fqbin_to_service_name(_) -> no_return(). +fqbin_to_service_name(X) -> error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +-spec service_name_to_fqbin(_) -> no_return(). +service_name_to_fqbin(X) -> error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +-spec fqbins_to_service_and_rpc_name(_, _) -> no_return(). +fqbins_to_service_and_rpc_name(S, R) -> error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +-spec service_and_rpc_name_to_fqbins(_, _) -> no_return(). +service_and_rpc_name_to_fqbins(S, R) -> error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"ServiceRequest.Register">>) -> 'ServiceRequest.Register'; +fqbin_to_msg_name(<<"ServiceRequest.Subscribe">>) -> 'ServiceRequest.Subscribe'; +fqbin_to_msg_name(<<"ServiceRequest">>) -> 'ServiceRequest'; +fqbin_to_msg_name(<<"ServiceReply.Error">>) -> 'ServiceReply.Error'; +fqbin_to_msg_name(<<"ServiceReply">>) -> 'ServiceReply'; +fqbin_to_msg_name(<<"ServiceCast.MetricData">>) -> 'ServiceCast.MetricData'; +fqbin_to_msg_name(<<"ServiceCast.TopicEvent">>) -> 'ServiceCast.TopicEvent'; +fqbin_to_msg_name(<<"ServiceCast">>) -> 'ServiceCast'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('ServiceRequest.Register') -> <<"ServiceRequest.Register">>; +msg_name_to_fqbin('ServiceRequest.Subscribe') -> <<"ServiceRequest.Subscribe">>; +msg_name_to_fqbin('ServiceRequest') -> <<"ServiceRequest">>; +msg_name_to_fqbin('ServiceReply.Error') -> <<"ServiceReply.Error">>; +msg_name_to_fqbin('ServiceReply') -> <<"ServiceReply">>; +msg_name_to_fqbin('ServiceCast.MetricData') -> <<"ServiceCast.MetricData">>; +msg_name_to_fqbin('ServiceCast.TopicEvent') -> <<"ServiceCast.TopicEvent">>; +msg_name_to_fqbin('ServiceCast') -> <<"ServiceCast">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +-spec fqbin_to_enum_name(_) -> no_return(). +fqbin_to_enum_name(E) -> error({gpb_error, {badenum, E}}). + + +-spec enum_name_to_fqbin(_) -> no_return(). +enum_name_to_fqbin(E) -> error({gpb_error, {badenum, E}}). + + +get_package_name() -> undefined. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> false. + + +source_basename() -> "service.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> ["service.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> ["service"]. + + +get_msg_containment("service") -> ['ServiceCast', 'ServiceCast.MetricData', 'ServiceCast.TopicEvent', 'ServiceReply', 'ServiceReply.Error', 'ServiceRequest', 'ServiceRequest.Register', 'ServiceRequest.Subscribe']; +get_msg_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_pkg_containment("service") -> undefined; +get_pkg_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_service_containment("service") -> []; +get_service_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_rpc_containment("service") -> []; +get_rpc_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_enum_containment("service") -> []; +get_enum_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"ServiceCast.MetricData">>) -> "service"; +get_proto_by_msg_name_as_fqbin(<<"ServiceRequest.Register">>) -> "service"; +get_proto_by_msg_name_as_fqbin(<<"ServiceReply.Error">>) -> "service"; +get_proto_by_msg_name_as_fqbin(<<"ServiceRequest">>) -> "service"; +get_proto_by_msg_name_as_fqbin(<<"ServiceCast.TopicEvent">>) -> "service"; +get_proto_by_msg_name_as_fqbin(<<"ServiceCast">>) -> "service"; +get_proto_by_msg_name_as_fqbin(<<"ServiceRequest.Subscribe">>) -> "service"; +get_proto_by_msg_name_as_fqbin(<<"ServiceReply">>) -> "service"; +get_proto_by_msg_name_as_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +-spec get_proto_by_service_name_as_fqbin(_) -> no_return(). +get_proto_by_service_name_as_fqbin(E) -> error({gpb_error, {badservice, E}}). + + +-spec get_proto_by_enum_name_as_fqbin(_) -> no_return(). +get_proto_by_enum_name_as_fqbin(E) -> error({gpb_error, {badenum, E}}). + + +-spec get_protos_by_pkg_name_as_fqbin(_) -> no_return(). +get_protos_by_pkg_name_as_fqbin(E) -> error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.21.7". + +gpb_version_as_list() -> + [4,21,7]. + +gpb_version_source() -> + "file". diff --git a/src/transport/ws_channel.erl b/src/transport/ws_channel.erl index d5b6337..7e0291d 100644 --- a/src/transport/ws_channel.erl +++ b/src/transport/ws_channel.erl @@ -9,6 +9,7 @@ -module(ws_channel). -author("licheng5"). -include("efka_tables.hrl"). +-include("service_pb.hrl"). %% REQUEST: 需要响应的请求帧 %% RESPONSE: 对 REQUEST 的响应帧 @@ -21,17 +22,9 @@ -export([init/2]). -export([websocket_init/1, websocket_handle/2, websocket_info/2, terminate/3]). -%% 最大的等待时间 --define(PENDING_TIMEOUT, 10 * 1000). - -record(state, { service_id :: undefined | binary(), service_pid :: undefined | pid(), - - stream_id = 1, - %% #{stream_id => {StreamPid, StreamRef}} - stream_map = #{}, - is_registered = false :: boolean() }). @@ -50,10 +43,14 @@ websocket_init(_State) -> websocket_handle(ping, State) -> {reply, pong, State}; -websocket_handle({text, Data}, State) -> - Request = jiffy:decode(Data, [return_maps]), - logger:debug("[ws_channle] get request: ~p", [Request]), +websocket_handle({binary, <>}, State) -> + Request = service_pb:decode_msg(PacketBin, 'ServiceRequest'), + logger:debug("[ws_channel] get request: ~p", [Request]), handle_request(Request, State); +websocket_handle({binary, <>}, State) -> + Cast = service_pb:decode_msg(PacketBin, 'ServiceCast'), + logger:debug("[ws_channel] get cast: ~p", [Cast]), + handle_cast(Cast, State); websocket_handle(Info, State) -> logger:error("[ws_channel] get a unknown message: ~p, channel will closed", [Info]), @@ -61,55 +58,17 @@ websocket_handle(Info, State) -> %% 订阅的消息 websocket_info({topic_broadcast, Topic, Content}, State = #state{}) -> - Req = iolist_to_binary(jiffy:encode(#{ - <<"method">> => <<"publish">>, - <<"params">> => #{<<"topic">> => Topic, <<"content">> => Content} - }, [force_utf8])), - - logger:debug("[ws_channel] will publish topic: ~p, message: ~p", [Topic, Req]), - - {reply, {text, Req}, State}; + Packet = service_pb:encode_msg(#'ServiceCast'{ + body = {topic_event, #'ServiceCast.TopicEvent'{topic = Topic, content = Content}} + }), + logger:debug("[ws_channel] will publish topic: ~p", [Topic]), + {reply, {binary, <>}, State}; %% service进程关闭 websocket_info({'DOWN', _Ref, process, ServicePid, Reason}, State = #state{service_pid = ServicePid}) -> logger:debug("[ws_channel] container_pid: ~p, exited: ~p", [ServicePid, Reason]), {stop, State#state{service_pid = undefined}}; -%% stream进程关闭 -websocket_info({'DOWN', _Ref, process, StreamPid, Reason}, State = #state{stream_map = StreamMap}) -> - case search_stream_id(StreamPid, StreamMap) of - error -> - {ok, State}; - {ok, StreamId} -> - case Reason of - normal -> - {ok, State#state{stream_map = maps:remove(StreamId, StreamMap)}}; - _ -> - PushReply = json_push(#{ - <<"stream_reply">> => #{ - <<"stream_id">> => StreamId, - <<"result">> => <<"task failed">> - } - }), - {reply, {text, PushReply}, State#state{stream_map = maps:remove(StreamId, StreamMap)}} - end - end; - -%% stream任务完成 -websocket_info({stream_reply, StreamPid, Reply}, State = #state{stream_map = StreamMap}) -> - case search_stream_id(StreamPid, StreamMap) of - error -> - {ok, State}; - {ok, StreamId} -> - PushReply = json_push(#{ - <<"stream_reply">> => #{ - <<"stream_id">> => StreamId, - <<"result">> => Reply - } - }), - {reply, {text, PushReply}, State} - end; - %% 处理关闭信号 websocket_info({stop, Reason}, State) -> logger:debug("[ws_channel] the channel will be closed with reason: ~p", [Reason]), @@ -136,129 +95,62 @@ terminate(Reason, _Req, State = #state{service_id = ServiceId, is_registered = I %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 注册, 要建立程序和容器之间的关系 -handle_request(#{<<"id">> := Id, <<"method">> := <<"register">>, <<"params">> := Params = #{<<"service_id">> := ServiceId}}, State) -> +handle_request(#'ServiceRequest'{packet_id = PacketId, request = {register, #'ServiceRequest.Register'{service_id = ServiceId}}}, State) -> {ok, ServicePid} = efka_service_sup:start_service(ServiceId), case efka_service:attach_channel(ServicePid, self()) of ok -> - Reply = json_result(Id, <<"ok">>), erlang:monitor(process, ServicePid), %% 更新微服务的状态 - MetaData = maps:get(<<"meta_data">>, Params, #{}), - ContainerName = maps:get(<<"container_name">>, Params, <<>>), ok = service_model:insert(#service{ service_id = ServiceId, - container_name = ContainerName, + container_name = <<>>, status = ?SERVICE_RUNNING, - meta_data = MetaData, + meta_data = #{}, create_ts = efka_util:timestamp(), update_ts = efka_util:timestamp() }), - {reply, {text, Reply}, State#state{service_id = ServiceId, service_pid = ServicePid, is_registered = true}}; + {reply, {binary, result_reply_packet(PacketId, <<"ok">>)}, + State#state{service_id = ServiceId, service_pid = ServicePid, is_registered = true}}; {error, Error} -> logger:warning("[ws_channel] service_id: ~p, attach_channel get error: ~p", [ServiceId, Error]), - {stop, State} + {reply, {binary, error_reply_packet(PacketId, -1, <<"attach channel failed">>)}, State} end; %% 订阅事件 -handle_request(#{<<"id">> := Id, <<"method">> := <<"subscribe">>, <<"params">> := #{<<"topic">> := Topic}}, State = #state{is_registered = true}) -> - Reply = case efka_subscription:subscribe(Topic, self()) of - ok -> - json_result(Id, <<"ok">>); - {error, Reason} -> - json_error(Id, -1, Reason) - end, - {reply, {text, Reply}, State}; +handle_request(#'ServiceRequest'{packet_id = PacketId, request = {subscribe, #'ServiceRequest.Subscribe'{topic = Topic}}}, + State = #state{is_registered = true}) -> -%% 文件上传 -handle_request(#{<<"id">> := Id, <<"method">> := <<"new_stream">>, - <<"params">> := #{<<"file_name">> := Filename0, <<"file_size">> := FileSize}}, State = #state{stream_id = StreamId, stream_map = StreamMap, is_registered = true}) -> - Filename = filename:basename(binary_to_list(Filename0)), + Packet = case efka_subscription:subscribe(Topic, self()) of + ok -> + result_reply_packet(PacketId, <<"ok">>); + {error, Reason} -> + error_reply_packet(PacketId, -1, Reason) + end, + {reply, {binary, Packet}, State}; +handle_request(#'ServiceRequest'{packet_id = PacketId}, State) -> + {reply, {binary, error_reply_packet(PacketId, -1, <<"invalid request">>)}, State}. - {ok, {StreamPid, StreamRef}} = efka_stream:start_monitor(self()), - {ok, Path} = efka_stream:setup(StreamPid, Filename, FileSize), - - Reply = json_result(Id, #{ - <<"stream_id">> => StreamId, - <<"path">> => Path - }), - {reply, {text, Reply}, State#state{stream_id = StreamId + 1, stream_map = maps:put(StreamId, {StreamPid, StreamRef}, StreamMap)}}; - -handle_request(#{<<"method">> := <<"stream_chunk">>, - <<"params">> := #{<<"stream_id">> := StreamId, <<"chunk_data">> := ChunkData}}, State = #state{stream_map = StreamMap, is_registered = true}) -> - case maps:find(StreamId, StreamMap) of - error -> - {ok, State}; - {ok, {StreamPid, _}} -> - case ChunkData =:= <<>> of - true -> - efka_stream:finish(StreamPid); - false -> - efka_stream:data(StreamPid, ChunkData) - end, - {ok, State} - end; - -%% 数据项 -handle_request(#{<<"method">> := <<"metric_data">>, - <<"params">> := #{<<"route_key">> := RouteKey, <<"metric">> := Metric0}}, State = #state{service_pid = ServicePid, is_registered = true}) -> - case map_metric(Metric0) of - {ok, Metric} -> - efka_service:metric_data(ServicePid, RouteKey, Metric); - error -> - logger:debug("[ws_channel] metric_data get invalid metric: ~p", [Metric0]) - end, +handle_cast(#'ServiceCast'{body = {metric_data, #'ServiceCast.MetricData'{route_key = RouteKey, metric = Metric}}}, + State = #state{service_pid = ServicePid, is_registered = true}) -> + efka_service:metric_data(ServicePid, RouteKey, Metric), + {ok, State}; +handle_cast(#'ServiceCast'{body = _Body}, State) -> {ok, State}. --spec json_result(Id :: integer(), Result :: term()) -> binary(). -json_result(Id, Result) when is_integer(Id) -> - Response = #{ - <<"id">> => Id, - <<"result">> => Result - }, - jiffy:encode(Response, [force_utf8]). +-spec result_reply_packet(integer(), binary()) -> binary(). +result_reply_packet(PacketId, Result) when is_integer(PacketId), is_binary(Result) -> + Reply = service_pb:encode_msg(#'ServiceReply'{ + packet_id = PacketId, + reply = {result, Result} + }), + <>. --spec json_error(Id :: integer(), Code :: integer(), Message :: binary()) -> binary(). -json_error(Id, Code, Message) when is_integer(Id), is_integer(Code), is_binary(Message) -> - Response = #{ - <<"id">> => Id, - <<"error">> => #{<<"code">> => Code, <<"message">> => Message} - }, - jiffy:encode(Response, [force_utf8]). - --spec json_push(Result :: term()) -> binary(). -json_push(Result) -> - Response = #{ - <<"push">> => Result - }, - jiffy:encode(Response, [force_utf8]). - --spec search_stream_id(StreamPid :: pid(), StreamMap :: map()) -> error | {ok, StreamId :: integer()}. -search_stream_id(StreamPid, StreamMap) when is_pid(StreamPid), is_map(StreamMap) -> - StreamIds = lists:filtermap(fun({StreamId, {StreamPid0, _}}) -> - case StreamPid0 =:= StreamPid of - true -> - {true, StreamId}; - false -> - false - end - end, maps:to_list(StreamMap)), - case StreamIds of - [] -> - error; - [StreamId|_] -> - {ok, StreamId} - end. - --spec map_metric(Metric :: any()) -> {ok, binary()} | error. -map_metric(Metric) when is_binary(Metric) -> - {ok, Metric}; -map_metric(Metric) when is_map(Metric) orelse is_list(Metric) -> - {ok, jiffy:encode(Metric, [force_utf8])}; -map_metric(Metric) when is_integer(Metric) -> - {ok, integer_to_binary(Metric)}; -map_metric(Metric) when is_float(Metric) -> - {ok, erlang:float_to_binary(Metric, [compact, {decimals, 10}])}; -map_metric(_) -> - error. +-spec error_reply_packet(integer(), integer(), binary()) -> binary(). +error_reply_packet(PacketId, Code, Message) when is_integer(PacketId), is_integer(Code), is_binary(Message) -> + Reply = service_pb:encode_msg(#'ServiceReply'{ + packet_id = PacketId, + reply = {error, #'ServiceReply.Error'{code = Code, message = Message}} + }), + <>. \ No newline at end of file