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;
}
}
}