Skip to content

Commit f8e19b4

Browse files
authored
added equatable option (#16106)
1 parent 6983a3a commit f8e19b4

File tree

22 files changed

+39
-26
lines changed

22 files changed

+39
-26
lines changed

docs/generators/csharp.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
2525
|dateFormat|The default Date format (only `generichost` library supports this option).| |yyyy'-'MM'-'dd|
2626
|dateTimeFormat|The default DateTime format (only `generichost` library supports this option).| |yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK|
2727
|disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|<dl><dt>**false**</dt><dd>The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.</dd><dt>**true**</dt><dd>Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.</dd></dl>|true|
28+
|equatable|Overrides Equals and GetHashCode methods.| |true|
2829
|hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true|
2930
|interfacePrefix|Prefix interfaces with a community standard or widely accepted prefix.| |I|
3031
|library|HTTP library template (sub-template) to use|<dl><dt>**generichost**</dt><dd>HttpClient with Generic Host dependency injection (https://docs.microsoft.com/en-us/dotnet/core/extensions/generic-host) (Experimental. Subject to breaking changes without notice.)</dd><dt>**httpclient**</dt><dd>HttpClient (https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient) (Experimental. Subject to breaking changes without notice.)</dd><dt>**unityWebRequest**</dt><dd>UnityWebRequest (...) (Experimental. Subject to breaking changes without notice.)</dd><dt>**restsharp**</dt><dd>RestSharp (https://github.com/restsharp/RestSharp)</dd></dl>|restsharp|

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,9 @@ public static enum ENUM_PROPERTY_NAMING_TYPE {camelCase, PascalCase, snake_case,
320320
public static final String VALIDATABLE = "validatable";
321321
public static final String VALIDATABLE_DESC = "Generates self-validatable models.";
322322

323+
public static final String EQUATABLE = "equatable";
324+
public static final String EQUATABLE_DESC = "Overrides Equals and GetHashCode methods.";
325+
323326
public static final String IGNORE_FILE_OVERRIDE = "ignoreFileOverride";
324327
public static final String IGNORE_FILE_OVERRIDE_DESC = "Specifies an override location for the .openapi-generator-ignore file. Most useful on initial generation.";
325328

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,8 @@ protected ImmutableMap.Builder<String, Lambda> addMustacheLambdas() {
416416
.put("joinWithComma", new JoinWithCommaLambda())
417417
.put("trimLineBreaks", new TrimLineBreaksLambda())
418418
.put("trimTrailingWhiteSpace", new TrimTrailingWhiteSpaceLambda())
419-
.put("first", new FirstLambda())
419+
.put("first", new FirstLambda(" "))
420+
.put("firstDot", new FirstLambda("\\."))
420421
.put("indent3", new IndentedLambda(12, " "))
421422
.put("indent4", new IndentedLambda(16, " "));
422423
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen {
114114
protected boolean supportsFileParameters = Boolean.TRUE;
115115

116116
protected boolean validatable = Boolean.TRUE;
117+
protected boolean equatable = Boolean.TRUE;
117118
protected Map<Character, String> regexModifiers;
118119
// By default, generated code is considered public
119120
protected boolean nonPublicApi = Boolean.FALSE;
@@ -318,6 +319,10 @@ public CSharpClientCodegen() {
318319
CodegenConstants.CASE_INSENSITIVE_RESPONSE_HEADERS_DESC,
319320
this.caseInsensitiveResponseHeaders);
320321

322+
addSwitch(CodegenConstants.EQUATABLE,
323+
CodegenConstants.EQUATABLE_DESC,
324+
this.equatable);
325+
321326
regexModifiers = new HashMap<>();
322327
regexModifiers.put('i', "IgnoreCase");
323328
regexModifiers.put('m', "Multiline");
@@ -820,6 +825,7 @@ public void processOpts() {
820825

821826
syncBooleanProperty(additionalProperties, "netStandard", this::setNetStandard, this.netStandard);
822827

828+
syncBooleanProperty(additionalProperties, CodegenConstants.EQUATABLE, this::setEquatable, this.equatable);
823829
syncBooleanProperty(additionalProperties, CodegenConstants.VALIDATABLE, this::setValidatable, this.validatable);
824830
syncBooleanProperty(additionalProperties, CodegenConstants.SUPPORTS_ASYNC, this::setSupportsAsync, this.supportsAsync);
825831
syncBooleanProperty(additionalProperties, SUPPORTS_RETRY, this::setSupportsRetry, this.supportsRetry);
@@ -1183,6 +1189,10 @@ public void setValidatable(boolean validatable) {
11831189
this.validatable = validatable;
11841190
}
11851191

1192+
public void setEquatable(boolean equatable) {
1193+
this.equatable = equatable;
1194+
}
1195+
11861196
public void setCaseInsensitiveResponseHeaders(final Boolean caseInsensitiveResponseHeaders) {
11871197
this.caseInsensitiveResponseHeaders = caseInsensitiveResponseHeaders;
11881198
}

modules/openapi-generator/src/main/java/org/openapitools/codegen/templating/mustache/FirstLambda.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,19 @@
3737
* </pre>
3838
*/
3939
public class FirstLambda implements Mustache.Lambda {
40-
public FirstLambda() {
40+
private final String delimiter;
4141

42+
public FirstLambda(String delimiter) {
43+
this.delimiter = delimiter;
4244
}
4345

4446
@Override
4547
public void execute(Template.Fragment fragment, Writer writer) throws IOException {
46-
String[] parts = fragment.execute().trim().split(" ");
48+
49+
String a = fragment.execute();
50+
51+
52+
String[] parts = fragment.execute().split(this.delimiter);
4753

4854
writer.write(Arrays.stream(parts).findFirst().orElse(""));
4955
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
{{#readOnlyVars}}
2-
{{#-first}}
3-
{{#parent}}, {{/parent}}{{^parent}} : {{/parent}}IEquatable<{{classname}}{{nrt?}}>{{/-first}}{{/readOnlyVars}}
1+
{{#equatable}}{{#readOnlyVars}}{{#-first}}IEquatable<{{classname}}{{nrt?}}> {{/-first}}{{/readOnlyVars}}{{/equatable}}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
1-
{{#validatable}}
2-
{{^parent}}
3-
{{^readOnlyVars}}
4-
: {{/readOnlyVars}}{{/parent}}{{#parent}}{{^readOnlyVars}}, {{/readOnlyVars}}{{/parent}}{{^parent}}{{#readOnlyVars}}{{#-first}}, {{/-first}}{{/readOnlyVars}}{{/parent}}IValidatableObject{{/validatable}}
1+
{{#validatable}}IValidatableObject {{/validatable}}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/// <summary>
22
/// {{description}}{{^description}}{{classname}}{{/description}}
33
/// </summary>
4-
{{>visibility}} partial class {{classname}}{{#parent}} : {{{.}}}{{/parent}}{{>ImplementsIEquatable}}{{>ImplementsValidatable}}
4+
{{>visibility}} partial class {{classname}}{{#lambda.firstDot}}{{#parent}} : .{{/parent}}{{#validatable}} : .{{/validatable}}{{#equatable}} : .{{/equatable}}{{/lambda.firstDot}}{{#lambda.joinWithComma}}{{#parent}}{{{.}}} {{/parent}}{{>ImplementsIEquatable}}{{#validatable}}IValidatableObject {{/validatable}}{{/lambda.joinWithComma}}
55
{
66
{{#composedSchemas.oneOf}}
77
{{^vendorExtensions.x-duplicated-data-type}}
@@ -200,6 +200,7 @@
200200
sb.Append("}\n");
201201
return sb.ToString();
202202
}
203+
{{#equatable}}
203204
{{#readOnlyVars}}
204205
{{#-first}}
205206

@@ -294,6 +295,7 @@
294295
}
295296
{{/-first}}
296297
{{/readOnlyVars}}
298+
{{/equatable}}
297299
{{#validatable}}
298300
{{^parentModel}}
299301

modules/openapi-generator/src/main/resources/csharp/modelAnyOf.mustache

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
{{/vendorExtensions.x-com-visible}}
1111
[JsonConverter(typeof({{classname}}JsonConverter))]
1212
[DataContract(Name = "{{{name}}}")]
13-
{{>visibility}} partial class {{classname}} : AbstractOpenAPISchema, {{#parent}}{{{.}}}, {{/parent}}IEquatable<{{classname}}>{{#validatable}}, IValidatableObject{{/validatable}}
13+
{{>visibility}} partial class {{classname}} : AbstractOpenAPISchema, {{#lambda.joinWithComma}}{{#parent}}{{{.}}} {{/parent}}{{#equatable}}IEquatable<{{classname}}> {{/equatable}}{{#validatable}}IValidatableObject {{/validatable}}{{/lambda.joinWithComma}}
1414
{
1515
{{#isNullable}}
1616
/// <summary>
@@ -137,6 +137,7 @@
137137
// no match found, throw an exception
138138
throw new InvalidDataException("The JSON string `" + jsonString + "` cannot be deserialized into any schema defined.");
139139
}
140+
{{#equatable}}
140141

141142
/// <summary>
142143
/// Returns true if objects are equal
@@ -185,6 +186,7 @@
185186
return hashCode;
186187
}
187188
}
189+
{{/equatable}}
188190

189191
{{#validatable}}
190192
/// <summary>

modules/openapi-generator/src/main/resources/csharp/modelGeneric.mustache

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
{{/mappedModels}}
1717
{{/discriminator}}
1818
{{/useUnityWebRequest}}
19-
{{>visibility}} partial class {{classname}} : {{#parent}}{{{.}}}, {{/parent}}IEquatable<{{classname}}>{{#validatable}}, IValidatableObject{{/validatable}}
19+
{{>visibility}} partial class {{classname}}{{#lambda.firstDot}}{{#parent}} : .{{/parent}}{{#validatable}} : .{{/validatable}}{{#equatable}} : .{{/equatable}}{{/lambda.firstDot}}{{#lambda.joinWithComma}}{{#parent}}{{{.}}} {{/parent}}{{#equatable}}IEquatable<{{classname}}> {{/equatable}}{{#validatable}}IValidatableObject {{/validatable}}{{/lambda.joinWithComma}}
2020
{
2121
{{#vars}}
2222
{{#items.isEnum}}
@@ -327,6 +327,7 @@
327327
{
328328
return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
329329
}
330+
{{#equatable}}
330331

331332
/// <summary>
332333
/// Returns true if objects are equal
@@ -415,6 +416,7 @@
415416
return hashCode;
416417
}
417418
}
419+
{{/equatable}}
418420

419421
{{#validatable}}
420422
{{>validatable}}

0 commit comments

Comments
 (0)