package org.openflow.types;

import org.jboss.netty.buffer.ChannelBuffer;
import org.openflow.exceptions.OFParseError;

public enum IpEcn implements OFValueType {
    ECN_00((byte)0),
    ECN_01((byte)1),
    ECN_10((byte)2),
    ECN_11((byte)3);
    
    static final int LENGTH = 1;
    
    private final byte ecn;
    
    private IpEcn(byte ecn) {
        this.ecn = ecn;
    }
    
    public static IpEcn of(byte ecn) {
        switch (ecn) {
            case 0:
                return ECN_00;
            case 1:
                return ECN_01;
            case 2:
                return ECN_10;
            case 3:
                return ECN_11;
            default:
                throw new IllegalArgumentException("Illegal IP ECN value: " + ecn);
        }
    }

    @Override
    public int getLength() {
        return LENGTH;
    }

    @Override
    public String toString() {
        return (ecn < 3 ? "0" : "") + Integer.toBinaryString(ecn);
    }

    public void writeByte(ChannelBuffer c) {
        c.writeByte(this.ecn);
    }

    public static IpEcn readByte(ChannelBuffer c) throws OFParseError {
        return IpEcn.of((byte)(c.readUnsignedByte()));
    }

}
