protected void decode()

in frontend/server/src/main/java/com/amazonaws/ml/mms/util/codec/ModelResponseDecoder.java [32:99]


    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
        int size = in.readableBytes();
        if (size < 9) {
            return;
        }

        in.markReaderIndex();
        boolean completed = false;
        try {
            ModelWorkerResponse resp = new ModelWorkerResponse();
            // Get Response overall Code
            resp.setCode(in.readInt());

            int len = CodecUtils.readLength(in, maxBufferSize);
            if (len == CodecUtils.BUFFER_UNDER_RUN) {
                return;
            }
            resp.setMessage(CodecUtils.readString(in, len));

            List<Predictions> predictions = new ArrayList<>();
            while ((len = CodecUtils.readLength(in, maxBufferSize)) != CodecUtils.END) {
                if (len == CodecUtils.BUFFER_UNDER_RUN) {
                    return;
                }
                Predictions prediction = new Predictions();
                // Set response RequestId
                prediction.setRequestId(CodecUtils.readString(in, len));

                len = CodecUtils.readLength(in, maxBufferSize);
                if (len == CodecUtils.BUFFER_UNDER_RUN) {
                    return;
                }
                // Set content type
                prediction.setContentType(CodecUtils.readString(in, len));

                // Set per request response code
                int httpStatusCode = in.readInt();
                prediction.setStatusCode(httpStatusCode);

                // Set the actual message
                len = CodecUtils.readLength(in, maxBufferSize);
                if (len == CodecUtils.BUFFER_UNDER_RUN) {
                    return;
                }
                prediction.setReasonPhrase(CodecUtils.readString(in, len));

                len = CodecUtils.readLength(in, maxBufferSize);
                if (len == CodecUtils.BUFFER_UNDER_RUN) {
                    return;
                }
                prediction.setHeaders(CodecUtils.readMap(in, len));

                len = CodecUtils.readLength(in, maxBufferSize);
                if (len == CodecUtils.BUFFER_UNDER_RUN) {
                    return;
                }
                prediction.setResp(CodecUtils.read(in, len));
                predictions.add(prediction);
            }
            resp.setPredictions(predictions);
            out.add(resp);
            completed = true;
        } finally {
            if (!completed) {
                in.resetReaderIndex();
            }
        }
    }