code: 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)
docs: Loads/dumps message
          :param msg:
          :param msg_type:
          :param use_version:
          :return: