From 40ec016c87a98870498c48e173f72451cd7551ab Mon Sep 17 00:00:00 2001 From: Sai Giridhar P Date: Wed, 29 May 2019 17:09:54 +0530 Subject: [PATCH] [csharp] Make API response headers dictionary case insensitive (#2998) * fix(response-headers): Making response headers case insensitive * fix(response-headers): Making response headers case insensitive * feat(csharp): Headers case insensitive * feat(csharp): Making API response's headers case-insensitive * feat(csharp): Indentation fix * feat(csharp): Indentation fix * feat(csharp): Adding generator's documentation --- docs/generators/csharp.md | 1 + .../org/openapitools/codegen/CodegenConstants.java | 2 ++ .../codegen/languages/CSharpClientCodegen.java | 11 +++++++++++ .../src/main/resources/csharp/api.mustache | 8 ++++---- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/docs/generators/csharp.md b/docs/generators/csharp.md index 6bc0fc3a539..0ebac9b6770 100644 --- a/docs/generators/csharp.md +++ b/docs/generators/csharp.md @@ -28,3 +28,4 @@ sidebar_label: csharp |netCoreProjectFile|Use the new format (.NET Core) for .NET project files (.csproj).| |false| |validatable|Generates self-validatable models.| |true| |useCompareNetObjects|Use KellermanSoftware.CompareNetObjects for deep recursive object comparison. WARNING: this option incurs potential performance impact.| |false| +|caseInsensitiveResponseHeaders|Make API response's headers case-insensitive| |false| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java index 75fcb1cba68..61134701d5f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java @@ -232,6 +232,8 @@ public class CodegenConstants { public static final String PARCELIZE_MODELS = "parcelizeModels"; public static final String PARCELIZE_MODELS_DESC = "toggle \"@Parcelize\" for generated models"; + public static final String CASE_INSENSITIVE_RESPONSE_HEADERS = "caseInsensitiveResponseHeaders"; + public static final String CASE_INSENSITIVE_RESPONSE_HEADERS_DESC = "Make API response's headers case-insensitive"; // Not user-configurable. System provided for use in templates. diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpClientCodegen.java index c5f093eb23a..8ef2fde34a2 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpClientCodegen.java @@ -73,6 +73,9 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { // use KellermanSoftware.CompareNetObjects for deep recursive object comparision protected boolean useCompareNetObjects = Boolean.FALSE; + // To make API response's headers dictionary case insensitive + protected boolean caseInsensitiveResponseHeaders = Boolean.FALSE; + public CSharpClientCodegen() { super(); supportsInheritance = true; @@ -199,6 +202,10 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { CodegenConstants.USE_COMPARE_NET_OBJECTS_DESC, this.useCompareNetObjects); + addSwitch(CodegenConstants.CASE_INSENSITIVE_RESPONSE_HEADERS, + CodegenConstants.CASE_INSENSITIVE_RESPONSE_HEADERS_DESC, + this.caseInsensitiveResponseHeaders); + regexModifiers = new HashMap(); regexModifiers.put('i', "IgnoreCase"); regexModifiers.put('m', "Multiline"); @@ -802,6 +809,10 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { this.useCompareNetObjects = useCompareNetObjects; } + public void setCaseInsensitiveResponseHeaders(final Boolean caseInsensitiveResponseHeaders) { + this.caseInsensitiveResponseHeaders = caseInsensitiveResponseHeaders; + } + public boolean isNonPublicApi() { return nonPublicApi; } diff --git a/modules/openapi-generator/src/main/resources/csharp/api.mustache b/modules/openapi-generator/src/main/resources/csharp/api.mustache index 22ee80b69e3..f3f3f7e578d 100644 --- a/modules/openapi-generator/src/main/resources/csharp/api.mustache +++ b/modules/openapi-generator/src/main/resources/csharp/api.mustache @@ -308,12 +308,12 @@ namespace {{packageName}}.{{apiPackage}} {{#returnType}} return new ApiResponse<{{{returnType}}}>(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value)), + localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value){{#caseInsensitiveResponseHeaders}}, StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}), ({{{returnType}}}) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof({{#returnContainer}}{{{returnContainer}}}{{/returnContainer}}{{^returnContainer}}{{{returnType}}}{{/returnContainer}}))); {{/returnType}} {{^returnType}} return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value)), + localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value){{#caseInsensitiveResponseHeaders}}, StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}), null); {{/returnType}} } @@ -444,12 +444,12 @@ namespace {{packageName}}.{{apiPackage}} {{#returnType}} return new ApiResponse<{{{returnType}}}>(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value)), + localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value){{#caseInsensitiveResponseHeaders}}, StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}), ({{{returnType}}}) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof({{#returnContainer}}{{{returnContainer}}}{{/returnContainer}}{{^returnContainer}}{{{returnType}}}{{/returnContainer}}))); {{/returnType}} {{^returnType}} return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value)), + localVarResponse.Headers.ToDictionary(x => x.{{^netStandard}}Name{{/netStandard}}{{#netStandard}}Key{{/netStandard}}, x => string.Join(",", x.Value){{#caseInsensitiveResponseHeaders}}, StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}), null); {{/returnType}} }