VariantFactoryImpl.java
package io.github.jonloucks.variants.impl;
import io.github.jonloucks.variants.api.Parsers;
import io.github.jonloucks.variants.api.Variant;
import io.github.jonloucks.variants.api.VariantFactory;
import io.github.jonloucks.variants.api.Variants;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import static io.github.jonloucks.contracts.api.Checks.builderConsumerCheck;
import static io.github.jonloucks.contracts.api.Checks.configCheck;
/**
* Responsibility: VariantFactory implementation
*/
final class VariantFactoryImpl implements VariantFactory {
@Override
public <T> Variant<T> createVariant(Consumer<Variant.Config.Builder<T>> builderConsumer) {
final Consumer<Variant.Config.Builder<T>> validBuildConsumer = builderConsumerCheck(builderConsumer);
final VariantBuilderImpl<T> variantBuilder = new VariantBuilderImpl<>();
validBuildConsumer.accept(variantBuilder);
return createVariant(variantBuilder);
}
@Override
public <T> Variant<T> createVariant(BiConsumer<Variant.Config.Builder<T>, Parsers> builderConsumer) {
final BiConsumer<Variant.Config.Builder<T>,Parsers> validBuildConsumer = builderConsumerCheck(builderConsumer);
final Parsers parsers = config.contracts().claim(Parsers.CONTRACT);
final VariantBuilderImpl<T> variantBuilder = new VariantBuilderImpl<>();
validBuildConsumer.accept(variantBuilder, parsers);
return createVariant(variantBuilder);
}
@Override
public <T> Variant<T> createVariant(Variant.Config<T> config) {
return new VariantImpl<>(config);
}
VariantFactoryImpl(Variants.Config config) {
this.config = configCheck(config);
}
private final Variants.Config config;
}