java-commons/muscript-gson/src/main/java/io/gitlab/jfronny/muscript/gson/impl/typed/DObjectSerializer.java
2023-08-25 16:24:28 +02:00

42 lines
1.3 KiB
Java

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<DObject> {
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<String, ? extends Dynamic> entry : dynamic.getValue().entrySet()) {
w.name(entry.getKey());
base.write(w, entry.getValue());
}
w.endObject();
}
@Override
public DObject read(JsonReader r) throws IOException {
Map<String, Dynamic> elements = new LinkedHashMap<>();
r.beginObject();
while (r.peek() != JsonToken.END_OBJECT) {
elements.put(r.nextName(), base.read(r));
}
r.endObject();
return DFinal.of(elements);
}
}