code: def pack(self, value=None):
          
          if value is None:
              self.update_header_length()
              return super().pack()
          elif isinstance(value, type(self)):
              return value.pack()
          else:
              msg = "{} is not an instance of {}".format(value,
                                                         type(self).__name__)
              raise PackException(msg)
docs: Pack the message into a binary data.
  
          One of the basic operations on a Message is the pack operation. During
          the packing process, we convert all message attributes to binary
          format.
  
          Since that this is usually used before sending the message to a switch,
          here we also call :meth:`update_header_length`.
  
          .. seealso:: This method call its parent's :meth:`GenericStruct.pack`
              after :meth:`update_header_length`.
  
          Returns:
              bytes: A binary data thats represents the Message.
  
          Raises:
              Exception: If there are validation errors.