async def field(self, elem=None, elem_type=None, params=None):
elem_type = elem_type if elem_type else elem.__class__<EOL>fvalue = None<EOL>etype = self._get_type(elem_type)<EOL>if self._is_type(etype, UVarintType):<EOL><INDENT>fvalue = await self.uvarint(get_elem(elem))<EOL><DEDENT>elif self._is_type(etype, IntType):<EOL><INDENT>fvalue = await self.uint(<EOL>elem=get_elem(elem), elem_type=elem_type, params=params<EOL>)<EOL><DEDENT>elif self._is_type(etype, BlobType):<EOL><INDENT>fvalue = await self.blob(<EOL>elem=get_elem(elem), elem_type=elem_type, params=params<EOL>)<EOL><DEDENT>elif self._is_type(etype, UnicodeType):<EOL><INDENT>fvalue = await self.unicode_type(get_elem(elem))<EOL><DEDENT>elif self._is_type(etype, VariantType):<EOL><INDENT>fvalue = await self.variant(<EOL>elem=get_elem(elem), elem_type=elem_type, params=params<EOL>)<EOL><DEDENT>elif self._is_type(etype, ContainerType):  <EOL><INDENT>fvalue = await self.container(<EOL>container=get_elem(elem), container_type=elem_type, params=params<EOL>)<EOL><DEDENT>elif self._is_type(etype, TupleType):  <EOL><INDENT>fvalue = await self.tuple(<EOL>elem=get_elem(elem), elem_type=elem_type, params=params<EOL>)<EOL><DEDENT>elif self._is_type(etype, MessageType):<EOL><INDENT>fvalue = await self.message(get_elem(elem), msg_type=elem_type)<EOL><DEDENT>else:<EOL><INDENT>raise TypeError(<EOL>"<STR_LIT>" % (elem_type, type(elem_type), elem)<EOL>)<EOL><DEDENT>return fvalue if self.writing else set_elem(elem, fvalue)<EOL>
Archive field
:param elem:
:param elem_type:
:param params:
:return: