Options class

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

Файл: com/hypixel/hytale/codec/record/RecordField.java

Поля (2)

МодификаторыТипИмя
private String documentation
private List<Metadata> metadata

Методы (7)

МодификаторыВозвратСигнатура
public RecordField.Options<FieldType> addValidatorpublic RecordField.Options<FieldType> addValidator(@Nonnull Validator<? super FieldType> var1)
public RecordField.Options<FieldType> addValidatorLatepublic RecordField.Options<FieldType> addValidatorLate(@Nonnull Supplier<LateValidator<? super FieldType>> var1)
public RecordField.Options<FieldType> documentationpublic RecordField.Options<FieldType> documentation(@Nonnull String var1)
if if(this.validators == null)
if if(this.validators == null)
if if(this.metadata == null)
public RecordField.Options<FieldType> metadatapublic RecordField.Options<FieldType> metadata(@Nonnull Metadata var1)

Исходный код

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

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.PrimitiveCodec;
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.metadata.Metadata;
class="kw">import com.hypixel.hytale.codec.util.RawJsonReader;
class="kw">import com.hypixel.hytale.codec.validation.LateValidator;
class="kw">import com.hypixel.hytale.codec.validation.LazyLateValidator;
class="kw">import com.hypixel.hytale.codec.validation.ValidatableCodec;
class="kw">import com.hypixel.hytale.codec.validation.ValidationResults;
class="kw">import com.hypixel.hytale.codec.validation.Validator;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.codec.validation.validator.DeprecatedValidator;
class="kw">import com.hypixel.hytale.codec.validation.validator.NonNullValidator;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.io.IOException;
class="kw">import java.util.List;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.function.Function;
class="kw">import java.util.function.Predicate;
class="kw">import java.util.function.Supplier;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonValue;

class="kw">public class="kw">final class RecordField<Type, FieldType> {
   @Nonnull
   class="kw">private class="kw">final KeyedCodec<FieldType> codec;
   @Nonnull
   class="kw">private class="kw">final Function<Type, FieldType> accessor;
   class="kw">private class="kw">final int index;
   @Nullable
   class="kw">private class="kw">final List<Validator<? super FieldType>> validators;
   @Nullable
   class="kw">private class="kw">final List<Metadata> metadata;
   @Nullable
   class="kw">private class="kw">final String documentation;
   @Nullable
   class="kw">private class="kw">final NonNullValidator<? super FieldType> nonNullValidator;
   class="kw">private class="kw">final boolean isPrimitive;

   RecordField(@Nonnull KeyedCodec<FieldType> var1, @Nonnull Function<Type, FieldType> var2, int var3, @Nonnull RecordField.Options<FieldType> var4) {
      this.codec = Objects.requireNonNull(var1, "codec parameter can't be null");
      this.accessor = Objects.requireNonNull(var2, "accessor parameter can't be null");
      this.index = var3;
      this.validators = var4.validators;
      this.metadata = var4.metadata;
      this.documentation = var4.documentation;
      NonNullValidator var5 = null;
      if (this.validators != null) {
         for (Validator var7 : this.validators) {
            if (var7 class="kw">instanceof NonNullValidator) {
               var5 = (NonNullValidator<? super FieldType>)var7;
               break;
            }
         }
      }

      this.nonNullValidator = var5;
      this.isPrimitive = var1.getChildCodec() class="kw">instanceof PrimitiveCodec;
   }

   @Nonnull
   class="kw">public KeyedCodec<FieldType> getCodec() {
      class="kw">return this.codec;
   }

   @Nullable
   class="kw">public String getDocumentation() {
      class="kw">return this.documentation;
   }

   class="kw">public boolean hasNonNullValidator() {
      class="kw">return this.nonNullValidator != null;
   }

   class="kw">public boolean isPrimitive() {
      class="kw">return this.isPrimitive;
   }

   class="kw">public void encode(@Nonnull BsonDocument var1, Type var2, @Nonnull ExtraInfo var3) {
      Object var4 = this.accessor.apply(var2);
      this.codec.put(var1, var4, var3);
   }

   @Nullable
   FieldType getValue(@Nonnull Type var1) {
      class="kw">return this.accessor.apply(var1);
   }

   class="kw">public void decode(@Nonnull BsonValue var1, @Nonnull Object[] var2, @Nonnull ExtraInfo var3) {
      var3.pushKey(this.codec.getKey());

      try {
         Object var4;
         if (Codec.isNullBsonValue(var1)) {
            var4 = null;
         } else {
            try {
               var4 = this.codec.getChildCodec().decode(var1, var3);
            } catch (Exception var9) {
               throw new CodecException("Failed to decode", var1, var3, var9);
            }
         }

         this.setValue(var2, var4, var3);
      } class="kw">finally {
         var3.popKey();
      }
   }

   class="kw">public void decodeJson(@Nonnull RawJsonReader var1, @Nonnull Object[] var2, @Nonnull ExtraInfo var3) class="kw">throws IOException {
      int var4 = var1.peek();
      if (var4 == -1) {
         throw new IOException("Unexpected EOF!");
      }

