def _dictionary_builder(dictionary, parameter_name, item_validator):
    """
    Builds a dictionary item validated by the given validator from the given one.
    
    Parameters
    ----------
    dictionary : `None`, `dict`, (`set`, `tuple`, `list`) of `tuple[2]`
        The value to convert.
    parameter_name : `str`
        The parameter's name to raise exception with.
    item_validator : `FunctionType`
        Item validator to pass every every item to.
    
    Returns
    -------
    validated_dictionary : `None`, `dict` of (`str`, `Any`) items
    
    Raises
    ------
    TypeError
        - If `dictionary`'s or any of it's item's type is incorrect.
    ValueError
        - Item structure incorrect.
    """
    if dictionary is None:
        validated_dictionary = None
    
    elif isinstance(dictionary, dict):
        validated_dictionary = {}
        
        for item in dictionary.items():
            key, value = item_validator(item, parameter_name)
            validated_dictionary[key] = value
        
        if not validated_dictionary:
            validated_dictionary = None
    
    elif isinstance(dictionary, (tuple, list, set)):
        validated_dictionary = {}
        for item in dictionary:
            if not isinstance(item, tuple):
                raise TypeError(
                    f'`{parameter_name}` items can be `tuple`-s, got {item.__class__.__name__}; {item!r}; '
                    f'{parameter_name}={dictionary!r}.'
                )
            
            
            item_length = len(item)
            if item_length != 2:
                raise ValueError(
                    f'`{parameter_name}` items can be `tuple`-s of length `2`, got {item!r}; length={item_length!r}; '
                    f'{parameter_name}={dictionary!r}.'
                )
            
            key, value = item_validator(item, parameter_name)
            validated_dictionary[key] = value
        
        if not validated_dictionary:
            validated_dictionary = None
            
    else:
        raise TypeError(
            f'`{parameter_name}` can be `None`, `dict`, `set`, `tuple`, `list`, '
            f'got {dictionary.__class__.__name__}; {dictionary!r}.'
        )
    
    return validated_dictionary