%% generated code, do not edit!
-module(kpro_structs).
-export([encode/1]).
-export([decode/2]).
-include("kpro.hrl").
encode(#kpro_ProduceRequest{} = R)->
  [enc({int16, R#kpro_ProduceRequest.requiredAcks}),
   enc({int32, R#kpro_ProduceRequest.timeout}),
   enc({array, R#kpro_ProduceRequest.topicMessageSet_L})
  ];
encode(#kpro_TopicMessageSet{} = R)->
  [enc({string, R#kpro_TopicMessageSet.topicName}),
   enc({array, R#kpro_TopicMessageSet.partitionMessageSet_L})
  ];
encode(#kpro_PartitionMessageSet{} = R)->
  [enc({int32, R#kpro_PartitionMessageSet.partition}),
   enc({int32, R#kpro_PartitionMessageSet.messageSetSize}),
   enc({array, R#kpro_PartitionMessageSet.message_L})
  ];
encode(#kpro_Message{} = R)->
  [enc({int64, R#kpro_Message.offset}),
   enc({int32, R#kpro_Message.messageSize}),
   enc({int32, R#kpro_Message.crc}),
   enc({int8, R#kpro_Message.magicByte}),
   enc({int8, R#kpro_Message.attributes}),
   enc({bytes, R#kpro_Message.key}),
   enc({bytes, R#kpro_Message.value})
  ];
encode(#kpro_FetchRequest{} = R)->
  [enc({int32, R#kpro_FetchRequest.replicaId}),
   enc({int32, R#kpro_FetchRequest.maxWaitTime}),
   enc({int32, R#kpro_FetchRequest.minBytes}),
   enc({array, R#kpro_FetchRequest.fetchRequestTopic_L})
  ];
encode(#kpro_FetchRequestTopic{} = R)->
  [enc({string, R#kpro_FetchRequestTopic.topicName}),
   enc({array, R#kpro_FetchRequestTopic.fetchRequestPartition_L})
  ];
encode(#kpro_FetchRequestPartition{} = R)->
  [enc({int32, R#kpro_FetchRequestPartition.partition}),
   enc({int64, R#kpro_FetchRequestPartition.fetchOffset}),
   enc({int32, R#kpro_FetchRequestPartition.maxBytes})
  ];
encode(#kpro_OffsetRequest{} = R)->
  [enc({int32, R#kpro_OffsetRequest.replicaId}),
   enc({array, R#kpro_OffsetRequest.offsetRequestTopic_L})
  ];
encode(#kpro_OffsetRequestTopic{} = R)->
  [enc({string, R#kpro_OffsetRequestTopic.topicName}),
   enc({array, R#kpro_OffsetRequestTopic.offsetRequestPartition_L})
  ];
encode(#kpro_OffsetRequestPartition{} = R)->
  [enc({int32, R#kpro_OffsetRequestPartition.partition}),
   enc({int64, R#kpro_OffsetRequestPartition.time}),
   enc({int32, R#kpro_OffsetRequestPartition.maxNumberOfOffsets})
  ];
encode(#kpro_MetadataRequest{} = R)->
  [enc({{array,string}, R#kpro_MetadataRequest.topicName_L})
  ];
encode(#kpro_OffsetCommitRequestV2{} = R)->
  [enc({string, R#kpro_OffsetCommitRequestV2.consumerGroupId}),
   enc({int32, R#kpro_OffsetCommitRequestV2.consumerGroupGenerationId}),
   enc({string, R#kpro_OffsetCommitRequestV2.consumerId}),
   enc({int64, R#kpro_OffsetCommitRequestV2.retentionTime}),
   enc({array, R#kpro_OffsetCommitRequestV2.oCReqV2Topic_L})
  ];
encode(#kpro_OCReqV2Topic{} = R)->
  [enc({string, R#kpro_OCReqV2Topic.topicName}),
   enc({array, R#kpro_OCReqV2Topic.oCReqV2Partition_L})
  ];
encode(#kpro_OCReqV2Partition{} = R)->
  [enc({int32, R#kpro_OCReqV2Partition.partition}),
   enc({int64, R#kpro_OCReqV2Partition.offset}),
   enc({string, R#kpro_OCReqV2Partition.metadata})
  ];
encode(#kpro_OffsetCommitRequestV1{} = R)->
  [enc({string, R#kpro_OffsetCommitRequestV1.consumerGroupId}),
   enc({int32, R#kpro_OffsetCommitRequestV1.consumerGroupGenerationId}),
   enc({string, R#kpro_OffsetCommitRequestV1.consumerId}),
   enc({array, R#kpro_OffsetCommitRequestV1.oCReqV1Topic_L})
  ];
encode(#kpro_OCReqV1Topic{} = R)->
  [enc({string, R#kpro_OCReqV1Topic.topicName}),
   enc({array, R#kpro_OCReqV1Topic.oCReqV1Partition_L})
  ];
encode(#kpro_OCReqV1Partition{} = R)->
  [enc({int32, R#kpro_OCReqV1Partition.partition}),
   enc({int64, R#kpro_OCReqV1Partition.offset}),
   enc({int64, R#kpro_OCReqV1Partition.timeStamp}),
   enc({string, R#kpro_OCReqV1Partition.metadata})
  ];
encode(#kpro_OffsetCommitRequestV0{} = R)->
  [enc({string, R#kpro_OffsetCommitRequestV0.consumerGroupId}),
   enc({array, R#kpro_OffsetCommitRequestV0.oCReqV0Topic_L})
  ];
encode(#kpro_OCReqV0Topic{} = R)->
  [enc({string, R#kpro_OCReqV0Topic.topicName}),
   enc({array, R#kpro_OCReqV0Topic.oCReqV0Partition_L})
  ];
encode(#kpro_OCReqV0Partition{} = R)->
  [enc({int32, R#kpro_OCReqV0Partition.partition}),
   enc({int64, R#kpro_OCReqV0Partition.offset}),
   enc({string, R#kpro_OCReqV0Partition.metadata})
  ];
encode(#kpro_OffsetFetchRequest{} = R)->
  [enc({string, R#kpro_OffsetFetchRequest.consumerGroup}),
   enc({array, R#kpro_OffsetFetchRequest.oFReqTopic_L})
  ];
encode(#kpro_OFReqTopic{} = R)->
  [enc({string, R#kpro_OFReqTopic.topicName}),
   enc({{array,int32}, R#kpro_OFReqTopic.partition_L})
  ];
encode(#kpro_GroupCoordinatorRequest{} = R)->
  [enc({string, R#kpro_GroupCoordinatorRequest.groupId})
  ];
encode(#kpro_JoinGroupRequest{} = R)->
  [enc({string, R#kpro_JoinGroupRequest.groupId}),
   enc({int32, R#kpro_JoinGroupRequest.sessionTimeout}),
   enc({string, R#kpro_JoinGroupRequest.memberId}),
   enc({string, R#kpro_JoinGroupRequest.protocolType}),
   enc({array, R#kpro_JoinGroupRequest.groupProtocol_L})
  ];
encode(#kpro_GroupProtocol{} = R)->
  [enc({string, R#kpro_GroupProtocol.protocolName}),
   enc({bytes, R#kpro_GroupProtocol.protocolMetadata})
  ];
encode(#kpro_HeartbeatRequest{} = R)->
  [enc({string, R#kpro_HeartbeatRequest.groupId}),
   enc({int32, R#kpro_HeartbeatRequest.generationId}),
   enc({string, R#kpro_HeartbeatRequest.memberId})
  ];
encode(#kpro_LeaveGroupRequest{} = R)->
  [enc({string, R#kpro_LeaveGroupRequest.groupId}),
   enc({string, R#kpro_LeaveGroupRequest.memberId})
  ];
encode(#kpro_SyncGroupRequest{} = R)->
  [enc({string, R#kpro_SyncGroupRequest.groupId}),
   enc({int32, R#kpro_SyncGroupRequest.generationId}),
   enc({string, R#kpro_SyncGroupRequest.memberId}),
   enc({array, R#kpro_SyncGroupRequest.groupAssignment_L})
  ];
encode(#kpro_GroupAssignment{} = R)->
  [enc({string, R#kpro_GroupAssignment.memberId}),
   enc({bytes, R#kpro_GroupAssignment.memberAssignment})
  ];
encode(#kpro_DescribeGroupsRequest{} = R)->
  [enc({{array,string}, R#kpro_DescribeGroupsRequest.groupId_L})
  ];
encode(#kpro_ListGroupsRequest{})->
  [
  ];
encode(#kpro_ConsumerGroupProtocolMetadata{} = R)->
  [enc({int16, R#kpro_ConsumerGroupProtocolMetadata.version}),
   enc({{array,string}, R#kpro_ConsumerGroupProtocolMetadata.topicName_L}),
   enc({bytes, R#kpro_ConsumerGroupProtocolMetadata.userData})
  ];
encode(#kpro_ConsumerGroupMemberAssignment{} = R)->
  [enc({int16, R#kpro_ConsumerGroupMemberAssignment.version}),
   enc({array, R#kpro_ConsumerGroupMemberAssignment.consumerGroupPartitionAssignment_L}),
   enc({bytes, R#kpro_ConsumerGroupMemberAssignment.userData})
  ];
encode(#kpro_ConsumerGroupPartitionAssignment{} = R)->
  [enc({string, R#kpro_ConsumerGroupPartitionAssignment.topicName}),
   enc({{array,int32}, R#kpro_ConsumerGroupPartitionAssignment.partition_L})
  ].
decode(kpro_ProduceResponse, Bin) ->
Fields = [{produceResponseTopic_L,{array,kpro_ProduceResponseTopic}}],kpro:decode_fields(kpro_ProduceResponse, Fields, Bin);
decode(kpro_ProduceResponseTopic, Bin) ->
Fields = [{topicName,string},
 {produceResponsePartition_L,{array,kpro_ProduceResponsePartition}}],kpro:decode_fields(kpro_ProduceResponseTopic, Fields, Bin);
decode(kpro_ProduceResponsePartition, Bin) ->
Fields = [{partition,int32},{errorCode,int16},{offset,int64}],kpro:decode_fields(kpro_ProduceResponsePartition, Fields, Bin);
decode(kpro_FetchResponse, Bin) ->
Fields = [{fetchResponseTopic_L,{array,kpro_FetchResponseTopic}}],kpro:decode_fields(kpro_FetchResponse, Fields, Bin);
decode(kpro_FetchResponseTopic, Bin) ->
Fields = [{topicName,string},
 {fetchResponsePartition_L,{array,kpro_FetchResponsePartition}}],kpro:decode_fields(kpro_FetchResponseTopic, Fields, Bin);
decode(kpro_FetchResponsePartition, Bin) ->
Fields = [{partition,int32},
 {errorCode,int16},
 {highWatermarkOffset,int64},
 {messageSetSize,int32},
 {message_L,{array,kpro_Message}}],kpro:decode_fields(kpro_FetchResponsePartition, Fields, Bin);
decode(kpro_Message, Bin) ->
Fields = [{offset,int64},
 {messageSize,int32},
 {crc,int32},
 {magicByte,int8},
 {attributes,int8},
 {key,bytes},
 {value,bytes}],kpro:decode_fields(kpro_Message, Fields, Bin);
decode(kpro_OffsetResponse, Bin) ->
Fields = [{topicOffsets_L,{array,kpro_TopicOffsets}}],kpro:decode_fields(kpro_OffsetResponse, Fields, Bin);
decode(kpro_TopicOffsets, Bin) ->
Fields = [{topicName,string},{partitionOffsets_L,{array,kpro_PartitionOffsets}}],kpro:decode_fields(kpro_TopicOffsets, Fields, Bin);
decode(kpro_PartitionOffsets, Bin) ->
Fields = [{partition,int32},{errorCode,int16},{offset_L,{array,int64}}],kpro:decode_fields(kpro_PartitionOffsets, Fields, Bin);
decode(kpro_MetadataResponse, Bin) ->
Fields = [{broker_L,{array,kpro_Broker}},{topicMetadata_L,{array,kpro_TopicMetadata}}],kpro:decode_fields(kpro_MetadataResponse, Fields, Bin);
decode(kpro_Broker, Bin) ->
Fields = [{nodeId,int32},{host,string},{port,int32}],kpro:decode_fields(kpro_Broker, Fields, Bin);
decode(kpro_TopicMetadata, Bin) ->
Fields = [{errorCode,int16},
 {topicName,string},
 {partitionMetadata_L,{array,kpro_PartitionMetadata}}],kpro:decode_fields(kpro_TopicMetadata, Fields, Bin);
decode(kpro_PartitionMetadata, Bin) ->
Fields = [{errorCode,int16},
 {partition,int32},
 {leader,int32},
 {replicas,{array,int32}},
 {isr,{array,int32}}],kpro:decode_fields(kpro_PartitionMetadata, Fields, Bin);
decode(kpro_OffsetCommitResponse, Bin) ->
Fields = [{oCRspTopic_L,{array,kpro_OCRspTopic}}],kpro:decode_fields(kpro_OffsetCommitResponse, Fields, Bin);
decode(kpro_OCRspTopic, Bin) ->
Fields = [{topicName,string},{oCRspPartition_L,{array,kpro_OCRspPartition}}],kpro:decode_fields(kpro_OCRspTopic, Fields, Bin);
decode(kpro_OCRspPartition, Bin) ->
Fields = [{partition,int32},{errorCode,int16}],kpro:decode_fields(kpro_OCRspPartition, Fields, Bin);
decode(kpro_OffsetFetchResponse, Bin) ->
Fields = [{topicOffset_L,{array,kpro_TopicOffset}}],kpro:decode_fields(kpro_OffsetFetchResponse, Fields, Bin);
decode(kpro_TopicOffset, Bin) ->
Fields = [{topicName,string},{partitionOffset_L,{array,kpro_PartitionOffset}}],kpro:decode_fields(kpro_TopicOffset, Fields, Bin);
decode(kpro_PartitionOffset, Bin) ->
Fields = [{partition,int32},{offset,int64},{metadata,string},{errorCode,int16}],kpro:decode_fields(kpro_PartitionOffset, Fields, Bin);
decode(kpro_GroupCoordinatorResponse, Bin) ->
Fields = [{errorCode,int16},
 {coordinatorId,int32},
 {coordinatorHost,string},
 {coordinatorPort,int32}],kpro:decode_fields(kpro_GroupCoordinatorResponse, Fields, Bin);
decode(kpro_JoinGroupResponse, Bin) ->
Fields = [{errorCode,int16},
 {generationId,int32},
 {protocolName,string},
 {leaderId,string},
 {memberId,string},
 {groupMemberMetadata_L,{array,kpro_GroupMemberMetadata}}],kpro:decode_fields(kpro_JoinGroupResponse, Fields, Bin);
decode(kpro_GroupMemberMetadata, Bin) ->
Fields = [{memberId,string},{protocolMetadata,bytes}],kpro:decode_fields(kpro_GroupMemberMetadata, Fields, Bin);
decode(kpro_HeartbeatResponse, Bin) ->
Fields = [{errorCode,int16}],kpro:decode_fields(kpro_HeartbeatResponse, Fields, Bin);
decode(kpro_LeaveGroupResponse, Bin) ->
Fields = [{errorCode,int16}],kpro:decode_fields(kpro_LeaveGroupResponse, Fields, Bin);
decode(kpro_SyncGroupResponse, Bin) ->
Fields = [{errorCode,int16},{memberAssignment,bytes}],kpro:decode_fields(kpro_SyncGroupResponse, Fields, Bin);
decode(kpro_DescribeGroupsResponse, Bin) ->
Fields = [{groupDescription_L,{array,kpro_GroupDescription}}],kpro:decode_fields(kpro_DescribeGroupsResponse, Fields, Bin);
decode(kpro_GroupDescription, Bin) ->
Fields = [{errorCode,int16},
 {groupId,string},
 {state,string},
 {protocolType,string},
 {protocol,string},
 {groupMemberDescription_L,{array,kpro_GroupMemberDescription}}],kpro:decode_fields(kpro_GroupDescription, Fields, Bin);
decode(kpro_GroupMemberDescription, Bin) ->
Fields = [{memberId,string},
 {clientId,string},
 {clientHost,string},
 {memberMetadata,bytes},
 {memberAssignment,bytes}],kpro:decode_fields(kpro_GroupMemberDescription, Fields, Bin);
decode(kpro_ListGroupsResponse, Bin) ->
Fields = [{errorCode,int16},{groupInfo_L,{array,kpro_GroupInfo}}],kpro:decode_fields(kpro_ListGroupsResponse, Fields, Bin);
decode(kpro_GroupInfo, Bin) ->
Fields = [{groupId,string},{protocolType,string}],kpro:decode_fields(kpro_GroupInfo, Fields, Bin);
decode(kpro_ConsumerGroupProtocolMetadata, Bin) ->
Fields = [{version,int16},{topicName_L,{array,string}},{userData,bytes}],kpro:decode_fields(kpro_ConsumerGroupProtocolMetadata, Fields, Bin);
decode(kpro_ConsumerGroupMemberAssignment, Bin) ->
Fields = [{version,int16},
 {consumerGroupPartitionAssignment_L,
     {array,kpro_ConsumerGroupPartitionAssignment}},
 {userData,bytes}],kpro:decode_fields(kpro_ConsumerGroupMemberAssignment, Fields, Bin);
decode(kpro_ConsumerGroupPartitionAssignment, Bin) ->
Fields = [{topicName,string},{partition_L,{array,int32}}],kpro:decode_fields(kpro_ConsumerGroupPartitionAssignment, Fields, Bin).
enc(X) -> kpro:encode(X).

