@@ -40,97 +40,73 @@ data class IntegrationTestParams(
4040 * model,
4141 * IntegrationTestParams(
4242 * additionalSettings =
43- * ServerAdditionalSettings.builder ()
44- * .generateCodegenComments()
45- * .publicConstrainedTypes()
43+ * ServerAdditionalSettings()
44+ * .generateCodegenComments(true )
45+ * .publicConstrainedTypes(true )
4646 * .toObjectNode()
4747 * )),
4848 * ```
4949 */
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()
7554 }
55+ private val codegenBuilder: ObjectNode .Builder by codegenBuilderDelegate
7656
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()
8364 }
8465 }
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- }
9266
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
9871 }
9972
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+ }
10781
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+ }
11290
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+ }
115100
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)
122104
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)
129107
130- companion object {
131- fun builder () = Builder ()
132- }
133- }
108+ fun ignoreUnsupportedConstraints () = withCodegenMember(" ignoreUnsupportedConstraints" , true )
109+ }
134110
135111/* *
136112 * Run cargo test on a true, end-to-end, codegen product of a given model.
0 commit comments