// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.codec.validation;

import javax.annotation.Nonnull;
import com.hypixel.hytale.codec.validation.validator.MapValueValidator;
import com.hypixel.hytale.codec.validation.validator.MapKeyValidator;
import com.hypixel.hytale.codec.validation.validator.ArrayValidator;

public class ValidatorCache<T>
{
    private final Validator<T> validator;
    private ArrayValidator<T> arrayValidator;
    private ArrayValidator<T[]> arrayofArrayValidator;
    private MapKeyValidator<T> mapKeyValidator;
    private MapKeyValidator<T[]> mapArrayKeyValidator;
    private MapValueValidator<T> mapValueValidator;
    private MapValueValidator<T[]> mapArrayValueValidator;
    
    public ValidatorCache(final Validator<T> validator) {
        this.validator = validator;
    }
    
    public Validator<T> getValidator() {
        return this.validator;
    }
    
    @Nonnull
    public ArrayValidator<T> getArrayValidator() {
        if (this.arrayValidator == null) {
            this.arrayValidator = new ArrayValidator<T>(this.getValidator());
        }
        return this.arrayValidator;
    }
    
    @Nonnull
    public ArrayValidator<T[]> getArrayOfArrayValidator() {
        if (this.arrayofArrayValidator == null) {
            this.arrayofArrayValidator = new ArrayValidator<T[]>(this.getArrayValidator());
        }
        return this.arrayofArrayValidator;
    }
    
    @Nonnull
    public MapKeyValidator<T> getMapKeyValidator() {
        if (this.mapKeyValidator == null) {
            this.mapKeyValidator = new MapKeyValidator<T>(this.getValidator());
        }
        return this.mapKeyValidator;
    }
    
    @Nonnull
    public MapKeyValidator<T[]> getMapArrayKeyValidator() {
        if (this.mapArrayKeyValidator == null) {
            this.mapArrayKeyValidator = new MapKeyValidator<T[]>(this.getArrayValidator());
        }
        return this.mapArrayKeyValidator;
    }
    
    @Nonnull
    public MapValueValidator<T> getMapValueValidator() {
        if (this.mapValueValidator == null) {
            this.mapValueValidator = new MapValueValidator<T>(this.getValidator());
        }
        return this.mapValueValidator;
    }
    
    @Nonnull
    public MapValueValidator<T[]> getMapArrayValueValidator() {
        if (this.mapArrayValueValidator == null) {
            this.mapArrayValueValidator = new MapValueValidator<T[]>(this.getArrayValidator());
        }
        return this.mapArrayValueValidator;
    }
}
