package com.codepoetics.octarine.json.serialisation; import com.fasterxml.jackson.core.JsonGenerator; import java.io.IOException; import java.util.Map; public final class MapSerialiser<T> implements SafeSerialiser<Map<String, ? extends T>> { public static <T> MapSerialiser<T> writingValuesWith(Serialiser<? super T> valueSerialiser) { return new MapSerialiser<>(valueSerialiser); } private final Serialiser<? super T> valueSerialiser; private MapSerialiser(Serialiser<? super T> valueSerialiser) { this.valueSerialiser = valueSerialiser; } @Override public void unsafeAccept(JsonGenerator j, Map<String, ? extends T> ts) throws IOException { j.writeStartObject(); SafeSerialiser<Map.Entry<String, ? extends T>> entrySafeSerialiser = (j2, e) -> { j2.writeFieldName(e.getKey()); valueSerialiser.accept(j2, e.getValue()); }; ts.entrySet().forEach(e -> { entrySafeSerialiser.accept(j, e); }); j.writeEndObject(); } }