Returns the **metadata** of a `Pointer` as an
        :class:`ordered dictionary <collections.OrderedDict>`.

        .. code-block:: python

            metadata = {
                'address': self.index.address,
                'alignment': [self.alignment.byte_size, self.alignment.bit_offset],
                'class': self.__class__.__name__,
                'index': [self.index.byte, self.index.bit],
                'max': self.max(),
                'min': self.min(),
                'name': name if name else self.__class__.__name__,
                'order': self.byte_order.value,
                'size': self.bit_size,
                'type': Pointer.item_type.name,
                'value': self.value,
                'member': [self.data.describe()]
            }

        :param str name: optional name for the `Pointer` field.
            Fallback is the class name.
        :keyword bool nested: if ``True`` a :class:`Pointer` field lists its
            referenced :attr:`data` object fields as well (chained method call).
            Default is ``True``.

def describe(self, name=str(), **options):
        """ Returns the **metadata** of a `Pointer` as an
        :class:`ordered dictionary <collections.OrderedDict>`.

        .. code-block:: python

            metadata = {
                'address': self.index.address,
                'alignment': [self.alignment.byte_size, self.alignment.bit_offset],
                'class': self.__class__.__name__,
                'index': [self.index.byte, self.index.bit],
                'max': self.max(),
                'min': self.min(),
                'name': name if name else self.__class__.__name__,
                'order': self.byte_order.value,
                'size': self.bit_size,
                'type': Pointer.item_type.name,
                'value': self.value,
                'member': [self.data.describe()]
            }

        :param str name: optional name for the `Pointer` field.
            Fallback is the class name.
        :keyword bool nested: if ``True`` a :class:`Pointer` field lists its
            referenced :attr:`data` object fields as well (chained method call).
            Default is ``True``.
        """
        metadata = super().describe(name, **options)
        metadata['class'] = self.__class__.__name__
        metadata['name'] = name if name else self.__class__.__name__
        metadata['type'] = Pointer.item_type.name
        if is_any(self._data) and get_nested(options):
            metadata['member'] = list()
            metadata['member'].append(self._data.describe('data', **options))
        return metadata