def METHOD_NAME(pk: str, pv: Any, t: Any) -> None:
    if is_optional_type(t):
        t = extract_optional_type(t)
    if is_literal_type(t):
        a_l = get_args(t)
        if pv not in a_l:
            raise DictValidationException(f"In {path}: field {pk} value {pv} not in allowed {a_l}", path, pk, pv)
    elif t in [int, bool, str, float]:
        if not isinstance(pv, t):
            raise DictValidationException(f"In {path}: field {pk} value {pv} has invalid type {type(pv).__name__} while {t.__name__} is expected", path, pk, pv)
    elif is_typeddict(t):
        if not isinstance(pv, dict):
            raise DictValidationException(f"In {path}: field {pk} value {pv} has invalid type {type(pv).__name__} while dict is expected", path, pk, pv)
        validate_dict(t, pv, path + "/" + pk, filter_f, validator_f)
    elif is_list_generic_type(t):
        if not isinstance(pv, list):
            raise DictValidationException(f"In {path}: field {pk} value {pv} has invalid type {type(pv).__name__} while list is expected", path, pk, pv)
        # get list element type from generic and process each list element
        l_t = get_args(t)[0]
        for i, l_v in enumerate(pv):
            METHOD_NAME(pk + f"[{i}]", l_v, l_t)
    elif is_dict_generic_type(t):
        if not isinstance(pv, dict):
            raise DictValidationException(f"In {path}: field {pk} value {pv} has invalid type {type(pv).__name__} while dict is expected", path, pk, pv)
        # get dict key and value type from generic and process each k: v of the dict
        _, d_v_t = get_args(t)
        for d_k, d_v in pv.items():
            if not isinstance(d_k, str):
                raise DictValidationException(f"In {path}: field {pk} key {d_k} must be a string", path, pk, d_k)
            METHOD_NAME(pk + f"[{d_k}]", d_v, d_v_t)
    elif t is Any:
        # pass everything with any type
        pass
    else:
        if not validator_f(path, pk, pv, t):
            raise DictValidationException(f"In {path}: field {pk} has expected type {t.__name__} which lacks validator", path, pk)