From 55fd58bcdf430f45cea5dad125b6935f4fdb5d67 Mon Sep 17 00:00:00 2001 From: JFronny Date: Sat, 11 Mar 2023 12:27:49 +0100 Subject: [PATCH] DEnum: add support for omitting selected value and coercion to list --- .../jfronny/muscript/data/dynamic/DEnum.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/DEnum.java b/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/DEnum.java index 96288db..2b6e158 100644 --- a/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/DEnum.java +++ b/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/DEnum.java @@ -1,13 +1,25 @@ package io.gitlab.jfronny.muscript.data.dynamic; +import io.gitlab.jfronny.commons.StringFormatter; +import org.jetbrains.annotations.Nullable; + 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> values, DEnumEntry value) implements DObject { +public record DEnum(Map> values, @Nullable DEnumEntry value) implements DObject { + public DEnum(Map> values) { + this(values, null); + } + public DEnum(List 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 values) { + this(values, null); } @Override @@ -15,14 +27,19 @@ public record DEnum(Map> values, DEnumEntry value) implements return values; } + @Override + public DList asList() { + return DFinal.of(List.copyOf(values.values())); + } + @Override public DString asString() { - return value; + return value != null ? value : DFinal.of(StringFormatter.toString(values)); } @Override public DNumber asNumber() { - return value.asNumber(); + return value != null ? value.asNumber() : DObject.super.asNumber(); } private static Map> createMap(List values, String value) {