package io.gitlab.jfronny.muscript.gson.impl.typed; import io.gitlab.jfronny.gson.TypeAdapter; import io.gitlab.jfronny.gson.stream.*; import io.gitlab.jfronny.muscript.data.dynamic.DObject; import io.gitlab.jfronny.muscript.data.dynamic.Dynamic; import io.gitlab.jfronny.muscript.data.dynamic.additional.DFinal; import io.gitlab.jfronny.muscript.gson.impl.DynamicSerializer; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map; public class DObjectSerializer extends TypeAdapter { private final DynamicSerializer base; public DObjectSerializer(DynamicSerializer base) { this.base = base; } @Override public void write(JsonWriter w, DObject dynamic) throws IOException { w.beginObject(); for (Map.Entry entry : dynamic.getValue().entrySet()) { w.name(entry.getKey()); base.write(w, entry.getValue()); } w.endObject(); } @Override public DObject read(JsonReader r) throws IOException { Map elements = new LinkedHashMap<>(); r.beginObject(); while (r.peek() != JsonToken.END_OBJECT) { elements.put(r.nextName(), base.read(r)); } r.endObject(); return DFinal.of(elements); } }