From d6ba75e788a3378b93b43f76170653f682fa7040 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Sat, 5 Mar 2022 12:59:12 +0300 Subject: [PATCH] typealias support --- .../touchin/codegen/TINetworkingCodegen.java | 44 +++++++++++++++++-- .../handlebars/TINetworking/model.mustache | 5 +++ .../TINetworking/modelObject.mustache | 9 +--- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/main/java/ru/touchin/codegen/TINetworkingCodegen.java b/src/main/java/ru/touchin/codegen/TINetworkingCodegen.java index 0f2c4c1..03c8749 100644 --- a/src/main/java/ru/touchin/codegen/TINetworkingCodegen.java +++ b/src/main/java/ru/touchin/codegen/TINetworkingCodegen.java @@ -5,9 +5,7 @@ import io.swagger.codegen.v3.*; import io.swagger.codegen.v3.generators.DefaultCodegenConfig; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; -import io.swagger.v3.oas.models.media.ArraySchema; -import io.swagger.v3.oas.models.media.MapSchema; -import io.swagger.v3.oas.models.media.Schema; +import io.swagger.v3.oas.models.media.*; import io.swagger.v3.oas.models.parameters.RequestBody; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.text.WordUtils; @@ -285,7 +283,10 @@ public class TINetworkingCodegen extends DefaultCodegenConfig { @Override public CodegenParameter fromRequestBody(RequestBody body, String name, Schema schema, Map schemas, Set imports) { CodegenParameter codegenParameter = super.fromRequestBody(body, name, schema, schemas, imports); - codegenParameter.description = codegenParameter.description == null ? schema.getDescription() : codegenParameter.description; + codegenParameter.description = codegenParameter.getDescription() == null + ? schema.getDescription() + : codegenParameter.getDescription(); + return codegenParameter; } @@ -477,6 +478,41 @@ public class TINetworkingCodegen extends DefaultCodegenConfig { return codegenModel; } + @Override + public CodegenProperty fromProperty(String name, Schema propertySchema) { + CodegenProperty codegenProperty = super.fromProperty(name, propertySchema); + + if (typeAliases.containsKey(codegenProperty.baseType)) { + Schema resolvedPropertySchema = getOpenAPI().getComponents().getSchemas().get(codegenProperty.datatype); + + postProcessAliasProperty(codegenProperty, resolvedPropertySchema); + } + + return codegenProperty; + } + + private void postProcessAliasProperty(CodegenProperty codegenProperty, Schema resolvedPropertySchema) { + Map propertyExtensions = codegenProperty.getVendorExtensions(); + + propertyExtensions.put(CodegenConstants.IS_ALIAS_EXT_NAME, Boolean.TRUE); + + codegenProperty.setDescription(codegenProperty.getDescription() == null + ? resolvedPropertySchema.getDescription() + : codegenProperty.getDescription()); + + if (resolvedPropertySchema.getExtensions() != null) { + propertyExtensions.putAll(resolvedPropertySchema.getExtensions()); + } + + if (resolvedPropertySchema instanceof DateSchema) { + propertyExtensions.put(CodegenConstants.IS_DATE_EXT_NAME, Boolean.TRUE); + } + + if (resolvedPropertySchema instanceof DateTimeSchema) { + propertyExtensions.put(CodegenConstants.IS_DATE_TIME_EXT_NAME, Boolean.TRUE); + } + } + @Override public Map postProcessSupportingFileData(Map objs) { Map supportingFileData = super.postProcessSupportingFileData(objs); diff --git a/src/main/resources/handlebars/TINetworking/model.mustache b/src/main/resources/handlebars/TINetworking/model.mustache index 189aced..c929246 100644 --- a/src/main/resources/handlebars/TINetworking/model.mustache +++ b/src/main/resources/handlebars/TINetworking/model.mustache @@ -18,7 +18,12 @@ import Foundation {{> modelEnum}} {{/isEnum}} {{^isEnum}} +{{#isAlias}} +public typealias {{classname}} = {{dataType}} +{{/isAlias}} +{{^isAlias}} {{> modelObject}} +{{/isAlias}} {{/isEnum}} {{/isArrayModel}} {{/model}} diff --git a/src/main/resources/handlebars/TINetworking/modelObject.mustache b/src/main/resources/handlebars/TINetworking/modelObject.mustache index 5a08bed..a47542b 100644 --- a/src/main/resources/handlebars/TINetworking/modelObject.mustache +++ b/src/main/resources/handlebars/TINetworking/modelObject.mustache @@ -22,7 +22,7 @@ public {{#useModelClasses}}class{{/useModelClasses}}{{^useModelClasses}}struct{{ {{#hasVars}} private enum CodingKeys: String, CodingKey { {{#allVars}} - case {{name}} + case {{name}}{{#vendorExtensions.x-codegen-escaped-property-name}} = "{{{baseName}}}"{{/vendorExtensions.x-codegen-escaped-property-name}} {{/allVars}} } @@ -103,12 +103,5 @@ public {{#useModelClasses}}class{{/useModelClasses}}{{^useModelClasses}}struct{{ } {{/additionalPropertiesType}} -{{^additionalPropertiesType}} - -{{#vendorExtensions.x-codegen-has-escaped-property-names}} - public enum CodingKeys: String, CodingKey { {{#allVars}} - case {{name}}{{#vendorExtensions.x-codegen-escaped-property-name}} = "{{{baseName}}}"{{/vendorExtensions.x-codegen-escaped-property-name}}{{/allVars}} - } -{{/vendorExtensions.x-codegen-has-escaped-property-names}}{{/additionalPropertiesType}} }