def Selector(fields):
    '''Selectors are used when you want to be able present several different options to the user but
    force them to select one. For example, it would not make much sense to allow them
    to say that a single input should be sourced from a csv and a parquet file: They must choose.

    Note that in other type systems this might be called an "input union."

    Args:
        fields (Dict[str, Field]):
    '''

    check_user_facing_fields_dict(fields, 'Selector')

    class _Selector(_ConfigSelector):
        def __init__(self):
            key = 'Selector.' + str(DictCounter.get_next_count())
            super(_Selector, self).__init__(
                key=key,
                name=None,
                fields=fields,
                # description='A configuration dictionary with typed fields',
                type_attributes=ConfigTypeAttributes(is_builtin=True),
            )

    return _Selector
Selectors are used when you want to be able present several different options to the user but
    force them to select one. For example, it would not make much sense to allow them
    to say that a single input should be sourced from a csv and a parquet file: They must choose.

    Note that in other type systems this might be called an "input union."

    Args:
        fields (Dict[str, Field]):