%% generated code, do not edit!
-module(kpro_structs).
-export([encode/1]).
-export([decode/2]).
-include("kpro.hrl").
encode(#kpro_ProduceRequestV2{} = R)->
  [enc({int16, R#kpro_ProduceRequestV2.acks}),
   enc({int32, R#kpro_ProduceRequestV2.timeout}),
   enc({array, R#kpro_ProduceRequestV2.topicData_L})
  ];
encode(#kpro_TopicData{} = R)->
  [enc({string, R#kpro_TopicData.topic}),
   enc({array, R#kpro_TopicData.data_L})
  ];
encode(#kpro_Data{} = R)->
  [enc({int32, R#kpro_Data.partition}),
   enc({records, R#kpro_Data.recordSet})
  ];
encode(#kpro_ProduceRequestV1{} = R)->
  [enc({int16, R#kpro_ProduceRequestV1.acks}),
   enc({int32, R#kpro_ProduceRequestV1.timeout}),
   enc({array, R#kpro_ProduceRequestV1.topicData_L})
  ];
encode(#kpro_ProduceRequestV0{} = R)->
  [enc({int16, R#kpro_ProduceRequestV0.acks}),
   enc({int32, R#kpro_ProduceRequestV0.timeout}),
   enc({array, R#kpro_ProduceRequestV0.topicData_L})
  ];
encode(#kpro_FetchRequestV3{} = R)->
  [enc({int32, R#kpro_FetchRequestV3.replicaId}),
   enc({int32, R#kpro_FetchRequestV3.maxWaitTime}),
   enc({int32, R#kpro_FetchRequestV3.minBytes}),
   enc({int32, R#kpro_FetchRequestV3.maxBytes}),
   enc({array, R#kpro_FetchRequestV3.topics_L})
  ];
encode(#kpro_Topics{} = R)->
  [enc({string, R#kpro_Topics.topic}),
   enc({array, R#kpro_Topics.partitions_L})
  ];
encode(#kpro_Partitions{} = R)->
  [enc({int32, R#kpro_Partitions.partition}),
   enc({int64, R#kpro_Partitions.fetchOffset}),
   enc({int32, R#kpro_Partitions.maxBytes})
  ];
encode(#kpro_FetchRequestV2{} = R)->
  [enc({int32, R#kpro_FetchRequestV2.replicaId}),
   enc({int32, R#kpro_FetchRequestV2.maxWaitTime}),
   enc({int32, R#kpro_FetchRequestV2.minBytes}),
   enc({array, R#kpro_FetchRequestV2.topics_L})
  ];
encode(#kpro_FetchRequestV1{} = R)->
  [enc({int32, R#kpro_FetchRequestV1.replicaId}),
   enc({int32, R#kpro_FetchRequestV1.maxWaitTime}),
   enc({int32, R#kpro_FetchRequestV1.minBytes}),
   enc({array, R#kpro_FetchRequestV1.topics_L})
  ];
encode(#kpro_FetchRequestV0{} = R)->
  [enc({int32, R#kpro_FetchRequestV0.replicaId}),
   enc({int32, R#kpro_FetchRequestV0.maxWaitTime}),
   enc({int32, R#kpro_FetchRequestV0.minBytes}),
   enc({array, R#kpro_FetchRequestV0.topics_L})
  ];
encode(#kpro_OffsetsRequestV1{} = R)->
  [enc({int32, R#kpro_OffsetsRequestV1.replicaId}),
   enc({array, R#kpro_OffsetsRequestV1.topics_L})
  ];
encode(#kpro_OffsetsRequestV0{} = R)->
  [enc({int32, R#kpro_OffsetsRequestV0.replicaId}),
   enc({array, R#kpro_OffsetsRequestV0.topics_L})
  ];
encode(#kpro_MetadataRequestV2{} = R)->
  [enc({{array,string}, R#kpro_MetadataRequestV2.topics_L})
  ];
encode(#kpro_MetadataRequestV1{} = R)->
  [enc({{array,string}, R#kpro_MetadataRequestV1.topics_L})
  ];
encode(#kpro_MetadataRequestV0{} = R)->
  [enc({{array,string}, R#kpro_MetadataRequestV0.topics_L})
  ];
encode(#kpro_OffsetCommitRequestV2{} = R)->
  [enc({string, R#kpro_OffsetCommitRequestV2.groupId}),
   enc({int32, R#kpro_OffsetCommitRequestV2.groupGenerationId}),
   enc({string, R#kpro_OffsetCommitRequestV2.memberId}),
   enc({int64, R#kpro_OffsetCommitRequestV2.retentionTime}),
   enc({array, R#kpro_OffsetCommitRequestV2.topics_L})
  ];
encode(#kpro_OffsetCommitRequestV1{} = R)->
  [enc({string, R#kpro_OffsetCommitRequestV1.groupId}),
   enc({int32, R#kpro_OffsetCommitRequestV1.groupGenerationId}),
   enc({string, R#kpro_OffsetCommitRequestV1.memberId}),
   enc({array, R#kpro_OffsetCommitRequestV1.topics_L})
  ];
encode(#kpro_OffsetCommitRequestV0{} = R)->
  [enc({string, R#kpro_OffsetCommitRequestV0.groupId}),
   enc({array, R#kpro_OffsetCommitRequestV0.topics_L})
  ];
encode(#kpro_OffsetFetchRequestV2{} = R)->
  [enc({string, R#kpro_OffsetFetchRequestV2.groupId}),
   enc({array, R#kpro_OffsetFetchRequestV2.topics_L})
  ];
encode(#kpro_OffsetFetchRequestV1{} = R)->
  [enc({string, R#kpro_OffsetFetchRequestV1.groupId}),
   enc({array, R#kpro_OffsetFetchRequestV1.topics_L})
  ];
encode(#kpro_OffsetFetchRequestV0{} = R)->
  [enc({string, R#kpro_OffsetFetchRequestV0.groupId}),
   enc({array, R#kpro_OffsetFetchRequestV0.topics_L})
  ];
encode(#kpro_GroupCoordinatorRequestV0{} = R)->
  [enc({string, R#kpro_GroupCoordinatorRequestV0.groupId})
  ];
encode(#kpro_JoinGroupRequestV1{} = R)->
  [enc({string, R#kpro_JoinGroupRequestV1.groupId}),
   enc({int32, R#kpro_JoinGroupRequestV1.sessionTimeout}),
   enc({int32, R#kpro_JoinGroupRequestV1.rebalanceTimeout}),
   enc({string, R#kpro_JoinGroupRequestV1.memberId}),
   enc({string, R#kpro_JoinGroupRequestV1.protocolType}),
   enc({array, R#kpro_JoinGroupRequestV1.groupProtocols_L})
  ];
encode(#kpro_GroupProtocols{} = R)->
  [enc({string, R#kpro_GroupProtocols.protocolName}),
   enc({bytes, R#kpro_GroupProtocols.protocolMetadata})
  ];
encode(#kpro_JoinGroupRequestV0{} = R)->
  [enc({string, R#kpro_JoinGroupRequestV0.groupId}),
   enc({int32, R#kpro_JoinGroupRequestV0.sessionTimeout}),
   enc({string, R#kpro_JoinGroupRequestV0.memberId}),
   enc({string, R#kpro_JoinGroupRequestV0.protocolType}),
   enc({array, R#kpro_JoinGroupRequestV0.groupProtocols_L})
  ];
encode(#kpro_HeartbeatRequestV0{} = R)->
  [enc({string, R#kpro_HeartbeatRequestV0.groupId}),
   enc({int32, R#kpro_HeartbeatRequestV0.groupGenerationId}),
   enc({string, R#kpro_HeartbeatRequestV0.memberId})
  ];
encode(#kpro_LeaveGroupRequestV0{} = R)->
  [enc({string, R#kpro_LeaveGroupRequestV0.groupId}),
   enc({string, R#kpro_LeaveGroupRequestV0.memberId})
  ];
encode(#kpro_SyncGroupRequestV0{} = R)->
  [enc({string, R#kpro_SyncGroupRequestV0.groupId}),
   enc({int32, R#kpro_SyncGroupRequestV0.generationId}),
   enc({string, R#kpro_SyncGroupRequestV0.memberId}),
   enc({array, R#kpro_SyncGroupRequestV0.groupAssignment_L})
  ];
encode(#kpro_GroupAssignment{} = R)->
  [enc({string, R#kpro_GroupAssignment.memberId}),
   enc({bytes, R#kpro_GroupAssignment.memberAssignment})
  ];
encode(#kpro_DescribeGroupsRequestV0{} = R)->
  [enc({{array,string}, R#kpro_DescribeGroupsRequestV0.groupIds_L})
  ];
encode(#kpro_ListGroupsRequestV0{})->
  [
  ].
decode(kpro_ProduceResponseV2, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}},{throttleTimeMs,int32}],kpro:decode_fields(kpro_ProduceResponseV2, Fields, Bin);
decode(kpro_Responses, Bin) ->
Fields = [{topic,string},{partitionResponses_L,{array,kpro_PartitionResponses}}],kpro:decode_fields(kpro_Responses, Fields, Bin);
decode(kpro_PartitionResponses, Bin) ->
Fields = [{partition,int32},{errorCode,int16},{baseOffset,int64}],kpro:decode_fields(kpro_PartitionResponses, Fields, Bin);
decode(kpro_ProduceResponseV1, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}},{throttleTimeMs,int32}],kpro:decode_fields(kpro_ProduceResponseV1, Fields, Bin);
decode(kpro_ProduceResponseV0, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_ProduceResponseV0, Fields, Bin);
decode(kpro_FetchResponseV3, Bin) ->
Fields = [{throttleTimeMs,int32},{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_FetchResponseV3, Fields, Bin);
decode(kpro_FetchResponseV2, Bin) ->
Fields = [{throttleTimeMs,int32},{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_FetchResponseV2, Fields, Bin);
decode(kpro_FetchResponseV1, Bin) ->
Fields = [{throttleTimeMs,int32},{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_FetchResponseV1, Fields, Bin);
decode(kpro_FetchResponseV0, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_FetchResponseV0, Fields, Bin);
decode(kpro_OffsetsResponseV1, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_OffsetsResponseV1, Fields, Bin);
decode(kpro_OffsetsResponseV0, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_OffsetsResponseV0, Fields, Bin);
decode(kpro_MetadataResponseV2, Bin) ->
Fields = [{brokers_L,{array,kpro_Brokers}},
 {clusterId,nullable_string},
 {controllerId,int32},
 {topicMetadata_L,{array,kpro_TopicMetadata}}],kpro:decode_fields(kpro_MetadataResponseV2, Fields, Bin);
decode(kpro_Brokers, Bin) ->
Fields = [{nodeId,int32},{host,string},{port,int32}],kpro:decode_fields(kpro_Brokers, Fields, Bin);
decode(kpro_TopicMetadata, Bin) ->
Fields = [{topicErrorCode,int16},
 {topic,string},
 {partitionMetadata_L,{array,kpro_PartitionMetadata}}],kpro:decode_fields(kpro_TopicMetadata, Fields, Bin);
decode(kpro_PartitionMetadata, Bin) ->
Fields = [{partitionErrorCode,int16},
 {partitionId,int32},
 {leader,int32},
 {replicas_L,{array,int32}},
 {isr_L,{array,int32}}],kpro:decode_fields(kpro_PartitionMetadata, Fields, Bin);
decode(kpro_MetadataResponseV1, Bin) ->
Fields = [{brokers_L,{array,kpro_Brokers}},
 {controllerId,int32},
 {topicMetadata_L,{array,kpro_TopicMetadata}}],kpro:decode_fields(kpro_MetadataResponseV1, Fields, Bin);
decode(kpro_MetadataResponseV0, Bin) ->
Fields = [{brokers_L,{array,kpro_Brokers}},
 {topicMetadata_L,{array,kpro_TopicMetadata}}],kpro:decode_fields(kpro_MetadataResponseV0, Fields, Bin);
decode(kpro_OffsetCommitResponseV2, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_OffsetCommitResponseV2, Fields, Bin);
decode(kpro_OffsetCommitResponseV1, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_OffsetCommitResponseV1, Fields, Bin);
decode(kpro_OffsetCommitResponseV0, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_OffsetCommitResponseV0, Fields, Bin);
decode(kpro_OffsetFetchResponseV2, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}},{errorCode,int16}],kpro:decode_fields(kpro_OffsetFetchResponseV2, Fields, Bin);
decode(kpro_OffsetFetchResponseV1, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_OffsetFetchResponseV1, Fields, Bin);
decode(kpro_OffsetFetchResponseV0, Bin) ->
Fields = [{responses_L,{array,kpro_Responses}}],kpro:decode_fields(kpro_OffsetFetchResponseV0, Fields, Bin);
decode(kpro_GroupCoordinatorResponseV0, Bin) ->
Fields = [{errorCode,int16},{coordinator,kpro_Coordinator}],kpro:decode_fields(kpro_GroupCoordinatorResponseV0, Fields, Bin);
decode(kpro_Coordinator, Bin) ->
Fields = [{nodeId,int32},{host,string},{port,int32}],kpro:decode_fields(kpro_Coordinator, Fields, Bin);
decode(kpro_JoinGroupResponseV1, Bin) ->
Fields = [{errorCode,int16},
 {generationId,int32},
 {groupProtocol,string},
 {leaderId,string},
 {memberId,string},
 {members_L,{array,kpro_Members}}],kpro:decode_fields(kpro_JoinGroupResponseV1, Fields, Bin);
decode(kpro_Members, Bin) ->
Fields = [{memberId,string},{memberMetadata,bytes}],kpro:decode_fields(kpro_Members, Fields, Bin);
decode(kpro_JoinGroupResponseV0, Bin) ->
Fields = [{errorCode,int16},
 {generationId,int32},
 {groupProtocol,string},
 {leaderId,string},
 {memberId,string},
 {members_L,{array,kpro_Members}}],kpro:decode_fields(kpro_JoinGroupResponseV0, Fields, Bin);
decode(kpro_HeartbeatResponseV0, Bin) ->
Fields = [{errorCode,int16}],kpro:decode_fields(kpro_HeartbeatResponseV0, Fields, Bin);
decode(kpro_LeaveGroupResponseV0, Bin) ->
Fields = [{errorCode,int16}],kpro:decode_fields(kpro_LeaveGroupResponseV0, Fields, Bin);
decode(kpro_SyncGroupResponseV0, Bin) ->
Fields = [{errorCode,int16},{memberAssignment,bytes}],kpro:decode_fields(kpro_SyncGroupResponseV0, Fields, Bin);
decode(kpro_DescribeGroupsResponseV0, Bin) ->
Fields = [{groups_L,{array,kpro_Groups}}],kpro:decode_fields(kpro_DescribeGroupsResponseV0, Fields, Bin);
decode(kpro_Groups, Bin) ->
Fields = [{errorCode,int16},
 {groupId,string},
 {state,string},
 {protocolType,string},
 {protocol,string},
 {members_L,{array,kpro_Members}}],kpro:decode_fields(kpro_Groups, Fields, Bin);
decode(kpro_ListGroupsResponseV0, Bin) ->
Fields = [{errorCode,int16},{groups_L,{array,kpro_Groups}}],kpro:decode_fields(kpro_ListGroupsResponseV0, Fields, Bin).
enc(X) -> kpro:encode(X).

