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

package com.hypixel.hytale.codec;

import java.util.Iterator;
import org.bson.BsonValue;
import java.util.Map;
import com.hypixel.hytale.codec.builder.BuilderField;
import java.util.List;
import java.util.function.Function;
import org.bson.BsonDocument;
import java.util.function.BiConsumer;
import javax.annotation.Nonnull;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.function.BsonFunctionCodec;

@Deprecated
public class DocumentContainingCodec<T> extends BsonFunctionCodec<T>
{
    public DocumentContainingCodec(@Nonnull final BuilderCodec<T> codec, @Nonnull final BiConsumer<T, BsonDocument> setter, @Nonnull final Function<T, BsonDocument> getter) {
        super((Codec<Object>)codec, (value, bsonValue) -> {
            final BsonDocument document = bsonValue.asDocument().clone();
            for (final List<BuilderField<T, ?>> entry : codec.getEntries().values()) {
                for (final BuilderField<T, ?> field : entry) {
                    document.remove(field.getCodec().getKey());
                }
            }
            setter.accept(value, document);
            return value;
        }, (bsonValue, value) -> {
            final BsonDocument document2 = getter.apply(value);
            if (document2 != null) {
                bsonValue.asDocument().putAll(document2);
            }
            return bsonValue;
        });
    }
}
