Actually allow numeric indices for sides like api doc claims. Fixes #165.

This commit is contained in:
Florian Nücke
2022-07-24 23:30:24 +02:00
parent 0f40e53775
commit 569288c6c8
2 changed files with 26 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ import li.cil.ceres.api.Serialized;
import li.cil.oc2.api.bus.DeviceBusController;
import li.cil.oc2.api.bus.device.Device;
import li.cil.oc2.api.bus.device.rpc.*;
import li.cil.oc2.api.util.Side;
import li.cil.oc2.common.Constants;
import li.cil.oc2.common.bus.device.rpc.RPCDeviceList;
import li.cil.oc2.common.bus.device.rpc.RPCMethodParameterTypeAdapters;
@@ -67,6 +68,7 @@ public final class RPCDeviceBusAdapter implements Steppable {
.registerTypeAdapter(RPCDeviceWithIdentifier.class, new RPCDeviceWithIdentifierJsonSerializer())
.registerTypeHierarchyAdapter(RPCMethod.class, new RPCMethodJsonSerializer())
.registerTypeAdapter(EmptyMethodGroup.class, new EmptyRPCMethodGroupSerializer())
.registerTypeAdapter(Side.class, new SideJsonDeserializer())
.create();
}

View File

@@ -0,0 +1,24 @@
/* SPDX-License-Identifier: MIT */
package li.cil.oc2.common.serialization.gson;
import com.google.gson.*;
import com.google.gson.internal.bind.TypeAdapters;
import com.google.gson.reflect.TypeToken;
import li.cil.oc2.api.util.Side;
import java.lang.reflect.Type;
public final class SideJsonDeserializer implements JsonDeserializer<Side> {
@Override
public Side deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {
if (json.isJsonPrimitive()) {
final JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive();
if (jsonPrimitive.isNumber()) {
return Side.values()[jsonPrimitive.getAsNumber().intValue()];
}
}
return (Side) TypeAdapters.ENUM_FACTORY.create(null, TypeToken.get(typeOfT)).fromJsonTree(json);
}
}