Skip to content

Commit d33f96c

Browse files
feat(go): activate generator support for resolving inline-enums (#272)
* feat(go): activate generator support for resolving inline-enums * feat(go): generate region always as string * fix(go): commit missing files * fix(go): move custom generator compile out of loop, ignore region files --------- Co-authored-by: Ruben Hoenle <Ruben.Hoenle@digits.schwarz>
1 parent 4f30616 commit d33f96c

5 files changed

Lines changed: 85 additions & 4 deletions

File tree

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
uses: actions/setup-go@v5
2929
with:
3030
go-version: ${{ matrix.go-version }}
31-
31+
3232
- name: Install project tools and dependencies
3333
shell: bash
3434
run: make project-tools

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
custom
12
# IDE
23
*.vscode/
34
*.idea

CustomRegionGenerator.java

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package cloud.stackit.codegen;
2+
3+
import org.openapitools.codegen.CodegenProperty;
4+
import org.openapitools.codegen.languages.GoClientCodegen;
5+
6+
import org.openapitools.codegen.CodegenParameter;
7+
8+
import java.util.Set;
9+
import io.swagger.v3.oas.models.media.Schema;
10+
import io.swagger.v3.oas.models.parameters.Parameter;
11+
12+
public class CustomRegionGenerator extends GoClientCodegen {
13+
14+
@Override
15+
public String getName() {
16+
// This is the name you will pass to the -g flag
17+
return "cloud.stackit.codegen.CustomRegionGenerator";
18+
}
19+
20+
public CustomRegionGenerator() {
21+
super();
22+
System.out.println("=== CUSTOM GO CLIENT GENERATOR INITIALIZED ===");
23+
}
24+
25+
@Override
26+
public CodegenProperty fromProperty(String name, Schema p, boolean required) {
27+
CodegenProperty property = super.fromProperty(name, p, required);
28+
29+
if (isRegionField(property.name)) {
30+
property.dataType = "string";
31+
property.datatypeWithEnum = "string";
32+
property.baseType = "string";
33+
34+
// Force template engine to treat this as a string
35+
property.isString = true;
36+
property.isInteger = false;
37+
property.isLong = false;
38+
property.isNumber = false;
39+
property.isNumeric = false;
40+
}
41+
return property;
42+
}
43+
44+
/**
45+
* Intercepts operation parameters (query, path, header, body).
46+
*/
47+
@Override
48+
public CodegenParameter fromParameter(Parameter param, Set<String> imports) {
49+
CodegenParameter parameter = super.fromParameter(param, imports);
50+
51+
if (isRegionField(parameter.paramName)) {
52+
parameter.dataType = "string";
53+
54+
// Force template engine to treat this as a string
55+
parameter.isString = true;
56+
parameter.isInteger = false;
57+
parameter.isLong = false;
58+
parameter.isNumber = false;
59+
// If it was previously an enum or another complex type, clear it
60+
parameter.isEnum = false;
61+
}
62+
return parameter;
63+
}
64+
65+
private boolean isRegionField(String name) {
66+
if (name == null) {
67+
return false;
68+
}
69+
return name.equalsIgnoreCase("region") || name.equalsIgnoreCase("regionId");
70+
}
71+
}

languages/golang/.openapi-generator-ignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@ git_push.sh
33
.travis.yml
44
.gitignore
55
api/openapi.yaml
6+
*_region_id_parameter.go
7+
*_region_parameter.go

scripts/generate-sdk/languages/go.sh

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ generate_go_sdk() {
107107
# see https://openapi-generator.tech/docs/file-post-processing/
108108
export GO_POST_PROCESS_FILE="gofmt -w"
109109

110+
# compile custom generator
111+
cd ${ROOT_DIR}
112+
mkdir -p custom/cloud/stackit/codegen
113+
javac -cp "${GENERATOR_JAR_PATH}" CustomRegionGenerator.java
114+
mv CustomRegionGenerator.class custom/cloud/stackit/codegen/CustomRegionGenerator.class
115+
110116
warning=""
111117

112118
for service_dir in "${ROOT_DIR}/oas/services"/*; do
@@ -161,8 +167,9 @@ generate_go_sdk() {
161167
cp "${ROOT_DIR}/languages/golang/.openapi-generator-ignore" "${SERVICES_FOLDER}/${service}/${version}api/.openapi-generator-ignore"
162168

163169
# Run the generator for Go
164-
java -Dlog.level=${GENERATOR_LOG_LEVEL} -jar ${jar_path} generate \
165-
--generator-name go \
170+
java -Dlog.level=${GENERATOR_LOG_LEVEL} -cp "custom:scripts/bin/openapi-generator-cli.jar" \
171+
org.openapitools.codegen.OpenAPIGenerator generate \
172+
-g cloud.stackit.codegen.CustomRegionGenerator \
166173
--input-spec "${service_version_json}" \
167174
--output "${SERVICES_FOLDER}/${service}/${version}api" \
168175
--package-name "${version}api" \
@@ -171,7 +178,7 @@ generate_go_sdk() {
171178
--git-user-id "${GIT_USER_ID}" \
172179
--git-repo-id "${GIT_REPO_ID}/services/${service}" \
173180
--global-property apis,models,modelTests=true,modelDocs=false,apiDocs=false,supportingFiles,apiTests=false\
174-
--inline-schema-options "SKIP_SCHEMA_REUSE=true" \
181+
--inline-schema-options "SKIP_SCHEMA_REUSE=true,RESOLVE_INLINE_ENUMS=true" \
175182
--http-user-agent "stackit-sdk-go/${service}" \
176183
--reserved-words-mappings type=types \
177184
--config "${ROOT_DIR}/languages/golang/openapi-generator-config.yml"

0 commit comments

Comments
 (0)