func()

in pkg/swagger/examples.go [13:176]


func (g *generator) generateExamples(outputDir string, s *Swagger) error {
	err := os.RemoveAll(outputDir + "/examples")
	if err != nil {
		return err
	}

	err = os.MkdirAll(outputDir+"/examples", 0777)
	if err != nil {
		return err
	}

	for _, pi := range s.Paths {
		for _, op := range []*Operation{pi.Get, pi.Put, pi.Post, pi.Delete, pi.Options, pi.Head, pi.Patch} {
			if op == nil {
				continue
			}

			example := struct {
				Parameters NameParameters `json:"parameters,omitempty"`
				Responses  Responses      `json:"responses,omitempty"`
			}{
				Responses: Responses{},
			}
			for _, param := range op.Parameters {
				switch param := param.(type) {
				case Reference:
					switch param.Ref {
					case "../../../../../../common-types/resource-management/" + g.commonTypesVersion + "/types.json#/parameters/ApiVersionParameter":
						example.Parameters = append(example.Parameters, NameParameter{
							Name:      "api-version",
							Parameter: stringutils.LastTokenByte(outputDir, '/'),
						})
					case "../../../../../../common-types/resource-management/" + g.commonTypesVersion + "/types.json#/parameters/SubscriptionIdParameter":
						example.Parameters = append(example.Parameters, NameParameter{
							Name:      "subscriptionId",
							Parameter: "00000000-0000-0000-0000-000000000000",
						})
					case "../../../../../../common-types/resource-management/" + g.commonTypesVersion + "/types.json#/parameters/ResourceGroupNameParameter":
						example.Parameters = append(example.Parameters, NameParameter{
							Name:      "resourceGroupName",
							Parameter: "resourceGroup",
						})
					case "../../../../../../common-types/resource-management/" + g.commonTypesVersion + "/types.json#/parameters/LocationParameter":
						example.Parameters = append(example.Parameters, NameParameter{
							Name:      "location",
							Parameter: "location",
						})
					}
				case Parameter:
					switch param.Name {
					case "resourceName":
						example.Parameters = append(example.Parameters, NameParameter{
							Name:      param.Name,
							Parameter: "resourceName",
						})
					case "childResourceName":
						example.Parameters = append(example.Parameters, NameParameter{
							Name:      "childResourceName",
							Parameter: "childResourceName",
						})
					case "openShiftVersion":
						example.Parameters = append(example.Parameters, NameParameter{
							Name:      "openShiftVersion",
							Parameter: "4.14.40",
						})
					case "openShiftMinorVersion":
						example.Parameters = append(example.Parameters, NameParameter{
							Name:      "openShiftMinorVersion",
							Parameter: "4.14",
						})
					case "parameters":
						switch param.Schema.Ref {
						case "#/definitions/OpenShiftCluster":
							example.Parameters = append(example.Parameters, NameParameter{
								Name:      param.Name,
								Parameter: g.exampleOpenShiftClusterPutParameter(),
							})
						case "#/definitions/OpenShiftClusterUpdate":
							example.Parameters = append(example.Parameters, NameParameter{
								Name:      param.Name,
								Parameter: g.exampleOpenShiftClusterPatchParameter(),
							})
						}
					}
				}
			}

			for statusCode, resp := range op.Responses {
				if statusCode == "default" {
					continue
				}

				response := resp.(Response)

				var body interface{}
				if response.Schema != nil {
					switch response.Schema.Ref {
					case "#/definitions/OpenShiftCluster":
						if g.workerProfilesStatus {
							switch op {
							case pi.Get:
								body = g.exampleOpenShiftClusterGetResponse()
							case pi.Put, pi.Patch:
								body = g.exampleOpenShiftClusterPutOrPatchResponse()
							}
						} else {
							body = g.exampleOpenShiftClusterResponse()
						}
					case "#/definitions/OpenShiftClusterCredentials":
						body = g.exampleOpenShiftClusterCredentialsResponse()
					case "#/definitions/OpenShiftClusterAdminKubeconfig":
						body = g.exampleOpenShiftClusterAdminKubeconfigResponse()
					case "#/definitions/OpenShiftClusterList":
						body = g.exampleOpenShiftClusterListResponse()
					case "#/definitions/OperationList":
						body = g.exampleOperationListResponse()
					case "#/definitions/OpenShiftVersion":
						body = g.exampleOpenShiftVersionResponse()
					case "#/definitions/OpenShiftVersionList":
						body = g.exampleOpenShiftVersionListResponse()
					case "#/definitions/PlatformWorkloadIdentityRoleSet":
						body = g.examplePlatformWorkloadIdentityRoleSetResponse()
					case "#/definitions/PlatformWorkloadIdentityRoleSetList":
						body = g.examplePlatformWorkloadIdentityRoleSetListResponse()
					}
				}

				if statusCode == "202" {
					// If the response code is 202 Accepted, then it's a long-running operation and must have
					// a "location" header.
					example.Responses[statusCode] = struct {
						Body    interface{} `json:"body,omitempty"`
						Headers interface{} `json:"headers,omitempty"`
					}{
						Body: body,
						Headers: map[string]string{
							"location": "https://management.azure.com/subscriptions/subid/providers/Microsoft.Cache/...pathToOperationResult...",
						},
					}
				} else {
					example.Responses[statusCode] = struct {
						Body interface{} `json:"body,omitempty"`
					}{
						Body: body,
					}
				}
			}

			b, err := json.MarshalIndent(example, "", "  ")
			if err != nil {
				return err
			}

			b = append(b, '\n')

			err = os.WriteFile(outputDir+"/examples/"+op.OperationID+".json", b, 0666)
			if err != nil {
				return err
			}
		}
	}

	return nil
}