@@ -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" 
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" 
82-                     .build()
57+     fun  build (): ObjectNode  {
58+         return  if  (codegenBuilderDelegate.isInitialized()) {
59+             ObjectNode .builder()
60+                 .withMember(" codegen" 
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" 
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" 
120-                     .build()
121-         }
101+ class  ServerAdditionalSettings  : AdditionalSettings <ServerAdditionalSettings >() {
102+     fun  publicConstrainedTypes (enabled :  Boolean  = true): ServerAdditionalSettings  = 
103+         withCodegenMember(" publicConstrainedTypes" 
122104
123-         private  data class  AddValidationExceptionToConstrainedOperations (val  enabled :  Boolean ) : AdditionalSettings() {
124-             override  fun  toObjectNode (): ObjectNode  = 
125-                 ObjectNode .builder()
126-                     .withMember(" addValidationExceptionToConstrainedOperations" 
127-                     .build()
128-         }
105+     fun  addValidationExceptionToConstrainedOperations (enabled :  Boolean  = true) = 
106+         withCodegenMember(" addValidationExceptionToConstrainedOperations" 
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