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 <[email protected]>
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")

Reply via email to