async def message_field(self, msg, field, fvalue=None, obj=None):
fname, ftype, params = field[<NUM_LIT:0>], field[<NUM_LIT:1>], field[<NUM_LIT:2>:]<EOL>try:<EOL><INDENT>self.tracker.push_field(field[<NUM_LIT:0>])<EOL>if self.writing:<EOL><INDENT>if msg is None:<EOL><INDENT>return None<EOL><DEDENT>fvalue = getattr(msg, fname, None) if fvalue is None else fvalue<EOL>await self._dump_field(fvalue, ftype, params, obj=eref(obj, fname, True))<EOL><DEDENT>else:<EOL><INDENT>oval = obj[fname] if self.strict_load else (obj[fname] if fname in obj else None)<EOL>await self._load_field(ftype, params, x.eref(msg, fname), obj=oval)<EOL><DEDENT>self.tracker.pop()<EOL><DEDENT>except Exception as e:<EOL><INDENT>raise helpers.ArchiveException(e, tracker=self.tracker) from e<EOL><DEDENT>
Dumps/Loads message field
:param msg:
:param field:
:param fvalue: explicit value for dump
:param obj:
:return: