2023-01-20 18:52:57 +01:00
|
|
|
package io.gitlab.jfronny.muscript.data.dynamic;
|
2022-06-03 19:54:31 +02:00
|
|
|
|
2023-03-12 15:28:44 +01:00
|
|
|
import io.gitlab.jfronny.muscript.compiler.ExprWriter;
|
|
|
|
import io.gitlab.jfronny.muscript.compiler.Lexer;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
2022-06-29 15:41:44 +02:00
|
|
|
import java.util.Map;
|
2022-06-03 19:54:31 +02:00
|
|
|
|
2023-03-12 15:28:44 +01:00
|
|
|
public non-sealed interface DObject extends Dynamic<Map<String, Dynamic<?>>> {
|
2022-06-07 12:19:58 +02:00
|
|
|
default Dynamic<?> get(String key) {
|
2022-06-03 19:54:31 +02:00
|
|
|
return getValue().get(key);
|
|
|
|
}
|
|
|
|
|
|
|
|
default boolean has(String key) {
|
|
|
|
return getValue().containsKey(key);
|
|
|
|
}
|
2023-03-12 15:28:44 +01:00
|
|
|
|
|
|
|
@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('}');
|
|
|
|
}
|
2022-06-03 19:54:31 +02:00
|
|
|
}
|