import java.util.List;
+/**
+ * Implementors of this interface should be able to fetch configuration variables
+ * from a given source (HTTP API, file; etc.) corresponding to the provided environment.
+ * <p>
+ * Implementors are free to ignore the {@code env} argument as well if not needed.
+ */
public interface ConfigurationVariableSource {
/**
* Read a list of configuration variables defined for the specified environment.
+ * <p>
+ * This method should fail silently and return an empty list in the case of error.
+ * You may want to log errors to a file for bookkeeping. You might also want to throw
+ * and exception, in which case it will be visible to the end user.
+ * <p>
+ * Better error reporting is planned for future versions.
*
* @param env The environment for which to fetch configuration variables.
* @return A list of the configuration variables defined in the given environment.
import java.util.List;
+/**
+ * Implementors of this interface should be able to take a list of {@link Validation}s
+ * and report it in some arbitrary way (e.g. through an HTML document, console output; etc.).
+ */
public interface ResultsReporter {
/**
* Report the results of configuration variable configuration.
import java.util.List;
+/**
+ * Implementors of this interface should be able to take a string representing
+ * validation rules in a given format (e.g. JSON, YAML or a custom format), parse it
+ * and generate a list of {@link Rule}.
+ */
public interface RuleParser {
/**
* Parse a list of rules from a given string source.
+ * <p>
+ * Any parsing errors should be communicated to the end user in the form
+ * of exceptions. Better error handling and reporting is planned for future
+ * versions.
*
* @param source The string from which to parse the rules.
* @return A list of Rules.