in generate/generate.go [1740:1883]
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 requiresPostMethod[a.Name] {
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
"AddCluster",
"AddImageStore",
"CreateAccount",
"CreateDomain",
"UpdateDomain",
"CreateNetwork",
"CreateStoragePool",
"CreateNetworkOffering",
"CreateVlanIpRange",
"UpdateNetworkOffering",
"UpdateServiceOffering",
"UpdateConfiguration",
"UpdateCluster",
"UpdateVlanIpRange",
"CreatePod",
"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("")
}