FetchResponse.fromBytes constructor

FetchResponse.fromBytes(
  1. List<int> data
)

Creates new instance of FetchResponse from binary data.

Implementation

factory FetchResponse.fromBytes(List<int> data) {
  var reader = new KafkaBytesReader.fromBytes(data);
  var size = reader.readInt32();
  assert(size == data.length - 4);

  reader.readInt32(); // correlationId
  var count = reader.readInt32();
  List<FetchResult> results = [];
  var hasErrors = false;
  while (count > 0) {
    var topicName = reader.readString();
    var partitionCount = reader.readInt32();
    while (partitionCount > 0) {
      var partitionId = reader.readInt32();
      var errorCode = reader.readInt16();
      var highwaterMarkOffset = reader.readInt64();
      var messageSetSize = reader.readInt32();
      var data = reader.readRaw(messageSetSize);
      var messageReader = new KafkaBytesReader.fromBytes(data);
      var messageSet = new MessageSet.fromBytes(messageReader);
      if (errorCode != KafkaServerError.NoError) hasErrors = true;

      results.add(new FetchResult(topicName, partitionId, errorCode, highwaterMarkOffset, messageSet));
      partitionCount--;
    }
    count--;
  }

  return new FetchResponse._(results, hasErrors);
}