docs: def GetSubFields(self, fd, field_names):
      """Gets all the subfields indicated by field_names.
  
      This resolves specifications like "Users.special_folders.app_data" where for
      each entry in the Users protobuf the corresponding app_data folder entry
      should be returned.
  
      Args:
        fd: The base RDFValue or Array.
        field_names: A list of strings indicating which subfields to get.
  
      Yields:
        All the subfields matching the field_names specification.
      """
  
      if isinstance(fd, rdf_protodict.RDFValueArray):
        for value in fd:
          for res in self._GetSubField(value, field_names):
            yield res
      else:
        for res in self._GetSubField(fd, field_names):
          yield res