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

package io.netty.handler.codec.quic;

import java.util.List;
import java.util.ArrayList;
import java.util.Objects;

public final class QuicTransportError
{
    public static final QuicTransportError NO_ERROR;
    public static final QuicTransportError INTERNAL_ERROR;
    public static final QuicTransportError CONNECTION_REFUSED;
    public static final QuicTransportError FLOW_CONTROL_ERROR;
    public static final QuicTransportError STREAM_LIMIT_ERROR;
    public static final QuicTransportError STREAM_STATE_ERROR;
    public static final QuicTransportError FINAL_SIZE_ERROR;
    public static final QuicTransportError FRAME_ENCODING_ERROR;
    public static final QuicTransportError TRANSPORT_PARAMETER_ERROR;
    public static final QuicTransportError CONNECTION_ID_LIMIT_ERROR;
    public static final QuicTransportError PROTOCOL_VIOLATION;
    public static final QuicTransportError INVALID_TOKEN;
    public static final QuicTransportError APPLICATION_ERROR;
    public static final QuicTransportError CRYPTO_BUFFER_EXCEEDED;
    public static final QuicTransportError KEY_UPDATE_ERROR;
    public static final QuicTransportError AEAD_LIMIT_REACHED;
    public static final QuicTransportError NO_VIABLE_PATH;
    private static final QuicTransportError[] INT_TO_ENUM_MAP;
    private final long code;
    private final String name;
    
    private QuicTransportError(final long code, final String name) {
        this.code = code;
        this.name = name;
    }
    
    public boolean isCryptoError() {
        return this.code >= 256L && this.code <= 511L;
    }
    
    public String name() {
        return this.name;
    }
    
    public long code() {
        return this.code;
    }
    
    public static QuicTransportError valueOf(long value) {
        if (value > 17L) {
            value -= 256L;
        }
        if (value < 0L || value >= QuicTransportError.INT_TO_ENUM_MAP.length) {
            throw new IllegalArgumentException("Unknown error code value: " + value);
        }
        return QuicTransportError.INT_TO_ENUM_MAP[(int)value];
    }
    
    @Override
    public boolean equals(final Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || this.getClass() != o.getClass()) {
            return false;
        }
        final QuicTransportError quicError = (QuicTransportError)o;
        return this.code == quicError.code;
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(this.code);
    }
    
    @Override
    public String toString() {
        return "QuicTransportError{code=" + this.code + ", name='" + this.name + '\'' + '}';
    }
    
    static {
        NO_ERROR = new QuicTransportError(0L, "NO_ERROR");
        INTERNAL_ERROR = new QuicTransportError(1L, "INTERNAL_ERROR");
        CONNECTION_REFUSED = new QuicTransportError(2L, "CONNECTION_REFUSED");
        FLOW_CONTROL_ERROR = new QuicTransportError(3L, "FLOW_CONTROL_ERROR");
        STREAM_LIMIT_ERROR = new QuicTransportError(4L, "STREAM_LIMIT_ERROR");
        STREAM_STATE_ERROR = new QuicTransportError(5L, "STREAM_STATE_ERROR");
        FINAL_SIZE_ERROR = new QuicTransportError(6L, "FINAL_SIZE_ERROR");
        FRAME_ENCODING_ERROR = new QuicTransportError(7L, "FRAME_ENCODING_ERROR");
        TRANSPORT_PARAMETER_ERROR = new QuicTransportError(8L, "TRANSPORT_PARAMETER_ERROR");
        CONNECTION_ID_LIMIT_ERROR = new QuicTransportError(9L, "CONNECTION_ID_LIMIT_ERROR");
        PROTOCOL_VIOLATION = new QuicTransportError(10L, "PROTOCOL_VIOLATION");
        INVALID_TOKEN = new QuicTransportError(11L, "INVALID_TOKEN");
        APPLICATION_ERROR = new QuicTransportError(12L, "APPLICATION_ERROR");
        CRYPTO_BUFFER_EXCEEDED = new QuicTransportError(13L, "CRYPTO_BUFFER_EXCEEDED");
        KEY_UPDATE_ERROR = new QuicTransportError(14L, "KEY_UPDATE_ERROR");
        AEAD_LIMIT_REACHED = new QuicTransportError(15L, "AEAD_LIMIT_REACHED");
        NO_VIABLE_PATH = new QuicTransportError(16L, "NO_VIABLE_PATH");
        final List<QuicTransportError> errorList = new ArrayList<QuicTransportError>();
        errorList.add(QuicTransportError.NO_ERROR);
        errorList.add(QuicTransportError.INTERNAL_ERROR);
        errorList.add(QuicTransportError.CONNECTION_REFUSED);
        errorList.add(QuicTransportError.FLOW_CONTROL_ERROR);
        errorList.add(QuicTransportError.STREAM_LIMIT_ERROR);
        errorList.add(QuicTransportError.STREAM_STATE_ERROR);
        errorList.add(QuicTransportError.FINAL_SIZE_ERROR);
        errorList.add(QuicTransportError.FRAME_ENCODING_ERROR);
        errorList.add(QuicTransportError.TRANSPORT_PARAMETER_ERROR);
        errorList.add(QuicTransportError.CONNECTION_ID_LIMIT_ERROR);
        errorList.add(QuicTransportError.PROTOCOL_VIOLATION);
        errorList.add(QuicTransportError.INVALID_TOKEN);
        errorList.add(QuicTransportError.APPLICATION_ERROR);
        errorList.add(QuicTransportError.CRYPTO_BUFFER_EXCEEDED);
        errorList.add(QuicTransportError.KEY_UPDATE_ERROR);
        errorList.add(QuicTransportError.AEAD_LIMIT_REACHED);
        errorList.add(QuicTransportError.NO_VIABLE_PATH);
        for (int i = 256; i <= 511; ++i) {
            errorList.add(new QuicTransportError(i, "CRYPTO_ERROR"));
        }
        INT_TO_ENUM_MAP = errorList.toArray(new QuicTransportError[0]);
    }
}
