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}}