public static Response decodeCallResponse()

in tchannel-core/src/main/java/com/uber/tchannel/codecs/MessageCodec.java [152:192]


    public static Response decodeCallResponse(List<CallFrame> frames) {

        if (frames.isEmpty()) {
            return null;
        }

        CallResponseFrame first = (CallResponseFrame) frames.get(0);
        ArgScheme scheme = ArgScheme.toScheme(
            first.getHeaders().get(TransportHeaders.ARG_SCHEME_KEY));
        if (!ArgScheme.isSupported(scheme)) {
            return null;
        }

        List<ByteBuf> args = new ArrayList<>();
        for (CallFrame frame : frames) {
            CodecUtils.readArgs(args, frame.getPayload());
            frame.release();
        }

        if (args.size() != 3) {
            for (ByteBuf arg : args) {
                arg.release();
            }

            throw new UnsupportedOperationException("The arg count is not should be 3 instead of " + args.size());
        }

        args.get(0).release();
        Response response = Response.build(
            scheme,
            first.getId(),
            first.getResponseCode(),
            first.getHeaders(),
            args.get(1),
            args.get(2)
        );
        if (response != null) {
            response.touch("finished MessageCodec.decodeCallResponse(...)");
        }
        return response;
    }