code: def unpack_utf8(self):
          
          num_bytes_consumed, s = decode_utf8(self.__f)
          self.__num_bytes_consumed += num_bytes_consumed
          return num_bytes_consumed, s
docs: Decode a utf-8 string encoded as described in MQTT Version
          3.1.1 section 1.5.3 line 177.  This is a 16-bit unsigned length
          followed by a utf-8 encoded string.
  
          Raises
          ------
          UnderflowDecodeError
              Raised when a read failed to extract enough bytes from the
              underlying stream to decode the string.
          DecodeError
              When any code point in the utf-8 string is invalid.
  
          Returns
          -------
          int
              Number of bytes consumed.
          str
              A string utf-8 decoded from the underlying stream.