code: async def field(self, elem=None, elem_type=None, params=None):
          
          elem_type = elem_type if elem_type else elem.__class__
          fvalue = None
  
          src = elem
          if issubclass(elem_type, x.UVarintType):
              fvalue = await self.uvarint(x.get_elem(src))
  
          elif issubclass(elem_type, x.IntType):
              fvalue = await self.uint(elem=x.get_elem(src), elem_type=elem_type, params=params)
  
          elif issubclass(elem_type, x.BlobType):
              fvalue = await self.blob(elem=x.get_elem(src), elem_type=elem_type, params=params)
  
          elif issubclass(elem_type, x.UnicodeType):
              fvalue = await self.unicode_type(x.get_elem(src))
  
          elif issubclass(elem_type, x.VariantType):
              fvalue = await self.variant(elem=x.get_elem(src), elem_type=elem_type, params=params)
  
          elif issubclass(elem_type, x.ContainerType):  # container ~ simple list
              fvalue = await self.container(container=x.get_elem(src), container_type=elem_type, params=params)
  
          elif issubclass(elem_type, x.TupleType):  # tuple ~ simple list
              fvalue = await self.tuple(elem=x.get_elem(src), elem_type=elem_type, params=params)
  
          elif issubclass(elem_type, x.MessageType):
              fvalue = await self.message(x.get_elem(src), msg_type=elem_type)
  
          else:
              raise TypeError
  
          return fvalue if self.writing else x.set_elem(elem, fvalue)
docs: Archive field
          :param elem:
          :param elem_type:
          :param params:
          :return: