func writeSkuData()

in hack/code/instancetype_testdata_gen/main.go [84:180]


func writeSkuData(ResourceSkus []*armcompute.ResourceSKU, location, path string) {
	src := &bytes.Buffer{}
	fmt.Fprintln(src, "//go:build !ignore_autogenerated")
	license := lo.Must(os.ReadFile("hack/boilerplate.go.txt"))
	fmt.Fprintln(src, string(license))
	fmt.Fprintln(src, "package fake")
	fmt.Fprintln(src, "import (")
	fmt.Fprintln(src, `	"github.com/samber/lo"`)
	fmt.Fprintln(src, `		// nolint SA1019 - deprecated package`)
	fmt.Fprintln(src, `		"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute"`)
	fmt.Fprintln(src, ")")
	now := time.Now().UTC().Format(time.RFC3339)
	fmt.Fprintf(src, "// generated at %s\n\n\n", now)
	fmt.Fprintln(src, "func init() {")
	fmt.Fprintln(src, "// ResourceSkus is a list of selected VM SKUs for a given region")
	fmt.Fprintf(src, "ResourceSkus[%q] = []compute.ResourceSku{\n", location)
	for _, sku := range ResourceSkus {
		fmt.Fprintln(src, "	{")
		fmt.Fprintf(src, "		Name:         lo.ToPtr(%q),\n", lo.FromPtrOr(sku.Name, ""))
		fmt.Fprintf(src, "		Tier:         lo.ToPtr(%q),\n", lo.FromPtrOr(sku.Tier, ""))
		fmt.Fprintf(src, "		Kind:         lo.ToPtr(%q),\n", lo.FromPtrOr(sku.Kind, ""))
		fmt.Fprintf(src, "		Size:         lo.ToPtr(%q),\n", lo.FromPtrOr(sku.Size, ""))
		fmt.Fprintf(src, "		Family:       lo.ToPtr(%q),\n", lo.FromPtrOr(sku.Family, ""))
		fmt.Fprintf(src, "		ResourceType: lo.ToPtr(%q),\n", lo.FromPtrOr(sku.ResourceType, ""))
		fmt.Fprintln(src, "		APIVersions: &[]string{")
		for _, apiVersion := range sku.APIVersions {
			fmt.Fprintf(src, "			lo.ToPtr(%q),\n", lo.FromPtrOr(apiVersion, ""))
		}
		fmt.Fprintln(src, "		},")
		if sku.Capacity != nil {
			fmt.Fprintln(src, "		Capacity: compute.ResourceSkuCapacity{")
			fmt.Fprintf(src, "			Minimum: lo.ToPtr(%d),\n", lo.FromPtrOr(sku.Capacity.Minimum, 0))
			fmt.Fprintf(src, "			Maximum: lo.ToPtr(%d),\n", lo.FromPtrOr(sku.Capacity.Maximum, 0))
			fmt.Fprintf(src, "			Default: lo.ToPtr(%d),\n", lo.FromPtrOr(sku.Capacity.Default, 0))
			fmt.Fprintf(src, "		},")
		}
		fmt.Fprintf(src, "		Costs: &[]compute.ResourceSkuCosts{")
		for _, cost := range sku.Costs {
			fmt.Fprintf(src, "			{MeterID: lo.ToPtr(%f), Quantity: lo.ToPtr(%q), ExtendedUnit: lo.ToPtr(%q)},", lo.FromPtrOr(cost.MeterID, ""), lo.FromPtrOr(cost.Quantity, 0.0), lo.FromPtrOr(cost.ExtendedUnit, ""))
		}
		fmt.Fprintln(src, "		},")
		fmt.Fprintln(src, "		Restrictions: &[]compute.ResourceSkuRestrictions{")
		for _, restriction := range sku.Restrictions {
			fmt.Fprintln(src, "			{")
			fmt.Fprintf(src, "				Type: compute.ResourceSkuRestrictionsType(%q),\n", lo.FromPtrOr(restriction.Type, ""))
			for _, value := range restriction.Values {
				fmt.Fprintf(src, "				Values: &[]string{%q},", lo.FromPtrOr(value, ""))
			}
			fmt.Fprintln(src)
			fmt.Fprintln(src, "				RestrictionInfo: &compute.ResourceSkuRestrictionInfo{")
			fmt.Fprintln(src, "					Locations: &[]string{")
			for _, location := range restriction.RestrictionInfo.Locations {
				fmt.Fprintf(src, "						%q,\n", lo.FromPtr(location))
			}
			fmt.Fprintln(src, "					},")
			fmt.Fprintln(src, "					Zones: &[]string{")
			for _, zone := range restriction.RestrictionInfo.Zones {
				fmt.Fprintf(src, "						%q,\n", lo.FromPtr(zone))
			}
			fmt.Fprintln(src, "					},")
			fmt.Fprintln(src, "				},")
			fmt.Fprintf(src, "				ReasonCode: %q,\n", lo.FromPtrOr(restriction.ReasonCode, ""))
			fmt.Fprintln(src, "			},")
		}
		fmt.Fprintln(src, "		},")
		fmt.Fprintln(src, "		Capabilities: &[]compute.ResourceSkuCapabilities{")
		for _, capability := range sku.Capabilities {
			fmt.Fprintf(src, "			{Name: lo.ToPtr(%q), Value: lo.ToPtr(%q)},\n", *capability.Name, *capability.Value)
		}
		fmt.Fprintln(src, "		},")
		fmt.Fprintf(src, "		Locations: &[]string{%q},\n", location)
		fmt.Fprintf(src, "		LocationInfo: &[]compute.ResourceSkuLocationInfo{")
		for _, locationInfo := range sku.LocationInfo {
			fmt.Fprintf(src, "			{Location: lo.ToPtr(%q),", location)
			fmt.Fprintln(src, "			Zones: &[]string{")
			sort.Slice(locationInfo.Zones, func(i, j int) bool {
				return *locationInfo.Zones[i] < *locationInfo.Zones[j]
			})
			for _, zone := range locationInfo.Zones {
				fmt.Fprintf(src, "				%q,\n", lo.FromPtr(zone))
			}
			fmt.Fprintln(src, "			},")
		}
		fmt.Fprintln(src, "			},")
		fmt.Fprintln(src, "	},")

		fmt.Fprintln(src, "},")
	}

	fmt.Fprintln(src, "}")
	fmt.Fprintln(src, "}")
	fmt.Println("writing file to", path)
	if err := os.WriteFile(path, src.Bytes(), 0600); err != nil {
		fmt.Printf("failed to write file: %v", err)
		panic(err)
	}
}