support array of Dates encoding/decoding

This commit is contained in:
Ivan Smolin 2022-04-12 18:29:17 +03:00
parent fc7312aec1
commit 8ca770db9d
3 changed files with 48 additions and 14 deletions

View File

@ -5,7 +5,7 @@
<artifactId>TINetworking-swagger-codegen</artifactId>
<packaging>jar</packaging>
<name>TINetworking-swagger-codegen</name>
<version>1.1.6</version>
<version>1.1.7</version>
<build>
<plugins>
<plugin>

View File

@ -662,21 +662,30 @@ public class TINetworkingCodegen extends DefaultCodegenConfig {
public void postProcessModelProperty(CodegenModel model, CodegenProperty property) {
super.postProcessModelProperty(model, property);
Map<String, Object> 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<String, Object> 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);
}
}

View File

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