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

package com.hypixel.hytale.codec.codecs.simple;

import com.hypixel.hytale.codec.schema.config.IntegerSchema;
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 org.bson.BsonInt32;
import com.hypixel.hytale.codec.ExtraInfo;
import javax.annotation.Nonnull;
import org.bson.BsonValue;
import com.hypixel.hytale.codec.PrimitiveCodec;
import com.hypixel.hytale.codec.RawJsonCodec;
import com.hypixel.hytale.codec.Codec;

public class ShortCodec implements Codec<Short>, RawJsonCodec<Short>, PrimitiveCodec
{
    @Nonnull
    @Override
    public Short decode(@Nonnull final BsonValue bsonValue, final ExtraInfo extraInfo) {
        final int intValue = bsonValue.asNumber().intValue();
        if (intValue < -32768 || intValue > 32767) {
            throw new IllegalArgumentException("Expected a value between -32768 and 32767");
        }
        return (short)intValue;
    }
    
    @Nonnull
    @Override
    public BsonValue encode(final Short t, final ExtraInfo extraInfo) {
        return new BsonInt32(t);
    }
    
    @Nonnull
    @Override
    public Short decodeJson(@Nonnull final RawJsonReader reader, final ExtraInfo extraInfo) throws IOException {
        final int intValue = reader.readIntValue();
        if (intValue < -32768 || intValue > 32767) {
            throw new IllegalArgumentException("Expected a value between -32768 and 32767");
        }
        return (short)intValue;
    }
    
    @Nonnull
    @Override
    public Schema toSchema(@Nonnull final SchemaContext context) {
        return new IntegerSchema();
    }
}
