package sqlserverFlexBetaFlavor import ( "context" "fmt" "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/pkg_gen/sqlserverflexbeta" ) type flavorsClientReader interface { GetFlavorsRequest( ctx context.Context, projectId, region string, ) sqlserverflexbeta.ApiGetFlavorsRequestRequest } func getAllFlavors(ctx context.Context, client flavorsClientReader, projectId, region string) ( []sqlserverflexbeta.ListFlavors, error, ) { getAllFilter := func(_ sqlserverflexbeta.ListFlavors) bool { return true } flavorList, err := getFlavorsByFilter(ctx, client, projectId, region, getAllFilter) if err != nil { return nil, err } return flavorList, nil } // getFlavorsByFilter is a helper function to retrieve flavors using a filtern function. // Hint: The API does not have a GetFlavors endpoint, only ListFlavors func getFlavorsByFilter( ctx context.Context, client flavorsClientReader, projectId, region string, filter func(db sqlserverflexbeta.ListFlavors) bool, ) ([]sqlserverflexbeta.ListFlavors, error) { if projectId == "" || region == "" { return nil, fmt.Errorf("listing sqlserverflexbeta flavors: projectId and region are required") } const pageSize = 25 var result = make([]sqlserverflexbeta.ListFlavors, 0) for page := int64(1); ; page++ { res, err := client.GetFlavorsRequest(ctx, projectId, region). Page(page).Size(pageSize).Sort(sqlserverflexbeta.FLAVORSORT_INDEX_ASC).Execute() if err != nil { return nil, fmt.Errorf("requesting flavors list (page %d): %w", page, err) } // If the API returns no flavors, we have reached the end of the list. if res.Flavors == nil || len(*res.Flavors) == 0 { break } for _, flavor := range *res.Flavors { if filter(flavor) { result = append(result, flavor) } } } return result, nil }