async def load_variant(obj, elem, elem_type=None, params=None, field_archiver=None, wrapped=None):
    """
    Loads variant from the obj representation
    :param obj:
    :param elem:
    :param elem_type:
    :param params:
    :param field_archiver:
    :param wrapped:
    :return:
    """
    field_archiver = field_archiver if field_archiver else load_field
    is_wrapped = elem_type.WRAPS_VALUE if wrapped is None else wrapped

    if is_wrapped:
        elem = elem_type() if elem is None else elem

    fname = list(obj.keys())[0]
    for field in elem_type.f_specs():
        if field[0] != fname:
            continue

        fvalue = await field_archiver(obj[fname], field[1], field[2:], elem if not is_wrapped else None)
        if is_wrapped:
            elem.set_variant(field[0], fvalue)

        return elem if is_wrapped else fvalue
    raise ValueError('Unknown tag: %s' % fname)
Loads variant from the obj representation
    :param obj:
    :param elem:
    :param elem_type:
    :param params:
    :param field_archiver:
    :param wrapped:
    :return: