Skip to content

Commit 15f8d6b

Browse files
committed
create go structs composition from composed schemas
1 parent ce34c34 commit 15f8d6b

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

src/main/java/io/swagger/codegen/v3/generators/go/AbstractGoCodegen.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package io.swagger.codegen.v3.generators.go;
22

33
import io.swagger.codegen.v3.CliOption;
4-
import io.swagger.codegen.v3.CodegenConfig;
54
import io.swagger.codegen.v3.CodegenConstants;
65
import io.swagger.codegen.v3.CodegenContent;
76
import io.swagger.codegen.v3.CodegenModel;
87
import io.swagger.codegen.v3.CodegenOperation;
98
import io.swagger.codegen.v3.CodegenParameter;
109
import io.swagger.codegen.v3.CodegenProperty;
10+
import io.swagger.codegen.v3.ISchemaHandler;
1111
import io.swagger.codegen.v3.generators.DefaultCodegenConfig;
12+
import io.swagger.codegen.v3.generators.util.OpenAPIUtil;
1213
import io.swagger.v3.core.util.Yaml;
1314
import io.swagger.v3.oas.models.OpenAPI;
1415
import io.swagger.v3.oas.models.media.ArraySchema;
@@ -267,6 +268,14 @@ public String getTypeDeclaration(Schema schema) {
267268
@Override
268269
public String getSchemaType(Schema schema) {
269270
String schemaType = super.getSchemaType(schema);
271+
272+
if (schema.get$ref() != null) {
273+
final Schema refSchema = OpenAPIUtil.getSchemaFromName(schemaType, this.openAPI);
274+
if (refSchema != null && !isObjectSchema(refSchema)) {
275+
schemaType = super.getSchemaType(refSchema);
276+
}
277+
}
278+
270279
String type;
271280
if(typeMapping.containsKey(schemaType)) {
272281
type = typeMapping.get(schemaType);
@@ -547,4 +556,9 @@ public CodegenModel fromModel(String name, Schema schema, Map<String, Schema> al
547556

548557
return codegenModel;
549558
}
559+
560+
@Override
561+
public ISchemaHandler getSchemaHandler() {
562+
return new GoSchemaHandler(this);
563+
}
550564
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.swagger.codegen.v3.generators.go;
2+
3+
import io.swagger.codegen.v3.CodegenModel;
4+
import io.swagger.codegen.v3.generators.DefaultCodegenConfig;
5+
import io.swagger.codegen.v3.generators.SchemaHandler;
6+
import io.swagger.v3.oas.models.media.Schema;
7+
import org.apache.commons.lang3.StringUtils;
8+
9+
import java.util.List;
10+
import java.util.Map;
11+
12+
public class GoSchemaHandler extends SchemaHandler {
13+
14+
public GoSchemaHandler(DefaultCodegenConfig codegenConfig) {
15+
super(codegenConfig);
16+
}
17+
18+
protected void addInterfaces(List<Schema> schemas, CodegenModel composedModel, Map<String, CodegenModel> allModels) {
19+
for (Schema interfaceSchema : schemas) {
20+
final String ref = interfaceSchema.get$ref();
21+
if (StringUtils.isBlank(ref)) {
22+
continue;
23+
}
24+
final String schemaName = ref.substring(ref.lastIndexOf("/") + 1);
25+
this.addInterfaceModel(composedModel, allModels.get(codegenConfig.toModelName(schemaName)));
26+
}
27+
}
28+
}

src/main/resources/handlebars/go/model.mustache

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ const (
1919
){{/isEnum}}{{^isEnum}}{{#description}}
2020
// {{{description}}}{{/description}}
2121
type {{classname}} struct {
22+
{{#isComposedModel}}
23+
{{#interfaceModels}}
24+
{{classname}}
25+
{{/interfaceModels}}
26+
{{/isComposedModel}}
27+
{{^isComposedModel}}
2228
{{#vars}}
2329
{{^@first}}
2430
{{/@first}}
@@ -27,4 +33,5 @@ type {{classname}} struct {
2733
{{/description}}
2834
{{name}} {{^isEnum}}{{^isPrimitiveType}}{{^isContainer}}{{^isDateTime}}*{{/isDateTime}}{{/isContainer}}{{/isPrimitiveType}}{{/isEnum}}{{{datatype}}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#withXml}} xml:"{{baseName}}"{{/withXml}}`
2935
{{/vars}}
36+
{{/isComposedModel}}
3037
}{{/isEnum}}{{/model}}{{/models}}

src/main/resources/mustache/go/model.mustache

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ const (
1919
){{/isEnum}}{{^isEnum}}{{#description}}
2020
// {{{description}}}{{/description}}
2121
type {{classname}} struct {
22+
{{#isComposedModel}}
23+
{{#interfaceModels}}
24+
{{classname}}
25+
{{/interfaceModels}}
26+
{{/isComposedModel}}
27+
{{^isComposedModel}}
2228
{{#vars}}
2329
{{^-first}}
2430
{{/-first}}
@@ -27,4 +33,5 @@ type {{classname}} struct {
2733
{{/description}}
2834
{{name}} {{^isEnum}}{{^isPrimitiveType}}{{^isContainer}}{{^isDateTime}}*{{/isDateTime}}{{/isContainer}}{{/isPrimitiveType}}{{/isEnum}}{{{datatype}}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#withXml}} xml:"{{baseName}}"{{/withXml}}`
2935
{{/vars}}
36+
{{/isComposedModel}}
3037
}{{/isEnum}}{{/model}}{{/models}}

0 commit comments

Comments
 (0)