package ru.nbch.credit_tracker.service.xml.stax;

import java.io.InputStream;
import java.util.function.Consumer;
import java.util.function.Function;

public interface StaxXmlProcessor {
    <Z> Z read(String xml, Class<Z> clazz);

    <Z> Z read(byte[] xml, Class<Z> clazz);

    <Z> Z read(InputStream inputStream, Class<Z> clazz);

    /**
     * @param objProcessor:            Консьюмер, который срабатывает, когда считается batchSize элементов endBatchElementPath
     * @param emptyBatchCheckFunction: Функция проверки на пустоту списка элементов. Пустые списки не будут обработаны консьюмером
     * @param batchSize:               количество считываемых элементов в пачке
     * @param endBatchElementPath:     localPath считываемых в пачку элементов. Например: "/Report/Subjects/Subject"
     * <Report>
     *  <Subjects>
     *    <Subject></Subject>
     *    <Subject></Subject>
     *  </Subjects>
     * </Report>
     */
    <Z> Z read(InputStream inputStream, Class<Z> clazz, Consumer<Z> objProcessor, Function<Z, Boolean> emptyBatchCheckFunction, Integer batchSize, String endBatchElementPath);
}