Challenges/src/main/java/world/bentobox/challenges/database/object/adapters/TypeMigrationAdapter.java

51 lines
1.3 KiB
Java

//
// Created by BONNe
// Copyright - 2019
//
package world.bentobox.challenges.database.object.adapters;
import com.google.gson.*;
import java.lang.reflect.Type;
import world.bentobox.challenges.database.object.Challenge;
/**
* This is a generic JSON serializer and deserializer for abstract classes.
* It store target class in class object, and instance variables in variables object.
*/
public class TypeMigrationAdapter implements JsonSerializer<Challenge.ChallengeType>, JsonDeserializer<Challenge.ChallengeType>
{
/**
* Use default enum name serialization.
*/
@Override
public JsonElement serialize(Challenge.ChallengeType src, Type typeOfSrc, JsonSerializationContext context)
{
return new JsonPrimitive(src.name());
}
/**
* Deserialize enum with old type format.
*/
@Override
public Challenge.ChallengeType deserialize(JsonElement json,
Type typeOfT,
JsonDeserializationContext context)
throws JsonParseException
{
JsonPrimitive primitive = json.getAsJsonPrimitive();
return switch (primitive.getAsString())
{
case "INVENTORY", "INVENTORY_TYPE" -> Challenge.ChallengeType.INVENTORY_TYPE;
case "OTHER", "OTHER_TYPE" -> Challenge.ChallengeType.OTHER_TYPE;
case "STATISTIC", "STATISTIC_TYPE" -> Challenge.ChallengeType.STATISTIC_TYPE;
default -> Challenge.ChallengeType.ISLAND_TYPE;
};
}
}