package org.mafagafogigante.dungeon.schema.rules;
import org.mafagafogigante.dungeon.schema.JsonRule;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
class ObjectJsonRule implements JsonRule {
private final Map<String, JsonRule> rules;
ObjectJsonRule(Map<String, JsonRule> rules) {
this.rules = rules;
}
@Override
public void validate(JsonValue value) {
if (!value.isObject()) {
throw new IllegalArgumentException(value + " is not an object.");
}
JsonObject object = value.asObject();
Set<String> names = new HashSet<>(object.names());
for (Entry<String, JsonRule> entry : rules.entrySet()) {
entry.getValue().validate(object.get(entry.getKey()));
names.remove(entry.getKey());
}
if (!names.isEmpty()) {
throw new IllegalArgumentException(String.format("%s does not have a rule.", names.iterator().next()));
}
}
}