@@ -40,97 +40,73 @@ data class IntegrationTestParams(
40
40
* model,
41
41
* IntegrationTestParams(
42
42
* additionalSettings =
43
- * ServerAdditionalSettings.builder ()
44
- * .generateCodegenComments()
45
- * .publicConstrainedTypes()
43
+ * ServerAdditionalSettings()
44
+ * .generateCodegenComments(true )
45
+ * .publicConstrainedTypes(true )
46
46
* .toObjectNode()
47
47
* )),
48
48
* ```
49
49
*/
50
- sealed class AdditionalSettings {
51
- abstract fun toObjectNode (): ObjectNode
52
-
53
- abstract class CoreAdditionalSettings protected constructor(val settings : List <AdditionalSettings >) : AdditionalSettings() {
54
- override fun toObjectNode (): ObjectNode {
55
- val merged =
56
- settings.map { it.toObjectNode() }
57
- .reduce { acc, next -> acc.merge(next) }
58
-
59
- return ObjectNode .builder()
60
- .withMember(" codegen" , merged)
61
- .build()
62
- }
63
-
64
- abstract class Builder <T : CoreAdditionalSettings > : AdditionalSettings () {
65
- protected val settings = mutableListOf<AdditionalSettings >()
66
-
67
- fun generateCodegenComments (debugMode : Boolean = true): Builder <T > {
68
- settings.add(GenerateCodegenComments (debugMode))
69
- return this
70
- }
71
-
72
- abstract fun build (): T
73
-
74
- override fun toObjectNode (): ObjectNode = build().toObjectNode()
50
+ open class AdditionalSettings <T : AdditionalSettings <T >> {
51
+ private val codegenBuilderDelegate =
52
+ lazy {
53
+ ObjectNode .builder()
75
54
}
55
+ private val codegenBuilder: ObjectNode .Builder by codegenBuilderDelegate
76
56
77
- // Core settings that are common to both Servers and Clients should be defined here.
78
- data class GenerateCodegenComments (val debugMode : Boolean ) : AdditionalSettings() {
79
- override fun toObjectNode (): ObjectNode =
80
- ObjectNode .builder()
81
- .withMember(" debugMode" , debugMode)
82
- .build()
57
+ fun build (): ObjectNode {
58
+ return if (codegenBuilderDelegate.isInitialized()) {
59
+ ObjectNode .builder()
60
+ .withMember(" codegen" , codegenBuilder.build())
61
+ .build()
62
+ } else {
63
+ ObjectNode .builder().build()
83
64
}
84
65
}
85
- }
86
-
87
- class ClientAdditionalSettings private constructor(settings : List <AdditionalSettings >) :
88
- AdditionalSettings .CoreAdditionalSettings (settings) {
89
- class Builder : CoreAdditionalSettings .Builder <ClientAdditionalSettings >() {
90
- override fun build (): ClientAdditionalSettings = ClientAdditionalSettings (settings)
91
- }
92
66
93
- // Additional settings that are specific to client generation should be defined here.
94
-
95
- companion object {
96
- fun builder () = Builder ()
97
- }
67
+ @Suppress(" UNCHECKED_CAST" )
68
+ open fun generateCodegenComments (debugMode : Boolean = true): T {
69
+ codegenBuilder.withMember(" debugMode" , debugMode)
70
+ return this as T
98
71
}
99
72
100
- class ServerAdditionalSettings private constructor(settings : List <AdditionalSettings >) :
101
- AdditionalSettings .CoreAdditionalSettings (settings) {
102
- class Builder : CoreAdditionalSettings .Builder <ServerAdditionalSettings >() {
103
- fun publicConstrainedTypes (enabled : Boolean = true): Builder {
104
- settings.add(PublicConstrainedTypes (enabled))
105
- return this
106
- }
73
+ @Suppress(" UNCHECKED_CAST" )
74
+ protected fun withCodegenMember (
75
+ key : String ,
76
+ value : Boolean ,
77
+ ): T {
78
+ codegenBuilder.withMember(key, value)
79
+ return this as T
80
+ }
107
81
108
- fun addValidationExceptionToConstrainedOperations (enabled : Boolean = true): Builder {
109
- settings.add(AddValidationExceptionToConstrainedOperations (enabled))
110
- return this
111
- }
82
+ @Suppress(" UNCHECKED_CAST" )
83
+ protected fun withCodegenMember (
84
+ key : String ,
85
+ value : String ,
86
+ ): T {
87
+ codegenBuilder.withMember(key, value)
88
+ return this as T
89
+ }
112
90
113
- override fun build (): ServerAdditionalSettings = ServerAdditionalSettings (settings)
114
- }
91
+ @Suppress(" UNCHECKED_CAST" )
92
+ protected fun withCodegenMember (
93
+ key : String ,
94
+ value : Number ,
95
+ ): T {
96
+ codegenBuilder.withMember(key, value)
97
+ return this as T
98
+ }
99
+ }
115
100
116
- private data class PublicConstrainedTypes (val enabled : Boolean ) : AdditionalSettings() {
117
- override fun toObjectNode (): ObjectNode =
118
- ObjectNode .builder()
119
- .withMember(" publicConstrainedTypes" , enabled)
120
- .build()
121
- }
101
+ class ServerAdditionalSettings : AdditionalSettings <ServerAdditionalSettings >() {
102
+ fun publicConstrainedTypes (enabled : Boolean = true): ServerAdditionalSettings =
103
+ withCodegenMember(" publicConstrainedTypes" , enabled)
122
104
123
- private data class AddValidationExceptionToConstrainedOperations (val enabled : Boolean ) : AdditionalSettings() {
124
- override fun toObjectNode (): ObjectNode =
125
- ObjectNode .builder()
126
- .withMember(" addValidationExceptionToConstrainedOperations" , enabled)
127
- .build()
128
- }
105
+ fun addValidationExceptionToConstrainedOperations (enabled : Boolean = true) =
106
+ withCodegenMember(" addValidationExceptionToConstrainedOperations" , enabled)
129
107
130
- companion object {
131
- fun builder () = Builder ()
132
- }
133
- }
108
+ fun ignoreUnsupportedConstraints () = withCodegenMember(" ignoreUnsupportedConstraints" , true )
109
+ }
134
110
135
111
/* *
136
112
* Run cargo test on a true, end-to-end, codegen product of a given model.
0 commit comments