You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2021/11/19 06:57:00 UTC

[cloudstack-go] branch main updated: Fix GetUploadParamsFor{Volume, Template} (#19)

This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack-go.git


The following commit(s) were added to refs/heads/main by this push:
     new 792b9d5  Fix GetUploadParamsFor{Volume,Template} (#19)
792b9d5 is described below

commit 792b9d51f124aaa04cf92d64676113726f5b2354
Author: Xavier MARCELET <xa...@orange.com>
AuthorDate: Fri Nov 19 07:56:52 2021 +0100

    Fix GetUploadParamsFor{Volume,Template} (#19)
    
    * fix reponse parsing for Template:getUploadParamsForTemplate and Volume:getUploadParamsForVolume
    
    * add generate binary in gitignore
---
 .gitignore                    |  3 +++
 cloudstack/TemplateService.go |  7 +++++--
 cloudstack/VolumeService.go   |  7 +++++--
 generate/generate.go          | 27 +++++++++++++++++++++++----
 4 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/.gitignore b/.gitignore
index ab16549..c7f8ea7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,4 +21,7 @@ _testmain.go
 
 *.exe
 *.test
+
+generate/generate
 bin/mockgen
+
diff --git a/cloudstack/TemplateService.go b/cloudstack/TemplateService.go
index 8dd117a..43c2f14 100644
--- a/cloudstack/TemplateService.go
+++ b/cloudstack/TemplateService.go
@@ -1419,10 +1419,13 @@ func (s *TemplateService) GetUploadParamsForTemplate(p *GetUploadParamsForTempla
 		return nil, err
 	}
 
-	var r GetUploadParamsForTemplateResponse
-	if err := json.Unmarshal(resp, &r); err != nil {
+	var nested struct {
+		Response GetUploadParamsForTemplateResponse `json:"getuploadparams"`
+	}
+	if err := json.Unmarshal(resp, &nested); err != nil {
 		return nil, err
 	}
+	r := nested.Response
 
 	return &r, nil
 }
diff --git a/cloudstack/VolumeService.go b/cloudstack/VolumeService.go
index eeeec79..91aa924 100644
--- a/cloudstack/VolumeService.go
+++ b/cloudstack/VolumeService.go
@@ -1326,10 +1326,13 @@ func (s *VolumeService) GetUploadParamsForVolume(p *GetUploadParamsForVolumePara
 		return nil, err
 	}
 
-	var r GetUploadParamsForVolumeResponse
-	if err := json.Unmarshal(resp, &r); err != nil {
+	var nested struct {
+		Response GetUploadParamsForVolumeResponse `json:"getuploadparams"`
+	}
+	if err := json.Unmarshal(resp, &nested); err != nil {
 		return nil, err
 	}
+	r := nested.Response
 
 	return &r, nil
 }
diff --git a/generate/generate.go b/generate/generate.go
index 89ce4b5..b82a030 100644
--- a/generate/generate.go
+++ b/generate/generate.go
@@ -63,6 +63,14 @@ var mapRequireList = map[string]map[string]bool{
 	},
 }
 
+// nestedResponse is a prefilled map with the list of endpoints
+// that responses fields are nested in a parent object. The map value
+// gives the object field name.
+var nestedResponse = map[string]string{
+	"getUploadParamsForTemplate": "getuploadparams",
+	"getUploadParamsForVolume":   "getuploadparams",
+}
+
 // We prefill this one value to make sure it is not
 // created twice, as this is also a top level type.
 var typeNames = map[string]bool{"Nic": true}
@@ -1479,10 +1487,21 @@ func (s *service) generateNewAPICallFunc(a *API) {
 		pn("		}")
 		pn("")
 	}
-	pn("	var r %s", strings.TrimPrefix(n, "Configure")+"Response")
-	pn("	if err := json.Unmarshal(resp, &r); err != nil {")
-	pn("		return nil, err")
-	pn("	}")
+
+	if field, isNested := nestedResponse[a.Name]; isNested {
+		pn("	var nested struct {")
+		pn("			Response %sResponse `json:\"%s\"`", strings.TrimPrefix(n, "Configure"), field)
+		pn("	}")
+		pn("	if err := json.Unmarshal(resp, &nested); err != nil {")
+		pn("		return nil, err")
+		pn("	}")
+		pn("	r := nested.Response")
+	} else {
+		pn("	var r %sResponse", strings.TrimPrefix(n, "Configure"))
+		pn("	if err := json.Unmarshal(resp, &r); err != nil {")
+		pn("		return nil, err")
+		pn("	}")
+	}
 	pn("")
 	if a.Isasync {
 		pn("	// If we have a async client, we need to wait for the async result")