in generate/generate.go [1679:1818]
func (s *service) generateNewAPICallFunc(a *API) {
pn := s.pn
n := capitalize(a.Name)
// Generate the function signature
pn("// %s", a.Description)
pn("func (s *%s) %s(p *%s) (*%s, error) {", s.name, n, n+"Params", strings.TrimPrefix(n, "Configure")+"Response")
// Generate the function body
if n == "QueryAsyncJobResult" {
pn(" var resp json.RawMessage")
pn(" var err error")
pn("")
pn(" // We should be able to retry on failure as this call is idempotent")
pn(" for i := 0; i < 3; i++ {")
pn(" resp, err = s.cs.newRequest(\"%s\", p.toURLValues())", a.Name)
pn(" if err == nil {")
pn(" break")
pn(" }")
pn(" time.Sleep(500 * time.Millisecond)")
pn(" }")
} else {
if a.Name == "deployVirtualMachine" || a.Name == "login" || a.Name == "updateVirtualMachine" {
pn(" resp, err := s.cs.newPostRequest(\"%s\", p.toURLValues())", a.Name)
} else {
pn(" resp, err := s.cs.newRequest(\"%s\", p.toURLValues())", a.Name)
}
}
pn(" if err != nil {")
pn(" return nil, err")
pn(" }")
pn("")
switch n {
case
"AddImageStore",
"CreateAccount",
"CreateDomain",
"UpdateDomain",
"CreateNetwork",
"CreateStoragePool",
"CreateNetworkOffering",
"UpdateNetworkOffering",
"UpdateServiceOffering",
"UpdateConfiguration",
"UpdateCluster",
"CreateSSHKeyPair",
"CreateSecurityGroup",
"CreateServiceOffering",
"CreateUser",
"CreateZone",
"DedicateGuestVlanRange",
"EnableUser",
"GetVirtualMachineUserData",
"LockUser",
"RegisterSSHKeyPair",
"RegisterUserKeys",
"GetUserKeys",
"AddAnnotation",
"RemoveAnnotation",
"AddKubernetesSupportedVersion",
"CreateDiskOffering",
"AddHost",
"RegisterIso":
pn(" if resp, err = getRawValue(resp); err != nil {")
pn(" return nil, err")
pn(" }")
pn("")
}
if !a.Isasync && s.name == "FirewallService" {
pn(" resp, err = convertFirewallServiceResponse(resp)")
pn(" if err != nil {")
pn(" return nil, err")
pn(" }")
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")
pn(" if s.cs.async {")
pn(" b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)")
pn(" if err != nil {")
pn(" if err == AsyncTimeoutErr {")
pn(" return &r, err")
pn(" }")
pn(" return nil, err")
pn(" }")
pn("")
if !isSuccessOnlyResponse(a.Response) {
pn(" b, err = getRawValue(b)")
pn(" if err != nil {")
pn(" return nil, err")
pn(" }")
pn("")
}
if s.name == "FirewallService" {
pn(" b, err = convertFirewallServiceResponse(b)")
pn(" if err != nil {")
pn(" return nil, err")
pn(" }")
pn("")
}
if n == "AuthorizeSecurityGroupIngress" {
pn(" b, err = convertAuthorizeSecurityGroupIngressResponse(b)")
pn(" if err != nil {")
pn(" return nil, err")
pn(" }")
pn("")
}
if n == "AuthorizeSecurityGroupEgress" {
pn(" b, err = convertAuthorizeSecurityGroupEgressResponse(b)")
pn(" if err != nil {")
pn(" return nil, err")
pn(" }")
pn("")
}
pn(" if err := json.Unmarshal(b, &r); err != nil {")
pn(" return nil, err")
pn(" }")
pn(" }")
pn("")
}
pn(" return &r, nil")
pn("}")
pn("")
}