package org.infinispan.server.hotrod;
import java.util.concurrent.TimeUnit;
import org.infinispan.util.KeyValuePair;
/**
* @author wburns
* @since 9.0
*/
public enum TimeUnitValue {
SECONDS(0x00),
MILLISECONDS(0x01),
NANOSECONDS(0x02),
MICROSECONDS(0x03),
MINUTES(0x04),
HOURS(0x05),
DAYS(0x06),
DEFAULT(0x07),
INFINITE(0x08);
private final byte code;
TimeUnitValue(int code) {
this.code = (byte) code;
}
public byte getCode() {
return code;
}
public TimeUnit toTimeUnit() {
switch (code) {
case 0x00:
return TimeUnit.SECONDS;
case 0x01:
return TimeUnit.MILLISECONDS;
case 0x02:
return TimeUnit.NANOSECONDS;
case 0x03:
return TimeUnit.MICROSECONDS;
case 0x04:
return TimeUnit.MINUTES;
case 0x05:
return TimeUnit.HOURS;
case 0x06:
return TimeUnit.DAYS;
default:
throw new IllegalArgumentException("TimeUnit not supported for: " + code);
}
}
public static TimeUnitValue decode(byte rightBits) {
switch (rightBits) {
case 0x00:
return SECONDS;
case 0x01:
return MILLISECONDS;
case 0x02:
return NANOSECONDS;
case 0x03:
return MICROSECONDS;
case 0x04:
return MINUTES;
case 0x05:
return HOURS;
case 0x06:
return DAYS;
case 0x07:
return DEFAULT;
case 0x08:
return INFINITE;
default:
throw new IllegalArgumentException("Unsupported byte value: " + rightBits);
}
}
public static KeyValuePair<TimeUnitValue, TimeUnitValue> decodePair(byte timeUnitValues) {
return new KeyValuePair<>(decode((byte) ((timeUnitValues & 0xf0) >> 4)), decode((byte) (timeUnitValues & 0x0f)));
}
}