docs: def view_fields(self, *attributes, **options):
          """ Returns an :class:`ordered dictionary <collections.OrderedDict>` which
          contains the ``{'member name': field attribute}`` or the
          ``{'member name': dict(field attributes)}`` pairs for each :class:`Field`
          *nested* in the `Structure`.
  
          The *attributes* of each :class:`Field` for containers *nested* in the
          `Structure` are viewed as well (chained method call).
  
          :param str attributes: selected :class:`Field` attributes.
              Fallback is the field :attr:`~Field.value`.
          :keyword tuple fieldnames: sequence of dictionary keys for the selected
              field *attributes*. Defaults to ``(*attributes)``.
          :keyword bool nested: if ``True`` all :class:`Pointer` fields nested in the
              `Structure` views their referenced :attr:`~Pointer.data` object field
              attributes as well (chained method call).
          """
          members = OrderedDict()
          for name, item in self.items():
              # Container
              if is_container(item):
                  members[name] = item.view_fields(*attributes, **options)
              # Pointer
              elif is_pointer(item) and get_nested(options):
                  members[name] = item.view_fields(*attributes, **options)
              # Field
              elif is_field(item):
                  if attributes:
                      field_getter = attrgetter(*attributes)
                  else:
                      field_getter = attrgetter('value')
                  if len(attributes) > 1:
                      fieldnames = options.get('fieldnames', attributes)
                      members[name] = dict(zip(fieldnames, field_getter(item)))
                  else:
                      members[name] = field_getter(item)
  
          return members