class DefaultConfigurationReader implements ConfigurationReader {

    @Override
    public <T> ConfigurationSettingsUnit read(ConfigurationUnit annotation, Class<T> configurationClass) {

        requireNonNull(annotation, "annotation is required");
        requireNonNull(configurationClass, "configurationClass is required");


        List<Configurable> configurations = getConfigurations(annotation);
        Configurable configuration = getConfiguration(annotation, configurations);

        String name = configuration.getName();
        String description = configuration.getDescription();
        Map<String, Object> settings = getSettings(configuration);
        Class<?> provider = getProvider(configurationClass, configuration);

        return new DefaultConfigurationSettingsUnit(name, description, provider, Settings.of(settings));
    }

}