Идея - валидировать данные, задавая путь к значению и проверющий предикат.
Проблема в том, что не понятно какой формат должен иметь отчет об ошибках. Допустим, ошиибка в множестве, или в ключе мапы. Как указать путь к ошибочному значению? Что потом с этим путем делать?
#{ {:key :correct} {:key :wrong} }
{ {:key :wrong} :value }
Как вариант можно ссылылаться на сами объекты. Но строки, числа, кейворды и т.п. переиспользуются, т.е. 2 сроки с одинаковым содержимым - всегда один и тот же объект. Плюс, один и тот же объект может появляться не сколько раз в разных местах структуры.
Пока я заменяю все объекты не коллекции на обертку. И возвращаю измененную структуру и плоскую мапу с ошибками.