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

package com.hypixel.hytale.metrics;

import com.hypixel.hytale.codec.schema.config.ObjectSchema;
import com.hypixel.hytale.codec.schema.config.Schema;
import com.hypixel.hytale.codec.schema.SchemaContext;
import java.io.IOException;
import com.hypixel.hytale.codec.util.RawJsonReader;
import javax.annotation.Nullable;
import com.hypixel.hytale.codec.ExtraInfo;
import javax.annotation.Nonnull;
import org.bson.BsonValue;
import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
import org.bson.BsonDocument;
import com.hypixel.hytale.codec.Codec;

public class MetricResults
{
    public static final Codec<MetricResults> CODEC;
    public static final Codec<MetricResults[]> ARRAY_CODEC;
    private final BsonDocument bson;
    
    protected MetricResults(final BsonDocument bson) {
        this.bson = bson;
    }
    
    protected BsonDocument getBson() {
        return this.bson;
    }
    
    static {
        CODEC = new MetricResultsCodec();
        ARRAY_CODEC = new ArrayCodec<MetricResults>(MetricResults.CODEC, MetricResults[]::new);
    }
    
    private static class MetricResultsCodec implements Codec<MetricResults>
    {
        @Nullable
        @Override
        public MetricResults decode(@Nonnull final BsonValue bsonValue, final ExtraInfo extraInfo) {
            return Codec.isNullBsonValue(bsonValue) ? null : new MetricResults(bsonValue.asDocument());
        }
        
        @Override
        public BsonValue encode(@Nullable final MetricResults metricResults, final ExtraInfo extraInfo) {
            return (metricResults == null) ? null : metricResults.bson;
        }
        
        @Nullable
        @Override
        public MetricResults decodeJson(@Nonnull final RawJsonReader reader, final ExtraInfo extraInfo) throws IOException {
            final BsonValue bsonValue = RawJsonReader.readBsonValue(reader);
            return Codec.isNullBsonValue(bsonValue) ? null : new MetricResults(bsonValue.asDocument());
        }
        
        @Nonnull
        @Override
        public Schema toSchema(@Nonnull final SchemaContext context) {
            return new ObjectSchema();
        }
    }
}
