// 
// Decompiled by Procyon v0.6.0
// 

package io.netty.handler.codec.http3;

import io.netty.channel.ChannelPromise;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.internal.ObjectUtil;
import io.netty.channel.ChannelOutboundHandlerAdapter;

class Http3FrameTypeOutboundValidationHandler<T extends Http3Frame> extends ChannelOutboundHandlerAdapter
{
    private final Class<T> frameType;
    
    Http3FrameTypeOutboundValidationHandler(final Class<T> frameType) {
        this.frameType = ObjectUtil.checkNotNull(frameType, "frameType");
    }
    
    @Override
    public final void write(final ChannelHandlerContext ctx, final Object msg, final ChannelPromise promise) {
        final T frame = Http3FrameValidationUtils.validateFrameWritten(this.frameType, msg);
        if (frame != null) {
            this.write(ctx, frame, promise);
        }
        else {
            this.writeFrameDiscarded(msg, promise);
        }
    }
    
    void write(final ChannelHandlerContext ctx, final T msg, final ChannelPromise promise) {
        ctx.write(msg, promise);
    }
    
    void writeFrameDiscarded(final Object discardedFrame, final ChannelPromise promise) {
        Http3FrameValidationUtils.frameTypeUnexpected(promise, discardedFrame);
    }
}
