public synchronized Future parse()

in server/src/main/java/com/epam/aidial/core/server/util/EventStreamParser.java [56:90]


    public synchronized Future<Boolean> parse(Buffer chunk) {
        if (lastChunk) {
            return Future.succeededFuture(true);
        }
        chunkIndex = 0;
        futures = null;
        if (firstChunk) {
            chunkIndex += skipBom(chunk);
            firstChunk = false;
            stage = Stages.EVENT;
        }

        try {
            while (chunkIndex < chunk.length()) {
                switch (stage) {
                    case EVENT -> handleEventStage(chunk);
                    case DATA -> handleDataStage(chunk);
                    case EOL -> handleEndOfLineStage(chunk);
                    default -> throw new IllegalStateException("unknown stage + " + stage);
                }
                if (lastChunk) {
                    break;
                }
            }
        } catch (Throwable e) {
            log.error("Error occurred at parsing chunk", e);
            return Future.failedFuture(e);
        }

        if (futures == null) {
            return Future.succeededFuture(lastChunk);
        }
        boolean localLastChunk = lastChunk;
        return Future.join(futures).transform(ignore -> Future.succeededFuture(localLastChunk));
    }