auto generate configuration docs
[yosql.git] / yosql-models / yosql-models-meta / src / main / java / wtf / metio / yosql / models / meta / ConfigurationSetting.java
blobc084bde719ad326fde62a9b4464c934e9789721d
1 /*
2 * This file is part of yosql. It is subject to the license terms in the LICENSE file found in the top-level
3 * directory of this distribution and at http://creativecommons.org/publicdomain/zero/1.0/. No part of yosql,
4 * including this file, may be copied, modified, propagated, or distributed except according to the terms contained
5 * in the LICENSE file.
6 */
8 package wtf.metio.yosql.models.meta;
10 import com.squareup.javapoet.AnnotationSpec;
11 import com.squareup.javapoet.TypeName;
12 import org.immutables.value.Value;
14 import java.util.Collections;
15 import java.util.List;
16 import java.util.Optional;
18 /**
19 * Represents a single configuration setting.
21 @Value.Immutable
22 public interface ConfigurationSetting {
24 //region builders
26 static ImmutableConfigurationSetting.Builder builder() {
27 return ImmutableConfigurationSetting.builder();
30 static ImmutableConfigurationSetting copyOf(final ConfigurationSetting setting) {
31 return ImmutableConfigurationSetting.copyOf(setting);
34 //endregion
36 String name();
38 String description();
40 TypeName type();
42 Optional<String> explanation();
44 Optional<TypeName> cliType();
46 Optional<TypeName> gradleType();
48 Optional<TypeName> mavenType();
50 Optional<Object> value();
52 Optional<Object> cliValue();
54 Optional<Object> gradleValue();
56 Optional<Object> mavenValue();
58 /**
59 * @return The optional list of tags associated with this configuration setting.
61 List<String> tags();
63 /**
64 * @return The optional list of examples for this configuration setting.
66 List<ConfigurationExample> examples();
68 //region defaults
70 @Value.Default
71 default List<AnnotationSpec> immutableAnnotations() {
72 return Collections.emptyList();
75 @Value.Default
76 default List<AnnotationSpec> cliAnnotations() {
77 return Collections.emptyList();
80 @Value.Default
81 default List<AnnotationSpec> gradleAnnotations() {
82 return Collections.emptyList();
85 @Value.Default
86 default List<AnnotationSpec> mavenAnnotations() {
87 return Collections.emptyList();
90 //endregion