De-serializes the `Structure` from the byte *buffer* starting at
        the begin of the *buffer* or with the given *index* by mapping the
        bytes to the :attr:`~Field.value` for each :class:`Field` in the
        `Structure` in accordance with the decoding *byte order* for the
        de-serialization and the decoding :attr:`byte_order` of each
        :class:`Field` in the `Structure`.

        A specific decoding :attr:`~Field.byte_order` of a :class:`Field`
        overrules the decoding *byte order* for the de-serialization.

        Returns the :class:`Index` of the *buffer* after the last de-serialized
        :class:`Field` in the `Structure`.

        Optional the de-serialization of the referenced :attr:`~Pointer.data`
        objects of all :class:`Pointer` fields in the `Structure` can be
        enabled.

        :param bytes buffer: byte stream.
        :param Index index: current read :class:`Index` within the *buffer*.
        :keyword byte_order: decoding byte order for the de-serialization.
        :type byte_order: :class:`Byteorder`, :class:`str`
        :keyword bool nested: if ``True`` all :class:`Pointer` fields of a
            `Structure` de-serialize their referenced :attr:`~Pointer.data`
            object as well (chained method call).
            Each :class:`Pointer` field uses for the de-serialization of its
            referenced  :attr:`~Pointer.data` object its own
            :attr:`~Pointer.bytestream`.

def deserialize(self, buffer=bytes(), index=Index(), **options):
        """ De-serializes the `Structure` from the byte *buffer* starting at
        the begin of the *buffer* or with the given *index* by mapping the
        bytes to the :attr:`~Field.value` for each :class:`Field` in the
        `Structure` in accordance with the decoding *byte order* for the
        de-serialization and the decoding :attr:`byte_order` of each
        :class:`Field` in the `Structure`.

        A specific decoding :attr:`~Field.byte_order` of a :class:`Field`
        overrules the decoding *byte order* for the de-serialization.

        Returns the :class:`Index` of the *buffer* after the last de-serialized
        :class:`Field` in the `Structure`.

        Optional the de-serialization of the referenced :attr:`~Pointer.data`
        objects of all :class:`Pointer` fields in the `Structure` can be
        enabled.

        :param bytes buffer: byte stream.
        :param Index index: current read :class:`Index` within the *buffer*.
        :keyword byte_order: decoding byte order for the de-serialization.
        :type byte_order: :class:`Byteorder`, :class:`str`
        :keyword bool nested: if ``True`` all :class:`Pointer` fields of a
            `Structure` de-serialize their referenced :attr:`~Pointer.data`
            object as well (chained method call).
            Each :class:`Pointer` field uses for the de-serialization of its
            referenced  :attr:`~Pointer.data` object its own
            :attr:`~Pointer.bytestream`.
        """
        for item in self.values():
            index = item.deserialize(buffer, index, **options)
        return index