[muscript] OEnum for representing enums
This commit is contained in:
parent
47c30f499b
commit
340e93d6d4
@ -0,0 +1,52 @@
|
|||||||
|
package io.gitlab.jfronny.muscript.optic;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/** An enum represented as an OObject with automatic conversions to a number (index) and string (selected value) */
|
||||||
|
public record OEnum(Map<String, OAny<?>> values, OEnumEntry value) implements OObject {
|
||||||
|
public OEnum(List<String> values, String value) {
|
||||||
|
this(createMap(values, value), new OEnumEntry(value, values.indexOf(value), true));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, OAny<?>> getValue() {
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OString asString() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ONumber asNumber() {
|
||||||
|
return value.asNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Map<String, OAny<?>> createMap(List<String> values, String value) {
|
||||||
|
Map<String, OAny<?>> result = new LinkedHashMap<>();
|
||||||
|
OEnumEntry v = new OEnumEntry(value, values.indexOf(value), true);
|
||||||
|
result.put("value", v);
|
||||||
|
for (int i = 0; i < values.size(); i++) {
|
||||||
|
result.put(values.get(i), new OEnumEntry(values.get(i), i, values.get(i).equals(value)));
|
||||||
|
}
|
||||||
|
return Map.copyOf(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public record OEnumEntry(String value, int index, boolean selected) implements OString {
|
||||||
|
@Override
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ONumber asNumber() {
|
||||||
|
return OFinal.of(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OBool asBool() {
|
||||||
|
return OFinal.of(selected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user