DEnum: add support for omitting selected value and coercion to list
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
This commit is contained in:
parent
3d0d3a1595
commit
55fd58bcdf
@ -1,13 +1,25 @@
|
|||||||
package io.gitlab.jfronny.muscript.data.dynamic;
|
package io.gitlab.jfronny.muscript.data.dynamic;
|
||||||
|
|
||||||
|
import io.gitlab.jfronny.commons.StringFormatter;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An enum represented as an OObject with automatic conversions to a number (index) and string (selected value)
|
* An enum represented as an OObject.
|
||||||
|
* May also have a selected value with automatic conversions to a number (index) and string
|
||||||
*/
|
*/
|
||||||
public record DEnum(Map<String, Dynamic<?>> values, DEnumEntry value) implements DObject {
|
public record DEnum(Map<String, Dynamic<?>> values, @Nullable DEnumEntry value) implements DObject {
|
||||||
|
public DEnum(Map<String, Dynamic<?>> values) {
|
||||||
|
this(values, null);
|
||||||
|
}
|
||||||
|
|
||||||
public DEnum(List<String> values, String value) {
|
public DEnum(List<String> values, String value) {
|
||||||
this(createMap(values, value), new DEnumEntry(value, values.indexOf(value), true));
|
this(createMap(values, value), value == null ? null : new DEnumEntry(value, values.indexOf(value), true));
|
||||||
|
}
|
||||||
|
|
||||||
|
public DEnum(List<String> values) {
|
||||||
|
this(values, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -15,14 +27,19 @@ public record DEnum(Map<String, Dynamic<?>> values, DEnumEntry value) implements
|
|||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DList asList() {
|
||||||
|
return DFinal.of(List.copyOf(values.values()));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DString asString() {
|
public DString asString() {
|
||||||
return value;
|
return value != null ? value : DFinal.of(StringFormatter.toString(values));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DNumber asNumber() {
|
public DNumber asNumber() {
|
||||||
return value.asNumber();
|
return value != null ? value.asNumber() : DObject.super.asNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<String, Dynamic<?>> createMap(List<String> values, String value) {
|
private static Map<String, Dynamic<?>> createMap(List<String> values, String value) {
|
||||||
|
Loading…
Reference in New Issue
Block a user