Actually allow numeric indices for sides like api doc claims. Fixes #165.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user