CustomEnumValueSerializerPartyFeature.java 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. package com.gmail.nossr50.config.hocon;
  2. import com.google.common.reflect.TypeToken;
  3. import ninja.leaping.configurate.ConfigurationNode;
  4. import ninja.leaping.configurate.objectmapping.ObjectMappingException;
  5. import ninja.leaping.configurate.objectmapping.serialize.TypeSerializer;
  6. import ninja.leaping.configurate.util.EnumLookup;
  7. import org.checkerframework.checker.nullness.qual.NonNull;
  8. import org.checkerframework.checker.nullness.qual.Nullable;
  9. import java.util.Optional;
  10. public class CustomEnumValueSerializerPartyFeature implements TypeSerializer<Enum> {
  11. @Override
  12. @SuppressWarnings("unchecked") // i continue to hate generics
  13. public Enum deserialize(TypeToken<?> type, ConfigurationNode value) throws ObjectMappingException {
  14. String enumConstant = HOCONUtil.deserializeENUMName(value.getString());
  15. if (enumConstant == null) {
  16. throw new ObjectMappingException("No value present in node " + value);
  17. }
  18. //noinspection RedundantCast
  19. Optional<Enum> ret = (Optional) EnumLookup.lookupEnum(type.getRawType().asSubclass(Enum.class),
  20. enumConstant); // XXX: intellij says this cast is optional but it isnt
  21. if (!ret.isPresent()) {
  22. throw new ObjectMappingException("Invalid enum constant provided for " + value.getKey() + ": " +
  23. "Expected a value of enum " + type + ", got " + enumConstant);
  24. }
  25. return ret.get();
  26. }
  27. @Override
  28. public void serialize(@NonNull TypeToken<?> type, @Nullable Enum obj, @NonNull ConfigurationNode value) {
  29. value.setValue(HOCONUtil.serializeENUMName(obj.name()));
  30. }
  31. }