Skip to content

Commit

Permalink
slightly better json deserialization errors
Browse files Browse the repository at this point in the history
  • Loading branch information
quat1024 committed May 21, 2023
1 parent 27cd9c4 commit defd723
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions core/src/main/java/agency/highlysuspect/apathy/core/Apathy.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import agency.highlysuspect.apathy.core.wrapper.LogFacade;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import org.jetbrains.annotations.Nullable;

import java.nio.file.Path;
Expand Down Expand Up @@ -198,9 +199,13 @@ public void addBossConfig(ConfigSchema schema) {
}
JsonObject json = (JsonObject) jsonElem;

String type = json.getAsJsonPrimitive("type").getAsString();
JsonSerializer<? extends Spec<Rule, ?>> jsonSerializer = ruleSerializers.get(type);
JsonPrimitive typeField = json.getAsJsonPrimitive("type");
if(typeField == null) {
throw new IllegalArgumentException("Expected json object to have field 'type', but didn't find any");
}
String type = typeField.getAsString();

JsonSerializer<? extends Spec<Rule, ?>> jsonSerializer = ruleSerializers.get(type);
if(jsonSerializer == null) {
StringBuilder message = new StringBuilder("No rule serializer with name '").append(type).append("'.");

Expand Down Expand Up @@ -228,7 +233,7 @@ public <T extends Spec<Rule, T>> JsonObject writeRule(Spec<Rule, T> rule) {
JsonSerializer<T> serializer = rule.getSerializer();

String name = ruleSerializers.getName(serializer);
if(name == null) throw new IllegalArgumentException("internal error, unregistered rule serializer: " + serializer.getClass().getName());
if(name == null) throw new IllegalArgumentException("internal error, unregistered rule serializer for " + serializer.getClass().getName());

ok.addProperty("type", name);
serializer.writeErased(rule, ok);
Expand All @@ -241,9 +246,13 @@ public <T extends Spec<Rule, T>> JsonObject writeRule(Spec<Rule, T> rule) {
}
JsonObject json = (JsonObject) jsonElem;

String type = json.getAsJsonPrimitive("type").getAsString();
JsonSerializer<? extends Spec<Partial, ?>> jsonSerializer = partialSerializers.get(type);
JsonPrimitive typeField = json.getAsJsonPrimitive("type");
if(typeField == null) {
throw new IllegalArgumentException("Expected json object to have field 'type', but didn't find any");
}
String type = typeField.getAsString();

JsonSerializer<? extends Spec<Partial, ?>> jsonSerializer = partialSerializers.get(type);
if(jsonSerializer == null) {
StringBuilder message = new StringBuilder("No predicate serializer with name '").append(type).append("'.");

Expand Down Expand Up @@ -271,7 +280,7 @@ public <T extends Spec<Partial, T>> JsonObject writePartial(Spec<Partial, T> par
JsonSerializer<T> serializer = part.getSerializer();

String name = partialSerializers.getName(serializer);
if(name == null) throw new IllegalArgumentException("internal error, unregistered partial serializer: " + serializer.getClass().getName());
if(name == null) throw new IllegalArgumentException("internal error, unregistered partial serializer for " + serializer.getClass().getName());

ok.addProperty("type", name);
serializer.writeErased(part, ok);
Expand Down

0 comments on commit defd723

Please sign in to comment.