42 lines
1.3 KiB
Java
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);
|
|
}
|
|
}
|