      class="kw">switch (var4) {
         case 78:
         case 110:
            var1.readNullValue();
            this.setValue(var2, null, var3);
            class="kw">return;
         class="kw">default:
            Object var5 = this.codec.getChildCodec().decodeJson(var1, var3);
            this.setValue(var2, var5, var3);
      }
   }

   class="kw">private void setValue(@Nonnull Object[] var1, @Nullable FieldType var2, @Nonnull ExtraInfo var3) {
      if (this.validators != null) {
         ValidationResults var4 = var3.getValidationResults();

         for (int var5 = 0; var5 < this.validators.size(); var5++) {
            Validator var6 = this.validators.get(var5);
            if (var6 != this.nonNullValidator) {
               var6.accept(var2, var4);
            }
         }

         var4._processValidationResults();
      }

      if (this.isPrimitive && var2 == null) {
         ValidationResults var7 = var3.getValidationResults();
         if (this.nonNullValidator != null) {
            this.nonNullValidator.accept(null, var7);
         } else {
            Validators.nonNull().accept(null, var7);
         }

         var7._processValidationResults();
      } else {
         var1[this.index] = var2;
      }
   }

   void validateRequiredArg(@Nonnull Object[] var1, @Nonnull ValidationResults var2) {
      if (this.nonNullValidator != null) {
         if (var1[this.index] == null) {
            this.nonNullValidator.accept(null, var2);
            var2._processValidationResults();
         }
      }
   }

   class="kw">public void validate(Type var1, @Nonnull ExtraInfo var2) {
      this.validateValue(this.accessor.apply(var1), var2, null);
   }

   void validateDefaults(@Nullable Type var1, @Nullable Object var2, @Nonnull ExtraInfo var3, @Nonnull Set<Codec<?>> var4) {
      Object var5 = (FieldType)(var1 != null ? this.accessor.apply(var1) : var2);
      if (var5 != null && !this.codec.isRequired() && this.nonNullValidator == null) {
         this.validateValue(var5, var3, var0 -> var0 class="kw">instanceof DeprecatedValidator);
      }

      ValidatableCodec.validateDefaults(this.codec.getChildCodec(), var3, var4);
   }

   class="kw">private void validateValue(@Nullable FieldType var1, @Nonnull ExtraInfo var2, @Nullable Predicate<Validator<? super FieldType>> var3) {
      if (var1 != null && this.codec.getChildCodec() class="kw">instanceof ValidatableCodec var5) {
         ((ValidatableCodec<FieldType>)var5).validate(var1, var2);
      }

      if (this.validators != null) {
         ValidationResults var8 = var2.getValidationResults();

         for (int var6 = 0; var6 < this.validators.size(); var6++) {
            Validator var7 = this.validators.get(var6);
            if ((var3 == null || !var3.test(var7)) && !(var7 class="kw">instanceof LateValidator)) {
               var7.accept(var1, var8);
            }
         }

         var8._processValidationResults();
      }
   }

   class="kw">public void updateSchema(@Nonnull SchemaContext var1, @Nonnull Schema var2) {
      if (this.validators != null) {
         for (int var3 = 0; var3 < this.validators.size(); var3++) {
            this.validators.get(var3).updateSchema(var1, var2);
         }
      }

      if (this.metadata != null) {
         for (int var4 = 0; var4 < this.metadata.size(); var4++) {
            this.metadata.get(var4).modify(var2);
         }
      }
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "RecordField{codec=" + this.codec + ", index=" + this.index + "}";
   }

   class="kw">public class="kw">static class="kw">final class Options<FieldType> {
      @Nullable
      class="kw">private List<Validator<? super FieldType>> validators;
      @Nullable
      class="kw">private List<Metadata> metadata;
      @Nullable
      class="kw">private String documentation;

      class="kw">public Options() {
      }

      @Nonnull
      class="kw">public RecordField.Options<FieldType> addValidator(@Nonnull Validator<? super FieldType> var1) {
         if (this.validators == null) {
            this.validators = new ObjectArrayList();
         }

         this.validators.add(var1);
         class="kw">return this;
      }

      @Nonnull
      class="kw">public RecordField.Options<FieldType> addValidatorLate(@Nonnull Supplier<LateValidator<? super FieldType>> var1) {
         if (this.validators == null) {
            this.validators = new ObjectArrayList();
         }

         this.validators.add(new LazyLateValidator<>(var1));
         class="kw">return this;
      }

      @Nonnull
      class="kw">public RecordField.Options<FieldType> documentation(@Nonnull String var1) {
         this.documentation = var1;
         class="kw">return this;
      }

      @Nonnull
      class="kw">public RecordField.Options<FieldType> metadata(@Nonnull Metadata var1) {
         if (this.metadata == null) {
            this.metadata = new ObjectArrayList();
         }

         this.metadata.add(var1);
         class="kw">return this;
      }
   }
}