code: def decode(cls, data, bytes_to_read=None):
          
          if isinstance(data, bytes):
              data = io.BytesIO(data)
          if bytes_to_read is None:
              bytes_to_read = Int32.decode(data)
  
          # if FetchRequest max_bytes is smaller than the available message set
          # the server returns partial data for the final message
          # So create an internal buffer to avoid over-reading
          raw = io.BytesIO(data.read(bytes_to_read))
  
          items = []
          while bytes_to_read:
              try:
                  offset = Int64.decode(raw)
                  msg_bytes = Bytes.decode(raw)
                  bytes_to_read -= 8 + 4 + len(msg_bytes)
                  items.append((offset, len(msg_bytes), Message.decode(msg_bytes)))
              except ValueError:
                  # PartialMessage to signal that max_bytes may be too small
                  items.append((None, None, PartialMessage()))
                  break
          return items
docs: Compressed messages should pass in bytes_to_read (via message size)
          otherwise, we decode from data as Int32