VariantsFactory.java
package io.github.jonloucks.variants.api;
import io.github.jonloucks.contracts.api.AutoClose;
import io.github.jonloucks.contracts.api.AutoOpen;
import io.github.jonloucks.contracts.api.Contract;
import io.github.jonloucks.contracts.api.Repository;
import java.util.function.Consumer;
/**
* Responsibility: Creating new instances of Variants
*/
public interface VariantsFactory {
/**
* Used to promise and claim the VariantsFactory implementation
*/
Contract<VariantsFactory> CONTRACT = Contract.create(VariantsFactory.class);
/**
* Create a new instance of Variants
* <p>
* Note: caller is responsible for calling {@link AutoOpen#open()} and calling
* the {@link AutoClose#close() when done}
* </p>
* @param config the Variants configuration for the new instance
* @return the new Variants instance
* @throws IllegalArgumentException if config is null or when configuration is invalid
*/
Variants create(Variants.Config config);
/**
* Create a new instance of Variants
*
* @param builderConsumer the config builder consumer callback
* @return the new Variants instance
* @throws IllegalArgumentException if builderConsumer is null or when configuration is invalid
*/
Variants create(Consumer<Variants.Config.Builder> builderConsumer);
/**
* Install all the requirements and promises to the given Contracts Environment.
* Include Variants#CONTRACT which will private a unique
*
* @param config the Variants config
* @param repository the repository to add requirements and promises to
* @throws IllegalArgumentException if config is null, config is invalid, or repository is null
*/
void install(Variants.Config config, Repository repository);
}