docs: def unpack_struct(self, struct):
          """
          unpacks the given struct from the underlying buffer and returns
          the results. Will raise an UnpackException if there is not
          enough data to satisfy the format of the structure
          """
  
          size = struct.size
  
          offset = self.offset
          if self.data:
              avail = len(self.data) - offset
          else:
              avail = 0
  
          if avail < size:
              raise UnpackException(struct.format, size, avail)
  
          self.offset = offset + size
          return struct.unpack_from(self.data, offset)