Есть глобальный менеджер который агрегирует кандидатов и проводит рекурсивную обработку.
Обработка идет следующим образом: снизу вверх идет обход всех схем/json, они в порядке приоритета предоставляются на обратку компараторам, которые проводят необходимые операции и отдают слой (они все не видят схему глобально, работают лишь со своим слоем).
Правила глобальные задают: Приоритет и список компараторов
Дальше компараторы по приоритету получают сначало вопрос: "ты будешь что-то обрабатывать?". Если ответ положительный - они могут вернуть список компараторов, которым в дальнейшем НЕЛЬЗЯ обрабатывать этот слой. Дальше если был положительный ответ - вызывается функция обработки слоя. Функции всегда передуют:
- list кандидатов-схем
- list кандидатов-json
- результат обработки прошлых слоев (если нет то {})
- env-путь (например property/anyOf/pattern/property) Оба списка уже распарсены до нужного уровня вложенности
Функция возвращает: Результат ее обработки (словарь)