From 939f3bc1d7ba2a4b2bdf02c02fb42eea2188349b Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Tue, 7 Jul 2026 22:53:46 +0800 Subject: [PATCH] add protobuf --- apps/efka/include/message.hrl | 19 + apps/efka/include/message_pb.hrl | 242 + .../{efka_service_pb.hrl => service_pb.hrl} | 12 +- apps/efka/proto/message.proto | 193 + apps/efka/rebar.config | 2 +- apps/efka/src/iot/efka_iot_client.erl | 302 +- apps/efka/src/iot/efka_iot_stream.erl | 24 +- apps/efka/src/protobuf/message_pb.erl | 4219 +++++++++++++++++ .../{efka_service_pb.erl => service_pb.erl} | 4 +- .../efka/src/service/efka_service_channel.erl | 16 +- rebar.config | 4 +- 11 files changed, 4936 insertions(+), 101 deletions(-) create mode 100644 apps/efka/include/message.hrl create mode 100644 apps/efka/include/message_pb.hrl rename apps/efka/include/{efka_service_pb.hrl => service_pb.hrl} (79%) create mode 100644 apps/efka/proto/message.proto create mode 100644 apps/efka/src/protobuf/message_pb.erl rename apps/efka/src/protobuf/{efka_service_pb.erl => service_pb.erl} (99%) diff --git a/apps/efka/include/message.hrl b/apps/efka/include/message.hrl new file mode 100644 index 0000000..bf3a5cb --- /dev/null +++ b/apps/efka/include/message.hrl @@ -0,0 +1,19 @@ +%%%------------------------------------------------------------------- +%%% @author anlicheng +%%% @copyright (C) 2026, +%%% @doc +%%% +%%% @end +%%% Created : 07. 7月 2026 17:09 +%%%------------------------------------------------------------------- +-author("anlicheng"). + +%%-------------------------------------------------------------------- +%% Wire classes +%%-------------------------------------------------------------------- +-define(CLASS_REQUEST, 1). +-define(CLASS_RESPONSE, 2). +-define(CLASS_COMMAND, 3). +-define(CLASS_COMMAND_RESPONSE, 4). +-define(CLASS_MESSAGE, 5). +-define(CLASS_STREAM, 6). diff --git a/apps/efka/include/message_pb.hrl b/apps/efka/include/message_pb.hrl new file mode 100644 index 0000000..2fad11e --- /dev/null +++ b/apps/efka/include/message_pb.hrl @@ -0,0 +1,242 @@ +%% -*- coding: utf-8 -*- +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.21.7 + +-ifndef(message_pb). +-define(message_pb, true). + +-define(message_pb_gpb_version, "4.21.7"). + + +-ifndef('REQUEST.AUTHREQUEST_PB_H'). +-define('REQUEST.AUTHREQUEST_PB_H', true). +-record('Request.AuthRequest', + {uuid = <<>> :: iodata() | undefined, % = 1, optional + token = <<>> :: iodata() | undefined, % = 2, optional + timestamp = 0 :: non_neg_integer() | undefined % = 3, optional, 64 bits + }). +-endif. + +-ifndef('REQUEST_PB_H'). +-define('REQUEST_PB_H', true). +-record('Request', + {packet_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + body :: {auth_request, message_pb:'Request.AuthRequest'()} | undefined % oneof + }). +-endif. + +-ifndef('RESPONSE.ERROR_PB_H'). +-define('RESPONSE.ERROR_PB_H', true). +-record('Response.Error', + {code = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + reason = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('RESPONSE.AUTHRESPONSE_PB_H'). +-define('RESPONSE.AUTHRESPONSE_PB_H', true). +-record('Response.AuthResponse', + { + }). +-endif. + +-ifndef('RESPONSE_PB_H'). +-define('RESPONSE_PB_H', true). +-record('Response', + {packet_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + body :: {auth_response, message_pb:'Response.AuthResponse'()} | {error, message_pb:'Response.Error'()} | undefined % oneof + }). +-endif. + +-ifndef('COMMAND.CONTAINER_PB_H'). +-define('COMMAND.CONTAINER_PB_H', true). +-record('Command.Container', + {action :: {list, message_pb:'Command.Container.ContainerList'()} | {deploy, message_pb:'Command.Container.ContainerDeploy'()} | {start, message_pb:'Command.Container.ContainerStart'()} | {stop, message_pb:'Command.Container.ContainerStop'()} | {kill, message_pb:'Command.Container.ContainerKill'()} | {remove, message_pb:'Command.Container.ContainerRemove'()} | {config, message_pb:'Command.Container.ContainerConfig'()} | undefined % oneof + }). +-endif. + +-ifndef('COMMAND.CONTAINER.CONTAINERCONFIG_PB_H'). +-define('COMMAND.CONTAINER.CONTAINERCONFIG_PB_H', true). +-record('Command.Container.ContainerConfig', + {target = undefined :: message_pb:'Command.Container.ContainerTarget'() | undefined, % = 1, optional + config = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('COMMAND.CONTAINER.CONTAINERREMOVE_PB_H'). +-define('COMMAND.CONTAINER.CONTAINERREMOVE_PB_H', true). +-record('Command.Container.ContainerRemove', + {target = undefined :: message_pb:'Command.Container.ContainerTarget'() | undefined, % = 1, optional + force = false :: boolean() | 0 | 1 | undefined, % = 2, optional + remove_volumes = false :: boolean() | 0 | 1 | undefined % = 3, optional + }). +-endif. + +-ifndef('COMMAND.CONTAINER.CONTAINERKILL_PB_H'). +-define('COMMAND.CONTAINER.CONTAINERKILL_PB_H', true). +-record('Command.Container.ContainerKill', + {target = undefined :: message_pb:'Command.Container.ContainerTarget'() | undefined, % = 1, optional + signal = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('COMMAND.CONTAINER.CONTAINERSTOP_PB_H'). +-define('COMMAND.CONTAINER.CONTAINERSTOP_PB_H', true). +-record('Command.Container.ContainerStop', + {target = undefined :: message_pb:'Command.Container.ContainerTarget'() | undefined, % = 1, optional + timeout_seconds = 0 :: non_neg_integer() | undefined % = 2, optional, 32 bits + }). +-endif. + +-ifndef('COMMAND.CONTAINER.CONTAINERSTART_PB_H'). +-define('COMMAND.CONTAINER.CONTAINERSTART_PB_H', true). +-record('Command.Container.ContainerStart', + {target = undefined :: message_pb:'Command.Container.ContainerTarget'() | undefined % = 1, optional + }). +-endif. + +-ifndef('COMMAND.CONTAINER.CONTAINERDEPLOY_PB_H'). +-define('COMMAND.CONTAINER.CONTAINERDEPLOY_PB_H', true). +-record('Command.Container.ContainerDeploy', + {task_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + params = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('COMMAND.CONTAINER.CONTAINERLIST_PB_H'). +-define('COMMAND.CONTAINER.CONTAINERLIST_PB_H', true). +-record('Command.Container.ContainerList', + { + }). +-endif. + +-ifndef('COMMAND.CONTAINER.CONTAINERTARGET_PB_H'). +-define('COMMAND.CONTAINER.CONTAINERTARGET_PB_H', true). +-record('Command.Container.ContainerTarget', + {name = <<>> :: iodata() | undefined, % = 1, optional + id = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('COMMAND_PB_H'). +-define('COMMAND_PB_H', true). +-record('Command', + {packet_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + body :: {container, message_pb:'Command.Container'()} | undefined % oneof + }). +-endif. + +-ifndef('COMMANDRESPONSE.ERROR_PB_H'). +-define('COMMANDRESPONSE.ERROR_PB_H', true). +-record('CommandResponse.Error', + {code = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + reason = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('COMMANDRESPONSE_PB_H'). +-define('COMMANDRESPONSE_PB_H', true). +-record('CommandResponse', + {packet_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + body :: {result, iodata()} | {error, message_pb:'CommandResponse.Error'()} | undefined % oneof + }). +-endif. + +-ifndef('MESSAGE.PING_PB_H'). +-define('MESSAGE.PING_PB_H', true). +-record('Message.Ping', + { + }). +-endif. + +-ifndef('MESSAGE.PONG_PB_H'). +-define('MESSAGE.PONG_PB_H', true). +-record('Message.Pong', + { + }). +-endif. + +-ifndef('MESSAGE.PUB_PB_H'). +-define('MESSAGE.PUB_PB_H', true). +-record('Message.Pub', + {topic = <<>> :: iodata() | undefined, % = 1, optional + qos = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits + content = <<>> :: iodata() | undefined % = 3, optional + }). +-endif. + +-ifndef('MESSAGE.METRICDATA_PB_H'). +-define('MESSAGE.METRICDATA_PB_H', true). +-record('Message.MetricData', + {route_key = <<>> :: iodata() | undefined, % = 1, optional + metric = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('MESSAGE.TASKEVENT_PB_H'). +-define('MESSAGE.TASKEVENT_PB_H', true). +-record('Message.TaskEvent', + {task_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + type = <<>> :: iodata() | undefined, % = 2, optional + stream = <<>> :: iodata() | undefined % = 3, optional + }). +-endif. + +-ifndef('MESSAGE_PB_H'). +-define('MESSAGE_PB_H', true). +-record('Message', + {body :: {ping, message_pb:'Message.Ping'()} | {pong, message_pb:'Message.Pong'()} | {pub, message_pb:'Message.Pub'()} | {metric_data, message_pb:'Message.MetricData'()} | {task_event, message_pb:'Message.TaskEvent'()} | undefined % oneof + }). +-endif. + +-ifndef('STREAM.OPEN_PB_H'). +-define('STREAM.OPEN_PB_H', true). +-record('Stream.Open', + { + }). +-endif. + +-ifndef('STREAM.OPENED_PB_H'). +-define('STREAM.OPENED_PB_H', true). +-record('Stream.Opened', + { + }). +-endif. + +-ifndef('STREAM.OPENERROR_PB_H'). +-define('STREAM.OPENERROR_PB_H', true). +-record('Stream.OpenError', + {reason = <<>> :: iodata() | undefined % = 1, optional + }). +-endif. + +-ifndef('STREAM.DATA_PB_H'). +-define('STREAM.DATA_PB_H', true). +-record('Stream.Data', + {bytes = <<>> :: iodata() | undefined % = 1, optional + }). +-endif. + +-ifndef('STREAM.FIN_PB_H'). +-define('STREAM.FIN_PB_H', true). +-record('Stream.Fin', + { + }). +-endif. + +-ifndef('STREAM.RESET_PB_H'). +-define('STREAM.RESET_PB_H', true). +-record('Stream.Reset', + {reason = <<>> :: iodata() | undefined % = 1, optional + }). +-endif. + +-ifndef('STREAM_PB_H'). +-define('STREAM_PB_H', true). +-record('Stream', + {stream_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + payload :: {open, message_pb:'Stream.Open'()} | {opened, message_pb:'Stream.Opened'()} | {open_error, message_pb:'Stream.OpenError'()} | {data, message_pb:'Stream.Data'()} | {fin, message_pb:'Stream.Fin'()} | {reset, message_pb:'Stream.Reset'()} | undefined % oneof + }). +-endif. + +-endif. diff --git a/apps/efka/include/efka_service_pb.hrl b/apps/efka/include/service_pb.hrl similarity index 79% rename from apps/efka/include/efka_service_pb.hrl rename to apps/efka/include/service_pb.hrl index af290d0..ab20c18 100644 --- a/apps/efka/include/efka_service_pb.hrl +++ b/apps/efka/include/service_pb.hrl @@ -2,10 +2,10 @@ %% Automatically generated, do not edit %% Generated by gpb_compile version 4.21.7 --ifndef(efka_service_pb). --define(efka_service_pb, true). +-ifndef(service_pb). +-define(service_pb, true). --define(efka_service_pb_gpb_version, "4.21.7"). +-define(service_pb_gpb_version, "4.21.7"). -ifndef('SERVICEREQUEST.REGISTER_PB_H'). @@ -26,7 +26,7 @@ -define('SERVICEREQUEST_PB_H', true). -record('ServiceRequest', {packet_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits - request :: {register, efka_service_pb:'ServiceRequest.Register'()} | {subscribe, efka_service_pb:'ServiceRequest.Subscribe'()} | undefined % oneof + request :: {register, service_pb:'ServiceRequest.Register'()} | {subscribe, service_pb:'ServiceRequest.Subscribe'()} | undefined % oneof }). -endif. @@ -42,7 +42,7 @@ -define('SERVICEREPLY_PB_H', true). -record('ServiceReply', {packet_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits - reply :: {result, iodata()} | {error, efka_service_pb:'ServiceReply.Error'()} | undefined % oneof + reply :: {result, iodata()} | {error, service_pb:'ServiceReply.Error'()} | undefined % oneof }). -endif. @@ -65,7 +65,7 @@ -ifndef('SERVICECAST_PB_H'). -define('SERVICECAST_PB_H', true). -record('ServiceCast', - {body :: {topic_event, efka_service_pb:'ServiceCast.TopicEvent'()} | {metric_data, efka_service_pb:'ServiceCast.MetricData'()} | undefined % oneof + {body :: {topic_event, service_pb:'ServiceCast.TopicEvent'()} | {metric_data, service_pb:'ServiceCast.MetricData'()} | undefined % oneof }). -endif. diff --git a/apps/efka/proto/message.proto b/apps/efka/proto/message.proto new file mode 100644 index 0000000..8077c97 --- /dev/null +++ b/apps/efka/proto/message.proto @@ -0,0 +1,193 @@ +syntax = "proto3"; + +// iot <-> efka protocol payload definitions. +// +// The transport frame keeps the first byte as the coarse message class: +// +// [CLASS_REQUEST][protobuf(Request)] +// [CLASS_RESPONSE][protobuf(Response)] +// [CLASS_COMMAND][protobuf(Command)] +// [CLASS_COMMAND_RESPONSE][protobuf(CommandResponse)] +// [CLASS_MESSAGE][protobuf(Message)] +// [CLASS_STREAM][protobuf(Stream)] +// +// HTTP proxy bytes carried by Stream.Data are transparent payload bytes. + +message Request { + uint32 packet_id = 1; + + message AuthRequest { + bytes uuid = 1; + bytes token = 2; + uint64 timestamp = 3; + } + + oneof body { + AuthRequest auth_request = 10; + } + +} + +message Response { + uint32 packet_id = 1; + + message Error { + uint32 code = 1; + bytes reason = 2; + } + + message AuthResponse { + + } + + oneof body { + AuthResponse auth_response = 10; + Error error = 11; + } + +} + +message Command { + uint32 packet_id = 1; + + message Container { + message ContainerTarget { + bytes name = 1; + bytes id = 2; + } + + message ContainerList { + + } + + message ContainerDeploy { + uint32 task_id = 1; + // The current deploy config is still an application-level structured + // payload. Keep it opaque until the Docker create schema is finalized. + bytes params = 2; + } + + message ContainerStart { + ContainerTarget target = 1; + } + + message ContainerStop { + ContainerTarget target = 1; + uint32 timeout_seconds = 2; + } + + message ContainerKill { + ContainerTarget target = 1; + bytes signal = 2; + } + + message ContainerRemove { + ContainerTarget target = 1; + bool force = 2; + bool remove_volumes = 3; + } + + message ContainerConfig { + ContainerTarget target = 1; + bytes config = 2; + } + + oneof action { + ContainerList list = 1; + ContainerDeploy deploy = 2; + ContainerStart start = 3; + ContainerStop stop = 4; + ContainerKill kill = 5; + ContainerRemove remove = 6; + ContainerConfig config = 7; + } + + } + + oneof body { + Container container = 10; + } + +} + +message CommandResponse { + uint32 packet_id = 1; + + message Error { + uint32 code = 1; + bytes reason = 2; + } + + oneof body { + bytes result = 10; + Error error = 11; + } + +} + +message Message { + message Ping { + } + + message Pong { + } + + message Pub { + bytes topic = 1; + uint32 qos = 2; + bytes content = 3; + } + + message MetricData { + bytes route_key = 1; + bytes metric = 2; + } + + message TaskEvent { + uint32 task_id = 1; + bytes type = 2; + bytes stream = 3; + } + + oneof body { + Ping ping = 10; + Pong pong = 11; + Pub pub = 12; + MetricData metric_data = 13; + TaskEvent task_event = 14; + } +} + +message Stream { + uint32 stream_id = 1; + + message Open { + } + + message Opened { + } + + message OpenError { + bytes reason = 1; + } + + message Data { + bytes bytes = 1; + } + + message Fin { + } + + message Reset { + bytes reason = 1; + } + + oneof payload { + Open open = 10; + Opened opened = 11; + OpenError open_error = 12; + Data data = 13; + Fin fin = 14; + Reset reset = 15; + } +} \ No newline at end of file diff --git a/apps/efka/rebar.config b/apps/efka/rebar.config index 599df9c..8b91541 100644 --- a/apps/efka/rebar.config +++ b/apps/efka/rebar.config @@ -4,7 +4,7 @@ {i, "proto"}, {f, ["service.proto"]}, recursive, - {module_name_prefix, "efka_"}, + {module_name_prefix, ""}, {module_name_suffix, "_pb"}, {o_erl, "src/protobuf"}, {o_hrl, "include"}, diff --git a/apps/efka/src/iot/efka_iot_client.erl b/apps/efka/src/iot/efka_iot_client.erl index a680234..c5b5d8a 100644 --- a/apps/efka/src/iot/efka_iot_client.erl +++ b/apps/efka/src/iot/efka_iot_client.erl @@ -9,6 +9,8 @@ -module(efka_iot_client). -author("anlicheng"). -include("efka_tables.hrl"). +-include("message.hrl"). +-include("message_pb.hrl"). -behaviour(gen_statem). @@ -39,7 +41,8 @@ outbox :: efka_iot_outbox:outbox(), streams = #{}, %% 保存当前auth请求的ref,用来建立auth请求和响应的对应关系 - auth_ref = undefined :: undefined | binary(), + auth_ref = undefined :: undefined | pos_integer(), + next_pkt_id = 1 :: pos_integer(), ping_timer_ref = undefined :: undefined | reference(), dropped_message_count = 0 :: non_neg_integer() }). @@ -123,7 +126,7 @@ outbox_options() -> %% 异步发送数据,连接存在时直接发送;否则写入持久化 outbox。 -spec handle_event(term(), term(), atom(), #state{}) -> term(). handle_event(cast, {metric_data, RouteKey, Metric}, StateName, State = #state{socket = Socket}) -> - Packet = term_to_binary({<<"message">>, {<<"data">>, #{<<"route_key">> => RouteKey, <<"metric">> => Metric}}}), + Packet = encode_message_frame({metric_data, RouteKey, Metric}), case StateName of ?STATE_ACTIVATED -> ok = ssl:send(Socket, Packet), @@ -147,18 +150,18 @@ handle_event(cast, {metric_data, RouteKey, Metric}, StateName, State = #state{so %% Task的stream流,只做实时的 handle_event(cast, {task_event_stream, TaskId, Type, Stream}, ?STATE_ACTIVATED, State = #state{socket = Socket}) -> logger:debug("[efka_iot_client] event_stream task_id: ~p, stream: ~ts", [TaskId, Stream]), - Packet = term_to_binary({<<"message">>, {<<"task_event">>, #{<<"task_id">> => TaskId, <<"type">> => Type, <<"stream">> => Stream}}}), + Packet = encode_message_frame({task_event, TaskId, Type, Stream}), ok = ssl:send(Socket, Packet), {keep_state, State}; handle_event(cast, {close_task_event_stream, TaskId, Reason}, ?STATE_ACTIVATED, State = #state{socket = Socket}) -> - Packet = term_to_binary({<<"message">>, {<<"task_event">>, #{<<"task_id">> => TaskId, <<"type">> => <<"close">>, <<"stream">> => Reason}}}), + Packet = encode_message_frame({task_event, TaskId, <<"close">>, Reason}), ok = ssl:send(Socket, Packet), {keep_state, State}; handle_event(cast, {send_stream, StreamId, Body}, ?STATE_ACTIVATED, State = #state{socket = Socket}) when is_integer(StreamId), StreamId > 0 -> - Packet = term_to_binary({<<"stream">>, StreamId, Body}), + Packet = encode_stream_frame(StreamId, Body), ok = ssl:send(Socket, Packet), {keep_state, State}; handle_event(cast, {send_stream, _StreamId, _Body}, _StateName, State) -> @@ -189,11 +192,11 @@ handle_event({call, From}, dropped_message_count, _StateName, State = #state{dro handle_event(info, {timeout, _, create_transport}, ?STATE_DISCONNECTED, State) -> case connect_socket() of {ok, Socket} -> - Ref = request_ref(), + {Ref, State1} = next_packet_id(State), AuthPacket = auth_packet(Ref), ok = ssl:send(Socket, AuthPacket), logger:debug("[efka_iot_client] send auth request, ref: ~p", [Ref]), - {next_state, ?STATE_AUTH, State#state{socket = Socket, auth_ref = Ref}, [{state_timeout, 5000, auth_timeout}]}; + {next_state, ?STATE_AUTH, State1#state{socket = Socket, auth_ref = Ref}, [{state_timeout, 5000, auth_timeout}]}; {error, _Reason} -> schedule_reconnect(), {keep_state, State#state{socket = undefined}} @@ -206,7 +209,7 @@ handle_event(state_timeout, auth_timeout, ?STATE_AUTH, State = #state{socket = S {next_state, ?STATE_DISCONNECTED, State#state{socket = undefined, auth_ref = undefined}}; handle_event(info, {timeout, TimerRef, ssl_ping}, ?STATE_ACTIVATED, State = #state{socket = Socket, ping_timer_ref = TimerRef}) -> - Packet = term_to_binary({<<"message">>, <<"ping">>}), + Packet = encode_message_frame(ping), case ssl:send(Socket, Packet) of ok -> {keep_state, schedule_ssl_ping(State)}; @@ -243,12 +246,11 @@ handle_event(info, flush_cache, _, State) -> %% 处理收到的ssl消息 handle_event(info, {ssl, Socket, PacketBin}, _, State = #state{socket = Socket}) when is_binary(PacketBin) -> - try binary_to_term(PacketBin, [safe]) of - Packet -> - {keep_state, State, [{next_event, internal, Packet}]} - catch - error:Error -> - logger:warning("[efka_iot_client] binary_to_term get error: ~p, packet_size: ~p", [Error, byte_size(PacketBin)]), + case decode_frame(PacketBin) of + {ok, Packet} -> + {keep_state, State, [{next_event, internal, Packet}]}; + {error, Reason} -> + logger:warning("[efka_iot_client] decode packet failed: ~p, packet_size: ~p", [Reason, byte_size(PacketBin)]), disconnect(Socket), cancel_ssl_ping(State), schedule_reconnect(), @@ -281,57 +283,72 @@ handle_event(info, {'DOWN', MonitorRef, process, WorkerPid, Reason}, _StateName, undefined -> {keep_state, State#state{streams = NStreams}}; Socket -> - Packet = term_to_binary({<<"stream">>, StreamId, {<<"reset">>, safe_term({worker_down, Reason})}}), + Packet = encode_stream_frame(StreamId, {reset, safe_term({worker_down, Reason})}), ok = ssl:send(Socket, Packet), {keep_state, State#state{streams = NStreams}} end end; -%%% 处理内部消息,ssl收到的消息会先 binary_to_term,再由这里按协议结构模式匹配 +%%% 处理内部消息。TLS 收到的数据先经过 protobuf 解码,再由这里按本地事件分发。 %% 容器管理命令由 iot 发起,使用 command/command_response 语义。 -handle_event(internal, {<<"command">>, Ref, {<<"container">>, Request}}, ?STATE_ACTIVATED, State = #state{socket = Socket}) -> - handle_container_command(Ref, Request, Socket), +handle_event(internal, #'Command'{packet_id = Ref, body = {container, ContainerCommand}}, ?STATE_ACTIVATED, State = #state{socket = Socket}) -> + handle_container_command(Ref, ContainerCommand, Socket), {keep_state, State}; -handle_event(internal, {<<"command">>, Ref, {<<"container">>, Request}}, _StateName, State = #state{socket = Socket}) -> +handle_event(internal, #'Command'{packet_id = Ref, body = {container, ContainerCommand}}, _StateName, State = #state{socket = Socket}) -> + Request = decode_container_command(ContainerCommand), logger:notice("[efka_iot_client] get an invalid command: ~p, agent invalid", [Request]), send_container_response(Socket, Ref, {error, <<"agent invalid">>}), {keep_state, State}; %% 处理response -handle_event(internal, {<<"response">>, AuthRef, {<<"auth_response">>, <<"ok">>}}, ?STATE_AUTH, State = #state{auth_ref = AuthRef}) -> +handle_event(internal, #'Response'{packet_id = AuthRef, body = {auth_response, #'Response.AuthResponse'{}}}, ?STATE_AUTH, State = #state{auth_ref = AuthRef}) -> logger:debug("[efka_iot_client] auth success"), State1 = schedule_ssl_ping(State#state{auth_ref = undefined}), {next_state, ?STATE_ACTIVATED, State1, [{next_event, info, flush_cache}]}; -handle_event(internal, {<<"response">>, AuthRef, {<<"auth_response">>, {<<"error">>, Reason}}}, ?STATE_AUTH, State = #state{socket = Socket, auth_ref = AuthRef}) -> +handle_event(internal, #'Response'{packet_id = AuthRef, body = {error, #'Response.Error'{reason = Reason}}}, ?STATE_AUTH, State = #state{socket = Socket, auth_ref = AuthRef}) -> logger:debug("[efka_iot_client] auth failed, reason: ~p", [Reason]), disconnect(Socket), schedule_reconnect(), {next_state, ?STATE_DISCONNECTED, State#state{socket = undefined, auth_ref = undefined}}; -handle_event(internal, {<<"response">>, _Ref, Reply}, StateName, State) -> +handle_event(internal, #'Response'{} = Reply, StateName, State) -> logger:warning("[efka_iot_client] ignore unexpected response in state ~p: ~p", [StateName, Reply]), {keep_state, State}; -handle_event(internal, {<<"command_response">>, _Ref, Reply}, StateName, State) -> +handle_event(internal, #'CommandResponse'{} = Reply, StateName, State) -> logger:warning("[efka_iot_client] ignore unexpected command_response in state ~p: ~p", [StateName, Reply]), {keep_state, State}; -%% 透明 TCP stream 多路复用,StreamId 只出现在新顶层 <<"stream">> 帧里。 -handle_event(internal, {<<"stream">>, StreamId, Body}, ?STATE_ACTIVATED, State) -> +%% 透明 TCP stream 多路复用。 +handle_event(internal, #'Stream'{stream_id = StreamId, payload = Payload}, ?STATE_ACTIVATED, State) -> + Body = case Payload of + {open, #'Stream.Open'{}} -> + open; + {opened, #'Stream.Opened'{}} -> + opened; + {open_error, #'Stream.OpenError'{reason = Reason}} -> + {open_error, Reason}; + {data, #'Stream.Data'{bytes = Data}} -> + {data, Data}; + {fin, #'Stream.Fin'{}} -> + fin; + {reset, #'Stream.Reset'{reason = Reason}} -> + {reset, Reason} + end, handle_stream_frame(StreamId, Body, State); -handle_event(internal, {<<"stream">>, StreamId, Body}, StateName, State) -> +handle_event(internal, #'Stream'{stream_id = StreamId, payload = Payload}, StateName, State) -> logger:warning("[efka_iot_client] ignore stream frame in state ~p, stream_id: ~p, body: ~p", - [StateName, StreamId, Body]), + [StateName, StreamId, Payload]), {keep_state, State}; %% 处理Pub/Sub机制 -handle_event(internal, {<<"message">>, <<"pong">>}, ?STATE_ACTIVATED, State) -> +handle_event(internal, #'Message'{body = {pong, #'Message.Pong'{}}}, ?STATE_ACTIVATED, State) -> {keep_state, State}; -handle_event(internal, {<<"message">>, {<<"pub">>, #{<<"topic">> := Topic, <<"qos">> := Qos, <<"content">> := Content}}}, ?STATE_ACTIVATED, State) -> +handle_event(internal, #'Message'{body = {pub, #'Message.Pub'{topic = Topic, qos = Qos, content = Content}}}, ?STATE_ACTIVATED, State) -> logger:debug("[efka_iot_client] get pub topic: ~p, qos: ~p, content: ~p", [Topic, Qos, Content]), efka_subscription:publish(Topic, Qos, Content), {keep_state, State}; -handle_event(internal, Packet, _StateName, State) -> - logger:warning("[efka_iot_client] ignore unknown packet: ~p", [Packet]), +handle_event(internal, Packet, StateName, State) -> + logger:warning("[efka_iot_client] ignore unknown packet: ~p, state_name: ~p", [Packet, StateName]), {keep_state, State}; handle_event(info, Info, _, State = #state{}) -> @@ -355,18 +372,98 @@ code_change(_OldVsn, StateName, State = #state{}, _Extra) -> %%% Internal functions %%%=================================================================== --spec auth_packet(binary()) -> binary(). -auth_packet(Ref) when is_binary(Ref) -> +-spec auth_packet(pos_integer()) -> binary(). +auth_packet(Ref) when is_integer(Ref), Ref > 0 -> {ok, AuthInfo} = application:get_env(efka, auth), UUID = proplists:get_value(uuid, AuthInfo), Token = proplists:get_value(token, AuthInfo), Timestamp = efka_util:timestamp(), - term_to_binary({<<"request">>, Ref, {<<"auth_request">>, #{ - <<"uuid">> => list_to_binary(UUID), - <<"token">> => list_to_binary(Token), - <<"timestamp">> => Timestamp - }}}). + encode_transport_frame(?CLASS_REQUEST, #'Request'{ + packet_id = Ref, + body = {auth_request, #'Request.AuthRequest'{ + uuid = list_to_binary(UUID), + token = list_to_binary(Token), + timestamp = Timestamp + }} + }). + +-spec encode_message_frame(term()) -> binary(). +encode_message_frame(ping) -> + encode_transport_frame(?CLASS_MESSAGE, #'Message'{body = {ping, #'Message.Ping'{}}}); +encode_message_frame({metric_data, RouteKey, Metric}) -> + encode_transport_frame(?CLASS_MESSAGE, #'Message'{body = {metric_data, #'Message.MetricData'{ + route_key = RouteKey, + metric = Metric + }}}); +encode_message_frame({task_event, TaskId, Type, Stream}) -> + encode_transport_frame(?CLASS_MESSAGE, #'Message'{body = {task_event, #'Message.TaskEvent'{ + task_id = TaskId, + type = Type, + stream = Stream + }}}); +encode_message_frame(Body) -> + error({unsupported_message_body, Body}). + +-spec encode_stream_frame(stream_id(), term()) -> binary(). +encode_stream_frame(StreamId, Body) -> + Payload = case Body of + open -> + {open, #'Stream.Open'{}}; + opened -> + {opened, #'Stream.Opened'{}}; + {open_error, Reason} -> + {open_error, #'Stream.OpenError'{reason = reason_to_binary(Reason)}}; + {data, Data} when is_binary(Data) -> + {data, #'Stream.Data'{bytes = Data}}; + fin -> + {fin, #'Stream.Fin'{}}; + {reset, Reason} -> + {reset, #'Stream.Reset'{reason = reason_to_binary(Reason)}} + end, + encode_transport_frame(?CLASS_STREAM, #'Stream'{stream_id = StreamId, payload = Payload}). + +-spec encode_transport_frame(byte(), message_pb:'$msg'()) -> binary(). +encode_transport_frame(Class, Msg) -> + Payload = message_pb:encode_msg(Msg), + <>. + +-spec decode_frame(binary()) -> {ok, tuple()} | {error, term()}. +decode_frame(<>) -> + decode_pb_frame(Payload, 'Response'); +decode_frame(<>) -> + decode_pb_frame(Payload, 'Command'); +decode_frame(<>) -> + decode_pb_frame(Payload, 'CommandResponse'); +decode_frame(<>) -> + decode_pb_frame(Payload, 'Message'); +decode_frame(<>) -> + decode_pb_frame(Payload, 'Stream'); +decode_frame(<>) -> + {error, unsupported_request_frame}; +decode_frame(Other) -> + {error, {invalid_frame, Other}}. + +-spec decode_pb_frame(binary(), message_pb:'$msg_name'()) -> + {ok, tuple()} | {error, term()}. +decode_pb_frame(Payload, MsgName) -> + try message_pb:decode_msg(Payload, MsgName) of + Msg -> + {ok, Msg} + catch + Class:Reason -> + {error, {bad_protobuf, MsgName, Class, Reason}} + end. + +-spec next_packet_id(#state{}) -> {pos_integer(), #state{}}. +next_packet_id(State = #state{next_pkt_id = PacketId}) -> + {PacketId, State#state{next_pkt_id = next_packet_id_value(PacketId)}}. + +-spec next_packet_id_value(pos_integer()) -> pos_integer(). +next_packet_id_value(16#ffffffff) -> + 1; +next_packet_id_value(PacketId) when is_integer(PacketId), PacketId > 0 -> + PacketId + 1. -spec connect_socket() -> {ok, ssl:sslsocket()} | {error, term()}. connect_socket() -> @@ -408,52 +505,100 @@ cancel_timer(TimerRef) -> _ = erlang:cancel_timer(TimerRef), ok. --spec request_ref() -> binary(). -request_ref() -> - crypto:strong_rand_bytes(16). - --spec send_container_response(ssl:sslsocket(), binary(), term()) -> ok. +-spec send_container_response(ssl:sslsocket(), pos_integer(), term()) -> ok. send_container_response(Socket, Ref, Reply) -> - Packet = term_to_binary({<<"command_response">>, Ref, {<<"container">>, safe_reply(Reply)}}), + Body = case Reply of + ok -> + {result, <<"ok">>}; + {ok, Result} -> + {result, reply_to_binary(Result)}; + {error, Reason} -> + {error, #'CommandResponse.Error'{code = 1, reason = reason_to_binary(Reason)}}; + Other -> + {result, reply_to_binary(Other)} + end, + Packet = encode_transport_frame(?CLASS_COMMAND_RESPONSE, #'CommandResponse'{ + packet_id = Ref, + body = Body + }), ok = ssl:send(Socket, Packet). --spec handle_container_command(binary(), term(), ssl:sslsocket()) -> ok. -handle_container_command(Ref, #{<<"action">> := <<"list">>}, Socket) -> +-spec handle_container_command(pos_integer(), message_pb:'Command.Container'(), ssl:sslsocket()) -> ok. +handle_container_command(Ref, ContainerCommand, Socket) -> + handle_container_request(Ref, decode_container_command(ContainerCommand), Socket). + +-spec handle_container_request(pos_integer(), map(), ssl:sslsocket()) -> ok. +handle_container_request(Ref, #{<<"action">> := <<"list">>}, Socket) -> Reply = docker_commands:get_containers(), send_container_response(Socket, Ref, Reply), ok; -handle_container_command(Ref, #{<<"action">> := <<"deploy">>, <<"task_id">> := TaskId, <<"params">> := Params}, Socket) -> +handle_container_request(Ref, #{<<"action">> := <<"deploy">>, <<"task_id">> := TaskId, <<"params">> := Params}, Socket) -> Reply = docker_deploy_manager:deploy(TaskId, Params), send_container_response(Socket, Ref, Reply), ok; -handle_container_command(Ref, #{<<"action">> := <<"start">>, <<"target">> := Target}, Socket) -> +handle_container_request(Ref, #{<<"action">> := <<"start">>, <<"target">> := Target}, Socket) -> Reply = docker_commands:start_container(container_target(Target)), send_container_response(Socket, Ref, Reply), ok; -handle_container_command(Ref, #{<<"action">> := <<"stop">>, <<"target">> := Target, <<"timeout_seconds">> := TimeoutSeconds}, Socket) -> +handle_container_request(Ref, #{<<"action">> := <<"stop">>, <<"target">> := Target, <<"timeout_seconds">> := TimeoutSeconds}, Socket) -> Reply = docker_commands:stop_container(container_target(Target), TimeoutSeconds), send_container_response(Socket, Ref, Reply), ok; -handle_container_command(Ref, #{<<"action">> := <<"kill">>, <<"target">> := Target, <<"signal">> := Signal}, Socket) -> +handle_container_request(Ref, #{<<"action">> := <<"kill">>, <<"target">> := Target, <<"signal">> := Signal}, Socket) -> Reply = docker_commands:kill_container(container_target(Target), to_binary(Signal)), send_container_response(Socket, Ref, Reply), ok; -handle_container_command(Ref, #{<<"action">> := <<"remove">>, <<"target">> := Target, <<"force">> := Force, <<"remove_volumes">> := RemoveVolumes}, Socket) -> +handle_container_request(Ref, #{<<"action">> := <<"remove">>, <<"target">> := Target, <<"force">> := Force, <<"remove_volumes">> := RemoveVolumes}, Socket) -> Reply = docker_commands:remove_container(container_target(Target), to_bool(Force), to_bool(RemoveVolumes)), send_container_response(Socket, Ref, Reply), ok; -handle_container_command(Ref, #{<<"action">> := <<"config">>, <<"target">> := Target, <<"config">> := Config}, Socket) -> +handle_container_request(Ref, #{<<"action">> := <<"config">>, <<"target">> := Target, <<"config">> := Config}, Socket) -> Reply = docker_helper:update_container_config(container_target(Target), iolist_to_binary(Config)), send_container_response(Socket, Ref, Reply), ok; -handle_container_command(Ref, Request, Socket) -> +handle_container_request(Ref, Request, Socket) -> logger:notice("[efka_iot_client] get an invalid command: ~p, agent invalid", [Request]), send_container_response(Socket, Ref, {error, <<"agent invalid">>}), ok. +-spec decode_container_command(message_pb:'Command.Container'()) -> map(). +decode_container_command(#'Command.Container'{action = {list, #'Command.Container.ContainerList'{}}}) -> + #{<<"action">> => <<"list">>}; +decode_container_command(#'Command.Container'{action = {deploy, #'Command.Container.ContainerDeploy'{task_id = TaskId, params = Params}}}) -> + #{<<"action">> => <<"deploy">>, <<"task_id">> => TaskId, <<"params">> => decode_term_payload(Params)}; +decode_container_command(#'Command.Container'{action = {start, #'Command.Container.ContainerStart'{target = Target}}}) -> + #{<<"action">> => <<"start">>, <<"target">> => decode_container_target(Target)}; +decode_container_command(#'Command.Container'{action = {stop, #'Command.Container.ContainerStop'{target = Target, timeout_seconds = TimeoutSeconds}}}) -> + #{<<"action">> => <<"stop">>, <<"target">> => decode_container_target(Target), <<"timeout_seconds">> => TimeoutSeconds}; +decode_container_command(#'Command.Container'{action = {kill, #'Command.Container.ContainerKill'{target = Target, signal = Signal}}}) -> + #{<<"action">> => <<"kill">>, <<"target">> => decode_container_target(Target), <<"signal">> => Signal}; +decode_container_command(#'Command.Container'{action = {remove, #'Command.Container.ContainerRemove'{target = Target, force = Force, remove_volumes = RemoveVolumes}}}) -> + #{<<"action">> => <<"remove">>, <<"target">> => decode_container_target(Target), <<"force">> => Force, <<"remove_volumes">> => RemoveVolumes}; +decode_container_command(#'Command.Container'{action = {config, #'Command.Container.ContainerConfig'{target = Target, config = Config}}}) -> + #{<<"action">> => <<"config">>, <<"target">> => decode_container_target(Target), <<"config">> => Config}; +decode_container_command(Other) -> + #{<<"action">> => <<"invalid">>, <<"payload">> => safe_term(Other)}. + +-spec decode_container_target(message_pb:'Command.Container.ContainerTarget'() | undefined) -> map(). +decode_container_target(#'Command.Container.ContainerTarget'{name = Name, id = Id}) -> + #{<<"name">> => iolist_to_binary(Name), <<"id">> => iolist_to_binary(Id)}; +decode_container_target(undefined) -> + #{<<"name">> => <<>>, <<"id">> => <<>>}. + +-spec decode_term_payload(iodata()) -> term(). +decode_term_payload(Payload) -> + Bin = iolist_to_binary(Payload), + try binary_to_term(Bin, [safe]) of + Term -> + Term + catch + error:_ -> + Bin + end. + %% iot 发起 open 时不携带参数;efka 固定按本地 stream_target 建连。 -spec handle_stream_frame(term(), term(), #state{}) -> gen_statem:event_handler_result(atom(), #state{}). -handle_stream_frame(StreamId, <<"open">>, State = #state{streams = Streams}) +handle_stream_frame(StreamId, open, State = #state{streams = Streams}) when is_integer(StreamId), StreamId > 0 -> case valid_iot_stream_id(StreamId) andalso not maps:is_key(StreamId, Streams) of true -> @@ -461,11 +606,9 @@ handle_stream_frame(StreamId, <<"open">>, State = #state{streams = Streams}) StreamState = #stream_state{worker_pid = WorkerPid, monitor_ref = MonitorRef}, {keep_state, State#state{streams = maps:put(StreamId, StreamState, Streams)}}; false -> - send_stream(StreamId, {<<"reset">>, <<"invalid stream open">>}), + send_stream(StreamId, {reset, <<"invalid stream open">>}), {keep_state, State} end; -handle_stream_frame(StreamId, {<<"open">>, _Params}, State) -> - handle_stream_frame(StreamId, <<"open">>, State); handle_stream_frame(StreamId, Body, State = #state{streams = Streams}) when is_integer(StreamId), StreamId > 0 -> case maps:get(StreamId, Streams, undefined) of @@ -475,7 +618,7 @@ handle_stream_frame(StreamId, Body, State = #state{streams = Streams}) StreamState = #stream_state{worker_pid = WorkerPid} -> WorkerPid ! {stream, StreamId, Body}, case Body of - {<<"reset">>, _Reason} -> + {reset, _Reason} -> demonitor_stream(StreamState), {keep_state, State#state{streams = maps:remove(StreamId, Streams)}}; _ -> @@ -487,14 +630,14 @@ handle_stream_frame(StreamId, Body, State) -> {keep_state, State}. -spec maybe_reset_unknown_stream(stream_id(), term()) -> ok. -maybe_reset_unknown_stream(_StreamId, {<<"reset">>, _Reason}) -> +maybe_reset_unknown_stream(_StreamId, {reset, _Reason}) -> ok; -maybe_reset_unknown_stream(_StreamId, <<"fin">>) -> +maybe_reset_unknown_stream(_StreamId, fin) -> ok; -maybe_reset_unknown_stream(_StreamId, {<<"open_error">>, _Reason}) -> +maybe_reset_unknown_stream(_StreamId, {open_error, _Reason}) -> ok; maybe_reset_unknown_stream(StreamId, _Body) -> - send_stream(StreamId, {<<"reset">>, <<"unknown stream">>}). + send_stream(StreamId, {reset, <<"unknown stream">>}). -spec valid_iot_stream_id(stream_id()) -> boolean(). valid_iot_stream_id(StreamId) -> @@ -519,7 +662,7 @@ take_stream_by_monitor(MonitorRef, WorkerPid, Iter, Streams) -> close_all_streams(Reason, State = #state{streams = Streams}) -> maps:foreach(fun(StreamId, StreamState = #stream_state{worker_pid = WorkerPid}) -> demonitor_stream(StreamState), - WorkerPid ! {stream, StreamId, {<<"reset">>, {<<"channel_closed">>, safe_term(Reason)}}} + WorkerPid ! {stream, StreamId, {reset, {channel_closed, Reason}}} end, Streams), State#state{streams = #{}}. @@ -528,13 +671,32 @@ demonitor_stream(#stream_state{monitor_ref = MonitorRef}) -> erlang:demonitor(MonitorRef, [flush]), ok. --spec safe_reply(term()) -> term(). -safe_reply(ok) -> - <<"ok">>; -safe_reply({ok, Result}) -> - {<<"ok">>, safe_term(Result)}; -safe_reply({error, Reason}) -> - {<<"error">>, safe_term(Reason)}. +-spec reply_to_binary(term()) -> binary(). +reply_to_binary(Value) when is_binary(Value) -> + Value; +reply_to_binary(Value) -> + SafeValue = safe_term(Value), + try iolist_to_binary(Value) of + Bin -> + Bin + catch + _:_ -> + try iolist_to_binary(json:encode(SafeValue)) of + JsonBin -> + JsonBin + catch + _:_ -> + term_to_binary(SafeValue) + end + end. + +-spec reason_to_binary(term()) -> binary(). +reason_to_binary(Reason) when is_binary(Reason) -> + Reason; +reason_to_binary(Reason) when is_list(Reason) -> + iolist_to_binary(Reason); +reason_to_binary(Reason) -> + term_to_binary(safe_term(Reason)). -spec safe_term(term()) -> term(). safe_term(true) -> diff --git a/apps/efka/src/iot/efka_iot_stream.erl b/apps/efka/src/iot/efka_iot_stream.erl index 1d7f768..111563f 100644 --- a/apps/efka/src/iot/efka_iot_stream.erl +++ b/apps/efka/src/iot/efka_iot_stream.erl @@ -1,7 +1,7 @@ %%%------------------------------------------------------------------- %%% @doc One transparent TCP stream from iot to the local manager service. %%% The iot/efka protocol does not inspect HTTP; all HTTP bytes are carried -%%% in <<"data">> frames. +%%% in data frames. %%% @end %%%------------------------------------------------------------------- -module(efka_iot_stream). @@ -27,7 +27,7 @@ run(StreamId) when is_integer(StreamId), StreamId > 0 -> Class:Reason:Stack -> logger:warning("[efka_iot_stream] stream_id: ~p crashed, class: ~p, reason: ~p, stack: ~p", [StreamId, Class, Reason, Stack]), - efka_iot_client:send_stream(StreamId, {<<"reset">>, safe_term({Class, Reason})}), + efka_iot_client:send_stream(StreamId, {reset, safe_term({Class, Reason})}), ok after efka_iot_client:stream_done(StreamId) @@ -37,11 +37,11 @@ run(StreamId) when is_integer(StreamId), StreamId > 0 -> run0(StreamId) -> case open_target_socket() of {ok, Socket, IdleTimeout} -> - efka_iot_client:send_stream(StreamId, <<"opened">>), + efka_iot_client:send_stream(StreamId, opened), ok = inet:setopts(Socket, [{active, once}]), loop(StreamId, Socket, IdleTimeout); {error, Reason} -> - efka_iot_client:send_stream(StreamId, {<<"open_error">>, safe_term(Reason)}), + efka_iot_client:send_stream(StreamId, {open_error, safe_term(Reason)}), ok end. @@ -69,34 +69,34 @@ open_target_socket() -> -spec loop(stream_id(), gen_tcp:socket(), timeout()) -> ok. loop(StreamId, Socket, IdleTimeout) -> receive - {stream, StreamId, {<<"data">>, Data}} when is_binary(Data) -> + {stream, StreamId, {data, Data}} when is_binary(Data) -> case gen_tcp:send(Socket, Data) of ok -> loop(StreamId, Socket, IdleTimeout); {error, Reason} -> - efka_iot_client:send_stream(StreamId, {<<"reset">>, safe_term(Reason)}), + efka_iot_client:send_stream(StreamId, {reset, safe_term(Reason)}), close_socket(Socket) end; - {stream, StreamId, <<"fin">>} -> + {stream, StreamId, fin} -> _ = gen_tcp:shutdown(Socket, write), loop(StreamId, Socket, IdleTimeout); - {stream, StreamId, {<<"reset">>, _Reason}} -> + {stream, StreamId, {reset, _Reason}} -> close_socket(Socket); {tcp, Socket, Data} -> - efka_iot_client:send_stream(StreamId, {<<"data">>, Data}), + efka_iot_client:send_stream(StreamId, {data, Data}), ok = inet:setopts(Socket, [{active, once}]), loop(StreamId, Socket, IdleTimeout); {tcp_closed, Socket} -> - efka_iot_client:send_stream(StreamId, <<"fin">>), + efka_iot_client:send_stream(StreamId, fin), close_socket(Socket); {tcp_error, Socket, Reason} -> - efka_iot_client:send_stream(StreamId, {<<"reset">>, safe_term(Reason)}), + efka_iot_client:send_stream(StreamId, {reset, safe_term(Reason)}), close_socket(Socket); Info -> logger:debug("[efka_iot_stream] stream_id: ~p ignore unknown info: ~p", [StreamId, Info]), loop(StreamId, Socket, IdleTimeout) after IdleTimeout -> - efka_iot_client:send_stream(StreamId, {<<"reset">>, <<"idle_timeout">>}), + efka_iot_client:send_stream(StreamId, {reset, <<"idle_timeout">>}), close_socket(Socket) end. diff --git a/apps/efka/src/protobuf/message_pb.erl b/apps/efka/src/protobuf/message_pb.erl new file mode 100644 index 0000000..97f8e1a --- /dev/null +++ b/apps/efka/src/protobuf/message_pb.erl @@ -0,0 +1,4219 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically @generated, do not edit +%% Generated by gpb_compile version 4.21.7 +%% Version source: file +-module(message_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("message_pb.hrl"). +-include_lib("gpb/include/gpb.hrl"). + +%% enumerated types + +-export_type([]). + +%% message types +-type 'Request.AuthRequest'() :: #'Request.AuthRequest'{}. + +-type 'Request'() :: #'Request'{}. + +-type 'Response.Error'() :: #'Response.Error'{}. + +-type 'Response.AuthResponse'() :: #'Response.AuthResponse'{}. + +-type 'Response'() :: #'Response'{}. + +-type 'Command.Container'() :: #'Command.Container'{}. + +-type 'Command.Container.ContainerConfig'() :: #'Command.Container.ContainerConfig'{}. + +-type 'Command.Container.ContainerRemove'() :: #'Command.Container.ContainerRemove'{}. + +-type 'Command.Container.ContainerKill'() :: #'Command.Container.ContainerKill'{}. + +-type 'Command.Container.ContainerStop'() :: #'Command.Container.ContainerStop'{}. + +-type 'Command.Container.ContainerStart'() :: #'Command.Container.ContainerStart'{}. + +-type 'Command.Container.ContainerDeploy'() :: #'Command.Container.ContainerDeploy'{}. + +-type 'Command.Container.ContainerList'() :: #'Command.Container.ContainerList'{}. + +-type 'Command.Container.ContainerTarget'() :: #'Command.Container.ContainerTarget'{}. + +-type 'Command'() :: #'Command'{}. + +-type 'CommandResponse.Error'() :: #'CommandResponse.Error'{}. + +-type 'CommandResponse'() :: #'CommandResponse'{}. + +-type 'Message.Ping'() :: #'Message.Ping'{}. + +-type 'Message.Pong'() :: #'Message.Pong'{}. + +-type 'Message.Pub'() :: #'Message.Pub'{}. + +-type 'Message.MetricData'() :: #'Message.MetricData'{}. + +-type 'Message.TaskEvent'() :: #'Message.TaskEvent'{}. + +-type 'Message'() :: #'Message'{}. + +-type 'Stream.Open'() :: #'Stream.Open'{}. + +-type 'Stream.Opened'() :: #'Stream.Opened'{}. + +-type 'Stream.OpenError'() :: #'Stream.OpenError'{}. + +-type 'Stream.Data'() :: #'Stream.Data'{}. + +-type 'Stream.Fin'() :: #'Stream.Fin'{}. + +-type 'Stream.Reset'() :: #'Stream.Reset'{}. + +-type 'Stream'() :: #'Stream'{}. + +-export_type(['Request.AuthRequest'/0, 'Request'/0, 'Response.Error'/0, 'Response.AuthResponse'/0, 'Response'/0, 'Command.Container'/0, 'Command.Container.ContainerConfig'/0, 'Command.Container.ContainerRemove'/0, 'Command.Container.ContainerKill'/0, 'Command.Container.ContainerStop'/0, 'Command.Container.ContainerStart'/0, 'Command.Container.ContainerDeploy'/0, 'Command.Container.ContainerList'/0, 'Command.Container.ContainerTarget'/0, 'Command'/0, 'CommandResponse.Error'/0, 'CommandResponse'/0, 'Message.Ping'/0, 'Message.Pong'/0, 'Message.Pub'/0, 'Message.MetricData'/0, 'Message.TaskEvent'/0, 'Message'/0, 'Stream.Open'/0, 'Stream.Opened'/0, 'Stream.OpenError'/0, 'Stream.Data'/0, 'Stream.Fin'/0, 'Stream.Reset'/0, 'Stream'/0]). +-type '$msg_name'() :: 'Request.AuthRequest' | 'Request' | 'Response.Error' | 'Response.AuthResponse' | 'Response' | 'Command.Container' | 'Command.Container.ContainerConfig' | 'Command.Container.ContainerRemove' | 'Command.Container.ContainerKill' | 'Command.Container.ContainerStop' | 'Command.Container.ContainerStart' | 'Command.Container.ContainerDeploy' | 'Command.Container.ContainerList' | 'Command.Container.ContainerTarget' | 'Command' | 'CommandResponse.Error' | 'CommandResponse' | 'Message.Ping' | 'Message.Pong' | 'Message.Pub' | 'Message.MetricData' | 'Message.TaskEvent' | 'Message' | 'Stream.Open' | 'Stream.Opened' | 'Stream.OpenError' | 'Stream.Data' | 'Stream.Fin' | 'Stream.Reset' | 'Stream'. +-type '$msg'() :: 'Request.AuthRequest'() | 'Request'() | 'Response.Error'() | 'Response.AuthResponse'() | 'Response'() | 'Command.Container'() | 'Command.Container.ContainerConfig'() | 'Command.Container.ContainerRemove'() | 'Command.Container.ContainerKill'() | 'Command.Container.ContainerStop'() | 'Command.Container.ContainerStart'() | 'Command.Container.ContainerDeploy'() | 'Command.Container.ContainerList'() | 'Command.Container.ContainerTarget'() | 'Command'() | 'CommandResponse.Error'() | 'CommandResponse'() | 'Message.Ping'() | 'Message.Pong'() | 'Message.Pub'() | 'Message.MetricData'() | 'Message.TaskEvent'() | 'Message'() | 'Stream.Open'() | 'Stream.Opened'() | 'Stream.OpenError'() | 'Stream.Data'() | 'Stream.Fin'() | 'Stream.Reset'() | 'Stream'(). +-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 + 'Request.AuthRequest' -> 'encode_msg_Request.AuthRequest'(id(Msg, TrUserData), TrUserData); + 'Request' -> encode_msg_Request(id(Msg, TrUserData), TrUserData); + 'Response.Error' -> 'encode_msg_Response.Error'(id(Msg, TrUserData), TrUserData); + 'Response.AuthResponse' -> 'encode_msg_Response.AuthResponse'(id(Msg, TrUserData), TrUserData); + 'Response' -> encode_msg_Response(id(Msg, TrUserData), TrUserData); + 'Command.Container' -> 'encode_msg_Command.Container'(id(Msg, TrUserData), TrUserData); + 'Command.Container.ContainerConfig' -> 'encode_msg_Command.Container.ContainerConfig'(id(Msg, TrUserData), TrUserData); + 'Command.Container.ContainerRemove' -> 'encode_msg_Command.Container.ContainerRemove'(id(Msg, TrUserData), TrUserData); + 'Command.Container.ContainerKill' -> 'encode_msg_Command.Container.ContainerKill'(id(Msg, TrUserData), TrUserData); + 'Command.Container.ContainerStop' -> 'encode_msg_Command.Container.ContainerStop'(id(Msg, TrUserData), TrUserData); + 'Command.Container.ContainerStart' -> 'encode_msg_Command.Container.ContainerStart'(id(Msg, TrUserData), TrUserData); + 'Command.Container.ContainerDeploy' -> 'encode_msg_Command.Container.ContainerDeploy'(id(Msg, TrUserData), TrUserData); + 'Command.Container.ContainerList' -> 'encode_msg_Command.Container.ContainerList'(id(Msg, TrUserData), TrUserData); + 'Command.Container.ContainerTarget' -> 'encode_msg_Command.Container.ContainerTarget'(id(Msg, TrUserData), TrUserData); + 'Command' -> encode_msg_Command(id(Msg, TrUserData), TrUserData); + 'CommandResponse.Error' -> 'encode_msg_CommandResponse.Error'(id(Msg, TrUserData), TrUserData); + 'CommandResponse' -> encode_msg_CommandResponse(id(Msg, TrUserData), TrUserData); + 'Message.Ping' -> 'encode_msg_Message.Ping'(id(Msg, TrUserData), TrUserData); + 'Message.Pong' -> 'encode_msg_Message.Pong'(id(Msg, TrUserData), TrUserData); + 'Message.Pub' -> 'encode_msg_Message.Pub'(id(Msg, TrUserData), TrUserData); + 'Message.MetricData' -> 'encode_msg_Message.MetricData'(id(Msg, TrUserData), TrUserData); + 'Message.TaskEvent' -> 'encode_msg_Message.TaskEvent'(id(Msg, TrUserData), TrUserData); + 'Message' -> encode_msg_Message(id(Msg, TrUserData), TrUserData); + 'Stream.Open' -> 'encode_msg_Stream.Open'(id(Msg, TrUserData), TrUserData); + 'Stream.Opened' -> 'encode_msg_Stream.Opened'(id(Msg, TrUserData), TrUserData); + 'Stream.OpenError' -> 'encode_msg_Stream.OpenError'(id(Msg, TrUserData), TrUserData); + 'Stream.Data' -> 'encode_msg_Stream.Data'(id(Msg, TrUserData), TrUserData); + 'Stream.Fin' -> 'encode_msg_Stream.Fin'(id(Msg, TrUserData), TrUserData); + 'Stream.Reset' -> 'encode_msg_Stream.Reset'(id(Msg, TrUserData), TrUserData); + 'Stream' -> encode_msg_Stream(id(Msg, TrUserData), TrUserData) + end. + + +'encode_msg_Request.AuthRequest'(Msg, TrUserData) -> 'encode_msg_Request.AuthRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Request.AuthRequest'(#'Request.AuthRequest'{uuid = F1, token = F2, timestamp = F3}, 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, + B2 = 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, + if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> e_varint(TrF3, <>, TrUserData) + end + end + end. + +encode_msg_Request(Msg, TrUserData) -> encode_msg_Request(Msg, <<>>, TrUserData). + + +encode_msg_Request(#'Request'{packet_id = F1, body = 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 {auth_request, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_Request_auth_request(TrTF2, <>, TrUserData) end end + end. + +'encode_msg_Response.Error'(Msg, TrUserData) -> 'encode_msg_Response.Error'(Msg, <<>>, TrUserData). + + +'encode_msg_Response.Error'(#'Response.Error'{code = F1, reason = 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 -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end + end. + +'encode_msg_Response.AuthResponse'(_Msg, _TrUserData) -> <<>>. + +encode_msg_Response(Msg, TrUserData) -> encode_msg_Response(Msg, <<>>, TrUserData). + + +encode_msg_Response(#'Response'{packet_id = F1, body = 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 + {auth_response, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_Response_auth_response(TrTF2, <>, TrUserData) end; + {error, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_Response_error(TrTF2, <>, TrUserData) end + end + end. + +'encode_msg_Command.Container'(Msg, TrUserData) -> 'encode_msg_Command.Container'(Msg, <<>>, TrUserData). + + +'encode_msg_Command.Container'(#'Command.Container'{action = F1}, Bin, TrUserData) -> + if F1 =:= undefined -> Bin; + true -> + case id(F1, TrUserData) of + {list, TF1} -> begin TrTF1 = id(TF1, TrUserData), 'e_mfield_Command.Container_list'(TrTF1, <>, TrUserData) end; + {deploy, TF1} -> begin TrTF1 = id(TF1, TrUserData), 'e_mfield_Command.Container_deploy'(TrTF1, <>, TrUserData) end; + {start, TF1} -> begin TrTF1 = id(TF1, TrUserData), 'e_mfield_Command.Container_start'(TrTF1, <>, TrUserData) end; + {stop, TF1} -> begin TrTF1 = id(TF1, TrUserData), 'e_mfield_Command.Container_stop'(TrTF1, <>, TrUserData) end; + {kill, TF1} -> begin TrTF1 = id(TF1, TrUserData), 'e_mfield_Command.Container_kill'(TrTF1, <>, TrUserData) end; + {remove, TF1} -> begin TrTF1 = id(TF1, TrUserData), 'e_mfield_Command.Container_remove'(TrTF1, <>, TrUserData) end; + {config, TF1} -> begin TrTF1 = id(TF1, TrUserData), 'e_mfield_Command.Container_config'(TrTF1, <>, TrUserData) end + end + end. + +'encode_msg_Command.Container.ContainerConfig'(Msg, TrUserData) -> 'encode_msg_Command.Container.ContainerConfig'(Msg, <<>>, TrUserData). + + +'encode_msg_Command.Container.ContainerConfig'(#'Command.Container.ContainerConfig'{target = F1, config = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> 'e_mfield_Command.Container.ContainerConfig_target'(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_Command.Container.ContainerRemove'(Msg, TrUserData) -> 'encode_msg_Command.Container.ContainerRemove'(Msg, <<>>, TrUserData). + + +'encode_msg_Command.Container.ContainerRemove'(#'Command.Container.ContainerRemove'{target = F1, force = F2, remove_volumes = F3}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> 'e_mfield_Command.Container.ContainerRemove_target'(TrF1, <>, TrUserData) + end + end + end, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= false -> B1; + true -> e_type_bool(TrF2, <>, TrUserData) + end + end + end, + if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= false -> B2; + true -> e_type_bool(TrF3, <>, TrUserData) + end + end + end. + +'encode_msg_Command.Container.ContainerKill'(Msg, TrUserData) -> 'encode_msg_Command.Container.ContainerKill'(Msg, <<>>, TrUserData). + + +'encode_msg_Command.Container.ContainerKill'(#'Command.Container.ContainerKill'{target = F1, signal = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> 'e_mfield_Command.Container.ContainerKill_target'(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_Command.Container.ContainerStop'(Msg, TrUserData) -> 'encode_msg_Command.Container.ContainerStop'(Msg, <<>>, TrUserData). + + +'encode_msg_Command.Container.ContainerStop'(#'Command.Container.ContainerStop'{target = F1, timeout_seconds = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> 'e_mfield_Command.Container.ContainerStop_target'(TrF1, <>, TrUserData) + end + end + end, + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end + end. + +'encode_msg_Command.Container.ContainerStart'(Msg, TrUserData) -> 'encode_msg_Command.Container.ContainerStart'(Msg, <<>>, TrUserData). + + +'encode_msg_Command.Container.ContainerStart'(#'Command.Container.ContainerStart'{target = F1}, Bin, TrUserData) -> + if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> 'e_mfield_Command.Container.ContainerStart_target'(TrF1, <>, TrUserData) + end + end + end. + +'encode_msg_Command.Container.ContainerDeploy'(Msg, TrUserData) -> 'encode_msg_Command.Container.ContainerDeploy'(Msg, <<>>, TrUserData). + + +'encode_msg_Command.Container.ContainerDeploy'(#'Command.Container.ContainerDeploy'{task_id = F1, params = 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 -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end + end. + +'encode_msg_Command.Container.ContainerList'(_Msg, _TrUserData) -> <<>>. + +'encode_msg_Command.Container.ContainerTarget'(Msg, TrUserData) -> 'encode_msg_Command.Container.ContainerTarget'(Msg, <<>>, TrUserData). + + +'encode_msg_Command.Container.ContainerTarget'(#'Command.Container.ContainerTarget'{name = F1, id = 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_Command(Msg, TrUserData) -> encode_msg_Command(Msg, <<>>, TrUserData). + + +encode_msg_Command(#'Command'{packet_id = F1, body = 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 {container, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_Command_container(TrTF2, <>, TrUserData) end end + end. + +'encode_msg_CommandResponse.Error'(Msg, TrUserData) -> 'encode_msg_CommandResponse.Error'(Msg, <<>>, TrUserData). + + +'encode_msg_CommandResponse.Error'(#'CommandResponse.Error'{code = F1, reason = 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 -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end + end. + +encode_msg_CommandResponse(Msg, TrUserData) -> encode_msg_CommandResponse(Msg, <<>>, TrUserData). + + +encode_msg_CommandResponse(#'CommandResponse'{packet_id = F1, body = 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_CommandResponse_error(TrTF2, <>, TrUserData) end + end + end. + +'encode_msg_Message.Ping'(_Msg, _TrUserData) -> <<>>. + +'encode_msg_Message.Pong'(_Msg, _TrUserData) -> <<>>. + +'encode_msg_Message.Pub'(Msg, TrUserData) -> 'encode_msg_Message.Pub'(Msg, <<>>, TrUserData). + + +'encode_msg_Message.Pub'(#'Message.Pub'{topic = F1, qos = F2, content = F3}, 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, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end + end, + if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end + end. + +'encode_msg_Message.MetricData'(Msg, TrUserData) -> 'encode_msg_Message.MetricData'(Msg, <<>>, TrUserData). + + +'encode_msg_Message.MetricData'(#'Message.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_Message.TaskEvent'(Msg, TrUserData) -> 'encode_msg_Message.TaskEvent'(Msg, <<>>, TrUserData). + + +'encode_msg_Message.TaskEvent'(#'Message.TaskEvent'{task_id = F1, type = F2, stream = F3}, 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, + B2 = 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, + if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end + end. + +encode_msg_Message(Msg, TrUserData) -> encode_msg_Message(Msg, <<>>, TrUserData). + + +encode_msg_Message(#'Message'{body = F1}, Bin, TrUserData) -> + if F1 =:= undefined -> Bin; + true -> + case id(F1, TrUserData) of + {ping, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_Message_ping(TrTF1, <>, TrUserData) end; + {pong, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_Message_pong(TrTF1, <>, TrUserData) end; + {pub, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_Message_pub(TrTF1, <>, TrUserData) end; + {metric_data, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_Message_metric_data(TrTF1, <>, TrUserData) end; + {task_event, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_Message_task_event(TrTF1, <>, TrUserData) end + end + end. + +'encode_msg_Stream.Open'(_Msg, _TrUserData) -> <<>>. + +'encode_msg_Stream.Opened'(_Msg, _TrUserData) -> <<>>. + +'encode_msg_Stream.OpenError'(Msg, TrUserData) -> 'encode_msg_Stream.OpenError'(Msg, <<>>, TrUserData). + + +'encode_msg_Stream.OpenError'(#'Stream.OpenError'{reason = F1}, Bin, TrUserData) -> + 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. + +'encode_msg_Stream.Data'(Msg, TrUserData) -> 'encode_msg_Stream.Data'(Msg, <<>>, TrUserData). + + +'encode_msg_Stream.Data'(#'Stream.Data'{bytes = F1}, Bin, TrUserData) -> + 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. + +'encode_msg_Stream.Fin'(_Msg, _TrUserData) -> <<>>. + +'encode_msg_Stream.Reset'(Msg, TrUserData) -> 'encode_msg_Stream.Reset'(Msg, <<>>, TrUserData). + + +'encode_msg_Stream.Reset'(#'Stream.Reset'{reason = F1}, Bin, TrUserData) -> + 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. + +encode_msg_Stream(Msg, TrUserData) -> encode_msg_Stream(Msg, <<>>, TrUserData). + + +encode_msg_Stream(#'Stream'{stream_id = F1, payload = 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 + {open, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_Stream_open(TrTF2, <>, TrUserData) end; + {opened, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_Stream_opened(TrTF2, <>, TrUserData) end; + {open_error, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_Stream_open_error(TrTF2, <>, TrUserData) end; + {data, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_Stream_data(TrTF2, <>, TrUserData) end; + {fin, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_Stream_fin(TrTF2, <>, TrUserData) end; + {reset, TF2} -> begin TrTF2 = id(TF2, TrUserData), e_mfield_Stream_reset(TrTF2, <>, TrUserData) end + end + end. + +e_mfield_Request_auth_request(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Request.AuthRequest'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_Response_auth_response(_Msg, Bin, _TrUserData) -> <>. + +e_mfield_Response_error(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Response.Error'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Command.Container_list'(_Msg, Bin, _TrUserData) -> <>. + +'e_mfield_Command.Container_deploy'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container.ContainerDeploy'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Command.Container_start'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container.ContainerStart'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Command.Container_stop'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container.ContainerStop'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Command.Container_kill'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container.ContainerKill'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Command.Container_remove'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container.ContainerRemove'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Command.Container_config'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container.ContainerConfig'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Command.Container.ContainerConfig_target'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container.ContainerTarget'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Command.Container.ContainerRemove_target'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container.ContainerTarget'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Command.Container.ContainerKill_target'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container.ContainerTarget'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Command.Container.ContainerStop_target'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container.ContainerTarget'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Command.Container.ContainerStart_target'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container.ContainerTarget'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_Command_container(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Command.Container'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_CommandResponse_error(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_CommandResponse.Error'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_Message_ping(_Msg, Bin, _TrUserData) -> <>. + +e_mfield_Message_pong(_Msg, Bin, _TrUserData) -> <>. + +e_mfield_Message_pub(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Message.Pub'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_Message_metric_data(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Message.MetricData'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_Message_task_event(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Message.TaskEvent'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_Stream_open(_Msg, Bin, _TrUserData) -> <>. + +e_mfield_Stream_opened(_Msg, Bin, _TrUserData) -> <>. + +e_mfield_Stream_open_error(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Stream.OpenError'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_Stream_data(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Stream.Data'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_mfield_Stream_fin(_Msg, Bin, _TrUserData) -> <>. + +e_mfield_Stream_reset(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_Stream.Reset'(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). + + +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('Request.AuthRequest', Bin, TrUserData) -> id('decode_msg_Request.AuthRequest'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Request', Bin, TrUserData) -> id(decode_msg_Request(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Response.Error', Bin, TrUserData) -> id('decode_msg_Response.Error'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Response.AuthResponse', Bin, TrUserData) -> id('decode_msg_Response.AuthResponse'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Response', Bin, TrUserData) -> id(decode_msg_Response(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Command.Container', Bin, TrUserData) -> id('decode_msg_Command.Container'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Command.Container.ContainerConfig', Bin, TrUserData) -> id('decode_msg_Command.Container.ContainerConfig'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Command.Container.ContainerRemove', Bin, TrUserData) -> id('decode_msg_Command.Container.ContainerRemove'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Command.Container.ContainerKill', Bin, TrUserData) -> id('decode_msg_Command.Container.ContainerKill'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Command.Container.ContainerStop', Bin, TrUserData) -> id('decode_msg_Command.Container.ContainerStop'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Command.Container.ContainerStart', Bin, TrUserData) -> id('decode_msg_Command.Container.ContainerStart'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Command.Container.ContainerDeploy', Bin, TrUserData) -> id('decode_msg_Command.Container.ContainerDeploy'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Command.Container.ContainerList', Bin, TrUserData) -> id('decode_msg_Command.Container.ContainerList'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Command.Container.ContainerTarget', Bin, TrUserData) -> id('decode_msg_Command.Container.ContainerTarget'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Command', Bin, TrUserData) -> id(decode_msg_Command(Bin, TrUserData), TrUserData); +decode_msg_2_doit('CommandResponse.Error', Bin, TrUserData) -> id('decode_msg_CommandResponse.Error'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('CommandResponse', Bin, TrUserData) -> id(decode_msg_CommandResponse(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Message.Ping', Bin, TrUserData) -> id('decode_msg_Message.Ping'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Message.Pong', Bin, TrUserData) -> id('decode_msg_Message.Pong'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Message.Pub', Bin, TrUserData) -> id('decode_msg_Message.Pub'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Message.MetricData', Bin, TrUserData) -> id('decode_msg_Message.MetricData'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Message.TaskEvent', Bin, TrUserData) -> id('decode_msg_Message.TaskEvent'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Message', Bin, TrUserData) -> id(decode_msg_Message(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Stream.Open', Bin, TrUserData) -> id('decode_msg_Stream.Open'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Stream.Opened', Bin, TrUserData) -> id('decode_msg_Stream.Opened'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Stream.OpenError', Bin, TrUserData) -> id('decode_msg_Stream.OpenError'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Stream.Data', Bin, TrUserData) -> id('decode_msg_Stream.Data'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Stream.Fin', Bin, TrUserData) -> id('decode_msg_Stream.Fin'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Stream.Reset', Bin, TrUserData) -> id('decode_msg_Stream.Reset'(Bin, TrUserData), TrUserData); +decode_msg_2_doit('Stream', Bin, TrUserData) -> id(decode_msg_Stream(Bin, TrUserData), TrUserData). + + + +'decode_msg_Request.AuthRequest'(Bin, TrUserData) -> 'dfp_read_field_def_Request.AuthRequest'(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Request.AuthRequest'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Request.AuthRequest_uuid'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Request.AuthRequest'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Request.AuthRequest_token'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Request.AuthRequest'(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Request.AuthRequest_timestamp'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Request.AuthRequest'(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #'Request.AuthRequest'{uuid = F@_1, token = F@_2, timestamp = F@_3}; +'dfp_read_field_def_Request.AuthRequest'(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dg_read_field_def_Request.AuthRequest'(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Request.AuthRequest'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Request.AuthRequest'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'dg_read_field_def_Request.AuthRequest'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Request.AuthRequest_uuid'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 18 -> 'd_field_Request.AuthRequest_token'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 24 -> 'd_field_Request.AuthRequest_timestamp'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Request.AuthRequest'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 1 -> 'skip_64_Request.AuthRequest'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 2 -> 'skip_length_delimited_Request.AuthRequest'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 3 -> 'skip_group_Request.AuthRequest'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 5 -> 'skip_32_Request.AuthRequest'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Request.AuthRequest'(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #'Request.AuthRequest'{uuid = F@_1, token = F@_2, timestamp = F@_3}. + +'d_field_Request.AuthRequest_uuid'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'd_field_Request.AuthRequest_uuid'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Request.AuthRequest_uuid'(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_Request.AuthRequest'(RestF, 0, 0, F, NewFValue, F@_2, F@_3, TrUserData). + +'d_field_Request.AuthRequest_token'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'd_field_Request.AuthRequest_token'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Request.AuthRequest_token'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_Request.AuthRequest'(RestF, 0, 0, F, F@_1, NewFValue, F@_3, TrUserData). + +'d_field_Request.AuthRequest_timestamp'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'd_field_Request.AuthRequest_timestamp'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Request.AuthRequest_timestamp'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 18446744073709551615, TrUserData), Rest}, + 'dfp_read_field_def_Request.AuthRequest'(RestF, 0, 0, F, F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_Request.AuthRequest'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'skip_varint_Request.AuthRequest'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Request.AuthRequest'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Request.AuthRequest'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Request.AuthRequest'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'skip_length_delimited_Request.AuthRequest'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'skip_length_delimited_Request.AuthRequest'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Request.AuthRequest'(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Request.AuthRequest'(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Request.AuthRequest'(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Request.AuthRequest'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Request.AuthRequest'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Request.AuthRequest'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Request.AuthRequest'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +decode_msg_Request(Bin, TrUserData) -> dfp_read_field_def_Request(Bin, 0, 0, 0, id(0, TrUserData), id(undefined, TrUserData), TrUserData). + +dfp_read_field_def_Request(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Request_packet_id(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Request(<<82, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Request_auth_request(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Request(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Request'{packet_id = F@_1, body = F@_2}; +dfp_read_field_def_Request(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_Request(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_Request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_Request(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_Request(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_Request_packet_id(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 82 -> d_field_Request_auth_request(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_Request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_Request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_Request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_Request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_Request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_Request(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Request'{packet_id = F@_1, body = F@_2}. + +d_field_Request_packet_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Request_packet_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Request_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_Request(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_Request_auth_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Request_auth_request(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Request_auth_request(<<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_Request.AuthRequest'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Request(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({auth_request, NewFValue}, TrUserData); + {auth_request, MVPrev} -> id({auth_request, 'merge_msg_Request.AuthRequest'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({auth_request, NewFValue}, TrUserData) + end, + TrUserData). + +skip_varint_Request(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_Request(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_Request(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Request(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_Request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_Request(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_Request(<<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_Request(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_Request(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_Request(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_Request(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Request(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_Request(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Request(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_Response.Error'(Bin, TrUserData) -> 'dfp_read_field_def_Response.Error'(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Response.Error'(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Response.Error_code'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Response.Error'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Response.Error_reason'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Response.Error'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Response.Error'{code = F@_1, reason = F@_2}; +'dfp_read_field_def_Response.Error'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_Response.Error'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Response.Error'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Response.Error'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_Response.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_Response.Error_code'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> 'd_field_Response.Error_reason'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Response.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_Response.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_Response.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_Response.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_Response.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_Response.Error'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Response.Error'{code = F@_1, reason = F@_2}. + +'d_field_Response.Error_code'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Response.Error_code'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Response.Error_code'(<<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_Response.Error'(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +'d_field_Response.Error_reason'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Response.Error_reason'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Response.Error_reason'(<<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_Response.Error'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_Response.Error'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_Response.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_Response.Error'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Response.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Response.Error'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_Response.Error'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_Response.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_Response.Error'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_Response.Error'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Response.Error'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_Response.Error'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Response.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_Response.Error'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Response.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_Response.AuthResponse'(Bin, TrUserData) -> 'dfp_read_field_def_Response.AuthResponse'(Bin, 0, 0, 0, TrUserData). + +'dfp_read_field_def_Response.AuthResponse'(<<>>, 0, 0, _, _) -> #'Response.AuthResponse'{}; +'dfp_read_field_def_Response.AuthResponse'(Other, Z1, Z2, F, TrUserData) -> 'dg_read_field_def_Response.AuthResponse'(Other, Z1, Z2, F, TrUserData). + +'dg_read_field_def_Response.AuthResponse'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Response.AuthResponse'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'dg_read_field_def_Response.AuthResponse'(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> 'skip_varint_Response.AuthResponse'(Rest, 0, 0, Key bsr 3, TrUserData); + 1 -> 'skip_64_Response.AuthResponse'(Rest, 0, 0, Key bsr 3, TrUserData); + 2 -> 'skip_length_delimited_Response.AuthResponse'(Rest, 0, 0, Key bsr 3, TrUserData); + 3 -> 'skip_group_Response.AuthResponse'(Rest, 0, 0, Key bsr 3, TrUserData); + 5 -> 'skip_32_Response.AuthResponse'(Rest, 0, 0, Key bsr 3, TrUserData) + end; +'dg_read_field_def_Response.AuthResponse'(<<>>, 0, 0, _, _) -> #'Response.AuthResponse'{}. + +'skip_varint_Response.AuthResponse'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'skip_varint_Response.AuthResponse'(Rest, Z1, Z2, F, TrUserData); +'skip_varint_Response.AuthResponse'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Response.AuthResponse'(Rest, Z1, Z2, F, TrUserData). + +'skip_length_delimited_Response.AuthResponse'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 57 -> 'skip_length_delimited_Response.AuthResponse'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'skip_length_delimited_Response.AuthResponse'(<<0:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Response.AuthResponse'(Rest2, 0, 0, F, TrUserData). + +'skip_group_Response.AuthResponse'(Bin, _, Z2, FNum, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Response.AuthResponse'(Rest, 0, Z2, FNum, TrUserData). + +'skip_32_Response.AuthResponse'(<<_:32, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Response.AuthResponse'(Rest, Z1, Z2, F, TrUserData). + +'skip_64_Response.AuthResponse'(<<_:64, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Response.AuthResponse'(Rest, Z1, Z2, F, TrUserData). + +decode_msg_Response(Bin, TrUserData) -> dfp_read_field_def_Response(Bin, 0, 0, 0, id(0, TrUserData), id(undefined, TrUserData), TrUserData). + +dfp_read_field_def_Response(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Response_packet_id(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Response(<<82, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Response_auth_response(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Response(<<90, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Response_error(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Response(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Response'{packet_id = F@_1, body = F@_2}; +dfp_read_field_def_Response(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_Response(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_Response(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_Response(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_Response(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_Response_packet_id(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 82 -> d_field_Response_auth_response(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 90 -> d_field_Response_error(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_Response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_Response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_Response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_Response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_Response(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_Response(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Response'{packet_id = F@_1, body = F@_2}. + +d_field_Response_packet_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Response_packet_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Response_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_Response(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_Response_auth_response(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Response_auth_response(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Response_auth_response(<<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_Response.AuthResponse'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Response(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({auth_response, NewFValue}, TrUserData); + {auth_response, MVPrev} -> id({auth_response, 'merge_msg_Response.AuthResponse'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({auth_response, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_Response_error(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Response_error(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Response_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_Response.Error'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Response(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({error, NewFValue}, TrUserData); + {error, MVPrev} -> id({error, 'merge_msg_Response.Error'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({error, NewFValue}, TrUserData) + end, + TrUserData). + +skip_varint_Response(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_Response(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_Response(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Response(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_Response(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_Response(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_Response(<<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_Response(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_Response(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_Response(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_Response(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Response(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_Response(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Response(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_Command.Container'(Bin, TrUserData) -> 'dfp_read_field_def_Command.Container'(Bin, 0, 0, 0, id(undefined, TrUserData), TrUserData). + +'dfp_read_field_def_Command.Container'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_Command.Container_list'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_Command.Container'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_Command.Container_deploy'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_Command.Container'(<<26, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_Command.Container_start'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_Command.Container'(<<34, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_Command.Container_stop'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_Command.Container'(<<42, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_Command.Container_kill'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_Command.Container'(<<50, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_Command.Container_remove'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_Command.Container'(<<58, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_Command.Container_config'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_Command.Container'(<<>>, 0, 0, _, F@_1, _) -> #'Command.Container'{action = F@_1}; +'dfp_read_field_def_Command.Container'(Other, Z1, Z2, F, F@_1, TrUserData) -> 'dg_read_field_def_Command.Container'(Other, Z1, Z2, F, F@_1, TrUserData). + +'dg_read_field_def_Command.Container'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Command.Container'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'dg_read_field_def_Command.Container'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Command.Container_list'(Rest, 0, 0, 0, F@_1, TrUserData); + 18 -> 'd_field_Command.Container_deploy'(Rest, 0, 0, 0, F@_1, TrUserData); + 26 -> 'd_field_Command.Container_start'(Rest, 0, 0, 0, F@_1, TrUserData); + 34 -> 'd_field_Command.Container_stop'(Rest, 0, 0, 0, F@_1, TrUserData); + 42 -> 'd_field_Command.Container_kill'(Rest, 0, 0, 0, F@_1, TrUserData); + 50 -> 'd_field_Command.Container_remove'(Rest, 0, 0, 0, F@_1, TrUserData); + 58 -> 'd_field_Command.Container_config'(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Command.Container'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> 'skip_64_Command.Container'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> 'skip_length_delimited_Command.Container'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> 'skip_group_Command.Container'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> 'skip_32_Command.Container'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +'dg_read_field_def_Command.Container'(<<>>, 0, 0, _, F@_1, _) -> #'Command.Container'{action = F@_1}. + +'d_field_Command.Container_list'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_Command.Container_list'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_Command.Container_list'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerList'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container'(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({list, NewFValue}, TrUserData); + {list, MVPrev} -> id({list, 'merge_msg_Command.Container.ContainerList'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({list, NewFValue}, TrUserData) + end, + TrUserData). + +'d_field_Command.Container_deploy'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_Command.Container_deploy'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_Command.Container_deploy'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerDeploy'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container'(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({deploy, NewFValue}, TrUserData); + {deploy, MVPrev} -> id({deploy, 'merge_msg_Command.Container.ContainerDeploy'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({deploy, NewFValue}, TrUserData) + end, + TrUserData). + +'d_field_Command.Container_start'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_Command.Container_start'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_Command.Container_start'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerStart'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container'(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({start, NewFValue}, TrUserData); + {start, MVPrev} -> id({start, 'merge_msg_Command.Container.ContainerStart'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({start, NewFValue}, TrUserData) + end, + TrUserData). + +'d_field_Command.Container_stop'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_Command.Container_stop'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_Command.Container_stop'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerStop'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container'(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({stop, NewFValue}, TrUserData); + {stop, MVPrev} -> id({stop, 'merge_msg_Command.Container.ContainerStop'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({stop, NewFValue}, TrUserData) + end, + TrUserData). + +'d_field_Command.Container_kill'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_Command.Container_kill'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_Command.Container_kill'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerKill'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container'(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({kill, NewFValue}, TrUserData); + {kill, MVPrev} -> id({kill, 'merge_msg_Command.Container.ContainerKill'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({kill, NewFValue}, TrUserData) + end, + TrUserData). + +'d_field_Command.Container_remove'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_Command.Container_remove'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_Command.Container_remove'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerRemove'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container'(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({remove, NewFValue}, TrUserData); + {remove, MVPrev} -> id({remove, 'merge_msg_Command.Container.ContainerRemove'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({remove, NewFValue}, TrUserData) + end, + TrUserData). + +'d_field_Command.Container_config'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_Command.Container_config'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_Command.Container_config'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerConfig'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container'(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({config, NewFValue}, TrUserData); + {config, MVPrev} -> id({config, 'merge_msg_Command.Container.ContainerConfig'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({config, NewFValue}, TrUserData) + end, + TrUserData). + +'skip_varint_Command.Container'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'skip_varint_Command.Container'(Rest, Z1, Z2, F, F@_1, TrUserData); +'skip_varint_Command.Container'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Command.Container'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_length_delimited_Command.Container'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'skip_length_delimited_Command.Container'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'skip_length_delimited_Command.Container'(<<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_Command.Container'(Rest2, 0, 0, F, F@_1, TrUserData). + +'skip_group_Command.Container'(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Command.Container'(Rest, 0, Z2, FNum, F@_1, TrUserData). + +'skip_32_Command.Container'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Command.Container'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_64_Command.Container'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Command.Container'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'decode_msg_Command.Container.ContainerConfig'(Bin, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerConfig'(Bin, 0, 0, 0, id(undefined, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Command.Container.ContainerConfig'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Command.Container.ContainerConfig_target'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Command.Container.ContainerConfig'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Command.Container.ContainerConfig_config'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Command.Container.ContainerConfig'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command.Container.ContainerConfig'{target = F@_1, config = F@_2}; +'dfp_read_field_def_Command.Container.ContainerConfig'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_Command.Container.ContainerConfig'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Command.Container.ContainerConfig'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Command.Container.ContainerConfig'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_Command.Container.ContainerConfig'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Command.Container.ContainerConfig_target'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> 'd_field_Command.Container.ContainerConfig_config'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Command.Container.ContainerConfig'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_Command.Container.ContainerConfig'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_Command.Container.ContainerConfig'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_Command.Container.ContainerConfig'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_Command.Container.ContainerConfig'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_Command.Container.ContainerConfig'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command.Container.ContainerConfig'{target = F@_1, config = F@_2}. + +'d_field_Command.Container.ContainerConfig_target'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerConfig_target'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Command.Container.ContainerConfig_target'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerTarget'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container.ContainerConfig'(RestF, + 0, + 0, + F, + if Prev == undefined -> NewFValue; + true -> 'merge_msg_Command.Container.ContainerTarget'(Prev, NewFValue, TrUserData) + end, + F@_2, + TrUserData). + +'d_field_Command.Container.ContainerConfig_config'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerConfig_config'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Command.Container.ContainerConfig_config'(<<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_Command.Container.ContainerConfig'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_Command.Container.ContainerConfig'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_Command.Container.ContainerConfig'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_Command.Container.ContainerConfig'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerConfig'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Command.Container.ContainerConfig'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_Command.Container.ContainerConfig'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_Command.Container.ContainerConfig'(<<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_Command.Container.ContainerConfig'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_Command.Container.ContainerConfig'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Command.Container.ContainerConfig'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_Command.Container.ContainerConfig'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerConfig'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_Command.Container.ContainerConfig'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerConfig'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_Command.Container.ContainerRemove'(Bin, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerRemove'(Bin, 0, 0, 0, id(undefined, TrUserData), id(false, TrUserData), id(false, TrUserData), TrUserData). + +'dfp_read_field_def_Command.Container.ContainerRemove'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Command.Container.ContainerRemove_target'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Command.Container.ContainerRemove'(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Command.Container.ContainerRemove_force'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Command.Container.ContainerRemove'(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Command.Container.ContainerRemove_remove_volumes'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Command.Container.ContainerRemove'(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #'Command.Container.ContainerRemove'{target = F@_1, force = F@_2, remove_volumes = F@_3}; +'dfp_read_field_def_Command.Container.ContainerRemove'(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dg_read_field_def_Command.Container.ContainerRemove'(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Command.Container.ContainerRemove'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> + 'dg_read_field_def_Command.Container.ContainerRemove'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'dg_read_field_def_Command.Container.ContainerRemove'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Command.Container.ContainerRemove_target'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 16 -> 'd_field_Command.Container.ContainerRemove_force'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 24 -> 'd_field_Command.Container.ContainerRemove_remove_volumes'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Command.Container.ContainerRemove'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 1 -> 'skip_64_Command.Container.ContainerRemove'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 2 -> 'skip_length_delimited_Command.Container.ContainerRemove'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 3 -> 'skip_group_Command.Container.ContainerRemove'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 5 -> 'skip_32_Command.Container.ContainerRemove'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Command.Container.ContainerRemove'(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #'Command.Container.ContainerRemove'{target = F@_1, force = F@_2, remove_volumes = F@_3}. + +'d_field_Command.Container.ContainerRemove_target'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerRemove_target'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Command.Container.ContainerRemove_target'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerTarget'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container.ContainerRemove'(RestF, + 0, + 0, + F, + if Prev == undefined -> NewFValue; + true -> 'merge_msg_Command.Container.ContainerTarget'(Prev, NewFValue, TrUserData) + end, + F@_2, + F@_3, + TrUserData). + +'d_field_Command.Container.ContainerRemove_force'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerRemove_force'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Command.Container.ContainerRemove_force'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, TrUserData), Rest}, + 'dfp_read_field_def_Command.Container.ContainerRemove'(RestF, 0, 0, F, F@_1, NewFValue, F@_3, TrUserData). + +'d_field_Command.Container.ContainerRemove_remove_volumes'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> + 'd_field_Command.Container.ContainerRemove_remove_volumes'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Command.Container.ContainerRemove_remove_volumes'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, TrUserData), Rest}, + 'dfp_read_field_def_Command.Container.ContainerRemove'(RestF, 0, 0, F, F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_Command.Container.ContainerRemove'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'skip_varint_Command.Container.ContainerRemove'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Command.Container.ContainerRemove'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerRemove'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Command.Container.ContainerRemove'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> + 'skip_length_delimited_Command.Container.ContainerRemove'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'skip_length_delimited_Command.Container.ContainerRemove'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Command.Container.ContainerRemove'(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Command.Container.ContainerRemove'(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Command.Container.ContainerRemove'(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Command.Container.ContainerRemove'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerRemove'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Command.Container.ContainerRemove'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerRemove'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Command.Container.ContainerKill'(Bin, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerKill'(Bin, 0, 0, 0, id(undefined, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Command.Container.ContainerKill'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Command.Container.ContainerKill_target'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Command.Container.ContainerKill'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Command.Container.ContainerKill_signal'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Command.Container.ContainerKill'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command.Container.ContainerKill'{target = F@_1, signal = F@_2}; +'dfp_read_field_def_Command.Container.ContainerKill'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_Command.Container.ContainerKill'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Command.Container.ContainerKill'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Command.Container.ContainerKill'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_Command.Container.ContainerKill'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Command.Container.ContainerKill_target'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> 'd_field_Command.Container.ContainerKill_signal'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Command.Container.ContainerKill'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_Command.Container.ContainerKill'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_Command.Container.ContainerKill'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_Command.Container.ContainerKill'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_Command.Container.ContainerKill'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_Command.Container.ContainerKill'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command.Container.ContainerKill'{target = F@_1, signal = F@_2}. + +'d_field_Command.Container.ContainerKill_target'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerKill_target'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Command.Container.ContainerKill_target'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerTarget'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container.ContainerKill'(RestF, + 0, + 0, + F, + if Prev == undefined -> NewFValue; + true -> 'merge_msg_Command.Container.ContainerTarget'(Prev, NewFValue, TrUserData) + end, + F@_2, + TrUserData). + +'d_field_Command.Container.ContainerKill_signal'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerKill_signal'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Command.Container.ContainerKill_signal'(<<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_Command.Container.ContainerKill'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_Command.Container.ContainerKill'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_Command.Container.ContainerKill'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_Command.Container.ContainerKill'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerKill'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Command.Container.ContainerKill'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_Command.Container.ContainerKill'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_Command.Container.ContainerKill'(<<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_Command.Container.ContainerKill'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_Command.Container.ContainerKill'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Command.Container.ContainerKill'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_Command.Container.ContainerKill'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerKill'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_Command.Container.ContainerKill'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerKill'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_Command.Container.ContainerStop'(Bin, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerStop'(Bin, 0, 0, 0, id(undefined, TrUserData), id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Command.Container.ContainerStop'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Command.Container.ContainerStop_target'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Command.Container.ContainerStop'(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Command.Container.ContainerStop_timeout_seconds'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Command.Container.ContainerStop'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command.Container.ContainerStop'{target = F@_1, timeout_seconds = F@_2}; +'dfp_read_field_def_Command.Container.ContainerStop'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_Command.Container.ContainerStop'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Command.Container.ContainerStop'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Command.Container.ContainerStop'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_Command.Container.ContainerStop'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Command.Container.ContainerStop_target'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 16 -> 'd_field_Command.Container.ContainerStop_timeout_seconds'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Command.Container.ContainerStop'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_Command.Container.ContainerStop'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_Command.Container.ContainerStop'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_Command.Container.ContainerStop'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_Command.Container.ContainerStop'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_Command.Container.ContainerStop'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command.Container.ContainerStop'{target = F@_1, timeout_seconds = F@_2}. + +'d_field_Command.Container.ContainerStop_target'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerStop_target'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Command.Container.ContainerStop_target'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerTarget'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container.ContainerStop'(RestF, + 0, + 0, + F, + if Prev == undefined -> NewFValue; + true -> 'merge_msg_Command.Container.ContainerTarget'(Prev, NewFValue, TrUserData) + end, + F@_2, + TrUserData). + +'d_field_Command.Container.ContainerStop_timeout_seconds'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerStop_timeout_seconds'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Command.Container.ContainerStop_timeout_seconds'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + 'dfp_read_field_def_Command.Container.ContainerStop'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_Command.Container.ContainerStop'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_Command.Container.ContainerStop'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_Command.Container.ContainerStop'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerStop'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Command.Container.ContainerStop'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_Command.Container.ContainerStop'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_Command.Container.ContainerStop'(<<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_Command.Container.ContainerStop'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_Command.Container.ContainerStop'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Command.Container.ContainerStop'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_Command.Container.ContainerStop'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerStop'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_Command.Container.ContainerStop'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerStop'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_Command.Container.ContainerStart'(Bin, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerStart'(Bin, 0, 0, 0, id(undefined, TrUserData), TrUserData). + +'dfp_read_field_def_Command.Container.ContainerStart'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_Command.Container.ContainerStart_target'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_Command.Container.ContainerStart'(<<>>, 0, 0, _, F@_1, _) -> #'Command.Container.ContainerStart'{target = F@_1}; +'dfp_read_field_def_Command.Container.ContainerStart'(Other, Z1, Z2, F, F@_1, TrUserData) -> 'dg_read_field_def_Command.Container.ContainerStart'(Other, Z1, Z2, F, F@_1, TrUserData). + +'dg_read_field_def_Command.Container.ContainerStart'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Command.Container.ContainerStart'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'dg_read_field_def_Command.Container.ContainerStart'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Command.Container.ContainerStart_target'(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Command.Container.ContainerStart'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> 'skip_64_Command.Container.ContainerStart'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> 'skip_length_delimited_Command.Container.ContainerStart'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> 'skip_group_Command.Container.ContainerStart'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> 'skip_32_Command.Container.ContainerStart'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +'dg_read_field_def_Command.Container.ContainerStart'(<<>>, 0, 0, _, F@_1, _) -> #'Command.Container.ContainerStart'{target = F@_1}. + +'d_field_Command.Container.ContainerStart_target'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerStart_target'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_Command.Container.ContainerStart_target'(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Command.Container.ContainerTarget'(Bs, TrUserData), TrUserData), Rest2} end, + 'dfp_read_field_def_Command.Container.ContainerStart'(RestF, + 0, + 0, + F, + if Prev == undefined -> NewFValue; + true -> 'merge_msg_Command.Container.ContainerTarget'(Prev, NewFValue, TrUserData) + end, + TrUserData). + +'skip_varint_Command.Container.ContainerStart'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'skip_varint_Command.Container.ContainerStart'(Rest, Z1, Z2, F, F@_1, TrUserData); +'skip_varint_Command.Container.ContainerStart'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerStart'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_length_delimited_Command.Container.ContainerStart'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'skip_length_delimited_Command.Container.ContainerStart'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'skip_length_delimited_Command.Container.ContainerStart'(<<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_Command.Container.ContainerStart'(Rest2, 0, 0, F, F@_1, TrUserData). + +'skip_group_Command.Container.ContainerStart'(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Command.Container.ContainerStart'(Rest, 0, Z2, FNum, F@_1, TrUserData). + +'skip_32_Command.Container.ContainerStart'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerStart'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_64_Command.Container.ContainerStart'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerStart'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'decode_msg_Command.Container.ContainerDeploy'(Bin, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerDeploy'(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Command.Container.ContainerDeploy'(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Command.Container.ContainerDeploy_task_id'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Command.Container.ContainerDeploy'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Command.Container.ContainerDeploy_params'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Command.Container.ContainerDeploy'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command.Container.ContainerDeploy'{task_id = F@_1, params = F@_2}; +'dfp_read_field_def_Command.Container.ContainerDeploy'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_Command.Container.ContainerDeploy'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Command.Container.ContainerDeploy'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Command.Container.ContainerDeploy'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_Command.Container.ContainerDeploy'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> 'd_field_Command.Container.ContainerDeploy_task_id'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> 'd_field_Command.Container.ContainerDeploy_params'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Command.Container.ContainerDeploy'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_Command.Container.ContainerDeploy'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_Command.Container.ContainerDeploy'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_Command.Container.ContainerDeploy'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_Command.Container.ContainerDeploy'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_Command.Container.ContainerDeploy'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command.Container.ContainerDeploy'{task_id = F@_1, params = F@_2}. + +'d_field_Command.Container.ContainerDeploy_task_id'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerDeploy_task_id'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Command.Container.ContainerDeploy_task_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_Command.Container.ContainerDeploy'(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +'d_field_Command.Container.ContainerDeploy_params'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerDeploy_params'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Command.Container.ContainerDeploy_params'(<<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_Command.Container.ContainerDeploy'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_Command.Container.ContainerDeploy'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_Command.Container.ContainerDeploy'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_Command.Container.ContainerDeploy'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerDeploy'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Command.Container.ContainerDeploy'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_Command.Container.ContainerDeploy'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_Command.Container.ContainerDeploy'(<<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_Command.Container.ContainerDeploy'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_Command.Container.ContainerDeploy'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Command.Container.ContainerDeploy'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_Command.Container.ContainerDeploy'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerDeploy'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_Command.Container.ContainerDeploy'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerDeploy'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_Command.Container.ContainerList'(Bin, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerList'(Bin, 0, 0, 0, TrUserData). + +'dfp_read_field_def_Command.Container.ContainerList'(<<>>, 0, 0, _, _) -> #'Command.Container.ContainerList'{}; +'dfp_read_field_def_Command.Container.ContainerList'(Other, Z1, Z2, F, TrUserData) -> 'dg_read_field_def_Command.Container.ContainerList'(Other, Z1, Z2, F, TrUserData). + +'dg_read_field_def_Command.Container.ContainerList'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Command.Container.ContainerList'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'dg_read_field_def_Command.Container.ContainerList'(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> 'skip_varint_Command.Container.ContainerList'(Rest, 0, 0, Key bsr 3, TrUserData); + 1 -> 'skip_64_Command.Container.ContainerList'(Rest, 0, 0, Key bsr 3, TrUserData); + 2 -> 'skip_length_delimited_Command.Container.ContainerList'(Rest, 0, 0, Key bsr 3, TrUserData); + 3 -> 'skip_group_Command.Container.ContainerList'(Rest, 0, 0, Key bsr 3, TrUserData); + 5 -> 'skip_32_Command.Container.ContainerList'(Rest, 0, 0, Key bsr 3, TrUserData) + end; +'dg_read_field_def_Command.Container.ContainerList'(<<>>, 0, 0, _, _) -> #'Command.Container.ContainerList'{}. + +'skip_varint_Command.Container.ContainerList'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'skip_varint_Command.Container.ContainerList'(Rest, Z1, Z2, F, TrUserData); +'skip_varint_Command.Container.ContainerList'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerList'(Rest, Z1, Z2, F, TrUserData). + +'skip_length_delimited_Command.Container.ContainerList'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 57 -> 'skip_length_delimited_Command.Container.ContainerList'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'skip_length_delimited_Command.Container.ContainerList'(<<0:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Command.Container.ContainerList'(Rest2, 0, 0, F, TrUserData). + +'skip_group_Command.Container.ContainerList'(Bin, _, Z2, FNum, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Command.Container.ContainerList'(Rest, 0, Z2, FNum, TrUserData). + +'skip_32_Command.Container.ContainerList'(<<_:32, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerList'(Rest, Z1, Z2, F, TrUserData). + +'skip_64_Command.Container.ContainerList'(<<_:64, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerList'(Rest, Z1, Z2, F, TrUserData). + +'decode_msg_Command.Container.ContainerTarget'(Bin, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerTarget'(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Command.Container.ContainerTarget'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Command.Container.ContainerTarget_name'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Command.Container.ContainerTarget'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Command.Container.ContainerTarget_id'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Command.Container.ContainerTarget'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command.Container.ContainerTarget'{name = F@_1, id = F@_2}; +'dfp_read_field_def_Command.Container.ContainerTarget'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_Command.Container.ContainerTarget'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Command.Container.ContainerTarget'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Command.Container.ContainerTarget'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_Command.Container.ContainerTarget'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Command.Container.ContainerTarget_name'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> 'd_field_Command.Container.ContainerTarget_id'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Command.Container.ContainerTarget'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_Command.Container.ContainerTarget'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_Command.Container.ContainerTarget'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_Command.Container.ContainerTarget'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_Command.Container.ContainerTarget'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_Command.Container.ContainerTarget'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command.Container.ContainerTarget'{name = F@_1, id = F@_2}. + +'d_field_Command.Container.ContainerTarget_name'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerTarget_name'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Command.Container.ContainerTarget_name'(<<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_Command.Container.ContainerTarget'(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +'d_field_Command.Container.ContainerTarget_id'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Command.Container.ContainerTarget_id'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Command.Container.ContainerTarget_id'(<<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_Command.Container.ContainerTarget'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_Command.Container.ContainerTarget'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_Command.Container.ContainerTarget'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_Command.Container.ContainerTarget'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerTarget'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Command.Container.ContainerTarget'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_Command.Container.ContainerTarget'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_Command.Container.ContainerTarget'(<<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_Command.Container.ContainerTarget'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_Command.Container.ContainerTarget'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Command.Container.ContainerTarget'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_Command.Container.ContainerTarget'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerTarget'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_Command.Container.ContainerTarget'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Command.Container.ContainerTarget'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +decode_msg_Command(Bin, TrUserData) -> dfp_read_field_def_Command(Bin, 0, 0, 0, id(0, TrUserData), id(undefined, TrUserData), TrUserData). + +dfp_read_field_def_Command(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Command_packet_id(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Command(<<82, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Command_container(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Command(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command'{packet_id = F@_1, body = F@_2}; +dfp_read_field_def_Command(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_Command(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_Command(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_Command(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_Command(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_Command_packet_id(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 82 -> d_field_Command_container(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_Command(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_Command(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_Command(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_Command(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_Command(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_Command(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Command'{packet_id = F@_1, body = F@_2}. + +d_field_Command_packet_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Command_packet_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Command_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_Command(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_Command_container(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Command_container(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Command_container(<<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_Command.Container'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Command(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({container, NewFValue}, TrUserData); + {container, MVPrev} -> id({container, 'merge_msg_Command.Container'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({container, NewFValue}, TrUserData) + end, + TrUserData). + +skip_varint_Command(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_Command(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_Command(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Command(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_Command(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_Command(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_Command(<<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_Command(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_Command(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_Command(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_Command(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Command(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_Command(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Command(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_CommandResponse.Error'(Bin, TrUserData) -> 'dfp_read_field_def_CommandResponse.Error'(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_CommandResponse.Error'(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_CommandResponse.Error_code'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_CommandResponse.Error'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_CommandResponse.Error_reason'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_CommandResponse.Error'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'CommandResponse.Error'{code = F@_1, reason = F@_2}; +'dfp_read_field_def_CommandResponse.Error'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_CommandResponse.Error'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_CommandResponse.Error'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_CommandResponse.Error'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_CommandResponse.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_CommandResponse.Error_code'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> 'd_field_CommandResponse.Error_reason'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_CommandResponse.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_CommandResponse.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_CommandResponse.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_CommandResponse.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_CommandResponse.Error'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_CommandResponse.Error'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'CommandResponse.Error'{code = F@_1, reason = F@_2}. + +'d_field_CommandResponse.Error_code'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_CommandResponse.Error_code'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_CommandResponse.Error_code'(<<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_CommandResponse.Error'(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +'d_field_CommandResponse.Error_reason'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_CommandResponse.Error_reason'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_CommandResponse.Error_reason'(<<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_CommandResponse.Error'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_CommandResponse.Error'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_CommandResponse.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_CommandResponse.Error'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_CommandResponse.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_CommandResponse.Error'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_CommandResponse.Error'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_CommandResponse.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_CommandResponse.Error'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_CommandResponse.Error'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_CommandResponse.Error'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_CommandResponse.Error'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_CommandResponse.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_CommandResponse.Error'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_CommandResponse.Error'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +decode_msg_CommandResponse(Bin, TrUserData) -> dfp_read_field_def_CommandResponse(Bin, 0, 0, 0, id(0, TrUserData), id(undefined, TrUserData), TrUserData). + +dfp_read_field_def_CommandResponse(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_CommandResponse_packet_id(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_CommandResponse(<<82, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_CommandResponse_result(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_CommandResponse(<<90, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_CommandResponse_error(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_CommandResponse(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'CommandResponse'{packet_id = F@_1, body = F@_2}; +dfp_read_field_def_CommandResponse(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_CommandResponse(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_CommandResponse(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_CommandResponse(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_CommandResponse(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_CommandResponse_packet_id(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 82 -> d_field_CommandResponse_result(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 90 -> d_field_CommandResponse_error(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_CommandResponse(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_CommandResponse(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_CommandResponse(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_CommandResponse(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_CommandResponse(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_CommandResponse(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'CommandResponse'{packet_id = F@_1, body = F@_2}. + +d_field_CommandResponse_packet_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_CommandResponse_packet_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_CommandResponse_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_CommandResponse(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_CommandResponse_result(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_CommandResponse_result(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_CommandResponse_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_CommandResponse(RestF, 0, 0, F, F@_1, id({result, NewFValue}, TrUserData), TrUserData). + +d_field_CommandResponse_error(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_CommandResponse_error(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_CommandResponse_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_CommandResponse.Error'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_CommandResponse(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({error, NewFValue}, TrUserData); + {error, MVPrev} -> id({error, 'merge_msg_CommandResponse.Error'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({error, NewFValue}, TrUserData) + end, + TrUserData). + +skip_varint_CommandResponse(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_CommandResponse(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_CommandResponse(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_CommandResponse(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_CommandResponse(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_CommandResponse(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_CommandResponse(<<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_CommandResponse(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_CommandResponse(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_CommandResponse(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_CommandResponse(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_CommandResponse(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_CommandResponse(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_CommandResponse(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_Message.Ping'(Bin, TrUserData) -> 'dfp_read_field_def_Message.Ping'(Bin, 0, 0, 0, TrUserData). + +'dfp_read_field_def_Message.Ping'(<<>>, 0, 0, _, _) -> #'Message.Ping'{}; +'dfp_read_field_def_Message.Ping'(Other, Z1, Z2, F, TrUserData) -> 'dg_read_field_def_Message.Ping'(Other, Z1, Z2, F, TrUserData). + +'dg_read_field_def_Message.Ping'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Message.Ping'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'dg_read_field_def_Message.Ping'(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> 'skip_varint_Message.Ping'(Rest, 0, 0, Key bsr 3, TrUserData); + 1 -> 'skip_64_Message.Ping'(Rest, 0, 0, Key bsr 3, TrUserData); + 2 -> 'skip_length_delimited_Message.Ping'(Rest, 0, 0, Key bsr 3, TrUserData); + 3 -> 'skip_group_Message.Ping'(Rest, 0, 0, Key bsr 3, TrUserData); + 5 -> 'skip_32_Message.Ping'(Rest, 0, 0, Key bsr 3, TrUserData) + end; +'dg_read_field_def_Message.Ping'(<<>>, 0, 0, _, _) -> #'Message.Ping'{}. + +'skip_varint_Message.Ping'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'skip_varint_Message.Ping'(Rest, Z1, Z2, F, TrUserData); +'skip_varint_Message.Ping'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Message.Ping'(Rest, Z1, Z2, F, TrUserData). + +'skip_length_delimited_Message.Ping'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 57 -> 'skip_length_delimited_Message.Ping'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'skip_length_delimited_Message.Ping'(<<0:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Message.Ping'(Rest2, 0, 0, F, TrUserData). + +'skip_group_Message.Ping'(Bin, _, Z2, FNum, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Message.Ping'(Rest, 0, Z2, FNum, TrUserData). + +'skip_32_Message.Ping'(<<_:32, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Message.Ping'(Rest, Z1, Z2, F, TrUserData). + +'skip_64_Message.Ping'(<<_:64, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Message.Ping'(Rest, Z1, Z2, F, TrUserData). + +'decode_msg_Message.Pong'(Bin, TrUserData) -> 'dfp_read_field_def_Message.Pong'(Bin, 0, 0, 0, TrUserData). + +'dfp_read_field_def_Message.Pong'(<<>>, 0, 0, _, _) -> #'Message.Pong'{}; +'dfp_read_field_def_Message.Pong'(Other, Z1, Z2, F, TrUserData) -> 'dg_read_field_def_Message.Pong'(Other, Z1, Z2, F, TrUserData). + +'dg_read_field_def_Message.Pong'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Message.Pong'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'dg_read_field_def_Message.Pong'(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> 'skip_varint_Message.Pong'(Rest, 0, 0, Key bsr 3, TrUserData); + 1 -> 'skip_64_Message.Pong'(Rest, 0, 0, Key bsr 3, TrUserData); + 2 -> 'skip_length_delimited_Message.Pong'(Rest, 0, 0, Key bsr 3, TrUserData); + 3 -> 'skip_group_Message.Pong'(Rest, 0, 0, Key bsr 3, TrUserData); + 5 -> 'skip_32_Message.Pong'(Rest, 0, 0, Key bsr 3, TrUserData) + end; +'dg_read_field_def_Message.Pong'(<<>>, 0, 0, _, _) -> #'Message.Pong'{}. + +'skip_varint_Message.Pong'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'skip_varint_Message.Pong'(Rest, Z1, Z2, F, TrUserData); +'skip_varint_Message.Pong'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Message.Pong'(Rest, Z1, Z2, F, TrUserData). + +'skip_length_delimited_Message.Pong'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 57 -> 'skip_length_delimited_Message.Pong'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'skip_length_delimited_Message.Pong'(<<0:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Message.Pong'(Rest2, 0, 0, F, TrUserData). + +'skip_group_Message.Pong'(Bin, _, Z2, FNum, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Message.Pong'(Rest, 0, Z2, FNum, TrUserData). + +'skip_32_Message.Pong'(<<_:32, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Message.Pong'(Rest, Z1, Z2, F, TrUserData). + +'skip_64_Message.Pong'(<<_:64, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Message.Pong'(Rest, Z1, Z2, F, TrUserData). + +'decode_msg_Message.Pub'(Bin, TrUserData) -> 'dfp_read_field_def_Message.Pub'(Bin, 0, 0, 0, id(<<>>, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Message.Pub'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Message.Pub_topic'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Message.Pub'(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Message.Pub_qos'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Message.Pub'(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Message.Pub_content'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Message.Pub'(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #'Message.Pub'{topic = F@_1, qos = F@_2, content = F@_3}; +'dfp_read_field_def_Message.Pub'(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dg_read_field_def_Message.Pub'(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Message.Pub'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Message.Pub'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'dg_read_field_def_Message.Pub'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Message.Pub_topic'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 16 -> 'd_field_Message.Pub_qos'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 26 -> 'd_field_Message.Pub_content'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Message.Pub'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 1 -> 'skip_64_Message.Pub'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 2 -> 'skip_length_delimited_Message.Pub'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 3 -> 'skip_group_Message.Pub'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 5 -> 'skip_32_Message.Pub'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Message.Pub'(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #'Message.Pub'{topic = F@_1, qos = F@_2, content = F@_3}. + +'d_field_Message.Pub_topic'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'd_field_Message.Pub_topic'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Message.Pub_topic'(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_Message.Pub'(RestF, 0, 0, F, NewFValue, F@_2, F@_3, TrUserData). + +'d_field_Message.Pub_qos'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'd_field_Message.Pub_qos'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Message.Pub_qos'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + 'dfp_read_field_def_Message.Pub'(RestF, 0, 0, F, F@_1, NewFValue, F@_3, TrUserData). + +'d_field_Message.Pub_content'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'd_field_Message.Pub_content'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Message.Pub_content'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, 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_Message.Pub'(RestF, 0, 0, F, F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_Message.Pub'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'skip_varint_Message.Pub'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Message.Pub'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Message.Pub'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Message.Pub'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'skip_length_delimited_Message.Pub'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'skip_length_delimited_Message.Pub'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Message.Pub'(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Message.Pub'(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Message.Pub'(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Message.Pub'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Message.Pub'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Message.Pub'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Message.Pub'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Message.MetricData'(Bin, TrUserData) -> 'dfp_read_field_def_Message.MetricData'(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Message.MetricData'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Message.MetricData_route_key'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Message.MetricData'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_Message.MetricData_metric'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Message.MetricData'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Message.MetricData'{route_key = F@_1, metric = F@_2}; +'dfp_read_field_def_Message.MetricData'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_Message.MetricData'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Message.MetricData'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Message.MetricData'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_Message.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_Message.MetricData_route_key'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> 'd_field_Message.MetricData_metric'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Message.MetricData'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_Message.MetricData'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_Message.MetricData'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_Message.MetricData'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_Message.MetricData'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_Message.MetricData'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Message.MetricData'{route_key = F@_1, metric = F@_2}. + +'d_field_Message.MetricData_route_key'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Message.MetricData_route_key'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Message.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_Message.MetricData'(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +'d_field_Message.MetricData_metric'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_Message.MetricData_metric'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_Message.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_Message.MetricData'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_Message.MetricData'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_Message.MetricData'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_Message.MetricData'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Message.MetricData'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Message.MetricData'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_Message.MetricData'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_Message.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_Message.MetricData'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_Message.MetricData'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Message.MetricData'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_Message.MetricData'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Message.MetricData'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_Message.MetricData'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_Message.MetricData'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'decode_msg_Message.TaskEvent'(Bin, TrUserData) -> 'dfp_read_field_def_Message.TaskEvent'(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Message.TaskEvent'(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Message.TaskEvent_task_id'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Message.TaskEvent'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Message.TaskEvent_type'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Message.TaskEvent'(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'd_field_Message.TaskEvent_stream'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Message.TaskEvent'(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #'Message.TaskEvent'{task_id = F@_1, type = F@_2, stream = F@_3}; +'dfp_read_field_def_Message.TaskEvent'(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dg_read_field_def_Message.TaskEvent'(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Message.TaskEvent'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Message.TaskEvent'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'dg_read_field_def_Message.TaskEvent'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> 'd_field_Message.TaskEvent_task_id'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 18 -> 'd_field_Message.TaskEvent_type'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 26 -> 'd_field_Message.TaskEvent_stream'(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Message.TaskEvent'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 1 -> 'skip_64_Message.TaskEvent'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 2 -> 'skip_length_delimited_Message.TaskEvent'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 3 -> 'skip_group_Message.TaskEvent'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 5 -> 'skip_32_Message.TaskEvent'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Message.TaskEvent'(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #'Message.TaskEvent'{task_id = F@_1, type = F@_2, stream = F@_3}. + +'d_field_Message.TaskEvent_task_id'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'd_field_Message.TaskEvent_task_id'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Message.TaskEvent_task_id'(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + 'dfp_read_field_def_Message.TaskEvent'(RestF, 0, 0, F, NewFValue, F@_2, F@_3, TrUserData). + +'d_field_Message.TaskEvent_type'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'd_field_Message.TaskEvent_type'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Message.TaskEvent_type'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_Message.TaskEvent'(RestF, 0, 0, F, F@_1, NewFValue, F@_3, TrUserData). + +'d_field_Message.TaskEvent_stream'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'd_field_Message.TaskEvent_stream'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'d_field_Message.TaskEvent_stream'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, 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_Message.TaskEvent'(RestF, 0, 0, F, F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_Message.TaskEvent'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'skip_varint_Message.TaskEvent'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Message.TaskEvent'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Message.TaskEvent'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Message.TaskEvent'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> 'skip_length_delimited_Message.TaskEvent'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +'skip_length_delimited_Message.TaskEvent'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Message.TaskEvent'(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Message.TaskEvent'(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Message.TaskEvent'(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Message.TaskEvent'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Message.TaskEvent'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Message.TaskEvent'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> 'dfp_read_field_def_Message.TaskEvent'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +decode_msg_Message(Bin, TrUserData) -> dfp_read_field_def_Message(Bin, 0, 0, 0, id(undefined, TrUserData), TrUserData). + +dfp_read_field_def_Message(<<82, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_Message_ping(Rest, Z1, Z2, F, F@_1, TrUserData); +dfp_read_field_def_Message(<<90, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_Message_pong(Rest, Z1, Z2, F, F@_1, TrUserData); +dfp_read_field_def_Message(<<98, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_Message_pub(Rest, Z1, Z2, F, F@_1, TrUserData); +dfp_read_field_def_Message(<<106, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_Message_metric_data(Rest, Z1, Z2, F, F@_1, TrUserData); +dfp_read_field_def_Message(<<114, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_Message_task_event(Rest, Z1, Z2, F, F@_1, TrUserData); +dfp_read_field_def_Message(<<>>, 0, 0, _, F@_1, _) -> #'Message'{body = F@_1}; +dfp_read_field_def_Message(Other, Z1, Z2, F, F@_1, TrUserData) -> dg_read_field_def_Message(Other, Z1, Z2, F, F@_1, TrUserData). + +dg_read_field_def_Message(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> dg_read_field_def_Message(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +dg_read_field_def_Message(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 82 -> d_field_Message_ping(Rest, 0, 0, 0, F@_1, TrUserData); + 90 -> d_field_Message_pong(Rest, 0, 0, 0, F@_1, TrUserData); + 98 -> d_field_Message_pub(Rest, 0, 0, 0, F@_1, TrUserData); + 106 -> d_field_Message_metric_data(Rest, 0, 0, 0, F@_1, TrUserData); + 114 -> d_field_Message_task_event(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_Message(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> skip_64_Message(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> skip_length_delimited_Message(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> skip_group_Message(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> skip_32_Message(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +dg_read_field_def_Message(<<>>, 0, 0, _, F@_1, _) -> #'Message'{body = F@_1}. + +d_field_Message_ping(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_Message_ping(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +d_field_Message_ping(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Message.Ping'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Message(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({ping, NewFValue}, TrUserData); + {ping, MVPrev} -> id({ping, 'merge_msg_Message.Ping'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({ping, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_Message_pong(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_Message_pong(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +d_field_Message_pong(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Message.Pong'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Message(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({pong, NewFValue}, TrUserData); + {pong, MVPrev} -> id({pong, 'merge_msg_Message.Pong'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({pong, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_Message_pub(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_Message_pub(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +d_field_Message_pub(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Message.Pub'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Message(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({pub, NewFValue}, TrUserData); + {pub, MVPrev} -> id({pub, 'merge_msg_Message.Pub'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({pub, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_Message_metric_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_Message_metric_data(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +d_field_Message_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_Message.MetricData'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Message(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({metric_data, NewFValue}, TrUserData); + {metric_data, MVPrev} -> id({metric_data, 'merge_msg_Message.MetricData'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({metric_data, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_Message_task_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_Message_task_event(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +d_field_Message_task_event(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_Message.TaskEvent'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Message(RestF, + 0, + 0, + F, + case Prev of + undefined -> id({task_event, NewFValue}, TrUserData); + {task_event, MVPrev} -> id({task_event, 'merge_msg_Message.TaskEvent'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({task_event, NewFValue}, TrUserData) + end, + TrUserData). + +skip_varint_Message(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> skip_varint_Message(Rest, Z1, Z2, F, F@_1, TrUserData); +skip_varint_Message(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_Message(Rest, Z1, Z2, F, F@_1, TrUserData). + +skip_length_delimited_Message(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> skip_length_delimited_Message(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +skip_length_delimited_Message(<<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_Message(Rest2, 0, 0, F, F@_1, TrUserData). + +skip_group_Message(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_Message(Rest, 0, Z2, FNum, F@_1, TrUserData). + +skip_32_Message(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_Message(Rest, Z1, Z2, F, F@_1, TrUserData). + +skip_64_Message(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_Message(Rest, Z1, Z2, F, F@_1, TrUserData). + +'decode_msg_Stream.Open'(Bin, TrUserData) -> 'dfp_read_field_def_Stream.Open'(Bin, 0, 0, 0, TrUserData). + +'dfp_read_field_def_Stream.Open'(<<>>, 0, 0, _, _) -> #'Stream.Open'{}; +'dfp_read_field_def_Stream.Open'(Other, Z1, Z2, F, TrUserData) -> 'dg_read_field_def_Stream.Open'(Other, Z1, Z2, F, TrUserData). + +'dg_read_field_def_Stream.Open'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Stream.Open'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'dg_read_field_def_Stream.Open'(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> 'skip_varint_Stream.Open'(Rest, 0, 0, Key bsr 3, TrUserData); + 1 -> 'skip_64_Stream.Open'(Rest, 0, 0, Key bsr 3, TrUserData); + 2 -> 'skip_length_delimited_Stream.Open'(Rest, 0, 0, Key bsr 3, TrUserData); + 3 -> 'skip_group_Stream.Open'(Rest, 0, 0, Key bsr 3, TrUserData); + 5 -> 'skip_32_Stream.Open'(Rest, 0, 0, Key bsr 3, TrUserData) + end; +'dg_read_field_def_Stream.Open'(<<>>, 0, 0, _, _) -> #'Stream.Open'{}. + +'skip_varint_Stream.Open'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'skip_varint_Stream.Open'(Rest, Z1, Z2, F, TrUserData); +'skip_varint_Stream.Open'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Stream.Open'(Rest, Z1, Z2, F, TrUserData). + +'skip_length_delimited_Stream.Open'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 57 -> 'skip_length_delimited_Stream.Open'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'skip_length_delimited_Stream.Open'(<<0:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Stream.Open'(Rest2, 0, 0, F, TrUserData). + +'skip_group_Stream.Open'(Bin, _, Z2, FNum, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Stream.Open'(Rest, 0, Z2, FNum, TrUserData). + +'skip_32_Stream.Open'(<<_:32, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Stream.Open'(Rest, Z1, Z2, F, TrUserData). + +'skip_64_Stream.Open'(<<_:64, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Stream.Open'(Rest, Z1, Z2, F, TrUserData). + +'decode_msg_Stream.Opened'(Bin, TrUserData) -> 'dfp_read_field_def_Stream.Opened'(Bin, 0, 0, 0, TrUserData). + +'dfp_read_field_def_Stream.Opened'(<<>>, 0, 0, _, _) -> #'Stream.Opened'{}; +'dfp_read_field_def_Stream.Opened'(Other, Z1, Z2, F, TrUserData) -> 'dg_read_field_def_Stream.Opened'(Other, Z1, Z2, F, TrUserData). + +'dg_read_field_def_Stream.Opened'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Stream.Opened'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'dg_read_field_def_Stream.Opened'(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> 'skip_varint_Stream.Opened'(Rest, 0, 0, Key bsr 3, TrUserData); + 1 -> 'skip_64_Stream.Opened'(Rest, 0, 0, Key bsr 3, TrUserData); + 2 -> 'skip_length_delimited_Stream.Opened'(Rest, 0, 0, Key bsr 3, TrUserData); + 3 -> 'skip_group_Stream.Opened'(Rest, 0, 0, Key bsr 3, TrUserData); + 5 -> 'skip_32_Stream.Opened'(Rest, 0, 0, Key bsr 3, TrUserData) + end; +'dg_read_field_def_Stream.Opened'(<<>>, 0, 0, _, _) -> #'Stream.Opened'{}. + +'skip_varint_Stream.Opened'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'skip_varint_Stream.Opened'(Rest, Z1, Z2, F, TrUserData); +'skip_varint_Stream.Opened'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Stream.Opened'(Rest, Z1, Z2, F, TrUserData). + +'skip_length_delimited_Stream.Opened'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 57 -> 'skip_length_delimited_Stream.Opened'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'skip_length_delimited_Stream.Opened'(<<0:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Stream.Opened'(Rest2, 0, 0, F, TrUserData). + +'skip_group_Stream.Opened'(Bin, _, Z2, FNum, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Stream.Opened'(Rest, 0, Z2, FNum, TrUserData). + +'skip_32_Stream.Opened'(<<_:32, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Stream.Opened'(Rest, Z1, Z2, F, TrUserData). + +'skip_64_Stream.Opened'(<<_:64, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Stream.Opened'(Rest, Z1, Z2, F, TrUserData). + +'decode_msg_Stream.OpenError'(Bin, TrUserData) -> 'dfp_read_field_def_Stream.OpenError'(Bin, 0, 0, 0, id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Stream.OpenError'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_Stream.OpenError_reason'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_Stream.OpenError'(<<>>, 0, 0, _, F@_1, _) -> #'Stream.OpenError'{reason = F@_1}; +'dfp_read_field_def_Stream.OpenError'(Other, Z1, Z2, F, F@_1, TrUserData) -> 'dg_read_field_def_Stream.OpenError'(Other, Z1, Z2, F, F@_1, TrUserData). + +'dg_read_field_def_Stream.OpenError'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Stream.OpenError'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'dg_read_field_def_Stream.OpenError'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Stream.OpenError_reason'(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Stream.OpenError'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> 'skip_64_Stream.OpenError'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> 'skip_length_delimited_Stream.OpenError'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> 'skip_group_Stream.OpenError'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> 'skip_32_Stream.OpenError'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +'dg_read_field_def_Stream.OpenError'(<<>>, 0, 0, _, F@_1, _) -> #'Stream.OpenError'{reason = F@_1}. + +'d_field_Stream.OpenError_reason'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_Stream.OpenError_reason'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_Stream.OpenError_reason'(<<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_Stream.OpenError'(RestF, 0, 0, F, NewFValue, TrUserData). + +'skip_varint_Stream.OpenError'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'skip_varint_Stream.OpenError'(Rest, Z1, Z2, F, F@_1, TrUserData); +'skip_varint_Stream.OpenError'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Stream.OpenError'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_length_delimited_Stream.OpenError'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'skip_length_delimited_Stream.OpenError'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'skip_length_delimited_Stream.OpenError'(<<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_Stream.OpenError'(Rest2, 0, 0, F, F@_1, TrUserData). + +'skip_group_Stream.OpenError'(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Stream.OpenError'(Rest, 0, Z2, FNum, F@_1, TrUserData). + +'skip_32_Stream.OpenError'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Stream.OpenError'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_64_Stream.OpenError'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Stream.OpenError'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'decode_msg_Stream.Data'(Bin, TrUserData) -> 'dfp_read_field_def_Stream.Data'(Bin, 0, 0, 0, id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Stream.Data'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_Stream.Data_bytes'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_Stream.Data'(<<>>, 0, 0, _, F@_1, _) -> #'Stream.Data'{bytes = F@_1}; +'dfp_read_field_def_Stream.Data'(Other, Z1, Z2, F, F@_1, TrUserData) -> 'dg_read_field_def_Stream.Data'(Other, Z1, Z2, F, F@_1, TrUserData). + +'dg_read_field_def_Stream.Data'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Stream.Data'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'dg_read_field_def_Stream.Data'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Stream.Data_bytes'(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Stream.Data'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> 'skip_64_Stream.Data'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> 'skip_length_delimited_Stream.Data'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> 'skip_group_Stream.Data'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> 'skip_32_Stream.Data'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +'dg_read_field_def_Stream.Data'(<<>>, 0, 0, _, F@_1, _) -> #'Stream.Data'{bytes = F@_1}. + +'d_field_Stream.Data_bytes'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_Stream.Data_bytes'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_Stream.Data_bytes'(<<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_Stream.Data'(RestF, 0, 0, F, NewFValue, TrUserData). + +'skip_varint_Stream.Data'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'skip_varint_Stream.Data'(Rest, Z1, Z2, F, F@_1, TrUserData); +'skip_varint_Stream.Data'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Stream.Data'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_length_delimited_Stream.Data'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'skip_length_delimited_Stream.Data'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'skip_length_delimited_Stream.Data'(<<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_Stream.Data'(Rest2, 0, 0, F, F@_1, TrUserData). + +'skip_group_Stream.Data'(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Stream.Data'(Rest, 0, Z2, FNum, F@_1, TrUserData). + +'skip_32_Stream.Data'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Stream.Data'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_64_Stream.Data'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Stream.Data'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'decode_msg_Stream.Fin'(Bin, TrUserData) -> 'dfp_read_field_def_Stream.Fin'(Bin, 0, 0, 0, TrUserData). + +'dfp_read_field_def_Stream.Fin'(<<>>, 0, 0, _, _) -> #'Stream.Fin'{}; +'dfp_read_field_def_Stream.Fin'(Other, Z1, Z2, F, TrUserData) -> 'dg_read_field_def_Stream.Fin'(Other, Z1, Z2, F, TrUserData). + +'dg_read_field_def_Stream.Fin'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Stream.Fin'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'dg_read_field_def_Stream.Fin'(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> 'skip_varint_Stream.Fin'(Rest, 0, 0, Key bsr 3, TrUserData); + 1 -> 'skip_64_Stream.Fin'(Rest, 0, 0, Key bsr 3, TrUserData); + 2 -> 'skip_length_delimited_Stream.Fin'(Rest, 0, 0, Key bsr 3, TrUserData); + 3 -> 'skip_group_Stream.Fin'(Rest, 0, 0, Key bsr 3, TrUserData); + 5 -> 'skip_32_Stream.Fin'(Rest, 0, 0, Key bsr 3, TrUserData) + end; +'dg_read_field_def_Stream.Fin'(<<>>, 0, 0, _, _) -> #'Stream.Fin'{}. + +'skip_varint_Stream.Fin'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'skip_varint_Stream.Fin'(Rest, Z1, Z2, F, TrUserData); +'skip_varint_Stream.Fin'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Stream.Fin'(Rest, Z1, Z2, F, TrUserData). + +'skip_length_delimited_Stream.Fin'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 57 -> 'skip_length_delimited_Stream.Fin'(Rest, N + 7, X bsl N + Acc, F, TrUserData); +'skip_length_delimited_Stream.Fin'(<<0:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Stream.Fin'(Rest2, 0, 0, F, TrUserData). + +'skip_group_Stream.Fin'(Bin, _, Z2, FNum, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Stream.Fin'(Rest, 0, Z2, FNum, TrUserData). + +'skip_32_Stream.Fin'(<<_:32, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Stream.Fin'(Rest, Z1, Z2, F, TrUserData). + +'skip_64_Stream.Fin'(<<_:64, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_Stream.Fin'(Rest, Z1, Z2, F, TrUserData). + +'decode_msg_Stream.Reset'(Bin, TrUserData) -> 'dfp_read_field_def_Stream.Reset'(Bin, 0, 0, 0, id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Stream.Reset'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_Stream.Reset_reason'(Rest, Z1, Z2, F, F@_1, TrUserData); +'dfp_read_field_def_Stream.Reset'(<<>>, 0, 0, _, F@_1, _) -> #'Stream.Reset'{reason = F@_1}; +'dfp_read_field_def_Stream.Reset'(Other, Z1, Z2, F, F@_1, TrUserData) -> 'dg_read_field_def_Stream.Reset'(Other, Z1, Z2, F, F@_1, TrUserData). + +'dg_read_field_def_Stream.Reset'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_Stream.Reset'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'dg_read_field_def_Stream.Reset'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_Stream.Reset_reason'(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_Stream.Reset'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> 'skip_64_Stream.Reset'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> 'skip_length_delimited_Stream.Reset'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> 'skip_group_Stream.Reset'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> 'skip_32_Stream.Reset'(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +'dg_read_field_def_Stream.Reset'(<<>>, 0, 0, _, F@_1, _) -> #'Stream.Reset'{reason = F@_1}. + +'d_field_Stream.Reset_reason'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'd_field_Stream.Reset_reason'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'d_field_Stream.Reset_reason'(<<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_Stream.Reset'(RestF, 0, 0, F, NewFValue, TrUserData). + +'skip_varint_Stream.Reset'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'skip_varint_Stream.Reset'(Rest, Z1, Z2, F, F@_1, TrUserData); +'skip_varint_Stream.Reset'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Stream.Reset'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_length_delimited_Stream.Reset'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> 'skip_length_delimited_Stream.Reset'(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +'skip_length_delimited_Stream.Reset'(<<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_Stream.Reset'(Rest2, 0, 0, F, F@_1, TrUserData). + +'skip_group_Stream.Reset'(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Stream.Reset'(Rest, 0, Z2, FNum, F@_1, TrUserData). + +'skip_32_Stream.Reset'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Stream.Reset'(Rest, Z1, Z2, F, F@_1, TrUserData). + +'skip_64_Stream.Reset'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'dfp_read_field_def_Stream.Reset'(Rest, Z1, Z2, F, F@_1, TrUserData). + +decode_msg_Stream(Bin, TrUserData) -> dfp_read_field_def_Stream(Bin, 0, 0, 0, id(0, TrUserData), id(undefined, TrUserData), TrUserData). + +dfp_read_field_def_Stream(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Stream_stream_id(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Stream(<<82, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Stream_open(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Stream(<<90, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Stream_opened(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Stream(<<98, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Stream_open_error(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Stream(<<106, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Stream_data(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Stream(<<114, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Stream_fin(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Stream(<<122, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_Stream_reset(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_Stream(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Stream'{stream_id = F@_1, payload = F@_2}; +dfp_read_field_def_Stream(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_Stream(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_Stream(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_Stream(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_Stream(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_Stream_stream_id(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 82 -> d_field_Stream_open(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 90 -> d_field_Stream_opened(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 98 -> d_field_Stream_open_error(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 106 -> d_field_Stream_data(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 114 -> d_field_Stream_fin(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 122 -> d_field_Stream_reset(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_Stream(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_Stream(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_Stream(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_Stream(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_Stream(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_Stream(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'Stream'{stream_id = F@_1, payload = F@_2}. + +d_field_Stream_stream_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Stream_stream_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Stream_stream_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_Stream(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_Stream_open(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Stream_open(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Stream_open(<<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_Stream.Open'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Stream(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({open, NewFValue}, TrUserData); + {open, MVPrev} -> id({open, 'merge_msg_Stream.Open'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({open, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_Stream_opened(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Stream_opened(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Stream_opened(<<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_Stream.Opened'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Stream(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({opened, NewFValue}, TrUserData); + {opened, MVPrev} -> id({opened, 'merge_msg_Stream.Opened'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({opened, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_Stream_open_error(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Stream_open_error(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Stream_open_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_Stream.OpenError'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Stream(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({open_error, NewFValue}, TrUserData); + {open_error, MVPrev} -> id({open_error, 'merge_msg_Stream.OpenError'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({open_error, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_Stream_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Stream_data(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Stream_data(<<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_Stream.Data'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Stream(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({data, NewFValue}, TrUserData); + {data, MVPrev} -> id({data, 'merge_msg_Stream.Data'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({data, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_Stream_fin(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Stream_fin(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Stream_fin(<<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_Stream.Fin'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Stream(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({fin, NewFValue}, TrUserData); + {fin, MVPrev} -> id({fin, 'merge_msg_Stream.Fin'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({fin, NewFValue}, TrUserData) + end, + TrUserData). + +d_field_Stream_reset(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_Stream_reset(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_Stream_reset(<<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_Stream.Reset'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_Stream(RestF, + 0, + 0, + F, + F@_1, + case Prev of + undefined -> id({reset, NewFValue}, TrUserData); + {reset, MVPrev} -> id({reset, 'merge_msg_Stream.Reset'(MVPrev, NewFValue, TrUserData)}, TrUserData); + _ -> id({reset, NewFValue}, TrUserData) + end, + TrUserData). + +skip_varint_Stream(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_Stream(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_Stream(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Stream(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_Stream(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_Stream(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_Stream(<<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_Stream(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_Stream(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_Stream(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_Stream(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Stream(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_Stream(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_Stream(Rest, Z1, Z2, F, F@_1, F@_2, 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 + 'Request.AuthRequest' -> 'merge_msg_Request.AuthRequest'(Prev, New, TrUserData); + 'Request' -> merge_msg_Request(Prev, New, TrUserData); + 'Response.Error' -> 'merge_msg_Response.Error'(Prev, New, TrUserData); + 'Response.AuthResponse' -> 'merge_msg_Response.AuthResponse'(Prev, New, TrUserData); + 'Response' -> merge_msg_Response(Prev, New, TrUserData); + 'Command.Container' -> 'merge_msg_Command.Container'(Prev, New, TrUserData); + 'Command.Container.ContainerConfig' -> 'merge_msg_Command.Container.ContainerConfig'(Prev, New, TrUserData); + 'Command.Container.ContainerRemove' -> 'merge_msg_Command.Container.ContainerRemove'(Prev, New, TrUserData); + 'Command.Container.ContainerKill' -> 'merge_msg_Command.Container.ContainerKill'(Prev, New, TrUserData); + 'Command.Container.ContainerStop' -> 'merge_msg_Command.Container.ContainerStop'(Prev, New, TrUserData); + 'Command.Container.ContainerStart' -> 'merge_msg_Command.Container.ContainerStart'(Prev, New, TrUserData); + 'Command.Container.ContainerDeploy' -> 'merge_msg_Command.Container.ContainerDeploy'(Prev, New, TrUserData); + 'Command.Container.ContainerList' -> 'merge_msg_Command.Container.ContainerList'(Prev, New, TrUserData); + 'Command.Container.ContainerTarget' -> 'merge_msg_Command.Container.ContainerTarget'(Prev, New, TrUserData); + 'Command' -> merge_msg_Command(Prev, New, TrUserData); + 'CommandResponse.Error' -> 'merge_msg_CommandResponse.Error'(Prev, New, TrUserData); + 'CommandResponse' -> merge_msg_CommandResponse(Prev, New, TrUserData); + 'Message.Ping' -> 'merge_msg_Message.Ping'(Prev, New, TrUserData); + 'Message.Pong' -> 'merge_msg_Message.Pong'(Prev, New, TrUserData); + 'Message.Pub' -> 'merge_msg_Message.Pub'(Prev, New, TrUserData); + 'Message.MetricData' -> 'merge_msg_Message.MetricData'(Prev, New, TrUserData); + 'Message.TaskEvent' -> 'merge_msg_Message.TaskEvent'(Prev, New, TrUserData); + 'Message' -> merge_msg_Message(Prev, New, TrUserData); + 'Stream.Open' -> 'merge_msg_Stream.Open'(Prev, New, TrUserData); + 'Stream.Opened' -> 'merge_msg_Stream.Opened'(Prev, New, TrUserData); + 'Stream.OpenError' -> 'merge_msg_Stream.OpenError'(Prev, New, TrUserData); + 'Stream.Data' -> 'merge_msg_Stream.Data'(Prev, New, TrUserData); + 'Stream.Fin' -> 'merge_msg_Stream.Fin'(Prev, New, TrUserData); + 'Stream.Reset' -> 'merge_msg_Stream.Reset'(Prev, New, TrUserData); + 'Stream' -> merge_msg_Stream(Prev, New, TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_Request.AuthRequest'/3}). +'merge_msg_Request.AuthRequest'(#'Request.AuthRequest'{uuid = PFuuid, token = PFtoken, timestamp = PFtimestamp}, #'Request.AuthRequest'{uuid = NFuuid, token = NFtoken, timestamp = NFtimestamp}, _) -> + #'Request.AuthRequest'{uuid = + if NFuuid =:= undefined -> PFuuid; + true -> NFuuid + end, + token = + if NFtoken =:= undefined -> PFtoken; + true -> NFtoken + end, + timestamp = + if NFtimestamp =:= undefined -> PFtimestamp; + true -> NFtimestamp + end}. + +-compile({nowarn_unused_function,merge_msg_Request/3}). +merge_msg_Request(#'Request'{packet_id = PFpacket_id, body = PFbody}, #'Request'{packet_id = NFpacket_id, body = NFbody}, TrUserData) -> + #'Request'{packet_id = + if NFpacket_id =:= undefined -> PFpacket_id; + true -> NFpacket_id + end, + body = + case {PFbody, NFbody} of + {{auth_request, OPFbody}, {auth_request, ONFbody}} -> {auth_request, 'merge_msg_Request.AuthRequest'(OPFbody, ONFbody, TrUserData)}; + {_, undefined} -> PFbody; + _ -> NFbody + end}. + +-compile({nowarn_unused_function,'merge_msg_Response.Error'/3}). +'merge_msg_Response.Error'(#'Response.Error'{code = PFcode, reason = PFreason}, #'Response.Error'{code = NFcode, reason = NFreason}, _) -> + #'Response.Error'{code = + if NFcode =:= undefined -> PFcode; + true -> NFcode + end, + reason = + if NFreason =:= undefined -> PFreason; + true -> NFreason + end}. + +-compile({nowarn_unused_function,'merge_msg_Response.AuthResponse'/3}). +'merge_msg_Response.AuthResponse'(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,merge_msg_Response/3}). +merge_msg_Response(#'Response'{packet_id = PFpacket_id, body = PFbody}, #'Response'{packet_id = NFpacket_id, body = NFbody}, TrUserData) -> + #'Response'{packet_id = + if NFpacket_id =:= undefined -> PFpacket_id; + true -> NFpacket_id + end, + body = + case {PFbody, NFbody} of + {{auth_response, OPFbody}, {auth_response, ONFbody}} -> {auth_response, 'merge_msg_Response.AuthResponse'(OPFbody, ONFbody, TrUserData)}; + {{error, OPFbody}, {error, ONFbody}} -> {error, 'merge_msg_Response.Error'(OPFbody, ONFbody, TrUserData)}; + {_, undefined} -> PFbody; + _ -> NFbody + end}. + +-compile({nowarn_unused_function,'merge_msg_Command.Container'/3}). +'merge_msg_Command.Container'(#'Command.Container'{action = PFaction}, #'Command.Container'{action = NFaction}, TrUserData) -> + #'Command.Container'{action = + case {PFaction, NFaction} of + {{list, OPFaction}, {list, ONFaction}} -> {list, 'merge_msg_Command.Container.ContainerList'(OPFaction, ONFaction, TrUserData)}; + {{deploy, OPFaction}, {deploy, ONFaction}} -> {deploy, 'merge_msg_Command.Container.ContainerDeploy'(OPFaction, ONFaction, TrUserData)}; + {{start, OPFaction}, {start, ONFaction}} -> {start, 'merge_msg_Command.Container.ContainerStart'(OPFaction, ONFaction, TrUserData)}; + {{stop, OPFaction}, {stop, ONFaction}} -> {stop, 'merge_msg_Command.Container.ContainerStop'(OPFaction, ONFaction, TrUserData)}; + {{kill, OPFaction}, {kill, ONFaction}} -> {kill, 'merge_msg_Command.Container.ContainerKill'(OPFaction, ONFaction, TrUserData)}; + {{remove, OPFaction}, {remove, ONFaction}} -> {remove, 'merge_msg_Command.Container.ContainerRemove'(OPFaction, ONFaction, TrUserData)}; + {{config, OPFaction}, {config, ONFaction}} -> {config, 'merge_msg_Command.Container.ContainerConfig'(OPFaction, ONFaction, TrUserData)}; + {_, undefined} -> PFaction; + _ -> NFaction + end}. + +-compile({nowarn_unused_function,'merge_msg_Command.Container.ContainerConfig'/3}). +'merge_msg_Command.Container.ContainerConfig'(#'Command.Container.ContainerConfig'{target = PFtarget, config = PFconfig}, #'Command.Container.ContainerConfig'{target = NFtarget, config = NFconfig}, TrUserData) -> + #'Command.Container.ContainerConfig'{target = + if PFtarget /= undefined, NFtarget /= undefined -> 'merge_msg_Command.Container.ContainerTarget'(PFtarget, NFtarget, TrUserData); + PFtarget == undefined -> NFtarget; + NFtarget == undefined -> PFtarget + end, + config = + if NFconfig =:= undefined -> PFconfig; + true -> NFconfig + end}. + +-compile({nowarn_unused_function,'merge_msg_Command.Container.ContainerRemove'/3}). +'merge_msg_Command.Container.ContainerRemove'(#'Command.Container.ContainerRemove'{target = PFtarget, force = PFforce, remove_volumes = PFremove_volumes}, + #'Command.Container.ContainerRemove'{target = NFtarget, force = NFforce, remove_volumes = NFremove_volumes}, TrUserData) -> + #'Command.Container.ContainerRemove'{target = + if PFtarget /= undefined, NFtarget /= undefined -> 'merge_msg_Command.Container.ContainerTarget'(PFtarget, NFtarget, TrUserData); + PFtarget == undefined -> NFtarget; + NFtarget == undefined -> PFtarget + end, + force = + if NFforce =:= undefined -> PFforce; + true -> NFforce + end, + remove_volumes = + if NFremove_volumes =:= undefined -> PFremove_volumes; + true -> NFremove_volumes + end}. + +-compile({nowarn_unused_function,'merge_msg_Command.Container.ContainerKill'/3}). +'merge_msg_Command.Container.ContainerKill'(#'Command.Container.ContainerKill'{target = PFtarget, signal = PFsignal}, #'Command.Container.ContainerKill'{target = NFtarget, signal = NFsignal}, TrUserData) -> + #'Command.Container.ContainerKill'{target = + if PFtarget /= undefined, NFtarget /= undefined -> 'merge_msg_Command.Container.ContainerTarget'(PFtarget, NFtarget, TrUserData); + PFtarget == undefined -> NFtarget; + NFtarget == undefined -> PFtarget + end, + signal = + if NFsignal =:= undefined -> PFsignal; + true -> NFsignal + end}. + +-compile({nowarn_unused_function,'merge_msg_Command.Container.ContainerStop'/3}). +'merge_msg_Command.Container.ContainerStop'(#'Command.Container.ContainerStop'{target = PFtarget, timeout_seconds = PFtimeout_seconds}, #'Command.Container.ContainerStop'{target = NFtarget, timeout_seconds = NFtimeout_seconds}, TrUserData) -> + #'Command.Container.ContainerStop'{target = + if PFtarget /= undefined, NFtarget /= undefined -> 'merge_msg_Command.Container.ContainerTarget'(PFtarget, NFtarget, TrUserData); + PFtarget == undefined -> NFtarget; + NFtarget == undefined -> PFtarget + end, + timeout_seconds = + if NFtimeout_seconds =:= undefined -> PFtimeout_seconds; + true -> NFtimeout_seconds + end}. + +-compile({nowarn_unused_function,'merge_msg_Command.Container.ContainerStart'/3}). +'merge_msg_Command.Container.ContainerStart'(#'Command.Container.ContainerStart'{target = PFtarget}, #'Command.Container.ContainerStart'{target = NFtarget}, TrUserData) -> + #'Command.Container.ContainerStart'{target = + if PFtarget /= undefined, NFtarget /= undefined -> 'merge_msg_Command.Container.ContainerTarget'(PFtarget, NFtarget, TrUserData); + PFtarget == undefined -> NFtarget; + NFtarget == undefined -> PFtarget + end}. + +-compile({nowarn_unused_function,'merge_msg_Command.Container.ContainerDeploy'/3}). +'merge_msg_Command.Container.ContainerDeploy'(#'Command.Container.ContainerDeploy'{task_id = PFtask_id, params = PFparams}, #'Command.Container.ContainerDeploy'{task_id = NFtask_id, params = NFparams}, _) -> + #'Command.Container.ContainerDeploy'{task_id = + if NFtask_id =:= undefined -> PFtask_id; + true -> NFtask_id + end, + params = + if NFparams =:= undefined -> PFparams; + true -> NFparams + end}. + +-compile({nowarn_unused_function,'merge_msg_Command.Container.ContainerList'/3}). +'merge_msg_Command.Container.ContainerList'(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,'merge_msg_Command.Container.ContainerTarget'/3}). +'merge_msg_Command.Container.ContainerTarget'(#'Command.Container.ContainerTarget'{name = PFname, id = PFid}, #'Command.Container.ContainerTarget'{name = NFname, id = NFid}, _) -> + #'Command.Container.ContainerTarget'{name = + if NFname =:= undefined -> PFname; + true -> NFname + end, + id = + if NFid =:= undefined -> PFid; + true -> NFid + end}. + +-compile({nowarn_unused_function,merge_msg_Command/3}). +merge_msg_Command(#'Command'{packet_id = PFpacket_id, body = PFbody}, #'Command'{packet_id = NFpacket_id, body = NFbody}, TrUserData) -> + #'Command'{packet_id = + if NFpacket_id =:= undefined -> PFpacket_id; + true -> NFpacket_id + end, + body = + case {PFbody, NFbody} of + {{container, OPFbody}, {container, ONFbody}} -> {container, 'merge_msg_Command.Container'(OPFbody, ONFbody, TrUserData)}; + {_, undefined} -> PFbody; + _ -> NFbody + end}. + +-compile({nowarn_unused_function,'merge_msg_CommandResponse.Error'/3}). +'merge_msg_CommandResponse.Error'(#'CommandResponse.Error'{code = PFcode, reason = PFreason}, #'CommandResponse.Error'{code = NFcode, reason = NFreason}, _) -> + #'CommandResponse.Error'{code = + if NFcode =:= undefined -> PFcode; + true -> NFcode + end, + reason = + if NFreason =:= undefined -> PFreason; + true -> NFreason + end}. + +-compile({nowarn_unused_function,merge_msg_CommandResponse/3}). +merge_msg_CommandResponse(#'CommandResponse'{packet_id = PFpacket_id, body = PFbody}, #'CommandResponse'{packet_id = NFpacket_id, body = NFbody}, TrUserData) -> + #'CommandResponse'{packet_id = + if NFpacket_id =:= undefined -> PFpacket_id; + true -> NFpacket_id + end, + body = + case {PFbody, NFbody} of + {{error, OPFbody}, {error, ONFbody}} -> {error, 'merge_msg_CommandResponse.Error'(OPFbody, ONFbody, TrUserData)}; + {_, undefined} -> PFbody; + _ -> NFbody + end}. + +-compile({nowarn_unused_function,'merge_msg_Message.Ping'/3}). +'merge_msg_Message.Ping'(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,'merge_msg_Message.Pong'/3}). +'merge_msg_Message.Pong'(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,'merge_msg_Message.Pub'/3}). +'merge_msg_Message.Pub'(#'Message.Pub'{topic = PFtopic, qos = PFqos, content = PFcontent}, #'Message.Pub'{topic = NFtopic, qos = NFqos, content = NFcontent}, _) -> + #'Message.Pub'{topic = + if NFtopic =:= undefined -> PFtopic; + true -> NFtopic + end, + qos = + if NFqos =:= undefined -> PFqos; + true -> NFqos + end, + content = + if NFcontent =:= undefined -> PFcontent; + true -> NFcontent + end}. + +-compile({nowarn_unused_function,'merge_msg_Message.MetricData'/3}). +'merge_msg_Message.MetricData'(#'Message.MetricData'{route_key = PFroute_key, metric = PFmetric}, #'Message.MetricData'{route_key = NFroute_key, metric = NFmetric}, _) -> + #'Message.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_Message.TaskEvent'/3}). +'merge_msg_Message.TaskEvent'(#'Message.TaskEvent'{task_id = PFtask_id, type = PFtype, stream = PFstream}, #'Message.TaskEvent'{task_id = NFtask_id, type = NFtype, stream = NFstream}, _) -> + #'Message.TaskEvent'{task_id = + if NFtask_id =:= undefined -> PFtask_id; + true -> NFtask_id + end, + type = + if NFtype =:= undefined -> PFtype; + true -> NFtype + end, + stream = + if NFstream =:= undefined -> PFstream; + true -> NFstream + end}. + +-compile({nowarn_unused_function,merge_msg_Message/3}). +merge_msg_Message(#'Message'{body = PFbody}, #'Message'{body = NFbody}, TrUserData) -> + #'Message'{body = + case {PFbody, NFbody} of + {{ping, OPFbody}, {ping, ONFbody}} -> {ping, 'merge_msg_Message.Ping'(OPFbody, ONFbody, TrUserData)}; + {{pong, OPFbody}, {pong, ONFbody}} -> {pong, 'merge_msg_Message.Pong'(OPFbody, ONFbody, TrUserData)}; + {{pub, OPFbody}, {pub, ONFbody}} -> {pub, 'merge_msg_Message.Pub'(OPFbody, ONFbody, TrUserData)}; + {{metric_data, OPFbody}, {metric_data, ONFbody}} -> {metric_data, 'merge_msg_Message.MetricData'(OPFbody, ONFbody, TrUserData)}; + {{task_event, OPFbody}, {task_event, ONFbody}} -> {task_event, 'merge_msg_Message.TaskEvent'(OPFbody, ONFbody, TrUserData)}; + {_, undefined} -> PFbody; + _ -> NFbody + end}. + +-compile({nowarn_unused_function,'merge_msg_Stream.Open'/3}). +'merge_msg_Stream.Open'(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,'merge_msg_Stream.Opened'/3}). +'merge_msg_Stream.Opened'(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,'merge_msg_Stream.OpenError'/3}). +'merge_msg_Stream.OpenError'(#'Stream.OpenError'{reason = PFreason}, #'Stream.OpenError'{reason = NFreason}, _) -> + #'Stream.OpenError'{reason = + if NFreason =:= undefined -> PFreason; + true -> NFreason + end}. + +-compile({nowarn_unused_function,'merge_msg_Stream.Data'/3}). +'merge_msg_Stream.Data'(#'Stream.Data'{bytes = PFbytes}, #'Stream.Data'{bytes = NFbytes}, _) -> + #'Stream.Data'{bytes = + if NFbytes =:= undefined -> PFbytes; + true -> NFbytes + end}. + +-compile({nowarn_unused_function,'merge_msg_Stream.Fin'/3}). +'merge_msg_Stream.Fin'(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,'merge_msg_Stream.Reset'/3}). +'merge_msg_Stream.Reset'(#'Stream.Reset'{reason = PFreason}, #'Stream.Reset'{reason = NFreason}, _) -> + #'Stream.Reset'{reason = + if NFreason =:= undefined -> PFreason; + true -> NFreason + end}. + +-compile({nowarn_unused_function,merge_msg_Stream/3}). +merge_msg_Stream(#'Stream'{stream_id = PFstream_id, payload = PFpayload}, #'Stream'{stream_id = NFstream_id, payload = NFpayload}, TrUserData) -> + #'Stream'{stream_id = + if NFstream_id =:= undefined -> PFstream_id; + true -> NFstream_id + end, + payload = + case {PFpayload, NFpayload} of + {{open, OPFpayload}, {open, ONFpayload}} -> {open, 'merge_msg_Stream.Open'(OPFpayload, ONFpayload, TrUserData)}; + {{opened, OPFpayload}, {opened, ONFpayload}} -> {opened, 'merge_msg_Stream.Opened'(OPFpayload, ONFpayload, TrUserData)}; + {{open_error, OPFpayload}, {open_error, ONFpayload}} -> {open_error, 'merge_msg_Stream.OpenError'(OPFpayload, ONFpayload, TrUserData)}; + {{data, OPFpayload}, {data, ONFpayload}} -> {data, 'merge_msg_Stream.Data'(OPFpayload, ONFpayload, TrUserData)}; + {{fin, OPFpayload}, {fin, ONFpayload}} -> {fin, 'merge_msg_Stream.Fin'(OPFpayload, ONFpayload, TrUserData)}; + {{reset, OPFpayload}, {reset, ONFpayload}} -> {reset, 'merge_msg_Stream.Reset'(OPFpayload, ONFpayload, TrUserData)}; + {_, undefined} -> PFpayload; + _ -> NFpayload + 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 + 'Request.AuthRequest' -> 'v_msg_Request.AuthRequest'(Msg, [MsgName], TrUserData); + 'Request' -> v_msg_Request(Msg, [MsgName], TrUserData); + 'Response.Error' -> 'v_msg_Response.Error'(Msg, [MsgName], TrUserData); + 'Response.AuthResponse' -> 'v_msg_Response.AuthResponse'(Msg, [MsgName], TrUserData); + 'Response' -> v_msg_Response(Msg, [MsgName], TrUserData); + 'Command.Container' -> 'v_msg_Command.Container'(Msg, [MsgName], TrUserData); + 'Command.Container.ContainerConfig' -> 'v_msg_Command.Container.ContainerConfig'(Msg, [MsgName], TrUserData); + 'Command.Container.ContainerRemove' -> 'v_msg_Command.Container.ContainerRemove'(Msg, [MsgName], TrUserData); + 'Command.Container.ContainerKill' -> 'v_msg_Command.Container.ContainerKill'(Msg, [MsgName], TrUserData); + 'Command.Container.ContainerStop' -> 'v_msg_Command.Container.ContainerStop'(Msg, [MsgName], TrUserData); + 'Command.Container.ContainerStart' -> 'v_msg_Command.Container.ContainerStart'(Msg, [MsgName], TrUserData); + 'Command.Container.ContainerDeploy' -> 'v_msg_Command.Container.ContainerDeploy'(Msg, [MsgName], TrUserData); + 'Command.Container.ContainerList' -> 'v_msg_Command.Container.ContainerList'(Msg, [MsgName], TrUserData); + 'Command.Container.ContainerTarget' -> 'v_msg_Command.Container.ContainerTarget'(Msg, [MsgName], TrUserData); + 'Command' -> v_msg_Command(Msg, [MsgName], TrUserData); + 'CommandResponse.Error' -> 'v_msg_CommandResponse.Error'(Msg, [MsgName], TrUserData); + 'CommandResponse' -> v_msg_CommandResponse(Msg, [MsgName], TrUserData); + 'Message.Ping' -> 'v_msg_Message.Ping'(Msg, [MsgName], TrUserData); + 'Message.Pong' -> 'v_msg_Message.Pong'(Msg, [MsgName], TrUserData); + 'Message.Pub' -> 'v_msg_Message.Pub'(Msg, [MsgName], TrUserData); + 'Message.MetricData' -> 'v_msg_Message.MetricData'(Msg, [MsgName], TrUserData); + 'Message.TaskEvent' -> 'v_msg_Message.TaskEvent'(Msg, [MsgName], TrUserData); + 'Message' -> v_msg_Message(Msg, [MsgName], TrUserData); + 'Stream.Open' -> 'v_msg_Stream.Open'(Msg, [MsgName], TrUserData); + 'Stream.Opened' -> 'v_msg_Stream.Opened'(Msg, [MsgName], TrUserData); + 'Stream.OpenError' -> 'v_msg_Stream.OpenError'(Msg, [MsgName], TrUserData); + 'Stream.Data' -> 'v_msg_Stream.Data'(Msg, [MsgName], TrUserData); + 'Stream.Fin' -> 'v_msg_Stream.Fin'(Msg, [MsgName], TrUserData); + 'Stream.Reset' -> 'v_msg_Stream.Reset'(Msg, [MsgName], TrUserData); + 'Stream' -> v_msg_Stream(Msg, [MsgName], TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_submsg_Request.AuthRequest'/3}). +-dialyzer({nowarn_function,'v_submsg_Request.AuthRequest'/3}). +'v_submsg_Request.AuthRequest'(Msg, Path, TrUserData) -> 'v_msg_Request.AuthRequest'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Request.AuthRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Request.AuthRequest'/3}). +'v_msg_Request.AuthRequest'(#'Request.AuthRequest'{uuid = F1, token = F2, timestamp = F3}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_bytes(F1, [uuid | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [token | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_uint64(F3, [timestamp | Path], TrUserData) + end, + ok; +'v_msg_Request.AuthRequest'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Request.AuthRequest'}, X, Path). + +-compile({nowarn_unused_function,v_msg_Request/3}). +-dialyzer({nowarn_function,v_msg_Request/3}). +v_msg_Request(#'Request'{packet_id = F1, body = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [packet_id | Path], TrUserData) + end, + case F2 of + undefined -> ok; + {auth_request, OF2} -> 'v_submsg_Request.AuthRequest'(OF2, [auth_request, body | Path], TrUserData); + _ -> mk_type_error(invalid_oneof, F2, [body | Path]) + end, + ok; +v_msg_Request(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Request'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Response.Error'/3}). +-dialyzer({nowarn_function,'v_submsg_Response.Error'/3}). +'v_submsg_Response.Error'(Msg, Path, TrUserData) -> 'v_msg_Response.Error'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Response.Error'/3}). +-dialyzer({nowarn_function,'v_msg_Response.Error'/3}). +'v_msg_Response.Error'(#'Response.Error'{code = F1, reason = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [code | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [reason | Path], TrUserData) + end, + ok; +'v_msg_Response.Error'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Response.Error'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Response.AuthResponse'/3}). +-dialyzer({nowarn_function,'v_submsg_Response.AuthResponse'/3}). +'v_submsg_Response.AuthResponse'(Msg, Path, TrUserData) -> 'v_msg_Response.AuthResponse'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Response.AuthResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Response.AuthResponse'/3}). +'v_msg_Response.AuthResponse'(#'Response.AuthResponse'{}, _Path, _) -> ok; +'v_msg_Response.AuthResponse'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Response.AuthResponse'}, X, Path). + +-compile({nowarn_unused_function,v_msg_Response/3}). +-dialyzer({nowarn_function,v_msg_Response/3}). +v_msg_Response(#'Response'{packet_id = F1, body = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [packet_id | Path], TrUserData) + end, + case F2 of + undefined -> ok; + {auth_response, OF2} -> 'v_submsg_Response.AuthResponse'(OF2, [auth_response, body | Path], TrUserData); + {error, OF2} -> 'v_submsg_Response.Error'(OF2, [error, body | Path], TrUserData); + _ -> mk_type_error(invalid_oneof, F2, [body | Path]) + end, + ok; +v_msg_Response(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Response'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Command.Container'/3}). +-dialyzer({nowarn_function,'v_submsg_Command.Container'/3}). +'v_submsg_Command.Container'(Msg, Path, TrUserData) -> 'v_msg_Command.Container'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Command.Container'/3}). +-dialyzer({nowarn_function,'v_msg_Command.Container'/3}). +'v_msg_Command.Container'(#'Command.Container'{action = F1}, Path, TrUserData) -> + case F1 of + undefined -> ok; + {list, OF1} -> 'v_submsg_Command.Container.ContainerList'(OF1, [list, action | Path], TrUserData); + {deploy, OF1} -> 'v_submsg_Command.Container.ContainerDeploy'(OF1, [deploy, action | Path], TrUserData); + {start, OF1} -> 'v_submsg_Command.Container.ContainerStart'(OF1, [start, action | Path], TrUserData); + {stop, OF1} -> 'v_submsg_Command.Container.ContainerStop'(OF1, [stop, action | Path], TrUserData); + {kill, OF1} -> 'v_submsg_Command.Container.ContainerKill'(OF1, [kill, action | Path], TrUserData); + {remove, OF1} -> 'v_submsg_Command.Container.ContainerRemove'(OF1, [remove, action | Path], TrUserData); + {config, OF1} -> 'v_submsg_Command.Container.ContainerConfig'(OF1, [config, action | Path], TrUserData); + _ -> mk_type_error(invalid_oneof, F1, [action | Path]) + end, + ok; +'v_msg_Command.Container'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Command.Container'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Command.Container.ContainerConfig'/3}). +-dialyzer({nowarn_function,'v_submsg_Command.Container.ContainerConfig'/3}). +'v_submsg_Command.Container.ContainerConfig'(Msg, Path, TrUserData) -> 'v_msg_Command.Container.ContainerConfig'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Command.Container.ContainerConfig'/3}). +-dialyzer({nowarn_function,'v_msg_Command.Container.ContainerConfig'/3}). +'v_msg_Command.Container.ContainerConfig'(#'Command.Container.ContainerConfig'{target = F1, config = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> 'v_submsg_Command.Container.ContainerTarget'(F1, [target | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [config | Path], TrUserData) + end, + ok; +'v_msg_Command.Container.ContainerConfig'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Command.Container.ContainerConfig'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Command.Container.ContainerRemove'/3}). +-dialyzer({nowarn_function,'v_submsg_Command.Container.ContainerRemove'/3}). +'v_submsg_Command.Container.ContainerRemove'(Msg, Path, TrUserData) -> 'v_msg_Command.Container.ContainerRemove'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Command.Container.ContainerRemove'/3}). +-dialyzer({nowarn_function,'v_msg_Command.Container.ContainerRemove'/3}). +'v_msg_Command.Container.ContainerRemove'(#'Command.Container.ContainerRemove'{target = F1, force = F2, remove_volumes = F3}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> 'v_submsg_Command.Container.ContainerTarget'(F1, [target | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bool(F2, [force | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_bool(F3, [remove_volumes | Path], TrUserData) + end, + ok; +'v_msg_Command.Container.ContainerRemove'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Command.Container.ContainerRemove'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Command.Container.ContainerKill'/3}). +-dialyzer({nowarn_function,'v_submsg_Command.Container.ContainerKill'/3}). +'v_submsg_Command.Container.ContainerKill'(Msg, Path, TrUserData) -> 'v_msg_Command.Container.ContainerKill'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Command.Container.ContainerKill'/3}). +-dialyzer({nowarn_function,'v_msg_Command.Container.ContainerKill'/3}). +'v_msg_Command.Container.ContainerKill'(#'Command.Container.ContainerKill'{target = F1, signal = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> 'v_submsg_Command.Container.ContainerTarget'(F1, [target | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [signal | Path], TrUserData) + end, + ok; +'v_msg_Command.Container.ContainerKill'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Command.Container.ContainerKill'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Command.Container.ContainerStop'/3}). +-dialyzer({nowarn_function,'v_submsg_Command.Container.ContainerStop'/3}). +'v_submsg_Command.Container.ContainerStop'(Msg, Path, TrUserData) -> 'v_msg_Command.Container.ContainerStop'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Command.Container.ContainerStop'/3}). +-dialyzer({nowarn_function,'v_msg_Command.Container.ContainerStop'/3}). +'v_msg_Command.Container.ContainerStop'(#'Command.Container.ContainerStop'{target = F1, timeout_seconds = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> 'v_submsg_Command.Container.ContainerTarget'(F1, [target | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_uint32(F2, [timeout_seconds | Path], TrUserData) + end, + ok; +'v_msg_Command.Container.ContainerStop'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Command.Container.ContainerStop'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Command.Container.ContainerStart'/3}). +-dialyzer({nowarn_function,'v_submsg_Command.Container.ContainerStart'/3}). +'v_submsg_Command.Container.ContainerStart'(Msg, Path, TrUserData) -> 'v_msg_Command.Container.ContainerStart'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Command.Container.ContainerStart'/3}). +-dialyzer({nowarn_function,'v_msg_Command.Container.ContainerStart'/3}). +'v_msg_Command.Container.ContainerStart'(#'Command.Container.ContainerStart'{target = F1}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> 'v_submsg_Command.Container.ContainerTarget'(F1, [target | Path], TrUserData) + end, + ok; +'v_msg_Command.Container.ContainerStart'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Command.Container.ContainerStart'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Command.Container.ContainerDeploy'/3}). +-dialyzer({nowarn_function,'v_submsg_Command.Container.ContainerDeploy'/3}). +'v_submsg_Command.Container.ContainerDeploy'(Msg, Path, TrUserData) -> 'v_msg_Command.Container.ContainerDeploy'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Command.Container.ContainerDeploy'/3}). +-dialyzer({nowarn_function,'v_msg_Command.Container.ContainerDeploy'/3}). +'v_msg_Command.Container.ContainerDeploy'(#'Command.Container.ContainerDeploy'{task_id = F1, params = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [task_id | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [params | Path], TrUserData) + end, + ok; +'v_msg_Command.Container.ContainerDeploy'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Command.Container.ContainerDeploy'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Command.Container.ContainerList'/3}). +-dialyzer({nowarn_function,'v_submsg_Command.Container.ContainerList'/3}). +'v_submsg_Command.Container.ContainerList'(Msg, Path, TrUserData) -> 'v_msg_Command.Container.ContainerList'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Command.Container.ContainerList'/3}). +-dialyzer({nowarn_function,'v_msg_Command.Container.ContainerList'/3}). +'v_msg_Command.Container.ContainerList'(#'Command.Container.ContainerList'{}, _Path, _) -> ok; +'v_msg_Command.Container.ContainerList'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Command.Container.ContainerList'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Command.Container.ContainerTarget'/3}). +-dialyzer({nowarn_function,'v_submsg_Command.Container.ContainerTarget'/3}). +'v_submsg_Command.Container.ContainerTarget'(Msg, Path, TrUserData) -> 'v_msg_Command.Container.ContainerTarget'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Command.Container.ContainerTarget'/3}). +-dialyzer({nowarn_function,'v_msg_Command.Container.ContainerTarget'/3}). +'v_msg_Command.Container.ContainerTarget'(#'Command.Container.ContainerTarget'{name = F1, id = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_bytes(F1, [name | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [id | Path], TrUserData) + end, + ok; +'v_msg_Command.Container.ContainerTarget'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Command.Container.ContainerTarget'}, X, Path). + +-compile({nowarn_unused_function,v_msg_Command/3}). +-dialyzer({nowarn_function,v_msg_Command/3}). +v_msg_Command(#'Command'{packet_id = F1, body = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [packet_id | Path], TrUserData) + end, + case F2 of + undefined -> ok; + {container, OF2} -> 'v_submsg_Command.Container'(OF2, [container, body | Path], TrUserData); + _ -> mk_type_error(invalid_oneof, F2, [body | Path]) + end, + ok; +v_msg_Command(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Command'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_CommandResponse.Error'/3}). +-dialyzer({nowarn_function,'v_submsg_CommandResponse.Error'/3}). +'v_submsg_CommandResponse.Error'(Msg, Path, TrUserData) -> 'v_msg_CommandResponse.Error'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_CommandResponse.Error'/3}). +-dialyzer({nowarn_function,'v_msg_CommandResponse.Error'/3}). +'v_msg_CommandResponse.Error'(#'CommandResponse.Error'{code = F1, reason = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [code | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [reason | Path], TrUserData) + end, + ok; +'v_msg_CommandResponse.Error'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'CommandResponse.Error'}, X, Path). + +-compile({nowarn_unused_function,v_msg_CommandResponse/3}). +-dialyzer({nowarn_function,v_msg_CommandResponse/3}). +v_msg_CommandResponse(#'CommandResponse'{packet_id = F1, body = 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, body | Path], TrUserData); + {error, OF2} -> 'v_submsg_CommandResponse.Error'(OF2, [error, body | Path], TrUserData); + _ -> mk_type_error(invalid_oneof, F2, [body | Path]) + end, + ok; +v_msg_CommandResponse(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'CommandResponse'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Message.Ping'/3}). +-dialyzer({nowarn_function,'v_submsg_Message.Ping'/3}). +'v_submsg_Message.Ping'(Msg, Path, TrUserData) -> 'v_msg_Message.Ping'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Message.Ping'/3}). +-dialyzer({nowarn_function,'v_msg_Message.Ping'/3}). +'v_msg_Message.Ping'(#'Message.Ping'{}, _Path, _) -> ok; +'v_msg_Message.Ping'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Message.Ping'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Message.Pong'/3}). +-dialyzer({nowarn_function,'v_submsg_Message.Pong'/3}). +'v_submsg_Message.Pong'(Msg, Path, TrUserData) -> 'v_msg_Message.Pong'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Message.Pong'/3}). +-dialyzer({nowarn_function,'v_msg_Message.Pong'/3}). +'v_msg_Message.Pong'(#'Message.Pong'{}, _Path, _) -> ok; +'v_msg_Message.Pong'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Message.Pong'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Message.Pub'/3}). +-dialyzer({nowarn_function,'v_submsg_Message.Pub'/3}). +'v_submsg_Message.Pub'(Msg, Path, TrUserData) -> 'v_msg_Message.Pub'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Message.Pub'/3}). +-dialyzer({nowarn_function,'v_msg_Message.Pub'/3}). +'v_msg_Message.Pub'(#'Message.Pub'{topic = F1, qos = F2, content = F3}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_bytes(F1, [topic | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_uint32(F2, [qos | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_bytes(F3, [content | Path], TrUserData) + end, + ok; +'v_msg_Message.Pub'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Message.Pub'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Message.MetricData'/3}). +-dialyzer({nowarn_function,'v_submsg_Message.MetricData'/3}). +'v_submsg_Message.MetricData'(Msg, Path, TrUserData) -> 'v_msg_Message.MetricData'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Message.MetricData'/3}). +-dialyzer({nowarn_function,'v_msg_Message.MetricData'/3}). +'v_msg_Message.MetricData'(#'Message.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_Message.MetricData'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Message.MetricData'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Message.TaskEvent'/3}). +-dialyzer({nowarn_function,'v_submsg_Message.TaskEvent'/3}). +'v_submsg_Message.TaskEvent'(Msg, Path, TrUserData) -> 'v_msg_Message.TaskEvent'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Message.TaskEvent'/3}). +-dialyzer({nowarn_function,'v_msg_Message.TaskEvent'/3}). +'v_msg_Message.TaskEvent'(#'Message.TaskEvent'{task_id = F1, type = F2, stream = F3}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [task_id | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [type | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_bytes(F3, [stream | Path], TrUserData) + end, + ok; +'v_msg_Message.TaskEvent'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Message.TaskEvent'}, X, Path). + +-compile({nowarn_unused_function,v_msg_Message/3}). +-dialyzer({nowarn_function,v_msg_Message/3}). +v_msg_Message(#'Message'{body = F1}, Path, TrUserData) -> + case F1 of + undefined -> ok; + {ping, OF1} -> 'v_submsg_Message.Ping'(OF1, [ping, body | Path], TrUserData); + {pong, OF1} -> 'v_submsg_Message.Pong'(OF1, [pong, body | Path], TrUserData); + {pub, OF1} -> 'v_submsg_Message.Pub'(OF1, [pub, body | Path], TrUserData); + {metric_data, OF1} -> 'v_submsg_Message.MetricData'(OF1, [metric_data, body | Path], TrUserData); + {task_event, OF1} -> 'v_submsg_Message.TaskEvent'(OF1, [task_event, body | Path], TrUserData); + _ -> mk_type_error(invalid_oneof, F1, [body | Path]) + end, + ok; +v_msg_Message(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Message'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Stream.Open'/3}). +-dialyzer({nowarn_function,'v_submsg_Stream.Open'/3}). +'v_submsg_Stream.Open'(Msg, Path, TrUserData) -> 'v_msg_Stream.Open'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Stream.Open'/3}). +-dialyzer({nowarn_function,'v_msg_Stream.Open'/3}). +'v_msg_Stream.Open'(#'Stream.Open'{}, _Path, _) -> ok; +'v_msg_Stream.Open'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Stream.Open'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Stream.Opened'/3}). +-dialyzer({nowarn_function,'v_submsg_Stream.Opened'/3}). +'v_submsg_Stream.Opened'(Msg, Path, TrUserData) -> 'v_msg_Stream.Opened'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Stream.Opened'/3}). +-dialyzer({nowarn_function,'v_msg_Stream.Opened'/3}). +'v_msg_Stream.Opened'(#'Stream.Opened'{}, _Path, _) -> ok; +'v_msg_Stream.Opened'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Stream.Opened'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Stream.OpenError'/3}). +-dialyzer({nowarn_function,'v_submsg_Stream.OpenError'/3}). +'v_submsg_Stream.OpenError'(Msg, Path, TrUserData) -> 'v_msg_Stream.OpenError'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Stream.OpenError'/3}). +-dialyzer({nowarn_function,'v_msg_Stream.OpenError'/3}). +'v_msg_Stream.OpenError'(#'Stream.OpenError'{reason = F1}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_bytes(F1, [reason | Path], TrUserData) + end, + ok; +'v_msg_Stream.OpenError'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Stream.OpenError'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Stream.Data'/3}). +-dialyzer({nowarn_function,'v_submsg_Stream.Data'/3}). +'v_submsg_Stream.Data'(Msg, Path, TrUserData) -> 'v_msg_Stream.Data'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Stream.Data'/3}). +-dialyzer({nowarn_function,'v_msg_Stream.Data'/3}). +'v_msg_Stream.Data'(#'Stream.Data'{bytes = F1}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_bytes(F1, [bytes | Path], TrUserData) + end, + ok; +'v_msg_Stream.Data'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Stream.Data'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Stream.Fin'/3}). +-dialyzer({nowarn_function,'v_submsg_Stream.Fin'/3}). +'v_submsg_Stream.Fin'(Msg, Path, TrUserData) -> 'v_msg_Stream.Fin'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Stream.Fin'/3}). +-dialyzer({nowarn_function,'v_msg_Stream.Fin'/3}). +'v_msg_Stream.Fin'(#'Stream.Fin'{}, _Path, _) -> ok; +'v_msg_Stream.Fin'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Stream.Fin'}, X, Path). + +-compile({nowarn_unused_function,'v_submsg_Stream.Reset'/3}). +-dialyzer({nowarn_function,'v_submsg_Stream.Reset'/3}). +'v_submsg_Stream.Reset'(Msg, Path, TrUserData) -> 'v_msg_Stream.Reset'(Msg, Path, TrUserData). + +-compile({nowarn_unused_function,'v_msg_Stream.Reset'/3}). +-dialyzer({nowarn_function,'v_msg_Stream.Reset'/3}). +'v_msg_Stream.Reset'(#'Stream.Reset'{reason = F1}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_bytes(F1, [reason | Path], TrUserData) + end, + ok; +'v_msg_Stream.Reset'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Stream.Reset'}, X, Path). + +-compile({nowarn_unused_function,v_msg_Stream/3}). +-dialyzer({nowarn_function,v_msg_Stream/3}). +v_msg_Stream(#'Stream'{stream_id = F1, payload = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [stream_id | Path], TrUserData) + end, + case F2 of + undefined -> ok; + {open, OF2} -> 'v_submsg_Stream.Open'(OF2, [open, payload | Path], TrUserData); + {opened, OF2} -> 'v_submsg_Stream.Opened'(OF2, [opened, payload | Path], TrUserData); + {open_error, OF2} -> 'v_submsg_Stream.OpenError'(OF2, [open_error, payload | Path], TrUserData); + {data, OF2} -> 'v_submsg_Stream.Data'(OF2, [data, payload | Path], TrUserData); + {fin, OF2} -> 'v_submsg_Stream.Fin'(OF2, [fin, payload | Path], TrUserData); + {reset, OF2} -> 'v_submsg_Stream.Reset'(OF2, [reset, payload | Path], TrUserData); + _ -> mk_type_error(invalid_oneof, F2, [payload | Path]) + end, + ok; +v_msg_Stream(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'Stream'}, 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_uint64/3}). +-dialyzer({nowarn_function,v_type_uint64/3}). +v_type_uint64(N, _Path, _TrUserData) when is_integer(N), 0 =< N, N =< 18446744073709551615 -> ok; +v_type_uint64(N, Path, _TrUserData) when is_integer(N) -> mk_type_error({value_out_of_range, uint64, unsigned, 64}, N, Path); +v_type_uint64(X, Path, _TrUserData) -> mk_type_error({bad_integer, uint64, unsigned, 64}, X, Path). + +-compile({nowarn_unused_function,v_type_bool/3}). +-dialyzer({nowarn_function,v_type_bool/3}). +v_type_bool(false, _Path, _TrUserData) -> ok; +v_type_bool(true, _Path, _TrUserData) -> ok; +v_type_bool(0, _Path, _TrUserData) -> ok; +v_type_bool(1, _Path, _TrUserData) -> ok; +v_type_bool(X, Path, _TrUserData) -> mk_type_error(bad_boolean_value, 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, 'Request.AuthRequest'}, + [#field{name = uuid, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}, + #field{name = token, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}, + #field{name = timestamp, fnum = 3, rnum = 4, type = uint64, occurrence = optional, opts = []}]}, + {{msg, 'Request'}, + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = body, rnum = 3, fields = [#field{name = auth_request, fnum = 10, rnum = 3, type = {msg, 'Request.AuthRequest'}, occurrence = optional, opts = []}], opts = []}]}, + {{msg, 'Response.Error'}, [#field{name = code, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = reason, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'Response.AuthResponse'}, []}, + {{msg, 'Response'}, + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = body, rnum = 3, + fields = [#field{name = auth_response, fnum = 10, rnum = 3, type = {msg, 'Response.AuthResponse'}, occurrence = optional, opts = []}, #field{name = error, fnum = 11, rnum = 3, type = {msg, 'Response.Error'}, occurrence = optional, opts = []}], + opts = []}]}, + {{msg, 'Command.Container'}, + [#gpb_oneof{name = action, rnum = 2, + fields = + [#field{name = list, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerList'}, occurrence = optional, opts = []}, + #field{name = deploy, fnum = 2, rnum = 2, type = {msg, 'Command.Container.ContainerDeploy'}, occurrence = optional, opts = []}, + #field{name = start, fnum = 3, rnum = 2, type = {msg, 'Command.Container.ContainerStart'}, occurrence = optional, opts = []}, + #field{name = stop, fnum = 4, rnum = 2, type = {msg, 'Command.Container.ContainerStop'}, occurrence = optional, opts = []}, + #field{name = kill, fnum = 5, rnum = 2, type = {msg, 'Command.Container.ContainerKill'}, occurrence = optional, opts = []}, + #field{name = remove, fnum = 6, rnum = 2, type = {msg, 'Command.Container.ContainerRemove'}, occurrence = optional, opts = []}, + #field{name = config, fnum = 7, rnum = 2, type = {msg, 'Command.Container.ContainerConfig'}, occurrence = optional, opts = []}], + opts = []}]}, + {{msg, 'Command.Container.ContainerConfig'}, + [#field{name = target, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerTarget'}, occurrence = optional, opts = []}, #field{name = config, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'Command.Container.ContainerRemove'}, + [#field{name = target, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerTarget'}, occurrence = optional, opts = []}, + #field{name = force, fnum = 2, rnum = 3, type = bool, occurrence = optional, opts = []}, + #field{name = remove_volumes, fnum = 3, rnum = 4, type = bool, occurrence = optional, opts = []}]}, + {{msg, 'Command.Container.ContainerKill'}, + [#field{name = target, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerTarget'}, occurrence = optional, opts = []}, #field{name = signal, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'Command.Container.ContainerStop'}, + [#field{name = target, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerTarget'}, occurrence = optional, opts = []}, #field{name = timeout_seconds, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}]}, + {{msg, 'Command.Container.ContainerStart'}, [#field{name = target, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerTarget'}, occurrence = optional, opts = []}]}, + {{msg, 'Command.Container.ContainerDeploy'}, [#field{name = task_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = params, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'Command.Container.ContainerList'}, []}, + {{msg, 'Command.Container.ContainerTarget'}, [#field{name = name, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}, #field{name = id, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'Command'}, + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = body, rnum = 3, fields = [#field{name = container, fnum = 10, rnum = 3, type = {msg, 'Command.Container'}, occurrence = optional, opts = []}], opts = []}]}, + {{msg, 'CommandResponse.Error'}, [#field{name = code, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = reason, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'CommandResponse'}, + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = body, rnum = 3, + fields = [#field{name = result, fnum = 10, rnum = 3, type = bytes, occurrence = optional, opts = []}, #field{name = error, fnum = 11, rnum = 3, type = {msg, 'CommandResponse.Error'}, occurrence = optional, opts = []}], opts = []}]}, + {{msg, 'Message.Ping'}, []}, + {{msg, 'Message.Pong'}, []}, + {{msg, 'Message.Pub'}, + [#field{name = topic, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}, + #field{name = qos, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}, + #field{name = content, fnum = 3, rnum = 4, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'Message.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, 'Message.TaskEvent'}, + [#field{name = task_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #field{name = type, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}, + #field{name = stream, fnum = 3, rnum = 4, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'Message'}, + [#gpb_oneof{name = body, rnum = 2, + fields = + [#field{name = ping, fnum = 10, rnum = 2, type = {msg, 'Message.Ping'}, occurrence = optional, opts = []}, + #field{name = pong, fnum = 11, rnum = 2, type = {msg, 'Message.Pong'}, occurrence = optional, opts = []}, + #field{name = pub, fnum = 12, rnum = 2, type = {msg, 'Message.Pub'}, occurrence = optional, opts = []}, + #field{name = metric_data, fnum = 13, rnum = 2, type = {msg, 'Message.MetricData'}, occurrence = optional, opts = []}, + #field{name = task_event, fnum = 14, rnum = 2, type = {msg, 'Message.TaskEvent'}, occurrence = optional, opts = []}], + opts = []}]}, + {{msg, 'Stream.Open'}, []}, + {{msg, 'Stream.Opened'}, []}, + {{msg, 'Stream.OpenError'}, [#field{name = reason, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'Stream.Data'}, [#field{name = bytes, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'Stream.Fin'}, []}, + {{msg, 'Stream.Reset'}, [#field{name = reason, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}]}, + {{msg, 'Stream'}, + [#field{name = stream_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = payload, rnum = 3, + fields = + [#field{name = open, fnum = 10, rnum = 3, type = {msg, 'Stream.Open'}, occurrence = optional, opts = []}, + #field{name = opened, fnum = 11, rnum = 3, type = {msg, 'Stream.Opened'}, occurrence = optional, opts = []}, + #field{name = open_error, fnum = 12, rnum = 3, type = {msg, 'Stream.OpenError'}, occurrence = optional, opts = []}, + #field{name = data, fnum = 13, rnum = 3, type = {msg, 'Stream.Data'}, occurrence = optional, opts = []}, + #field{name = fin, fnum = 14, rnum = 3, type = {msg, 'Stream.Fin'}, occurrence = optional, opts = []}, + #field{name = reset, fnum = 15, rnum = 3, type = {msg, 'Stream.Reset'}, occurrence = optional, opts = []}], + opts = []}]}]. + + +get_msg_names() -> + ['Request.AuthRequest', + 'Request', + 'Response.Error', + 'Response.AuthResponse', + 'Response', + 'Command.Container', + 'Command.Container.ContainerConfig', + 'Command.Container.ContainerRemove', + 'Command.Container.ContainerKill', + 'Command.Container.ContainerStop', + 'Command.Container.ContainerStart', + 'Command.Container.ContainerDeploy', + 'Command.Container.ContainerList', + 'Command.Container.ContainerTarget', + 'Command', + 'CommandResponse.Error', + 'CommandResponse', + 'Message.Ping', + 'Message.Pong', + 'Message.Pub', + 'Message.MetricData', + 'Message.TaskEvent', + 'Message', + 'Stream.Open', + 'Stream.Opened', + 'Stream.OpenError', + 'Stream.Data', + 'Stream.Fin', + 'Stream.Reset', + 'Stream']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> + ['Request.AuthRequest', + 'Request', + 'Response.Error', + 'Response.AuthResponse', + 'Response', + 'Command.Container', + 'Command.Container.ContainerConfig', + 'Command.Container.ContainerRemove', + 'Command.Container.ContainerKill', + 'Command.Container.ContainerStop', + 'Command.Container.ContainerStart', + 'Command.Container.ContainerDeploy', + 'Command.Container.ContainerList', + 'Command.Container.ContainerTarget', + 'Command', + 'CommandResponse.Error', + 'CommandResponse', + 'Message.Ping', + 'Message.Pong', + 'Message.Pub', + 'Message.MetricData', + 'Message.TaskEvent', + 'Message', + 'Stream.Open', + 'Stream.Opened', + 'Stream.OpenError', + 'Stream.Data', + 'Stream.Fin', + 'Stream.Reset', + 'Stream']. + + +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('Request.AuthRequest') -> + [#field{name = uuid, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}, + #field{name = token, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}, + #field{name = timestamp, fnum = 3, rnum = 4, type = uint64, occurrence = optional, opts = []}]; +find_msg_def('Request') -> + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = body, rnum = 3, fields = [#field{name = auth_request, fnum = 10, rnum = 3, type = {msg, 'Request.AuthRequest'}, occurrence = optional, opts = []}], opts = []}]; +find_msg_def('Response.Error') -> [#field{name = code, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = reason, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('Response.AuthResponse') -> []; +find_msg_def('Response') -> + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = body, rnum = 3, + fields = [#field{name = auth_response, fnum = 10, rnum = 3, type = {msg, 'Response.AuthResponse'}, occurrence = optional, opts = []}, #field{name = error, fnum = 11, rnum = 3, type = {msg, 'Response.Error'}, occurrence = optional, opts = []}], + opts = []}]; +find_msg_def('Command.Container') -> + [#gpb_oneof{name = action, rnum = 2, + fields = + [#field{name = list, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerList'}, occurrence = optional, opts = []}, + #field{name = deploy, fnum = 2, rnum = 2, type = {msg, 'Command.Container.ContainerDeploy'}, occurrence = optional, opts = []}, + #field{name = start, fnum = 3, rnum = 2, type = {msg, 'Command.Container.ContainerStart'}, occurrence = optional, opts = []}, + #field{name = stop, fnum = 4, rnum = 2, type = {msg, 'Command.Container.ContainerStop'}, occurrence = optional, opts = []}, + #field{name = kill, fnum = 5, rnum = 2, type = {msg, 'Command.Container.ContainerKill'}, occurrence = optional, opts = []}, + #field{name = remove, fnum = 6, rnum = 2, type = {msg, 'Command.Container.ContainerRemove'}, occurrence = optional, opts = []}, + #field{name = config, fnum = 7, rnum = 2, type = {msg, 'Command.Container.ContainerConfig'}, occurrence = optional, opts = []}], + opts = []}]; +find_msg_def('Command.Container.ContainerConfig') -> + [#field{name = target, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerTarget'}, occurrence = optional, opts = []}, #field{name = config, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('Command.Container.ContainerRemove') -> + [#field{name = target, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerTarget'}, occurrence = optional, opts = []}, + #field{name = force, fnum = 2, rnum = 3, type = bool, occurrence = optional, opts = []}, + #field{name = remove_volumes, fnum = 3, rnum = 4, type = bool, occurrence = optional, opts = []}]; +find_msg_def('Command.Container.ContainerKill') -> + [#field{name = target, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerTarget'}, occurrence = optional, opts = []}, #field{name = signal, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('Command.Container.ContainerStop') -> + [#field{name = target, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerTarget'}, occurrence = optional, opts = []}, #field{name = timeout_seconds, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}]; +find_msg_def('Command.Container.ContainerStart') -> [#field{name = target, fnum = 1, rnum = 2, type = {msg, 'Command.Container.ContainerTarget'}, occurrence = optional, opts = []}]; +find_msg_def('Command.Container.ContainerDeploy') -> [#field{name = task_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = params, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('Command.Container.ContainerList') -> []; +find_msg_def('Command.Container.ContainerTarget') -> [#field{name = name, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}, #field{name = id, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('Command') -> + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = body, rnum = 3, fields = [#field{name = container, fnum = 10, rnum = 3, type = {msg, 'Command.Container'}, occurrence = optional, opts = []}], opts = []}]; +find_msg_def('CommandResponse.Error') -> [#field{name = code, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = reason, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('CommandResponse') -> + [#field{name = packet_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = body, rnum = 3, + fields = [#field{name = result, fnum = 10, rnum = 3, type = bytes, occurrence = optional, opts = []}, #field{name = error, fnum = 11, rnum = 3, type = {msg, 'CommandResponse.Error'}, occurrence = optional, opts = []}], opts = []}]; +find_msg_def('Message.Ping') -> []; +find_msg_def('Message.Pong') -> []; +find_msg_def('Message.Pub') -> + [#field{name = topic, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}, + #field{name = qos, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}, + #field{name = content, fnum = 3, rnum = 4, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('Message.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('Message.TaskEvent') -> + [#field{name = task_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #field{name = type, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}, + #field{name = stream, fnum = 3, rnum = 4, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('Message') -> + [#gpb_oneof{name = body, rnum = 2, + fields = + [#field{name = ping, fnum = 10, rnum = 2, type = {msg, 'Message.Ping'}, occurrence = optional, opts = []}, + #field{name = pong, fnum = 11, rnum = 2, type = {msg, 'Message.Pong'}, occurrence = optional, opts = []}, + #field{name = pub, fnum = 12, rnum = 2, type = {msg, 'Message.Pub'}, occurrence = optional, opts = []}, + #field{name = metric_data, fnum = 13, rnum = 2, type = {msg, 'Message.MetricData'}, occurrence = optional, opts = []}, + #field{name = task_event, fnum = 14, rnum = 2, type = {msg, 'Message.TaskEvent'}, occurrence = optional, opts = []}], + opts = []}]; +find_msg_def('Stream.Open') -> []; +find_msg_def('Stream.Opened') -> []; +find_msg_def('Stream.OpenError') -> [#field{name = reason, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('Stream.Data') -> [#field{name = bytes, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('Stream.Fin') -> []; +find_msg_def('Stream.Reset') -> [#field{name = reason, fnum = 1, rnum = 2, type = bytes, occurrence = optional, opts = []}]; +find_msg_def('Stream') -> + [#field{name = stream_id, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, + #gpb_oneof{name = payload, rnum = 3, + fields = + [#field{name = open, fnum = 10, rnum = 3, type = {msg, 'Stream.Open'}, occurrence = optional, opts = []}, + #field{name = opened, fnum = 11, rnum = 3, type = {msg, 'Stream.Opened'}, occurrence = optional, opts = []}, + #field{name = open_error, fnum = 12, rnum = 3, type = {msg, 'Stream.OpenError'}, occurrence = optional, opts = []}, + #field{name = data, fnum = 13, rnum = 3, type = {msg, 'Stream.Data'}, occurrence = optional, opts = []}, + #field{name = fin, fnum = 14, rnum = 3, type = {msg, 'Stream.Fin'}, occurrence = optional, opts = []}, + #field{name = reset, fnum = 15, rnum = 3, type = {msg, 'Stream.Reset'}, 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(<<"Request.AuthRequest">>) -> 'Request.AuthRequest'; +fqbin_to_msg_name(<<"Request">>) -> 'Request'; +fqbin_to_msg_name(<<"Response.Error">>) -> 'Response.Error'; +fqbin_to_msg_name(<<"Response.AuthResponse">>) -> 'Response.AuthResponse'; +fqbin_to_msg_name(<<"Response">>) -> 'Response'; +fqbin_to_msg_name(<<"Command.Container">>) -> 'Command.Container'; +fqbin_to_msg_name(<<"Command.Container.ContainerConfig">>) -> 'Command.Container.ContainerConfig'; +fqbin_to_msg_name(<<"Command.Container.ContainerRemove">>) -> 'Command.Container.ContainerRemove'; +fqbin_to_msg_name(<<"Command.Container.ContainerKill">>) -> 'Command.Container.ContainerKill'; +fqbin_to_msg_name(<<"Command.Container.ContainerStop">>) -> 'Command.Container.ContainerStop'; +fqbin_to_msg_name(<<"Command.Container.ContainerStart">>) -> 'Command.Container.ContainerStart'; +fqbin_to_msg_name(<<"Command.Container.ContainerDeploy">>) -> 'Command.Container.ContainerDeploy'; +fqbin_to_msg_name(<<"Command.Container.ContainerList">>) -> 'Command.Container.ContainerList'; +fqbin_to_msg_name(<<"Command.Container.ContainerTarget">>) -> 'Command.Container.ContainerTarget'; +fqbin_to_msg_name(<<"Command">>) -> 'Command'; +fqbin_to_msg_name(<<"CommandResponse.Error">>) -> 'CommandResponse.Error'; +fqbin_to_msg_name(<<"CommandResponse">>) -> 'CommandResponse'; +fqbin_to_msg_name(<<"Message.Ping">>) -> 'Message.Ping'; +fqbin_to_msg_name(<<"Message.Pong">>) -> 'Message.Pong'; +fqbin_to_msg_name(<<"Message.Pub">>) -> 'Message.Pub'; +fqbin_to_msg_name(<<"Message.MetricData">>) -> 'Message.MetricData'; +fqbin_to_msg_name(<<"Message.TaskEvent">>) -> 'Message.TaskEvent'; +fqbin_to_msg_name(<<"Message">>) -> 'Message'; +fqbin_to_msg_name(<<"Stream.Open">>) -> 'Stream.Open'; +fqbin_to_msg_name(<<"Stream.Opened">>) -> 'Stream.Opened'; +fqbin_to_msg_name(<<"Stream.OpenError">>) -> 'Stream.OpenError'; +fqbin_to_msg_name(<<"Stream.Data">>) -> 'Stream.Data'; +fqbin_to_msg_name(<<"Stream.Fin">>) -> 'Stream.Fin'; +fqbin_to_msg_name(<<"Stream.Reset">>) -> 'Stream.Reset'; +fqbin_to_msg_name(<<"Stream">>) -> 'Stream'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('Request.AuthRequest') -> <<"Request.AuthRequest">>; +msg_name_to_fqbin('Request') -> <<"Request">>; +msg_name_to_fqbin('Response.Error') -> <<"Response.Error">>; +msg_name_to_fqbin('Response.AuthResponse') -> <<"Response.AuthResponse">>; +msg_name_to_fqbin('Response') -> <<"Response">>; +msg_name_to_fqbin('Command.Container') -> <<"Command.Container">>; +msg_name_to_fqbin('Command.Container.ContainerConfig') -> <<"Command.Container.ContainerConfig">>; +msg_name_to_fqbin('Command.Container.ContainerRemove') -> <<"Command.Container.ContainerRemove">>; +msg_name_to_fqbin('Command.Container.ContainerKill') -> <<"Command.Container.ContainerKill">>; +msg_name_to_fqbin('Command.Container.ContainerStop') -> <<"Command.Container.ContainerStop">>; +msg_name_to_fqbin('Command.Container.ContainerStart') -> <<"Command.Container.ContainerStart">>; +msg_name_to_fqbin('Command.Container.ContainerDeploy') -> <<"Command.Container.ContainerDeploy">>; +msg_name_to_fqbin('Command.Container.ContainerList') -> <<"Command.Container.ContainerList">>; +msg_name_to_fqbin('Command.Container.ContainerTarget') -> <<"Command.Container.ContainerTarget">>; +msg_name_to_fqbin('Command') -> <<"Command">>; +msg_name_to_fqbin('CommandResponse.Error') -> <<"CommandResponse.Error">>; +msg_name_to_fqbin('CommandResponse') -> <<"CommandResponse">>; +msg_name_to_fqbin('Message.Ping') -> <<"Message.Ping">>; +msg_name_to_fqbin('Message.Pong') -> <<"Message.Pong">>; +msg_name_to_fqbin('Message.Pub') -> <<"Message.Pub">>; +msg_name_to_fqbin('Message.MetricData') -> <<"Message.MetricData">>; +msg_name_to_fqbin('Message.TaskEvent') -> <<"Message.TaskEvent">>; +msg_name_to_fqbin('Message') -> <<"Message">>; +msg_name_to_fqbin('Stream.Open') -> <<"Stream.Open">>; +msg_name_to_fqbin('Stream.Opened') -> <<"Stream.Opened">>; +msg_name_to_fqbin('Stream.OpenError') -> <<"Stream.OpenError">>; +msg_name_to_fqbin('Stream.Data') -> <<"Stream.Data">>; +msg_name_to_fqbin('Stream.Fin') -> <<"Stream.Fin">>; +msg_name_to_fqbin('Stream.Reset') -> <<"Stream.Reset">>; +msg_name_to_fqbin('Stream') -> <<"Stream">>; +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() -> "message.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() -> ["message.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() -> ["message"]. + + +get_msg_containment("message") -> + ['Command', + 'Command.Container', + 'Command.Container.ContainerConfig', + 'Command.Container.ContainerDeploy', + 'Command.Container.ContainerKill', + 'Command.Container.ContainerList', + 'Command.Container.ContainerRemove', + 'Command.Container.ContainerStart', + 'Command.Container.ContainerStop', + 'Command.Container.ContainerTarget', + 'CommandResponse', + 'CommandResponse.Error', + 'Message', + 'Message.MetricData', + 'Message.Ping', + 'Message.Pong', + 'Message.Pub', + 'Message.TaskEvent', + 'Request', + 'Request.AuthRequest', + 'Response', + 'Response.AuthResponse', + 'Response.Error', + 'Stream', + 'Stream.Data', + 'Stream.Fin', + 'Stream.Open', + 'Stream.OpenError', + 'Stream.Opened', + 'Stream.Reset']; +get_msg_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_pkg_containment("message") -> undefined; +get_pkg_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_service_containment("message") -> []; +get_service_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_rpc_containment("message") -> []; +get_rpc_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_enum_containment("message") -> []; +get_enum_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"Command.Container.ContainerStop">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Stream.Data">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Message.MetricData">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Stream.OpenError">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Response.Error">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Message.Pub">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"CommandResponse.Error">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Command.Container">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Stream.Reset">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Stream.Opened">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Request.AuthRequest">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Request">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Message.TaskEvent">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Command.Container.ContainerTarget">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Command.Container.ContainerStart">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Command.Container.ContainerList">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Command">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Response.AuthResponse">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Response">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Message">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"CommandResponse">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Command.Container.ContainerRemove">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Message.Pong">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Message.Ping">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Command.Container.ContainerConfig">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Command.Container.ContainerDeploy">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Command.Container.ContainerKill">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Stream">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Stream.Open">>) -> "message"; +get_proto_by_msg_name_as_fqbin(<<"Stream.Fin">>) -> "message"; +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/apps/efka/src/protobuf/efka_service_pb.erl b/apps/efka/src/protobuf/service_pb.erl similarity index 99% rename from apps/efka/src/protobuf/efka_service_pb.erl rename to apps/efka/src/protobuf/service_pb.erl index e08b796..9d4b763 100644 --- a/apps/efka/src/protobuf/efka_service_pb.erl +++ b/apps/efka/src/protobuf/service_pb.erl @@ -3,7 +3,7 @@ %% Automatically @generated, do not edit %% Generated by gpb_compile version 4.21.7 %% Version source: file --module(efka_service_pb). +-module(service_pb). -export([encode_msg/1, encode_msg/2, encode_msg/3]). -export([decode_msg/2, decode_msg/3]). @@ -46,7 +46,7 @@ -export([gpb_version_as_string/0, gpb_version_as_list/0]). -export([gpb_version_source/0]). --include("efka_service_pb.hrl"). +-include("service_pb.hrl"). -include_lib("gpb/include/gpb.hrl"). %% enumerated types diff --git a/apps/efka/src/service/efka_service_channel.erl b/apps/efka/src/service/efka_service_channel.erl index e5e118f..90f2d9f 100644 --- a/apps/efka/src/service/efka_service_channel.erl +++ b/apps/efka/src/service/efka_service_channel.erl @@ -9,7 +9,7 @@ -module(efka_service_channel). -author("licheng5"). -include("efka_tables.hrl"). --include("efka_service_pb.hrl"). +-include("service_pb.hrl"). %% 一级帧类型 %% REQUEST: 需要响应的请求帧 @@ -50,11 +50,11 @@ websocket_handle(ping, State) -> {reply, pong, State}; websocket_handle({binary, <>}, State) -> - Request = efka_service_pb:decode_msg(PacketBin, 'ServiceRequest'), + Request = service_pb:decode_msg(PacketBin, 'ServiceRequest'), logger:debug("[efka_service_channel] get request: ~p", [Request]), handle_request(Request, State); websocket_handle({binary, <>}, State) -> - Cast = efka_service_pb:decode_msg(PacketBin, 'ServiceCast'), + Cast = service_pb:decode_msg(PacketBin, 'ServiceCast'), logger:debug("[efka_service_channel] get cast: ~p", [Cast]), handle_cast(Cast, State); @@ -66,7 +66,7 @@ websocket_handle(Info, State) -> -spec websocket_info(term(), #state{}) -> {reply, term(), #state{}} | {stop, #state{}} | {ok, #state{}}. websocket_info({topic_broadcast, Topic, Content}, State = #state{}) -> - Packet = efka_service_pb:encode_msg(#'ServiceCast'{ + Packet = service_pb:encode_msg(#'ServiceCast'{ body = {topic_event, #'ServiceCast.TopicEvent'{topic = Topic, content = Content}} }), logger:debug("[efka_service_channel] will publish topic: ~p", [Topic]), @@ -105,7 +105,7 @@ terminate(Reason, _Req, State = #state{service_id = ServiceId, is_registered = I %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 注册, 要建立程序和容器之间的关系 --spec handle_request(efka_service_pb:'ServiceRequest'(), #state{}) -> {reply, {binary, binary()}, #state{}}. +-spec handle_request(service_pb:'ServiceRequest'(), #state{}) -> {reply, {binary, binary()}, #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 @@ -144,7 +144,7 @@ handle_request(#'ServiceRequest'{packet_id = PacketId, request = {subscribe, #'S handle_request(#'ServiceRequest'{packet_id = PacketId}, State) -> {reply, {binary, error_reply_packet(PacketId, -1, <<"invalid request">>)}, State}. --spec handle_cast(efka_service_pb:'ServiceCast'(), #state{}) -> {ok, #state{}}. +-spec handle_cast(service_pb:'ServiceCast'(), #state{}) -> {ok, #state{}}. 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), @@ -154,7 +154,7 @@ handle_cast(#'ServiceCast'{body = _Body}, State) -> -spec result_reply_packet(integer(), binary()) -> binary(). result_reply_packet(PacketId, Result) when is_integer(PacketId), is_binary(Result) -> - Reply = efka_service_pb:encode_msg(#'ServiceReply'{ + Reply = service_pb:encode_msg(#'ServiceReply'{ packet_id = PacketId, reply = {result, Result} }), @@ -162,7 +162,7 @@ result_reply_packet(PacketId, Result) when is_integer(PacketId), is_binary(Resul -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 = efka_service_pb:encode_msg(#'ServiceReply'{ + Reply = service_pb:encode_msg(#'ServiceReply'{ packet_id = PacketId, reply = {error, #'ServiceReply.Error'{code = Code, message = Message}} }), diff --git a/rebar.config b/rebar.config index 667bd94..8df4294 100644 --- a/rebar.config +++ b/rebar.config @@ -16,8 +16,8 @@ [efka, sasl]}, - {mode, prod}, - {include_erts, true}, + {mode, dev}, + {include_erts, false}, {sys_config_src, "./config/sys.config.src"}, {vm_args_src, "./config/vm.args.src"}