Skip to content

Commit da1187f

Browse files
authored
[csharp] Fixes incorrect property name (#18136)
* moved camel case lambda * renamed camel case lambda * reverted unintended change * fixed wrong property names * restored accidental file deletion * build samples
1 parent 669651f commit da1187f

158 files changed

Lines changed: 2108 additions & 1305 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
8585
protected String enumValueSuffix = "Enum";
8686

8787
protected String sourceFolder = "src";
88-
protected String invalidNamePrefix = "var";
88+
protected static final String invalidParameterNamePrefix = "var";
89+
protected static final String invalidPropertyNamePrefix = "Var";
8990
protected CodegenConstants.ENUM_PROPERTY_NAMING_TYPE enumPropertyNaming = CodegenConstants.ENUM_PROPERTY_NAMING_TYPE.PascalCase;
9091

9192
// TODO: Add option for test folder output location. Nice to allow e.g. ./test instead of ./src.
@@ -461,7 +462,9 @@ protected ImmutableMap.Builder<String, Lambda> addMustacheLambdas() {
461462
.put("pasteOnce", new PasteLambda(copyLambda, true, true, true, true))
462463
.put("pasteLine", new PasteLambda(copyLambda, true, true, false, false))
463464
.put("uniqueLines", new UniqueLambda("\n", false))
464-
.put("unique", new UniqueLambda("\n", true));
465+
.put("unique", new UniqueLambda("\n", true))
466+
.put("camel_case", new CamelCaseLambda())
467+
.put("escape_reserved_word", new EscapeKeywordLambda((val) -> this.escapeKeyword(val)));
465468
}
466469

467470
@Override
@@ -664,18 +667,13 @@ protected void removePropertiesDeclaredInComposedTypes(Map<String, ModelsMap> ob
664667
}
665668

666669
private String patchPropertyName(CodegenModel model, String value) {
667-
// the casing will be wrong if we just set the name to escapeReservedWord
668-
// if we try to fix it with camelize, underscores get stripped out
669-
// so test if the name was escaped and then replace var with Var
670-
String tmpPropertyName = escapeReservedWord(model, value);
671-
if (!value.equals(tmpPropertyName) || value.startsWith(this.invalidNamePrefix)) {
672-
value = tmpPropertyName;
673-
String firstCharacter = value.substring(0, 1);
674-
value = value.substring(1);
675-
value = firstCharacter.toUpperCase(Locale.ROOT) + value;
670+
String name = escapeReservedWord(model, value);
671+
672+
if (name.startsWith(AbstractCSharpCodegen.invalidParameterNamePrefix)) {
673+
name = AbstractCSharpCodegen.invalidPropertyNamePrefix + name.substring(AbstractCSharpCodegen.invalidParameterNamePrefix.length());
676674
}
677675

678-
return value;
676+
return name;
679677
}
680678

681679
private void patchPropertyVendorExtensions(CodegenProperty property) {
@@ -700,7 +698,6 @@ protected void patchProperty(Map<String, CodegenModel> enumRefs, CodegenModel mo
700698

701699
patchPropertyVendorExtensions(property);
702700

703-
String tmpPropertyName = escapeReservedWord(model, property.name);
704701
property.name = patchPropertyName(model, property.name);
705702

706703
String[] nestedTypes = { "List", "Collection", "ICollection", "Dictionary" };
@@ -1308,23 +1305,24 @@ public String toParamName(String name) {
13081305
public String escapeReservedWord(CodegenModel model, String name) {
13091306
name = this.escapeReservedWord(name);
13101307

1311-
return name.equalsIgnoreCase(model.getClassname())
1312-
? this.invalidNamePrefix + camelize(name)
1308+
return name.equals(model.getClassname())
1309+
? AbstractCSharpCodegen.invalidParameterNamePrefix + camelize(name)
13131310
: name;
13141311
}
13151312

13161313
@Override
13171314
public String escapeReservedWord(String name) {
1318-
if (reservedWords().contains(name) ||
1319-
reservedWords().contains(name.toLowerCase(Locale.ROOT)) ||
1320-
reservedWords().contains(camelize(sanitizeName(name))) ||
1321-
isReservedWord(name) ||
1315+
if (isReservedWord(name) ||
13221316
name.matches("^\\d.*")) {
1323-
name = this.invalidNamePrefix + camelize(name);
1317+
name = AbstractCSharpCodegen.invalidParameterNamePrefix + camelize(name);
13241318
}
13251319
return name;
13261320
}
13271321

1322+
public String escapeKeyword(String value) {
1323+
return isReservedWord(value) ? "@" + value : value;
1324+
}
1325+
13281326
/**
13291327
* Return the example value of the property
13301328
*
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.openapitools.codegen.templating.mustache;
18+
19+
import com.samskivert.mustache.Mustache;
20+
import com.samskivert.mustache.Template;
21+
import org.openapitools.codegen.utils.CamelizeOption;
22+
23+
import java.io.IOException;
24+
import java.io.Writer;
25+
26+
import static org.openapitools.codegen.utils.StringUtils.camelize;
27+
28+
/**
29+
* Converts text in a fragment to camelCase.
30+
*
31+
* Register:
32+
* <pre>
33+
* additionalProperties.put("camelcase", new CamelCaseLambda());
34+
* </pre>
35+
*
36+
* Use:
37+
* <pre>
38+
* {{#camelcase}}{{name}}{{/camelcase}}
39+
* </pre>
40+
*/
41+
public class CamelCaseLambda implements Mustache.Lambda {
42+
public CamelCaseLambda() {
43+
}
44+
45+
@Override
46+
public void execute(Template.Fragment fragment, Writer writer) throws IOException {
47+
String text = fragment.execute();
48+
text = camelize(text, CamelizeOption.LOWERCASE_FIRST_CHAR);
49+
writer.write(text);
50+
}
51+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
3+
* Copyright 2018 SmartBear Software
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* https://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.openapitools.codegen.templating.mustache;
19+
20+
import com.samskivert.mustache.Mustache;
21+
import com.samskivert.mustache.Template;
22+
23+
import java.io.IOException;
24+
import java.io.Writer;
25+
import java.util.function.UnaryOperator;
26+
27+
/**
28+
* Converts text in a fragment to escape_keyword.
29+
*
30+
* Register:
31+
* <pre>
32+
* additionalProperties.put("escape_keyword", new EscapeKeywordLambda((val) -> this.escapeKeyword(val))));
33+
* </pre>
34+
*
35+
* Use:
36+
* <pre>
37+
* {{#escape_keyword}}{{name}}{{/escape_keyword}}
38+
* </pre>
39+
*/
40+
public class EscapeKeywordLambda implements Mustache.Lambda {
41+
private UnaryOperator<String> callback;
42+
43+
public EscapeKeywordLambda(final UnaryOperator<String> callback) {
44+
this.callback = callback;
45+
}
46+
47+
@Override
48+
public void execute(Template.Fragment fragment, Writer writer) throws IOException {
49+
String text = fragment.execute();
50+
51+
text = this.callback.apply(text);
52+
53+
writer.write(text);
54+
}
55+
}

modules/openapi-generator/src/main/resources/csharp/libraries/generichost/DependencyInjectionTests.mustache

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@ namespace {{packageName}}.Test.{{apiPackage}}
166166
[Fact]
167167
public void ConfigureApiWithAClientTest()
168168
{
169-
{{#apiInfo}}{{#apis}}var {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}} = _hostUsingConfigureWithAClient.Services.GetRequiredService<{{interfacePrefix}}{{classname}}>();
170-
Assert.True({{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}.HttpClient.BaseAddress != null);{{^-last}}
169+
{{#apiInfo}}{{#apis}}var {{#lambda.camel_case}}{{classname}}{{/lambda.camel_case}} = _hostUsingConfigureWithAClient.Services.GetRequiredService<{{interfacePrefix}}{{classname}}>();
170+
Assert.True({{#lambda.camel_case}}{{classname}}{{/lambda.camel_case}}.HttpClient.BaseAddress != null);{{^-last}}
171171

172172
{{/-last}}{{/apis}}{{/apiInfo}}
173173
}
@@ -178,8 +178,8 @@ namespace {{packageName}}.Test.{{apiPackage}}
178178
[Fact]
179179
public void ConfigureApiWithoutAClientTest()
180180
{
181-
{{#apiInfo}}{{#apis}}var {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}} = _hostUsingConfigureWithoutAClient.Services.GetRequiredService<{{interfacePrefix}}{{classname}}>();
182-
Assert.True({{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}.HttpClient.BaseAddress != null);{{^-last}}
181+
{{#apiInfo}}{{#apis}}var {{#lambda.camel_case}}{{classname}}{{/lambda.camel_case}} = _hostUsingConfigureWithoutAClient.Services.GetRequiredService<{{interfacePrefix}}{{classname}}>();
182+
Assert.True({{#lambda.camel_case}}{{classname}}{{/lambda.camel_case}}.HttpClient.BaseAddress != null);{{^-last}}
183183

184184
{{/-last}}{{/apis}}{{/apiInfo}}
185185
}
@@ -190,8 +190,8 @@ namespace {{packageName}}.Test.{{apiPackage}}
190190
[Fact]
191191
public void AddApiWithAClientTest()
192192
{
193-
{{#apiInfo}}{{#apis}}var {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}} = _hostUsingAddWithAClient.Services.GetRequiredService<{{interfacePrefix}}{{classname}}>();
194-
Assert.True({{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}.HttpClient.BaseAddress != null);{{^-last}}
193+
{{#apiInfo}}{{#apis}}var {{#lambda.camel_case}}{{classname}}{{/lambda.camel_case}} = _hostUsingAddWithAClient.Services.GetRequiredService<{{interfacePrefix}}{{classname}}>();
194+
Assert.True({{#lambda.camel_case}}{{classname}}{{/lambda.camel_case}}.HttpClient.BaseAddress != null);{{^-last}}
195195

196196
{{/-last}}{{/apis}}{{/apiInfo}}
197197
}
@@ -202,8 +202,8 @@ namespace {{packageName}}.Test.{{apiPackage}}
202202
[Fact]
203203
public void AddApiWithoutAClientTest()
204204
{
205-
{{#apiInfo}}{{#apis}}var {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}} = _hostUsingAddWithoutAClient.Services.GetRequiredService<{{interfacePrefix}}{{classname}}>();
206-
Assert.True({{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}.HttpClient.BaseAddress != null);{{^-last}}
205+
{{#apiInfo}}{{#apis}}var {{#lambda.camel_case}}{{classname}}{{/lambda.camel_case}} = _hostUsingAddWithoutAClient.Services.GetRequiredService<{{interfacePrefix}}{{classname}}>();
206+
Assert.True({{#lambda.camel_case}}{{classname}}{{/lambda.camel_case}}.HttpClient.BaseAddress != null);{{^-last}}
207207

208208
{{/-last}}{{/apis}}{{/apiInfo}}
209209
}

modules/openapi-generator/src/main/resources/csharp/libraries/generichost/JsonConverter.mustache

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
/// <exception cref="JsonException"></exception>
3030
public override {{classname}} Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions)
3131
{
32+
{{#lambda.trimTrailingWithNewLine}}
3233
{{#lambda.trimLineBreaks}}
3334
int currentDepth = utf8JsonReader.CurrentDepth;
3435

@@ -291,22 +292,24 @@
291292
{{^composedSchemas.oneOf}}
292293
{{^required}}
293294
{{#model.composedSchemas.anyOf}}
294-
Option<{{baseType}}{{>NullConditionalProperty}}> {{#lambda.camelcase_sanitize_param}}{{baseType}}{{/lambda.camelcase_sanitize_param}}ParsedValue = {{#lambda.camelcase_sanitize_param}}{{baseType}}{{/lambda.camelcase_sanitize_param}} == null
295+
Option<{{baseType}}{{>NullConditionalProperty}}> {{#lambda.camelcase_sanitize_param}}{{name}}{{/lambda.camelcase_sanitize_param}}ParsedValue = {{#lambda.camelcase_sanitize_param}}{{name}}{{/lambda.camelcase_sanitize_param}} == null
295296
? default
296-
: new Option<{{baseType}}{{>NullConditionalProperty}}>({{#lambda.camelcase_sanitize_param}}{{baseType}}{{/lambda.camelcase_sanitize_param}});
297+
: new Option<{{baseType}}{{>NullConditionalProperty}}>({{#lambda.camelcase_sanitize_param}}{{name}}{{/lambda.camelcase_sanitize_param}});
297298
{{/model.composedSchemas.anyOf}}
298299
{{#-last}}
299300

300301
{{/-last}}
301302
{{/required}}
302-
return new {{classname}}({{#lambda.joinWithComma}}{{#model.composedSchemas.anyOf}}{{#lambda.camelcase_sanitize_param}}{{baseType}}{{/lambda.camelcase_sanitize_param}}ParsedValue{{#required}}.Value{{^isNullable}}{{#vendorExtensions.x-is-value-type}}{{nrt!}}.Value{{nrt!}}{{/vendorExtensions.x-is-value-type}}{{/isNullable}}{{/required}} {{/model.composedSchemas.anyOf}}{{#allVars}}{{#lambda.camelcase_sanitize_param}}{{name}}{{/lambda.camelcase_sanitize_param}}{{#required}}.Value{{nrt!}}{{^isNullable}}{{#vendorExtensions.x-is-value-type}}.Value{{nrt!}}{{/vendorExtensions.x-is-value-type}}{{/isNullable}}{{/required}} {{/allVars}}{{/lambda.joinWithComma}});
303+
return new {{classname}}({{#lambda.joinWithComma}}{{#model.composedSchemas.anyOf}}{{#lambda.camelcase_sanitize_param}}{{name}}{{/lambda.camelcase_sanitize_param}}ParsedValue{{#required}}.Value{{^isNullable}}{{#vendorExtensions.x-is-value-type}}{{nrt!}}.Value{{nrt!}}{{/vendorExtensions.x-is-value-type}}{{/isNullable}}{{/required}} {{/model.composedSchemas.anyOf}}{{#allVars}}{{#lambda.camelcase_sanitize_param}}{{name}}{{/lambda.camelcase_sanitize_param}}{{#required}}.Value{{nrt!}}{{^isNullable}}{{#vendorExtensions.x-is-value-type}}.Value{{nrt!}}{{/vendorExtensions.x-is-value-type}}{{/isNullable}}{{/required}} {{/allVars}}{{/lambda.joinWithComma}});
303304
{{/composedSchemas.oneOf}}
304305
{{^model.discriminator}}
305306
{{#composedSchemas}}
306307
{{#oneOf}}
308+
{{^vendorExtensions.x-duplicated-data-type}}
307309
if ({{#lambda.camelcase_sanitize_param}}{{name}}{{/lambda.camelcase_sanitize_param}} != null)
308310
return new {{classname}}({{#lambda.joinWithComma}}{{#lambda.camelcase_sanitize_param}}{{name}}{{/lambda.camelcase_sanitize_param}}{{#vendorExtensions.x-is-value-type}}{{^isNullable}}.Value{{/isNullable}}{{/vendorExtensions.x-is-value-type}} {{#model.composedSchemas.anyOf}}{{#lambda.camelcase_sanitize_param}}{{name}}{{/lambda.camelcase_sanitize_param}}{{#vendorExtensions.x-is-value-type}}{{^isNullable}}.Value{{/isNullable}}{{/vendorExtensions.x-is-value-type}} {{/model.composedSchemas.anyOf}}{{#allVars}}{{#lambda.camelcase_sanitize_param}}{{name}}{{/lambda.camelcase_sanitize_param}}{{#required}}ParsedValue{{/required}} {{/allVars}}{{/lambda.joinWithComma}});
309311

312+
{{/vendorExtensions.x-duplicated-data-type}}
310313
{{#-last}}
311314
throw new JsonException();
312315
{{/-last}}
@@ -315,6 +318,7 @@
315318
{{/model.discriminator}}
316319
{{/vendorExtensions.x-duplicated-data-type}}
317320
{{/lambda.trimLineBreaks}}
321+
{{/lambda.trimTrailingWithNewLine}}
318322
}
319323

320324
/// <summary>
@@ -331,22 +335,24 @@
331335

332336
{{#model.discriminator}}
333337
{{#model.hasDiscriminatorWithNonEmptyMapping}}
334-
{{#mappedModels}}
335-
if ({{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{model.classname}} != null) {
336-
{{model.classname}}JsonConverter {{#lambda.camelcase_sanitize_param}}{{model.classname}}JsonConverter{{/lambda.camelcase_sanitize_param}} = ({{model.classname}}JsonConverter) jsonSerializerOptions.Converters.First(c => c.CanConvert({{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{model.classname}}.GetType()));
337-
{{#lambda.camelcase_sanitize_param}}{{model.classname}}JsonConverter{{/lambda.camelcase_sanitize_param}}.WriteProperties(ref writer, {{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{model.classname}}, jsonSerializerOptions);
338+
{{#composedSchemas.oneOf}}
339+
{{^vendorExtensions.x-duplicated-data-type}}
340+
if ({{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}} != null) {
341+
{{baseType}}JsonConverter {{#lambda.camelcase_sanitize_param}}{{baseType}}JsonConverter{{/lambda.camelcase_sanitize_param}} = ({{baseType}}JsonConverter) jsonSerializerOptions.Converters.First(c => c.CanConvert({{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}.GetType()));
342+
{{#lambda.camelcase_sanitize_param}}{{baseType}}JsonConverter{{/lambda.camelcase_sanitize_param}}.WriteProperties(ref writer, {{#lambda.camelcase_sanitize_param}}{{classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}, jsonSerializerOptions);
338343
}
339344

340-
{{/mappedModels}}
345+
{{/vendorExtensions.x-duplicated-data-type}}
346+
{{/composedSchemas.oneOf}}
341347
{{/model.hasDiscriminatorWithNonEmptyMapping}}
342348
{{/model.discriminator}}
343349
{{^model.discriminator}}
344350
{{#composedSchemas}}
345351
{{#anyOf}}
346-
if ({{#lambda.joinWithAmpersand}}{{^required}}{{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{datatypeWithEnum}}Option.IsSet {{/required}}{{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{datatypeWithEnum}}{{^required}}Option.Value{{/required}} != null{{/lambda.joinWithAmpersand}})
352+
if ({{#lambda.joinWithAmpersand}}{{^required}}{{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}Option.IsSet {{/required}}{{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}{{^required}}Option.Value{{/required}} != null{{/lambda.joinWithAmpersand}})
347353
{
348-
{{datatypeWithEnum}}JsonConverter {{datatypeWithEnum}}JsonConverter = ({{datatypeWithEnum}}JsonConverter) jsonSerializerOptions.Converters.First(c => c.CanConvert({{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{datatypeWithEnum}}{{^required}}Option.Value{{/required}}.GetType()));
349-
{{datatypeWithEnum}}JsonConverter.WriteProperties(ref writer, {{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{datatypeWithEnum}}{{^required}}Option.Value{{/required}}, jsonSerializerOptions);
354+
{{datatypeWithEnum}}JsonConverter {{datatypeWithEnum}}JsonConverter = ({{datatypeWithEnum}}JsonConverter) jsonSerializerOptions.Converters.First(c => c.CanConvert({{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}{{^required}}Option.Value{{/required}}.GetType()));
355+
{{datatypeWithEnum}}JsonConverter.WriteProperties(ref writer, {{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}{{^required}}Option.Value{{/required}}, jsonSerializerOptions);
350356
}
351357

352358
{{/anyOf}}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{#model.allVars}}{{^required}}Option<{{/required}}{{{datatypeWithEnum}}}{{>NullConditionalProperty}}{{^required}}>{{/required}} {{#lambda.camelcase_sanitize_param}}{{name}}{{/lambda.camelcase_sanitize_param}}{{#defaultValue}} = {{^required}}default{{/required}}{{#required}}{{^isDateTime}}{{#isString}}{{^isEnum}}@{{/isEnum}}{{/isString}}{{{.}}}{{/isDateTime}}{{#isDateTime}}default{{/isDateTime}}{{/required}}{{/defaultValue}}{{^defaultValue}}{{#lambda.first}}{{#isNullable}} = default {{/isNullable}}{{^required}} = default {{/required}}{{/lambda.first}}{{/defaultValue}} {{/model.allVars}}
1+
{{#model.allVars}}{{^required}}Option<{{/required}}{{{datatypeWithEnum}}}{{>NullConditionalProperty}}{{^required}}>{{/required}} {{#lambda.escape_reserved_word}}{{#lambda.camel_case}}{{name}}{{/lambda.camel_case}}{{/lambda.escape_reserved_word}}{{#defaultValue}} = {{^required}}default{{/required}}{{#required}}{{^isDateTime}}{{#isString}}{{^isEnum}}@{{/isEnum}}{{/isString}}{{{.}}}{{/isDateTime}}{{#isDateTime}}default{{/isDateTime}}{{/required}}{{/defaultValue}}{{^defaultValue}}{{#lambda.first}}{{#isNullable}} = default {{/isNullable}}{{^required}} = default {{/required}}{{/lambda.first}}{{/defaultValue}} {{/model.allVars}}

0 commit comments

Comments
 (0)