java-commons/muscript/src/main/java/io/gitlab/jfronny/muscript/data/dynamic/DObject.java

32 lines
1014 B
Java

package io.gitlab.jfronny.muscript.data.dynamic;
import io.gitlab.jfronny.muscript.compiler.ExprWriter;
import io.gitlab.jfronny.muscript.compiler.Lexer;
import java.io.IOException;
import java.util.Map;
public non-sealed interface DObject extends Dynamic<Map<String, Dynamic<?>>> {
default Dynamic<?> get(String key) {
return getValue().get(key);
}
default boolean has(String key) {
return getValue().containsKey(key);
}
@Override
default void serialize(ExprWriter writer) throws IOException {
writer.append('{');
boolean first = true;
for (Map.Entry<String, Dynamic<?>> entry : getValue().entrySet()) {
if (!Lexer.isValidId(entry.getKey())) throw new IllegalStateException("Illegal key: " + entry.getKey());
if (!first) writer.append(", ");
first = false;
writer.append(entry.getKey()).append(" = ");
entry.getValue().serialize(writer);
}
writer.append('}');
}
}