diff --git a/pom.xml b/pom.xml index 3212233..a082e14 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ TINetworking-swagger-codegen jar TINetworking-swagger-codegen - 1.1.6 + 1.1.7 diff --git a/src/main/java/ru/touchin/codegen/TINetworkingCodegen.java b/src/main/java/ru/touchin/codegen/TINetworkingCodegen.java index e3b3be3..21a5527 100644 --- a/src/main/java/ru/touchin/codegen/TINetworkingCodegen.java +++ b/src/main/java/ru/touchin/codegen/TINetworkingCodegen.java @@ -662,21 +662,30 @@ public class TINetworkingCodegen extends DefaultCodegenConfig { public void postProcessModelProperty(CodegenModel model, CodegenProperty property) { super.postProcessModelProperty(model, property); - Map vendorExtensions = property.getVendorExtensions(); - - boolean containsCustomDateFormat = vendorExtensions.containsKey(TINetworkingCodegenConstants.DATE_FORMAT); - if (typeAliases.containsKey(property.baseType)) { Schema resolvedPropertySchema = getOpenAPI().getComponents().getSchemas().get(property.datatype); postProcessAliasProperty(property, resolvedPropertySchema); } - if (property.getIsDate() - || property.getIsDateTime() - && !containsCustomDateFormat) { + updateVendorExtensionsForProperty(property); + + if (property.getIsListContainer()) { + updateVendorExtensionsForProperty(property.items); + } + + if (property.getIsObject() && isReservedWord(property.getDatatype())) { + property.datatype = escapeReservedTypeDeclaration(property.getDatatype()); + property.datatypeWithEnum = property.datatype; + } + } + + private void updateVendorExtensionsForProperty(CodegenProperty property) { + Map vendorExtensions = property.getVendorExtensions(); + + if (isISO8601DateProperty(property)) { vendorExtensions.put(TINetworkingCodegenConstants.IS_ISO8601_DATE, true); - } else if (containsCustomDateFormat) { + } else if (isCustomDateFormatProperty(property)) { String customDateFormat = (String) vendorExtensions.get(TINetworkingCodegenConstants.DATE_FORMAT); String dateFormatName = customDateFormat.replace(".", "_") .replaceAll("[^A-Za-z0-9_]", ""); @@ -684,11 +693,6 @@ public class TINetworkingCodegen extends DefaultCodegenConfig { allCustomDateFormats.put(dateFormatName, customDateFormat); } - - if (property.getIsObject() && isReservedWord(property.getDatatype())) { - property.datatype = escapeReservedTypeDeclaration(property.getDatatype()); - property.datatypeWithEnum = property.datatype; - } } @Override @@ -771,5 +775,15 @@ public class TINetworkingCodegen extends DefaultCodegenConfig { propertyExtensions.put(CodegenConstants.IS_DATE_TIME_EXT_NAME, Boolean.TRUE); } } + + private boolean isISO8601DateProperty(CodegenProperty property) { + return property.getIsDate() + || property.getIsDateTime() + && !isCustomDateFormatProperty(property); + } + + private boolean isCustomDateFormatProperty(CodegenProperty property) { + return property.getVendorExtensions().containsKey(TINetworkingCodegenConstants.DATE_FORMAT); + } } diff --git a/src/main/resources/handlebars/TINetworking/modelObject.mustache b/src/main/resources/handlebars/TINetworking/modelObject.mustache index 001bd5e..9dc210f 100644 --- a/src/main/resources/handlebars/TINetworking/modelObject.mustache +++ b/src/main/resources/handlebars/TINetworking/modelObject.mustache @@ -35,6 +35,15 @@ public {{#useModelClasses}}class{{/useModelClasses}}{{^useModelClasses}}struct{{ public init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) {{#allVars}} + {{#if isListContainer}} + {{#if items.vendorExtensions.x-codegen-is-iso8601-date}} + {{name}} = try container.decodeDates(forKey: .{{name}}, userInfo: decoder.userInfo, options: .{{#items.isDate}}withFullDate{{/items.isDate}}{{#items.isDateTime}}withInternetDateTime{{/items.isDateTime}}{{^required}}, required: false{{/required}}) + {{else if items.vendorExtensions.x-custom-date-format}} + {{name}} = try container.decodeDates(forKey: .{{name}}, userInfo: decoder.userInfo, dateFormat: APIDateFormat.{{items.vendorExtensions.x-codegen-date-format-name}}{{^required}}, required: false{{/required}}) + {{else}} + {{name}} = try container.decode({{{datatypeWithEnum}}}{{^required}}?{{/required}}.self, forKey: .{{name}}{{^required}}, required: false{{/required}}) + {{/if}} + {{else}} {{#if vendorExtensions.x-codegen-is-iso8601-date}} {{name}} = try container.decodeDate(forKey: .{{name}}, userInfo: decoder.userInfo, options: .{{#isDate}}withFullDate{{/isDate}}{{#isDateTime}}withInternetDateTime{{/isDateTime}}{{^required}}, required: false{{/required}}) {{else if vendorExtensions.x-custom-date-format}} @@ -42,6 +51,7 @@ public {{#useModelClasses}}class{{/useModelClasses}}{{^useModelClasses}}struct{{ {{else}} {{name}} = try container.decode({{{datatypeWithEnum}}}{{^required}}?{{/required}}.self, forKey: .{{name}}{{^required}}, required: false{{/required}}) {{/if}} + {{/if}} {{/allVars}} } @@ -49,6 +59,15 @@ public {{#useModelClasses}}class{{/useModelClasses}}{{^useModelClasses}}struct{{ var container = encoder.container(keyedBy: CodingKeys.self) {{#allVars}} + {{#if isListContainer}} + {{#if items.vendorExtensions.x-codegen-is-iso8601-date}} + try container.encode(dates: {{name}}, forKey: .{{name}}, userInfo: encoder.userInfo, options: .{{#items.isDate}}withFullDate{{/items.isDate}}{{#isDateTime}}withInternetDateTime{{/isDateTime}}{{^required}}, required: false{{/required}}) + {{else if items.vendorExtensions.x-custom-date-format}} + try container.encode(dates: {{name}}, forKey: .{{name}}, userInfo: encoder.userInfo, dateFormat: APIDateFormat.{{vendorExtensions.x-codegen-date-format-name}}{{^required}}, required: false{{/required}}) + {{else}} + try container.encode({{name}}, forKey: .{{name}}{{^required}}, required: false{{/required}}) + {{/if}} + {{else}} {{#if vendorExtensions.x-codegen-is-iso8601-date}} try container.encode(date: {{name}}, forKey: .{{name}}, userInfo: encoder.userInfo, options: .{{#isDate}}withFullDate{{/isDate}}{{#isDateTime}}withInternetDateTime{{/isDateTime}}{{^required}}, required: false{{/required}}) {{else if vendorExtensions.x-custom-date-format}} @@ -56,6 +75,7 @@ public {{#useModelClasses}}class{{/useModelClasses}}{{^useModelClasses}}struct{{ {{else}} try container.encode({{name}}, forKey: .{{name}}{{^required}}, required: false{{/required}}) {{/if}} + {{/if}} {{/allVars}} } {{/hasVars}}