async def message(self, msg, msg_type=None, use_version=None):
        """
        Loads/dumps message
        :param msg:
        :param msg_type:
        :param use_version:
        :return:
        """
        elem_type = msg_type if msg_type is not None else msg.__class__
        version = await self.version(elem_type, None, elem=msg) if use_version is None else use_version

        if self.is_tracked():
            return self.get_tracked()

        if hasattr(elem_type, 'boost_serialize'):
            msg = elem_type() if msg is None else msg
            self.pop_track(use_version is None)
            return await msg.boost_serialize(self, version=version)

        if self.writing:
            self.pop_track(use_version is None)
            return await self.dump_message(msg, msg_type=msg_type)
        else:
            obj = await self.load_message(msg_type, msg=msg)
            return self.track_obj(obj, use_version is None)
async def message ( self , msg , msg_type = None , use_version = None ) : elem_type = msg_type if msg_type is not None else msg . __class__ version = await self . version ( elem_type , None , elem = msg ) if use_version is None else use_version if self . is_tracked ( ) : return self . get_tracked ( ) if hasattr ( elem_type , 'boost_serialize' ) : msg = elem_type ( ) if msg is None else msg self . pop_track ( use_version is None ) return await msg . boost_serialize ( self , version = version ) if self . writing : self . pop_track ( use_version is None ) return await self . dump_message ( msg , msg_type = msg_type ) else : obj = await self . load_message ( msg_type , msg = msg ) return self . track_obj ( obj , use_version is None )
Loads/dumps message
        :param msg:
        :param msg_type:
        :param use_version:
        :return: