class PushOutput<K, V> extends NestedMultiOutput<K, V> implements PushMessage {

    private String type;

    public PushOutput(RedisCodec<K, V> codec) {
        super(codec);
    }

    @Override
    public void set(ByteBuffer bytes) {

        if (type == null) {
            bytes.mark();
            type = StringCodec.ASCII.decodeKey(bytes);
            bytes.reset();
        }

        super.set(bytes);
    }

    @Override
    public void setSingle(ByteBuffer bytes) {
        if (type == null) {
            set(bytes);
        }
        super.setSingle(bytes);
    }

    public String type() {
        return type;
    }

    @Override
    public String getType() {
        return type();
    }

    @Override
    public List<Object> getContent() {<FILL_FUNCTION_BODY>}

    @Override
    public List<Object> getContent(Function<ByteBuffer, Object> decodeFunction) {

        LettuceAssert.notNull(decodeFunction, "Decode function must not be null");

        List<Object> copy = new ArrayList<>();

        for (Object o : get()) {
            copy.add(decode(o, decodeFunction));
        }

        return Collections.unmodifiableList(copy);
    }

    private Object decode(Object toDecode, Function<ByteBuffer, Object> decodeFunction) {

        if (toDecode instanceof List) {

            List<Object> copy = new ArrayList<>(((List<?>) toDecode).size());

            for (Object o : (List<?>) toDecode) {
                copy.add(decode(o, decodeFunction));
            }

            return copy;
        }

        if (toDecode instanceof Set) {

            Set<Object> copy = new LinkedHashSet<>(((Set<?>) toDecode).size());

            for (Object o : (Set<?>) toDecode) {
                copy.add(decode(o, decodeFunction));
            }

            return copy;

        }

        if (toDecode instanceof Map) {

            Map<Object, Object> copy = new LinkedHashMap<>(((Map<?, ?>) toDecode).size());

            ((Map<?, ?>) toDecode).forEach((k, v) -> {
                copy.put(decode(k, decodeFunction), decode(v, decodeFunction));
            });

            return copy;
        }

        if (toDecode instanceof ByteBuffer) {

            ByteBuffer buffer = (ByteBuffer) toDecode;
            try {
                buffer.mark();
                return decodeFunction.apply(buffer);
            } finally {
                buffer.reset();
            }
        }

        return toDecode;
    }

}


        List<Object> copy = new ArrayList<>();

        for (Object o : get()) {
            if (o instanceof ByteBuffer) {
                copy.add(((ByteBuffer) o).asReadOnlyBuffer());
            } else {
                copy.add(o);
            }
        }

        return Collections.unmodifiableList(copy);
    
<methods>public void <init>(RedisCodec<K,V>) ,public void complete(int) ,public void multi(int) ,public void set(long) ,public void set(double) ,public void set(java.nio.ByteBuffer) ,public void setSingle(java.nio.ByteBuffer) <variables>private int depth,private boolean initialized,private final non-sealed Deque<List<java.lang.Object>> stack