-
-
Notifications
You must be signed in to change notification settings - Fork 6.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[GO] Problem with generating go client code, too many structs re-declared #741
Comments
It's probably problem with tags. Creates the same code for |
A lot of the Opts struct are redeclared and it's everywhere, not just in $ grep -h "type .* struct" * | grep Opts | sort | uniq -c | clipcopy
2 type CreateMsgVpnAclProfileClientConnectExceptionOpts struct {
2 type CreateMsgVpnAclProfileOpts struct {
2 type CreateMsgVpnAclProfilePublishExceptionOpts struct {
2 type CreateMsgVpnAclProfileSubscribeExceptionOpts struct {
2 type CreateMsgVpnAuthorizationGroupOpts struct {
2 type CreateMsgVpnBridgeOpts struct {
2 type CreateMsgVpnBridgeRemoteMsgVpnOpts struct {
2 type CreateMsgVpnBridgeRemoteSubscriptionOpts struct {
2 type CreateMsgVpnBridgeTlsTrustedCommonNameOpts struct {
------ Lots of lines removed here ------
2 type UpdateMsgVpnReplicatedTopicOpts struct {
2 type UpdateMsgVpnRestDeliveryPointOpts struct {
2 type UpdateMsgVpnRestDeliveryPointQueueBindingOpts struct {
2 type UpdateMsgVpnRestDeliveryPointRestConsumerOpts struct {
2 type UpdateMsgVpnTopicEndpointOpts struct {
$ grep -h "type .* struct" * | sort | uniq -c | grep " 2 " | wc -l
106 The thought of manually removing those is a headache! |
Workaround is commenting / removing tags. But this is not a solution… |
What about an option to only generate code for the 1st tag (assuming there're multiple tags defined in the operation)? |
@wari can you please also try another client generator to see if you experience similar issues? |
Hi @wing328 what is the option to generate the first tag? I've tested this with Swagger (released and unreleased) and I got the same problem as well. I've not reported to swagger yet though. Are there any other client generators I can try? I only know of openapi and swagger |
Sorry for client generator, I mean Python, Ruby, PHP client generators instead of the Go client generator. If you manually clean up the tags to keep the first one only, does it solve your problem? |
As for removing the duplicates manually, it should work, as the options contain about 1 or 4 options of similar types, for example:
|
Just wondering if this will get fixed or I will have to remove the duplicates manually whenever I generate code from this particular API. |
@wari I'll take another look later today |
Same symptoms here with another 3.0 spec file. |
Thanks, @ity42 for reporting, I know I'm not the only here with this issue. Do you have the URL of the YAML or JSON file? |
Whats about this: Create
|
@wari: sorry, indirect link only; another example is: |
I'm still hitting this issue with the Golang generator for the HAProxy dataplane API. You can download their OpenAPI spec file from the top of the linked page (a direct link isn't working). Total $ grep -h "type .* struct" *.go | grep Opts | sort | uniq -c | awk '{s+=$1} END {print s}'
255 Details $ grep -h "type .* struct" *.go | grep Opts | sort | uniq -c | grep -v '^[[:space:]]\{0,\}1'
4 type CreateAclOpts struct {
2 type CreateBackendOpts struct {
3 type CreateBackendSwitchingRuleOpts struct {
3 type CreateBindOpts struct {
4 type CreateFilterOpts struct {
2 type CreateFrontendOpts struct {
4 type CreateHTTPRequestRuleOpts struct {
4 type CreateHTTPResponseRuleOpts struct {
4 type CreateLogTargetOpts struct {
3 type CreateServerOpts struct {
3 type CreateServerSwitchingRuleOpts struct {
3 type CreateStickRuleOpts struct {
4 type CreateTCPRequestRuleOpts struct {
4 type CreateTCPResponseRuleOpts struct {
4 type DeleteAclOpts struct {
2 type DeleteBackendOpts struct {
3 type DeleteBackendSwitchingRuleOpts struct {
3 type DeleteBindOpts struct {
4 type DeleteFilterOpts struct {
2 type DeleteFrontendOpts struct {
4 type DeleteHTTPRequestRuleOpts struct {
4 type DeleteHTTPResponseRuleOpts struct {
4 type DeleteLogTargetOpts struct {
3 type DeleteServerOpts struct {
3 type DeleteServerSwitchingRuleOpts struct {
3 type DeleteStickRuleOpts struct {
4 type DeleteTCPRequestRuleOpts struct {
4 type DeleteTCPResponseRuleOpts struct {
4 type GetAclOpts struct {
4 type GetAclsOpts struct {
2 type GetBackendOpts struct {
3 type GetBackendSwitchingRuleOpts struct {
3 type GetBackendSwitchingRulesOpts struct {
2 type GetBackendsOpts struct {
3 type GetBindOpts struct {
3 type GetBindsOpts struct {
2 type GetDefaultsOpts struct {
4 type GetFilterOpts struct {
4 type GetFiltersOpts struct {
2 type GetFrontendOpts struct {
2 type GetFrontendsOpts struct {
2 type GetGlobalOpts struct {
2 type GetHAProxyConfigurationOpts struct {
4 type GetHTTPRequestRuleOpts struct {
4 type GetHTTPRequestRulesOpts struct {
4 type GetHTTPResponseRuleOpts struct {
4 type GetHTTPResponseRulesOpts struct {
4 type GetLogTargetOpts struct {
4 type GetLogTargetsOpts struct {
3 type GetServerOpts struct {
3 type GetServerSwitchingRuleOpts struct {
3 type GetServerSwitchingRulesOpts struct {
3 type GetServersOpts struct {
3 type GetStickRuleOpts struct {
3 type GetStickRulesOpts struct {
4 type GetTCPRequestRuleOpts struct {
4 type GetTCPRequestRulesOpts struct {
4 type GetTCPResponseRuleOpts struct {
4 type GetTCPResponseRulesOpts struct {
2 type PostHAProxyConfigurationOpts struct {
4 type ReplaceAclOpts struct {
2 type ReplaceBackendOpts struct {
3 type ReplaceBackendSwitchingRuleOpts struct {
3 type ReplaceBindOpts struct {
2 type ReplaceDefaultsOpts struct {
4 type ReplaceFilterOpts struct {
2 type ReplaceFrontendOpts struct {
2 type ReplaceGlobalOpts struct {
4 type ReplaceHTTPRequestRuleOpts struct {
4 type ReplaceHTTPResponseRuleOpts struct {
4 type ReplaceLogTargetOpts struct {
3 type ReplaceServerOpts struct {
3 type ReplaceServerSwitchingRuleOpts struct {
3 type ReplaceStickRuleOpts struct {
4 type ReplaceTCPRequestRuleOpts struct {
4 type ReplaceTCPResponseRuleOpts struct { |
FWIW, I wrote a quick remove-dupe-opts: ## Removes duplicate Opt structs from the generated code
@for struct in $$(grep -h 'type .\{1,\} struct' $(OUTPUT_DIR)/*.go | grep Opts | sort | uniq -c | grep -v '^ 1' | awk '{print $$3}'); do \
for f in $$(/bin/ls $(OUTPUT_DIR)/*.go); do \
if grep -qF "type $${struct} struct" "$${f}"; then \
if eval "test -z \$${$${struct}}"; then \
echo "skipping first appearance of $${struct} in file $${f}"; \
eval "export $${struct}=1"; \
else \
echo "removing dupe $${struct} from file $${f}"; \
tr '\n' '\r' <"$${f}" | sed 's~// '"$${struct}"'.\{1,\}type '"$${struct}"' struct {[^}]\{1,\}}~~' | tr '\r' '\n' >"$${f}.tmp"; \
mv -f "$${f}.tmp" "$${f}"; \
fi; \
fi \
done \
done
@$(GOLANGCI_LINT) run -v --no-config --fast=false --fix --disable-all --enable goimports $(OUTPUT_DIR) |
@wing328 In my case, I deleted the extra tags and that fixed the problem: |
The following
Ideally, I would like to preserve the original tag list as |
@wing328 I think an option to enable this behavior would fix the problem. I don't know if this tool should be so opinionated that it always chooses the first tag. Perhaps an optional |
Hi, a me too report and some additional info. Using mvn version openapi-generator-cli-5.2.0.jar and latest build openapi-generator-cli-5.2.1-20210719.023544-9.jar and have same (and more ) issues. 4.2.2 works BUT to prevent duplicate structs need to use -p enumClassPrefix=true 5.2.0 or 20210719.023544-9 versions seem to ignore it or some other mechanism generates lots of duplicates. Can't remember i've seen it with an early 5.0.1 version, but that was almost a year ago when tested. [vendor provided swagger file used]
To make it compilable without duplicates I need to modify the vendor provider with the suggested jq statement:
And with that it compiles. Not sure if it affects anything else at this point. PS: i need the Regards |
Hi, |
Description
I'm unable to run the following:
openapi-generator version
openapi-generator-cli-4.0.0-20180728.030217-16.jar including earlier release versions (and swagger 2.4.0 as well)
OpenAPI declaration file content or url
https://products.solace.com/download/PUBSUB_SEMPV2_SCHEMA_JSON
Command line used for generation
Steps to reproduce
Related issues/PRs
Might be similar: #535
Suggest a fix/enhancement
None I can think of at the moment
The text was updated successfully, but these errors were encountered: