docs: def _GenerateSingleTypeIteration(self, next_types, processed_types,
                                     converted_responses):
      """Yields responses of a given type only.
  
      _GenerateSingleTypeIteration iterates through converted_responses and
      only yields responses of the same type. The type is either popped from
      next_types or inferred from the first item of converted_responses.
      The type is added to a set of processed_types.
  
      Along the way _GenerateSingleTypeIteration updates next_types set.
      All newly encountered and not previously processed types are added to
      next_types set.
  
      Calling _GenerateSingleTypeIteration multiple times allows doing
      multiple passes on converted responses and emitting converted responses
      of the same type continuously (so that they can be written into
      the same file by the plugin).
  
      Args:
        next_types: List of value type classes that will be used in further
          iterations.
        processed_types: List of value type classes that have been used already.
        converted_responses: Iterable with values to iterate over.
  
      Yields:
        Values from converted_response with the same type. Type is either
        popped from the next_types set or inferred from the first
        converted_responses value.
      """
      if not next_types:
        current_type = None
      else:
        current_type = next_types.pop()
        processed_types.add(current_type)
  
      for converted_response in converted_responses:
        if not current_type:
          current_type = converted_response.__class__
          processed_types.add(current_type)
  
        if converted_response.__class__ != current_type:
          if converted_response.__class__ not in processed_types:
            next_types.add(converted_response.__class__)
          continue
  
        yield converted_response