code: async def load_field(obj, elem_type, params=None, elem=None):
      
      if issubclass(elem_type, x.UVarintType) or issubclass(elem_type, x.IntType) or isinstance(obj, (int, bool)):
          return set_elem(elem, obj)
  
      elif issubclass(elem_type, x.BlobType):
          fvalue = await load_blob(obj, elem_type)
          return set_elem(elem, fvalue)
  
      elif issubclass(elem_type, x.UnicodeType) or isinstance(elem, str):
          return set_elem(elem, obj)
  
      elif issubclass(elem_type, x.VariantType):
          fvalue = await load_variant(obj, elem=get_elem(elem), elem_type=elem_type, params=params)
          return set_elem(elem, fvalue)
  
      elif issubclass(elem_type, x.ContainerType):  # container ~ simple list
          fvalue = await load_container(obj, elem_type, params=params, container=get_elem(elem))
          return set_elem(elem, fvalue)
  
      elif issubclass(elem_type, x.MessageType):
          fvalue = await load_message(obj, msg_type=elem_type, msg=get_elem(elem))
          return set_elem(elem, fvalue)
  
      else:
          raise TypeError
docs: Loads a field from the reader, based on the field type specification. Demultiplexer.
  
      :param obj:
      :param elem_type:
      :param params:
      :param elem:
      :return: