package net.hamnaberg.json.data;
import net.hamnaberg.json.Data;
import net.hamnaberg.json.Json;
import net.hamnaberg.json.Property;
import net.hamnaberg.json.Value;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
public final class JsonObjectFromData implements FromData<Json.JObject> {
@Override
public Json.JObject apply(Data data) {
Map<String, Json.JValue> map = new LinkedHashMap<>();
for (Property property : data) {
Json.JValue value = property.fold(
Value::asJson,
v -> Json.jArray(
v.stream().map(Value::asJson).collect(Collectors.toList())
),
v -> Json.jObject(property.getObject()
.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().asJson()))),
Json::jNull
);
map.put(property.getName(), value);
}
return Json.jObject(map);
}
}