EnumStyle enum

Пакет: com.hypixel.hytale.codec.codecs

Файл: com/hypixel/hytale/codec/codecs/EnumCodec.java

Поля (6)

МодификаторыТипИмя
LEGACY, CAMEL_CASE
StringBuilder var2
String var5
Enum var6
char var7
String var8

Методы (12)

МодификаторыВозвратСигнатура
abstract throw new CodecExceptionthrow new CodecException("Failed to find enum value for " + var3)
public static <T extends Enum<T>> EnumCodec.EnumStyle detectpublic static <T extends Enum<T>> EnumCodec.EnumStyle detect(@Nonnull T[] var0)
for for(int var5 = 0; var5 < var1.length; var5++)
for for(int var7 = 0; var7 < var2.length; var7++)
for for(Enum var4 : var0)
abstract for for(int var6 = 1; var6 < var5.length()
public String formatCamelCasepublic String formatCamelCase(@Nonnull String var1)
if if(var4)
public <T extends Enum<T>> T matchpublic <T extends Enum<T>> T match(@Nonnull T[] var1, @Nonnull String[] var2, String var3)
public <T extends Enum<T>> T matchpublic <T extends Enum<T>> T match(@Nonnull T[] var1, @Nonnull String[] var2, String var3, boolean var4)
switch switch(this)
return switchreturn switch(this)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.codec.codecs;

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.exception.CodecException;
class="kw">import com.hypixel.hytale.codec.schema.SchemaContext;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import com.hypixel.hytale.codec.schema.config.StringSchema;
class="kw">import com.hypixel.hytale.codec.util.RawJsonReader;
class="kw">import java.io.IOException;
class="kw">import java.util.EnumMap;
class="kw">import java.util.Locale;
class="kw">import java.util.Objects;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonValue;

class="kw">public class EnumCodec<T class="kw">extends Enum<T>> class="kw">implements Codec<T> {
   @Nonnull
   class="kw">private class="kw">final Class<T> clazz;
   @Nonnull
   class="kw">private class="kw">final T[] enumConstants;
   @Nonnull
   class="kw">private class="kw">final String[] enumKeys;
   class="kw">private class="kw">final EnumCodec.EnumStyle enumStyle;
   @Nonnull
   class="kw">private class="kw">final EnumMap<T, String> documentation;

   class="kw">public EnumCodec(@Nonnull Class<T> var1) {
      this(var1, EnumCodec.EnumStyle.CAMEL_CASE);
   }

   class="kw">public EnumCodec(@Nonnull Class<T> var1, EnumCodec.EnumStyle var2) {
      this.clazz = var1;
      this.enumConstants = var1.getEnumConstants();
      this.enumStyle = var2;
      this.documentation = new EnumMap<>(var1);
      EnumCodec.EnumStyle var3 = EnumCodec.EnumStyle.detect(this.enumConstants);
      this.enumKeys = new String[this.enumConstants.length];

      for (int var4 = 0; var4 < this.enumConstants.length; var4++) {
         Enum var5 = this.enumConstants[var4];
         this.enumKeys[var4] = var3.formatCamelCase(var5.name());
      }
   }

   @Nonnull
   class="kw">public String[] getEnumKeys() {
      class="kw">return this.enumKeys;
   }

   @Nonnull
   class="kw">public EnumCodec<T> documentKey(T var1, String var2) {
      this.documentation.put(var1, var2);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public T decode(@Nonnull BsonValue var1, ExtraInfo var2) {
      String var3 = STRING.decode(var1, var2);
      Enum var4 = this.getEnum(var3);
      if (var4 == null) {
         throw new IllegalArgumentException("Failed to apply function to '" + var3 + "' decoded from '" + var1 + "'!");
      } else {
         class="kw">return var4;
      }
   }

   @Nonnull
   class="kw">public BsonValue encode(@Nonnull T var1, ExtraInfo var2) {
      class="kw">return class="kw">switch (this.enumStyle) {
         case LEGACY -> STRING.encode(var1.name(), var2);
         case CAMEL_CASE -> STRING.encode(this.enumKeys[var1.ordinal()], var2);
      };
   }

   @Nonnull
   class="kw">public T decodeJson(@Nonnull RawJsonReader var1, ExtraInfo var2) class="kw">throws IOException {
      String var3 = STRING.decodeJson(var1, var2);
      Enum var4 = this.getEnum(var3);
      if (var4 == null) {
         throw new IllegalArgumentException("Failed to apply function to '" + var3 + "'!");
      } else {
         class="kw">return var4;
      }
   }

   @Nonnull
   @Override
   class="kw">public Schema toSchema(@Nonnull SchemaContext var1) {
      class="kw">return this.toSchema(var1, (T)null);
   }

   @Nonnull
   class="kw">public Schema toSchema(@Nonnull SchemaContext var1, @Nullable T var2) {
      StringSchema var3 = new StringSchema();
      var3.setTitle(this.clazz.getSimpleName());
      var3.setEnum(this.enumKeys);
      var3.getHytale().setType("Enum");
      String[] var4 = new String[this.enumKeys.length];

      for (int var5 = 0; var5 < this.enumKeys.length; var5++) {
         String var6 = this.documentation.get(this.enumConstants[var5]);
         var4[var5] = Objects.requireNonNullElse(var6, "");
      }

      var3.setMarkdownEnumDescriptions(var4);
      if (var2 != null) {
         var3.setDefault(this.enumKeys[var2.ordinal()]);
      }

      class="kw">return var3;
   }

   @Nullable
   class="kw">private T getEnum(String var1) {
      class="kw">return this.enumStyle.match(this.enumConstants, this.enumKeys, var1);
   }

   class="kw">public enum EnumStyle {
      @Deprecated
      LEGACY,
      CAMEL_CASE;

      EnumStyle() {
      }

      @Nullable
      class="kw">public <T class="kw">extends Enum<T>> T match(@Nonnull T[] var1, @Nonnull String[] var2, String var3) {
         class="kw">return this.match(var1, var2, var3, false);
      }

      @Nullable
      class="kw">public <T class="kw">extends Enum<T>> T match(@Nonnull T[] var1, @Nonnull String[] var2, String var3, boolean var4) {
         class="kw">switch (this) {
            case LEGACY:
               for (int var5 = 0; var5 < var1.length; var5++) {
                  Enum var6 = var1[var5];
                  if (var6.name().equalsIgnoreCase(var3)) {
                     class="kw">return var6;
                  }
               }
            case CAMEL_CASE:
               for (int var7 = 0; var7 < var2.length; var7++) {
                  String var8 = var2[var7];
                  if (var8.equals(var3)) {
                     class="kw">return var1[var7];
                  }
               }
         }

         if (var4) {
            class="kw">return null;
         } else {
            throw new CodecException("Failed to find enum value for " + var3);
         }
      }

      @Nonnull
      class="kw">public String formatCamelCase(@Nonnull String var1) {
         class="kw">return class="kw">switch (this) {
            case LEGACY -> {
               StringBuilder var2 = new StringBuilder();

               for (String var6 : var1.split("_", -1)) {
                  var2.append(Character.toUpperCase(var6.charAt(0))).append(var6.substring(1).toLowerCase(Locale.ROOT));
               }

               yield var2.toString();
            }
            case CAMEL_CASE -> var1;
         };
      }

      @Nonnull
      class="kw">public class="kw">static <T class="kw">extends Enum<T>> EnumCodec.EnumStyle detect(@Nonnull T[] var0) {
         for (Enum var4 : var0) {
            String var5 = var4.name();
            if (var5.length() <= 1 || !Character.isUpperCase(var5.charAt(1))) {
               class="kw">return CAMEL_CASE;
            }

            for (int var6 = 1; var6 < var5.length(); var6++) {
               char var7 = var5.charAt(var6);
               if (Character.isLetter(var7) && Character.isLowerCase(var7)) {
                  class="kw">return CAMEL_CASE;
               }
            }
         }

         class="kw">return LEGACY;
      }
   }
}