docs: def index_fields(self, index=Index(), **options):
          """ Indexes all fields in the `Structure` starting with the given
          *index* and returns the :class:`Index` after the last :class:`Field`
          in the `Structure`.
  
          :param Index index: start :class:`Index` for the first :class:`Field`
              in the `Structure`.
          :keyword bool nested: if ``True`` all :class:`Pointer` fields of the
              `Structure` indexes their referenced :attr:`~Pointer.data` object
              fields as well (chained method call).
          """
          for name, item in self.items():
              # Container
              if is_container(item):
                  index = item.index_fields(index, **options)
              # Pointer
              elif is_pointer(item) and get_nested(options):
                  index = item.index_field(index)
                  item.index_data()
              # Field
              elif is_field(item):
                  index = item.index_field(index)
              else:
                  raise MemberTypeError(self, item, name, index)
          return index