diff --git a/go.mod b/go.mod index 1cb67959156f..de8a88300979 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,6 @@ require ( github.com/mitchellh/mapstructure v1.5.0 github.com/rickb777/date v1.12.5-0.20200422084442-6300e543c4d9 github.com/sergi/go-diff v1.2.0 - github.com/shopspring/decimal v1.2.0 github.com/tombuildsstuff/giovanni v0.20.0 golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 diff --git a/go.sum b/go.sum index 0715758de659..9816221c4983 100644 --- a/go.sum +++ b/go.sum @@ -347,8 +347,6 @@ github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAm github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/internal/services/consumption/client/client.go b/internal/services/consumption/client/client.go index 04040a0d9dd1..e867b6340157 100644 --- a/internal/services/consumption/client/client.go +++ b/internal/services/consumption/client/client.go @@ -1,16 +1,16 @@ package client import ( - "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption" + "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/internal/common" ) type Client struct { - BudgetsClient *consumption.BudgetsClient + BudgetsClient *budgets.BudgetsClient } func NewClient(o *common.ClientOptions) *Client { - budgetsClient := consumption.NewBudgetsClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) + budgetsClient := budgets.NewBudgetsClientWithBaseURI(o.ResourceManagerEndpoint) o.ConfigureClient(&budgetsClient.Client, o.ResourceManagerAuthorizer) return &Client{ diff --git a/internal/services/consumption/consumption_budget_base.go b/internal/services/consumption/consumption_budget_base.go index 25ac88c1d9c8..72ff97aa075b 100644 --- a/internal/services/consumption/consumption_budget_base.go +++ b/internal/services/consumption/consumption_budget_base.go @@ -5,16 +5,15 @@ import ( "fmt" "time" - "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption" "github.com/Azure/go-autorest/autorest/date" + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/hashicorp/terraform-provider-azurerm/utils" - "github.com/shopspring/decimal" ) type consumptionBudgetBaseResource struct{} @@ -227,10 +226,10 @@ func (br consumptionBudgetBaseResource) arguments(fields map[string]*pluginsdk.S "threshold_type": { Type: pluginsdk.TypeString, Optional: true, - Default: string(consumption.ThresholdTypeActual), + Default: string(budgets.ThresholdTypeActual), ForceNew: true, // TODO: remove this when the above issue is fixed ValidateFunc: validation.StringInSlice([]string{ - string(consumption.ThresholdTypeActual), + string(budgets.ThresholdTypeActual), "Forecasted", }, false), }, @@ -238,9 +237,9 @@ func (br consumptionBudgetBaseResource) arguments(fields map[string]*pluginsdk.S Type: pluginsdk.TypeString, Required: true, ValidateFunc: validation.StringInSlice([]string{ - string(consumption.OperatorTypeEqualTo), - string(consumption.OperatorTypeGreaterThan), - string(consumption.OperatorTypeGreaterThanOrEqualTo), + string(budgets.OperatorTypeEqualTo), + string(budgets.OperatorTypeGreaterThan), + string(budgets.OperatorTypeGreaterThanOrEqualTo), }, false), }, @@ -277,15 +276,15 @@ func (br consumptionBudgetBaseResource) arguments(fields map[string]*pluginsdk.S "time_grain": { Type: pluginsdk.TypeString, Optional: true, - Default: string(consumption.TimeGrainTypeMonthly), + Default: string(budgets.TimeGrainTypeMonthly), ForceNew: true, ValidateFunc: validation.StringInSlice([]string{ - string(consumption.TimeGrainTypeBillingAnnual), - string(consumption.TimeGrainTypeBillingMonth), - string(consumption.TimeGrainTypeBillingQuarter), - string(consumption.TimeGrainTypeAnnually), - string(consumption.TimeGrainTypeMonthly), - string(consumption.TimeGrainTypeQuarterly), + string(budgets.TimeGrainTypeBillingAnnual), + string(budgets.TimeGrainTypeBillingMonth), + string(budgets.TimeGrainTypeBillingQuarter), + string(budgets.TimeGrainTypeAnnually), + string(budgets.TimeGrainTypeMonthly), + string(budgets.TimeGrainTypeQuarterly), }, false), }, @@ -334,16 +333,16 @@ func (br consumptionBudgetBaseResource) createFunc(resourceName, scopeFieldName var err error scope := metadata.ResourceData.Get(scopeFieldName).(string) - id := parse.NewConsumptionBudgetId(scope, metadata.ResourceData.Get("name").(string)) + id := budgets.NewScopedBudgetID(scope, metadata.ResourceData.Get("name").(string)) - existing, err := client.Get(ctx, id.Scope, id.Name) + existing, err := client.Get(ctx, id) if err != nil { - if !utils.ResponseWasNotFound(existing.Response) { + if !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id, err) } } - if !utils.ResponseWasNotFound(existing.Response) { + if !response.WasNotFound(existing.HttpResponse) { return tf.ImportAsExistsError(resourceName, id.ID()) } @@ -362,38 +361,38 @@ func (br consumptionBudgetBaseResource) readFunc(scopeFieldName string) sdk.Reso Timeout: 5 * time.Minute, Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { client := metadata.Client.Consumption.BudgetsClient - id, err := parse.ConsumptionBudgetID(metadata.ResourceData.Id()) + id, err := budgets.ParseScopedBudgetID(metadata.ResourceData.Id()) if err != nil { return err } - resp, err := client.Get(ctx, id.Scope, id.Name) + resp, err := client.Get(ctx, *id) if err != nil { - if utils.ResponseWasNotFound(resp.Response) { + if response.WasNotFound(resp.HttpResponse) { return metadata.MarkAsGone(id) } return fmt.Errorf("reading %s, %+v", *id, err) } - metadata.ResourceData.Set("name", id.Name) + metadata.ResourceData.Set("name", id.BudgetName) //lintignore:R001 metadata.ResourceData.Set(scopeFieldName, id.Scope) - amount := 0.0 - if v := resp.Amount; v != nil { - amount, _ = v.Float64() - } - metadata.ResourceData.Set("amount", amount) - - eTag := "" - if v := resp.ETag; v != nil { - eTag = *v + if model := resp.Model; model != nil { + eTag := "" + if v := model.ETag; v != nil { + eTag = *v + } + metadata.ResourceData.Set("etag", eTag) + + if props := model.Properties; props != nil { + metadata.ResourceData.Set("amount", props.Amount) + metadata.ResourceData.Set("time_grain", string(props.TimeGrain)) + metadata.ResourceData.Set("time_period", flattenConsumptionBudgetTimePeriod(&props.TimePeriod)) + metadata.ResourceData.Set("notification", flattenConsumptionBudgetNotifications(props.Notifications, scopeFieldName)) + metadata.ResourceData.Set("filter", flattenConsumptionBudgetFilter(props.Filter)) + } } - metadata.ResourceData.Set("etag", eTag) - metadata.ResourceData.Set("time_grain", string(resp.TimeGrain)) - metadata.ResourceData.Set("time_period", flattenConsumptionBudgetTimePeriod(resp.TimePeriod)) - metadata.ResourceData.Set("notification", flattenConsumptionBudgetNotifications(resp.Notifications, scopeFieldName)) - metadata.ResourceData.Set("filter", flattenConsumptionBudgetFilter(resp.Filter)) return nil }, @@ -405,12 +404,12 @@ func (br consumptionBudgetBaseResource) deleteFunc() sdk.ResourceFunc { Timeout: 30 * time.Minute, Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { client := metadata.Client.Consumption.BudgetsClient - id, err := parse.ConsumptionBudgetID(metadata.ResourceData.Id()) + id, err := budgets.ParseScopedBudgetID(metadata.ResourceData.Id()) if err != nil { return err } - if _, err = client.Delete(ctx, id.Scope, id.Name); err != nil { + if _, err = client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting %s: %+v", *id, err) } @@ -425,7 +424,7 @@ func (br consumptionBudgetBaseResource) updateFunc() sdk.ResourceFunc { Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { client := metadata.Client.Consumption.BudgetsClient - id, err := parse.ConsumptionBudgetID(metadata.ResourceData.Id()) + id, err := budgets.ParseScopedBudgetID(metadata.ResourceData.Id()) if err != nil { return err } @@ -439,33 +438,18 @@ func (br consumptionBudgetBaseResource) updateFunc() sdk.ResourceFunc { } } -func (br consumptionBudgetBaseResource) importerFunc(expectScope string) sdk.ResourceRunFunc { +func (br consumptionBudgetBaseResource) importerFunc() sdk.ResourceRunFunc { return func(ctx context.Context, metadata sdk.ResourceMetaData) error { - var err error - id, err := parse.ConsumptionBudgetID(metadata.ResourceData.Id()) + _, err := budgets.ParseScopedBudgetID(metadata.ResourceData.Id()) if err != nil { return err } - switch expectScope { - case "subscription": - _, err = parse.ConsumptionBudgetSubscriptionID(metadata.ResourceData.Id()) - case "resource_group": - _, err = parse.ConsumptionBudgetResourceGroupID(metadata.ResourceData.Id()) - case "management_group": - _, err = parse.ConsumptionBudgetManagementGroupID(metadata.ResourceData.Id()) - } - - if err != nil { - return fmt.Errorf("budget has mismatched scope, expected a budget with %s scope, got %s", expectScope, id.Scope) - } - return nil } } -func createOrUpdateConsumptionBudget(ctx context.Context, client *consumption.BudgetsClient, metadata sdk.ResourceMetaData, id parse.ConsumptionBudgetId) error { - amount := decimal.NewFromFloat(metadata.ResourceData.Get("amount").(float64)) +func createOrUpdateConsumptionBudget(ctx context.Context, client *budgets.BudgetsClient, metadata sdk.ResourceMetaData, id budgets.ScopedBudgetId) error { timePeriod, err := expandConsumptionBudgetTimePeriod(metadata.ResourceData.Get("time_period").([]interface{})) if err != nil { return fmt.Errorf("expanding `time_period`: %+v", err) @@ -473,16 +457,16 @@ func createOrUpdateConsumptionBudget(ctx context.Context, client *consumption.Bu // The Consumption Budget API requires the category type field to be set in a budget's properties. // 'Cost' is the only valid Budget type today according to the API spec. - category := "Cost" - parameters := consumption.Budget{ - Name: utils.String(id.Name), - BudgetProperties: &consumption.BudgetProperties{ - Amount: &amount, - Category: &category, + + parameters := budgets.Budget{ + Name: utils.String(id.BudgetName), + Properties: &budgets.BudgetProperties{ + Amount: metadata.ResourceData.Get("amount").(float64), + Category: budgets.CategoryTypeCost, Filter: expandConsumptionBudgetFilter(metadata.ResourceData.Get("filter").([]interface{})), Notifications: expandConsumptionBudgetNotifications(metadata.ResourceData.Get("notification").(*pluginsdk.Set).List()), - TimeGrain: consumption.TimeGrainType(metadata.ResourceData.Get("time_grain").(string)), - TimePeriod: timePeriod, + TimeGrain: budgets.TimeGrainType(metadata.ResourceData.Get("time_grain").(string)), + TimePeriod: *timePeriod, }, } @@ -490,7 +474,7 @@ func createOrUpdateConsumptionBudget(ctx context.Context, client *consumption.Bu parameters.ETag = utils.String(v.(string)) } - _, err = client.CreateOrUpdate(ctx, id.Scope, id.Name, parameters) + _, err = client.CreateOrUpdate(ctx, id, parameters) if err != nil { return err } @@ -498,56 +482,48 @@ func createOrUpdateConsumptionBudget(ctx context.Context, client *consumption.Bu return nil } -func expandConsumptionBudgetTimePeriod(i []interface{}) (*consumption.BudgetTimePeriod, error) { +func expandConsumptionBudgetTimePeriod(i []interface{}) (*budgets.BudgetTimePeriod, error) { if len(i) == 0 || i[0] == nil { return nil, nil } input := i[0].(map[string]interface{}) - timePeriod := consumption.BudgetTimePeriod{} + timePeriod := budgets.BudgetTimePeriod{} if startDateInput, ok := input["start_date"].(string); ok { - startDate, err := date.ParseTime(time.RFC3339, startDateInput) + _, err := date.ParseTime(time.RFC3339, startDateInput) if err != nil { return nil, fmt.Errorf("start_date '%s' was not in the correct format: %+v", startDateInput, err) } - - timePeriod.StartDate = &date.Time{ - Time: startDate, - } + timePeriod.StartDate = input["start_date"].(string) } if endDateInput, ok := input["end_date"].(string); ok { if endDateInput != "" { - endDate, err := date.ParseTime(time.RFC3339, endDateInput) + _, err := date.ParseTime(time.RFC3339, endDateInput) if err != nil { return nil, fmt.Errorf("end_date '%s' was not in the correct format: %+v", endDateInput, err) } - timePeriod.EndDate = &date.Time{ - Time: endDate, - } + timePeriod.EndDate = utils.String(input["end_date"].(string)) } } return &timePeriod, nil } -func flattenConsumptionBudgetTimePeriod(input *consumption.BudgetTimePeriod) []interface{} { +func flattenConsumptionBudgetTimePeriod(input *budgets.BudgetTimePeriod) []interface{} { timePeriod := make([]interface{}, 0) if input == nil { return timePeriod } - startDate := "" - if v := input.StartDate; v != nil { - startDate = v.String() - } + startDate := input.StartDate endDate := "" if v := input.EndDate; v != nil { - endDate = v.String() + endDate = *v } return append(timePeriod, map[string]interface{}{ @@ -556,27 +532,28 @@ func flattenConsumptionBudgetTimePeriod(input *consumption.BudgetTimePeriod) []i }) } -func expandConsumptionBudgetNotifications(input []interface{}) map[string]*consumption.Notification { +func expandConsumptionBudgetNotifications(input []interface{}) *map[string]budgets.Notification { if len(input) == 0 { return nil } - notifications := make(map[string]*consumption.Notification) + notifications := make(map[string]budgets.Notification) for _, v := range input { if v != nil { notificationRaw := v.(map[string]interface{}) - notification := consumption.Notification{} + notification := budgets.Notification{} - notification.Enabled = utils.Bool(notificationRaw["enabled"].(bool)) - notification.Operator = consumption.OperatorType(notificationRaw["operator"].(string)) + notification.Enabled = notificationRaw["enabled"].(bool) + notification.Operator = budgets.OperatorType(notificationRaw["operator"].(string)) - thresholdDecimal := decimal.NewFromInt(int64(notificationRaw["threshold"].(int))) - notification.Threshold = &thresholdDecimal + notification.Threshold = float64(notificationRaw["threshold"].(int)) - notification.ThresholdType = consumption.ThresholdType(notificationRaw["threshold_type"].(string)) + thresholdType := budgets.ThresholdType(notificationRaw["threshold_type"].(string)) + notification.ThresholdType = &thresholdType - notification.ContactEmails = utils.ExpandStringSlice(notificationRaw["contact_emails"].([]interface{})) + contactEmails := utils.ExpandStringSlice(notificationRaw["contact_emails"].([]interface{})) + notification.ContactEmails = *contactEmails // contact_roles cannot be set on consumption budgets for management groups if _, ok := notificationRaw["contact_roles"]; ok { @@ -588,110 +565,98 @@ func expandConsumptionBudgetNotifications(input []interface{}) map[string]*consu notification.ContactGroups = utils.ExpandStringSlice(notificationRaw["contact_groups"].([]interface{})) } - notificationKey := fmt.Sprintf("actual_%s_%s_Percent", string(notification.Operator), notification.Threshold.StringFixed(0)) - notifications[notificationKey] = ¬ification + notificationKey := fmt.Sprintf("actual_%s_%f_Percent", string(notification.Operator), notification.Threshold) + notifications[notificationKey] = notification } } - return notifications + return ¬ifications } -func flattenConsumptionBudgetNotifications(input map[string]*consumption.Notification, scope string) []interface{} { +func flattenConsumptionBudgetNotifications(input *map[string]budgets.Notification, scope string) []interface{} { if input == nil { return []interface{}{} } notifications := make([]interface{}, 0) - for _, n := range input { - if n != nil { - block := make(map[string]interface{}) - - enabled := true - if v := n.Enabled; v != nil && !*v { - enabled = false - } - block["enabled"] = enabled + for _, n := range *input { + block := make(map[string]interface{}) - operator := "" - if v := n.Operator; v != "" { - operator = string(v) - } - block["operator"] = operator + block["enabled"] = n.Enabled - threshold := 0 - if v := n.Threshold; v != nil { - t, _ := v.Float64() - threshold = int(t) - } - block["threshold"] = threshold + operator := "" + if v := n.Operator; v != "" { + operator = string(v) + } + block["operator"] = operator - thresholdType := string(consumption.ThresholdTypeActual) - if v := n.ThresholdType; v != consumption.ThresholdTypeActual { - t := v - thresholdType = string(t) - } - block["threshold_type"] = thresholdType + block["threshold"] = n.Threshold - var emails []interface{} - if v := n.ContactEmails; v != nil { - emails = utils.FlattenStringSlice(v) - } - block["contact_emails"] = emails + thresholdType := string(budgets.ThresholdTypeActual) + if v := n.ThresholdType; v != nil { + thresholdType = string(*v) + } + block["threshold_type"] = thresholdType - if scope != "management_group_id" { - var roles []interface{} - if v := n.ContactRoles; v != nil { - roles = utils.FlattenStringSlice(v) - } - block["contact_roles"] = roles + var emails []interface{} + if v := n.ContactEmails; v != nil { + emails = utils.FlattenStringSlice(&v) + } + block["contact_emails"] = emails - var groups []interface{} - if v := n.ContactGroups; v != nil { - groups = utils.FlattenStringSlice(v) - } - block["contact_groups"] = groups + if scope != "management_group_id" { + var roles []interface{} + if v := n.ContactRoles; v != nil { + roles = utils.FlattenStringSlice(v) } + block["contact_roles"] = roles - notifications = append(notifications, block) + var groups []interface{} + if v := n.ContactGroups; v != nil { + groups = utils.FlattenStringSlice(v) + } + block["contact_groups"] = groups } + + notifications = append(notifications, block) } return notifications } -func expandConsumptionBudgetComparisonExpression(input interface{}) *consumption.BudgetComparisonExpression { +func expandConsumptionBudgetComparisonExpression(input interface{}) *budgets.BudgetComparisonExpression { if input == nil { return nil } v := input.(map[string]interface{}) - return &consumption.BudgetComparisonExpression{ - Name: utils.String(v["name"].(string)), - Operator: utils.String(v["operator"].(string)), - Values: utils.ExpandStringSlice(v["values"].([]interface{})), + return &budgets.BudgetComparisonExpression{ + Name: v["name"].(string), + Operator: budgets.BudgetOperatorType(v["operator"].(string)), + Values: *utils.ExpandStringSlice(v["values"].([]interface{})), } } -func flattenConsumptionBudgetComparisonExpression(input *consumption.BudgetComparisonExpression) *map[string]interface{} { +func flattenConsumptionBudgetComparisonExpression(input *budgets.BudgetComparisonExpression) *map[string]interface{} { consumptionBudgetComparisonExpression := make(map[string]interface{}) consumptionBudgetComparisonExpression["name"] = input.Name consumptionBudgetComparisonExpression["operator"] = input.Operator - consumptionBudgetComparisonExpression["values"] = utils.FlattenStringSlice(input.Values) + consumptionBudgetComparisonExpression["values"] = utils.FlattenStringSlice(&input.Values) return &consumptionBudgetComparisonExpression } -func expandConsumptionBudgetFilterDimensions(input []interface{}) []consumption.BudgetFilterProperties { +func expandConsumptionBudgetFilterDimensions(input []interface{}) []budgets.BudgetFilterProperties { if len(input) == 0 { return nil } - dimensions := make([]consumption.BudgetFilterProperties, 0) + dimensions := make([]budgets.BudgetFilterProperties, 0) for _, v := range input { - dimension := consumption.BudgetFilterProperties{ + dimension := budgets.BudgetFilterProperties{ Dimensions: expandConsumptionBudgetComparisonExpression(v), } dimensions = append(dimensions, dimension) @@ -700,15 +665,15 @@ func expandConsumptionBudgetFilterDimensions(input []interface{}) []consumption. return dimensions } -func expandConsumptionBudgetFilterTag(input []interface{}) []consumption.BudgetFilterProperties { +func expandConsumptionBudgetFilterTag(input []interface{}) []budgets.BudgetFilterProperties { if len(input) == 0 { return nil } - tags := make([]consumption.BudgetFilterProperties, 0) + tags := make([]budgets.BudgetFilterProperties, 0) for _, v := range input { - tag := consumption.BudgetFilterProperties{ + tag := budgets.BudgetFilterProperties{ Tags: expandConsumptionBudgetComparisonExpression(v), } @@ -718,13 +683,13 @@ func expandConsumptionBudgetFilterTag(input []interface{}) []consumption.BudgetF return tags } -func expandConsumptionBudgetFilter(i []interface{}) *consumption.BudgetFilter { +func expandConsumptionBudgetFilter(i []interface{}) *budgets.BudgetFilter { if len(i) == 0 || i[0] == nil { return nil } input := i[0].(map[string]interface{}) - filter := consumption.BudgetFilter{} + filter := budgets.BudgetFilter{} notBlock := input["not"].([]interface{}) if len(notBlock) != 0 && notBlock[0] != nil { @@ -768,7 +733,7 @@ func expandConsumptionBudgetFilter(i []interface{}) *consumption.BudgetFilter { return &filter } -func flattenConsumptionBudgetFilter(input *consumption.BudgetFilter) []interface{} { +func flattenConsumptionBudgetFilter(input *budgets.BudgetFilter) []interface{} { filter := make([]interface{}, 0) if input == nil { diff --git a/internal/services/consumption/consumption_budget_management_group_resource.go b/internal/services/consumption/consumption_budget_management_group_resource.go index 41a8f9e3f0ae..f9a150d4dfc5 100644 --- a/internal/services/consumption/consumption_budget_management_group_resource.go +++ b/internal/services/consumption/consumption_budget_management_group_resource.go @@ -1,9 +1,8 @@ package consumption import ( - "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption" + "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/validate" validateManagementGroup "github.com/hashicorp/terraform-provider-azurerm/internal/services/managementgroup/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" @@ -58,10 +57,10 @@ func (r ManagementGroupConsumptionBudget) Arguments() map[string]*pluginsdk.Sche "threshold_type": { Type: pluginsdk.TypeString, Optional: true, - Default: string(consumption.ThresholdTypeActual), + Default: string(budgets.ThresholdTypeActual), ForceNew: true, // TODO: remove this when the above issue is fixed ValidateFunc: validation.StringInSlice([]string{ - string(consumption.ThresholdTypeActual), + string(budgets.ThresholdTypeActual), "Forecasted", }, false), }, @@ -69,9 +68,9 @@ func (r ManagementGroupConsumptionBudget) Arguments() map[string]*pluginsdk.Sche Type: pluginsdk.TypeString, Required: true, ValidateFunc: validation.StringInSlice([]string{ - string(consumption.OperatorTypeEqualTo), - string(consumption.OperatorTypeGreaterThan), - string(consumption.OperatorTypeGreaterThanOrEqualTo), + string(budgets.OperatorTypeEqualTo), + string(budgets.OperatorTypeGreaterThan), + string(budgets.OperatorTypeGreaterThanOrEqualTo), }, false), }, @@ -104,7 +103,7 @@ func (r ManagementGroupConsumptionBudget) ResourceType() string { } func (r ManagementGroupConsumptionBudget) IDValidationFunc() pluginsdk.SchemaValidateFunc { - return validate.ConsumptionBudgetManagementGroupID + return budgets.ValidateScopedBudgetID } func (r ManagementGroupConsumptionBudget) Create() sdk.ResourceFunc { @@ -124,5 +123,5 @@ func (r ManagementGroupConsumptionBudget) Update() sdk.ResourceFunc { } func (r ManagementGroupConsumptionBudget) CustomImporter() sdk.ResourceRunFunc { - return r.base.importerFunc("management_group") + return r.base.importerFunc() } diff --git a/internal/services/consumption/consumption_budget_management_group_resource_test.go b/internal/services/consumption/consumption_budget_management_group_resource_test.go index cd6b1e513d96..db677cc469f2 100644 --- a/internal/services/consumption/consumption_budget_management_group_resource_test.go +++ b/internal/services/consumption/consumption_budget_management_group_resource_test.go @@ -6,10 +6,10 @@ import ( "testing" "time" + "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" ) @@ -109,17 +109,17 @@ func TestAccConsumptionBudgetManagementGroup_completeUpdate(t *testing.T) { } func (ConsumptionBudgetManagementGroupResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.ConsumptionBudgetID(state.ID) + id, err := budgets.ParseScopedBudgetID(state.ID) if err != nil { return nil, err } - resp, err := clients.Consumption.BudgetsClient.Get(ctx, id.Scope, id.Name) + resp, err := clients.Consumption.BudgetsClient.Get(ctx, *id) if err != nil { return nil, fmt.Errorf("retrieving %s: %v", *id, err) } - return utils.Bool(resp.BudgetProperties != nil), nil + return utils.Bool(resp.Model != nil), nil } func (ConsumptionBudgetManagementGroupResource) basic(data acceptance.TestData) string { diff --git a/internal/services/consumption/consumption_budget_resource_group_data_source.go b/internal/services/consumption/consumption_budget_resource_group_data_source.go index a72de7712429..b01c5f7f3b11 100644 --- a/internal/services/consumption/consumption_budget_resource_group_data_source.go +++ b/internal/services/consumption/consumption_budget_resource_group_data_source.go @@ -4,12 +4,12 @@ import ( "fmt" "time" + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" - "github.com/hashicorp/terraform-provider-azurerm/utils" ) func resourceArmConsumptionBudgetResourceGroupDataSource() *pluginsdk.Resource { @@ -223,28 +223,28 @@ func resourceArmConsumptionBudgetResourceGroupDataSourceRead(d *pluginsdk.Resour ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - id := parse.NewConsumptionBudgetId(d.Get("resource_group_id").(string), d.Get("name").(string)) + id := budgets.NewScopedBudgetID(d.Get("resource_group_id").(string), d.Get("name").(string)) d.SetId(id.ID()) - resp, err := client.Get(ctx, id.Scope, id.Name) + resp, err := client.Get(ctx, id) if err != nil { - if utils.ResponseWasNotFound(resp.Response) { + if response.WasNotFound(resp.HttpResponse) { d.SetId("") return nil } return fmt.Errorf("making read request on %s: %+v", id, err) } - d.Set("name", resp.Name) - if resp.Amount != nil { - amount, _ := resp.Amount.Float64() - d.Set("amount", amount) + d.Set("name", id.BudgetName) + if model := resp.Model; model != nil { + if props := model.Properties; props != nil { + d.Set("amount", props.Amount) + d.Set("time_grain", string(props.TimeGrain)) + d.Set("time_period", flattenConsumptionBudgetTimePeriod(&props.TimePeriod)) + d.Set("notification", flattenConsumptionBudgetNotifications(props.Notifications, id.Scope)) + d.Set("filter", flattenConsumptionBudgetFilter(props.Filter)) + } } - d.Set("resource_group_id", id.Scope) - d.Set("time_grain", string(resp.TimeGrain)) - d.Set("time_period", flattenConsumptionBudgetTimePeriod(resp.TimePeriod)) - d.Set("notification", flattenConsumptionBudgetNotifications(resp.Notifications, id.Scope)) - d.Set("filter", flattenConsumptionBudgetFilter(resp.Filter)) return nil } diff --git a/internal/services/consumption/consumption_budget_resource_group_resource.go b/internal/services/consumption/consumption_budget_resource_group_resource.go index af2cf8039740..6f22756a783d 100644 --- a/internal/services/consumption/consumption_budget_resource_group_resource.go +++ b/internal/services/consumption/consumption_budget_resource_group_resource.go @@ -1,8 +1,8 @@ package consumption import ( + "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/validate" validateResourceGroup "github.com/hashicorp/terraform-provider-azurerm/internal/services/resource/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" @@ -48,7 +48,7 @@ func (r ResourceGroupConsumptionBudget) ResourceType() string { } func (r ResourceGroupConsumptionBudget) IDValidationFunc() pluginsdk.SchemaValidateFunc { - return validate.ConsumptionBudgetResourceGroupID + return budgets.ValidateScopedBudgetID } func (r ResourceGroupConsumptionBudget) Create() sdk.ResourceFunc { @@ -68,5 +68,5 @@ func (r ResourceGroupConsumptionBudget) Update() sdk.ResourceFunc { } func (r ResourceGroupConsumptionBudget) CustomImporter() sdk.ResourceRunFunc { - return r.base.importerFunc("resource_group") + return r.base.importerFunc() } diff --git a/internal/services/consumption/consumption_budget_resource_group_resource_test.go b/internal/services/consumption/consumption_budget_resource_group_resource_test.go index 95061df52b20..ce902879d9e9 100644 --- a/internal/services/consumption/consumption_budget_resource_group_resource_test.go +++ b/internal/services/consumption/consumption_budget_resource_group_resource_test.go @@ -6,10 +6,10 @@ import ( "testing" "time" + "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" ) @@ -121,17 +121,17 @@ func TestAccConsumptionBudgetResourceGroup_disappears(t *testing.T) { } func (ConsumptionBudgetResourceGroupResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.ConsumptionBudgetID(state.ID) + id, err := budgets.ParseScopedBudgetID(state.ID) if err != nil { return nil, err } - resp, err := clients.Consumption.BudgetsClient.Get(ctx, id.Scope, id.Name) + resp, err := clients.Consumption.BudgetsClient.Get(ctx, *id) if err != nil { return nil, fmt.Errorf("retrieving %s: %v", *id, err) } - return utils.Bool(resp.BudgetProperties != nil), nil + return utils.Bool(resp.Model != nil), nil } func (ConsumptionBudgetResourceGroupResource) basic(data acceptance.TestData) string { @@ -458,12 +458,12 @@ resource "azurerm_consumption_budget_resource_group" "test" { } func (t ConsumptionBudgetResourceGroupResource) Destroy(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.ConsumptionBudgetID(state.ID) + id, err := budgets.ParseScopedBudgetID(state.ID) if err != nil { return nil, err } - if _, err = client.Consumption.BudgetsClient.Delete(ctx, id.Scope, id.Name); err != nil { + if _, err = client.Consumption.BudgetsClient.Delete(ctx, *id); err != nil { return nil, fmt.Errorf("deleting %s: %+v", *id, err) } diff --git a/internal/services/consumption/consumption_budget_subscription_data_source.go b/internal/services/consumption/consumption_budget_subscription_data_source.go index 4c4424caa9b8..0ff13b8d753c 100644 --- a/internal/services/consumption/consumption_budget_subscription_data_source.go +++ b/internal/services/consumption/consumption_budget_subscription_data_source.go @@ -4,12 +4,12 @@ import ( "fmt" "time" + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" - "github.com/hashicorp/terraform-provider-azurerm/utils" ) func resourceArmConsumptionBudgetSubscriptionDataSource() *pluginsdk.Resource { @@ -223,27 +223,27 @@ func resourceArmConsumptionBudgetSubscriptionDataSourceRead(d *pluginsdk.Resourc ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - id := parse.NewConsumptionBudgetId(d.Get("subscription_id").(string), d.Get("name").(string)) + id := budgets.NewScopedBudgetID(d.Get("subscription_id").(string), d.Get("name").(string)) - resp, err := client.Get(ctx, id.Scope, id.Name) + resp, err := client.Get(ctx, id) if err != nil { - if utils.ResponseWasNotFound(resp.Response) { + if response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("%s was not found", id) } return fmt.Errorf("retrieving %s: %+v", id, err) } d.SetId(id.ID()) - d.Set("name", id.Name) - d.Set("subscription_id", id.Scope) - if resp.Amount != nil { - amount, _ := resp.Amount.Float64() - d.Set("amount", amount) + d.Set("name", id.BudgetName) + if model := resp.Model; model != nil { + if props := model.Properties; props != nil { + d.Set("amount", props.Amount) + d.Set("time_grain", string(props.TimeGrain)) + d.Set("time_period", flattenConsumptionBudgetTimePeriod(&props.TimePeriod)) + d.Set("notification", flattenConsumptionBudgetNotifications(props.Notifications, id.Scope)) + d.Set("filter", flattenConsumptionBudgetFilter(props.Filter)) + } } - d.Set("time_grain", string(resp.TimeGrain)) - d.Set("time_period", flattenConsumptionBudgetTimePeriod(resp.TimePeriod)) - d.Set("notification", flattenConsumptionBudgetNotifications(resp.Notifications, id.Scope)) - d.Set("filter", flattenConsumptionBudgetFilter(resp.Filter)) return nil } diff --git a/internal/services/consumption/consumption_budget_subscription_resource.go b/internal/services/consumption/consumption_budget_subscription_resource.go index 3cd80093a024..ea8b696c6f87 100644 --- a/internal/services/consumption/consumption_budget_subscription_resource.go +++ b/internal/services/consumption/consumption_budget_subscription_resource.go @@ -2,9 +2,9 @@ package consumption import ( "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" + "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/migration" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" ) @@ -50,7 +50,7 @@ func (r SubscriptionConsumptionBudget) ResourceType() string { } func (r SubscriptionConsumptionBudget) IDValidationFunc() pluginsdk.SchemaValidateFunc { - return validate.ConsumptionBudgetSubscriptionID + return budgets.ValidateScopedBudgetID } func (r SubscriptionConsumptionBudget) Create() sdk.ResourceFunc { @@ -70,7 +70,7 @@ func (r SubscriptionConsumptionBudget) Update() sdk.ResourceFunc { } func (r SubscriptionConsumptionBudget) CustomImporter() sdk.ResourceRunFunc { - return r.base.importerFunc("subscription") + return r.base.importerFunc() } func (r SubscriptionConsumptionBudget) StateUpgraders() sdk.StateUpgradeData { diff --git a/internal/services/consumption/consumption_budget_subscription_resource_test.go b/internal/services/consumption/consumption_budget_subscription_resource_test.go index 7617f005ef1f..2dcb87b63766 100644 --- a/internal/services/consumption/consumption_budget_subscription_resource_test.go +++ b/internal/services/consumption/consumption_budget_subscription_resource_test.go @@ -6,10 +6,10 @@ import ( "testing" "time" + "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" ) @@ -116,17 +116,17 @@ func TestAccConsumptionBudgetSubscription_completeUpdate(t *testing.T) { } func (ConsumptionBudgetSubscriptionResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.ConsumptionBudgetID(state.ID) + id, err := budgets.ParseScopedBudgetID(state.ID) if err != nil { return nil, err } - resp, err := clients.Consumption.BudgetsClient.Get(ctx, id.Scope, id.Name) + resp, err := clients.Consumption.BudgetsClient.Get(ctx, *id) if err != nil { return nil, fmt.Errorf("retrieving %s: %v", *id, err) } - return utils.Bool(resp.BudgetProperties != nil), nil + return utils.Bool(resp.Model != nil), nil } func (ConsumptionBudgetSubscriptionResource) basic(data acceptance.TestData) string { diff --git a/internal/services/consumption/migration/consumption_budget_subscription.go b/internal/services/consumption/migration/consumption_budget_subscription.go index c663acd5ea2c..93faacfb0b9d 100644 --- a/internal/services/consumption/migration/consumption_budget_subscription.go +++ b/internal/services/consumption/migration/consumption_budget_subscription.go @@ -6,7 +6,7 @@ import ( "log" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/parse" + "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" ) @@ -241,13 +241,13 @@ func (SubscriptionConsumptionBudgetV1ToV2) UpgradeFunc() pluginsdk.StateUpgrader // since the `subscription_id` field gets incorrectly mutated in the V0 -> V1 upgrade // we have to parse it from the ID instead to correct this idRaw := rawState["id"].(string) - id, err := parse.ConsumptionBudgetSubscriptionID(idRaw) + id, err := budgets.ParseScopedBudgetID(idRaw) if err != nil { return nil, fmt.Errorf("parsing %q: %+v", idRaw, err) } oldSubscriptionId := rawState["subscription_id"].(commonids.SubscriptionId) - newSubscriptionId := commonids.NewSubscriptionID(id.SubscriptionId).ID() + newSubscriptionId := commonids.NewSubscriptionID(id.Scope).ID() log.Printf("[DEBUG] Updating subscription_id from %q to %q", oldSubscriptionId, newSubscriptionId) rawState["subscription_id"] = newSubscriptionId diff --git a/internal/services/consumption/parse/consumption_budget.go b/internal/services/consumption/parse/consumption_budget.go deleted file mode 100644 index baf347fbb41c..000000000000 --- a/internal/services/consumption/parse/consumption_budget.go +++ /dev/null @@ -1,59 +0,0 @@ -package parse - -import ( - "fmt" - "regexp" - "strings" -) - -type ConsumptionBudgetId struct { - Name string - Scope string -} - -func (id ConsumptionBudgetId) String() string { - segments := []string{ - fmt.Sprintf("Consumption Budget Name %q", id.Name), - fmt.Sprintf("Scope %q", id.Scope), - } - segmentsStr := strings.Join(segments, " / ") - return fmt.Sprintf("%s: (%s)", "Consumption Budget ID", segmentsStr) -} - -func (id ConsumptionBudgetId) ID() string { - fmtString := "%s/providers/Microsoft.Consumption/budgets/%s" - return fmt.Sprintf(fmtString, id.Scope, id.Name) -} - -func NewConsumptionBudgetId(scope, name string) ConsumptionBudgetId { - return ConsumptionBudgetId{ - Name: name, - Scope: scope, - } -} - -func ConsumptionBudgetID(input string) (*ConsumptionBudgetId, error) { - // in general, the id of a budget should be: - // {scope}/providers/Microsoft.Consumption/budgets/{name} - regex := regexp.MustCompile(`/providers/Microsoft\.Consumption/budgets/`) - if !regex.MatchString(input) { - return nil, fmt.Errorf("unable to parse Consumption Budget ID %q", input) - } - - segments := regex.Split(input, -1) - - if len(segments) != 2 { - return nil, fmt.Errorf("unable to parse Consumption Budget ID %q: Expected 2 segments after split", input) - } - - scope := segments[0] - name := segments[1] - if name == "" { - return nil, fmt.Errorf("unable to parse Consumption Budget ID %q: budget name is empty", input) - } - - return &ConsumptionBudgetId{ - Name: name, - Scope: scope, - }, nil -} diff --git a/internal/services/consumption/parse/consumption_budget_management_group.go b/internal/services/consumption/parse/consumption_budget_management_group.go deleted file mode 100644 index aec534efaba8..000000000000 --- a/internal/services/consumption/parse/consumption_budget_management_group.go +++ /dev/null @@ -1,58 +0,0 @@ -package parse - -import ( - "fmt" - "strings" - - "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" -) - -type ConsumptionBudgetManagementGroupId struct { - ManagementGroupName string - BudgetName string -} - -func NewConsumptionBudgetManagementGroupID(managementGroupName, budgetName string) ConsumptionBudgetManagementGroupId { - return ConsumptionBudgetManagementGroupId{ - ManagementGroupName: managementGroupName, - BudgetName: budgetName, - } -} - -func (id ConsumptionBudgetManagementGroupId) String() string { - segments := []string{ - fmt.Sprintf("Budget Name %q", id.BudgetName), - fmt.Sprintf("Management Group Name %q", id.ManagementGroupName), - } - segmentsStr := strings.Join(segments, " / ") - return fmt.Sprintf("%s: (%s)", "Consumption Budget Management Group", segmentsStr) -} - -func (id ConsumptionBudgetManagementGroupId) ID() string { - fmtString := "/providers/Microsoft.Management/managementGroups/%s/providers/Microsoft.Consumption/budgets/%s" - return fmt.Sprintf(fmtString, id.ManagementGroupName, id.BudgetName) -} - -// ConsumptionBudgetManagementGroupID parses a ConsumptionBudgetManagementGroup ID into an ConsumptionBudgetManagementGroupId struct -func ConsumptionBudgetManagementGroupID(input string) (*ConsumptionBudgetManagementGroupId, error) { - id, err := azure.ParseAzureResourceIDWithoutSubscription(input) - if err != nil { - return nil, err - } - - resourceId := ConsumptionBudgetManagementGroupId{} - - if resourceId.ManagementGroupName, err = id.PopSegment("managementGroups"); err != nil { - return nil, err - } - - if resourceId.BudgetName, err = id.PopSegment("budgets"); err != nil { - return nil, err - } - - if err := id.ValidateNoEmptySegments(input); err != nil { - return nil, err - } - - return &resourceId, nil -} diff --git a/internal/services/consumption/parse/consumption_budget_management_group_test.go b/internal/services/consumption/parse/consumption_budget_management_group_test.go deleted file mode 100644 index bb8f8db99d64..000000000000 --- a/internal/services/consumption/parse/consumption_budget_management_group_test.go +++ /dev/null @@ -1,93 +0,0 @@ -package parse - -import ( - "testing" - - "github.com/hashicorp/terraform-provider-azurerm/internal/resourceid" -) - -var _ resourceid.Formatter = ConsumptionBudgetManagementGroupId{} - -func TestConsumptionBudgetManagementGroupIDFormatter(t *testing.T) { - actual := NewConsumptionBudgetManagementGroupID("12345678-1234-9876-4563-123456789012", "budget1").ID() - expected := "/providers/Microsoft.Management/managementGroups/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/budgets/budget1" - if actual != expected { - t.Fatalf("Expected %q but got %q", expected, actual) - } -} - -func TestConsumptionBudgetManagementGroupID(t *testing.T) { - testData := []struct { - Input string - Error bool - Expected *ConsumptionBudgetManagementGroupId - }{ - { - // empty - Input: "", - Error: true, - }, - - { - // missing ManagementGroupName - Input: "/providers/Microsoft.Management/", - Error: true, - }, - - { - // missing value for ManagementGroupName - Input: "/providers/Microsoft.Management/managementGroups/", - Error: true, - }, - - { - // missing BudgetName - Input: "/providers/Microsoft.Management/managementGroups/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/", - Error: true, - }, - - { - // missing value for BudgetName - Input: "/providers/Microsoft.Management/managementGroups/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/budgets/", - Error: true, - }, - - { - // valid - Input: "/providers/Microsoft.Management/managementGroups/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/budgets/budget1", - Expected: &ConsumptionBudgetManagementGroupId{ - ManagementGroupName: "12345678-1234-9876-4563-123456789012", - BudgetName: "budget1", - }, - }, - - { - // upper-cased - Input: "/PROVIDERS/MICROSOFT.MANAGEMENT/MANAGEMENTGROUPS/12345678-1234-9876-4563-123456789012/PROVIDERS/MICROSOFT.CONSUMPTION/BUDGETS/BUDGET1", - Error: true, - }, - } - - for _, v := range testData { - t.Logf("[DEBUG] Testing %q", v.Input) - - actual, err := ConsumptionBudgetManagementGroupID(v.Input) - if err != nil { - if v.Error { - continue - } - - t.Fatalf("Expect a value but got an error: %s", err) - } - if v.Error { - t.Fatal("Expect an error but didn't get one") - } - - if actual.ManagementGroupName != v.Expected.ManagementGroupName { - t.Fatalf("Expected %q but got %q for ManagementGroupName", v.Expected.ManagementGroupName, actual.ManagementGroupName) - } - if actual.BudgetName != v.Expected.BudgetName { - t.Fatalf("Expected %q but got %q for BudgetName", v.Expected.BudgetName, actual.BudgetName) - } - } -} diff --git a/internal/services/consumption/parse/consumption_budget_resource_group.go b/internal/services/consumption/parse/consumption_budget_resource_group.go deleted file mode 100644 index df388b794ce4..000000000000 --- a/internal/services/consumption/parse/consumption_budget_resource_group.go +++ /dev/null @@ -1,69 +0,0 @@ -package parse - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - "strings" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" -) - -type ConsumptionBudgetResourceGroupId struct { - SubscriptionId string - ResourceGroup string - BudgetName string -} - -func NewConsumptionBudgetResourceGroupID(subscriptionId, resourceGroup, budgetName string) ConsumptionBudgetResourceGroupId { - return ConsumptionBudgetResourceGroupId{ - SubscriptionId: subscriptionId, - ResourceGroup: resourceGroup, - BudgetName: budgetName, - } -} - -func (id ConsumptionBudgetResourceGroupId) String() string { - segments := []string{ - fmt.Sprintf("Budget Name %q", id.BudgetName), - fmt.Sprintf("Resource Group %q", id.ResourceGroup), - } - segmentsStr := strings.Join(segments, " / ") - return fmt.Sprintf("%s: (%s)", "Consumption Budget Resource Group", segmentsStr) -} - -func (id ConsumptionBudgetResourceGroupId) ID() string { - fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Consumption/budgets/%s" - return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroup, id.BudgetName) -} - -// ConsumptionBudgetResourceGroupID parses a ConsumptionBudgetResourceGroup ID into an ConsumptionBudgetResourceGroupId struct -func ConsumptionBudgetResourceGroupID(input string) (*ConsumptionBudgetResourceGroupId, error) { - id, err := resourceids.ParseAzureResourceID(input) - if err != nil { - return nil, err - } - - resourceId := ConsumptionBudgetResourceGroupId{ - SubscriptionId: id.SubscriptionID, - ResourceGroup: id.ResourceGroup, - } - - if resourceId.SubscriptionId == "" { - return nil, fmt.Errorf("ID was missing the 'subscriptions' element") - } - - if resourceId.ResourceGroup == "" { - return nil, fmt.Errorf("ID was missing the 'resourceGroups' element") - } - - if resourceId.BudgetName, err = id.PopSegment("budgets"); err != nil { - return nil, err - } - - if err := id.ValidateNoEmptySegments(input); err != nil { - return nil, err - } - - return &resourceId, nil -} diff --git a/internal/services/consumption/parse/consumption_budget_resource_group_test.go b/internal/services/consumption/parse/consumption_budget_resource_group_test.go deleted file mode 100644 index ede1b168497e..000000000000 --- a/internal/services/consumption/parse/consumption_budget_resource_group_test.go +++ /dev/null @@ -1,112 +0,0 @@ -package parse - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "testing" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" -) - -var _ resourceids.Id = ConsumptionBudgetResourceGroupId{} - -func TestConsumptionBudgetResourceGroupIDFormatter(t *testing.T) { - actual := NewConsumptionBudgetResourceGroupID("12345678-1234-9876-4563-123456789012", "resGroup1", "budget1").ID() - expected := "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Consumption/budgets/budget1" - if actual != expected { - t.Fatalf("Expected %q but got %q", expected, actual) - } -} - -func TestConsumptionBudgetResourceGroupID(t *testing.T) { - testData := []struct { - Input string - Error bool - Expected *ConsumptionBudgetResourceGroupId - }{ - - { - // empty - Input: "", - Error: true, - }, - - { - // missing SubscriptionId - Input: "/", - Error: true, - }, - - { - // missing value for SubscriptionId - Input: "/subscriptions/", - Error: true, - }, - - { - // missing ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/", - Error: true, - }, - - { - // missing value for ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/", - Error: true, - }, - - { - // missing BudgetName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Consumption/", - Error: true, - }, - - { - // missing value for BudgetName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Consumption/budgets/", - Error: true, - }, - - { - // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Consumption/budgets/budget1", - Expected: &ConsumptionBudgetResourceGroupId{ - SubscriptionId: "12345678-1234-9876-4563-123456789012", - ResourceGroup: "resGroup1", - BudgetName: "budget1", - }, - }, - - { - // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.CONSUMPTION/BUDGETS/BUDGET1", - Error: true, - }, - } - - for _, v := range testData { - t.Logf("[DEBUG] Testing %q", v.Input) - - actual, err := ConsumptionBudgetResourceGroupID(v.Input) - if err != nil { - if v.Error { - continue - } - - t.Fatalf("Expect a value but got an error: %s", err) - } - if v.Error { - t.Fatal("Expect an error but didn't get one") - } - - if actual.SubscriptionId != v.Expected.SubscriptionId { - t.Fatalf("Expected %q but got %q for SubscriptionId", v.Expected.SubscriptionId, actual.SubscriptionId) - } - if actual.ResourceGroup != v.Expected.ResourceGroup { - t.Fatalf("Expected %q but got %q for ResourceGroup", v.Expected.ResourceGroup, actual.ResourceGroup) - } - if actual.BudgetName != v.Expected.BudgetName { - t.Fatalf("Expected %q but got %q for BudgetName", v.Expected.BudgetName, actual.BudgetName) - } - } -} diff --git a/internal/services/consumption/parse/consumption_budget_subscription.go b/internal/services/consumption/parse/consumption_budget_subscription.go deleted file mode 100644 index db1d04240515..000000000000 --- a/internal/services/consumption/parse/consumption_budget_subscription.go +++ /dev/null @@ -1,61 +0,0 @@ -package parse - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - "strings" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" -) - -type ConsumptionBudgetSubscriptionId struct { - SubscriptionId string - BudgetName string -} - -func NewConsumptionBudgetSubscriptionID(subscriptionId, budgetName string) ConsumptionBudgetSubscriptionId { - return ConsumptionBudgetSubscriptionId{ - SubscriptionId: subscriptionId, - BudgetName: budgetName, - } -} - -func (id ConsumptionBudgetSubscriptionId) String() string { - segments := []string{ - fmt.Sprintf("Budget Name %q", id.BudgetName), - } - segmentsStr := strings.Join(segments, " / ") - return fmt.Sprintf("%s: (%s)", "Consumption Budget Subscription", segmentsStr) -} - -func (id ConsumptionBudgetSubscriptionId) ID() string { - fmtString := "/subscriptions/%s/providers/Microsoft.Consumption/budgets/%s" - return fmt.Sprintf(fmtString, id.SubscriptionId, id.BudgetName) -} - -// ConsumptionBudgetSubscriptionID parses a ConsumptionBudgetSubscription ID into an ConsumptionBudgetSubscriptionId struct -func ConsumptionBudgetSubscriptionID(input string) (*ConsumptionBudgetSubscriptionId, error) { - id, err := resourceids.ParseAzureResourceID(input) - if err != nil { - return nil, err - } - - resourceId := ConsumptionBudgetSubscriptionId{ - SubscriptionId: id.SubscriptionID, - } - - if resourceId.SubscriptionId == "" { - return nil, fmt.Errorf("ID was missing the 'subscriptions' element") - } - - if resourceId.BudgetName, err = id.PopSegment("budgets"); err != nil { - return nil, err - } - - if err := id.ValidateNoEmptySegments(input); err != nil { - return nil, err - } - - return &resourceId, nil -} diff --git a/internal/services/consumption/parse/consumption_budget_subscription_test.go b/internal/services/consumption/parse/consumption_budget_subscription_test.go deleted file mode 100644 index 117a25d64148..000000000000 --- a/internal/services/consumption/parse/consumption_budget_subscription_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package parse - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "testing" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" -) - -var _ resourceids.Id = ConsumptionBudgetSubscriptionId{} - -func TestConsumptionBudgetSubscriptionIDFormatter(t *testing.T) { - actual := NewConsumptionBudgetSubscriptionID("12345678-1234-9876-4563-123456789012", "budget1").ID() - expected := "/subscriptions/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/budgets/budget1" - if actual != expected { - t.Fatalf("Expected %q but got %q", expected, actual) - } -} - -func TestConsumptionBudgetSubscriptionID(t *testing.T) { - testData := []struct { - Input string - Error bool - Expected *ConsumptionBudgetSubscriptionId - }{ - - { - // empty - Input: "", - Error: true, - }, - - { - // missing SubscriptionId - Input: "/", - Error: true, - }, - - { - // missing value for SubscriptionId - Input: "/subscriptions/", - Error: true, - }, - - { - // missing BudgetName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/", - Error: true, - }, - - { - // missing value for BudgetName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/budgets/", - Error: true, - }, - - { - // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/budgets/budget1", - Expected: &ConsumptionBudgetSubscriptionId{ - SubscriptionId: "12345678-1234-9876-4563-123456789012", - BudgetName: "budget1", - }, - }, - - { - // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/PROVIDERS/MICROSOFT.CONSUMPTION/BUDGETS/BUDGET1", - Error: true, - }, - } - - for _, v := range testData { - t.Logf("[DEBUG] Testing %q", v.Input) - - actual, err := ConsumptionBudgetSubscriptionID(v.Input) - if err != nil { - if v.Error { - continue - } - - t.Fatalf("Expect a value but got an error: %s", err) - } - if v.Error { - t.Fatal("Expect an error but didn't get one") - } - - if actual.SubscriptionId != v.Expected.SubscriptionId { - t.Fatalf("Expected %q but got %q for SubscriptionId", v.Expected.SubscriptionId, actual.SubscriptionId) - } - if actual.BudgetName != v.Expected.BudgetName { - t.Fatalf("Expected %q but got %q for BudgetName", v.Expected.BudgetName, actual.BudgetName) - } - } -} diff --git a/internal/services/consumption/parse/consumption_budget_test.go b/internal/services/consumption/parse/consumption_budget_test.go deleted file mode 100644 index a420cd80f457..000000000000 --- a/internal/services/consumption/parse/consumption_budget_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package parse - -import ( - "testing" -) - -func TestCostManagementExportID(t *testing.T) { - testData := []struct { - Name string - Input string - Error bool - Expected *ConsumptionBudgetId - }{ - { - Name: "empty", - Input: "", - Error: true, - }, - { - Name: "resource group consumption budget", - Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foo/providers/Microsoft.Consumption/budgets/budget1", - Expected: &ConsumptionBudgetId{ - Name: "budget1", - Scope: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foo", - }, - }, - { - Name: "resource group consumption budget but no name", - Input: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foo/providers/Microsoft.Consumption/budgets/", - Error: true, - }, - { - Name: "subscription consumption budget", - Input: "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/budget1", - Expected: &ConsumptionBudgetId{ - Name: "budget1", - Scope: "/subscriptions/00000000-0000-0000-0000-000000000000", - }, - }, - { - Name: "subscription consumption budget but no name", - Input: "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/", - Error: true, - }, - { - Name: "management group consumption budget", - Input: "/providers/Microsoft.Management/managementGroups/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/budget1", - Expected: &ConsumptionBudgetId{ - Name: "budget1", - Scope: "/providers/Microsoft.Management/managementGroups/00000000-0000-0000-0000-000000000000", - }, - }, - { - Name: "management group consumption budget but no name", - Input: "/providers/Microsoft.Management/managementGroups/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/", - Error: true, - }, - } - - for _, v := range testData { - t.Logf("[DEBUG] Testing %q", v.Name) - - actual, err := ConsumptionBudgetID(v.Input) - if err != nil { - if v.Error { - continue - } - - t.Fatalf("Expected a value but got an error: %+v", err) - } - - if actual.Name != v.Expected.Name { - t.Fatalf("Expected %q but got %q", v.Expected.Name, actual.Name) - } - - if v.Expected.Scope != actual.Scope { - t.Fatalf("Expected %+v but got %+v", v.Expected.Scope, actual.Scope) - } - } -} diff --git a/internal/services/consumption/resourceids.go b/internal/services/consumption/resourceids.go deleted file mode 100644 index 7628c18ee553..000000000000 --- a/internal/services/consumption/resourceids.go +++ /dev/null @@ -1,4 +0,0 @@ -package consumption - -//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=ConsumptionBudgetResourceGroup -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Consumption/budgets/budget1 -//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=ConsumptionBudgetSubscription -id=/subscriptions/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/budgets/budget1 diff --git a/internal/services/consumption/validate/consumption_budget_management_group_id.go b/internal/services/consumption/validate/consumption_budget_management_group_id.go deleted file mode 100644 index eccf397dd0fe..000000000000 --- a/internal/services/consumption/validate/consumption_budget_management_group_id.go +++ /dev/null @@ -1,23 +0,0 @@ -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/parse" -) - -func ConsumptionBudgetManagementGroupID(input interface{}, key string) (warnings []string, errors []error) { - v, ok := input.(string) - if !ok { - errors = append(errors, fmt.Errorf("expected %q to be a string", key)) - return - } - - if _, err := parse.ConsumptionBudgetManagementGroupID(v); err != nil { - errors = append(errors, err) - } - - return -} diff --git a/internal/services/consumption/validate/consumption_budget_management_group_id_test.go b/internal/services/consumption/validate/consumption_budget_management_group_id_test.go deleted file mode 100644 index cabe6fd1e8bb..000000000000 --- a/internal/services/consumption/validate/consumption_budget_management_group_id_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import "testing" - -func TestConsumptionBudgetManagementGroupID(t *testing.T) { - cases := []struct { - Input string - Valid bool - }{ - { - // empty - Input: "", - Valid: false, - }, - - { - // missing ManagementGroupName - Input: "/providers/Microsoft.Management/", - Valid: false, - }, - - { - // missing value for ManagementGroupName - Input: "/providers/Microsoft.Management/managementGroups/", - Valid: false, - }, - - { - // missing BudgetName - Input: "/providers/Microsoft.Management/managementGroups/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/", - Valid: false, - }, - - { - // missing value for BudgetName - Input: "/providers/Microsoft.Management/managementGroups/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/budgets/", - Valid: false, - }, - - { - // valid - Input: "/providers/Microsoft.Management/managementGroups/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/budgets/budget1", - Valid: true, - }, - - { - // upper-cased - Input: "/PROVIDERS/MICROSOFT.MANAGEMENT/MANAGEMENTGROUPS/12345678-1234-9876-4563-123456789012/PROVIDERS/MICROSOFT.CONSUMPTION/BUDGETS/BUDGET1", - Valid: false, - }, - } - for _, tc := range cases { - t.Logf("[DEBUG] Testing Value %s", tc.Input) - _, errors := ConsumptionBudgetManagementGroupID(tc.Input, "test") - valid := len(errors) == 0 - - if tc.Valid != valid { - t.Fatalf("Expected %t but got %t", tc.Valid, valid) - } - } -} diff --git a/internal/services/consumption/validate/consumption_budget_resource_group_id.go b/internal/services/consumption/validate/consumption_budget_resource_group_id.go deleted file mode 100644 index 1e5abf14fb46..000000000000 --- a/internal/services/consumption/validate/consumption_budget_resource_group_id.go +++ /dev/null @@ -1,23 +0,0 @@ -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/parse" -) - -func ConsumptionBudgetResourceGroupID(input interface{}, key string) (warnings []string, errors []error) { - v, ok := input.(string) - if !ok { - errors = append(errors, fmt.Errorf("expected %q to be a string", key)) - return - } - - if _, err := parse.ConsumptionBudgetResourceGroupID(v); err != nil { - errors = append(errors, err) - } - - return -} diff --git a/internal/services/consumption/validate/consumption_budget_resource_group_id_test.go b/internal/services/consumption/validate/consumption_budget_resource_group_id_test.go deleted file mode 100644 index 9595b0fdc466..000000000000 --- a/internal/services/consumption/validate/consumption_budget_resource_group_id_test.go +++ /dev/null @@ -1,76 +0,0 @@ -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import "testing" - -func TestConsumptionBudgetResourceGroupID(t *testing.T) { - cases := []struct { - Input string - Valid bool - }{ - - { - // empty - Input: "", - Valid: false, - }, - - { - // missing SubscriptionId - Input: "/", - Valid: false, - }, - - { - // missing value for SubscriptionId - Input: "/subscriptions/", - Valid: false, - }, - - { - // missing ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/", - Valid: false, - }, - - { - // missing value for ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/", - Valid: false, - }, - - { - // missing BudgetName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Consumption/", - Valid: false, - }, - - { - // missing value for BudgetName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Consumption/budgets/", - Valid: false, - }, - - { - // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Consumption/budgets/budget1", - Valid: true, - }, - - { - // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.CONSUMPTION/BUDGETS/BUDGET1", - Valid: false, - }, - } - for _, tc := range cases { - t.Logf("[DEBUG] Testing Value %s", tc.Input) - _, errors := ConsumptionBudgetResourceGroupID(tc.Input, "test") - valid := len(errors) == 0 - - if tc.Valid != valid { - t.Fatalf("Expected %t but got %t", tc.Valid, valid) - } - } -} diff --git a/internal/services/consumption/validate/consumption_budget_subscription_id.go b/internal/services/consumption/validate/consumption_budget_subscription_id.go deleted file mode 100644 index 9998395d62d5..000000000000 --- a/internal/services/consumption/validate/consumption_budget_subscription_id.go +++ /dev/null @@ -1,23 +0,0 @@ -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - - "github.com/hashicorp/terraform-provider-azurerm/internal/services/consumption/parse" -) - -func ConsumptionBudgetSubscriptionID(input interface{}, key string) (warnings []string, errors []error) { - v, ok := input.(string) - if !ok { - errors = append(errors, fmt.Errorf("expected %q to be a string", key)) - return - } - - if _, err := parse.ConsumptionBudgetSubscriptionID(v); err != nil { - errors = append(errors, err) - } - - return -} diff --git a/internal/services/consumption/validate/consumption_budget_subscription_id_test.go b/internal/services/consumption/validate/consumption_budget_subscription_id_test.go deleted file mode 100644 index 94d51b2b635c..000000000000 --- a/internal/services/consumption/validate/consumption_budget_subscription_id_test.go +++ /dev/null @@ -1,64 +0,0 @@ -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import "testing" - -func TestConsumptionBudgetSubscriptionID(t *testing.T) { - cases := []struct { - Input string - Valid bool - }{ - - { - // empty - Input: "", - Valid: false, - }, - - { - // missing SubscriptionId - Input: "/", - Valid: false, - }, - - { - // missing value for SubscriptionId - Input: "/subscriptions/", - Valid: false, - }, - - { - // missing BudgetName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/", - Valid: false, - }, - - { - // missing value for BudgetName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/budgets/", - Valid: false, - }, - - { - // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/providers/Microsoft.Consumption/budgets/budget1", - Valid: true, - }, - - { - // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/PROVIDERS/MICROSOFT.CONSUMPTION/BUDGETS/BUDGET1", - Valid: false, - }, - } - for _, tc := range cases { - t.Logf("[DEBUG] Testing Value %s", tc.Input) - _, errors := ConsumptionBudgetSubscriptionID(tc.Input, "test") - valid := len(errors) == 0 - - if tc.Valid != valid { - t.Fatalf("Expected %t but got %t", tc.Valid, valid) - } - } -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/CHANGELOG.md b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/CHANGELOG.md deleted file mode 100644 index 52911e4cc5e4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/CHANGELOG.md +++ /dev/null @@ -1,2 +0,0 @@ -# Change History - diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/_meta.json b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/_meta.json deleted file mode 100644 index a30de8aabb19..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/_meta.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "commit": "b47572ab2069865484c493a4f679d4e72f8b303d", - "readme": "/_/azure-rest-api-specs/specification/consumption/resource-manager/readme.md", - "tag": "package-2019-10", - "use": "@microsoft.azure/autorest.go@2.1.187", - "repository_url": "https://github.com/Azure/azure-rest-api-specs.git", - "autorest_command": "autorest --use=@microsoft.azure/autorest.go@2.1.187 --tag=package-2019-10 --go-sdk-folder=/_/azure-sdk-for-go --go --verbose --use-onever --version=2.0.4421 --go.license-header=MICROSOFT_MIT_NO_VERSION --enum-prefix /_/azure-rest-api-specs/specification/consumption/resource-manager/readme.md", - "additional_properties": { - "additional_options": "--go --verbose --use-onever --version=2.0.4421 --go.license-header=MICROSOFT_MIT_NO_VERSION --enum-prefix" - } -} \ No newline at end of file diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/aggregatedcost.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/aggregatedcost.go deleted file mode 100644 index fe24ef7a64d6..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/aggregatedcost.go +++ /dev/null @@ -1,188 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// AggregatedCostClient is the consumption management client provides access to consumption resources for Azure -// Enterprise Subscriptions. -type AggregatedCostClient struct { - BaseClient -} - -// NewAggregatedCostClient creates an instance of the AggregatedCostClient client. -func NewAggregatedCostClient(subscriptionID string) AggregatedCostClient { - return NewAggregatedCostClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewAggregatedCostClientWithBaseURI creates an instance of the AggregatedCostClient client using a custom endpoint. -// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewAggregatedCostClientWithBaseURI(baseURI string, subscriptionID string) AggregatedCostClient { - return AggregatedCostClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// GetByManagementGroup provides the aggregate cost of a management group and all child management groups by current -// billing period. -// Parameters: -// managementGroupID - azure Management Group ID. -// filter - may be used to filter aggregated cost by properties/usageStart (Utc time), properties/usageEnd (Utc -// time). The filter supports 'eq', 'lt', 'gt', 'le', 'ge', and 'and'. It does not currently support 'ne', -// 'or', or 'not'. Tag filter is a key value pair string where key and value is separated by a colon (:). -func (client AggregatedCostClient) GetByManagementGroup(ctx context.Context, managementGroupID string, filter string) (result ManagementGroupAggregatedCostResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AggregatedCostClient.GetByManagementGroup") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetByManagementGroupPreparer(ctx, managementGroupID, filter) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetByManagementGroup", nil, "Failure preparing request") - return - } - - resp, err := client.GetByManagementGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetByManagementGroup", resp, "Failure sending request") - return - } - - result, err = client.GetByManagementGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetByManagementGroup", resp, "Failure responding to request") - return - } - - return -} - -// GetByManagementGroupPreparer prepares the GetByManagementGroup request. -func (client AggregatedCostClient) GetByManagementGroupPreparer(ctx context.Context, managementGroupID string, filter string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "managementGroupId": autorest.Encode("path", managementGroupID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Consumption/aggregatedcost", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetByManagementGroupSender sends the GetByManagementGroup request. The method will close the -// http.Response Body if it receives an error. -func (client AggregatedCostClient) GetByManagementGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// GetByManagementGroupResponder handles the response to the GetByManagementGroup request. The method always -// closes the http.Response Body. -func (client AggregatedCostClient) GetByManagementGroupResponder(resp *http.Response) (result ManagementGroupAggregatedCostResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetForBillingPeriodByManagementGroup provides the aggregate cost of a management group and all child management -// groups by specified billing period -// Parameters: -// managementGroupID - azure Management Group ID. -// billingPeriodName - billing Period Name. -func (client AggregatedCostClient) GetForBillingPeriodByManagementGroup(ctx context.Context, managementGroupID string, billingPeriodName string) (result ManagementGroupAggregatedCostResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/AggregatedCostClient.GetForBillingPeriodByManagementGroup") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetForBillingPeriodByManagementGroupPreparer(ctx, managementGroupID, billingPeriodName) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetForBillingPeriodByManagementGroup", nil, "Failure preparing request") - return - } - - resp, err := client.GetForBillingPeriodByManagementGroupSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetForBillingPeriodByManagementGroup", resp, "Failure sending request") - return - } - - result, err = client.GetForBillingPeriodByManagementGroupResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetForBillingPeriodByManagementGroup", resp, "Failure responding to request") - return - } - - return -} - -// GetForBillingPeriodByManagementGroupPreparer prepares the GetForBillingPeriodByManagementGroup request. -func (client AggregatedCostClient) GetForBillingPeriodByManagementGroupPreparer(ctx context.Context, managementGroupID string, billingPeriodName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "billingPeriodName": autorest.Encode("path", billingPeriodName), - "managementGroupId": autorest.Encode("path", managementGroupID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}/Microsoft.Consumption/aggregatedCost", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetForBillingPeriodByManagementGroupSender sends the GetForBillingPeriodByManagementGroup request. The method will close the -// http.Response Body if it receives an error. -func (client AggregatedCostClient) GetForBillingPeriodByManagementGroupSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// GetForBillingPeriodByManagementGroupResponder handles the response to the GetForBillingPeriodByManagementGroup request. The method always -// closes the http.Response Body. -func (client AggregatedCostClient) GetForBillingPeriodByManagementGroupResponder(resp *http.Response) (result ManagementGroupAggregatedCostResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/balances.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/balances.go deleted file mode 100644 index d50b68f85d1c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/balances.go +++ /dev/null @@ -1,182 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// BalancesClient is the consumption management client provides access to consumption resources for Azure Enterprise -// Subscriptions. -type BalancesClient struct { - BaseClient -} - -// NewBalancesClient creates an instance of the BalancesClient client. -func NewBalancesClient(subscriptionID string) BalancesClient { - return NewBalancesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewBalancesClientWithBaseURI creates an instance of the BalancesClient client using a custom endpoint. Use this -// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewBalancesClientWithBaseURI(baseURI string, subscriptionID string) BalancesClient { - return BalancesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// GetByBillingAccount gets the balances for a scope by billingAccountId. Balances are available via this API only for -// May 1, 2014 or later. -// Parameters: -// billingAccountID - billingAccount ID -func (client BalancesClient) GetByBillingAccount(ctx context.Context, billingAccountID string) (result Balance, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/BalancesClient.GetByBillingAccount") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetByBillingAccountPreparer(ctx, billingAccountID) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetByBillingAccount", nil, "Failure preparing request") - return - } - - resp, err := client.GetByBillingAccountSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetByBillingAccount", resp, "Failure sending request") - return - } - - result, err = client.GetByBillingAccountResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetByBillingAccount", resp, "Failure responding to request") - return - } - - return -} - -// GetByBillingAccountPreparer prepares the GetByBillingAccount request. -func (client BalancesClient) GetByBillingAccountPreparer(ctx context.Context, billingAccountID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "billingAccountId": autorest.Encode("path", billingAccountID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/providers/Microsoft.Consumption/balances", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetByBillingAccountSender sends the GetByBillingAccount request. The method will close the -// http.Response Body if it receives an error. -func (client BalancesClient) GetByBillingAccountSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// GetByBillingAccountResponder handles the response to the GetByBillingAccount request. The method always -// closes the http.Response Body. -func (client BalancesClient) GetByBillingAccountResponder(resp *http.Response) (result Balance, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetForBillingPeriodByBillingAccount gets the balances for a scope by billing period and billingAccountId. Balances -// are available via this API only for May 1, 2014 or later. -// Parameters: -// billingAccountID - billingAccount ID -// billingPeriodName - billing Period Name. -func (client BalancesClient) GetForBillingPeriodByBillingAccount(ctx context.Context, billingAccountID string, billingPeriodName string) (result Balance, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/BalancesClient.GetForBillingPeriodByBillingAccount") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetForBillingPeriodByBillingAccountPreparer(ctx, billingAccountID, billingPeriodName) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetForBillingPeriodByBillingAccount", nil, "Failure preparing request") - return - } - - resp, err := client.GetForBillingPeriodByBillingAccountSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetForBillingPeriodByBillingAccount", resp, "Failure sending request") - return - } - - result, err = client.GetForBillingPeriodByBillingAccountResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetForBillingPeriodByBillingAccount", resp, "Failure responding to request") - return - } - - return -} - -// GetForBillingPeriodByBillingAccountPreparer prepares the GetForBillingPeriodByBillingAccount request. -func (client BalancesClient) GetForBillingPeriodByBillingAccountPreparer(ctx context.Context, billingAccountID string, billingPeriodName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "billingAccountId": autorest.Encode("path", billingAccountID), - "billingPeriodName": autorest.Encode("path", billingPeriodName), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingPeriods/{billingPeriodName}/providers/Microsoft.Consumption/balances", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetForBillingPeriodByBillingAccountSender sends the GetForBillingPeriodByBillingAccount request. The method will close the -// http.Response Body if it receives an error. -func (client BalancesClient) GetForBillingPeriodByBillingAccountSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// GetForBillingPeriodByBillingAccountResponder handles the response to the GetForBillingPeriodByBillingAccount request. The method always -// closes the http.Response Body. -func (client BalancesClient) GetForBillingPeriodByBillingAccountResponder(resp *http.Response) (result Balance, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/budgets.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/budgets.go deleted file mode 100644 index 02a7fada4de2..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/budgets.go +++ /dev/null @@ -1,462 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// BudgetsClient is the consumption management client provides access to consumption resources for Azure Enterprise -// Subscriptions. -type BudgetsClient struct { - BaseClient -} - -// NewBudgetsClient creates an instance of the BudgetsClient client. -func NewBudgetsClient(subscriptionID string) BudgetsClient { - return NewBudgetsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewBudgetsClientWithBaseURI creates an instance of the BudgetsClient client using a custom endpoint. Use this when -// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewBudgetsClientWithBaseURI(baseURI string, subscriptionID string) BudgetsClient { - return BudgetsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate the operation to create or update a budget. You can optionally provide an eTag if desired as a form -// of concurrency control. To obtain the latest eTag for a given budget, perform a get operation prior to your put -// operation. -// Parameters: -// scope - the scope associated with budget operations. This includes '/subscriptions/{subscriptionId}/' for -// subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resourceGroup -// scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department -// scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' -// for EnrollmentAccount scope, '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for -// Management Group scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for -// billingProfile scope, -// 'providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}' for -// invoiceSection scope. -// budgetName - budget Name. -// parameters - parameters supplied to the Create Budget operation. -func (client BudgetsClient) CreateOrUpdate(ctx context.Context, scope string, budgetName string, parameters Budget) (result Budget, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsClient.CreateOrUpdate") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: parameters, - Constraints: []validation.Constraint{{Target: "parameters.BudgetProperties", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Category", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.BudgetProperties.Amount", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.BudgetProperties.TimePeriod", Name: validation.Null, Rule: true, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.TimePeriod.StartDate", Name: validation.Null, Rule: true, Chain: nil}}}, - {Target: "parameters.BudgetProperties.Filter", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filter.And", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filter.And", Name: validation.MinItems, Rule: 0, Chain: nil}}}, - {Target: "parameters.BudgetProperties.Filter.Not", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filter.Not.Dimensions", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filter.Not.Dimensions.Name", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.BudgetProperties.Filter.Not.Dimensions.Operator", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.BudgetProperties.Filter.Not.Dimensions.Values", Name: validation.Null, Rule: true, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filter.Not.Dimensions.Values", Name: validation.MinItems, Rule: 0, Chain: nil}}}, - }}, - {Target: "parameters.BudgetProperties.Filter.Not.Tags", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filter.Not.Tags.Name", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.BudgetProperties.Filter.Not.Tags.Operator", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.BudgetProperties.Filter.Not.Tags.Values", Name: validation.Null, Rule: true, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filter.Not.Tags.Values", Name: validation.MinItems, Rule: 0, Chain: nil}}}, - }}, - }}, - {Target: "parameters.BudgetProperties.Filter.Dimensions", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filter.Dimensions.Name", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.BudgetProperties.Filter.Dimensions.Operator", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.BudgetProperties.Filter.Dimensions.Values", Name: validation.Null, Rule: true, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filter.Dimensions.Values", Name: validation.MinItems, Rule: 0, Chain: nil}}}, - }}, - {Target: "parameters.BudgetProperties.Filter.Tags", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filter.Tags.Name", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.BudgetProperties.Filter.Tags.Operator", Name: validation.Null, Rule: true, Chain: nil}, - {Target: "parameters.BudgetProperties.Filter.Tags.Values", Name: validation.Null, Rule: true, - Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filter.Tags.Values", Name: validation.MinItems, Rule: 0, Chain: nil}}}, - }}, - }}, - }}}}}); err != nil { - return result, validation.NewError("consumption.BudgetsClient", "CreateOrUpdate", err.Error()) - } - - req, err := client.CreateOrUpdatePreparer(ctx, scope, budgetName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - resp, err := client.CreateOrUpdateSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "CreateOrUpdate", resp, "Failure sending request") - return - } - - result, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "CreateOrUpdate", resp, "Failure responding to request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client BudgetsClient) CreateOrUpdatePreparer(ctx context.Context, scope string, budgetName string, parameters Budget) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "budgetName": autorest.Encode("path", budgetName), - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/budgets/{budgetName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client BudgetsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client BudgetsClient) CreateOrUpdateResponder(resp *http.Response) (result Budget, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete the operation to delete a budget. -// Parameters: -// scope - the scope associated with budget operations. This includes '/subscriptions/{subscriptionId}/' for -// subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resourceGroup -// scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department -// scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' -// for EnrollmentAccount scope, '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for -// Management Group scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for -// billingProfile scope, -// 'providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}' for -// invoiceSection scope. -// budgetName - budget Name. -func (client BudgetsClient) Delete(ctx context.Context, scope string, budgetName string) (result autorest.Response, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsClient.Delete") - defer func() { - sc := -1 - if result.Response != nil { - sc = result.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.DeletePreparer(ctx, scope, budgetName) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Delete", nil, "Failure preparing request") - return - } - - resp, err := client.DeleteSender(req) - if err != nil { - result.Response = resp - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Delete", resp, "Failure sending request") - return - } - - result, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Delete", resp, "Failure responding to request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client BudgetsClient) DeletePreparer(ctx context.Context, scope string, budgetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "budgetName": autorest.Encode("path", budgetName), - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/budgets/{budgetName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client BudgetsClient) DeleteSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client BudgetsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get gets the budget for the scope by budget name. -// Parameters: -// scope - the scope associated with budget operations. This includes '/subscriptions/{subscriptionId}/' for -// subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resourceGroup -// scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department -// scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' -// for EnrollmentAccount scope, '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for -// Management Group scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for -// billingProfile scope, -// 'providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}' for -// invoiceSection scope. -// budgetName - budget Name. -func (client BudgetsClient) Get(ctx context.Context, scope string, budgetName string) (result Budget, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, scope, budgetName) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client BudgetsClient) GetPreparer(ctx context.Context, scope string, budgetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "budgetName": autorest.Encode("path", budgetName), - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/budgets/{budgetName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client BudgetsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client BudgetsClient) GetResponder(resp *http.Response) (result Budget, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List lists all budgets for the defined scope. -// Parameters: -// scope - the scope associated with budget operations. This includes '/subscriptions/{subscriptionId}/' for -// subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resourceGroup -// scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department -// scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' -// for EnrollmentAccount scope, '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for -// Management Group scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for -// billingProfile scope, -// 'providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}' for -// invoiceSection scope. -func (client BudgetsClient) List(ctx context.Context, scope string) (result BudgetsListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsClient.List") - defer func() { - sc := -1 - if result.blr.Response.Response != nil { - sc = result.blr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, scope) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.blr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "List", resp, "Failure sending request") - return - } - - result.blr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "List", resp, "Failure responding to request") - return - } - if result.blr.hasNextLink() && result.blr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client BudgetsClient) ListPreparer(ctx context.Context, scope string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/budgets", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client BudgetsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client BudgetsClient) ListResponder(resp *http.Response) (result BudgetsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client BudgetsClient) listNextResults(ctx context.Context, lastResults BudgetsListResult) (result BudgetsListResult, err error) { - req, err := lastResults.budgetsListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.BudgetsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.BudgetsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client BudgetsClient) ListComplete(ctx context.Context, scope string) (result BudgetsListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, scope) - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/charges.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/charges.go deleted file mode 100644 index 74140c882445..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/charges.go +++ /dev/null @@ -1,140 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// ChargesClient is the consumption management client provides access to consumption resources for Azure Enterprise -// Subscriptions. -type ChargesClient struct { - BaseClient -} - -// NewChargesClient creates an instance of the ChargesClient client. -func NewChargesClient(subscriptionID string) ChargesClient { - return NewChargesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewChargesClientWithBaseURI creates an instance of the ChargesClient client using a custom endpoint. Use this when -// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewChargesClientWithBaseURI(baseURI string, subscriptionID string) ChargesClient { - return ChargesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List lists the charges based for the defined scope. -// Parameters: -// scope - the scope associated with charges operations. This includes -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department -// scope, and -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' -// for EnrollmentAccount scope. For department and enrollment accounts, you can also add billing period to the -// scope using '/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}'. For e.g. to specify billing -// period at department scope use -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}'. -// Also, Modern Commerce Account scopes are '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' -// for billingAccount scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for -// billingProfile scope, -// 'providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}/invoiceSections/{invoiceSectionId}' -// for invoiceSection scope, and -// 'providers/Microsoft.Billing/billingAccounts/{billingAccountId}/customers/{customerId}' specific for -// partners. -// startDate - start date -// endDate - end date -// filter - may be used to filter charges by properties/usageEnd (Utc time), properties/usageStart (Utc time). -// The filter supports 'eq', 'lt', 'gt', 'le', 'ge', and 'and'. It does not currently support 'ne', 'or', or -// 'not'. Tag filter is a key value pair string where key and value is separated by a colon (:). -// apply - may be used to group charges for billingAccount scope by properties/billingProfileId, -// properties/invoiceSectionId, properties/customerId (specific for Partner Led), or for billingProfile scope -// by properties/invoiceSectionId. -func (client ChargesClient) List(ctx context.Context, scope string, startDate string, endDate string, filter string, apply string) (result ChargesListResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ChargesClient.List") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListPreparer(ctx, scope, startDate, endDate, filter, apply) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ChargesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ChargesClient", "List", resp, "Failure sending request") - return - } - - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ChargesClient", "List", resp, "Failure responding to request") - return - } - - return -} - -// ListPreparer prepares the List request. -func (client ChargesClient) ListPreparer(ctx context.Context, scope string, startDate string, endDate string, filter string, apply string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(startDate) > 0 { - queryParameters["startDate"] = autorest.Encode("query", startDate) - } - if len(endDate) > 0 { - queryParameters["endDate"] = autorest.Encode("query", endDate) - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - if len(apply) > 0 { - queryParameters["$apply"] = autorest.Encode("query", apply) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/charges", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client ChargesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client ChargesClient) ListResponder(resp *http.Response) (result ChargesListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/client.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/client.go deleted file mode 100644 index c6f7fefebbbe..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/client.go +++ /dev/null @@ -1,41 +0,0 @@ -// Package consumption implements the Azure ARM Consumption service API version 2019-10-01. -// -// Consumption management client provides access to consumption resources for Azure Enterprise Subscriptions. -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "github.com/Azure/go-autorest/autorest" -) - -const ( - // DefaultBaseURI is the default URI used for the service Consumption - DefaultBaseURI = "https://management.azure.com" -) - -// BaseClient is the base client for Consumption. -type BaseClient struct { - autorest.Client - BaseURI string - SubscriptionID string -} - -// New creates an instance of the BaseClient client. -func New(subscriptionID string) BaseClient { - return NewWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewWithBaseURI creates an instance of the BaseClient client using a custom endpoint. Use this when interacting with -// an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewWithBaseURI(baseURI string, subscriptionID string) BaseClient { - return BaseClient{ - Client: autorest.NewClientWithUserAgent(UserAgent()), - BaseURI: baseURI, - SubscriptionID: subscriptionID, - } -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/credits.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/credits.go deleted file mode 100644 index 82e7ccb954f0..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/credits.go +++ /dev/null @@ -1,109 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// CreditsClient is the consumption management client provides access to consumption resources for Azure Enterprise -// Subscriptions. -type CreditsClient struct { - BaseClient -} - -// NewCreditsClient creates an instance of the CreditsClient client. -func NewCreditsClient(subscriptionID string) CreditsClient { - return NewCreditsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewCreditsClientWithBaseURI creates an instance of the CreditsClient client using a custom endpoint. Use this when -// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewCreditsClientWithBaseURI(baseURI string, subscriptionID string) CreditsClient { - return CreditsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get the credit summary by billingAccountId and billingProfileId. -// Parameters: -// scope - the scope associated with credits operations. This includes -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfile/{billingProfileId}' for -// Billing Profile scope, and -// 'providers/Microsoft.Billing/billingAccounts/{billingAccountId}/customers/{customerId}' specific for -// partners. -func (client CreditsClient) Get(ctx context.Context, scope string) (result CreditSummary, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/CreditsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, scope) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.CreditsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.CreditsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.CreditsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client CreditsClient) GetPreparer(ctx context.Context, scope string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/credits/balanceSummary", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client CreditsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client CreditsClient) GetResponder(resp *http.Response) (result CreditSummary, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/enums.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/enums.go deleted file mode 100644 index 356c51786f21..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/enums.go +++ /dev/null @@ -1,362 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -// BillingFrequency enumerates the values for billing frequency. -type BillingFrequency string - -const ( - // BillingFrequencyMonth ... - BillingFrequencyMonth BillingFrequency = "Month" - // BillingFrequencyQuarter ... - BillingFrequencyQuarter BillingFrequency = "Quarter" - // BillingFrequencyYear ... - BillingFrequencyYear BillingFrequency = "Year" -) - -// PossibleBillingFrequencyValues returns an array of possible values for the BillingFrequency const type. -func PossibleBillingFrequencyValues() []BillingFrequency { - return []BillingFrequency{BillingFrequencyMonth, BillingFrequencyQuarter, BillingFrequencyYear} -} - -// Bound enumerates the values for bound. -type Bound string - -const ( - // BoundLower ... - BoundLower Bound = "Lower" - // BoundUpper ... - BoundUpper Bound = "Upper" -) - -// PossibleBoundValues returns an array of possible values for the Bound const type. -func PossibleBoundValues() []Bound { - return []Bound{BoundLower, BoundUpper} -} - -// ChargeType enumerates the values for charge type. -type ChargeType string - -const ( - // ChargeTypeActual ... - ChargeTypeActual ChargeType = "Actual" - // ChargeTypeForecast ... - ChargeTypeForecast ChargeType = "Forecast" -) - -// PossibleChargeTypeValues returns an array of possible values for the ChargeType const type. -func PossibleChargeTypeValues() []ChargeType { - return []ChargeType{ChargeTypeActual, ChargeTypeForecast} -} - -// CultureCode enumerates the values for culture code. -type CultureCode string - -const ( - // CultureCodeCsCz ... - CultureCodeCsCz CultureCode = "cs-cz" - // CultureCodeDaDk ... - CultureCodeDaDk CultureCode = "da-dk" - // CultureCodeDeDe ... - CultureCodeDeDe CultureCode = "de-de" - // CultureCodeEnGb ... - CultureCodeEnGb CultureCode = "en-gb" - // CultureCodeEnUs ... - CultureCodeEnUs CultureCode = "en-us" - // CultureCodeEsEs ... - CultureCodeEsEs CultureCode = "es-es" - // CultureCodeFrFr ... - CultureCodeFrFr CultureCode = "fr-fr" - // CultureCodeHuHu ... - CultureCodeHuHu CultureCode = "hu-hu" - // CultureCodeItIt ... - CultureCodeItIt CultureCode = "it-it" - // CultureCodeJaJp ... - CultureCodeJaJp CultureCode = "ja-jp" - // CultureCodeKoKr ... - CultureCodeKoKr CultureCode = "ko-kr" - // CultureCodeNbNo ... - CultureCodeNbNo CultureCode = "nb-no" - // CultureCodeNlNl ... - CultureCodeNlNl CultureCode = "nl-nl" - // CultureCodePlPl ... - CultureCodePlPl CultureCode = "pl-pl" - // CultureCodePtBr ... - CultureCodePtBr CultureCode = "pt-br" - // CultureCodePtPt ... - CultureCodePtPt CultureCode = "pt-pt" - // CultureCodeRuRu ... - CultureCodeRuRu CultureCode = "ru-ru" - // CultureCodeSvSe ... - CultureCodeSvSe CultureCode = "sv-se" - // CultureCodeTrTr ... - CultureCodeTrTr CultureCode = "tr-tr" - // CultureCodeZhCn ... - CultureCodeZhCn CultureCode = "zh-cn" - // CultureCodeZhTw ... - CultureCodeZhTw CultureCode = "zh-tw" -) - -// PossibleCultureCodeValues returns an array of possible values for the CultureCode const type. -func PossibleCultureCodeValues() []CultureCode { - return []CultureCode{CultureCodeCsCz, CultureCodeDaDk, CultureCodeDeDe, CultureCodeEnGb, CultureCodeEnUs, CultureCodeEsEs, CultureCodeFrFr, CultureCodeHuHu, CultureCodeItIt, CultureCodeJaJp, CultureCodeKoKr, CultureCodeNbNo, CultureCodeNlNl, CultureCodePlPl, CultureCodePtBr, CultureCodePtPt, CultureCodeRuRu, CultureCodeSvSe, CultureCodeTrTr, CultureCodeZhCn, CultureCodeZhTw} -} - -// Datagrain enumerates the values for datagrain. -type Datagrain string - -const ( - // DatagrainDailyGrain Daily grain of data - DatagrainDailyGrain Datagrain = "daily" - // DatagrainMonthlyGrain Monthly grain of data - DatagrainMonthlyGrain Datagrain = "monthly" -) - -// PossibleDatagrainValues returns an array of possible values for the Datagrain const type. -func PossibleDatagrainValues() []Datagrain { - return []Datagrain{DatagrainDailyGrain, DatagrainMonthlyGrain} -} - -// EventType enumerates the values for event type. -type EventType string - -const ( - // EventTypeNewCredit ... - EventTypeNewCredit EventType = "NewCredit" - // EventTypePendingAdjustments ... - EventTypePendingAdjustments EventType = "PendingAdjustments" - // EventTypePendingCharges ... - EventTypePendingCharges EventType = "PendingCharges" - // EventTypePendingExpiredCredit ... - EventTypePendingExpiredCredit EventType = "PendingExpiredCredit" - // EventTypePendingNewCredit ... - EventTypePendingNewCredit EventType = "PendingNewCredit" - // EventTypeSettledCharges ... - EventTypeSettledCharges EventType = "SettledCharges" - // EventTypeUnKnown ... - EventTypeUnKnown EventType = "UnKnown" -) - -// PossibleEventTypeValues returns an array of possible values for the EventType const type. -func PossibleEventTypeValues() []EventType { - return []EventType{EventTypeNewCredit, EventTypePendingAdjustments, EventTypePendingCharges, EventTypePendingExpiredCredit, EventTypePendingNewCredit, EventTypeSettledCharges, EventTypeUnKnown} -} - -// Grain enumerates the values for grain. -type Grain string - -const ( - // GrainDaily ... - GrainDaily Grain = "Daily" - // GrainMonthly ... - GrainMonthly Grain = "Monthly" - // GrainYearly ... - GrainYearly Grain = "Yearly" -) - -// PossibleGrainValues returns an array of possible values for the Grain const type. -func PossibleGrainValues() []Grain { - return []Grain{GrainDaily, GrainMonthly, GrainYearly} -} - -// Kind enumerates the values for kind. -type Kind string - -const ( - // KindLegacy ... - KindLegacy Kind = "legacy" - // KindModern ... - KindModern Kind = "modern" - // KindUsageDetail ... - KindUsageDetail Kind = "UsageDetail" -) - -// PossibleKindValues returns an array of possible values for the Kind const type. -func PossibleKindValues() []Kind { - return []Kind{KindLegacy, KindModern, KindUsageDetail} -} - -// KindBasicChargeSummary enumerates the values for kind basic charge summary. -type KindBasicChargeSummary string - -const ( - // KindBasicChargeSummaryKindChargeSummary ... - KindBasicChargeSummaryKindChargeSummary KindBasicChargeSummary = "ChargeSummary" - // KindBasicChargeSummaryKindLegacy ... - KindBasicChargeSummaryKindLegacy KindBasicChargeSummary = "legacy" - // KindBasicChargeSummaryKindModern ... - KindBasicChargeSummaryKindModern KindBasicChargeSummary = "modern" -) - -// PossibleKindBasicChargeSummaryValues returns an array of possible values for the KindBasicChargeSummary const type. -func PossibleKindBasicChargeSummaryValues() []KindBasicChargeSummary { - return []KindBasicChargeSummary{KindBasicChargeSummaryKindChargeSummary, KindBasicChargeSummaryKindLegacy, KindBasicChargeSummaryKindModern} -} - -// KindBasicReservationRecommendation enumerates the values for kind basic reservation recommendation. -type KindBasicReservationRecommendation string - -const ( - // KindBasicReservationRecommendationKindLegacy ... - KindBasicReservationRecommendationKindLegacy KindBasicReservationRecommendation = "legacy" - // KindBasicReservationRecommendationKindModern ... - KindBasicReservationRecommendationKindModern KindBasicReservationRecommendation = "modern" - // KindBasicReservationRecommendationKindReservationRecommendation ... - KindBasicReservationRecommendationKindReservationRecommendation KindBasicReservationRecommendation = "ReservationRecommendation" -) - -// PossibleKindBasicReservationRecommendationValues returns an array of possible values for the KindBasicReservationRecommendation const type. -func PossibleKindBasicReservationRecommendationValues() []KindBasicReservationRecommendation { - return []KindBasicReservationRecommendation{KindBasicReservationRecommendationKindLegacy, KindBasicReservationRecommendationKindModern, KindBasicReservationRecommendationKindReservationRecommendation} -} - -// LookBackPeriod enumerates the values for look back period. -type LookBackPeriod string - -const ( - // LookBackPeriodLast07Days Use 7 days of data for recommendations - LookBackPeriodLast07Days LookBackPeriod = "Last7Days" - // LookBackPeriodLast30Days Use 30 days of data for recommendations - LookBackPeriodLast30Days LookBackPeriod = "Last30Days" - // LookBackPeriodLast60Days Use 60 days of data for recommendations - LookBackPeriodLast60Days LookBackPeriod = "Last60Days" -) - -// PossibleLookBackPeriodValues returns an array of possible values for the LookBackPeriod const type. -func PossibleLookBackPeriodValues() []LookBackPeriod { - return []LookBackPeriod{LookBackPeriodLast07Days, LookBackPeriodLast30Days, LookBackPeriodLast60Days} -} - -// LotSource enumerates the values for lot source. -type LotSource string - -const ( - // LotSourcePromotionalCredit ... - LotSourcePromotionalCredit LotSource = "PromotionalCredit" - // LotSourcePurchasedCredit ... - LotSourcePurchasedCredit LotSource = "PurchasedCredit" -) - -// PossibleLotSourceValues returns an array of possible values for the LotSource const type. -func PossibleLotSourceValues() []LotSource { - return []LotSource{LotSourcePromotionalCredit, LotSourcePurchasedCredit} -} - -// Metrictype enumerates the values for metrictype. -type Metrictype string - -const ( - // MetrictypeActualCostMetricType Actual cost data. - MetrictypeActualCostMetricType Metrictype = "actualcost" - // MetrictypeAmortizedCostMetricType Amortized cost data. - MetrictypeAmortizedCostMetricType Metrictype = "amortizedcost" - // MetrictypeUsageMetricType Usage data. - MetrictypeUsageMetricType Metrictype = "usage" -) - -// PossibleMetrictypeValues returns an array of possible values for the Metrictype const type. -func PossibleMetrictypeValues() []Metrictype { - return []Metrictype{MetrictypeActualCostMetricType, MetrictypeAmortizedCostMetricType, MetrictypeUsageMetricType} -} - -// OperatorType enumerates the values for operator type. -type OperatorType string - -const ( - // OperatorTypeEqualTo ... - OperatorTypeEqualTo OperatorType = "EqualTo" - // OperatorTypeGreaterThan ... - OperatorTypeGreaterThan OperatorType = "GreaterThan" - // OperatorTypeGreaterThanOrEqualTo ... - OperatorTypeGreaterThanOrEqualTo OperatorType = "GreaterThanOrEqualTo" -) - -// PossibleOperatorTypeValues returns an array of possible values for the OperatorType const type. -func PossibleOperatorTypeValues() []OperatorType { - return []OperatorType{OperatorTypeEqualTo, OperatorTypeGreaterThan, OperatorTypeGreaterThanOrEqualTo} -} - -// Scope12 enumerates the values for scope 12. -type Scope12 string - -const ( - // Scope12Shared ... - Scope12Shared Scope12 = "Shared" - // Scope12Single ... - Scope12Single Scope12 = "Single" -) - -// PossibleScope12Values returns an array of possible values for the Scope12 const type. -func PossibleScope12Values() []Scope12 { - return []Scope12{Scope12Shared, Scope12Single} -} - -// Scope14 enumerates the values for scope 14. -type Scope14 string - -const ( - // Scope14Shared ... - Scope14Shared Scope14 = "Shared" - // Scope14Single ... - Scope14Single Scope14 = "Single" -) - -// PossibleScope14Values returns an array of possible values for the Scope14 const type. -func PossibleScope14Values() []Scope14 { - return []Scope14{Scope14Shared, Scope14Single} -} - -// Term enumerates the values for term. -type Term string - -const ( - // TermP1Y 1 year reservation term - TermP1Y Term = "P1Y" - // TermP3Y 3 year reservation term - TermP3Y Term = "P3Y" -) - -// PossibleTermValues returns an array of possible values for the Term const type. -func PossibleTermValues() []Term { - return []Term{TermP1Y, TermP3Y} -} - -// ThresholdType enumerates the values for threshold type. -type ThresholdType string - -const ( - // ThresholdTypeActual ... - ThresholdTypeActual ThresholdType = "Actual" -) - -// PossibleThresholdTypeValues returns an array of possible values for the ThresholdType const type. -func PossibleThresholdTypeValues() []ThresholdType { - return []ThresholdType{ThresholdTypeActual} -} - -// TimeGrainType enumerates the values for time grain type. -type TimeGrainType string - -const ( - // TimeGrainTypeAnnually ... - TimeGrainTypeAnnually TimeGrainType = "Annually" - // TimeGrainTypeBillingAnnual ... - TimeGrainTypeBillingAnnual TimeGrainType = "BillingAnnual" - // TimeGrainTypeBillingMonth ... - TimeGrainTypeBillingMonth TimeGrainType = "BillingMonth" - // TimeGrainTypeBillingQuarter ... - TimeGrainTypeBillingQuarter TimeGrainType = "BillingQuarter" - // TimeGrainTypeMonthly ... - TimeGrainTypeMonthly TimeGrainType = "Monthly" - // TimeGrainTypeQuarterly ... - TimeGrainTypeQuarterly TimeGrainType = "Quarterly" -) - -// PossibleTimeGrainTypeValues returns an array of possible values for the TimeGrainType const type. -func PossibleTimeGrainTypeValues() []TimeGrainType { - return []TimeGrainType{TimeGrainTypeAnnually, TimeGrainTypeBillingAnnual, TimeGrainTypeBillingMonth, TimeGrainTypeBillingQuarter, TimeGrainTypeMonthly, TimeGrainTypeQuarterly} -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/events.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/events.go deleted file mode 100644 index 94ff2d054550..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/events.go +++ /dev/null @@ -1,155 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// EventsClient is the consumption management client provides access to consumption resources for Azure Enterprise -// Subscriptions. -type EventsClient struct { - BaseClient -} - -// NewEventsClient creates an instance of the EventsClient client. -func NewEventsClient(subscriptionID string) EventsClient { - return NewEventsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewEventsClientWithBaseURI creates an instance of the EventsClient client using a custom endpoint. Use this when -// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewEventsClientWithBaseURI(baseURI string, subscriptionID string) EventsClient { - return EventsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List lists the events by billingAccountId and billingProfileId for given start and end date. -// Parameters: -// startDate - start date -// endDate - end date -// scope - the scope associated with events operations. This includes -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfile/{billingProfileId}' for -// Billing Profile scope, and -// 'providers/Microsoft.Billing/billingAccounts/{billingAccountId}/customers/{customerId}' specific for -// partners. -func (client EventsClient) List(ctx context.Context, startDate string, endDate string, scope string) (result EventsPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/EventsClient.List") - defer func() { - sc := -1 - if result.e.Response.Response != nil { - sc = result.e.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, startDate, endDate, scope) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.EventsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.e.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.EventsClient", "List", resp, "Failure sending request") - return - } - - result.e, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.EventsClient", "List", resp, "Failure responding to request") - return - } - if result.e.hasNextLink() && result.e.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client EventsClient) ListPreparer(ctx context.Context, startDate string, endDate string, scope string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - "endDate": autorest.Encode("query", endDate), - "startDate": autorest.Encode("query", startDate), - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/events", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client EventsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client EventsClient) ListResponder(resp *http.Response) (result Events, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client EventsClient) listNextResults(ctx context.Context, lastResults Events) (result Events, err error) { - req, err := lastResults.eventsPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.EventsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.EventsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.EventsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client EventsClient) ListComplete(ctx context.Context, startDate string, endDate string, scope string) (result EventsIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/EventsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, startDate, endDate, scope) - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/forecasts.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/forecasts.go deleted file mode 100644 index b2e7d2136592..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/forecasts.go +++ /dev/null @@ -1,112 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// ForecastsClient is the consumption management client provides access to consumption resources for Azure Enterprise -// Subscriptions. -type ForecastsClient struct { - BaseClient -} - -// NewForecastsClient creates an instance of the ForecastsClient client. -func NewForecastsClient(subscriptionID string) ForecastsClient { - return NewForecastsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewForecastsClientWithBaseURI creates an instance of the ForecastsClient client using a custom endpoint. Use this -// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewForecastsClientWithBaseURI(baseURI string, subscriptionID string) ForecastsClient { - return ForecastsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List lists the forecast charges for scope defined. Please note that this API is no longer actively under -// development. We recommend using our new Forecast API moving forward: -// https://docs.microsoft.com/en-us/rest/api/cost-management/forecast/usage. -// Parameters: -// filter - may be used to filter forecasts by properties/usageDate (Utc time), properties/chargeType or -// properties/grain. The filter supports 'eq', 'lt', 'gt', 'le', 'ge', and 'and'. It does not currently support -// 'ne', 'or', or 'not'. -func (client ForecastsClient) List(ctx context.Context, filter string) (result ForecastsListResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ForecastsClient.List") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.ListPreparer(ctx, filter) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ForecastsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ForecastsClient", "List", resp, "Failure sending request") - return - } - - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ForecastsClient", "List", resp, "Failure responding to request") - return - } - - return -} - -// ListPreparer prepares the List request. -func (client ForecastsClient) ListPreparer(ctx context.Context, filter string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/forecasts", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client ForecastsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client ForecastsClient) ListResponder(resp *http.Response) (result ForecastsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/lots.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/lots.go deleted file mode 100644 index b35c9130d82f..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/lots.go +++ /dev/null @@ -1,151 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// LotsClient is the consumption management client provides access to consumption resources for Azure Enterprise -// Subscriptions. -type LotsClient struct { - BaseClient -} - -// NewLotsClient creates an instance of the LotsClient client. -func NewLotsClient(subscriptionID string) LotsClient { - return NewLotsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewLotsClientWithBaseURI creates an instance of the LotsClient client using a custom endpoint. Use this when -// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewLotsClientWithBaseURI(baseURI string, subscriptionID string) LotsClient { - return LotsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List lists the lots by billingAccountId and billingProfileId. -// Parameters: -// scope - the scope associated with Lots operations. This includes -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfile/{billingProfileId}' for -// Billing Profile scope, and -// 'providers/Microsoft.Billing/billingAccounts/{billingAccountId}/customers/{customerId}' specific for -// partners. -func (client LotsClient) List(ctx context.Context, scope string) (result LotsPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LotsClient.List") - defer func() { - sc := -1 - if result.l.Response.Response != nil { - sc = result.l.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, scope) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.LotsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.l.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.LotsClient", "List", resp, "Failure sending request") - return - } - - result.l, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.LotsClient", "List", resp, "Failure responding to request") - return - } - if result.l.hasNextLink() && result.l.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client LotsClient) ListPreparer(ctx context.Context, scope string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/lots", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client LotsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client LotsClient) ListResponder(resp *http.Response) (result Lots, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client LotsClient) listNextResults(ctx context.Context, lastResults Lots) (result Lots, err error) { - req, err := lastResults.lotsPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.LotsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.LotsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.LotsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client LotsClient) ListComplete(ctx context.Context, scope string) (result LotsIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LotsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, scope) - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/marketplaces.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/marketplaces.go deleted file mode 100644 index e24afb851e59..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/marketplaces.go +++ /dev/null @@ -1,182 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// MarketplacesClient is the consumption management client provides access to consumption resources for Azure -// Enterprise Subscriptions. -type MarketplacesClient struct { - BaseClient -} - -// NewMarketplacesClient creates an instance of the MarketplacesClient client. -func NewMarketplacesClient(subscriptionID string) MarketplacesClient { - return NewMarketplacesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewMarketplacesClientWithBaseURI creates an instance of the MarketplacesClient client using a custom endpoint. Use -// this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewMarketplacesClientWithBaseURI(baseURI string, subscriptionID string) MarketplacesClient { - return MarketplacesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List lists the marketplaces for a scope at the defined scope. Marketplaces are available via this API only for May -// 1, 2014 or later. -// Parameters: -// scope - the scope associated with marketplace operations. This includes '/subscriptions/{subscriptionId}/' -// for subscription scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing -// Account scope, '/providers/Microsoft.Billing/departments/{departmentId}' for Department scope, -// '/providers/Microsoft.Billing/enrollmentAccounts/{enrollmentAccountId}' for EnrollmentAccount scope and -// '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for Management Group scope. For -// subscription, billing account, department, enrollment account and ManagementGroup, you can also add billing -// period to the scope using '/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}'. For e.g. to -// specify billing period at department scope use -// '/providers/Microsoft.Billing/departments/{departmentId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}' -// filter - may be used to filter marketplaces by properties/usageEnd (Utc time), properties/usageStart (Utc -// time), properties/resourceGroup, properties/instanceName or properties/instanceId. The filter supports 'eq', -// 'lt', 'gt', 'le', 'ge', and 'and'. It does not currently support 'ne', 'or', or 'not'. -// top - may be used to limit the number of results to the most recent N marketplaces. -// skiptoken - skiptoken is only used if a previous operation returned a partial result. If a previous response -// contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that -// specifies a starting point to use for subsequent calls. -func (client MarketplacesClient) List(ctx context.Context, scope string, filter string, top *int32, skiptoken string) (result MarketplacesListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/MarketplacesClient.List") - defer func() { - sc := -1 - if result.mlr.Response.Response != nil { - sc = result.mlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: top, - Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(1000), Chain: nil}, - {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, - }}}}}); err != nil { - return result, validation.NewError("consumption.MarketplacesClient", "List", err.Error()) - } - - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, scope, filter, top, skiptoken) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.mlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "List", resp, "Failure sending request") - return - } - - result.mlr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "List", resp, "Failure responding to request") - return - } - if result.mlr.hasNextLink() && result.mlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client MarketplacesClient) ListPreparer(ctx context.Context, scope string, filter string, top *int32, skiptoken string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - if top != nil { - queryParameters["$top"] = autorest.Encode("query", *top) - } - if len(skiptoken) > 0 { - queryParameters["$skiptoken"] = autorest.Encode("query", skiptoken) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/marketplaces", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client MarketplacesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client MarketplacesClient) ListResponder(resp *http.Response) (result MarketplacesListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client MarketplacesClient) listNextResults(ctx context.Context, lastResults MarketplacesListResult) (result MarketplacesListResult, err error) { - req, err := lastResults.marketplacesListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client MarketplacesClient) ListComplete(ctx context.Context, scope string, filter string, top *int32, skiptoken string) (result MarketplacesListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/MarketplacesClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, scope, filter, top, skiptoken) - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/models.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/models.go deleted file mode 100644 index f03c9a1f1a7e..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/models.go +++ /dev/null @@ -1,6081 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "encoding/json" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/date" - "github.com/Azure/go-autorest/autorest/to" - "github.com/Azure/go-autorest/tracing" - "github.com/gofrs/uuid" - "github.com/shopspring/decimal" - "net/http" -) - -// The package's fully qualified name. -const fqdn = "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption" - -// Amount the amount plus currency . -type Amount struct { - // Currency - READ-ONLY; Amount currency. - Currency *string `json:"currency,omitempty"` - // Value - READ-ONLY; Amount. - Value *decimal.Decimal `json:"value,omitempty"` -} - -// MarshalJSON is the custom marshaler for Amount. -func (a Amount) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// AmountWithExchangeRate reseller details -type AmountWithExchangeRate struct { - // ExchangeRate - READ-ONLY; Exchange Rate. - ExchangeRate *decimal.Decimal `json:"exchangeRate,omitempty"` - // ExchangeRateMonth - READ-ONLY; Exchange rate month. - ExchangeRateMonth *float64 `json:"exchangeRateMonth,omitempty"` - // Currency - READ-ONLY; Amount currency. - Currency *string `json:"currency,omitempty"` - // Value - READ-ONLY; Amount. - Value *decimal.Decimal `json:"value,omitempty"` -} - -// MarshalJSON is the custom marshaler for AmountWithExchangeRate. -func (awer AmountWithExchangeRate) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// Balance a balance resource. -type Balance struct { - autorest.Response `json:"-"` - *BalanceProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for Balance. -func (b Balance) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if b.BalanceProperties != nil { - objectMap["properties"] = b.BalanceProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for Balance struct. -func (b *Balance) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var balanceProperties BalanceProperties - err = json.Unmarshal(*v, &balanceProperties) - if err != nil { - return err - } - b.BalanceProperties = &balanceProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - b.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - b.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - b.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - b.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - b.Tags = tags - } - } - } - - return nil -} - -// BalanceProperties the properties of the balance. -type BalanceProperties struct { - // Currency - READ-ONLY; The ISO currency in which the meter is charged, for example, USD. - Currency *string `json:"currency,omitempty"` - // BeginningBalance - READ-ONLY; The beginning balance for the billing period. - BeginningBalance *decimal.Decimal `json:"beginningBalance,omitempty"` - // EndingBalance - READ-ONLY; The ending balance for the billing period (for open periods this will be updated daily). - EndingBalance *decimal.Decimal `json:"endingBalance,omitempty"` - // NewPurchases - READ-ONLY; Total new purchase amount. - NewPurchases *decimal.Decimal `json:"newPurchases,omitempty"` - // Adjustments - READ-ONLY; Total adjustment amount. - Adjustments *decimal.Decimal `json:"adjustments,omitempty"` - // Utilized - READ-ONLY; Total Commitment usage. - Utilized *decimal.Decimal `json:"utilized,omitempty"` - // ServiceOverage - READ-ONLY; Overage for Azure services. - ServiceOverage *decimal.Decimal `json:"serviceOverage,omitempty"` - // ChargesBilledSeparately - READ-ONLY; Charges Billed separately. - ChargesBilledSeparately *decimal.Decimal `json:"chargesBilledSeparately,omitempty"` - // TotalOverage - READ-ONLY; serviceOverage + chargesBilledSeparately. - TotalOverage *decimal.Decimal `json:"totalOverage,omitempty"` - // TotalUsage - READ-ONLY; Azure service commitment + total Overage. - TotalUsage *decimal.Decimal `json:"totalUsage,omitempty"` - // AzureMarketplaceServiceCharges - READ-ONLY; Total charges for Azure Marketplace. - AzureMarketplaceServiceCharges *decimal.Decimal `json:"azureMarketplaceServiceCharges,omitempty"` - // BillingFrequency - The billing frequency. Possible values include: 'BillingFrequencyMonth', 'BillingFrequencyQuarter', 'BillingFrequencyYear' - BillingFrequency BillingFrequency `json:"billingFrequency,omitempty"` - // PriceHidden - READ-ONLY; Price is hidden or not. - PriceHidden *bool `json:"priceHidden,omitempty"` - // NewPurchasesDetails - READ-ONLY; List of new purchases. - NewPurchasesDetails *[]BalancePropertiesNewPurchasesDetailsItem `json:"newPurchasesDetails,omitempty"` - // AdjustmentDetails - READ-ONLY; List of Adjustments (Promo credit, SIE credit etc.). - AdjustmentDetails *[]BalancePropertiesAdjustmentDetailsItem `json:"adjustmentDetails,omitempty"` -} - -// MarshalJSON is the custom marshaler for BalanceProperties. -func (bp BalanceProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if bp.BillingFrequency != "" { - objectMap["billingFrequency"] = bp.BillingFrequency - } - return json.Marshal(objectMap) -} - -// BalancePropertiesAdjustmentDetailsItem ... -type BalancePropertiesAdjustmentDetailsItem struct { - // Name - READ-ONLY; the name of new adjustment. - Name *string `json:"name,omitempty"` - // Value - READ-ONLY; the value of new adjustment. - Value *decimal.Decimal `json:"value,omitempty"` -} - -// MarshalJSON is the custom marshaler for BalancePropertiesAdjustmentDetailsItem. -func (bpDi BalancePropertiesAdjustmentDetailsItem) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// BalancePropertiesNewPurchasesDetailsItem ... -type BalancePropertiesNewPurchasesDetailsItem struct { - // Name - READ-ONLY; the name of new purchase. - Name *string `json:"name,omitempty"` - // Value - READ-ONLY; the value of new purchase. - Value *decimal.Decimal `json:"value,omitempty"` -} - -// MarshalJSON is the custom marshaler for BalancePropertiesNewPurchasesDetailsItem. -func (bpPdi BalancePropertiesNewPurchasesDetailsItem) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// Budget a budget resource. -type Budget struct { - autorest.Response `json:"-"` - *BudgetProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // ETag - eTag of the resource. To handle concurrent update scenario, this field will be used to determine whether the user is updating the latest version or not. - ETag *string `json:"eTag,omitempty"` -} - -// MarshalJSON is the custom marshaler for Budget. -func (b Budget) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if b.BudgetProperties != nil { - objectMap["properties"] = b.BudgetProperties - } - if b.ETag != nil { - objectMap["eTag"] = b.ETag - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for Budget struct. -func (b *Budget) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var budgetProperties BudgetProperties - err = json.Unmarshal(*v, &budgetProperties) - if err != nil { - return err - } - b.BudgetProperties = &budgetProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - b.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - b.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - b.Type = &typeVar - } - case "eTag": - if v != nil { - var eTag string - err = json.Unmarshal(*v, &eTag) - if err != nil { - return err - } - b.ETag = &eTag - } - } - } - - return nil -} - -// BudgetComparisonExpression the comparison expression to be used in the budgets. -type BudgetComparisonExpression struct { - // Name - The name of the column to use in comparison. - Name *string `json:"name,omitempty"` - // Operator - The operator to use for comparison. - Operator *string `json:"operator,omitempty"` - // Values - Array of values to use for comparison - Values *[]string `json:"values,omitempty"` -} - -// BudgetFilter may be used to filter budgets by resource group, resource, or meter. -type BudgetFilter struct { - // And - The logical "AND" expression. Must have at least 2 items. - And *[]BudgetFilterProperties `json:"and,omitempty"` - // Not - The logical "NOT" expression. - Not *BudgetFilterProperties `json:"not,omitempty"` - // Dimensions - Has comparison expression for a dimension - Dimensions *BudgetComparisonExpression `json:"dimensions,omitempty"` - // Tags - Has comparison expression for a tag - Tags *BudgetComparisonExpression `json:"tags,omitempty"` -} - -// BudgetFilterProperties the Dimensions or Tags to filter a budget by. -type BudgetFilterProperties struct { - // Dimensions - Has comparison expression for a dimension - Dimensions *BudgetComparisonExpression `json:"dimensions,omitempty"` - // Tags - Has comparison expression for a tag - Tags *BudgetComparisonExpression `json:"tags,omitempty"` -} - -// BudgetProperties the properties of the budget. -type BudgetProperties struct { - // Category - The category of the budget, whether the budget tracks cost or usage. - Category *string `json:"category,omitempty"` - // Amount - The total amount of cost to track with the budget - Amount *decimal.Decimal `json:"amount,omitempty"` - // TimeGrain - The time covered by a budget. Tracking of the amount will be reset based on the time grain. BillingMonth, BillingQuarter, and BillingAnnual are only supported by WD customers. Possible values include: 'TimeGrainTypeMonthly', 'TimeGrainTypeQuarterly', 'TimeGrainTypeAnnually', 'TimeGrainTypeBillingMonth', 'TimeGrainTypeBillingQuarter', 'TimeGrainTypeBillingAnnual' - TimeGrain TimeGrainType `json:"timeGrain,omitempty"` - // TimePeriod - Has start and end date of the budget. The start date must be first of the month and should be less than the end date. Budget start date must be on or after June 1, 2017. Future start date should not be more than twelve months. Past start date should be selected within the timegrain period. There are no restrictions on the end date. - TimePeriod *BudgetTimePeriod `json:"timePeriod,omitempty"` - // Filter - May be used to filter budgets by user-specified dimensions and/or tags. - Filter *BudgetFilter `json:"filter,omitempty"` - // CurrentSpend - READ-ONLY; The current amount of cost which is being tracked for a budget. - CurrentSpend *CurrentSpend `json:"currentSpend,omitempty"` - // Notifications - Dictionary of notifications associated with the budget. Budget can have up to five notifications. - Notifications map[string]*Notification `json:"notifications"` - // ForecastSpend - READ-ONLY; The forecasted cost which is being tracked for a budget. - ForecastSpend *ForecastSpend `json:"forecastSpend,omitempty"` -} - -// MarshalJSON is the custom marshaler for BudgetProperties. -func (bp BudgetProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if bp.Category != nil { - objectMap["category"] = bp.Category - } - if bp.Amount != nil { - objectMap["amount"] = bp.Amount - } - if bp.TimeGrain != "" { - objectMap["timeGrain"] = bp.TimeGrain - } - if bp.TimePeriod != nil { - objectMap["timePeriod"] = bp.TimePeriod - } - if bp.Filter != nil { - objectMap["filter"] = bp.Filter - } - if bp.Notifications != nil { - objectMap["notifications"] = bp.Notifications - } - return json.Marshal(objectMap) -} - -// BudgetsListResult result of listing budgets. It contains a list of available budgets in the scope -// provided. -type BudgetsListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of budgets. - Value *[]Budget `json:"value,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for BudgetsListResult. -func (blr BudgetsListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// BudgetsListResultIterator provides access to a complete listing of Budget values. -type BudgetsListResultIterator struct { - i int - page BudgetsListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *BudgetsListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *BudgetsListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter BudgetsListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter BudgetsListResultIterator) Response() BudgetsListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter BudgetsListResultIterator) Value() Budget { - if !iter.page.NotDone() { - return Budget{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the BudgetsListResultIterator type. -func NewBudgetsListResultIterator(page BudgetsListResultPage) BudgetsListResultIterator { - return BudgetsListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (blr BudgetsListResult) IsEmpty() bool { - return blr.Value == nil || len(*blr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (blr BudgetsListResult) hasNextLink() bool { - return blr.NextLink != nil && len(*blr.NextLink) != 0 -} - -// budgetsListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (blr BudgetsListResult) budgetsListResultPreparer(ctx context.Context) (*http.Request, error) { - if !blr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(blr.NextLink))) -} - -// BudgetsListResultPage contains a page of Budget values. -type BudgetsListResultPage struct { - fn func(context.Context, BudgetsListResult) (BudgetsListResult, error) - blr BudgetsListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *BudgetsListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.blr) - if err != nil { - return err - } - page.blr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *BudgetsListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page BudgetsListResultPage) NotDone() bool { - return !page.blr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page BudgetsListResultPage) Response() BudgetsListResult { - return page.blr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page BudgetsListResultPage) Values() []Budget { - if page.blr.IsEmpty() { - return nil - } - return *page.blr.Value -} - -// Creates a new instance of the BudgetsListResultPage type. -func NewBudgetsListResultPage(cur BudgetsListResult, getNextPage func(context.Context, BudgetsListResult) (BudgetsListResult, error)) BudgetsListResultPage { - return BudgetsListResultPage{ - fn: getNextPage, - blr: cur, - } -} - -// BudgetTimePeriod the start and end date for a budget. -type BudgetTimePeriod struct { - // StartDate - The start date for the budget. - StartDate *date.Time `json:"startDate,omitempty"` - // EndDate - The end date for the budget. If not provided, we default this to 10 years from the start date. - EndDate *date.Time `json:"endDate,omitempty"` -} - -// ChargesListResult result of listing charge summary. -type ChargesListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of charge summary - Value *[]BasicChargeSummary `json:"value,omitempty"` -} - -// MarshalJSON is the custom marshaler for ChargesListResult. -func (clr ChargesListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for ChargesListResult struct. -func (clr *ChargesListResult) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "value": - if v != nil { - value, err := unmarshalBasicChargeSummaryArray(*v) - if err != nil { - return err - } - clr.Value = &value - } - } - } - - return nil -} - -// BasicChargeSummary a charge summary resource. -type BasicChargeSummary interface { - AsLegacyChargeSummary() (*LegacyChargeSummary, bool) - AsModernChargeSummary() (*ModernChargeSummary, bool) - AsChargeSummary() (*ChargeSummary, bool) -} - -// ChargeSummary a charge summary resource. -type ChargeSummary struct { - // Kind - Possible values include: 'KindBasicChargeSummaryKindChargeSummary', 'KindBasicChargeSummaryKindLegacy', 'KindBasicChargeSummaryKindModern' - Kind KindBasicChargeSummary `json:"kind,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -func unmarshalBasicChargeSummary(body []byte) (BasicChargeSummary, error) { - var m map[string]interface{} - err := json.Unmarshal(body, &m) - if err != nil { - return nil, err - } - - switch m["kind"] { - case string(KindBasicChargeSummaryKindLegacy): - var lcs LegacyChargeSummary - err := json.Unmarshal(body, &lcs) - return lcs, err - case string(KindBasicChargeSummaryKindModern): - var mcs ModernChargeSummary - err := json.Unmarshal(body, &mcs) - return mcs, err - default: - var cs ChargeSummary - err := json.Unmarshal(body, &cs) - return cs, err - } -} -func unmarshalBasicChargeSummaryArray(body []byte) ([]BasicChargeSummary, error) { - var rawMessages []*json.RawMessage - err := json.Unmarshal(body, &rawMessages) - if err != nil { - return nil, err - } - - csArray := make([]BasicChargeSummary, len(rawMessages)) - - for index, rawMessage := range rawMessages { - cs, err := unmarshalBasicChargeSummary(*rawMessage) - if err != nil { - return nil, err - } - csArray[index] = cs - } - return csArray, nil -} - -// MarshalJSON is the custom marshaler for ChargeSummary. -func (cs ChargeSummary) MarshalJSON() ([]byte, error) { - cs.Kind = KindBasicChargeSummaryKindChargeSummary - objectMap := make(map[string]interface{}) - if cs.Kind != "" { - objectMap["kind"] = cs.Kind - } - return json.Marshal(objectMap) -} - -// AsLegacyChargeSummary is the BasicChargeSummary implementation for ChargeSummary. -func (cs ChargeSummary) AsLegacyChargeSummary() (*LegacyChargeSummary, bool) { - return nil, false -} - -// AsModernChargeSummary is the BasicChargeSummary implementation for ChargeSummary. -func (cs ChargeSummary) AsModernChargeSummary() (*ModernChargeSummary, bool) { - return nil, false -} - -// AsChargeSummary is the BasicChargeSummary implementation for ChargeSummary. -func (cs ChargeSummary) AsChargeSummary() (*ChargeSummary, bool) { - return &cs, true -} - -// AsBasicChargeSummary is the BasicChargeSummary implementation for ChargeSummary. -func (cs ChargeSummary) AsBasicChargeSummary() (BasicChargeSummary, bool) { - return &cs, true -} - -// CreditBalanceSummary summary of credit balances. -type CreditBalanceSummary struct { - // EstimatedBalance - READ-ONLY; Estimated balance. - EstimatedBalance *Amount `json:"estimatedBalance,omitempty"` - // CurrentBalance - READ-ONLY; Current balance. - CurrentBalance *Amount `json:"currentBalance,omitempty"` - // EstimatedBalanceInBillingCurrency - READ-ONLY; Current balance. - EstimatedBalanceInBillingCurrency *AmountWithExchangeRate `json:"estimatedBalanceInBillingCurrency,omitempty"` - // CurrentBalanceInBillingCurrency - READ-ONLY; Current balance. - CurrentBalanceInBillingCurrency *AmountWithExchangeRate `json:"currentBalanceInBillingCurrency,omitempty"` -} - -// MarshalJSON is the custom marshaler for CreditBalanceSummary. -func (cbs CreditBalanceSummary) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// CreditSummary a credit summary resource. -type CreditSummary struct { - autorest.Response `json:"-"` - *CreditSummaryProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for CreditSummary. -func (cs CreditSummary) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if cs.CreditSummaryProperties != nil { - objectMap["properties"] = cs.CreditSummaryProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for CreditSummary struct. -func (cs *CreditSummary) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var creditSummaryProperties CreditSummaryProperties - err = json.Unmarshal(*v, &creditSummaryProperties) - if err != nil { - return err - } - cs.CreditSummaryProperties = &creditSummaryProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - cs.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - cs.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - cs.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - cs.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - cs.Tags = tags - } - } - } - - return nil -} - -// CreditSummaryProperties the properties of the credit summary. -type CreditSummaryProperties struct { - // CreditCurrency - READ-ONLY; Credit Currency - CreditCurrency *string `json:"creditCurrency,omitempty"` - // BillingCurrency - READ-ONLY; Billing Currency. - BillingCurrency *string `json:"billingCurrency,omitempty"` - // BalanceSummary - READ-ONLY; Summary of balances associated with this credit summary. - BalanceSummary *CreditBalanceSummary `json:"balanceSummary,omitempty"` - // PendingCreditAdjustments - READ-ONLY; Pending credit adjustments. - PendingCreditAdjustments *Amount `json:"pendingCreditAdjustments,omitempty"` - // ExpiredCredit - READ-ONLY; Expired credit. - ExpiredCredit *Amount `json:"expiredCredit,omitempty"` - // PendingEligibleCharges - READ-ONLY; Pending eligible charges. - PendingEligibleCharges *Amount `json:"pendingEligibleCharges,omitempty"` - // Reseller - READ-ONLY; Reseller details. - Reseller *Reseller `json:"reseller,omitempty"` -} - -// MarshalJSON is the custom marshaler for CreditSummaryProperties. -func (csp CreditSummaryProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// CurrentSpend the current amount of cost which is being tracked for a budget. -type CurrentSpend struct { - // Amount - READ-ONLY; The total amount of cost which is being tracked by the budget. - Amount *decimal.Decimal `json:"amount,omitempty"` - // Unit - READ-ONLY; The unit of measure for the budget amount. - Unit *string `json:"unit,omitempty"` -} - -// MarshalJSON is the custom marshaler for CurrentSpend. -func (cs CurrentSpend) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// DownloadProperties the properties of the price sheet download. -type DownloadProperties struct { - // DownloadURL - READ-ONLY; The link (url) to download the pricesheet. - DownloadURL *string `json:"downloadUrl,omitempty"` - // ValidTill - READ-ONLY; Download link validity. - ValidTill *string `json:"validTill,omitempty"` -} - -// MarshalJSON is the custom marshaler for DownloadProperties. -func (dp DownloadProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ErrorDetails the details of the error. -type ErrorDetails struct { - // Code - READ-ONLY; Error code. - Code *string `json:"code,omitempty"` - // Message - READ-ONLY; Error message indicating why the operation failed. - Message *string `json:"message,omitempty"` -} - -// MarshalJSON is the custom marshaler for ErrorDetails. -func (ed ErrorDetails) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ErrorResponse error response indicates that the service is not able to process the incoming request. The -// reason is provided in the error message. -// -// Some Error responses: -// -// * 429 TooManyRequests - Request is throttled. Retry after waiting for the time specified in the -// "x-ms-ratelimit-microsoft.consumption-retry-after" header. -// -// * 503 ServiceUnavailable - Service is temporarily unavailable. Retry after waiting for the time -// specified in the "Retry-After" header. -type ErrorResponse struct { - // Error - The details of the error. - Error *ErrorDetails `json:"error,omitempty"` -} - -// EventProperties the event properties. -type EventProperties struct { - // CreditCurrency - READ-ONLY; Credit Currency - CreditCurrency *string `json:"creditCurrency,omitempty"` - // BillingCurrency - READ-ONLY; Billing Currency. - BillingCurrency *string `json:"billingCurrency,omitempty"` - // TransactionDate - READ-ONLY; Transaction date. - TransactionDate *date.Time `json:"transactionDate,omitempty"` - // Description - READ-ONLY; Transaction description. - Description *string `json:"description,omitempty"` - // NewCredit - READ-ONLY; New Credit. - NewCredit *Amount `json:"newCredit,omitempty"` - // NewCreditInBillingCurrency - READ-ONLY; Current balance. - NewCreditInBillingCurrency *AmountWithExchangeRate `json:"newCreditInBillingCurrency,omitempty"` - // Adjustments - READ-ONLY; Adjustments amount. - Adjustments *Amount `json:"adjustments,omitempty"` - // AdjustmentsInBillingCurrency - READ-ONLY; Current balance. - AdjustmentsInBillingCurrency *AmountWithExchangeRate `json:"adjustmentsInBillingCurrency,omitempty"` - // CreditExpired - READ-ONLY; Credit expired. - CreditExpired *Amount `json:"creditExpired,omitempty"` - // CreditExpiredInBillingCurrency - READ-ONLY; Current balance. - CreditExpiredInBillingCurrency *AmountWithExchangeRate `json:"creditExpiredInBillingCurrency,omitempty"` - // Charges - READ-ONLY; Charges amount. - Charges *Amount `json:"charges,omitempty"` - // ChargesInBillingCurrency - READ-ONLY; Current balance. - ChargesInBillingCurrency *AmountWithExchangeRate `json:"chargesInBillingCurrency,omitempty"` - // ClosedBalance - READ-ONLY; Closed balance. - ClosedBalance *Amount `json:"closedBalance,omitempty"` - // ClosedBalanceInBillingCurrency - READ-ONLY; Current balance. - ClosedBalanceInBillingCurrency *AmountWithExchangeRate `json:"closedBalanceInBillingCurrency,omitempty"` - // EventType - The type of event. Possible values include: 'EventTypeSettledCharges', 'EventTypePendingCharges', 'EventTypePendingAdjustments', 'EventTypePendingNewCredit', 'EventTypePendingExpiredCredit', 'EventTypeUnKnown', 'EventTypeNewCredit' - EventType EventType `json:"eventType,omitempty"` - // InvoiceNumber - READ-ONLY; Invoice number. - InvoiceNumber *string `json:"invoiceNumber,omitempty"` - // Reseller - READ-ONLY; Reseller details. - Reseller *Reseller `json:"reseller,omitempty"` -} - -// MarshalJSON is the custom marshaler for EventProperties. -func (ep EventProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ep.EventType != "" { - objectMap["eventType"] = ep.EventType - } - return json.Marshal(objectMap) -} - -// Events result of listing event summary. -type Events struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of event summary. - Value *[]EventSummary `json:"value,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for Events. -func (e Events) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// EventsIterator provides access to a complete listing of EventSummary values. -type EventsIterator struct { - i int - page EventsPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *EventsIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/EventsIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *EventsIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter EventsIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter EventsIterator) Response() Events { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter EventsIterator) Value() EventSummary { - if !iter.page.NotDone() { - return EventSummary{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the EventsIterator type. -func NewEventsIterator(page EventsPage) EventsIterator { - return EventsIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (e Events) IsEmpty() bool { - return e.Value == nil || len(*e.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (e Events) hasNextLink() bool { - return e.NextLink != nil && len(*e.NextLink) != 0 -} - -// eventsPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (e Events) eventsPreparer(ctx context.Context) (*http.Request, error) { - if !e.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(e.NextLink))) -} - -// EventsPage contains a page of EventSummary values. -type EventsPage struct { - fn func(context.Context, Events) (Events, error) - e Events -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *EventsPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/EventsPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.e) - if err != nil { - return err - } - page.e = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *EventsPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page EventsPage) NotDone() bool { - return !page.e.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page EventsPage) Response() Events { - return page.e -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page EventsPage) Values() []EventSummary { - if page.e.IsEmpty() { - return nil - } - return *page.e.Value -} - -// Creates a new instance of the EventsPage type. -func NewEventsPage(cur Events, getNextPage func(context.Context, Events) (Events, error)) EventsPage { - return EventsPage{ - fn: getNextPage, - e: cur, - } -} - -// EventSummary an event summary resource. -type EventSummary struct { - *EventProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for EventSummary. -func (es EventSummary) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if es.EventProperties != nil { - objectMap["properties"] = es.EventProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for EventSummary struct. -func (es *EventSummary) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var eventProperties EventProperties - err = json.Unmarshal(*v, &eventProperties) - if err != nil { - return err - } - es.EventProperties = &eventProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - es.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - es.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - es.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - es.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - es.Tags = tags - } - } - } - - return nil -} - -// Forecast a forecast resource. -type Forecast struct { - *ForecastProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for Forecast. -func (f Forecast) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if f.ForecastProperties != nil { - objectMap["properties"] = f.ForecastProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for Forecast struct. -func (f *Forecast) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var forecastProperties ForecastProperties - err = json.Unmarshal(*v, &forecastProperties) - if err != nil { - return err - } - f.ForecastProperties = &forecastProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - f.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - f.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - f.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - f.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - f.Tags = tags - } - } - } - - return nil -} - -// ForecastProperties the properties of the forecast charge. -type ForecastProperties struct { - // UsageDate - READ-ONLY; The usage date of the forecast. - UsageDate *string `json:"usageDate,omitempty"` - // Grain - The granularity of forecast. Please note that Yearly is not currently supported in this API. The API will provide responses in the Monthly grain if Yearly is selected. To get yearly grain data, please use our newer Forecast API. Possible values include: 'GrainDaily', 'GrainMonthly', 'GrainYearly' - Grain Grain `json:"grain,omitempty"` - // Charge - READ-ONLY; The amount of charge - Charge *decimal.Decimal `json:"charge,omitempty"` - // Currency - READ-ONLY; The ISO currency in which the meter is charged, for example, USD. - Currency *string `json:"currency,omitempty"` - // ChargeType - The type of the charge. Could be actual or forecast. Possible values include: 'ChargeTypeActual', 'ChargeTypeForecast' - ChargeType ChargeType `json:"chargeType,omitempty"` - // ConfidenceLevels - READ-ONLY; The details about the forecast confidence levels. This is populated only when chargeType is Forecast. - ConfidenceLevels *[]ForecastPropertiesConfidenceLevelsItem `json:"confidenceLevels,omitempty"` -} - -// MarshalJSON is the custom marshaler for ForecastProperties. -func (fp ForecastProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if fp.Grain != "" { - objectMap["grain"] = fp.Grain - } - if fp.ChargeType != "" { - objectMap["chargeType"] = fp.ChargeType - } - return json.Marshal(objectMap) -} - -// ForecastPropertiesConfidenceLevelsItem ... -type ForecastPropertiesConfidenceLevelsItem struct { - // Percentage - READ-ONLY; The percentage level of the confidence - Percentage *decimal.Decimal `json:"percentage,omitempty"` - // Bound - The boundary of the percentage, values could be 'Upper' or 'Lower'. Possible values include: 'BoundUpper', 'BoundLower' - Bound Bound `json:"bound,omitempty"` - // Value - READ-ONLY; The amount of forecast within the percentage level - Value *decimal.Decimal `json:"value,omitempty"` -} - -// MarshalJSON is the custom marshaler for ForecastPropertiesConfidenceLevelsItem. -func (fpLi ForecastPropertiesConfidenceLevelsItem) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if fpLi.Bound != "" { - objectMap["bound"] = fpLi.Bound - } - return json.Marshal(objectMap) -} - -// ForecastsListResult result of listing forecasts. It contains a list of available forecasts. -type ForecastsListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of forecasts. - Value *[]Forecast `json:"value,omitempty"` -} - -// MarshalJSON is the custom marshaler for ForecastsListResult. -func (flr ForecastsListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ForecastSpend the forecasted cost which is being tracked for a budget. -type ForecastSpend struct { - // Amount - READ-ONLY; The forecasted cost for the total time period which is being tracked by the budget. This value is only provided if the budget contains a forecast alert type. - Amount *decimal.Decimal `json:"amount,omitempty"` - // Unit - READ-ONLY; The unit of measure for the budget amount. - Unit *string `json:"unit,omitempty"` -} - -// MarshalJSON is the custom marshaler for ForecastSpend. -func (fs ForecastSpend) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// HighCasedErrorDetails the details of the error. -type HighCasedErrorDetails struct { - // Code - READ-ONLY; Error code. - Code *string `json:"code,omitempty"` - // Message - READ-ONLY; Error message indicating why the operation failed. - Message *string `json:"message,omitempty"` -} - -// MarshalJSON is the custom marshaler for HighCasedErrorDetails. -func (hced HighCasedErrorDetails) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// HighCasedErrorResponse error response indicates that the service is not able to process the incoming -// request. The reason is provided in the error message. -// -// Some Error responses: -// -// * 429 TooManyRequests - Request is throttled. Retry after waiting for the time specified in the -// "x-ms-ratelimit-microsoft.consumption-retry-after" header. -// -// * 503 ServiceUnavailable - Service is temporarily unavailable. Retry after waiting for the time -// specified in the "Retry-After" header. -type HighCasedErrorResponse struct { - // Error - The details of the error. - Error *HighCasedErrorDetails `json:"error,omitempty"` -} - -// LegacyChargeSummary legacy charge summary. -type LegacyChargeSummary struct { - // LegacyChargeSummaryProperties - Properties for legacy charge summary - *LegacyChargeSummaryProperties `json:"properties,omitempty"` - // Kind - Possible values include: 'KindBasicChargeSummaryKindChargeSummary', 'KindBasicChargeSummaryKindLegacy', 'KindBasicChargeSummaryKindModern' - Kind KindBasicChargeSummary `json:"kind,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for LegacyChargeSummary. -func (lcs LegacyChargeSummary) MarshalJSON() ([]byte, error) { - lcs.Kind = KindBasicChargeSummaryKindLegacy - objectMap := make(map[string]interface{}) - if lcs.LegacyChargeSummaryProperties != nil { - objectMap["properties"] = lcs.LegacyChargeSummaryProperties - } - if lcs.Kind != "" { - objectMap["kind"] = lcs.Kind - } - return json.Marshal(objectMap) -} - -// AsLegacyChargeSummary is the BasicChargeSummary implementation for LegacyChargeSummary. -func (lcs LegacyChargeSummary) AsLegacyChargeSummary() (*LegacyChargeSummary, bool) { - return &lcs, true -} - -// AsModernChargeSummary is the BasicChargeSummary implementation for LegacyChargeSummary. -func (lcs LegacyChargeSummary) AsModernChargeSummary() (*ModernChargeSummary, bool) { - return nil, false -} - -// AsChargeSummary is the BasicChargeSummary implementation for LegacyChargeSummary. -func (lcs LegacyChargeSummary) AsChargeSummary() (*ChargeSummary, bool) { - return nil, false -} - -// AsBasicChargeSummary is the BasicChargeSummary implementation for LegacyChargeSummary. -func (lcs LegacyChargeSummary) AsBasicChargeSummary() (BasicChargeSummary, bool) { - return &lcs, true -} - -// UnmarshalJSON is the custom unmarshaler for LegacyChargeSummary struct. -func (lcs *LegacyChargeSummary) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var legacyChargeSummaryProperties LegacyChargeSummaryProperties - err = json.Unmarshal(*v, &legacyChargeSummaryProperties) - if err != nil { - return err - } - lcs.LegacyChargeSummaryProperties = &legacyChargeSummaryProperties - } - case "kind": - if v != nil { - var kind KindBasicChargeSummary - err = json.Unmarshal(*v, &kind) - if err != nil { - return err - } - lcs.Kind = kind - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - lcs.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - lcs.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - lcs.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - lcs.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - lcs.Tags = tags - } - } - } - - return nil -} - -// LegacyChargeSummaryProperties the properties of legacy charge summary. -type LegacyChargeSummaryProperties struct { - // BillingPeriodID - READ-ONLY; The id of the billing period resource that the charge belongs to. - BillingPeriodID *string `json:"billingPeriodId,omitempty"` - // UsageStart - READ-ONLY; Usage start date. - UsageStart *string `json:"usageStart,omitempty"` - // UsageEnd - READ-ONLY; Usage end date. - UsageEnd *string `json:"usageEnd,omitempty"` - // AzureCharges - READ-ONLY; Azure Charges. - AzureCharges *decimal.Decimal `json:"azureCharges,omitempty"` - // ChargesBilledSeparately - READ-ONLY; Charges Billed separately. - ChargesBilledSeparately *decimal.Decimal `json:"chargesBilledSeparately,omitempty"` - // MarketplaceCharges - READ-ONLY; Marketplace Charges. - MarketplaceCharges *decimal.Decimal `json:"marketplaceCharges,omitempty"` - // Currency - READ-ONLY; Currency Code - Currency *string `json:"currency,omitempty"` -} - -// MarshalJSON is the custom marshaler for LegacyChargeSummaryProperties. -func (lcsp LegacyChargeSummaryProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// LegacyReservationRecommendation legacy reservation recommendation. -type LegacyReservationRecommendation struct { - // LegacyReservationRecommendationProperties - Properties for legacy reservation recommendation - *LegacyReservationRecommendationProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` - // Sku - READ-ONLY; Resource sku - Sku *string `json:"sku,omitempty"` - // Kind - Possible values include: 'KindBasicReservationRecommendationKindReservationRecommendation', 'KindBasicReservationRecommendationKindLegacy', 'KindBasicReservationRecommendationKindModern' - Kind KindBasicReservationRecommendation `json:"kind,omitempty"` -} - -// MarshalJSON is the custom marshaler for LegacyReservationRecommendation. -func (lrr LegacyReservationRecommendation) MarshalJSON() ([]byte, error) { - lrr.Kind = KindBasicReservationRecommendationKindLegacy - objectMap := make(map[string]interface{}) - if lrr.LegacyReservationRecommendationProperties != nil { - objectMap["properties"] = lrr.LegacyReservationRecommendationProperties - } - if lrr.Kind != "" { - objectMap["kind"] = lrr.Kind - } - return json.Marshal(objectMap) -} - -// AsLegacyReservationRecommendation is the BasicReservationRecommendation implementation for LegacyReservationRecommendation. -func (lrr LegacyReservationRecommendation) AsLegacyReservationRecommendation() (*LegacyReservationRecommendation, bool) { - return &lrr, true -} - -// AsModernReservationRecommendation is the BasicReservationRecommendation implementation for LegacyReservationRecommendation. -func (lrr LegacyReservationRecommendation) AsModernReservationRecommendation() (*ModernReservationRecommendation, bool) { - return nil, false -} - -// AsReservationRecommendation is the BasicReservationRecommendation implementation for LegacyReservationRecommendation. -func (lrr LegacyReservationRecommendation) AsReservationRecommendation() (*ReservationRecommendation, bool) { - return nil, false -} - -// AsBasicReservationRecommendation is the BasicReservationRecommendation implementation for LegacyReservationRecommendation. -func (lrr LegacyReservationRecommendation) AsBasicReservationRecommendation() (BasicReservationRecommendation, bool) { - return &lrr, true -} - -// UnmarshalJSON is the custom unmarshaler for LegacyReservationRecommendation struct. -func (lrr *LegacyReservationRecommendation) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var legacyReservationRecommendationProperties LegacyReservationRecommendationProperties - err = json.Unmarshal(*v, &legacyReservationRecommendationProperties) - if err != nil { - return err - } - lrr.LegacyReservationRecommendationProperties = &legacyReservationRecommendationProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - lrr.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - lrr.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - lrr.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - lrr.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - lrr.Tags = tags - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - lrr.Location = &location - } - case "sku": - if v != nil { - var sku string - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - lrr.Sku = &sku - } - case "kind": - if v != nil { - var kind KindBasicReservationRecommendation - err = json.Unmarshal(*v, &kind) - if err != nil { - return err - } - lrr.Kind = kind - } - } - } - - return nil -} - -// LegacyReservationRecommendationProperties the properties of the reservation recommendation. -type LegacyReservationRecommendationProperties struct { - // LookBackPeriod - READ-ONLY; The number of days of usage to look back for recommendation. - LookBackPeriod *string `json:"lookBackPeriod,omitempty"` - // InstanceFlexibilityRatio - READ-ONLY; The instance Flexibility Ratio. - InstanceFlexibilityRatio *float64 `json:"instanceFlexibilityRatio,omitempty"` - // InstanceFlexibilityGroup - READ-ONLY; The instance Flexibility Group. - InstanceFlexibilityGroup *string `json:"instanceFlexibilityGroup,omitempty"` - // NormalizedSize - READ-ONLY; The normalized Size. - NormalizedSize *string `json:"normalizedSize,omitempty"` - // RecommendedQuantityNormalized - READ-ONLY; The recommended Quantity Normalized. - RecommendedQuantityNormalized *float64 `json:"recommendedQuantityNormalized,omitempty"` - // MeterID - READ-ONLY; The meter id (GUID) - MeterID *uuid.UUID `json:"meterId,omitempty"` - // ResourceType - READ-ONLY; The azure resource type. - ResourceType *string `json:"resourceType,omitempty"` - // Term - READ-ONLY; RI recommendations in one or three year terms. - Term *string `json:"term,omitempty"` - // CostWithNoReservedInstances - READ-ONLY; The total amount of cost without reserved instances. - CostWithNoReservedInstances *decimal.Decimal `json:"costWithNoReservedInstances,omitempty"` - // RecommendedQuantity - READ-ONLY; Recommended quality for reserved instances. - RecommendedQuantity *decimal.Decimal `json:"recommendedQuantity,omitempty"` - // TotalCostWithReservedInstances - READ-ONLY; The total amount of cost with reserved instances. - TotalCostWithReservedInstances *decimal.Decimal `json:"totalCostWithReservedInstances,omitempty"` - // NetSavings - READ-ONLY; Total estimated savings with reserved instances. - NetSavings *decimal.Decimal `json:"netSavings,omitempty"` - // FirstUsageDate - READ-ONLY; The usage date for looking back. - FirstUsageDate *date.Time `json:"firstUsageDate,omitempty"` - // Scope - READ-ONLY; Shared or single recommendation. - Scope *string `json:"scope,omitempty"` - // SkuProperties - READ-ONLY; List of sku properties - SkuProperties *[]SkuProperty `json:"skuProperties,omitempty"` -} - -// MarshalJSON is the custom marshaler for LegacyReservationRecommendationProperties. -func (lrrp LegacyReservationRecommendationProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// LegacyReservationTransaction legacy Reservation transaction resource. -type LegacyReservationTransaction struct { - *LegacyReservationTransactionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags *[]string `json:"tags,omitempty"` -} - -// MarshalJSON is the custom marshaler for LegacyReservationTransaction. -func (lrt LegacyReservationTransaction) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if lrt.LegacyReservationTransactionProperties != nil { - objectMap["properties"] = lrt.LegacyReservationTransactionProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for LegacyReservationTransaction struct. -func (lrt *LegacyReservationTransaction) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var legacyReservationTransactionProperties LegacyReservationTransactionProperties - err = json.Unmarshal(*v, &legacyReservationTransactionProperties) - if err != nil { - return err - } - lrt.LegacyReservationTransactionProperties = &legacyReservationTransactionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - lrt.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - lrt.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - lrt.Type = &typeVar - } - case "tags": - if v != nil { - var tags []string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - lrt.Tags = &tags - } - } - } - - return nil -} - -// LegacyReservationTransactionProperties the properties of a legacy reservation transaction. -type LegacyReservationTransactionProperties struct { - // EventDate - READ-ONLY; The date of the transaction - EventDate *date.Time `json:"eventDate,omitempty"` - // ReservationOrderID - READ-ONLY; The reservation order ID is the identifier for a reservation purchase. Each reservation order ID represents a single purchase transaction. A reservation order contains reservations. The reservation order specifies the VM size and region for the reservations. - ReservationOrderID *string `json:"reservationOrderId,omitempty"` - // Description - READ-ONLY; The description of the transaction. - Description *string `json:"description,omitempty"` - // EventType - READ-ONLY; The type of the transaction (Purchase, Cancel, etc.) - EventType *string `json:"eventType,omitempty"` - // Quantity - READ-ONLY; The quantity of the transaction. - Quantity *decimal.Decimal `json:"quantity,omitempty"` - // Amount - READ-ONLY; The charge of the transaction. - Amount *decimal.Decimal `json:"amount,omitempty"` - // Currency - READ-ONLY; The ISO currency in which the transaction is charged, for example, USD. - Currency *string `json:"currency,omitempty"` - // ReservationOrderName - READ-ONLY; The name of the reservation order. - ReservationOrderName *string `json:"reservationOrderName,omitempty"` - // PurchasingEnrollment - READ-ONLY; The purchasing enrollment. - PurchasingEnrollment *string `json:"purchasingEnrollment,omitempty"` - // PurchasingSubscriptionGUID - READ-ONLY; The subscription guid that makes the transaction. - PurchasingSubscriptionGUID *uuid.UUID `json:"purchasingSubscriptionGuid,omitempty"` - // PurchasingSubscriptionName - READ-ONLY; The subscription name that makes the transaction. - PurchasingSubscriptionName *string `json:"purchasingSubscriptionName,omitempty"` - // ArmSkuName - READ-ONLY; This is the ARM Sku name. It can be used to join with the serviceType field in additional info in usage records. - ArmSkuName *string `json:"armSkuName,omitempty"` - // Term - READ-ONLY; This is the term of the transaction. - Term *string `json:"term,omitempty"` - // Region - READ-ONLY; The region of the transaction. - Region *string `json:"region,omitempty"` - // AccountName - READ-ONLY; The name of the account that makes the transaction. - AccountName *string `json:"accountName,omitempty"` - // AccountOwnerEmail - READ-ONLY; The email of the account owner that makes the transaction. - AccountOwnerEmail *string `json:"accountOwnerEmail,omitempty"` - // DepartmentName - READ-ONLY; The department name. - DepartmentName *string `json:"departmentName,omitempty"` - // CostCenter - READ-ONLY; The cost center of this department if it is a department and a cost center is provided. - CostCenter *string `json:"costCenter,omitempty"` - // CurrentEnrollment - READ-ONLY; The current enrollment. - CurrentEnrollment *string `json:"currentEnrollment,omitempty"` - // BillingFrequency - READ-ONLY; The billing frequency, which can be either one-time or recurring. - BillingFrequency *string `json:"billingFrequency,omitempty"` -} - -// MarshalJSON is the custom marshaler for LegacyReservationTransactionProperties. -func (lrtp LegacyReservationTransactionProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// LegacyUsageDetail legacy usage detail. -type LegacyUsageDetail struct { - // LegacyUsageDetailProperties - Properties for legacy usage details - *LegacyUsageDetailProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` - // Kind - Possible values include: 'KindUsageDetail', 'KindLegacy', 'KindModern' - Kind Kind `json:"kind,omitempty"` -} - -// MarshalJSON is the custom marshaler for LegacyUsageDetail. -func (lud LegacyUsageDetail) MarshalJSON() ([]byte, error) { - lud.Kind = KindLegacy - objectMap := make(map[string]interface{}) - if lud.LegacyUsageDetailProperties != nil { - objectMap["properties"] = lud.LegacyUsageDetailProperties - } - if lud.Kind != "" { - objectMap["kind"] = lud.Kind - } - return json.Marshal(objectMap) -} - -// AsLegacyUsageDetail is the BasicUsageDetail implementation for LegacyUsageDetail. -func (lud LegacyUsageDetail) AsLegacyUsageDetail() (*LegacyUsageDetail, bool) { - return &lud, true -} - -// AsModernUsageDetail is the BasicUsageDetail implementation for LegacyUsageDetail. -func (lud LegacyUsageDetail) AsModernUsageDetail() (*ModernUsageDetail, bool) { - return nil, false -} - -// AsUsageDetail is the BasicUsageDetail implementation for LegacyUsageDetail. -func (lud LegacyUsageDetail) AsUsageDetail() (*UsageDetail, bool) { - return nil, false -} - -// AsBasicUsageDetail is the BasicUsageDetail implementation for LegacyUsageDetail. -func (lud LegacyUsageDetail) AsBasicUsageDetail() (BasicUsageDetail, bool) { - return &lud, true -} - -// UnmarshalJSON is the custom unmarshaler for LegacyUsageDetail struct. -func (lud *LegacyUsageDetail) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var legacyUsageDetailProperties LegacyUsageDetailProperties - err = json.Unmarshal(*v, &legacyUsageDetailProperties) - if err != nil { - return err - } - lud.LegacyUsageDetailProperties = &legacyUsageDetailProperties - } - case "kind": - if v != nil { - var kind Kind - err = json.Unmarshal(*v, &kind) - if err != nil { - return err - } - lud.Kind = kind - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - lud.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - lud.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - lud.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - lud.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - lud.Tags = tags - } - } - } - - return nil -} - -// LegacyUsageDetailProperties the properties of the legacy usage detail. -type LegacyUsageDetailProperties struct { - // BillingAccountID - READ-ONLY; Billing Account identifier. - BillingAccountID *string `json:"billingAccountId,omitempty"` - // BillingAccountName - READ-ONLY; Billing Account Name. - BillingAccountName *string `json:"billingAccountName,omitempty"` - // BillingPeriodStartDate - READ-ONLY; The billing period start date. - BillingPeriodStartDate *date.Time `json:"billingPeriodStartDate,omitempty"` - // BillingPeriodEndDate - READ-ONLY; The billing period end date. - BillingPeriodEndDate *date.Time `json:"billingPeriodEndDate,omitempty"` - // BillingProfileID - READ-ONLY; Billing Profile identifier. - BillingProfileID *string `json:"billingProfileId,omitempty"` - // BillingProfileName - READ-ONLY; Billing Profile Name. - BillingProfileName *string `json:"billingProfileName,omitempty"` - // AccountOwnerID - READ-ONLY; Account Owner Id. - AccountOwnerID *string `json:"accountOwnerId,omitempty"` - // AccountName - READ-ONLY; Account Name. - AccountName *string `json:"accountName,omitempty"` - // SubscriptionID - READ-ONLY; Subscription guid. - SubscriptionID *string `json:"subscriptionId,omitempty"` - // SubscriptionName - READ-ONLY; Subscription name. - SubscriptionName *string `json:"subscriptionName,omitempty"` - // Date - READ-ONLY; Date for the usage record. - Date *date.Time `json:"date,omitempty"` - // Product - READ-ONLY; Product name for the consumed service or purchase. Not available for Marketplace. - Product *string `json:"product,omitempty"` - // PartNumber - READ-ONLY; Part Number of the service used. Can be used to join with the price sheet. Not available for marketplace. - PartNumber *string `json:"partNumber,omitempty"` - // MeterID - READ-ONLY; The meter id (GUID). Not available for marketplace. For reserved instance this represents the primary meter for which the reservation was purchased. For the actual VM Size for which the reservation is purchased see productOrderName. - MeterID *uuid.UUID `json:"meterId,omitempty"` - // MeterDetails - READ-ONLY; The details about the meter. By default this is not populated, unless it's specified in $expand. - MeterDetails *MeterDetailsResponse `json:"meterDetails,omitempty"` - // Quantity - READ-ONLY; The usage quantity. - Quantity *decimal.Decimal `json:"quantity,omitempty"` - // EffectivePrice - READ-ONLY; Effective Price that's charged for the usage. - EffectivePrice *decimal.Decimal `json:"effectivePrice,omitempty"` - // Cost - READ-ONLY; The amount of cost before tax. - Cost *decimal.Decimal `json:"cost,omitempty"` - // UnitPrice - READ-ONLY; Unit Price is the price applicable to you. (your EA or other contract price). - UnitPrice *decimal.Decimal `json:"unitPrice,omitempty"` - // BillingCurrency - READ-ONLY; Billing Currency. - BillingCurrency *string `json:"billingCurrency,omitempty"` - // ResourceLocation - READ-ONLY; Resource Location. - ResourceLocation *string `json:"resourceLocation,omitempty"` - // ConsumedService - READ-ONLY; Consumed service name. Name of the azure resource provider that emits the usage or was purchased. This value is not provided for marketplace usage. - ConsumedService *string `json:"consumedService,omitempty"` - // ResourceID - READ-ONLY; Azure resource manager resource identifier. - ResourceID *string `json:"resourceId,omitempty"` - // ResourceName - READ-ONLY; Resource Name. - ResourceName *string `json:"resourceName,omitempty"` - // ServiceInfo1 - READ-ONLY; Service Info 1. - ServiceInfo1 *string `json:"serviceInfo1,omitempty"` - // ServiceInfo2 - READ-ONLY; Service Info 2. - ServiceInfo2 *string `json:"serviceInfo2,omitempty"` - // AdditionalInfo - READ-ONLY; Additional details of this usage item. By default this is not populated, unless it's specified in $expand. Use this field to get usage line item specific details such as the actual VM Size (ServiceType) or the ratio in which the reservation discount is applied. - AdditionalInfo *string `json:"additionalInfo,omitempty"` - // InvoiceSection - READ-ONLY; Invoice Section Name. - InvoiceSection *string `json:"invoiceSection,omitempty"` - // CostCenter - READ-ONLY; The cost center of this department if it is a department and a cost center is provided. - CostCenter *string `json:"costCenter,omitempty"` - // ResourceGroup - READ-ONLY; Resource Group Name. - ResourceGroup *string `json:"resourceGroup,omitempty"` - // ReservationID - READ-ONLY; ARM resource id of the reservation. Only applies to records relevant to reservations. - ReservationID *string `json:"reservationId,omitempty"` - // ReservationName - READ-ONLY; User provided display name of the reservation. Last known name for a particular day is populated in the daily data. Only applies to records relevant to reservations. - ReservationName *string `json:"reservationName,omitempty"` - // ProductOrderID - READ-ONLY; Product Order Id. For reservations this is the Reservation Order ID. - ProductOrderID *string `json:"productOrderId,omitempty"` - // ProductOrderName - READ-ONLY; Product Order Name. For reservations this is the SKU that was purchased. - ProductOrderName *string `json:"productOrderName,omitempty"` - // OfferID - READ-ONLY; Offer Id. Ex: MS-AZR-0017P, MS-AZR-0148P. - OfferID *string `json:"offerId,omitempty"` - // IsAzureCreditEligible - READ-ONLY; Is Azure Credit Eligible. - IsAzureCreditEligible *bool `json:"isAzureCreditEligible,omitempty"` - // Term - READ-ONLY; Term (in months). 1 month for monthly recurring purchase. 12 months for a 1 year reservation. 36 months for a 3 year reservation. - Term *string `json:"term,omitempty"` - // PublisherName - READ-ONLY; Publisher Name. - PublisherName *string `json:"publisherName,omitempty"` - // PublisherType - READ-ONLY; Publisher Type. - PublisherType *string `json:"publisherType,omitempty"` - // PlanName - READ-ONLY; Plan Name. - PlanName *string `json:"planName,omitempty"` - // ChargeType - READ-ONLY; Indicates a charge represents credits, usage, a Marketplace purchase, a reservation fee, or a refund. - ChargeType *string `json:"chargeType,omitempty"` - // Frequency - READ-ONLY; Indicates how frequently this charge will occur. OneTime for purchases which only happen once, Monthly for fees which recur every month, and UsageBased for charges based on how much a service is used. - Frequency *string `json:"frequency,omitempty"` -} - -// MarshalJSON is the custom marshaler for LegacyUsageDetailProperties. -func (ludp LegacyUsageDetailProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// LotProperties the lot properties. -type LotProperties struct { - // CreditCurrency - READ-ONLY; Credit Currency - CreditCurrency *string `json:"creditCurrency,omitempty"` - // BillingCurrency - READ-ONLY; Billing Currency. - BillingCurrency *string `json:"billingCurrency,omitempty"` - // OriginalAmount - READ-ONLY; Original amount. - OriginalAmount *Amount `json:"originalAmount,omitempty"` - // OriginalAmountInBillingCurrency - READ-ONLY; Current balance. - OriginalAmountInBillingCurrency *AmountWithExchangeRate `json:"originalAmountInBillingCurrency,omitempty"` - // ClosedBalance - READ-ONLY; Closed balance. - ClosedBalance *Amount `json:"closedBalance,omitempty"` - // ClosedBalanceInBillingCurrency - READ-ONLY; Current balance. - ClosedBalanceInBillingCurrency *AmountWithExchangeRate `json:"closedBalanceInBillingCurrency,omitempty"` - // Source - READ-ONLY; Lot source. Possible values include: 'LotSourcePurchasedCredit', 'LotSourcePromotionalCredit' - Source LotSource `json:"source,omitempty"` - // StartDate - READ-ONLY; Start date. - StartDate *date.Time `json:"startDate,omitempty"` - // ExpirationDate - READ-ONLY; Expiration date. - ExpirationDate *date.Time `json:"expirationDate,omitempty"` - // PoNumber - READ-ONLY; PO number. - PoNumber *string `json:"poNumber,omitempty"` - // Reseller - READ-ONLY; Reseller details. - Reseller *Reseller `json:"reseller,omitempty"` -} - -// MarshalJSON is the custom marshaler for LotProperties. -func (lp LotProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// Lots result of listing lot summary. -type Lots struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of lot summary. - Value *[]LotSummary `json:"value,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for Lots. -func (l Lots) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// LotsIterator provides access to a complete listing of LotSummary values. -type LotsIterator struct { - i int - page LotsPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *LotsIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LotsIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *LotsIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter LotsIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter LotsIterator) Response() Lots { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter LotsIterator) Value() LotSummary { - if !iter.page.NotDone() { - return LotSummary{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the LotsIterator type. -func NewLotsIterator(page LotsPage) LotsIterator { - return LotsIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (l Lots) IsEmpty() bool { - return l.Value == nil || len(*l.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (l Lots) hasNextLink() bool { - return l.NextLink != nil && len(*l.NextLink) != 0 -} - -// lotsPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (l Lots) lotsPreparer(ctx context.Context) (*http.Request, error) { - if !l.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(l.NextLink))) -} - -// LotsPage contains a page of LotSummary values. -type LotsPage struct { - fn func(context.Context, Lots) (Lots, error) - l Lots -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *LotsPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/LotsPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.l) - if err != nil { - return err - } - page.l = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *LotsPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page LotsPage) NotDone() bool { - return !page.l.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page LotsPage) Response() Lots { - return page.l -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page LotsPage) Values() []LotSummary { - if page.l.IsEmpty() { - return nil - } - return *page.l.Value -} - -// Creates a new instance of the LotsPage type. -func NewLotsPage(cur Lots, getNextPage func(context.Context, Lots) (Lots, error)) LotsPage { - return LotsPage{ - fn: getNextPage, - l: cur, - } -} - -// LotSummary a lot summary resource. -type LotSummary struct { - *LotProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for LotSummary. -func (ls LotSummary) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if ls.LotProperties != nil { - objectMap["properties"] = ls.LotProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for LotSummary struct. -func (ls *LotSummary) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var lotProperties LotProperties - err = json.Unmarshal(*v, &lotProperties) - if err != nil { - return err - } - ls.LotProperties = &lotProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - ls.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - ls.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - ls.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - ls.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - ls.Tags = tags - } - } - } - - return nil -} - -// ManagementGroupAggregatedCostProperties the properties of the Management Group Aggregated Cost. -type ManagementGroupAggregatedCostProperties struct { - // BillingPeriodID - READ-ONLY; The id of the billing period resource that the aggregated cost belongs to. - BillingPeriodID *string `json:"billingPeriodId,omitempty"` - // UsageStart - READ-ONLY; The start of the date time range covered by aggregated cost. - UsageStart *date.Time `json:"usageStart,omitempty"` - // UsageEnd - READ-ONLY; The end of the date time range covered by the aggregated cost. - UsageEnd *date.Time `json:"usageEnd,omitempty"` - // AzureCharges - READ-ONLY; Azure Charges. - AzureCharges *decimal.Decimal `json:"azureCharges,omitempty"` - // MarketplaceCharges - READ-ONLY; Marketplace Charges. - MarketplaceCharges *decimal.Decimal `json:"marketplaceCharges,omitempty"` - // ChargesBilledSeparately - READ-ONLY; Charges Billed Separately. - ChargesBilledSeparately *decimal.Decimal `json:"chargesBilledSeparately,omitempty"` - // Currency - READ-ONLY; The ISO currency in which the meter is charged, for example, USD. - Currency *string `json:"currency,omitempty"` - // Children - Children of a management group - Children *[]ManagementGroupAggregatedCostResult `json:"children,omitempty"` - // IncludedSubscriptions - List of subscription Guids included in the calculation of aggregated cost - IncludedSubscriptions *[]string `json:"includedSubscriptions,omitempty"` - // ExcludedSubscriptions - List of subscription Guids excluded from the calculation of aggregated cost - ExcludedSubscriptions *[]string `json:"excludedSubscriptions,omitempty"` -} - -// MarshalJSON is the custom marshaler for ManagementGroupAggregatedCostProperties. -func (mgacp ManagementGroupAggregatedCostProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if mgacp.Children != nil { - objectMap["children"] = mgacp.Children - } - if mgacp.IncludedSubscriptions != nil { - objectMap["includedSubscriptions"] = mgacp.IncludedSubscriptions - } - if mgacp.ExcludedSubscriptions != nil { - objectMap["excludedSubscriptions"] = mgacp.ExcludedSubscriptions - } - return json.Marshal(objectMap) -} - -// ManagementGroupAggregatedCostResult a management group aggregated cost resource. -type ManagementGroupAggregatedCostResult struct { - autorest.Response `json:"-"` - *ManagementGroupAggregatedCostProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for ManagementGroupAggregatedCostResult. -func (mgacr ManagementGroupAggregatedCostResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if mgacr.ManagementGroupAggregatedCostProperties != nil { - objectMap["properties"] = mgacr.ManagementGroupAggregatedCostProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for ManagementGroupAggregatedCostResult struct. -func (mgacr *ManagementGroupAggregatedCostResult) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var managementGroupAggregatedCostProperties ManagementGroupAggregatedCostProperties - err = json.Unmarshal(*v, &managementGroupAggregatedCostProperties) - if err != nil { - return err - } - mgacr.ManagementGroupAggregatedCostProperties = &managementGroupAggregatedCostProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - mgacr.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - mgacr.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - mgacr.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - mgacr.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - mgacr.Tags = tags - } - } - } - - return nil -} - -// Marketplace an marketplace resource. -type Marketplace struct { - *MarketplaceProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for Marketplace. -func (mVar Marketplace) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if mVar.MarketplaceProperties != nil { - objectMap["properties"] = mVar.MarketplaceProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for Marketplace struct. -func (mVar *Marketplace) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var marketplaceProperties MarketplaceProperties - err = json.Unmarshal(*v, &marketplaceProperties) - if err != nil { - return err - } - mVar.MarketplaceProperties = &marketplaceProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - mVar.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - mVar.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - mVar.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - mVar.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - mVar.Tags = tags - } - } - } - - return nil -} - -// MarketplaceProperties the properties of the marketplace usage detail. -type MarketplaceProperties struct { - // BillingPeriodID - READ-ONLY; The id of the billing period resource that the usage belongs to. - BillingPeriodID *string `json:"billingPeriodId,omitempty"` - // UsageStart - READ-ONLY; The start of the date time range covered by the usage detail. - UsageStart *date.Time `json:"usageStart,omitempty"` - // UsageEnd - READ-ONLY; The end of the date time range covered by the usage detail. - UsageEnd *date.Time `json:"usageEnd,omitempty"` - // ResourceRate - READ-ONLY; The marketplace resource rate. - ResourceRate *decimal.Decimal `json:"resourceRate,omitempty"` - // OfferName - READ-ONLY; The type of offer. - OfferName *string `json:"offerName,omitempty"` - // ResourceGroup - READ-ONLY; The name of resource group. - ResourceGroup *string `json:"resourceGroup,omitempty"` - // AdditionalInfo - READ-ONLY; Additional information. - AdditionalInfo *string `json:"additionalInfo,omitempty"` - // OrderNumber - READ-ONLY; The order number. - OrderNumber *string `json:"orderNumber,omitempty"` - // InstanceName - READ-ONLY; The name of the resource instance that the usage is about. - InstanceName *string `json:"instanceName,omitempty"` - // InstanceID - READ-ONLY; The uri of the resource instance that the usage is about. - InstanceID *string `json:"instanceId,omitempty"` - // Currency - READ-ONLY; The ISO currency in which the meter is charged, for example, USD. - Currency *string `json:"currency,omitempty"` - // ConsumedQuantity - READ-ONLY; The quantity of usage. - ConsumedQuantity *decimal.Decimal `json:"consumedQuantity,omitempty"` - // UnitOfMeasure - READ-ONLY; The unit of measure. - UnitOfMeasure *string `json:"unitOfMeasure,omitempty"` - // PretaxCost - READ-ONLY; The amount of cost before tax. - PretaxCost *decimal.Decimal `json:"pretaxCost,omitempty"` - // IsEstimated - READ-ONLY; The estimated usage is subject to change. - IsEstimated *bool `json:"isEstimated,omitempty"` - // MeterID - READ-ONLY; The meter id (GUID). - MeterID *uuid.UUID `json:"meterId,omitempty"` - // SubscriptionGUID - READ-ONLY; Subscription guid. - SubscriptionGUID *uuid.UUID `json:"subscriptionGuid,omitempty"` - // SubscriptionName - READ-ONLY; Subscription name. - SubscriptionName *string `json:"subscriptionName,omitempty"` - // AccountName - READ-ONLY; Account name. - AccountName *string `json:"accountName,omitempty"` - // DepartmentName - READ-ONLY; Department name. - DepartmentName *string `json:"departmentName,omitempty"` - // ConsumedService - READ-ONLY; Consumed service name. - ConsumedService *string `json:"consumedService,omitempty"` - // CostCenter - READ-ONLY; The cost center of this department if it is a department and a costcenter exists - CostCenter *string `json:"costCenter,omitempty"` - // AdditionalProperties - READ-ONLY; Additional details of this usage item. By default this is not populated, unless it's specified in $expand. - AdditionalProperties *string `json:"additionalProperties,omitempty"` - // PublisherName - READ-ONLY; The name of publisher. - PublisherName *string `json:"publisherName,omitempty"` - // PlanName - READ-ONLY; The name of plan. - PlanName *string `json:"planName,omitempty"` - // IsRecurringCharge - READ-ONLY; Flag indicating whether this is a recurring charge or not. - IsRecurringCharge *bool `json:"isRecurringCharge,omitempty"` -} - -// MarshalJSON is the custom marshaler for MarketplaceProperties. -func (mp MarketplaceProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// MarketplacesListResult result of listing marketplaces. It contains a list of available marketplaces in -// reverse chronological order by billing period. -type MarketplacesListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of marketplaces. - Value *[]Marketplace `json:"value,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for MarketplacesListResult. -func (mlr MarketplacesListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// MarketplacesListResultIterator provides access to a complete listing of Marketplace values. -type MarketplacesListResultIterator struct { - i int - page MarketplacesListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *MarketplacesListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/MarketplacesListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *MarketplacesListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter MarketplacesListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter MarketplacesListResultIterator) Response() MarketplacesListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter MarketplacesListResultIterator) Value() Marketplace { - if !iter.page.NotDone() { - return Marketplace{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the MarketplacesListResultIterator type. -func NewMarketplacesListResultIterator(page MarketplacesListResultPage) MarketplacesListResultIterator { - return MarketplacesListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (mlr MarketplacesListResult) IsEmpty() bool { - return mlr.Value == nil || len(*mlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (mlr MarketplacesListResult) hasNextLink() bool { - return mlr.NextLink != nil && len(*mlr.NextLink) != 0 -} - -// marketplacesListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (mlr MarketplacesListResult) marketplacesListResultPreparer(ctx context.Context) (*http.Request, error) { - if !mlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(mlr.NextLink))) -} - -// MarketplacesListResultPage contains a page of Marketplace values. -type MarketplacesListResultPage struct { - fn func(context.Context, MarketplacesListResult) (MarketplacesListResult, error) - mlr MarketplacesListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *MarketplacesListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/MarketplacesListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.mlr) - if err != nil { - return err - } - page.mlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *MarketplacesListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page MarketplacesListResultPage) NotDone() bool { - return !page.mlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page MarketplacesListResultPage) Response() MarketplacesListResult { - return page.mlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page MarketplacesListResultPage) Values() []Marketplace { - if page.mlr.IsEmpty() { - return nil - } - return *page.mlr.Value -} - -// Creates a new instance of the MarketplacesListResultPage type. -func NewMarketplacesListResultPage(cur MarketplacesListResult, getNextPage func(context.Context, MarketplacesListResult) (MarketplacesListResult, error)) MarketplacesListResultPage { - return MarketplacesListResultPage{ - fn: getNextPage, - mlr: cur, - } -} - -// MeterDetails the properties of the meter detail. -type MeterDetails struct { - // MeterName - READ-ONLY; The name of the meter, within the given meter category - MeterName *string `json:"meterName,omitempty"` - // MeterCategory - READ-ONLY; The category of the meter, for example, 'Cloud services', 'Networking', etc.. - MeterCategory *string `json:"meterCategory,omitempty"` - // MeterSubCategory - READ-ONLY; The subcategory of the meter, for example, 'A6 Cloud services', 'ExpressRoute (IXP)', etc.. - MeterSubCategory *string `json:"meterSubCategory,omitempty"` - // Unit - READ-ONLY; The unit in which the meter consumption is charged, for example, 'Hours', 'GB', etc. - Unit *string `json:"unit,omitempty"` - // MeterLocation - READ-ONLY; The location in which the Azure service is available. - MeterLocation *string `json:"meterLocation,omitempty"` - // TotalIncludedQuantity - READ-ONLY; The total included quantity associated with the offer. - TotalIncludedQuantity *decimal.Decimal `json:"totalIncludedQuantity,omitempty"` - // PretaxStandardRate - READ-ONLY; The pretax listing price. - PretaxStandardRate *decimal.Decimal `json:"pretaxStandardRate,omitempty"` - // ServiceName - READ-ONLY; The name of the service. - ServiceName *string `json:"serviceName,omitempty"` - // ServiceTier - READ-ONLY; The service tier. - ServiceTier *string `json:"serviceTier,omitempty"` -} - -// MarshalJSON is the custom marshaler for MeterDetails. -func (md MeterDetails) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// MeterDetailsResponse the properties of the meter detail. -type MeterDetailsResponse struct { - // MeterName - READ-ONLY; The name of the meter, within the given meter category - MeterName *string `json:"meterName,omitempty"` - // MeterCategory - READ-ONLY; The category of the meter, for example, 'Cloud services', 'Networking', etc.. - MeterCategory *string `json:"meterCategory,omitempty"` - // MeterSubCategory - READ-ONLY; The subcategory of the meter, for example, 'A6 Cloud services', 'ExpressRoute (IXP)', etc.. - MeterSubCategory *string `json:"meterSubCategory,omitempty"` - // UnitOfMeasure - READ-ONLY; The unit in which the meter consumption is charged, for example, 'Hours', 'GB', etc. - UnitOfMeasure *string `json:"unitOfMeasure,omitempty"` - // ServiceFamily - READ-ONLY; The service family. - ServiceFamily *string `json:"serviceFamily,omitempty"` -} - -// MarshalJSON is the custom marshaler for MeterDetailsResponse. -func (mdr MeterDetailsResponse) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ModernChargeSummary modern charge summary. -type ModernChargeSummary struct { - // ModernChargeSummaryProperties - Properties for modern charge summary - *ModernChargeSummaryProperties `json:"properties,omitempty"` - // Kind - Possible values include: 'KindBasicChargeSummaryKindChargeSummary', 'KindBasicChargeSummaryKindLegacy', 'KindBasicChargeSummaryKindModern' - Kind KindBasicChargeSummary `json:"kind,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for ModernChargeSummary. -func (mcs ModernChargeSummary) MarshalJSON() ([]byte, error) { - mcs.Kind = KindBasicChargeSummaryKindModern - objectMap := make(map[string]interface{}) - if mcs.ModernChargeSummaryProperties != nil { - objectMap["properties"] = mcs.ModernChargeSummaryProperties - } - if mcs.Kind != "" { - objectMap["kind"] = mcs.Kind - } - return json.Marshal(objectMap) -} - -// AsLegacyChargeSummary is the BasicChargeSummary implementation for ModernChargeSummary. -func (mcs ModernChargeSummary) AsLegacyChargeSummary() (*LegacyChargeSummary, bool) { - return nil, false -} - -// AsModernChargeSummary is the BasicChargeSummary implementation for ModernChargeSummary. -func (mcs ModernChargeSummary) AsModernChargeSummary() (*ModernChargeSummary, bool) { - return &mcs, true -} - -// AsChargeSummary is the BasicChargeSummary implementation for ModernChargeSummary. -func (mcs ModernChargeSummary) AsChargeSummary() (*ChargeSummary, bool) { - return nil, false -} - -// AsBasicChargeSummary is the BasicChargeSummary implementation for ModernChargeSummary. -func (mcs ModernChargeSummary) AsBasicChargeSummary() (BasicChargeSummary, bool) { - return &mcs, true -} - -// UnmarshalJSON is the custom unmarshaler for ModernChargeSummary struct. -func (mcs *ModernChargeSummary) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var modernChargeSummaryProperties ModernChargeSummaryProperties - err = json.Unmarshal(*v, &modernChargeSummaryProperties) - if err != nil { - return err - } - mcs.ModernChargeSummaryProperties = &modernChargeSummaryProperties - } - case "kind": - if v != nil { - var kind KindBasicChargeSummary - err = json.Unmarshal(*v, &kind) - if err != nil { - return err - } - mcs.Kind = kind - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - mcs.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - mcs.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - mcs.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - mcs.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - mcs.Tags = tags - } - } - } - - return nil -} - -// ModernChargeSummaryProperties the properties of modern charge summary. -type ModernChargeSummaryProperties struct { - // BillingPeriodID - READ-ONLY; The id of the billing period resource that the charge belongs to. - BillingPeriodID *string `json:"billingPeriodId,omitempty"` - // UsageStart - READ-ONLY; Usage start date. - UsageStart *string `json:"usageStart,omitempty"` - // UsageEnd - READ-ONLY; Usage end date. - UsageEnd *string `json:"usageEnd,omitempty"` - // AzureCharges - READ-ONLY; Azure Charges. - AzureCharges *Amount `json:"azureCharges,omitempty"` - // ChargesBilledSeparately - READ-ONLY; Charges Billed separately. - ChargesBilledSeparately *Amount `json:"chargesBilledSeparately,omitempty"` - // MarketplaceCharges - READ-ONLY; Marketplace Charges. - MarketplaceCharges *Amount `json:"marketplaceCharges,omitempty"` - // BillingAccountID - READ-ONLY; Billing Account Id - BillingAccountID *string `json:"billingAccountId,omitempty"` - // BillingProfileID - READ-ONLY; Billing Profile Id - BillingProfileID *string `json:"billingProfileId,omitempty"` - // InvoiceSectionID - READ-ONLY; Invoice Section Id - InvoiceSectionID *string `json:"invoiceSectionId,omitempty"` - // CustomerID - READ-ONLY; Customer Id - CustomerID *string `json:"customerId,omitempty"` - // IsInvoiced - READ-ONLY; Is charge Invoiced - IsInvoiced *bool `json:"isInvoiced,omitempty"` -} - -// MarshalJSON is the custom marshaler for ModernChargeSummaryProperties. -func (mcsp ModernChargeSummaryProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ModernReservationRecommendation modern reservation recommendation. -type ModernReservationRecommendation struct { - // ModernReservationRecommendationProperties - Properties for modern reservation recommendation - *ModernReservationRecommendationProperties `json:"properties,omitempty"` - // ETag - READ-ONLY; Resource eTag. - ETag *string `json:"eTag,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` - // Sku - READ-ONLY; Resource sku - Sku *string `json:"sku,omitempty"` - // Kind - Possible values include: 'KindBasicReservationRecommendationKindReservationRecommendation', 'KindBasicReservationRecommendationKindLegacy', 'KindBasicReservationRecommendationKindModern' - Kind KindBasicReservationRecommendation `json:"kind,omitempty"` -} - -// MarshalJSON is the custom marshaler for ModernReservationRecommendation. -func (mrr ModernReservationRecommendation) MarshalJSON() ([]byte, error) { - mrr.Kind = KindBasicReservationRecommendationKindModern - objectMap := make(map[string]interface{}) - if mrr.ModernReservationRecommendationProperties != nil { - objectMap["properties"] = mrr.ModernReservationRecommendationProperties - } - if mrr.Kind != "" { - objectMap["kind"] = mrr.Kind - } - return json.Marshal(objectMap) -} - -// AsLegacyReservationRecommendation is the BasicReservationRecommendation implementation for ModernReservationRecommendation. -func (mrr ModernReservationRecommendation) AsLegacyReservationRecommendation() (*LegacyReservationRecommendation, bool) { - return nil, false -} - -// AsModernReservationRecommendation is the BasicReservationRecommendation implementation for ModernReservationRecommendation. -func (mrr ModernReservationRecommendation) AsModernReservationRecommendation() (*ModernReservationRecommendation, bool) { - return &mrr, true -} - -// AsReservationRecommendation is the BasicReservationRecommendation implementation for ModernReservationRecommendation. -func (mrr ModernReservationRecommendation) AsReservationRecommendation() (*ReservationRecommendation, bool) { - return nil, false -} - -// AsBasicReservationRecommendation is the BasicReservationRecommendation implementation for ModernReservationRecommendation. -func (mrr ModernReservationRecommendation) AsBasicReservationRecommendation() (BasicReservationRecommendation, bool) { - return &mrr, true -} - -// UnmarshalJSON is the custom unmarshaler for ModernReservationRecommendation struct. -func (mrr *ModernReservationRecommendation) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var modernReservationRecommendationProperties ModernReservationRecommendationProperties - err = json.Unmarshal(*v, &modernReservationRecommendationProperties) - if err != nil { - return err - } - mrr.ModernReservationRecommendationProperties = &modernReservationRecommendationProperties - } - case "eTag": - if v != nil { - var eTag string - err = json.Unmarshal(*v, &eTag) - if err != nil { - return err - } - mrr.ETag = &eTag - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - mrr.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - mrr.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - mrr.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - mrr.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - mrr.Tags = tags - } - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - mrr.Location = &location - } - case "sku": - if v != nil { - var sku string - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - mrr.Sku = &sku - } - case "kind": - if v != nil { - var kind KindBasicReservationRecommendation - err = json.Unmarshal(*v, &kind) - if err != nil { - return err - } - mrr.Kind = kind - } - } - } - - return nil -} - -// ModernReservationRecommendationProperties the properties of the reservation recommendation. -type ModernReservationRecommendationProperties struct { - // Location - READ-ONLY; Resource Location. - Location *string `json:"location,omitempty"` - // LookBackPeriod - READ-ONLY; The number of days of usage to look back for recommendation. - LookBackPeriod *int32 `json:"lookBackPeriod,omitempty"` - // InstanceFlexibilityRatio - READ-ONLY; The instance Flexibility Ratio. - InstanceFlexibilityRatio *float64 `json:"instanceFlexibilityRatio,omitempty"` - // InstanceFlexibilityGroup - READ-ONLY; The instance Flexibility Group. - InstanceFlexibilityGroup *string `json:"instanceFlexibilityGroup,omitempty"` - // NormalizedSize - READ-ONLY; The normalized Size. - NormalizedSize *string `json:"normalizedSize,omitempty"` - // RecommendedQuantityNormalized - READ-ONLY; The recommended Quantity Normalized. - RecommendedQuantityNormalized *float64 `json:"recommendedQuantityNormalized,omitempty"` - // MeterID - READ-ONLY; The meter id (GUID) - MeterID *uuid.UUID `json:"meterId,omitempty"` - // Term - READ-ONLY; RI recommendations in one or three year terms. - Term *string `json:"term,omitempty"` - // CostWithNoReservedInstances - READ-ONLY; The total amount of cost without reserved instances. - CostWithNoReservedInstances *Amount `json:"costWithNoReservedInstances,omitempty"` - // RecommendedQuantity - READ-ONLY; Recommended quality for reserved instances. - RecommendedQuantity *decimal.Decimal `json:"recommendedQuantity,omitempty"` - // TotalCostWithReservedInstances - READ-ONLY; The total amount of cost with reserved instances. - TotalCostWithReservedInstances *Amount `json:"totalCostWithReservedInstances,omitempty"` - // NetSavings - READ-ONLY; Total estimated savings with reserved instances. - NetSavings *Amount `json:"netSavings,omitempty"` - // FirstUsageDate - READ-ONLY; The usage date for looking back. - FirstUsageDate *date.Time `json:"firstUsageDate,omitempty"` - // Scope - READ-ONLY; Shared or single recommendation. - Scope *string `json:"scope,omitempty"` - // SkuProperties - READ-ONLY; List of sku properties - SkuProperties *[]SkuProperty `json:"skuProperties,omitempty"` - // SkuName - READ-ONLY; This is the ARM Sku name. - SkuName *string `json:"skuName,omitempty"` - // ResourceType - READ-ONLY; The Azure resource type. - ResourceType *string `json:"resourceType,omitempty"` - // SubscriptionID - READ-ONLY; The Azure subscription ID. - SubscriptionID *string `json:"subscriptionId,omitempty"` -} - -// MarshalJSON is the custom marshaler for ModernReservationRecommendationProperties. -func (mrrp ModernReservationRecommendationProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ModernReservationTransaction modern Reservation transaction resource. -type ModernReservationTransaction struct { - *ModernReservationTransactionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags *[]string `json:"tags,omitempty"` -} - -// MarshalJSON is the custom marshaler for ModernReservationTransaction. -func (mrt ModernReservationTransaction) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if mrt.ModernReservationTransactionProperties != nil { - objectMap["properties"] = mrt.ModernReservationTransactionProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for ModernReservationTransaction struct. -func (mrt *ModernReservationTransaction) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var modernReservationTransactionProperties ModernReservationTransactionProperties - err = json.Unmarshal(*v, &modernReservationTransactionProperties) - if err != nil { - return err - } - mrt.ModernReservationTransactionProperties = &modernReservationTransactionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - mrt.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - mrt.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - mrt.Type = &typeVar - } - case "tags": - if v != nil { - var tags []string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - mrt.Tags = &tags - } - } - } - - return nil -} - -// ModernReservationTransactionProperties the properties of a modern reservation transaction. -type ModernReservationTransactionProperties struct { - // Amount - READ-ONLY; The charge of the transaction. - Amount *decimal.Decimal `json:"amount,omitempty"` - // ArmSkuName - READ-ONLY; This is the ARM Sku name. It can be used to join with the serviceType field in additional info in usage records. - ArmSkuName *string `json:"armSkuName,omitempty"` - // BillingFrequency - READ-ONLY; The billing frequency, which can be either one-time or recurring. - BillingFrequency *string `json:"billingFrequency,omitempty"` - // BillingProfileID - READ-ONLY; Billing profile Id. - BillingProfileID *string `json:"billingProfileId,omitempty"` - // BillingProfileName - READ-ONLY; Billing profile name. - BillingProfileName *string `json:"billingProfileName,omitempty"` - // Currency - READ-ONLY; The ISO currency in which the transaction is charged, for example, USD. - Currency *string `json:"currency,omitempty"` - // Description - READ-ONLY; The description of the transaction. - Description *string `json:"description,omitempty"` - // EventDate - READ-ONLY; The date of the transaction - EventDate *date.Time `json:"eventDate,omitempty"` - // EventType - READ-ONLY; The type of the transaction (Purchase, Cancel, etc.) - EventType *string `json:"eventType,omitempty"` - // Invoice - READ-ONLY; Invoice Number - Invoice *string `json:"invoice,omitempty"` - // InvoiceID - READ-ONLY; Invoice Id as on the invoice where the specific transaction appears. - InvoiceID *string `json:"invoiceId,omitempty"` - // InvoiceSectionID - READ-ONLY; Invoice Section Id - InvoiceSectionID *string `json:"invoiceSectionId,omitempty"` - // InvoiceSectionName - READ-ONLY; Invoice Section Name. - InvoiceSectionName *string `json:"invoiceSectionName,omitempty"` - // PurchasingSubscriptionGUID - READ-ONLY; The subscription guid that makes the transaction. - PurchasingSubscriptionGUID *uuid.UUID `json:"purchasingSubscriptionGuid,omitempty"` - // PurchasingSubscriptionName - READ-ONLY; The subscription name that makes the transaction. - PurchasingSubscriptionName *string `json:"purchasingSubscriptionName,omitempty"` - // Quantity - READ-ONLY; The quantity of the transaction. - Quantity *decimal.Decimal `json:"quantity,omitempty"` - // Region - READ-ONLY; The region of the transaction. - Region *string `json:"region,omitempty"` - // ReservationOrderID - READ-ONLY; The reservation order ID is the identifier for a reservation purchase. Each reservation order ID represents a single purchase transaction. A reservation order contains reservations. The reservation order specifies the VM size and region for the reservations. - ReservationOrderID *string `json:"reservationOrderId,omitempty"` - // ReservationOrderName - READ-ONLY; The name of the reservation order. - ReservationOrderName *string `json:"reservationOrderName,omitempty"` - // Term - READ-ONLY; This is the term of the transaction. - Term *string `json:"term,omitempty"` -} - -// MarshalJSON is the custom marshaler for ModernReservationTransactionProperties. -func (mrtp ModernReservationTransactionProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ModernReservationTransactionsListResult result of listing reservation recommendations. -type ModernReservationTransactionsListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of reservation recommendations. - Value *[]ModernReservationTransaction `json:"value,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for ModernReservationTransactionsListResult. -func (mrtlr ModernReservationTransactionsListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ModernReservationTransactionsListResultIterator provides access to a complete listing of -// ModernReservationTransaction values. -type ModernReservationTransactionsListResultIterator struct { - i int - page ModernReservationTransactionsListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *ModernReservationTransactionsListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ModernReservationTransactionsListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *ModernReservationTransactionsListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ModernReservationTransactionsListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter ModernReservationTransactionsListResultIterator) Response() ModernReservationTransactionsListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter ModernReservationTransactionsListResultIterator) Value() ModernReservationTransaction { - if !iter.page.NotDone() { - return ModernReservationTransaction{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the ModernReservationTransactionsListResultIterator type. -func NewModernReservationTransactionsListResultIterator(page ModernReservationTransactionsListResultPage) ModernReservationTransactionsListResultIterator { - return ModernReservationTransactionsListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (mrtlr ModernReservationTransactionsListResult) IsEmpty() bool { - return mrtlr.Value == nil || len(*mrtlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (mrtlr ModernReservationTransactionsListResult) hasNextLink() bool { - return mrtlr.NextLink != nil && len(*mrtlr.NextLink) != 0 -} - -// modernReservationTransactionsListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (mrtlr ModernReservationTransactionsListResult) modernReservationTransactionsListResultPreparer(ctx context.Context) (*http.Request, error) { - if !mrtlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(mrtlr.NextLink))) -} - -// ModernReservationTransactionsListResultPage contains a page of ModernReservationTransaction values. -type ModernReservationTransactionsListResultPage struct { - fn func(context.Context, ModernReservationTransactionsListResult) (ModernReservationTransactionsListResult, error) - mrtlr ModernReservationTransactionsListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *ModernReservationTransactionsListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ModernReservationTransactionsListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.mrtlr) - if err != nil { - return err - } - page.mrtlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *ModernReservationTransactionsListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ModernReservationTransactionsListResultPage) NotDone() bool { - return !page.mrtlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page ModernReservationTransactionsListResultPage) Response() ModernReservationTransactionsListResult { - return page.mrtlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page ModernReservationTransactionsListResultPage) Values() []ModernReservationTransaction { - if page.mrtlr.IsEmpty() { - return nil - } - return *page.mrtlr.Value -} - -// Creates a new instance of the ModernReservationTransactionsListResultPage type. -func NewModernReservationTransactionsListResultPage(cur ModernReservationTransactionsListResult, getNextPage func(context.Context, ModernReservationTransactionsListResult) (ModernReservationTransactionsListResult, error)) ModernReservationTransactionsListResultPage { - return ModernReservationTransactionsListResultPage{ - fn: getNextPage, - mrtlr: cur, - } -} - -// ModernUsageDetail modern usage detail. -type ModernUsageDetail struct { - // ModernUsageDetailProperties - Properties for modern usage details - *ModernUsageDetailProperties `json:"properties,omitempty"` - // Kind - Possible values include: 'KindUsageDetail', 'KindLegacy', 'KindModern' - Kind Kind `json:"kind,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for ModernUsageDetail. -func (mud ModernUsageDetail) MarshalJSON() ([]byte, error) { - mud.Kind = KindModern - objectMap := make(map[string]interface{}) - if mud.ModernUsageDetailProperties != nil { - objectMap["properties"] = mud.ModernUsageDetailProperties - } - if mud.Kind != "" { - objectMap["kind"] = mud.Kind - } - return json.Marshal(objectMap) -} - -// AsLegacyUsageDetail is the BasicUsageDetail implementation for ModernUsageDetail. -func (mud ModernUsageDetail) AsLegacyUsageDetail() (*LegacyUsageDetail, bool) { - return nil, false -} - -// AsModernUsageDetail is the BasicUsageDetail implementation for ModernUsageDetail. -func (mud ModernUsageDetail) AsModernUsageDetail() (*ModernUsageDetail, bool) { - return &mud, true -} - -// AsUsageDetail is the BasicUsageDetail implementation for ModernUsageDetail. -func (mud ModernUsageDetail) AsUsageDetail() (*UsageDetail, bool) { - return nil, false -} - -// AsBasicUsageDetail is the BasicUsageDetail implementation for ModernUsageDetail. -func (mud ModernUsageDetail) AsBasicUsageDetail() (BasicUsageDetail, bool) { - return &mud, true -} - -// UnmarshalJSON is the custom unmarshaler for ModernUsageDetail struct. -func (mud *ModernUsageDetail) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var modernUsageDetailProperties ModernUsageDetailProperties - err = json.Unmarshal(*v, &modernUsageDetailProperties) - if err != nil { - return err - } - mud.ModernUsageDetailProperties = &modernUsageDetailProperties - } - case "kind": - if v != nil { - var kind Kind - err = json.Unmarshal(*v, &kind) - if err != nil { - return err - } - mud.Kind = kind - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - mud.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - mud.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - mud.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - mud.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - mud.Tags = tags - } - } - } - - return nil -} - -// ModernUsageDetailProperties the properties of the usage detail. -type ModernUsageDetailProperties struct { - // BillingAccountID - READ-ONLY; Billing Account identifier. - BillingAccountID *string `json:"billingAccountId,omitempty"` - // BillingAccountName - READ-ONLY; Name of the Billing Account. - BillingAccountName *string `json:"billingAccountName,omitempty"` - // BillingPeriodStartDate - READ-ONLY; Billing Period Start Date as in the invoice. - BillingPeriodStartDate *date.Time `json:"billingPeriodStartDate,omitempty"` - // BillingPeriodEndDate - READ-ONLY; Billing Period End Date as in the invoice. - BillingPeriodEndDate *date.Time `json:"billingPeriodEndDate,omitempty"` - // BillingProfileID - READ-ONLY; Identifier for the billing profile that groups costs across invoices in the a singular billing currency across across the customers who have onboarded the Microsoft customer agreement and the customers in CSP who have made entitlement purchases like SaaS, Marketplace, RI, etc. - BillingProfileID *string `json:"billingProfileId,omitempty"` - // BillingProfileName - READ-ONLY; Name of the billing profile that groups costs across invoices in the a singular billing currency across across the customers who have onboarded the Microsoft customer agreement and the customers in CSP who have made entitlement purchases like SaaS, Marketplace, RI, etc. - BillingProfileName *string `json:"billingProfileName,omitempty"` - // SubscriptionGUID - READ-ONLY; Unique Microsoft generated identifier for the Azure Subscription. - SubscriptionGUID *string `json:"subscriptionGuid,omitempty"` - // SubscriptionName - READ-ONLY; Name of the Azure Subscription. - SubscriptionName *string `json:"subscriptionName,omitempty"` - // Date - READ-ONLY; Date for the usage record. - Date *date.Time `json:"date,omitempty"` - // Product - READ-ONLY; Name of the product that has accrued charges by consumption or purchase as listed in the invoice. Not available for Marketplace. - Product *string `json:"product,omitempty"` - // MeterID - READ-ONLY; The meter id (GUID). Not available for marketplace. For reserved instance this represents the primary meter for which the reservation was purchased. For the actual VM Size for which the reservation is purchased see productOrderName. - MeterID *string `json:"meterId,omitempty"` - // MeterName - READ-ONLY; Identifies the name of the meter against which consumption is measured. - MeterName *string `json:"meterName,omitempty"` - // MeterRegion - READ-ONLY; Identifies the location of the datacenter for certain services that are priced based on datacenter location. - MeterRegion *string `json:"meterRegion,omitempty"` - // MeterCategory - READ-ONLY; Identifies the top-level service for the usage. - MeterCategory *string `json:"meterCategory,omitempty"` - // MeterSubCategory - READ-ONLY; Defines the type or sub-category of Azure service that can affect the rate. - MeterSubCategory *string `json:"meterSubCategory,omitempty"` - // ServiceFamily - READ-ONLY; List the service family for the product purchased or charged (Example: Storage ; Compute). - ServiceFamily *string `json:"serviceFamily,omitempty"` - // Quantity - READ-ONLY; Measure the quantity purchased or consumed.The amount of the meter used during the billing period. - Quantity *decimal.Decimal `json:"quantity,omitempty"` - // UnitOfMeasure - READ-ONLY; Identifies the Unit that the service is charged in. For example, GB, hours, 10,000 s. - UnitOfMeasure *string `json:"unitOfMeasure,omitempty"` - // InstanceName - READ-ONLY; Instance Name. - InstanceName *string `json:"instanceName,omitempty"` - // CostInUSD - READ-ONLY; Estimated extendedCost or blended cost before tax in USD. - CostInUSD *decimal.Decimal `json:"costInUSD,omitempty"` - // UnitPrice - READ-ONLY; Unit Price is the price applicable to you. (your EA or other contract price). - UnitPrice *decimal.Decimal `json:"unitPrice,omitempty"` - // BillingCurrencyCode - READ-ONLY; The currency defining the billed cost. - BillingCurrencyCode *string `json:"billingCurrencyCode,omitempty"` - // ResourceLocation - READ-ONLY; Name of the resource location. - ResourceLocation *string `json:"resourceLocation,omitempty"` - // ConsumedService - READ-ONLY; Consumed service name. Name of the azure resource provider that emits the usage or was purchased. This value is not provided for marketplace usage. - ConsumedService *string `json:"consumedService,omitempty"` - // ServiceInfo1 - READ-ONLY; Service Info 1. - ServiceInfo1 *string `json:"serviceInfo1,omitempty"` - // ServiceInfo2 - READ-ONLY; Service Info 2. - ServiceInfo2 *string `json:"serviceInfo2,omitempty"` - // AdditionalInfo - READ-ONLY; Additional details of this usage item. Use this field to get usage line item specific details such as the actual VM Size (ServiceType) or the ratio in which the reservation discount is applied. - AdditionalInfo *string `json:"additionalInfo,omitempty"` - // InvoiceSectionID - READ-ONLY; Identifier of the project that is being charged in the invoice. Not applicable for Microsoft Customer Agreements onboarded by partners. - InvoiceSectionID *string `json:"invoiceSectionId,omitempty"` - // InvoiceSectionName - READ-ONLY; Name of the project that is being charged in the invoice. Not applicable for Microsoft Customer Agreements onboarded by partners. - InvoiceSectionName *string `json:"invoiceSectionName,omitempty"` - // CostCenter - READ-ONLY; The cost center of this department if it is a department and a cost center is provided. - CostCenter *string `json:"costCenter,omitempty"` - // ResourceGroup - READ-ONLY; Name of the Azure resource group used for cohesive lifecycle management of resources. - ResourceGroup *string `json:"resourceGroup,omitempty"` - // ReservationID - READ-ONLY; ARM resource id of the reservation. Only applies to records relevant to reservations. - ReservationID *string `json:"reservationId,omitempty"` - // ReservationName - READ-ONLY; User provided display name of the reservation. Last known name for a particular day is populated in the daily data. Only applies to records relevant to reservations. - ReservationName *string `json:"reservationName,omitempty"` - // ProductOrderID - READ-ONLY; The identifier for the asset or Azure plan name that the subscription belongs to. For example: Azure Plan. For reservations this is the Reservation Order ID. - ProductOrderID *string `json:"productOrderId,omitempty"` - // ProductOrderName - READ-ONLY; Product Order Name. For reservations this is the SKU that was purchased. - ProductOrderName *string `json:"productOrderName,omitempty"` - // IsAzureCreditEligible - READ-ONLY; Determines if the cost is eligible to be paid for using Azure credits. - IsAzureCreditEligible *bool `json:"isAzureCreditEligible,omitempty"` - // Term - READ-ONLY; Term (in months). Displays the term for the validity of the offer. For example. In case of reserved instances it displays 12 months for yearly term of reserved instance. For one time purchases or recurring purchases, the terms displays 1 month; This is not applicable for Azure consumption. - Term *string `json:"term,omitempty"` - // PublisherName - READ-ONLY; Name of the publisher of the service including Microsoft or Third Party publishers. - PublisherName *string `json:"publisherName,omitempty"` - // PublisherType - READ-ONLY; Type of publisher that identifies if the publisher is first party, third party reseller or third party agency. - PublisherType *string `json:"publisherType,omitempty"` - // ChargeType - READ-ONLY; Indicates a charge represents credits, usage, a Marketplace purchase, a reservation fee, or a refund. - ChargeType *string `json:"chargeType,omitempty"` - // Frequency - READ-ONLY; Indicates how frequently this charge will occur. OneTime for purchases which only happen once, Monthly for fees which recur every month, and UsageBased for charges based on how much a service is used. - Frequency *string `json:"frequency,omitempty"` - // CostInBillingCurrency - READ-ONLY; ExtendedCost or blended cost before tax in billed currency. - CostInBillingCurrency *decimal.Decimal `json:"costInBillingCurrency,omitempty"` - // CostInPricingCurrency - READ-ONLY; ExtendedCost or blended cost before tax in pricing currency to correlate with prices. - CostInPricingCurrency *decimal.Decimal `json:"costInPricingCurrency,omitempty"` - // ExchangeRate - READ-ONLY; Exchange rate used in conversion from pricing currency to billing currency. - ExchangeRate *string `json:"exchangeRate,omitempty"` - // ExchangeRateDate - READ-ONLY; Date on which exchange rate used in conversion from pricing currency to billing currency. - ExchangeRateDate *date.Time `json:"exchangeRateDate,omitempty"` - // InvoiceID - READ-ONLY; Invoice ID as on the invoice where the specific transaction appears. - InvoiceID *string `json:"invoiceId,omitempty"` - // PreviousInvoiceID - READ-ONLY; Reference to an original invoice there is a refund (negative cost). This is populated only when there is a refund. - PreviousInvoiceID *string `json:"previousInvoiceId,omitempty"` - // PricingCurrencyCode - READ-ONLY; Pricing Billing Currency. - PricingCurrencyCode *string `json:"pricingCurrencyCode,omitempty"` - // ProductIdentifier - READ-ONLY; Identifier for the product that has accrued charges by consumption or purchase . This is the concatenated key of productId and SkuId in partner center. - ProductIdentifier *string `json:"productIdentifier,omitempty"` - // ResourceLocationNormalized - READ-ONLY; Resource Location Normalized. - ResourceLocationNormalized *string `json:"resourceLocationNormalized,omitempty"` - // ServicePeriodStartDate - READ-ONLY; Start date for the rating period when the service usage was rated for charges. The prices for Azure services are determined for the rating period. - ServicePeriodStartDate *date.Time `json:"servicePeriodStartDate,omitempty"` - // ServicePeriodEndDate - READ-ONLY; End date for the period when the service usage was rated for charges. The prices for Azure services are determined based on the rating period. - ServicePeriodEndDate *date.Time `json:"servicePeriodEndDate,omitempty"` - // CustomerTenantID - READ-ONLY; Identifier of the customer's AAD tenant. - CustomerTenantID *string `json:"customerTenantId,omitempty"` - // CustomerName - READ-ONLY; Name of the customer's AAD tenant. - CustomerName *string `json:"customerName,omitempty"` - // PartnerTenantID - READ-ONLY; Identifier for the partner's AAD tenant. - PartnerTenantID *string `json:"partnerTenantId,omitempty"` - // PartnerName - READ-ONLY; Name of the partner' AAD tenant. - PartnerName *string `json:"partnerName,omitempty"` - // ResellerMpnID - READ-ONLY; MPNId for the reseller associated with the subscription. - ResellerMpnID *string `json:"resellerMpnId,omitempty"` - // ResellerName - READ-ONLY; Reseller Name. - ResellerName *string `json:"resellerName,omitempty"` - // PublisherID - READ-ONLY; Publisher Id. - PublisherID *string `json:"publisherId,omitempty"` - // MarketPrice - READ-ONLY; Market Price that's charged for the usage. - MarketPrice *decimal.Decimal `json:"marketPrice,omitempty"` - // ExchangeRatePricingToBilling - READ-ONLY; Exchange Rate from pricing currency to billing currency. - ExchangeRatePricingToBilling *decimal.Decimal `json:"exchangeRatePricingToBilling,omitempty"` - // PaygCostInBillingCurrency - READ-ONLY; The amount of PayG cost before tax in billing currency. - PaygCostInBillingCurrency *decimal.Decimal `json:"paygCostInBillingCurrency,omitempty"` - // PaygCostInUSD - READ-ONLY; The amount of PayG cost before tax in US Dollar currency. - PaygCostInUSD *decimal.Decimal `json:"paygCostInUSD,omitempty"` - // PartnerEarnedCreditRate - READ-ONLY; Rate of discount applied if there is a partner earned credit (PEC) based on partner admin link access. - PartnerEarnedCreditRate *decimal.Decimal `json:"partnerEarnedCreditRate,omitempty"` - // PartnerEarnedCreditApplied - READ-ONLY; Flag to indicate if partner earned credit has been applied or not. - PartnerEarnedCreditApplied *string `json:"partnerEarnedCreditApplied,omitempty"` - // PayGPrice - READ-ONLY; Retail price for the resource. - PayGPrice *decimal.Decimal `json:"payGPrice,omitempty"` -} - -// MarshalJSON is the custom marshaler for ModernUsageDetailProperties. -func (mudp ModernUsageDetailProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// Notification the notification associated with a budget. -type Notification struct { - // Enabled - The notification is enabled or not. - Enabled *bool `json:"enabled,omitempty"` - // Operator - The comparison operator. Possible values include: 'OperatorTypeEqualTo', 'OperatorTypeGreaterThan', 'OperatorTypeGreaterThanOrEqualTo' - Operator OperatorType `json:"operator,omitempty"` - // Threshold - Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0 and 1000. - Threshold *decimal.Decimal `json:"threshold,omitempty"` - // ContactEmails - Email addresses to send the budget notification to when the threshold is exceeded. Must have at least one contact email or contact group specified at the Subscription or Resource Group scopes. All other scopes must have at least one contact email specified. - ContactEmails *[]string `json:"contactEmails,omitempty"` - // ContactRoles - Contact roles to send the budget notification to when the threshold is exceeded. - ContactRoles *[]string `json:"contactRoles,omitempty"` - // ContactGroups - Action groups to send the budget notification to when the threshold is exceeded. Must be provided as a fully qualified Azure resource id. Only supported at Subscription or Resource Group scopes. - ContactGroups *[]string `json:"contactGroups,omitempty"` - // ThresholdType - The type of threshold. Possible values include: 'ThresholdTypeActual' - ThresholdType ThresholdType `json:"thresholdType,omitempty"` - // Locale - Language in which the recipient will receive the notification. Possible values include: 'CultureCodeEnUs', 'CultureCodeJaJp', 'CultureCodeZhCn', 'CultureCodeDeDe', 'CultureCodeEsEs', 'CultureCodeFrFr', 'CultureCodeItIt', 'CultureCodeKoKr', 'CultureCodePtBr', 'CultureCodeRuRu', 'CultureCodeZhTw', 'CultureCodeCsCz', 'CultureCodePlPl', 'CultureCodeTrTr', 'CultureCodeDaDk', 'CultureCodeEnGb', 'CultureCodeHuHu', 'CultureCodeNbNo', 'CultureCodeNlNl', 'CultureCodePtPt', 'CultureCodeSvSe' - Locale CultureCode `json:"locale,omitempty"` -} - -// Operation a Consumption REST API operation. -type Operation struct { - // ID - READ-ONLY; Operation Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Operation name: {provider}/{resource}/{operation}. - Name *string `json:"name,omitempty"` - // Display - The object that represents the operation. - Display *OperationDisplay `json:"display,omitempty"` -} - -// MarshalJSON is the custom marshaler for Operation. -func (o Operation) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if o.Display != nil { - objectMap["display"] = o.Display - } - return json.Marshal(objectMap) -} - -// OperationDisplay the object that represents the operation. -type OperationDisplay struct { - // Provider - READ-ONLY; Service provider: Microsoft.Consumption. - Provider *string `json:"provider,omitempty"` - // Resource - READ-ONLY; Resource on which the operation is performed: UsageDetail, etc. - Resource *string `json:"resource,omitempty"` - // Operation - READ-ONLY; Operation type: Read, write, delete, etc. - Operation *string `json:"operation,omitempty"` - // Description - READ-ONLY; Description of the operation. - Description *string `json:"description,omitempty"` -} - -// MarshalJSON is the custom marshaler for OperationDisplay. -func (o OperationDisplay) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// OperationListResult result of listing consumption operations. It contains a list of operations and a URL -// link to get the next set of results. -type OperationListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; List of consumption operations supported by the Microsoft.Consumption resource provider. - Value *[]Operation `json:"value,omitempty"` - // NextLink - READ-ONLY; URL to get the next set of operation list results if there are any. - NextLink *string `json:"nextLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for OperationListResult. -func (olr OperationListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// OperationListResultIterator provides access to a complete listing of Operation values. -type OperationListResultIterator struct { - i int - page OperationListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *OperationListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter OperationListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter OperationListResultIterator) Response() OperationListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter OperationListResultIterator) Value() Operation { - if !iter.page.NotDone() { - return Operation{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the OperationListResultIterator type. -func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator { - return OperationListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (olr OperationListResult) IsEmpty() bool { - return olr.Value == nil || len(*olr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (olr OperationListResult) hasNextLink() bool { - return olr.NextLink != nil && len(*olr.NextLink) != 0 -} - -// operationListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) { - if !olr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(olr.NextLink))) -} - -// OperationListResultPage contains a page of Operation values. -type OperationListResultPage struct { - fn func(context.Context, OperationListResult) (OperationListResult, error) - olr OperationListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.olr) - if err != nil { - return err - } - page.olr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *OperationListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page OperationListResultPage) NotDone() bool { - return !page.olr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page OperationListResultPage) Response() OperationListResult { - return page.olr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page OperationListResultPage) Values() []Operation { - if page.olr.IsEmpty() { - return nil - } - return *page.olr.Value -} - -// Creates a new instance of the OperationListResultPage type. -func NewOperationListResultPage(cur OperationListResult, getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage { - return OperationListResultPage{ - fn: getNextPage, - olr: cur, - } -} - -// PriceSheetModel price sheet result. It contains the pricesheet associated with billing period -type PriceSheetModel struct { - // Pricesheets - READ-ONLY; Price sheet - Pricesheets *[]PriceSheetProperties `json:"pricesheets,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` - // Download - READ-ONLY; Pricesheet download details. - Download *MeterDetails `json:"download,omitempty"` -} - -// MarshalJSON is the custom marshaler for PriceSheetModel. -func (psm PriceSheetModel) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// PriceSheetProperties the properties of the price sheet. -type PriceSheetProperties struct { - // BillingPeriodID - READ-ONLY; The id of the billing period resource that the usage belongs to. - BillingPeriodID *string `json:"billingPeriodId,omitempty"` - // MeterID - READ-ONLY; The meter id (GUID) - MeterID *uuid.UUID `json:"meterId,omitempty"` - // MeterDetails - READ-ONLY; The details about the meter. By default this is not populated, unless it's specified in $expand. - MeterDetails *MeterDetails `json:"meterDetails,omitempty"` - // UnitOfMeasure - READ-ONLY; Unit of measure - UnitOfMeasure *string `json:"unitOfMeasure,omitempty"` - // IncludedQuantity - READ-ONLY; Included quality for an offer - IncludedQuantity *decimal.Decimal `json:"includedQuantity,omitempty"` - // PartNumber - READ-ONLY; Part Number - PartNumber *string `json:"partNumber,omitempty"` - // UnitPrice - READ-ONLY; Unit Price - UnitPrice *decimal.Decimal `json:"unitPrice,omitempty"` - // CurrencyCode - READ-ONLY; Currency Code - CurrencyCode *string `json:"currencyCode,omitempty"` - // OfferID - READ-ONLY; Offer Id - OfferID *string `json:"offerId,omitempty"` -} - -// MarshalJSON is the custom marshaler for PriceSheetProperties. -func (psp PriceSheetProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// PriceSheetResult an pricesheet resource. -type PriceSheetResult struct { - autorest.Response `json:"-"` - *PriceSheetModel `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for PriceSheetResult. -func (psr PriceSheetResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if psr.PriceSheetModel != nil { - objectMap["properties"] = psr.PriceSheetModel - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for PriceSheetResult struct. -func (psr *PriceSheetResult) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var priceSheetModel PriceSheetModel - err = json.Unmarshal(*v, &priceSheetModel) - if err != nil { - return err - } - psr.PriceSheetModel = &priceSheetModel - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - psr.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - psr.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - psr.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - psr.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - psr.Tags = tags - } - } - } - - return nil -} - -// ProxyResource the Resource model definition. -type ProxyResource struct { - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // ETag - eTag of the resource. To handle concurrent update scenario, this field will be used to determine whether the user is updating the latest version or not. - ETag *string `json:"eTag,omitempty"` -} - -// MarshalJSON is the custom marshaler for ProxyResource. -func (pr ProxyResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if pr.ETag != nil { - objectMap["eTag"] = pr.ETag - } - return json.Marshal(objectMap) -} - -// Reseller reseller details -type Reseller struct { - // ResellerID - READ-ONLY; Reseller id. - ResellerID *string `json:"resellerId,omitempty"` - // ResellerDescription - READ-ONLY; Reseller Description. - ResellerDescription *string `json:"resellerDescription,omitempty"` -} - -// MarshalJSON is the custom marshaler for Reseller. -func (r Reseller) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ReservationDetail reservation detail resource. -type ReservationDetail struct { - *ReservationDetailProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for ReservationDetail. -func (rd ReservationDetail) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rd.ReservationDetailProperties != nil { - objectMap["properties"] = rd.ReservationDetailProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for ReservationDetail struct. -func (rd *ReservationDetail) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var reservationDetailProperties ReservationDetailProperties - err = json.Unmarshal(*v, &reservationDetailProperties) - if err != nil { - return err - } - rd.ReservationDetailProperties = &reservationDetailProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - rd.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - rd.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - rd.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - rd.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - rd.Tags = tags - } - } - } - - return nil -} - -// ReservationDetailProperties the properties of the reservation detail. -type ReservationDetailProperties struct { - // ReservationOrderID - READ-ONLY; The reservation order ID is the identifier for a reservation purchase. Each reservation order ID represents a single purchase transaction. A reservation order contains reservations. The reservation order specifies the VM size and region for the reservations. - ReservationOrderID *string `json:"reservationOrderId,omitempty"` - // InstanceFlexibilityRatio - READ-ONLY; The instance Flexibility Ratio. - InstanceFlexibilityRatio *string `json:"instanceFlexibilityRatio,omitempty"` - // InstanceFlexibilityGroup - READ-ONLY; The instance Flexibility Group. - InstanceFlexibilityGroup *string `json:"instanceFlexibilityGroup,omitempty"` - // ReservationID - READ-ONLY; The reservation ID is the identifier of a reservation within a reservation order. Each reservation is the grouping for applying the benefit scope and also specifies the number of instances to which the reservation benefit can be applied to. - ReservationID *string `json:"reservationId,omitempty"` - // SkuName - READ-ONLY; This is the ARM Sku name. It can be used to join with the serviceType field in additional info in usage records. - SkuName *string `json:"skuName,omitempty"` - // ReservedHours - READ-ONLY; This is the total hours reserved for the day. E.g. if reservation for 1 instance was made on 1 PM, this will be 11 hours for that day and 24 hours from subsequent days. - ReservedHours *decimal.Decimal `json:"reservedHours,omitempty"` - // UsageDate - READ-ONLY; The date on which consumption occurred. - UsageDate *date.Time `json:"usageDate,omitempty"` - // UsedHours - READ-ONLY; This is the total hours used by the instance. - UsedHours *decimal.Decimal `json:"usedHours,omitempty"` - // InstanceID - READ-ONLY; This identifier is the name of the resource or the fully qualified Resource ID. - InstanceID *string `json:"instanceId,omitempty"` - // TotalReservedQuantity - READ-ONLY; This is the total count of instances that are reserved for the reservationId. - TotalReservedQuantity *decimal.Decimal `json:"totalReservedQuantity,omitempty"` - // Kind - READ-ONLY; The reservation kind. - Kind *string `json:"kind,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationDetailProperties. -func (rdp ReservationDetailProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ReservationDetailsListResult result of listing reservation details. -type ReservationDetailsListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of reservation details. - Value *[]ReservationDetail `json:"value,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationDetailsListResult. -func (rdlr ReservationDetailsListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ReservationDetailsListResultIterator provides access to a complete listing of ReservationDetail values. -type ReservationDetailsListResultIterator struct { - i int - page ReservationDetailsListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *ReservationDetailsListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationDetailsListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *ReservationDetailsListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ReservationDetailsListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter ReservationDetailsListResultIterator) Response() ReservationDetailsListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter ReservationDetailsListResultIterator) Value() ReservationDetail { - if !iter.page.NotDone() { - return ReservationDetail{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the ReservationDetailsListResultIterator type. -func NewReservationDetailsListResultIterator(page ReservationDetailsListResultPage) ReservationDetailsListResultIterator { - return ReservationDetailsListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (rdlr ReservationDetailsListResult) IsEmpty() bool { - return rdlr.Value == nil || len(*rdlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (rdlr ReservationDetailsListResult) hasNextLink() bool { - return rdlr.NextLink != nil && len(*rdlr.NextLink) != 0 -} - -// reservationDetailsListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (rdlr ReservationDetailsListResult) reservationDetailsListResultPreparer(ctx context.Context) (*http.Request, error) { - if !rdlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(rdlr.NextLink))) -} - -// ReservationDetailsListResultPage contains a page of ReservationDetail values. -type ReservationDetailsListResultPage struct { - fn func(context.Context, ReservationDetailsListResult) (ReservationDetailsListResult, error) - rdlr ReservationDetailsListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *ReservationDetailsListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationDetailsListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.rdlr) - if err != nil { - return err - } - page.rdlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *ReservationDetailsListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ReservationDetailsListResultPage) NotDone() bool { - return !page.rdlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page ReservationDetailsListResultPage) Response() ReservationDetailsListResult { - return page.rdlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page ReservationDetailsListResultPage) Values() []ReservationDetail { - if page.rdlr.IsEmpty() { - return nil - } - return *page.rdlr.Value -} - -// Creates a new instance of the ReservationDetailsListResultPage type. -func NewReservationDetailsListResultPage(cur ReservationDetailsListResult, getNextPage func(context.Context, ReservationDetailsListResult) (ReservationDetailsListResult, error)) ReservationDetailsListResultPage { - return ReservationDetailsListResultPage{ - fn: getNextPage, - rdlr: cur, - } -} - -// BasicReservationRecommendation a reservation recommendation resource. -type BasicReservationRecommendation interface { - AsLegacyReservationRecommendation() (*LegacyReservationRecommendation, bool) - AsModernReservationRecommendation() (*ModernReservationRecommendation, bool) - AsReservationRecommendation() (*ReservationRecommendation, bool) -} - -// ReservationRecommendation a reservation recommendation resource. -type ReservationRecommendation struct { - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` - // Sku - READ-ONLY; Resource sku - Sku *string `json:"sku,omitempty"` - // Kind - Possible values include: 'KindBasicReservationRecommendationKindReservationRecommendation', 'KindBasicReservationRecommendationKindLegacy', 'KindBasicReservationRecommendationKindModern' - Kind KindBasicReservationRecommendation `json:"kind,omitempty"` -} - -func unmarshalBasicReservationRecommendation(body []byte) (BasicReservationRecommendation, error) { - var m map[string]interface{} - err := json.Unmarshal(body, &m) - if err != nil { - return nil, err - } - - switch m["kind"] { - case string(KindBasicReservationRecommendationKindLegacy): - var lrr LegacyReservationRecommendation - err := json.Unmarshal(body, &lrr) - return lrr, err - case string(KindBasicReservationRecommendationKindModern): - var mrr ModernReservationRecommendation - err := json.Unmarshal(body, &mrr) - return mrr, err - default: - var rr ReservationRecommendation - err := json.Unmarshal(body, &rr) - return rr, err - } -} -func unmarshalBasicReservationRecommendationArray(body []byte) ([]BasicReservationRecommendation, error) { - var rawMessages []*json.RawMessage - err := json.Unmarshal(body, &rawMessages) - if err != nil { - return nil, err - } - - rrArray := make([]BasicReservationRecommendation, len(rawMessages)) - - for index, rawMessage := range rawMessages { - rr, err := unmarshalBasicReservationRecommendation(*rawMessage) - if err != nil { - return nil, err - } - rrArray[index] = rr - } - return rrArray, nil -} - -// MarshalJSON is the custom marshaler for ReservationRecommendation. -func (rr ReservationRecommendation) MarshalJSON() ([]byte, error) { - rr.Kind = KindBasicReservationRecommendationKindReservationRecommendation - objectMap := make(map[string]interface{}) - if rr.Kind != "" { - objectMap["kind"] = rr.Kind - } - return json.Marshal(objectMap) -} - -// AsLegacyReservationRecommendation is the BasicReservationRecommendation implementation for ReservationRecommendation. -func (rr ReservationRecommendation) AsLegacyReservationRecommendation() (*LegacyReservationRecommendation, bool) { - return nil, false -} - -// AsModernReservationRecommendation is the BasicReservationRecommendation implementation for ReservationRecommendation. -func (rr ReservationRecommendation) AsModernReservationRecommendation() (*ModernReservationRecommendation, bool) { - return nil, false -} - -// AsReservationRecommendation is the BasicReservationRecommendation implementation for ReservationRecommendation. -func (rr ReservationRecommendation) AsReservationRecommendation() (*ReservationRecommendation, bool) { - return &rr, true -} - -// AsBasicReservationRecommendation is the BasicReservationRecommendation implementation for ReservationRecommendation. -func (rr ReservationRecommendation) AsBasicReservationRecommendation() (BasicReservationRecommendation, bool) { - return &rr, true -} - -// ReservationRecommendationDetailsCalculatedSavingsProperties details of estimated savings. -type ReservationRecommendationDetailsCalculatedSavingsProperties struct { - // OnDemandCost - READ-ONLY; The cost without reservation. - OnDemandCost *float64 `json:"onDemandCost,omitempty"` - // OverageCost - READ-ONLY; The difference between total reservation cost and reservation cost. - OverageCost *float64 `json:"overageCost,omitempty"` - // Quantity - READ-ONLY; The quantity for calculated savings. - Quantity *float64 `json:"quantity,omitempty"` - // ReservationCost - READ-ONLY; The exact cost of the estimated usage using reservation. - ReservationCost *float64 `json:"reservationCost,omitempty"` - // TotalReservationCost - READ-ONLY; The cost of the suggested quantity. - TotalReservationCost *float64 `json:"totalReservationCost,omitempty"` - // ReservedUnitCount - The number of reserved units used to calculate savings. Always 1 for virtual machines. - ReservedUnitCount *float64 `json:"reservedUnitCount,omitempty"` - // Savings - READ-ONLY; The amount saved by purchasing the recommended quantity of reservation. - Savings *float64 `json:"savings,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationRecommendationDetailsCalculatedSavingsProperties. -func (rrdcsp ReservationRecommendationDetailsCalculatedSavingsProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rrdcsp.ReservedUnitCount != nil { - objectMap["reservedUnitCount"] = rrdcsp.ReservedUnitCount - } - return json.Marshal(objectMap) -} - -// ReservationRecommendationDetailsModel reservation recommendation details. -type ReservationRecommendationDetailsModel struct { - autorest.Response `json:"-"` - // Location - Resource Location. - Location *string `json:"location,omitempty"` - // Sku - Resource sku - Sku *string `json:"sku,omitempty"` - // ETag - Resource eTag. - ETag *string `json:"eTag,omitempty"` - *ReservationRecommendationDetailsProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for ReservationRecommendationDetailsModel. -func (rrdm ReservationRecommendationDetailsModel) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rrdm.Location != nil { - objectMap["location"] = rrdm.Location - } - if rrdm.Sku != nil { - objectMap["sku"] = rrdm.Sku - } - if rrdm.ETag != nil { - objectMap["eTag"] = rrdm.ETag - } - if rrdm.ReservationRecommendationDetailsProperties != nil { - objectMap["properties"] = rrdm.ReservationRecommendationDetailsProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for ReservationRecommendationDetailsModel struct. -func (rrdm *ReservationRecommendationDetailsModel) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "location": - if v != nil { - var location string - err = json.Unmarshal(*v, &location) - if err != nil { - return err - } - rrdm.Location = &location - } - case "sku": - if v != nil { - var sku string - err = json.Unmarshal(*v, &sku) - if err != nil { - return err - } - rrdm.Sku = &sku - } - case "eTag": - if v != nil { - var eTag string - err = json.Unmarshal(*v, &eTag) - if err != nil { - return err - } - rrdm.ETag = &eTag - } - case "properties": - if v != nil { - var reservationRecommendationDetailsProperties ReservationRecommendationDetailsProperties - err = json.Unmarshal(*v, &reservationRecommendationDetailsProperties) - if err != nil { - return err - } - rrdm.ReservationRecommendationDetailsProperties = &reservationRecommendationDetailsProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - rrdm.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - rrdm.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - rrdm.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - rrdm.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - rrdm.Tags = tags - } - } - } - - return nil -} - -// ReservationRecommendationDetailsProperties the properties of the reservation recommendation. -type ReservationRecommendationDetailsProperties struct { - // Currency - READ-ONLY; An ISO 4217 currency code identifier for the costs and savings - Currency *string `json:"currency,omitempty"` - // Resource - READ-ONLY; Resource specific properties. - Resource *ReservationRecommendationDetailsResourceProperties `json:"resource,omitempty"` - // ResourceGroup - READ-ONLY; Resource Group. - ResourceGroup *string `json:"resourceGroup,omitempty"` - // Savings - READ-ONLY; Savings information for the recommendation. - Savings *ReservationRecommendationDetailsSavingsProperties `json:"savings,omitempty"` - // Scope - READ-ONLY; Scope of the reservation, ex: Single or Shared. - Scope *string `json:"scope,omitempty"` - // Usage - READ-ONLY; Historical usage details used to calculate the estimated savings. - Usage *ReservationRecommendationDetailsUsageProperties `json:"usage,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationRecommendationDetailsProperties. -func (rrdp ReservationRecommendationDetailsProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ReservationRecommendationDetailsResourceProperties details of the resource. -type ReservationRecommendationDetailsResourceProperties struct { - // AppliedScopes - READ-ONLY; List of subscriptions for which the reservation is applied. - AppliedScopes *[]string `json:"appliedScopes,omitempty"` - // OnDemandRate - READ-ONLY; On demand rate of the resource. - OnDemandRate *float64 `json:"onDemandRate,omitempty"` - // Product - READ-ONLY; Azure product ex: Standard_E8s_v3 etc. - Product *string `json:"product,omitempty"` - // Region - READ-ONLY; Azure resource region ex:EastUS, WestUS etc. - Region *string `json:"region,omitempty"` - // ReservationRate - READ-ONLY; Reservation rate of the resource. - ReservationRate *float64 `json:"reservationRate,omitempty"` - // ResourceType - READ-ONLY; The azure resource type. - ResourceType *string `json:"resourceType,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationRecommendationDetailsResourceProperties. -func (rrdrp ReservationRecommendationDetailsResourceProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ReservationRecommendationDetailsSavingsProperties details of the estimated savings. -type ReservationRecommendationDetailsSavingsProperties struct { - // CalculatedSavings - List of calculated savings. - CalculatedSavings *[]ReservationRecommendationDetailsCalculatedSavingsProperties `json:"calculatedSavings,omitempty"` - // LookBackPeriod - READ-ONLY; Number of days of usage to look back used for computing the recommendation. - LookBackPeriod *int32 `json:"lookBackPeriod,omitempty"` - // RecommendedQuantity - READ-ONLY; Number of recommended units of the resource. - RecommendedQuantity *float64 `json:"recommendedQuantity,omitempty"` - // ReservationOrderTerm - READ-ONLY; Term period of the reservation, ex: P1Y or P3Y. - ReservationOrderTerm *string `json:"reservationOrderTerm,omitempty"` - // SavingsType - READ-ONLY; Type of savings, ex: instance. - SavingsType *string `json:"savingsType,omitempty"` - // UnitOfMeasure - READ-ONLY; Measurement unit ex: hour etc. - UnitOfMeasure *string `json:"unitOfMeasure,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationRecommendationDetailsSavingsProperties. -func (rrdsp ReservationRecommendationDetailsSavingsProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rrdsp.CalculatedSavings != nil { - objectMap["calculatedSavings"] = rrdsp.CalculatedSavings - } - return json.Marshal(objectMap) -} - -// ReservationRecommendationDetailsUsageProperties details about historical usage data that has been used -// for computing the recommendation. -type ReservationRecommendationDetailsUsageProperties struct { - // FirstConsumptionDate - READ-ONLY; The first usage date used for looking back for computing the recommendation. - FirstConsumptionDate *string `json:"firstConsumptionDate,omitempty"` - // LastConsumptionDate - READ-ONLY; The last usage date used for looking back for computing the recommendation. - LastConsumptionDate *string `json:"lastConsumptionDate,omitempty"` - // LookBackUnitType - READ-ONLY; What the usage data values represent ex: virtual machine instance. - LookBackUnitType *string `json:"lookBackUnitType,omitempty"` - // UsageData - READ-ONLY; The breakdown of historical resource usage. The values are in the order of usage between the firstConsumptionDate and the lastConsumptionDate. - UsageData *[]float64 `json:"usageData,omitempty"` - // UsageGrain - READ-ONLY; The grain of the values represented in the usage data ex: hourly. - UsageGrain *string `json:"usageGrain,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationRecommendationDetailsUsageProperties. -func (rrdup ReservationRecommendationDetailsUsageProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ReservationRecommendationsListResult result of listing reservation recommendations. -type ReservationRecommendationsListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of reservation recommendations. - Value *[]BasicReservationRecommendation `json:"value,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` - // PreviousLink - READ-ONLY; The link (url) to the previous page of results. - PreviousLink *string `json:"previousLink,omitempty"` - // TotalCost - READ-ONLY; The total amount of cost. - TotalCost *string `json:"totalCost,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationRecommendationsListResult. -func (rrlr ReservationRecommendationsListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for ReservationRecommendationsListResult struct. -func (rrlr *ReservationRecommendationsListResult) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "value": - if v != nil { - value, err := unmarshalBasicReservationRecommendationArray(*v) - if err != nil { - return err - } - rrlr.Value = &value - } - case "nextLink": - if v != nil { - var nextLink string - err = json.Unmarshal(*v, &nextLink) - if err != nil { - return err - } - rrlr.NextLink = &nextLink - } - case "previousLink": - if v != nil { - var previousLink string - err = json.Unmarshal(*v, &previousLink) - if err != nil { - return err - } - rrlr.PreviousLink = &previousLink - } - case "totalCost": - if v != nil { - var totalCost string - err = json.Unmarshal(*v, &totalCost) - if err != nil { - return err - } - rrlr.TotalCost = &totalCost - } - } - } - - return nil -} - -// ReservationRecommendationsListResultIterator provides access to a complete listing of -// ReservationRecommendation values. -type ReservationRecommendationsListResultIterator struct { - i int - page ReservationRecommendationsListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *ReservationRecommendationsListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationRecommendationsListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *ReservationRecommendationsListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ReservationRecommendationsListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter ReservationRecommendationsListResultIterator) Response() ReservationRecommendationsListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter ReservationRecommendationsListResultIterator) Value() BasicReservationRecommendation { - if !iter.page.NotDone() { - return ReservationRecommendation{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the ReservationRecommendationsListResultIterator type. -func NewReservationRecommendationsListResultIterator(page ReservationRecommendationsListResultPage) ReservationRecommendationsListResultIterator { - return ReservationRecommendationsListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (rrlr ReservationRecommendationsListResult) IsEmpty() bool { - return rrlr.Value == nil || len(*rrlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (rrlr ReservationRecommendationsListResult) hasNextLink() bool { - return rrlr.NextLink != nil && len(*rrlr.NextLink) != 0 -} - -// reservationRecommendationsListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (rrlr ReservationRecommendationsListResult) reservationRecommendationsListResultPreparer(ctx context.Context) (*http.Request, error) { - if !rrlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(rrlr.NextLink))) -} - -// ReservationRecommendationsListResultPage contains a page of BasicReservationRecommendation values. -type ReservationRecommendationsListResultPage struct { - fn func(context.Context, ReservationRecommendationsListResult) (ReservationRecommendationsListResult, error) - rrlr ReservationRecommendationsListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *ReservationRecommendationsListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationRecommendationsListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.rrlr) - if err != nil { - return err - } - page.rrlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *ReservationRecommendationsListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ReservationRecommendationsListResultPage) NotDone() bool { - return !page.rrlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page ReservationRecommendationsListResultPage) Response() ReservationRecommendationsListResult { - return page.rrlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page ReservationRecommendationsListResultPage) Values() []BasicReservationRecommendation { - if page.rrlr.IsEmpty() { - return nil - } - return *page.rrlr.Value -} - -// Creates a new instance of the ReservationRecommendationsListResultPage type. -func NewReservationRecommendationsListResultPage(cur ReservationRecommendationsListResult, getNextPage func(context.Context, ReservationRecommendationsListResult) (ReservationRecommendationsListResult, error)) ReservationRecommendationsListResultPage { - return ReservationRecommendationsListResultPage{ - fn: getNextPage, - rrlr: cur, - } -} - -// ReservationSummariesListResult result of listing reservation summaries. -type ReservationSummariesListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of reservation summaries. - Value *[]ReservationSummary `json:"value,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationSummariesListResult. -func (rslr ReservationSummariesListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ReservationSummariesListResultIterator provides access to a complete listing of ReservationSummary -// values. -type ReservationSummariesListResultIterator struct { - i int - page ReservationSummariesListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *ReservationSummariesListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationSummariesListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *ReservationSummariesListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ReservationSummariesListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter ReservationSummariesListResultIterator) Response() ReservationSummariesListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter ReservationSummariesListResultIterator) Value() ReservationSummary { - if !iter.page.NotDone() { - return ReservationSummary{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the ReservationSummariesListResultIterator type. -func NewReservationSummariesListResultIterator(page ReservationSummariesListResultPage) ReservationSummariesListResultIterator { - return ReservationSummariesListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (rslr ReservationSummariesListResult) IsEmpty() bool { - return rslr.Value == nil || len(*rslr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (rslr ReservationSummariesListResult) hasNextLink() bool { - return rslr.NextLink != nil && len(*rslr.NextLink) != 0 -} - -// reservationSummariesListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (rslr ReservationSummariesListResult) reservationSummariesListResultPreparer(ctx context.Context) (*http.Request, error) { - if !rslr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(rslr.NextLink))) -} - -// ReservationSummariesListResultPage contains a page of ReservationSummary values. -type ReservationSummariesListResultPage struct { - fn func(context.Context, ReservationSummariesListResult) (ReservationSummariesListResult, error) - rslr ReservationSummariesListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *ReservationSummariesListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationSummariesListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.rslr) - if err != nil { - return err - } - page.rslr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *ReservationSummariesListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ReservationSummariesListResultPage) NotDone() bool { - return !page.rslr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page ReservationSummariesListResultPage) Response() ReservationSummariesListResult { - return page.rslr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page ReservationSummariesListResultPage) Values() []ReservationSummary { - if page.rslr.IsEmpty() { - return nil - } - return *page.rslr.Value -} - -// Creates a new instance of the ReservationSummariesListResultPage type. -func NewReservationSummariesListResultPage(cur ReservationSummariesListResult, getNextPage func(context.Context, ReservationSummariesListResult) (ReservationSummariesListResult, error)) ReservationSummariesListResultPage { - return ReservationSummariesListResultPage{ - fn: getNextPage, - rslr: cur, - } -} - -// ReservationSummary reservation summary resource. -type ReservationSummary struct { - *ReservationSummaryProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for ReservationSummary. -func (rs ReservationSummary) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rs.ReservationSummaryProperties != nil { - objectMap["properties"] = rs.ReservationSummaryProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for ReservationSummary struct. -func (rs *ReservationSummary) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var reservationSummaryProperties ReservationSummaryProperties - err = json.Unmarshal(*v, &reservationSummaryProperties) - if err != nil { - return err - } - rs.ReservationSummaryProperties = &reservationSummaryProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - rs.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - rs.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - rs.Type = &typeVar - } - case "etag": - if v != nil { - var etag string - err = json.Unmarshal(*v, &etag) - if err != nil { - return err - } - rs.Etag = &etag - } - case "tags": - if v != nil { - var tags map[string]*string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - rs.Tags = tags - } - } - } - - return nil -} - -// ReservationSummaryProperties the properties of the reservation summary. -type ReservationSummaryProperties struct { - // ReservationOrderID - READ-ONLY; The reservation order ID is the identifier for a reservation purchase. Each reservation order ID represents a single purchase transaction. A reservation order contains reservations. The reservation order specifies the VM size and region for the reservations. - ReservationOrderID *string `json:"reservationOrderId,omitempty"` - // ReservationID - READ-ONLY; The reservation ID is the identifier of a reservation within a reservation order. Each reservation is the grouping for applying the benefit scope and also specifies the number of instances to which the reservation benefit can be applied to. - ReservationID *string `json:"reservationId,omitempty"` - // SkuName - READ-ONLY; This is the ARM Sku name. It can be used to join with the serviceType field in additional info in usage records. - SkuName *string `json:"skuName,omitempty"` - // ReservedHours - READ-ONLY; This is the total hours reserved. E.g. if reservation for 1 instance was made on 1 PM, this will be 11 hours for that day and 24 hours from subsequent days - ReservedHours *decimal.Decimal `json:"reservedHours,omitempty"` - // UsageDate - READ-ONLY; Data corresponding to the utilization record. If the grain of data is monthly, it will be first day of month. - UsageDate *date.Time `json:"usageDate,omitempty"` - // UsedHours - READ-ONLY; Total used hours by the reservation - UsedHours *decimal.Decimal `json:"usedHours,omitempty"` - // MinUtilizationPercentage - READ-ONLY; This is the minimum hourly utilization in the usage time (day or month). E.g. if usage record corresponds to 12/10/2017 and on that for hour 4 and 5, utilization was 10%, this field will return 10% for that day - MinUtilizationPercentage *decimal.Decimal `json:"minUtilizationPercentage,omitempty"` - // AvgUtilizationPercentage - READ-ONLY; This is average utilization for the entire time range. (day or month depending on the grain) - AvgUtilizationPercentage *decimal.Decimal `json:"avgUtilizationPercentage,omitempty"` - // MaxUtilizationPercentage - READ-ONLY; This is the maximum hourly utilization in the usage time (day or month). E.g. if usage record corresponds to 12/10/2017 and on that for hour 4 and 5, utilization was 100%, this field will return 100% for that day. - MaxUtilizationPercentage *decimal.Decimal `json:"maxUtilizationPercentage,omitempty"` - // Kind - READ-ONLY; The reservation kind. - Kind *string `json:"kind,omitempty"` - // PurchasedQuantity - READ-ONLY; This is the purchased quantity for the reservationId. - PurchasedQuantity *decimal.Decimal `json:"purchasedQuantity,omitempty"` - // RemainingQuantity - READ-ONLY; This is the remaining quantity for the reservationId. - RemainingQuantity *decimal.Decimal `json:"remainingQuantity,omitempty"` - // TotalReservedQuantity - READ-ONLY; This is the total count of instances that are reserved for the reservationId. - TotalReservedQuantity *decimal.Decimal `json:"totalReservedQuantity,omitempty"` - // UsedQuantity - READ-ONLY; This is the used quantity for the reservationId. - UsedQuantity *decimal.Decimal `json:"usedQuantity,omitempty"` - // UtilizedPercentage - READ-ONLY; This is the utilized percentage for the reservation Id. - UtilizedPercentage *decimal.Decimal `json:"utilizedPercentage,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationSummaryProperties. -func (rsp ReservationSummaryProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ReservationTransaction reservation transaction resource. -type ReservationTransaction struct { - *LegacyReservationTransactionProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags *[]string `json:"tags,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationTransaction. -func (rt ReservationTransaction) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if rt.LegacyReservationTransactionProperties != nil { - objectMap["properties"] = rt.LegacyReservationTransactionProperties - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for ReservationTransaction struct. -func (rt *ReservationTransaction) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var legacyReservationTransactionProperties LegacyReservationTransactionProperties - err = json.Unmarshal(*v, &legacyReservationTransactionProperties) - if err != nil { - return err - } - rt.LegacyReservationTransactionProperties = &legacyReservationTransactionProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - rt.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - rt.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - rt.Type = &typeVar - } - case "tags": - if v != nil { - var tags []string - err = json.Unmarshal(*v, &tags) - if err != nil { - return err - } - rt.Tags = &tags - } - } - } - - return nil -} - -// ReservationTransactionResource the Resource model definition. -type ReservationTransactionResource struct { - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags *[]string `json:"tags,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationTransactionResource. -func (rtr ReservationTransactionResource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ReservationTransactionsListResult result of listing reservation recommendations. -type ReservationTransactionsListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of reservation recommendations. - Value *[]ReservationTransaction `json:"value,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for ReservationTransactionsListResult. -func (rtlr ReservationTransactionsListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ReservationTransactionsListResultIterator provides access to a complete listing of -// ReservationTransaction values. -type ReservationTransactionsListResultIterator struct { - i int - page ReservationTransactionsListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *ReservationTransactionsListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationTransactionsListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *ReservationTransactionsListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter ReservationTransactionsListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter ReservationTransactionsListResultIterator) Response() ReservationTransactionsListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter ReservationTransactionsListResultIterator) Value() ReservationTransaction { - if !iter.page.NotDone() { - return ReservationTransaction{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the ReservationTransactionsListResultIterator type. -func NewReservationTransactionsListResultIterator(page ReservationTransactionsListResultPage) ReservationTransactionsListResultIterator { - return ReservationTransactionsListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (rtlr ReservationTransactionsListResult) IsEmpty() bool { - return rtlr.Value == nil || len(*rtlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (rtlr ReservationTransactionsListResult) hasNextLink() bool { - return rtlr.NextLink != nil && len(*rtlr.NextLink) != 0 -} - -// reservationTransactionsListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (rtlr ReservationTransactionsListResult) reservationTransactionsListResultPreparer(ctx context.Context) (*http.Request, error) { - if !rtlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(rtlr.NextLink))) -} - -// ReservationTransactionsListResultPage contains a page of ReservationTransaction values. -type ReservationTransactionsListResultPage struct { - fn func(context.Context, ReservationTransactionsListResult) (ReservationTransactionsListResult, error) - rtlr ReservationTransactionsListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *ReservationTransactionsListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationTransactionsListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.rtlr) - if err != nil { - return err - } - page.rtlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *ReservationTransactionsListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page ReservationTransactionsListResultPage) NotDone() bool { - return !page.rtlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page ReservationTransactionsListResultPage) Response() ReservationTransactionsListResult { - return page.rtlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page ReservationTransactionsListResultPage) Values() []ReservationTransaction { - if page.rtlr.IsEmpty() { - return nil - } - return *page.rtlr.Value -} - -// Creates a new instance of the ReservationTransactionsListResultPage type. -func NewReservationTransactionsListResultPage(cur ReservationTransactionsListResult, getNextPage func(context.Context, ReservationTransactionsListResult) (ReservationTransactionsListResult, error)) ReservationTransactionsListResultPage { - return ReservationTransactionsListResultPage{ - fn: getNextPage, - rtlr: cur, - } -} - -// Resource the Resource model definition. -type Resource struct { - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -// MarshalJSON is the custom marshaler for Resource. -func (r Resource) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// ResourceAttributes the Resource model definition. -type ResourceAttributes struct { - // Location - READ-ONLY; Resource location - Location *string `json:"location,omitempty"` - // Sku - READ-ONLY; Resource sku - Sku *string `json:"sku,omitempty"` -} - -// MarshalJSON is the custom marshaler for ResourceAttributes. -func (ra ResourceAttributes) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// SkuProperty the Sku property -type SkuProperty struct { - // Name - READ-ONLY; The name of sku property. - Name *string `json:"name,omitempty"` - // Value - READ-ONLY; The value of sku property. - Value *string `json:"value,omitempty"` -} - -// MarshalJSON is the custom marshaler for SkuProperty. -func (sp SkuProperty) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// Tag the tag resource. -type Tag struct { - // Key - Tag key. - Key *string `json:"key,omitempty"` - // Value - Tag values. - Value *[]string `json:"value,omitempty"` -} - -// TagProperties the properties of the tag. -type TagProperties struct { - // Tags - A list of Tag. - Tags *[]Tag `json:"tags,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` - // PreviousLink - READ-ONLY; The link (url) to the previous page of results. - PreviousLink *string `json:"previousLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for TagProperties. -func (tp TagProperties) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if tp.Tags != nil { - objectMap["tags"] = tp.Tags - } - return json.Marshal(objectMap) -} - -// TagsResult a resource listing all tags. -type TagsResult struct { - autorest.Response `json:"-"` - *TagProperties `json:"properties,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // ETag - eTag of the resource. To handle concurrent update scenario, this field will be used to determine whether the user is updating the latest version or not. - ETag *string `json:"eTag,omitempty"` -} - -// MarshalJSON is the custom marshaler for TagsResult. -func (tr TagsResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - if tr.TagProperties != nil { - objectMap["properties"] = tr.TagProperties - } - if tr.ETag != nil { - objectMap["eTag"] = tr.ETag - } - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for TagsResult struct. -func (tr *TagsResult) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "properties": - if v != nil { - var tagProperties TagProperties - err = json.Unmarshal(*v, &tagProperties) - if err != nil { - return err - } - tr.TagProperties = &tagProperties - } - case "id": - if v != nil { - var ID string - err = json.Unmarshal(*v, &ID) - if err != nil { - return err - } - tr.ID = &ID - } - case "name": - if v != nil { - var name string - err = json.Unmarshal(*v, &name) - if err != nil { - return err - } - tr.Name = &name - } - case "type": - if v != nil { - var typeVar string - err = json.Unmarshal(*v, &typeVar) - if err != nil { - return err - } - tr.Type = &typeVar - } - case "eTag": - if v != nil { - var eTag string - err = json.Unmarshal(*v, &eTag) - if err != nil { - return err - } - tr.ETag = &eTag - } - } - } - - return nil -} - -// BasicUsageDetail an usage detail resource. -type BasicUsageDetail interface { - AsLegacyUsageDetail() (*LegacyUsageDetail, bool) - AsModernUsageDetail() (*ModernUsageDetail, bool) - AsUsageDetail() (*UsageDetail, bool) -} - -// UsageDetail an usage detail resource. -type UsageDetail struct { - // Kind - Possible values include: 'KindUsageDetail', 'KindLegacy', 'KindModern' - Kind Kind `json:"kind,omitempty"` - // ID - READ-ONLY; Resource Id. - ID *string `json:"id,omitempty"` - // Name - READ-ONLY; Resource name. - Name *string `json:"name,omitempty"` - // Type - READ-ONLY; Resource type. - Type *string `json:"type,omitempty"` - // Etag - READ-ONLY; Resource etag. - Etag *string `json:"etag,omitempty"` - // Tags - READ-ONLY; Resource tags. - Tags map[string]*string `json:"tags"` -} - -func unmarshalBasicUsageDetail(body []byte) (BasicUsageDetail, error) { - var m map[string]interface{} - err := json.Unmarshal(body, &m) - if err != nil { - return nil, err - } - - switch m["kind"] { - case string(KindLegacy): - var lud LegacyUsageDetail - err := json.Unmarshal(body, &lud) - return lud, err - case string(KindModern): - var mud ModernUsageDetail - err := json.Unmarshal(body, &mud) - return mud, err - default: - var ud UsageDetail - err := json.Unmarshal(body, &ud) - return ud, err - } -} -func unmarshalBasicUsageDetailArray(body []byte) ([]BasicUsageDetail, error) { - var rawMessages []*json.RawMessage - err := json.Unmarshal(body, &rawMessages) - if err != nil { - return nil, err - } - - udArray := make([]BasicUsageDetail, len(rawMessages)) - - for index, rawMessage := range rawMessages { - ud, err := unmarshalBasicUsageDetail(*rawMessage) - if err != nil { - return nil, err - } - udArray[index] = ud - } - return udArray, nil -} - -// MarshalJSON is the custom marshaler for UsageDetail. -func (ud UsageDetail) MarshalJSON() ([]byte, error) { - ud.Kind = KindUsageDetail - objectMap := make(map[string]interface{}) - if ud.Kind != "" { - objectMap["kind"] = ud.Kind - } - return json.Marshal(objectMap) -} - -// AsLegacyUsageDetail is the BasicUsageDetail implementation for UsageDetail. -func (ud UsageDetail) AsLegacyUsageDetail() (*LegacyUsageDetail, bool) { - return nil, false -} - -// AsModernUsageDetail is the BasicUsageDetail implementation for UsageDetail. -func (ud UsageDetail) AsModernUsageDetail() (*ModernUsageDetail, bool) { - return nil, false -} - -// AsUsageDetail is the BasicUsageDetail implementation for UsageDetail. -func (ud UsageDetail) AsUsageDetail() (*UsageDetail, bool) { - return &ud, true -} - -// AsBasicUsageDetail is the BasicUsageDetail implementation for UsageDetail. -func (ud UsageDetail) AsBasicUsageDetail() (BasicUsageDetail, bool) { - return &ud, true -} - -// UsageDetailsListResult result of listing usage details. It contains a list of available usage details in -// reverse chronological order by billing period. -type UsageDetailsListResult struct { - autorest.Response `json:"-"` - // Value - READ-ONLY; The list of usage details. - Value *[]BasicUsageDetail `json:"value,omitempty"` - // NextLink - READ-ONLY; The link (url) to the next page of results. - NextLink *string `json:"nextLink,omitempty"` -} - -// MarshalJSON is the custom marshaler for UsageDetailsListResult. -func (udlr UsageDetailsListResult) MarshalJSON() ([]byte, error) { - objectMap := make(map[string]interface{}) - return json.Marshal(objectMap) -} - -// UnmarshalJSON is the custom unmarshaler for UsageDetailsListResult struct. -func (udlr *UsageDetailsListResult) UnmarshalJSON(body []byte) error { - var m map[string]*json.RawMessage - err := json.Unmarshal(body, &m) - if err != nil { - return err - } - for k, v := range m { - switch k { - case "value": - if v != nil { - value, err := unmarshalBasicUsageDetailArray(*v) - if err != nil { - return err - } - udlr.Value = &value - } - case "nextLink": - if v != nil { - var nextLink string - err = json.Unmarshal(*v, &nextLink) - if err != nil { - return err - } - udlr.NextLink = &nextLink - } - } - } - - return nil -} - -// UsageDetailsListResultIterator provides access to a complete listing of UsageDetail values. -type UsageDetailsListResultIterator struct { - i int - page UsageDetailsListResultPage -} - -// NextWithContext advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -func (iter *UsageDetailsListResultIterator) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/UsageDetailsListResultIterator.NextWithContext") - defer func() { - sc := -1 - if iter.Response().Response.Response != nil { - sc = iter.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - iter.i++ - if iter.i < len(iter.page.Values()) { - return nil - } - err = iter.page.NextWithContext(ctx) - if err != nil { - iter.i-- - return err - } - iter.i = 0 - return nil -} - -// Next advances to the next value. If there was an error making -// the request the iterator does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (iter *UsageDetailsListResultIterator) Next() error { - return iter.NextWithContext(context.Background()) -} - -// NotDone returns true if the enumeration should be started or is not yet complete. -func (iter UsageDetailsListResultIterator) NotDone() bool { - return iter.page.NotDone() && iter.i < len(iter.page.Values()) -} - -// Response returns the raw server response from the last page request. -func (iter UsageDetailsListResultIterator) Response() UsageDetailsListResult { - return iter.page.Response() -} - -// Value returns the current value or a zero-initialized value if the -// iterator has advanced beyond the end of the collection. -func (iter UsageDetailsListResultIterator) Value() BasicUsageDetail { - if !iter.page.NotDone() { - return UsageDetail{} - } - return iter.page.Values()[iter.i] -} - -// Creates a new instance of the UsageDetailsListResultIterator type. -func NewUsageDetailsListResultIterator(page UsageDetailsListResultPage) UsageDetailsListResultIterator { - return UsageDetailsListResultIterator{page: page} -} - -// IsEmpty returns true if the ListResult contains no values. -func (udlr UsageDetailsListResult) IsEmpty() bool { - return udlr.Value == nil || len(*udlr.Value) == 0 -} - -// hasNextLink returns true if the NextLink is not empty. -func (udlr UsageDetailsListResult) hasNextLink() bool { - return udlr.NextLink != nil && len(*udlr.NextLink) != 0 -} - -// usageDetailsListResultPreparer prepares a request to retrieve the next set of results. -// It returns nil if no more results exist. -func (udlr UsageDetailsListResult) usageDetailsListResultPreparer(ctx context.Context) (*http.Request, error) { - if !udlr.hasNextLink() { - return nil, nil - } - return autorest.Prepare((&http.Request{}).WithContext(ctx), - autorest.AsJSON(), - autorest.AsGet(), - autorest.WithBaseURL(to.String(udlr.NextLink))) -} - -// UsageDetailsListResultPage contains a page of BasicUsageDetail values. -type UsageDetailsListResultPage struct { - fn func(context.Context, UsageDetailsListResult) (UsageDetailsListResult, error) - udlr UsageDetailsListResult -} - -// NextWithContext advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -func (page *UsageDetailsListResultPage) NextWithContext(ctx context.Context) (err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/UsageDetailsListResultPage.NextWithContext") - defer func() { - sc := -1 - if page.Response().Response.Response != nil { - sc = page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - for { - next, err := page.fn(ctx, page.udlr) - if err != nil { - return err - } - page.udlr = next - if !next.hasNextLink() || !next.IsEmpty() { - break - } - } - return nil -} - -// Next advances to the next page of values. If there was an error making -// the request the page does not advance and the error is returned. -// Deprecated: Use NextWithContext() instead. -func (page *UsageDetailsListResultPage) Next() error { - return page.NextWithContext(context.Background()) -} - -// NotDone returns true if the page enumeration should be started or is not yet complete. -func (page UsageDetailsListResultPage) NotDone() bool { - return !page.udlr.IsEmpty() -} - -// Response returns the raw server response from the last page request. -func (page UsageDetailsListResultPage) Response() UsageDetailsListResult { - return page.udlr -} - -// Values returns the slice of values for the current page or nil if there are no values. -func (page UsageDetailsListResultPage) Values() []BasicUsageDetail { - if page.udlr.IsEmpty() { - return nil - } - return *page.udlr.Value -} - -// Creates a new instance of the UsageDetailsListResultPage type. -func NewUsageDetailsListResultPage(cur UsageDetailsListResult, getNextPage func(context.Context, UsageDetailsListResult) (UsageDetailsListResult, error)) UsageDetailsListResultPage { - return UsageDetailsListResultPage{ - fn: getNextPage, - udlr: cur, - } -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/operations.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/operations.go deleted file mode 100644 index edc859c889c4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/operations.go +++ /dev/null @@ -1,141 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// OperationsClient is the consumption management client provides access to consumption resources for Azure Enterprise -// Subscriptions. -type OperationsClient struct { - BaseClient -} - -// NewOperationsClient creates an instance of the OperationsClient client. -func NewOperationsClient(subscriptionID string) OperationsClient { - return NewOperationsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewOperationsClientWithBaseURI creates an instance of the OperationsClient client using a custom endpoint. Use this -// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewOperationsClientWithBaseURI(baseURI string, subscriptionID string) OperationsClient { - return OperationsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List lists all of the available consumption REST API operations. -func (client OperationsClient) List(ctx context.Context) (result OperationListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/OperationsClient.List") - defer func() { - sc := -1 - if result.olr.Response.Response != nil { - sc = result.olr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.OperationsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.olr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.OperationsClient", "List", resp, "Failure sending request") - return - } - - result.olr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.OperationsClient", "List", resp, "Failure responding to request") - return - } - if result.olr.hasNextLink() && result.olr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client OperationsClient) ListPreparer(ctx context.Context) (*http.Request, error) { - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPath("/providers/Microsoft.Consumption/operations"), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client OperationsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client OperationsClient) ListResponder(resp *http.Response) (result OperationListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client OperationsClient) listNextResults(ctx context.Context, lastResults OperationListResult) (result OperationListResult, err error) { - req, err := lastResults.operationListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.OperationsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.OperationsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.OperationsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client OperationsClient) ListComplete(ctx context.Context) (result OperationListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/OperationsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx) - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/pricesheet.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/pricesheet.go deleted file mode 100644 index 05503cada92b..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/pricesheet.go +++ /dev/null @@ -1,229 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// PriceSheetClient is the consumption management client provides access to consumption resources for Azure Enterprise -// Subscriptions. -type PriceSheetClient struct { - BaseClient -} - -// NewPriceSheetClient creates an instance of the PriceSheetClient client. -func NewPriceSheetClient(subscriptionID string) PriceSheetClient { - return NewPriceSheetClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewPriceSheetClientWithBaseURI creates an instance of the PriceSheetClient client using a custom endpoint. Use this -// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewPriceSheetClientWithBaseURI(baseURI string, subscriptionID string) PriceSheetClient { - return PriceSheetClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get gets the price sheet for a scope by subscriptionId. Price sheet is available via this API only for May 1, 2014 -// or later. -// Parameters: -// expand - may be used to expand the properties/meterDetails within a price sheet. By default, these fields -// are not included when returning price sheet. -// skiptoken - skiptoken is only used if a previous operation returned a partial result. If a previous response -// contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that -// specifies a starting point to use for subsequent calls. -// top - may be used to limit the number of results to the top N results. -func (client PriceSheetClient) Get(ctx context.Context, expand string, skiptoken string, top *int32) (result PriceSheetResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/PriceSheetClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: top, - Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(1000), Chain: nil}, - {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, - }}}}}); err != nil { - return result, validation.NewError("consumption.PriceSheetClient", "Get", err.Error()) - } - - req, err := client.GetPreparer(ctx, expand, skiptoken, top) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client PriceSheetClient) GetPreparer(ctx context.Context, expand string, skiptoken string, top *int32) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - if len(skiptoken) > 0 { - queryParameters["$skiptoken"] = autorest.Encode("query", skiptoken) - } - if top != nil { - queryParameters["$top"] = autorest.Encode("query", *top) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/pricesheets/default", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client PriceSheetClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client PriceSheetClient) GetResponder(resp *http.Response) (result PriceSheetResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetByBillingPeriod get the price sheet for a scope by subscriptionId and billing period. Price sheet is available -// via this API only for May 1, 2014 or later. -// Parameters: -// billingPeriodName - billing Period Name. -// expand - may be used to expand the properties/meterDetails within a price sheet. By default, these fields -// are not included when returning price sheet. -// skiptoken - skiptoken is only used if a previous operation returned a partial result. If a previous response -// contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that -// specifies a starting point to use for subsequent calls. -// top - may be used to limit the number of results to the top N results. -func (client PriceSheetClient) GetByBillingPeriod(ctx context.Context, billingPeriodName string, expand string, skiptoken string, top *int32) (result PriceSheetResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/PriceSheetClient.GetByBillingPeriod") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: top, - Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(1000), Chain: nil}, - {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, - }}}}}); err != nil { - return result, validation.NewError("consumption.PriceSheetClient", "GetByBillingPeriod", err.Error()) - } - - req, err := client.GetByBillingPeriodPreparer(ctx, billingPeriodName, expand, skiptoken, top) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "GetByBillingPeriod", nil, "Failure preparing request") - return - } - - resp, err := client.GetByBillingPeriodSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "GetByBillingPeriod", resp, "Failure sending request") - return - } - - result, err = client.GetByBillingPeriodResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "GetByBillingPeriod", resp, "Failure responding to request") - return - } - - return -} - -// GetByBillingPeriodPreparer prepares the GetByBillingPeriod request. -func (client PriceSheetClient) GetByBillingPeriodPreparer(ctx context.Context, billingPeriodName string, expand string, skiptoken string, top *int32) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "billingPeriodName": autorest.Encode("path", billingPeriodName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - if len(skiptoken) > 0 { - queryParameters["$skiptoken"] = autorest.Encode("query", skiptoken) - } - if top != nil { - queryParameters["$top"] = autorest.Encode("query", *top) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}/providers/Microsoft.Consumption/pricesheets/default", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetByBillingPeriodSender sends the GetByBillingPeriod request. The method will close the -// http.Response Body if it receives an error. -func (client PriceSheetClient) GetByBillingPeriodSender(req *http.Request) (*http.Response, error) { - return client.Send(req, azure.DoRetryWithRegistration(client.Client)) -} - -// GetByBillingPeriodResponder handles the response to the GetByBillingPeriod request. The method always -// closes the http.Response Body. -func (client PriceSheetClient) GetByBillingPeriodResponder(resp *http.Response) (result PriceSheetResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationrecommendationdetails.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationrecommendationdetails.go deleted file mode 100644 index f9ff41e7914e..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationrecommendationdetails.go +++ /dev/null @@ -1,122 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// ReservationRecommendationDetailsClient is the consumption management client provides access to consumption resources -// for Azure Enterprise Subscriptions. -type ReservationRecommendationDetailsClient struct { - BaseClient -} - -// NewReservationRecommendationDetailsClient creates an instance of the ReservationRecommendationDetailsClient client. -func NewReservationRecommendationDetailsClient(subscriptionID string) ReservationRecommendationDetailsClient { - return NewReservationRecommendationDetailsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewReservationRecommendationDetailsClientWithBaseURI creates an instance of the -// ReservationRecommendationDetailsClient client using a custom endpoint. Use this when interacting with an Azure -// cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewReservationRecommendationDetailsClientWithBaseURI(baseURI string, subscriptionID string) ReservationRecommendationDetailsClient { - return ReservationRecommendationDetailsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get details of a reservation recommendation for what-if analysis of reserved instances. -// Parameters: -// billingScope - the scope associated with reservation recommendation details operations. This includes -// '/subscriptions/{subscriptionId}/' for subscription scope, -// '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resource group scope, -// /providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for BillingAccount scope, and -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for -// billingProfile scope -// scope - scope of the reservation. -// region - used to select the region the recommendation should be generated for. -// term - specify length of reservation recommendation term. -// lookBackPeriod - filter the time period on which reservation recommendation results are based. -// product - filter the products for which reservation recommendation results are generated. Examples: -// Standard_DS1_v2 (for VM), Premium_SSD_Managed_Disks_P30 (for Managed Disks) -func (client ReservationRecommendationDetailsClient) Get(ctx context.Context, billingScope string, scope Scope14, region string, term Term, lookBackPeriod LookBackPeriod, product string) (result ReservationRecommendationDetailsModel, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationRecommendationDetailsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, billingScope, scope, region, term, lookBackPeriod, product) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationRecommendationDetailsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ReservationRecommendationDetailsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationRecommendationDetailsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client ReservationRecommendationDetailsClient) GetPreparer(ctx context.Context, billingScope string, scope Scope14, region string, term Term, lookBackPeriod LookBackPeriod, product string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "billingScope": billingScope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - "lookBackPeriod": autorest.Encode("query", lookBackPeriod), - "product": autorest.Encode("query", product), - "region": autorest.Encode("query", region), - "scope": autorest.Encode("query", scope), - "term": autorest.Encode("query", term), - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{billingScope}/providers/Microsoft.Consumption/reservationRecommendationDetails", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client ReservationRecommendationDetailsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client ReservationRecommendationDetailsClient) GetResponder(resp *http.Response) (result ReservationRecommendationDetailsModel, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationrecommendations.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationrecommendations.go deleted file mode 100644 index 46173fbc9a49..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationrecommendations.go +++ /dev/null @@ -1,162 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// ReservationRecommendationsClient is the consumption management client provides access to consumption resources for -// Azure Enterprise Subscriptions. -type ReservationRecommendationsClient struct { - BaseClient -} - -// NewReservationRecommendationsClient creates an instance of the ReservationRecommendationsClient client. -func NewReservationRecommendationsClient(subscriptionID string) ReservationRecommendationsClient { - return NewReservationRecommendationsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewReservationRecommendationsClientWithBaseURI creates an instance of the ReservationRecommendationsClient client -// using a custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign -// clouds, Azure stack). -func NewReservationRecommendationsClientWithBaseURI(baseURI string, subscriptionID string) ReservationRecommendationsClient { - return ReservationRecommendationsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List list of recommendations for purchasing reserved instances. -// Parameters: -// scope - the scope associated with reservation recommendations operations. This includes -// '/subscriptions/{subscriptionId}/' for subscription scope, -// '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resource group scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for BillingAccount scope, and -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for -// billingProfile scope -// filter - may be used to filter reservationRecommendations by: properties/scope with allowed values -// ['Single', 'Shared'] and default value 'Single'; properties/resourceType with allowed values -// ['VirtualMachines', 'SQLDatabases', 'PostgreSQL', 'ManagedDisk', 'MySQL', 'RedHat', 'MariaDB', 'RedisCache', -// 'CosmosDB', 'SqlDataWarehouse', 'SUSELinux', 'AppService', 'BlockBlob', 'AzureDataExplorer', -// 'VMwareCloudSimple'] and default value 'VirtualMachines'; and properties/lookBackPeriod with allowed values -// ['Last7Days', 'Last30Days', 'Last60Days'] and default value 'Last7Days'. -func (client ReservationRecommendationsClient) List(ctx context.Context, scope string, filter string) (result ReservationRecommendationsListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationRecommendationsClient.List") - defer func() { - sc := -1 - if result.rrlr.Response.Response != nil { - sc = result.rrlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, scope, filter) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.rrlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "List", resp, "Failure sending request") - return - } - - result.rrlr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "List", resp, "Failure responding to request") - return - } - if result.rrlr.hasNextLink() && result.rrlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client ReservationRecommendationsClient) ListPreparer(ctx context.Context, scope string, filter string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/reservationRecommendations", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client ReservationRecommendationsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client ReservationRecommendationsClient) ListResponder(resp *http.Response) (result ReservationRecommendationsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client ReservationRecommendationsClient) listNextResults(ctx context.Context, lastResults ReservationRecommendationsListResult) (result ReservationRecommendationsListResult, err error) { - req, err := lastResults.reservationRecommendationsListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client ReservationRecommendationsClient) ListComplete(ctx context.Context, scope string, filter string) (result ReservationRecommendationsListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationRecommendationsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, scope, filter) - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationsdetails.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationsdetails.go deleted file mode 100644 index 73a88bb6e418..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationsdetails.go +++ /dev/null @@ -1,412 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// ReservationsDetailsClient is the consumption management client provides access to consumption resources for Azure -// Enterprise Subscriptions. -type ReservationsDetailsClient struct { - BaseClient -} - -// NewReservationsDetailsClient creates an instance of the ReservationsDetailsClient client. -func NewReservationsDetailsClient(subscriptionID string) ReservationsDetailsClient { - return NewReservationsDetailsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewReservationsDetailsClientWithBaseURI creates an instance of the ReservationsDetailsClient client using a custom -// endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure -// stack). -func NewReservationsDetailsClientWithBaseURI(baseURI string, subscriptionID string) ReservationsDetailsClient { - return ReservationsDetailsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List lists the reservations details for the defined scope and provided date range. -// Parameters: -// scope - the scope associated with reservations details operations. This includes -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for BillingAccount scope (legacy), and -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for -// BillingProfile scope (modern). -// startDate - start date. Only applicable when querying with billing profile -// endDate - end date. Only applicable when querying with billing profile -// filter - filter reservation details by date range. The properties/UsageDate for start date and end date. The -// filter supports 'le' and 'ge'. Not applicable when querying with billing profile -// reservationID - reservation Id GUID. Only valid if reservationOrderId is also provided. Filter to a specific -// reservation -// reservationOrderID - reservation Order Id GUID. Required if reservationId is provided. Filter to a specific -// reservation order -func (client ReservationsDetailsClient) List(ctx context.Context, scope string, startDate string, endDate string, filter string, reservationID string, reservationOrderID string) (result ReservationDetailsListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.List") - defer func() { - sc := -1 - if result.rdlr.Response.Response != nil { - sc = result.rdlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, scope, startDate, endDate, filter, reservationID, reservationOrderID) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.rdlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "List", resp, "Failure sending request") - return - } - - result.rdlr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "List", resp, "Failure responding to request") - return - } - if result.rdlr.hasNextLink() && result.rdlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client ReservationsDetailsClient) ListPreparer(ctx context.Context, scope string, startDate string, endDate string, filter string, reservationID string, reservationOrderID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(startDate) > 0 { - queryParameters["startDate"] = autorest.Encode("query", startDate) - } - if len(endDate) > 0 { - queryParameters["endDate"] = autorest.Encode("query", endDate) - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - if len(reservationID) > 0 { - queryParameters["reservationId"] = autorest.Encode("query", reservationID) - } - if len(reservationOrderID) > 0 { - queryParameters["reservationOrderId"] = autorest.Encode("query", reservationOrderID) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/reservationDetails", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client ReservationsDetailsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client ReservationsDetailsClient) ListResponder(resp *http.Response) (result ReservationDetailsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client ReservationsDetailsClient) listNextResults(ctx context.Context, lastResults ReservationDetailsListResult) (result ReservationDetailsListResult, err error) { - req, err := lastResults.reservationDetailsListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client ReservationsDetailsClient) ListComplete(ctx context.Context, scope string, startDate string, endDate string, filter string, reservationID string, reservationOrderID string) (result ReservationDetailsListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, scope, startDate, endDate, filter, reservationID, reservationOrderID) - return -} - -// ListByReservationOrder lists the reservations details for provided date range. -// Parameters: -// reservationOrderID - order Id of the reservation -// filter - filter reservation details by date range. The properties/UsageDate for start date and end date. The -// filter supports 'le' and 'ge' -func (client ReservationsDetailsClient) ListByReservationOrder(ctx context.Context, reservationOrderID string, filter string) (result ReservationDetailsListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrder") - defer func() { - sc := -1 - if result.rdlr.Response.Response != nil { - sc = result.rdlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByReservationOrderNextResults - req, err := client.ListByReservationOrderPreparer(ctx, reservationOrderID, filter) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrder", nil, "Failure preparing request") - return - } - - resp, err := client.ListByReservationOrderSender(req) - if err != nil { - result.rdlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrder", resp, "Failure sending request") - return - } - - result.rdlr, err = client.ListByReservationOrderResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrder", resp, "Failure responding to request") - return - } - if result.rdlr.hasNextLink() && result.rdlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByReservationOrderPreparer prepares the ListByReservationOrder request. -func (client ReservationsDetailsClient) ListByReservationOrderPreparer(ctx context.Context, reservationOrderID string, filter string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "reservationOrderId": autorest.Encode("path", reservationOrderID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "$filter": autorest.Encode("query", filter), - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/providers/Microsoft.Consumption/reservationDetails", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByReservationOrderSender sends the ListByReservationOrder request. The method will close the -// http.Response Body if it receives an error. -func (client ReservationsDetailsClient) ListByReservationOrderSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListByReservationOrderResponder handles the response to the ListByReservationOrder request. The method always -// closes the http.Response Body. -func (client ReservationsDetailsClient) ListByReservationOrderResponder(resp *http.Response) (result ReservationDetailsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByReservationOrderNextResults retrieves the next set of results, if any. -func (client ReservationsDetailsClient) listByReservationOrderNextResults(ctx context.Context, lastResults ReservationDetailsListResult) (result ReservationDetailsListResult, err error) { - req, err := lastResults.reservationDetailsListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByReservationOrderSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByReservationOrderResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByReservationOrderComplete enumerates all values, automatically crossing page boundaries as required. -func (client ReservationsDetailsClient) ListByReservationOrderComplete(ctx context.Context, reservationOrderID string, filter string) (result ReservationDetailsListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrder") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByReservationOrder(ctx, reservationOrderID, filter) - return -} - -// ListByReservationOrderAndReservation lists the reservations details for provided date range. -// Parameters: -// reservationOrderID - order Id of the reservation -// reservationID - id of the reservation -// filter - filter reservation details by date range. The properties/UsageDate for start date and end date. The -// filter supports 'le' and 'ge' -func (client ReservationsDetailsClient) ListByReservationOrderAndReservation(ctx context.Context, reservationOrderID string, reservationID string, filter string) (result ReservationDetailsListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrderAndReservation") - defer func() { - sc := -1 - if result.rdlr.Response.Response != nil { - sc = result.rdlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByReservationOrderAndReservationNextResults - req, err := client.ListByReservationOrderAndReservationPreparer(ctx, reservationOrderID, reservationID, filter) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrderAndReservation", nil, "Failure preparing request") - return - } - - resp, err := client.ListByReservationOrderAndReservationSender(req) - if err != nil { - result.rdlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrderAndReservation", resp, "Failure sending request") - return - } - - result.rdlr, err = client.ListByReservationOrderAndReservationResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrderAndReservation", resp, "Failure responding to request") - return - } - if result.rdlr.hasNextLink() && result.rdlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByReservationOrderAndReservationPreparer prepares the ListByReservationOrderAndReservation request. -func (client ReservationsDetailsClient) ListByReservationOrderAndReservationPreparer(ctx context.Context, reservationOrderID string, reservationID string, filter string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "reservationId": autorest.Encode("path", reservationID), - "reservationOrderId": autorest.Encode("path", reservationOrderID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "$filter": autorest.Encode("query", filter), - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/reservations/{reservationId}/providers/Microsoft.Consumption/reservationDetails", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByReservationOrderAndReservationSender sends the ListByReservationOrderAndReservation request. The method will close the -// http.Response Body if it receives an error. -func (client ReservationsDetailsClient) ListByReservationOrderAndReservationSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListByReservationOrderAndReservationResponder handles the response to the ListByReservationOrderAndReservation request. The method always -// closes the http.Response Body. -func (client ReservationsDetailsClient) ListByReservationOrderAndReservationResponder(resp *http.Response) (result ReservationDetailsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByReservationOrderAndReservationNextResults retrieves the next set of results, if any. -func (client ReservationsDetailsClient) listByReservationOrderAndReservationNextResults(ctx context.Context, lastResults ReservationDetailsListResult) (result ReservationDetailsListResult, err error) { - req, err := lastResults.reservationDetailsListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderAndReservationNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByReservationOrderAndReservationSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderAndReservationNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByReservationOrderAndReservationResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderAndReservationNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByReservationOrderAndReservationComplete enumerates all values, automatically crossing page boundaries as required. -func (client ReservationsDetailsClient) ListByReservationOrderAndReservationComplete(ctx context.Context, reservationOrderID string, reservationID string, filter string) (result ReservationDetailsListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrderAndReservation") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByReservationOrderAndReservation(ctx, reservationOrderID, reservationID, filter) - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationssummaries.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationssummaries.go deleted file mode 100644 index b0a5f4f65972..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationssummaries.go +++ /dev/null @@ -1,422 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// ReservationsSummariesClient is the consumption management client provides access to consumption resources for Azure -// Enterprise Subscriptions. -type ReservationsSummariesClient struct { - BaseClient -} - -// NewReservationsSummariesClient creates an instance of the ReservationsSummariesClient client. -func NewReservationsSummariesClient(subscriptionID string) ReservationsSummariesClient { - return NewReservationsSummariesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewReservationsSummariesClientWithBaseURI creates an instance of the ReservationsSummariesClient client using a -// custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, -// Azure stack). -func NewReservationsSummariesClientWithBaseURI(baseURI string, subscriptionID string) ReservationsSummariesClient { - return ReservationsSummariesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List lists the reservations summaries for the defined scope daily or monthly grain. -// Parameters: -// scope - the scope associated with reservations summaries operations. This includes -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for BillingAccount scope (legacy), and -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for -// BillingProfile scope (modern). -// grain - can be daily or monthly -// startDate - start date. Required only when querying with billing profile -// endDate - end date. Required only when querying with billing profile -// filter - the properties/UsageDate for start date and end date. The filter supports 'le' and 'ge'. Not -// required when querying with billing profile -// reservationID - reservation Id GUID. Only valid if reservationOrderId is also provided. Filter to a specific -// reservation -// reservationOrderID - reservation Order Id GUID. Required if reservationId is provided. Filter to a specific -// reservation order -func (client ReservationsSummariesClient) List(ctx context.Context, scope string, grain Datagrain, startDate string, endDate string, filter string, reservationID string, reservationOrderID string) (result ReservationSummariesListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.List") - defer func() { - sc := -1 - if result.rslr.Response.Response != nil { - sc = result.rslr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, scope, grain, startDate, endDate, filter, reservationID, reservationOrderID) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.rslr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "List", resp, "Failure sending request") - return - } - - result.rslr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "List", resp, "Failure responding to request") - return - } - if result.rslr.hasNextLink() && result.rslr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client ReservationsSummariesClient) ListPreparer(ctx context.Context, scope string, grain Datagrain, startDate string, endDate string, filter string, reservationID string, reservationOrderID string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - "grain": autorest.Encode("query", grain), - } - if len(startDate) > 0 { - queryParameters["startDate"] = autorest.Encode("query", startDate) - } - if len(endDate) > 0 { - queryParameters["endDate"] = autorest.Encode("query", endDate) - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - if len(reservationID) > 0 { - queryParameters["reservationId"] = autorest.Encode("query", reservationID) - } - if len(reservationOrderID) > 0 { - queryParameters["reservationOrderId"] = autorest.Encode("query", reservationOrderID) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/reservationSummaries", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client ReservationsSummariesClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client ReservationsSummariesClient) ListResponder(resp *http.Response) (result ReservationSummariesListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client ReservationsSummariesClient) listNextResults(ctx context.Context, lastResults ReservationSummariesListResult) (result ReservationSummariesListResult, err error) { - req, err := lastResults.reservationSummariesListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client ReservationsSummariesClient) ListComplete(ctx context.Context, scope string, grain Datagrain, startDate string, endDate string, filter string, reservationID string, reservationOrderID string) (result ReservationSummariesListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, scope, grain, startDate, endDate, filter, reservationID, reservationOrderID) - return -} - -// ListByReservationOrder lists the reservations summaries for daily or monthly grain. -// Parameters: -// reservationOrderID - order Id of the reservation -// grain - can be daily or monthly -// filter - required only for daily grain. The properties/UsageDate for start date and end date. The filter -// supports 'le' and 'ge' -func (client ReservationsSummariesClient) ListByReservationOrder(ctx context.Context, reservationOrderID string, grain Datagrain, filter string) (result ReservationSummariesListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrder") - defer func() { - sc := -1 - if result.rslr.Response.Response != nil { - sc = result.rslr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByReservationOrderNextResults - req, err := client.ListByReservationOrderPreparer(ctx, reservationOrderID, grain, filter) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrder", nil, "Failure preparing request") - return - } - - resp, err := client.ListByReservationOrderSender(req) - if err != nil { - result.rslr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrder", resp, "Failure sending request") - return - } - - result.rslr, err = client.ListByReservationOrderResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrder", resp, "Failure responding to request") - return - } - if result.rslr.hasNextLink() && result.rslr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByReservationOrderPreparer prepares the ListByReservationOrder request. -func (client ReservationsSummariesClient) ListByReservationOrderPreparer(ctx context.Context, reservationOrderID string, grain Datagrain, filter string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "reservationOrderId": autorest.Encode("path", reservationOrderID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - "grain": autorest.Encode("query", grain), - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/providers/Microsoft.Consumption/reservationSummaries", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByReservationOrderSender sends the ListByReservationOrder request. The method will close the -// http.Response Body if it receives an error. -func (client ReservationsSummariesClient) ListByReservationOrderSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListByReservationOrderResponder handles the response to the ListByReservationOrder request. The method always -// closes the http.Response Body. -func (client ReservationsSummariesClient) ListByReservationOrderResponder(resp *http.Response) (result ReservationSummariesListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByReservationOrderNextResults retrieves the next set of results, if any. -func (client ReservationsSummariesClient) listByReservationOrderNextResults(ctx context.Context, lastResults ReservationSummariesListResult) (result ReservationSummariesListResult, err error) { - req, err := lastResults.reservationSummariesListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByReservationOrderSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByReservationOrderResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByReservationOrderComplete enumerates all values, automatically crossing page boundaries as required. -func (client ReservationsSummariesClient) ListByReservationOrderComplete(ctx context.Context, reservationOrderID string, grain Datagrain, filter string) (result ReservationSummariesListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrder") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByReservationOrder(ctx, reservationOrderID, grain, filter) - return -} - -// ListByReservationOrderAndReservation lists the reservations summaries for daily or monthly grain. -// Parameters: -// reservationOrderID - order Id of the reservation -// reservationID - id of the reservation -// grain - can be daily or monthly -// filter - required only for daily grain. The properties/UsageDate for start date and end date. The filter -// supports 'le' and 'ge' -func (client ReservationsSummariesClient) ListByReservationOrderAndReservation(ctx context.Context, reservationOrderID string, reservationID string, grain Datagrain, filter string) (result ReservationSummariesListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrderAndReservation") - defer func() { - sc := -1 - if result.rslr.Response.Response != nil { - sc = result.rslr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByReservationOrderAndReservationNextResults - req, err := client.ListByReservationOrderAndReservationPreparer(ctx, reservationOrderID, reservationID, grain, filter) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrderAndReservation", nil, "Failure preparing request") - return - } - - resp, err := client.ListByReservationOrderAndReservationSender(req) - if err != nil { - result.rslr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrderAndReservation", resp, "Failure sending request") - return - } - - result.rslr, err = client.ListByReservationOrderAndReservationResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrderAndReservation", resp, "Failure responding to request") - return - } - if result.rslr.hasNextLink() && result.rslr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByReservationOrderAndReservationPreparer prepares the ListByReservationOrderAndReservation request. -func (client ReservationsSummariesClient) ListByReservationOrderAndReservationPreparer(ctx context.Context, reservationOrderID string, reservationID string, grain Datagrain, filter string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "reservationId": autorest.Encode("path", reservationID), - "reservationOrderId": autorest.Encode("path", reservationOrderID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - "grain": autorest.Encode("query", grain), - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/reservations/{reservationId}/providers/Microsoft.Consumption/reservationSummaries", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByReservationOrderAndReservationSender sends the ListByReservationOrderAndReservation request. The method will close the -// http.Response Body if it receives an error. -func (client ReservationsSummariesClient) ListByReservationOrderAndReservationSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListByReservationOrderAndReservationResponder handles the response to the ListByReservationOrderAndReservation request. The method always -// closes the http.Response Body. -func (client ReservationsSummariesClient) ListByReservationOrderAndReservationResponder(resp *http.Response) (result ReservationSummariesListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByReservationOrderAndReservationNextResults retrieves the next set of results, if any. -func (client ReservationsSummariesClient) listByReservationOrderAndReservationNextResults(ctx context.Context, lastResults ReservationSummariesListResult) (result ReservationSummariesListResult, err error) { - req, err := lastResults.reservationSummariesListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderAndReservationNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByReservationOrderAndReservationSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderAndReservationNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByReservationOrderAndReservationResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderAndReservationNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByReservationOrderAndReservationComplete enumerates all values, automatically crossing page boundaries as required. -func (client ReservationsSummariesClient) ListByReservationOrderAndReservationComplete(ctx context.Context, reservationOrderID string, reservationID string, grain Datagrain, filter string) (result ReservationSummariesListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrderAndReservation") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByReservationOrderAndReservation(ctx, reservationOrderID, reservationID, grain, filter) - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationtransactions.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationtransactions.go deleted file mode 100644 index e781954a65d5..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/reservationtransactions.go +++ /dev/null @@ -1,275 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// ReservationTransactionsClient is the consumption management client provides access to consumption resources for -// Azure Enterprise Subscriptions. -type ReservationTransactionsClient struct { - BaseClient -} - -// NewReservationTransactionsClient creates an instance of the ReservationTransactionsClient client. -func NewReservationTransactionsClient(subscriptionID string) ReservationTransactionsClient { - return NewReservationTransactionsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewReservationTransactionsClientWithBaseURI creates an instance of the ReservationTransactionsClient client using a -// custom endpoint. Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, -// Azure stack). -func NewReservationTransactionsClientWithBaseURI(baseURI string, subscriptionID string) ReservationTransactionsClient { - return ReservationTransactionsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List list of transactions for reserved instances on billing account scope -// Parameters: -// billingAccountID - billingAccount ID -// filter - filter reservation transactions by date range. The properties/EventDate for start date and end -// date. The filter supports 'le' and 'ge' -func (client ReservationTransactionsClient) List(ctx context.Context, billingAccountID string, filter string) (result ReservationTransactionsListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationTransactionsClient.List") - defer func() { - sc := -1 - if result.rtlr.Response.Response != nil { - sc = result.rtlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, billingAccountID, filter) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.rtlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "List", resp, "Failure sending request") - return - } - - result.rtlr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "List", resp, "Failure responding to request") - return - } - if result.rtlr.hasNextLink() && result.rtlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client ReservationTransactionsClient) ListPreparer(ctx context.Context, billingAccountID string, filter string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "billingAccountId": autorest.Encode("path", billingAccountID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/providers/Microsoft.Consumption/reservationTransactions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client ReservationTransactionsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client ReservationTransactionsClient) ListResponder(resp *http.Response) (result ReservationTransactionsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client ReservationTransactionsClient) listNextResults(ctx context.Context, lastResults ReservationTransactionsListResult) (result ReservationTransactionsListResult, err error) { - req, err := lastResults.reservationTransactionsListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client ReservationTransactionsClient) ListComplete(ctx context.Context, billingAccountID string, filter string) (result ReservationTransactionsListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationTransactionsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, billingAccountID, filter) - return -} - -// ListByBillingProfile list of transactions for reserved instances on billing account scope -// Parameters: -// billingAccountID - billingAccount ID -// billingProfileID - azure Billing Profile ID. -// filter - filter reservation transactions by date range. The properties/EventDate for start date and end -// date. The filter supports 'le' and 'ge' -func (client ReservationTransactionsClient) ListByBillingProfile(ctx context.Context, billingAccountID string, billingProfileID string, filter string) (result ModernReservationTransactionsListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationTransactionsClient.ListByBillingProfile") - defer func() { - sc := -1 - if result.mrtlr.Response.Response != nil { - sc = result.mrtlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.fn = client.listByBillingProfileNextResults - req, err := client.ListByBillingProfilePreparer(ctx, billingAccountID, billingProfileID, filter) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "ListByBillingProfile", nil, "Failure preparing request") - return - } - - resp, err := client.ListByBillingProfileSender(req) - if err != nil { - result.mrtlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "ListByBillingProfile", resp, "Failure sending request") - return - } - - result.mrtlr, err = client.ListByBillingProfileResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "ListByBillingProfile", resp, "Failure responding to request") - return - } - if result.mrtlr.hasNextLink() && result.mrtlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListByBillingProfilePreparer prepares the ListByBillingProfile request. -func (client ReservationTransactionsClient) ListByBillingProfilePreparer(ctx context.Context, billingAccountID string, billingProfileID string, filter string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "billingAccountId": autorest.Encode("path", billingAccountID), - "billingProfileId": autorest.Encode("path", billingProfileID), - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}/providers/Microsoft.Consumption/reservationTransactions", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListByBillingProfileSender sends the ListByBillingProfile request. The method will close the -// http.Response Body if it receives an error. -func (client ReservationTransactionsClient) ListByBillingProfileSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListByBillingProfileResponder handles the response to the ListByBillingProfile request. The method always -// closes the http.Response Body. -func (client ReservationTransactionsClient) ListByBillingProfileResponder(resp *http.Response) (result ModernReservationTransactionsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listByBillingProfileNextResults retrieves the next set of results, if any. -func (client ReservationTransactionsClient) listByBillingProfileNextResults(ctx context.Context, lastResults ModernReservationTransactionsListResult) (result ModernReservationTransactionsListResult, err error) { - req, err := lastResults.modernReservationTransactionsListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "listByBillingProfileNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListByBillingProfileSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "listByBillingProfileNextResults", resp, "Failure sending next results request") - } - result, err = client.ListByBillingProfileResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.ReservationTransactionsClient", "listByBillingProfileNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListByBillingProfileComplete enumerates all values, automatically crossing page boundaries as required. -func (client ReservationTransactionsClient) ListByBillingProfileComplete(ctx context.Context, billingAccountID string, billingProfileID string, filter string) (result ModernReservationTransactionsListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/ReservationTransactionsClient.ListByBillingProfile") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.ListByBillingProfile(ctx, billingAccountID, billingProfileID, filter) - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/tags.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/tags.go deleted file mode 100644 index d55821750c5b..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/tags.go +++ /dev/null @@ -1,112 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// TagsClient is the consumption management client provides access to consumption resources for Azure Enterprise -// Subscriptions. -type TagsClient struct { - BaseClient -} - -// NewTagsClient creates an instance of the TagsClient client. -func NewTagsClient(subscriptionID string) TagsClient { - return NewTagsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewTagsClientWithBaseURI creates an instance of the TagsClient client using a custom endpoint. Use this when -// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewTagsClientWithBaseURI(baseURI string, subscriptionID string) TagsClient { - return TagsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// Get get all available tag keys for the defined scope -// Parameters: -// scope - the scope associated with tags operations. This includes '/subscriptions/{subscriptionId}/' for -// subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resourceGroup -// scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department -// scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' -// for EnrollmentAccount scope and '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for -// Management Group scope.. -func (client TagsClient) Get(ctx context.Context, scope string) (result TagsResult, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/TagsClient.Get") - defer func() { - sc := -1 - if result.Response.Response != nil { - sc = result.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - req, err := client.GetPreparer(ctx, scope) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.TagsClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.TagsClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.TagsClient", "Get", resp, "Failure responding to request") - return - } - - return -} - -// GetPreparer prepares the Get request. -func (client TagsClient) GetPreparer(ctx context.Context, scope string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/tags", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client TagsClient) GetSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client TagsClient) GetResponder(resp *http.Response) (result TagsResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/usagedetails.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/usagedetails.go deleted file mode 100644 index 0d4180d68e5e..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/usagedetails.go +++ /dev/null @@ -1,202 +0,0 @@ -package consumption - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/validation" - "github.com/Azure/go-autorest/tracing" - "net/http" -) - -// UsageDetailsClient is the consumption management client provides access to consumption resources for Azure -// Enterprise Subscriptions. -type UsageDetailsClient struct { - BaseClient -} - -// NewUsageDetailsClient creates an instance of the UsageDetailsClient client. -func NewUsageDetailsClient(subscriptionID string) UsageDetailsClient { - return NewUsageDetailsClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewUsageDetailsClientWithBaseURI creates an instance of the UsageDetailsClient client using a custom endpoint. Use -// this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). -func NewUsageDetailsClientWithBaseURI(baseURI string, subscriptionID string) UsageDetailsClient { - return UsageDetailsClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// List lists the usage details for the defined scope. Usage details are available via this API only for May 1, 2014 or -// later. For more information on using this API, including how to specify a date range, please see: -// https://docs.microsoft.com/en-us/azure/cost-management-billing/costs/manage-automation -// Parameters: -// scope - the scope associated with usage details operations. This includes '/subscriptions/{subscriptionId}/' -// for subscription scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing -// Account scope, '/providers/Microsoft.Billing/departments/{departmentId}' for Department scope, -// '/providers/Microsoft.Billing/enrollmentAccounts/{enrollmentAccountId}' for EnrollmentAccount scope and -// '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for Management Group scope. For -// subscription, billing account, department, enrollment account and management group, you can also add billing -// period to the scope using '/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}'. For e.g. to -// specify billing period at department scope use -// '/providers/Microsoft.Billing/departments/{departmentId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}'. -// Also, Modern Commerce Account scopes are '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' -// for billingAccount scope, -// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for -// billingProfile scope, -// 'providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}/invoiceSections/{invoiceSectionId}' -// for invoiceSection scope, and -// 'providers/Microsoft.Billing/billingAccounts/{billingAccountId}/customers/{customerId}' specific for -// partners. -// expand - may be used to expand the properties/additionalInfo or properties/meterDetails within a list of -// usage details. By default, these fields are not included when listing usage details. -// filter - may be used to filter usageDetails by properties/resourceGroup, properties/instanceName, -// properties/resourceId, properties/chargeType, properties/reservationId, properties/publisherType or tags. -// The filter supports 'eq', 'lt', 'gt', 'le', 'ge', and 'and'. It does not currently support 'ne', 'or', or -// 'not'. Tag filter is a key value pair string where key and value is separated by a colon (:). PublisherType -// Filter accepts two values azure and marketplace and it is currently supported for Web Direct Offer Type -// skiptoken - skiptoken is only used if a previous operation returned a partial result. If a previous response -// contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that -// specifies a starting point to use for subsequent calls. -// top - may be used to limit the number of results to the most recent N usageDetails. -// metric - allows to select different type of cost/usage records. -func (client UsageDetailsClient) List(ctx context.Context, scope string, expand string, filter string, skiptoken string, top *int32, metric Metrictype) (result UsageDetailsListResultPage, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/UsageDetailsClient.List") - defer func() { - sc := -1 - if result.udlr.Response.Response != nil { - sc = result.udlr.Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - if err := validation.Validate([]validation.Validation{ - {TargetValue: top, - Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, - Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(1000), Chain: nil}, - {Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}, - }}}}}); err != nil { - return result, validation.NewError("consumption.UsageDetailsClient", "List", err.Error()) - } - - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, scope, expand, filter, skiptoken, top, metric) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.udlr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "List", resp, "Failure sending request") - return - } - - result.udlr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "List", resp, "Failure responding to request") - return - } - if result.udlr.hasNextLink() && result.udlr.IsEmpty() { - err = result.NextWithContext(ctx) - return - } - - return -} - -// ListPreparer prepares the List request. -func (client UsageDetailsClient) ListPreparer(ctx context.Context, scope string, expand string, filter string, skiptoken string, top *int32, metric Metrictype) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "scope": scope, - } - - const APIVersion = "2019-10-01" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - if len(filter) > 0 { - queryParameters["$filter"] = autorest.Encode("query", filter) - } - if len(skiptoken) > 0 { - queryParameters["$skiptoken"] = autorest.Encode("query", skiptoken) - } - if top != nil { - queryParameters["$top"] = autorest.Encode("query", *top) - } - if len(string(metric)) > 0 { - queryParameters["metric"] = autorest.Encode("query", metric) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/usageDetails", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client UsageDetailsClient) ListSender(req *http.Request) (*http.Response, error) { - return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client UsageDetailsClient) ListResponder(resp *http.Response) (result UsageDetailsListResult, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client UsageDetailsClient) listNextResults(ctx context.Context, lastResults UsageDetailsListResult) (result UsageDetailsListResult, err error) { - req, err := lastResults.usageDetailsListResultPreparer(ctx) - if err != nil { - return result, autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client UsageDetailsClient) ListComplete(ctx context.Context, scope string, expand string, filter string, skiptoken string, top *int32, metric Metrictype) (result UsageDetailsListResultIterator, err error) { - if tracing.IsEnabled() { - ctx = tracing.StartSpan(ctx, fqdn+"/UsageDetailsClient.List") - defer func() { - sc := -1 - if result.Response().Response.Response != nil { - sc = result.page.Response().Response.Response.StatusCode - } - tracing.EndSpan(ctx, sc, err) - }() - } - result.page, err = client.List(ctx, scope, expand, filter, skiptoken, top, metric) - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/version.go b/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/version.go deleted file mode 100644 index 11f277728a88..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-10-01/consumption/version.go +++ /dev/null @@ -1,19 +0,0 @@ -package consumption - -import "github.com/Azure/azure-sdk-for-go/version" - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -// UserAgent returns the UserAgent string to use when sending http.Requests. -func UserAgent() string { - return "Azure-SDK-For-Go/" + Version() + " consumption/2019-10-01" -} - -// Version returns the semantic version (see http://semver.org) of the client. -func Version() string { - return version.Number -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/README.md new file mode 100644 index 000000000000..547d61af7532 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/README.md @@ -0,0 +1,90 @@ + +## `github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets` Documentation + +The `budgets` SDK allows for interaction with the Azure Resource Manager Service `consumption` (API Version `2019-10-01`). + +This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). + +### Import Path + +```go +import "github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets" +``` + + +### Client Initialization + +```go +client := budgets.NewBudgetsClientWithBaseURI("https://management.azure.com") +client.Client.Authorizer = authorizer +``` + + +### Example Usage: `BudgetsClient.CreateOrUpdate` + +```go +ctx := context.TODO() +id := budgets.NewScopedBudgetID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group", "budgetValue") + +payload := budgets.Budget{ + // ... +} + + +read, err := client.CreateOrUpdate(ctx, id, payload) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `BudgetsClient.Delete` + +```go +ctx := context.TODO() +id := budgets.NewScopedBudgetID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group", "budgetValue") + +read, err := client.Delete(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `BudgetsClient.Get` + +```go +ctx := context.TODO() +id := budgets.NewScopedBudgetID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group", "budgetValue") + +read, err := client.Get(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `BudgetsClient.List` + +```go +ctx := context.TODO() +id := budgets.NewScopeID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group") + +// alternatively `client.List(ctx, id)` can be used to do batched pagination +items, err := client.ListComplete(ctx, id) +if err != nil { + // handle the error +} +for _, item := range items { + // do something +} +``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/client.go new file mode 100644 index 000000000000..bf44017c8b4c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/client.go @@ -0,0 +1,18 @@ +package budgets + +import "github.com/Azure/go-autorest/autorest" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type BudgetsClient struct { + Client autorest.Client + baseUri string +} + +func NewBudgetsClientWithBaseURI(endpoint string) BudgetsClient { + return BudgetsClient{ + Client: autorest.NewClientWithUserAgent(userAgent()), + baseUri: endpoint, + } +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/constants.go new file mode 100644 index 000000000000..28dbc0cc22ac --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/constants.go @@ -0,0 +1,237 @@ +package budgets + +import "strings" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type BudgetOperatorType string + +const ( + BudgetOperatorTypeIn BudgetOperatorType = "In" +) + +func PossibleValuesForBudgetOperatorType() []string { + return []string{ + string(BudgetOperatorTypeIn), + } +} + +func parseBudgetOperatorType(input string) (*BudgetOperatorType, error) { + vals := map[string]BudgetOperatorType{ + "in": BudgetOperatorTypeIn, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := BudgetOperatorType(input) + return &out, nil +} + +type CategoryType string + +const ( + CategoryTypeCost CategoryType = "Cost" +) + +func PossibleValuesForCategoryType() []string { + return []string{ + string(CategoryTypeCost), + } +} + +func parseCategoryType(input string) (*CategoryType, error) { + vals := map[string]CategoryType{ + "cost": CategoryTypeCost, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := CategoryType(input) + return &out, nil +} + +type CultureCode string + +const ( + CultureCodeCsNegativecz CultureCode = "cs-cz" + CultureCodeDaNegativedk CultureCode = "da-dk" + CultureCodeDeNegativede CultureCode = "de-de" + CultureCodeEnNegativegb CultureCode = "en-gb" + CultureCodeEnNegativeus CultureCode = "en-us" + CultureCodeEsNegativees CultureCode = "es-es" + CultureCodeFrNegativefr CultureCode = "fr-fr" + CultureCodeHuNegativehu CultureCode = "hu-hu" + CultureCodeItNegativeit CultureCode = "it-it" + CultureCodeJaNegativejp CultureCode = "ja-jp" + CultureCodeKoNegativekr CultureCode = "ko-kr" + CultureCodeNbNegativeno CultureCode = "nb-no" + CultureCodeNlNegativenl CultureCode = "nl-nl" + CultureCodePlNegativepl CultureCode = "pl-pl" + CultureCodePtNegativebr CultureCode = "pt-br" + CultureCodePtNegativept CultureCode = "pt-pt" + CultureCodeRuNegativeru CultureCode = "ru-ru" + CultureCodeSvNegativese CultureCode = "sv-se" + CultureCodeTrNegativetr CultureCode = "tr-tr" + CultureCodeZhNegativecn CultureCode = "zh-cn" + CultureCodeZhNegativetw CultureCode = "zh-tw" +) + +func PossibleValuesForCultureCode() []string { + return []string{ + string(CultureCodeCsNegativecz), + string(CultureCodeDaNegativedk), + string(CultureCodeDeNegativede), + string(CultureCodeEnNegativegb), + string(CultureCodeEnNegativeus), + string(CultureCodeEsNegativees), + string(CultureCodeFrNegativefr), + string(CultureCodeHuNegativehu), + string(CultureCodeItNegativeit), + string(CultureCodeJaNegativejp), + string(CultureCodeKoNegativekr), + string(CultureCodeNbNegativeno), + string(CultureCodeNlNegativenl), + string(CultureCodePlNegativepl), + string(CultureCodePtNegativebr), + string(CultureCodePtNegativept), + string(CultureCodeRuNegativeru), + string(CultureCodeSvNegativese), + string(CultureCodeTrNegativetr), + string(CultureCodeZhNegativecn), + string(CultureCodeZhNegativetw), + } +} + +func parseCultureCode(input string) (*CultureCode, error) { + vals := map[string]CultureCode{ + "cs-cz": CultureCodeCsNegativecz, + "da-dk": CultureCodeDaNegativedk, + "de-de": CultureCodeDeNegativede, + "en-gb": CultureCodeEnNegativegb, + "en-us": CultureCodeEnNegativeus, + "es-es": CultureCodeEsNegativees, + "fr-fr": CultureCodeFrNegativefr, + "hu-hu": CultureCodeHuNegativehu, + "it-it": CultureCodeItNegativeit, + "ja-jp": CultureCodeJaNegativejp, + "ko-kr": CultureCodeKoNegativekr, + "nb-no": CultureCodeNbNegativeno, + "nl-nl": CultureCodeNlNegativenl, + "pl-pl": CultureCodePlNegativepl, + "pt-br": CultureCodePtNegativebr, + "pt-pt": CultureCodePtNegativept, + "ru-ru": CultureCodeRuNegativeru, + "sv-se": CultureCodeSvNegativese, + "tr-tr": CultureCodeTrNegativetr, + "zh-cn": CultureCodeZhNegativecn, + "zh-tw": CultureCodeZhNegativetw, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := CultureCode(input) + return &out, nil +} + +type OperatorType string + +const ( + OperatorTypeEqualTo OperatorType = "EqualTo" + OperatorTypeGreaterThan OperatorType = "GreaterThan" + OperatorTypeGreaterThanOrEqualTo OperatorType = "GreaterThanOrEqualTo" +) + +func PossibleValuesForOperatorType() []string { + return []string{ + string(OperatorTypeEqualTo), + string(OperatorTypeGreaterThan), + string(OperatorTypeGreaterThanOrEqualTo), + } +} + +func parseOperatorType(input string) (*OperatorType, error) { + vals := map[string]OperatorType{ + "equalto": OperatorTypeEqualTo, + "greaterthan": OperatorTypeGreaterThan, + "greaterthanorequalto": OperatorTypeGreaterThanOrEqualTo, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := OperatorType(input) + return &out, nil +} + +type ThresholdType string + +const ( + ThresholdTypeActual ThresholdType = "Actual" +) + +func PossibleValuesForThresholdType() []string { + return []string{ + string(ThresholdTypeActual), + } +} + +func parseThresholdType(input string) (*ThresholdType, error) { + vals := map[string]ThresholdType{ + "actual": ThresholdTypeActual, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := ThresholdType(input) + return &out, nil +} + +type TimeGrainType string + +const ( + TimeGrainTypeAnnually TimeGrainType = "Annually" + TimeGrainTypeBillingAnnual TimeGrainType = "BillingAnnual" + TimeGrainTypeBillingMonth TimeGrainType = "BillingMonth" + TimeGrainTypeBillingQuarter TimeGrainType = "BillingQuarter" + TimeGrainTypeMonthly TimeGrainType = "Monthly" + TimeGrainTypeQuarterly TimeGrainType = "Quarterly" +) + +func PossibleValuesForTimeGrainType() []string { + return []string{ + string(TimeGrainTypeAnnually), + string(TimeGrainTypeBillingAnnual), + string(TimeGrainTypeBillingMonth), + string(TimeGrainTypeBillingQuarter), + string(TimeGrainTypeMonthly), + string(TimeGrainTypeQuarterly), + } +} + +func parseTimeGrainType(input string) (*TimeGrainType, error) { + vals := map[string]TimeGrainType{ + "annually": TimeGrainTypeAnnually, + "billingannual": TimeGrainTypeBillingAnnual, + "billingmonth": TimeGrainTypeBillingMonth, + "billingquarter": TimeGrainTypeBillingQuarter, + "monthly": TimeGrainTypeMonthly, + "quarterly": TimeGrainTypeQuarterly, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := TimeGrainType(input) + return &out, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/id_scopedbudget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/id_scopedbudget.go new file mode 100644 index 000000000000..4ff3f6a26ce0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/id_scopedbudget.go @@ -0,0 +1,110 @@ +package budgets + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +var _ resourceids.ResourceId = ScopedBudgetId{} + +// ScopedBudgetId is a struct representing the Resource ID for a Scoped Budget +type ScopedBudgetId struct { + Scope string + BudgetName string +} + +// NewScopedBudgetID returns a new ScopedBudgetId struct +func NewScopedBudgetID(scope string, budgetName string) ScopedBudgetId { + return ScopedBudgetId{ + Scope: scope, + BudgetName: budgetName, + } +} + +// ParseScopedBudgetID parses 'input' into a ScopedBudgetId +func ParseScopedBudgetID(input string) (*ScopedBudgetId, error) { + parser := resourceids.NewParserFromResourceIdType(ScopedBudgetId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ScopedBudgetId{} + + if id.Scope, ok = parsed.Parsed["scope"]; !ok { + return nil, fmt.Errorf("the segment 'scope' was not found in the resource id %q", input) + } + + if id.BudgetName, ok = parsed.Parsed["budgetName"]; !ok { + return nil, fmt.Errorf("the segment 'budgetName' was not found in the resource id %q", input) + } + + return &id, nil +} + +// ParseScopedBudgetIDInsensitively parses 'input' case-insensitively into a ScopedBudgetId +// note: this method should only be used for API response data and not user input +func ParseScopedBudgetIDInsensitively(input string) (*ScopedBudgetId, error) { + parser := resourceids.NewParserFromResourceIdType(ScopedBudgetId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ScopedBudgetId{} + + if id.Scope, ok = parsed.Parsed["scope"]; !ok { + return nil, fmt.Errorf("the segment 'scope' was not found in the resource id %q", input) + } + + if id.BudgetName, ok = parsed.Parsed["budgetName"]; !ok { + return nil, fmt.Errorf("the segment 'budgetName' was not found in the resource id %q", input) + } + + return &id, nil +} + +// ValidateScopedBudgetID checks that 'input' can be parsed as a Scoped Budget ID +func ValidateScopedBudgetID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseScopedBudgetID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Scoped Budget ID +func (id ScopedBudgetId) ID() string { + fmtString := "/%s/providers/Microsoft.Consumption/budgets/%s" + return fmt.Sprintf(fmtString, strings.TrimPrefix(id.Scope, "/"), id.BudgetName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Scoped Budget ID +func (id ScopedBudgetId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.ScopeSegment("scope", "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftConsumption", "Microsoft.Consumption", "Microsoft.Consumption"), + resourceids.StaticSegment("staticBudgets", "budgets", "budgets"), + resourceids.UserSpecifiedSegment("budgetName", "budgetValue"), + } +} + +// String returns a human-readable description of this Scoped Budget ID +func (id ScopedBudgetId) String() string { + components := []string{ + fmt.Sprintf("Scope: %q", id.Scope), + fmt.Sprintf("Budget Name: %q", id.BudgetName), + } + return fmt.Sprintf("Scoped Budget (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_createorupdate_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_createorupdate_autorest.go new file mode 100644 index 000000000000..185153a4c3d9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_createorupdate_autorest.go @@ -0,0 +1,69 @@ +package budgets + +import ( + "context" + "net/http" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type CreateOrUpdateOperationResponse struct { + HttpResponse *http.Response + Model *Budget +} + +// CreateOrUpdate ... +func (c BudgetsClient) CreateOrUpdate(ctx context.Context, id ScopedBudgetId, input Budget) (result CreateOrUpdateOperationResponse, err error) { + req, err := c.preparerForCreateOrUpdate(ctx, id, input) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "CreateOrUpdate", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForCreateOrUpdate(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "CreateOrUpdate", result.HttpResponse, "Failure responding to request") + return + } + + return +} + +// preparerForCreateOrUpdate prepares the CreateOrUpdate request. +func (c BudgetsClient) preparerForCreateOrUpdate(ctx context.Context, id ScopedBudgetId, input Budget) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(id.ID()), + autorest.WithJSON(input), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForCreateOrUpdate handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (c BudgetsClient) responderForCreateOrUpdate(resp *http.Response) (result CreateOrUpdateOperationResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusCreated, http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Model), + autorest.ByClosing()) + result.HttpResponse = resp + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_delete_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_delete_autorest.go new file mode 100644 index 000000000000..b4dc251b426e --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_delete_autorest.go @@ -0,0 +1,66 @@ +package budgets + +import ( + "context" + "net/http" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type DeleteOperationResponse struct { + HttpResponse *http.Response +} + +// Delete ... +func (c BudgetsClient) Delete(ctx context.Context, id ScopedBudgetId) (result DeleteOperationResponse, err error) { + req, err := c.preparerForDelete(ctx, id) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "Delete", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "Delete", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForDelete(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "Delete", result.HttpResponse, "Failure responding to request") + return + } + + return +} + +// preparerForDelete prepares the Delete request. +func (c BudgetsClient) preparerForDelete(ctx context.Context, id ScopedBudgetId) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsDelete(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(id.ID()), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForDelete handles the response to the Delete request. The method always +// closes the http.Response Body. +func (c BudgetsClient) responderForDelete(resp *http.Response) (result DeleteOperationResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByClosing()) + result.HttpResponse = resp + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_get_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_get_autorest.go new file mode 100644 index 000000000000..15c24f30030e --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_get_autorest.go @@ -0,0 +1,68 @@ +package budgets + +import ( + "context" + "net/http" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type GetOperationResponse struct { + HttpResponse *http.Response + Model *Budget +} + +// Get ... +func (c BudgetsClient) Get(ctx context.Context, id ScopedBudgetId) (result GetOperationResponse, err error) { + req, err := c.preparerForGet(ctx, id) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "Get", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "Get", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForGet(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "Get", result.HttpResponse, "Failure responding to request") + return + } + + return +} + +// preparerForGet prepares the Get request. +func (c BudgetsClient) preparerForGet(ctx context.Context, id ScopedBudgetId) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsGet(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(id.ID()), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForGet handles the response to the Get request. The method always +// closes the http.Response Body. +func (c BudgetsClient) responderForGet(resp *http.Response) (result GetOperationResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Model), + autorest.ByClosing()) + result.HttpResponse = resp + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_list_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_list_autorest.go new file mode 100644 index 000000000000..afd117b268b8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/method_list_autorest.go @@ -0,0 +1,187 @@ +package budgets + +import ( + "context" + "fmt" + "net/http" + "net/url" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListOperationResponse struct { + HttpResponse *http.Response + Model *[]Budget + + nextLink *string + nextPageFunc func(ctx context.Context, nextLink string) (ListOperationResponse, error) +} + +type ListCompleteResult struct { + Items []Budget +} + +func (r ListOperationResponse) HasMore() bool { + return r.nextLink != nil +} + +func (r ListOperationResponse) LoadMore(ctx context.Context) (resp ListOperationResponse, err error) { + if !r.HasMore() { + err = fmt.Errorf("no more pages returned") + return + } + return r.nextPageFunc(ctx, *r.nextLink) +} + +// List ... +func (c BudgetsClient) List(ctx context.Context, id commonids.ScopeId) (resp ListOperationResponse, err error) { + req, err := c.preparerForList(ctx, id) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "List", nil, "Failure preparing request") + return + } + + resp.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "List", resp.HttpResponse, "Failure sending request") + return + } + + resp, err = c.responderForList(resp.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "List", resp.HttpResponse, "Failure responding to request") + return + } + return +} + +// preparerForList prepares the List request. +func (c BudgetsClient) preparerForList(ctx context.Context, id commonids.ScopeId) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsGet(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(fmt.Sprintf("%s/providers/Microsoft.Consumption/budgets", id.ID())), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// preparerForListWithNextLink prepares the List request with the given nextLink token. +func (c BudgetsClient) preparerForListWithNextLink(ctx context.Context, nextLink string) (*http.Request, error) { + uri, err := url.Parse(nextLink) + if err != nil { + return nil, fmt.Errorf("parsing nextLink %q: %+v", nextLink, err) + } + queryParameters := map[string]interface{}{} + for k, v := range uri.Query() { + if len(v) == 0 { + continue + } + val := v[0] + val = autorest.Encode("query", val) + queryParameters[k] = val + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsGet(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(uri.Path), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForList handles the response to the List request. The method always +// closes the http.Response Body. +func (c BudgetsClient) responderForList(resp *http.Response) (result ListOperationResponse, err error) { + type page struct { + Values []Budget `json:"value"` + NextLink *string `json:"nextLink"` + } + var respObj page + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&respObj), + autorest.ByClosing()) + result.HttpResponse = resp + result.Model = &respObj.Values + result.nextLink = respObj.NextLink + if respObj.NextLink != nil { + result.nextPageFunc = func(ctx context.Context, nextLink string) (result ListOperationResponse, err error) { + req, err := c.preparerForListWithNextLink(ctx, nextLink) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "List", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "List", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForList(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "budgets.BudgetsClient", "List", result.HttpResponse, "Failure responding to request") + return + } + + return + } + } + return +} + +// ListComplete retrieves all of the results into a single object +func (c BudgetsClient) ListComplete(ctx context.Context, id commonids.ScopeId) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, BudgetOperationPredicate{}) +} + +// ListCompleteMatchingPredicate retrieves all of the results and then applied the predicate +func (c BudgetsClient) ListCompleteMatchingPredicate(ctx context.Context, id commonids.ScopeId, predicate BudgetOperationPredicate) (resp ListCompleteResult, err error) { + items := make([]Budget, 0) + + page, err := c.List(ctx, id) + if err != nil { + err = fmt.Errorf("loading the initial page: %+v", err) + return + } + if page.Model != nil { + for _, v := range *page.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + for page.HasMore() { + page, err = page.LoadMore(ctx) + if err != nil { + err = fmt.Errorf("loading the next page: %+v", err) + return + } + + if page.Model != nil { + for _, v := range *page.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + } + + out := ListCompleteResult{ + Items: items, + } + return out, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budget.go new file mode 100644 index 000000000000..d54e5dd1ad5d --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budget.go @@ -0,0 +1,12 @@ +package budgets + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type Budget struct { + ETag *string `json:"eTag,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Properties *BudgetProperties `json:"properties,omitempty"` + Type *string `json:"type,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetcomparisonexpression.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetcomparisonexpression.go new file mode 100644 index 000000000000..23d6db0a1921 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetcomparisonexpression.go @@ -0,0 +1,10 @@ +package budgets + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type BudgetComparisonExpression struct { + Name string `json:"name"` + Operator BudgetOperatorType `json:"operator"` + Values []string `json:"values"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetfilter.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetfilter.go new file mode 100644 index 000000000000..f5a25d2c0ef2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetfilter.go @@ -0,0 +1,11 @@ +package budgets + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type BudgetFilter struct { + And *[]BudgetFilterProperties `json:"and,omitempty"` + Dimensions *BudgetComparisonExpression `json:"dimensions,omitempty"` + Not *BudgetFilterProperties `json:"not,omitempty"` + Tags *BudgetComparisonExpression `json:"tags,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetfilterproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetfilterproperties.go new file mode 100644 index 000000000000..49a3c2e851d0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetfilterproperties.go @@ -0,0 +1,9 @@ +package budgets + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type BudgetFilterProperties struct { + Dimensions *BudgetComparisonExpression `json:"dimensions,omitempty"` + Tags *BudgetComparisonExpression `json:"tags,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetproperties.go new file mode 100644 index 000000000000..12b2d62f34e5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgetproperties.go @@ -0,0 +1,15 @@ +package budgets + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type BudgetProperties struct { + Amount float64 `json:"amount"` + Category CategoryType `json:"category"` + CurrentSpend *CurrentSpend `json:"currentSpend,omitempty"` + Filter *BudgetFilter `json:"filter,omitempty"` + ForecastSpend *ForecastSpend `json:"forecastSpend,omitempty"` + Notifications *map[string]Notification `json:"notifications,omitempty"` + TimeGrain TimeGrainType `json:"timeGrain"` + TimePeriod BudgetTimePeriod `json:"timePeriod"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgettimeperiod.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgettimeperiod.go new file mode 100644 index 000000000000..affe60949557 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_budgettimeperiod.go @@ -0,0 +1,36 @@ +package budgets + +import ( + "time" + + "github.com/hashicorp/go-azure-helpers/lang/dates" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type BudgetTimePeriod struct { + EndDate *string `json:"endDate,omitempty"` + StartDate string `json:"startDate"` +} + +func (o *BudgetTimePeriod) GetEndDateAsTime() (*time.Time, error) { + if o.EndDate == nil { + return nil, nil + } + return dates.ParseAsFormat(o.EndDate, "2006-01-02T15:04:05Z07:00") +} + +func (o *BudgetTimePeriod) SetEndDateAsTime(input time.Time) { + formatted := input.Format("2006-01-02T15:04:05Z07:00") + o.EndDate = &formatted +} + +func (o *BudgetTimePeriod) GetStartDateAsTime() (*time.Time, error) { + return dates.ParseAsFormat(&o.StartDate, "2006-01-02T15:04:05Z07:00") +} + +func (o *BudgetTimePeriod) SetStartDateAsTime(input time.Time) { + formatted := input.Format("2006-01-02T15:04:05Z07:00") + o.StartDate = formatted +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_currentspend.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_currentspend.go new file mode 100644 index 000000000000..0e08778295b6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_currentspend.go @@ -0,0 +1,9 @@ +package budgets + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type CurrentSpend struct { + Amount *float64 `json:"amount,omitempty"` + Unit *string `json:"unit,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_forecastspend.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_forecastspend.go new file mode 100644 index 000000000000..37d33ff28b0e --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_forecastspend.go @@ -0,0 +1,9 @@ +package budgets + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ForecastSpend struct { + Amount *float64 `json:"amount,omitempty"` + Unit *string `json:"unit,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_notification.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_notification.go new file mode 100644 index 000000000000..4d26d020407b --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/model_notification.go @@ -0,0 +1,15 @@ +package budgets + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type Notification struct { + ContactEmails []string `json:"contactEmails"` + ContactGroups *[]string `json:"contactGroups,omitempty"` + ContactRoles *[]string `json:"contactRoles,omitempty"` + Enabled bool `json:"enabled"` + Locale *CultureCode `json:"locale,omitempty"` + Operator OperatorType `json:"operator"` + Threshold float64 `json:"threshold"` + ThresholdType *ThresholdType `json:"thresholdType,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/predicates.go new file mode 100644 index 000000000000..4f3240640df2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/predicates.go @@ -0,0 +1,29 @@ +package budgets + +type BudgetOperationPredicate struct { + ETag *string + Id *string + Name *string + Type *string +} + +func (p BudgetOperationPredicate) Matches(input Budget) bool { + + if p.ETag != nil && (input.ETag == nil && *p.ETag != *input.ETag) { + return false + } + + if p.Id != nil && (input.Id == nil && *p.Id != *input.Id) { + return false + } + + if p.Name != nil && (input.Name == nil && *p.Name != *input.Name) { + return false + } + + if p.Type != nil && (input.Type == nil && *p.Type != *input.Type) { + return false + } + + return true +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/version.go new file mode 100644 index 000000000000..4e582168a9f1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets/version.go @@ -0,0 +1,12 @@ +package budgets + +import "fmt" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +const defaultApiVersion = "2019-10-01" + +func userAgent() string { + return fmt.Sprintf("hashicorp/go-azure-sdk/budgets/%s", defaultApiVersion) +} diff --git a/vendor/github.com/shopspring/decimal/.gitignore b/vendor/github.com/shopspring/decimal/.gitignore deleted file mode 100644 index 8a43ce9d7b6b..000000000000 --- a/vendor/github.com/shopspring/decimal/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -.git -*.swp - -# IntelliJ -.idea/ -*.iml diff --git a/vendor/github.com/shopspring/decimal/.travis.yml b/vendor/github.com/shopspring/decimal/.travis.yml deleted file mode 100644 index 55d42b289d09..000000000000 --- a/vendor/github.com/shopspring/decimal/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -language: go - -go: - - 1.7.x - - 1.12.x - - 1.13.x - - tip - -install: - - go build . - -script: - - go test -v diff --git a/vendor/github.com/shopspring/decimal/CHANGELOG.md b/vendor/github.com/shopspring/decimal/CHANGELOG.md deleted file mode 100644 index 01ba02feb2c7..000000000000 --- a/vendor/github.com/shopspring/decimal/CHANGELOG.md +++ /dev/null @@ -1,19 +0,0 @@ -## Decimal v1.2.0 - -#### BREAKING -- Drop support for Go version older than 1.7 [#172](https://github.com/shopspring/decimal/pull/172) - -#### FEATURES -- Add NewFromInt and NewFromInt32 initializers [#72](https://github.com/shopspring/decimal/pull/72) -- Add support for Go modules [#157](https://github.com/shopspring/decimal/pull/157) -- Add BigInt, BigFloat helper methods [#171](https://github.com/shopspring/decimal/pull/171) - -#### ENHANCEMENTS -- Memory usage optimization [#160](https://github.com/shopspring/decimal/pull/160) -- Updated travis CI golang versions [#156](https://github.com/shopspring/decimal/pull/156) -- Update documentation [#173](https://github.com/shopspring/decimal/pull/173) -- Improve code quality [#174](https://github.com/shopspring/decimal/pull/174) - -#### BUGFIXES -- Revert remove insignificant digits [#159](https://github.com/shopspring/decimal/pull/159) -- Remove 15 interval for RoundCash [#166](https://github.com/shopspring/decimal/pull/166) diff --git a/vendor/github.com/shopspring/decimal/LICENSE b/vendor/github.com/shopspring/decimal/LICENSE deleted file mode 100644 index ad2148aaf93e..000000000000 --- a/vendor/github.com/shopspring/decimal/LICENSE +++ /dev/null @@ -1,45 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Spring, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -- Based on https://github.com/oguzbilgic/fpd, which has the following license: -""" -The MIT License (MIT) - -Copyright (c) 2013 Oguz Bilgic - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -""" diff --git a/vendor/github.com/shopspring/decimal/README.md b/vendor/github.com/shopspring/decimal/README.md deleted file mode 100644 index b70f90159351..000000000000 --- a/vendor/github.com/shopspring/decimal/README.md +++ /dev/null @@ -1,130 +0,0 @@ -# decimal - -[![Build Status](https://travis-ci.org/shopspring/decimal.png?branch=master)](https://travis-ci.org/shopspring/decimal) [![GoDoc](https://godoc.org/github.com/shopspring/decimal?status.svg)](https://godoc.org/github.com/shopspring/decimal) [![Go Report Card](https://goreportcard.com/badge/github.com/shopspring/decimal)](https://goreportcard.com/report/github.com/shopspring/decimal) - -Arbitrary-precision fixed-point decimal numbers in go. - -_Note:_ Decimal library can "only" represent numbers with a maximum of 2^31 digits after the decimal point. - -## Features - - * The zero-value is 0, and is safe to use without initialization - * Addition, subtraction, multiplication with no loss of precision - * Division with specified precision - * Database/sql serialization/deserialization - * JSON and XML serialization/deserialization - -## Install - -Run `go get github.com/shopspring/decimal` - -## Requirements - -Decimal library requires Go version `>=1.7` - -## Usage - -```go -package main - -import ( - "fmt" - "github.com/shopspring/decimal" -) - -func main() { - price, err := decimal.NewFromString("136.02") - if err != nil { - panic(err) - } - - quantity := decimal.NewFromInt(3) - - fee, _ := decimal.NewFromString(".035") - taxRate, _ := decimal.NewFromString(".08875") - - subtotal := price.Mul(quantity) - - preTax := subtotal.Mul(fee.Add(decimal.NewFromFloat(1))) - - total := preTax.Mul(taxRate.Add(decimal.NewFromFloat(1))) - - fmt.Println("Subtotal:", subtotal) // Subtotal: 408.06 - fmt.Println("Pre-tax:", preTax) // Pre-tax: 422.3421 - fmt.Println("Taxes:", total.Sub(preTax)) // Taxes: 37.482861375 - fmt.Println("Total:", total) // Total: 459.824961375 - fmt.Println("Tax rate:", total.Sub(preTax).Div(preTax)) // Tax rate: 0.08875 -} -``` - -## Documentation - -http://godoc.org/github.com/shopspring/decimal - -## Production Usage - -* [Spring](https://shopspring.com/), since August 14, 2014. -* If you are using this in production, please let us know! - -## FAQ - -#### Why don't you just use float64? - -Because float64 (or any binary floating point type, actually) can't represent -numbers such as `0.1` exactly. - -Consider this code: http://play.golang.org/p/TQBd4yJe6B You might expect that -it prints out `10`, but it actually prints `9.999999999999831`. Over time, -these small errors can really add up! - -#### Why don't you just use big.Rat? - -big.Rat is fine for representing rational numbers, but Decimal is better for -representing money. Why? Here's a (contrived) example: - -Let's say you use big.Rat, and you have two numbers, x and y, both -representing 1/3, and you have `z = 1 - x - y = 1/3`. If you print each one -out, the string output has to stop somewhere (let's say it stops at 3 decimal -digits, for simplicity), so you'll get 0.333, 0.333, and 0.333. But where did -the other 0.001 go? - -Here's the above example as code: http://play.golang.org/p/lCZZs0w9KE - -With Decimal, the strings being printed out represent the number exactly. So, -if you have `x = y = 1/3` (with precision 3), they will actually be equal to -0.333, and when you do `z = 1 - x - y`, `z` will be equal to .334. No money is -unaccounted for! - -You still have to be careful. If you want to split a number `N` 3 ways, you -can't just send `N/3` to three different people. You have to pick one to send -`N - (2/3*N)` to. That person will receive the fraction of a penny remainder. - -But, it is much easier to be careful with Decimal than with big.Rat. - -#### Why isn't the API similar to big.Int's? - -big.Int's API is built to reduce the number of memory allocations for maximal -performance. This makes sense for its use-case, but the trade-off is that the -API is awkward and easy to misuse. - -For example, to add two big.Ints, you do: `z := new(big.Int).Add(x, y)`. A -developer unfamiliar with this API might try to do `z := a.Add(a, b)`. This -modifies `a` and sets `z` as an alias for `a`, which they might not expect. It -also modifies any other aliases to `a`. - -Here's an example of the subtle bugs you can introduce with big.Int's API: -https://play.golang.org/p/x2R_78pa8r - -In contrast, it's difficult to make such mistakes with decimal. Decimals -behave like other go numbers types: even though `a = b` will not deep copy -`b` into `a`, it is impossible to modify a Decimal, since all Decimal methods -return new Decimals and do not modify the originals. The downside is that -this causes extra allocations, so Decimal is less performant. My assumption -is that if you're using Decimals, you probably care more about correctness -than performance. - -## License - -The MIT License (MIT) - -This is a heavily modified fork of [fpd.Decimal](https://github.com/oguzbilgic/fpd), which was also released under the MIT License. diff --git a/vendor/github.com/shopspring/decimal/decimal-go.go b/vendor/github.com/shopspring/decimal/decimal-go.go deleted file mode 100644 index 9958d6902063..000000000000 --- a/vendor/github.com/shopspring/decimal/decimal-go.go +++ /dev/null @@ -1,415 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Multiprecision decimal numbers. -// For floating-point formatting only; not general purpose. -// Only operations are assign and (binary) left/right shift. -// Can do binary floating point in multiprecision decimal precisely -// because 2 divides 10; cannot do decimal floating point -// in multiprecision binary precisely. - -package decimal - -type decimal struct { - d [800]byte // digits, big-endian representation - nd int // number of digits used - dp int // decimal point - neg bool // negative flag - trunc bool // discarded nonzero digits beyond d[:nd] -} - -func (a *decimal) String() string { - n := 10 + a.nd - if a.dp > 0 { - n += a.dp - } - if a.dp < 0 { - n += -a.dp - } - - buf := make([]byte, n) - w := 0 - switch { - case a.nd == 0: - return "0" - - case a.dp <= 0: - // zeros fill space between decimal point and digits - buf[w] = '0' - w++ - buf[w] = '.' - w++ - w += digitZero(buf[w : w+-a.dp]) - w += copy(buf[w:], a.d[0:a.nd]) - - case a.dp < a.nd: - // decimal point in middle of digits - w += copy(buf[w:], a.d[0:a.dp]) - buf[w] = '.' - w++ - w += copy(buf[w:], a.d[a.dp:a.nd]) - - default: - // zeros fill space between digits and decimal point - w += copy(buf[w:], a.d[0:a.nd]) - w += digitZero(buf[w : w+a.dp-a.nd]) - } - return string(buf[0:w]) -} - -func digitZero(dst []byte) int { - for i := range dst { - dst[i] = '0' - } - return len(dst) -} - -// trim trailing zeros from number. -// (They are meaningless; the decimal point is tracked -// independent of the number of digits.) -func trim(a *decimal) { - for a.nd > 0 && a.d[a.nd-1] == '0' { - a.nd-- - } - if a.nd == 0 { - a.dp = 0 - } -} - -// Assign v to a. -func (a *decimal) Assign(v uint64) { - var buf [24]byte - - // Write reversed decimal in buf. - n := 0 - for v > 0 { - v1 := v / 10 - v -= 10 * v1 - buf[n] = byte(v + '0') - n++ - v = v1 - } - - // Reverse again to produce forward decimal in a.d. - a.nd = 0 - for n--; n >= 0; n-- { - a.d[a.nd] = buf[n] - a.nd++ - } - a.dp = a.nd - trim(a) -} - -// Maximum shift that we can do in one pass without overflow. -// A uint has 32 or 64 bits, and we have to be able to accommodate 9<> 63) -const maxShift = uintSize - 4 - -// Binary shift right (/ 2) by k bits. k <= maxShift to avoid overflow. -func rightShift(a *decimal, k uint) { - r := 0 // read pointer - w := 0 // write pointer - - // Pick up enough leading digits to cover first shift. - var n uint - for ; n>>k == 0; r++ { - if r >= a.nd { - if n == 0 { - // a == 0; shouldn't get here, but handle anyway. - a.nd = 0 - return - } - for n>>k == 0 { - n = n * 10 - r++ - } - break - } - c := uint(a.d[r]) - n = n*10 + c - '0' - } - a.dp -= r - 1 - - var mask uint = (1 << k) - 1 - - // Pick up a digit, put down a digit. - for ; r < a.nd; r++ { - c := uint(a.d[r]) - dig := n >> k - n &= mask - a.d[w] = byte(dig + '0') - w++ - n = n*10 + c - '0' - } - - // Put down extra digits. - for n > 0 { - dig := n >> k - n &= mask - if w < len(a.d) { - a.d[w] = byte(dig + '0') - w++ - } else if dig > 0 { - a.trunc = true - } - n = n * 10 - } - - a.nd = w - trim(a) -} - -// Cheat sheet for left shift: table indexed by shift count giving -// number of new digits that will be introduced by that shift. -// -// For example, leftcheats[4] = {2, "625"}. That means that -// if we are shifting by 4 (multiplying by 16), it will add 2 digits -// when the string prefix is "625" through "999", and one fewer digit -// if the string prefix is "000" through "624". -// -// Credit for this trick goes to Ken. - -type leftCheat struct { - delta int // number of new digits - cutoff string // minus one digit if original < a. -} - -var leftcheats = []leftCheat{ - // Leading digits of 1/2^i = 5^i. - // 5^23 is not an exact 64-bit floating point number, - // so have to use bc for the math. - // Go up to 60 to be large enough for 32bit and 64bit platforms. - /* - seq 60 | sed 's/^/5^/' | bc | - awk 'BEGIN{ print "\t{ 0, \"\" }," } - { - log2 = log(2)/log(10) - printf("\t{ %d, \"%s\" },\t// * %d\n", - int(log2*NR+1), $0, 2**NR) - }' - */ - {0, ""}, - {1, "5"}, // * 2 - {1, "25"}, // * 4 - {1, "125"}, // * 8 - {2, "625"}, // * 16 - {2, "3125"}, // * 32 - {2, "15625"}, // * 64 - {3, "78125"}, // * 128 - {3, "390625"}, // * 256 - {3, "1953125"}, // * 512 - {4, "9765625"}, // * 1024 - {4, "48828125"}, // * 2048 - {4, "244140625"}, // * 4096 - {4, "1220703125"}, // * 8192 - {5, "6103515625"}, // * 16384 - {5, "30517578125"}, // * 32768 - {5, "152587890625"}, // * 65536 - {6, "762939453125"}, // * 131072 - {6, "3814697265625"}, // * 262144 - {6, "19073486328125"}, // * 524288 - {7, "95367431640625"}, // * 1048576 - {7, "476837158203125"}, // * 2097152 - {7, "2384185791015625"}, // * 4194304 - {7, "11920928955078125"}, // * 8388608 - {8, "59604644775390625"}, // * 16777216 - {8, "298023223876953125"}, // * 33554432 - {8, "1490116119384765625"}, // * 67108864 - {9, "7450580596923828125"}, // * 134217728 - {9, "37252902984619140625"}, // * 268435456 - {9, "186264514923095703125"}, // * 536870912 - {10, "931322574615478515625"}, // * 1073741824 - {10, "4656612873077392578125"}, // * 2147483648 - {10, "23283064365386962890625"}, // * 4294967296 - {10, "116415321826934814453125"}, // * 8589934592 - {11, "582076609134674072265625"}, // * 17179869184 - {11, "2910383045673370361328125"}, // * 34359738368 - {11, "14551915228366851806640625"}, // * 68719476736 - {12, "72759576141834259033203125"}, // * 137438953472 - {12, "363797880709171295166015625"}, // * 274877906944 - {12, "1818989403545856475830078125"}, // * 549755813888 - {13, "9094947017729282379150390625"}, // * 1099511627776 - {13, "45474735088646411895751953125"}, // * 2199023255552 - {13, "227373675443232059478759765625"}, // * 4398046511104 - {13, "1136868377216160297393798828125"}, // * 8796093022208 - {14, "5684341886080801486968994140625"}, // * 17592186044416 - {14, "28421709430404007434844970703125"}, // * 35184372088832 - {14, "142108547152020037174224853515625"}, // * 70368744177664 - {15, "710542735760100185871124267578125"}, // * 140737488355328 - {15, "3552713678800500929355621337890625"}, // * 281474976710656 - {15, "17763568394002504646778106689453125"}, // * 562949953421312 - {16, "88817841970012523233890533447265625"}, // * 1125899906842624 - {16, "444089209850062616169452667236328125"}, // * 2251799813685248 - {16, "2220446049250313080847263336181640625"}, // * 4503599627370496 - {16, "11102230246251565404236316680908203125"}, // * 9007199254740992 - {17, "55511151231257827021181583404541015625"}, // * 18014398509481984 - {17, "277555756156289135105907917022705078125"}, // * 36028797018963968 - {17, "1387778780781445675529539585113525390625"}, // * 72057594037927936 - {18, "6938893903907228377647697925567626953125"}, // * 144115188075855872 - {18, "34694469519536141888238489627838134765625"}, // * 288230376151711744 - {18, "173472347597680709441192448139190673828125"}, // * 576460752303423488 - {19, "867361737988403547205962240695953369140625"}, // * 1152921504606846976 -} - -// Is the leading prefix of b lexicographically less than s? -func prefixIsLessThan(b []byte, s string) bool { - for i := 0; i < len(s); i++ { - if i >= len(b) { - return true - } - if b[i] != s[i] { - return b[i] < s[i] - } - } - return false -} - -// Binary shift left (* 2) by k bits. k <= maxShift to avoid overflow. -func leftShift(a *decimal, k uint) { - delta := leftcheats[k].delta - if prefixIsLessThan(a.d[0:a.nd], leftcheats[k].cutoff) { - delta-- - } - - r := a.nd // read index - w := a.nd + delta // write index - - // Pick up a digit, put down a digit. - var n uint - for r--; r >= 0; r-- { - n += (uint(a.d[r]) - '0') << k - quo := n / 10 - rem := n - 10*quo - w-- - if w < len(a.d) { - a.d[w] = byte(rem + '0') - } else if rem != 0 { - a.trunc = true - } - n = quo - } - - // Put down extra digits. - for n > 0 { - quo := n / 10 - rem := n - 10*quo - w-- - if w < len(a.d) { - a.d[w] = byte(rem + '0') - } else if rem != 0 { - a.trunc = true - } - n = quo - } - - a.nd += delta - if a.nd >= len(a.d) { - a.nd = len(a.d) - } - a.dp += delta - trim(a) -} - -// Binary shift left (k > 0) or right (k < 0). -func (a *decimal) Shift(k int) { - switch { - case a.nd == 0: - // nothing to do: a == 0 - case k > 0: - for k > maxShift { - leftShift(a, maxShift) - k -= maxShift - } - leftShift(a, uint(k)) - case k < 0: - for k < -maxShift { - rightShift(a, maxShift) - k += maxShift - } - rightShift(a, uint(-k)) - } -} - -// If we chop a at nd digits, should we round up? -func shouldRoundUp(a *decimal, nd int) bool { - if nd < 0 || nd >= a.nd { - return false - } - if a.d[nd] == '5' && nd+1 == a.nd { // exactly halfway - round to even - // if we truncated, a little higher than what's recorded - always round up - if a.trunc { - return true - } - return nd > 0 && (a.d[nd-1]-'0')%2 != 0 - } - // not halfway - digit tells all - return a.d[nd] >= '5' -} - -// Round a to nd digits (or fewer). -// If nd is zero, it means we're rounding -// just to the left of the digits, as in -// 0.09 -> 0.1. -func (a *decimal) Round(nd int) { - if nd < 0 || nd >= a.nd { - return - } - if shouldRoundUp(a, nd) { - a.RoundUp(nd) - } else { - a.RoundDown(nd) - } -} - -// Round a down to nd digits (or fewer). -func (a *decimal) RoundDown(nd int) { - if nd < 0 || nd >= a.nd { - return - } - a.nd = nd - trim(a) -} - -// Round a up to nd digits (or fewer). -func (a *decimal) RoundUp(nd int) { - if nd < 0 || nd >= a.nd { - return - } - - // round up - for i := nd - 1; i >= 0; i-- { - c := a.d[i] - if c < '9' { // can stop after this digit - a.d[i]++ - a.nd = i + 1 - return - } - } - - // Number is all 9s. - // Change to single 1 with adjusted decimal point. - a.d[0] = '1' - a.nd = 1 - a.dp++ -} - -// Extract integer part, rounded appropriately. -// No guarantees about overflow. -func (a *decimal) RoundedInteger() uint64 { - if a.dp > 20 { - return 0xFFFFFFFFFFFFFFFF - } - var i int - n := uint64(0) - for i = 0; i < a.dp && i < a.nd; i++ { - n = n*10 + uint64(a.d[i]-'0') - } - for ; i < a.dp; i++ { - n *= 10 - } - if shouldRoundUp(a, a.dp) { - n++ - } - return n -} diff --git a/vendor/github.com/shopspring/decimal/decimal.go b/vendor/github.com/shopspring/decimal/decimal.go deleted file mode 100644 index 801c1a0457a4..000000000000 --- a/vendor/github.com/shopspring/decimal/decimal.go +++ /dev/null @@ -1,1477 +0,0 @@ -// Package decimal implements an arbitrary precision fixed-point decimal. -// -// The zero-value of a Decimal is 0, as you would expect. -// -// The best way to create a new Decimal is to use decimal.NewFromString, ex: -// -// n, err := decimal.NewFromString("-123.4567") -// n.String() // output: "-123.4567" -// -// To use Decimal as part of a struct: -// -// type Struct struct { -// Number Decimal -// } -// -// Note: This can "only" represent numbers with a maximum of 2^31 digits after the decimal point. -package decimal - -import ( - "database/sql/driver" - "encoding/binary" - "fmt" - "math" - "math/big" - "strconv" - "strings" -) - -// DivisionPrecision is the number of decimal places in the result when it -// doesn't divide exactly. -// -// Example: -// -// d1 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3)) -// d1.String() // output: "0.6666666666666667" -// d2 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(30000)) -// d2.String() // output: "0.0000666666666667" -// d3 := decimal.NewFromFloat(20000).Div(decimal.NewFromFloat(3)) -// d3.String() // output: "6666.6666666666666667" -// decimal.DivisionPrecision = 3 -// d4 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3)) -// d4.String() // output: "0.667" -// -var DivisionPrecision = 16 - -// MarshalJSONWithoutQuotes should be set to true if you want the decimal to -// be JSON marshaled as a number, instead of as a string. -// WARNING: this is dangerous for decimals with many digits, since many JSON -// unmarshallers (ex: Javascript's) will unmarshal JSON numbers to IEEE 754 -// double-precision floating point numbers, which means you can potentially -// silently lose precision. -var MarshalJSONWithoutQuotes = false - -// Zero constant, to make computations faster. -// Zero should never be compared with == or != directly, please use decimal.Equal or decimal.Cmp instead. -var Zero = New(0, 1) - -var zeroInt = big.NewInt(0) -var oneInt = big.NewInt(1) -var twoInt = big.NewInt(2) -var fourInt = big.NewInt(4) -var fiveInt = big.NewInt(5) -var tenInt = big.NewInt(10) -var twentyInt = big.NewInt(20) - -// Decimal represents a fixed-point decimal. It is immutable. -// number = value * 10 ^ exp -type Decimal struct { - value *big.Int - - // NOTE(vadim): this must be an int32, because we cast it to float64 during - // calculations. If exp is 64 bit, we might lose precision. - // If we cared about being able to represent every possible decimal, we - // could make exp a *big.Int but it would hurt performance and numbers - // like that are unrealistic. - exp int32 -} - -// New returns a new fixed-point decimal, value * 10 ^ exp. -func New(value int64, exp int32) Decimal { - return Decimal{ - value: big.NewInt(value), - exp: exp, - } -} - -// NewFromInt converts a int64 to Decimal. -// -// Example: -// -// NewFromInt(123).String() // output: "123" -// NewFromInt(-10).String() // output: "-10" -func NewFromInt(value int64) Decimal { - return Decimal{ - value: big.NewInt(value), - exp: 0, - } -} - -// NewFromInt32 converts a int32 to Decimal. -// -// Example: -// -// NewFromInt(123).String() // output: "123" -// NewFromInt(-10).String() // output: "-10" -func NewFromInt32(value int32) Decimal { - return Decimal{ - value: big.NewInt(int64(value)), - exp: 0, - } -} - -// NewFromBigInt returns a new Decimal from a big.Int, value * 10 ^ exp -func NewFromBigInt(value *big.Int, exp int32) Decimal { - return Decimal{ - value: big.NewInt(0).Set(value), - exp: exp, - } -} - -// NewFromString returns a new Decimal from a string representation. -// Trailing zeroes are not trimmed. -// -// Example: -// -// d, err := NewFromString("-123.45") -// d2, err := NewFromString(".0001") -// d3, err := NewFromString("1.47000") -// -func NewFromString(value string) (Decimal, error) { - originalInput := value - var intString string - var exp int64 - - // Check if number is using scientific notation - eIndex := strings.IndexAny(value, "Ee") - if eIndex != -1 { - expInt, err := strconv.ParseInt(value[eIndex+1:], 10, 32) - if err != nil { - if e, ok := err.(*strconv.NumError); ok && e.Err == strconv.ErrRange { - return Decimal{}, fmt.Errorf("can't convert %s to decimal: fractional part too long", value) - } - return Decimal{}, fmt.Errorf("can't convert %s to decimal: exponent is not numeric", value) - } - value = value[:eIndex] - exp = expInt - } - - parts := strings.Split(value, ".") - if len(parts) == 1 { - // There is no decimal point, we can just parse the original string as - // an int - intString = value - } else if len(parts) == 2 { - intString = parts[0] + parts[1] - expInt := -len(parts[1]) - exp += int64(expInt) - } else { - return Decimal{}, fmt.Errorf("can't convert %s to decimal: too many .s", value) - } - - dValue := new(big.Int) - _, ok := dValue.SetString(intString, 10) - if !ok { - return Decimal{}, fmt.Errorf("can't convert %s to decimal", value) - } - - if exp < math.MinInt32 || exp > math.MaxInt32 { - // NOTE(vadim): I doubt a string could realistically be this long - return Decimal{}, fmt.Errorf("can't convert %s to decimal: fractional part too long", originalInput) - } - - return Decimal{ - value: dValue, - exp: int32(exp), - }, nil -} - -// RequireFromString returns a new Decimal from a string representation -// or panics if NewFromString would have returned an error. -// -// Example: -// -// d := RequireFromString("-123.45") -// d2 := RequireFromString(".0001") -// -func RequireFromString(value string) Decimal { - dec, err := NewFromString(value) - if err != nil { - panic(err) - } - return dec -} - -// NewFromFloat converts a float64 to Decimal. -// -// The converted number will contain the number of significant digits that can be -// represented in a float with reliable roundtrip. -// This is typically 15 digits, but may be more in some cases. -// See https://www.exploringbinary.com/decimal-precision-of-binary-floating-point-numbers/ for more information. -// -// For slightly faster conversion, use NewFromFloatWithExponent where you can specify the precision in absolute terms. -// -// NOTE: this will panic on NaN, +/-inf -func NewFromFloat(value float64) Decimal { - if value == 0 { - return New(0, 0) - } - return newFromFloat(value, math.Float64bits(value), &float64info) -} - -// NewFromFloat32 converts a float32 to Decimal. -// -// The converted number will contain the number of significant digits that can be -// represented in a float with reliable roundtrip. -// This is typically 6-8 digits depending on the input. -// See https://www.exploringbinary.com/decimal-precision-of-binary-floating-point-numbers/ for more information. -// -// For slightly faster conversion, use NewFromFloatWithExponent where you can specify the precision in absolute terms. -// -// NOTE: this will panic on NaN, +/-inf -func NewFromFloat32(value float32) Decimal { - if value == 0 { - return New(0, 0) - } - // XOR is workaround for https://github.com/golang/go/issues/26285 - a := math.Float32bits(value) ^ 0x80808080 - return newFromFloat(float64(value), uint64(a)^0x80808080, &float32info) -} - -func newFromFloat(val float64, bits uint64, flt *floatInfo) Decimal { - if math.IsNaN(val) || math.IsInf(val, 0) { - panic(fmt.Sprintf("Cannot create a Decimal from %v", val)) - } - exp := int(bits>>flt.mantbits) & (1<>(flt.expbits+flt.mantbits) != 0 - - roundShortest(&d, mant, exp, flt) - // If less than 19 digits, we can do calculation in an int64. - if d.nd < 19 { - tmp := int64(0) - m := int64(1) - for i := d.nd - 1; i >= 0; i-- { - tmp += m * int64(d.d[i]-'0') - m *= 10 - } - if d.neg { - tmp *= -1 - } - return Decimal{value: big.NewInt(tmp), exp: int32(d.dp) - int32(d.nd)} - } - dValue := new(big.Int) - dValue, ok := dValue.SetString(string(d.d[:d.nd]), 10) - if ok { - return Decimal{value: dValue, exp: int32(d.dp) - int32(d.nd)} - } - - return NewFromFloatWithExponent(val, int32(d.dp)-int32(d.nd)) -} - -// NewFromFloatWithExponent converts a float64 to Decimal, with an arbitrary -// number of fractional digits. -// -// Example: -// -// NewFromFloatWithExponent(123.456, -2).String() // output: "123.46" -// -func NewFromFloatWithExponent(value float64, exp int32) Decimal { - if math.IsNaN(value) || math.IsInf(value, 0) { - panic(fmt.Sprintf("Cannot create a Decimal from %v", value)) - } - - bits := math.Float64bits(value) - mant := bits & (1<<52 - 1) - exp2 := int32((bits >> 52) & (1<<11 - 1)) - sign := bits >> 63 - - if exp2 == 0 { - // specials - if mant == 0 { - return Decimal{} - } - // subnormal - exp2++ - } else { - // normal - mant |= 1 << 52 - } - - exp2 -= 1023 + 52 - - // normalizing base-2 values - for mant&1 == 0 { - mant = mant >> 1 - exp2++ - } - - // maximum number of fractional base-10 digits to represent 2^N exactly cannot be more than -N if N<0 - if exp < 0 && exp < exp2 { - if exp2 < 0 { - exp = exp2 - } else { - exp = 0 - } - } - - // representing 10^M * 2^N as 5^M * 2^(M+N) - exp2 -= exp - - temp := big.NewInt(1) - dMant := big.NewInt(int64(mant)) - - // applying 5^M - if exp > 0 { - temp = temp.SetInt64(int64(exp)) - temp = temp.Exp(fiveInt, temp, nil) - } else if exp < 0 { - temp = temp.SetInt64(-int64(exp)) - temp = temp.Exp(fiveInt, temp, nil) - dMant = dMant.Mul(dMant, temp) - temp = temp.SetUint64(1) - } - - // applying 2^(M+N) - if exp2 > 0 { - dMant = dMant.Lsh(dMant, uint(exp2)) - } else if exp2 < 0 { - temp = temp.Lsh(temp, uint(-exp2)) - } - - // rounding and downscaling - if exp > 0 || exp2 < 0 { - halfDown := new(big.Int).Rsh(temp, 1) - dMant = dMant.Add(dMant, halfDown) - dMant = dMant.Quo(dMant, temp) - } - - if sign == 1 { - dMant = dMant.Neg(dMant) - } - - return Decimal{ - value: dMant, - exp: exp, - } -} - -// rescale returns a rescaled version of the decimal. Returned -// decimal may be less precise if the given exponent is bigger -// than the initial exponent of the Decimal. -// NOTE: this will truncate, NOT round -// -// Example: -// -// d := New(12345, -4) -// d2 := d.rescale(-1) -// d3 := d2.rescale(-4) -// println(d1) -// println(d2) -// println(d3) -// -// Output: -// -// 1.2345 -// 1.2 -// 1.2000 -// -func (d Decimal) rescale(exp int32) Decimal { - d.ensureInitialized() - - if d.exp == exp { - return Decimal{ - new(big.Int).Set(d.value), - d.exp, - } - } - - // NOTE(vadim): must convert exps to float64 before - to prevent overflow - diff := math.Abs(float64(exp) - float64(d.exp)) - value := new(big.Int).Set(d.value) - - expScale := new(big.Int).Exp(tenInt, big.NewInt(int64(diff)), nil) - if exp > d.exp { - value = value.Quo(value, expScale) - } else if exp < d.exp { - value = value.Mul(value, expScale) - } - - return Decimal{ - value: value, - exp: exp, - } -} - -// Abs returns the absolute value of the decimal. -func (d Decimal) Abs() Decimal { - d.ensureInitialized() - d2Value := new(big.Int).Abs(d.value) - return Decimal{ - value: d2Value, - exp: d.exp, - } -} - -// Add returns d + d2. -func (d Decimal) Add(d2 Decimal) Decimal { - rd, rd2 := RescalePair(d, d2) - - d3Value := new(big.Int).Add(rd.value, rd2.value) - return Decimal{ - value: d3Value, - exp: rd.exp, - } -} - -// Sub returns d - d2. -func (d Decimal) Sub(d2 Decimal) Decimal { - rd, rd2 := RescalePair(d, d2) - - d3Value := new(big.Int).Sub(rd.value, rd2.value) - return Decimal{ - value: d3Value, - exp: rd.exp, - } -} - -// Neg returns -d. -func (d Decimal) Neg() Decimal { - d.ensureInitialized() - val := new(big.Int).Neg(d.value) - return Decimal{ - value: val, - exp: d.exp, - } -} - -// Mul returns d * d2. -func (d Decimal) Mul(d2 Decimal) Decimal { - d.ensureInitialized() - d2.ensureInitialized() - - expInt64 := int64(d.exp) + int64(d2.exp) - if expInt64 > math.MaxInt32 || expInt64 < math.MinInt32 { - // NOTE(vadim): better to panic than give incorrect results, as - // Decimals are usually used for money - panic(fmt.Sprintf("exponent %v overflows an int32!", expInt64)) - } - - d3Value := new(big.Int).Mul(d.value, d2.value) - return Decimal{ - value: d3Value, - exp: int32(expInt64), - } -} - -// Shift shifts the decimal in base 10. -// It shifts left when shift is positive and right if shift is negative. -// In simpler terms, the given value for shift is added to the exponent -// of the decimal. -func (d Decimal) Shift(shift int32) Decimal { - d.ensureInitialized() - return Decimal{ - value: new(big.Int).Set(d.value), - exp: d.exp + shift, - } -} - -// Div returns d / d2. If it doesn't divide exactly, the result will have -// DivisionPrecision digits after the decimal point. -func (d Decimal) Div(d2 Decimal) Decimal { - return d.DivRound(d2, int32(DivisionPrecision)) -} - -// QuoRem does divsion with remainder -// d.QuoRem(d2,precision) returns quotient q and remainder r such that -// d = d2 * q + r, q an integer multiple of 10^(-precision) -// 0 <= r < abs(d2) * 10 ^(-precision) if d>=0 -// 0 >= r > -abs(d2) * 10 ^(-precision) if d<0 -// Note that precision<0 is allowed as input. -func (d Decimal) QuoRem(d2 Decimal, precision int32) (Decimal, Decimal) { - d.ensureInitialized() - d2.ensureInitialized() - if d2.value.Sign() == 0 { - panic("decimal division by 0") - } - scale := -precision - e := int64(d.exp - d2.exp - scale) - if e > math.MaxInt32 || e < math.MinInt32 { - panic("overflow in decimal QuoRem") - } - var aa, bb, expo big.Int - var scalerest int32 - // d = a 10^ea - // d2 = b 10^eb - if e < 0 { - aa = *d.value - expo.SetInt64(-e) - bb.Exp(tenInt, &expo, nil) - bb.Mul(d2.value, &bb) - scalerest = d.exp - // now aa = a - // bb = b 10^(scale + eb - ea) - } else { - expo.SetInt64(e) - aa.Exp(tenInt, &expo, nil) - aa.Mul(d.value, &aa) - bb = *d2.value - scalerest = scale + d2.exp - // now aa = a ^ (ea - eb - scale) - // bb = b - } - var q, r big.Int - q.QuoRem(&aa, &bb, &r) - dq := Decimal{value: &q, exp: scale} - dr := Decimal{value: &r, exp: scalerest} - return dq, dr -} - -// DivRound divides and rounds to a given precision -// i.e. to an integer multiple of 10^(-precision) -// for a positive quotient digit 5 is rounded up, away from 0 -// if the quotient is negative then digit 5 is rounded down, away from 0 -// Note that precision<0 is allowed as input. -func (d Decimal) DivRound(d2 Decimal, precision int32) Decimal { - // QuoRem already checks initialization - q, r := d.QuoRem(d2, precision) - // the actual rounding decision is based on comparing r*10^precision and d2/2 - // instead compare 2 r 10 ^precision and d2 - var rv2 big.Int - rv2.Abs(r.value) - rv2.Lsh(&rv2, 1) - // now rv2 = abs(r.value) * 2 - r2 := Decimal{value: &rv2, exp: r.exp + precision} - // r2 is now 2 * r * 10 ^ precision - var c = r2.Cmp(d2.Abs()) - - if c < 0 { - return q - } - - if d.value.Sign()*d2.value.Sign() < 0 { - return q.Sub(New(1, -precision)) - } - - return q.Add(New(1, -precision)) -} - -// Mod returns d % d2. -func (d Decimal) Mod(d2 Decimal) Decimal { - quo := d.Div(d2).Truncate(0) - return d.Sub(d2.Mul(quo)) -} - -// Pow returns d to the power d2 -func (d Decimal) Pow(d2 Decimal) Decimal { - var temp Decimal - if d2.IntPart() == 0 { - return NewFromFloat(1) - } - temp = d.Pow(d2.Div(NewFromFloat(2))) - if d2.IntPart()%2 == 0 { - return temp.Mul(temp) - } - if d2.IntPart() > 0 { - return temp.Mul(temp).Mul(d) - } - return temp.Mul(temp).Div(d) -} - -// Cmp compares the numbers represented by d and d2 and returns: -// -// -1 if d < d2 -// 0 if d == d2 -// +1 if d > d2 -// -func (d Decimal) Cmp(d2 Decimal) int { - d.ensureInitialized() - d2.ensureInitialized() - - if d.exp == d2.exp { - return d.value.Cmp(d2.value) - } - - rd, rd2 := RescalePair(d, d2) - - return rd.value.Cmp(rd2.value) -} - -// Equal returns whether the numbers represented by d and d2 are equal. -func (d Decimal) Equal(d2 Decimal) bool { - return d.Cmp(d2) == 0 -} - -// Equals is deprecated, please use Equal method instead -func (d Decimal) Equals(d2 Decimal) bool { - return d.Equal(d2) -} - -// GreaterThan (GT) returns true when d is greater than d2. -func (d Decimal) GreaterThan(d2 Decimal) bool { - return d.Cmp(d2) == 1 -} - -// GreaterThanOrEqual (GTE) returns true when d is greater than or equal to d2. -func (d Decimal) GreaterThanOrEqual(d2 Decimal) bool { - cmp := d.Cmp(d2) - return cmp == 1 || cmp == 0 -} - -// LessThan (LT) returns true when d is less than d2. -func (d Decimal) LessThan(d2 Decimal) bool { - return d.Cmp(d2) == -1 -} - -// LessThanOrEqual (LTE) returns true when d is less than or equal to d2. -func (d Decimal) LessThanOrEqual(d2 Decimal) bool { - cmp := d.Cmp(d2) - return cmp == -1 || cmp == 0 -} - -// Sign returns: -// -// -1 if d < 0 -// 0 if d == 0 -// +1 if d > 0 -// -func (d Decimal) Sign() int { - if d.value == nil { - return 0 - } - return d.value.Sign() -} - -// IsPositive return -// -// true if d > 0 -// false if d == 0 -// false if d < 0 -func (d Decimal) IsPositive() bool { - return d.Sign() == 1 -} - -// IsNegative return -// -// true if d < 0 -// false if d == 0 -// false if d > 0 -func (d Decimal) IsNegative() bool { - return d.Sign() == -1 -} - -// IsZero return -// -// true if d == 0 -// false if d > 0 -// false if d < 0 -func (d Decimal) IsZero() bool { - return d.Sign() == 0 -} - -// Exponent returns the exponent, or scale component of the decimal. -func (d Decimal) Exponent() int32 { - return d.exp -} - -// Coefficient returns the coefficient of the decimal. It is scaled by 10^Exponent() -func (d Decimal) Coefficient() *big.Int { - d.ensureInitialized() - // we copy the coefficient so that mutating the result does not mutate the - // Decimal. - return big.NewInt(0).Set(d.value) -} - -// IntPart returns the integer component of the decimal. -func (d Decimal) IntPart() int64 { - scaledD := d.rescale(0) - return scaledD.value.Int64() -} - -// BigInt returns integer component of the decimal as a BigInt. -func (d Decimal) BigInt() *big.Int { - scaledD := d.rescale(0) - i := &big.Int{} - i.SetString(scaledD.String(), 10) - return i -} - -// BigFloat returns decimal as BigFloat. -// Be aware that casting decimal to BigFloat might cause a loss of precision. -func (d Decimal) BigFloat() *big.Float { - f := &big.Float{} - f.SetString(d.String()) - return f -} - -// Rat returns a rational number representation of the decimal. -func (d Decimal) Rat() *big.Rat { - d.ensureInitialized() - if d.exp <= 0 { - // NOTE(vadim): must negate after casting to prevent int32 overflow - denom := new(big.Int).Exp(tenInt, big.NewInt(-int64(d.exp)), nil) - return new(big.Rat).SetFrac(d.value, denom) - } - - mul := new(big.Int).Exp(tenInt, big.NewInt(int64(d.exp)), nil) - num := new(big.Int).Mul(d.value, mul) - return new(big.Rat).SetFrac(num, oneInt) -} - -// Float64 returns the nearest float64 value for d and a bool indicating -// whether f represents d exactly. -// For more details, see the documentation for big.Rat.Float64 -func (d Decimal) Float64() (f float64, exact bool) { - return d.Rat().Float64() -} - -// String returns the string representation of the decimal -// with the fixed point. -// -// Example: -// -// d := New(-12345, -3) -// println(d.String()) -// -// Output: -// -// -12.345 -// -func (d Decimal) String() string { - return d.string(true) -} - -// StringFixed returns a rounded fixed-point string with places digits after -// the decimal point. -// -// Example: -// -// NewFromFloat(0).StringFixed(2) // output: "0.00" -// NewFromFloat(0).StringFixed(0) // output: "0" -// NewFromFloat(5.45).StringFixed(0) // output: "5" -// NewFromFloat(5.45).StringFixed(1) // output: "5.5" -// NewFromFloat(5.45).StringFixed(2) // output: "5.45" -// NewFromFloat(5.45).StringFixed(3) // output: "5.450" -// NewFromFloat(545).StringFixed(-1) // output: "550" -// -func (d Decimal) StringFixed(places int32) string { - rounded := d.Round(places) - return rounded.string(false) -} - -// StringFixedBank returns a banker rounded fixed-point string with places digits -// after the decimal point. -// -// Example: -// -// NewFromFloat(0).StringFixedBank(2) // output: "0.00" -// NewFromFloat(0).StringFixedBank(0) // output: "0" -// NewFromFloat(5.45).StringFixedBank(0) // output: "5" -// NewFromFloat(5.45).StringFixedBank(1) // output: "5.4" -// NewFromFloat(5.45).StringFixedBank(2) // output: "5.45" -// NewFromFloat(5.45).StringFixedBank(3) // output: "5.450" -// NewFromFloat(545).StringFixedBank(-1) // output: "540" -// -func (d Decimal) StringFixedBank(places int32) string { - rounded := d.RoundBank(places) - return rounded.string(false) -} - -// StringFixedCash returns a Swedish/Cash rounded fixed-point string. For -// more details see the documentation at function RoundCash. -func (d Decimal) StringFixedCash(interval uint8) string { - rounded := d.RoundCash(interval) - return rounded.string(false) -} - -// Round rounds the decimal to places decimal places. -// If places < 0, it will round the integer part to the nearest 10^(-places). -// -// Example: -// -// NewFromFloat(5.45).Round(1).String() // output: "5.5" -// NewFromFloat(545).Round(-1).String() // output: "550" -// -func (d Decimal) Round(places int32) Decimal { - // truncate to places + 1 - ret := d.rescale(-places - 1) - - // add sign(d) * 0.5 - if ret.value.Sign() < 0 { - ret.value.Sub(ret.value, fiveInt) - } else { - ret.value.Add(ret.value, fiveInt) - } - - // floor for positive numbers, ceil for negative numbers - _, m := ret.value.DivMod(ret.value, tenInt, new(big.Int)) - ret.exp++ - if ret.value.Sign() < 0 && m.Cmp(zeroInt) != 0 { - ret.value.Add(ret.value, oneInt) - } - - return ret -} - -// RoundBank rounds the decimal to places decimal places. -// If the final digit to round is equidistant from the nearest two integers the -// rounded value is taken as the even number -// -// If places < 0, it will round the integer part to the nearest 10^(-places). -// -// Examples: -// -// NewFromFloat(5.45).Round(1).String() // output: "5.4" -// NewFromFloat(545).Round(-1).String() // output: "540" -// NewFromFloat(5.46).Round(1).String() // output: "5.5" -// NewFromFloat(546).Round(-1).String() // output: "550" -// NewFromFloat(5.55).Round(1).String() // output: "5.6" -// NewFromFloat(555).Round(-1).String() // output: "560" -// -func (d Decimal) RoundBank(places int32) Decimal { - - round := d.Round(places) - remainder := d.Sub(round).Abs() - - half := New(5, -places-1) - if remainder.Cmp(half) == 0 && round.value.Bit(0) != 0 { - if round.value.Sign() < 0 { - round.value.Add(round.value, oneInt) - } else { - round.value.Sub(round.value, oneInt) - } - } - - return round -} - -// RoundCash aka Cash/Penny/öre rounding rounds decimal to a specific -// interval. The amount payable for a cash transaction is rounded to the nearest -// multiple of the minimum currency unit available. The following intervals are -// available: 5, 10, 25, 50 and 100; any other number throws a panic. -// 5: 5 cent rounding 3.43 => 3.45 -// 10: 10 cent rounding 3.45 => 3.50 (5 gets rounded up) -// 25: 25 cent rounding 3.41 => 3.50 -// 50: 50 cent rounding 3.75 => 4.00 -// 100: 100 cent rounding 3.50 => 4.00 -// For more details: https://en.wikipedia.org/wiki/Cash_rounding -func (d Decimal) RoundCash(interval uint8) Decimal { - var iVal *big.Int - switch interval { - case 5: - iVal = twentyInt - case 10: - iVal = tenInt - case 25: - iVal = fourInt - case 50: - iVal = twoInt - case 100: - iVal = oneInt - default: - panic(fmt.Sprintf("Decimal does not support this Cash rounding interval `%d`. Supported: 5, 10, 25, 50, 100", interval)) - } - dVal := Decimal{ - value: iVal, - } - - // TODO: optimize those calculations to reduce the high allocations (~29 allocs). - return d.Mul(dVal).Round(0).Div(dVal).Truncate(2) -} - -// Floor returns the nearest integer value less than or equal to d. -func (d Decimal) Floor() Decimal { - d.ensureInitialized() - - if d.exp >= 0 { - return d - } - - exp := big.NewInt(10) - - // NOTE(vadim): must negate after casting to prevent int32 overflow - exp.Exp(exp, big.NewInt(-int64(d.exp)), nil) - - z := new(big.Int).Div(d.value, exp) - return Decimal{value: z, exp: 0} -} - -// Ceil returns the nearest integer value greater than or equal to d. -func (d Decimal) Ceil() Decimal { - d.ensureInitialized() - - if d.exp >= 0 { - return d - } - - exp := big.NewInt(10) - - // NOTE(vadim): must negate after casting to prevent int32 overflow - exp.Exp(exp, big.NewInt(-int64(d.exp)), nil) - - z, m := new(big.Int).DivMod(d.value, exp, new(big.Int)) - if m.Cmp(zeroInt) != 0 { - z.Add(z, oneInt) - } - return Decimal{value: z, exp: 0} -} - -// Truncate truncates off digits from the number, without rounding. -// -// NOTE: precision is the last digit that will not be truncated (must be >= 0). -// -// Example: -// -// decimal.NewFromString("123.456").Truncate(2).String() // "123.45" -// -func (d Decimal) Truncate(precision int32) Decimal { - d.ensureInitialized() - if precision >= 0 && -precision > d.exp { - return d.rescale(-precision) - } - return d -} - -// UnmarshalJSON implements the json.Unmarshaler interface. -func (d *Decimal) UnmarshalJSON(decimalBytes []byte) error { - if string(decimalBytes) == "null" { - return nil - } - - str, err := unquoteIfQuoted(decimalBytes) - if err != nil { - return fmt.Errorf("error decoding string '%s': %s", decimalBytes, err) - } - - decimal, err := NewFromString(str) - *d = decimal - if err != nil { - return fmt.Errorf("error decoding string '%s': %s", str, err) - } - return nil -} - -// MarshalJSON implements the json.Marshaler interface. -func (d Decimal) MarshalJSON() ([]byte, error) { - var str string - if MarshalJSONWithoutQuotes { - str = d.String() - } else { - str = "\"" + d.String() + "\"" - } - return []byte(str), nil -} - -// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. As a string representation -// is already used when encoding to text, this method stores that string as []byte -func (d *Decimal) UnmarshalBinary(data []byte) error { - // Extract the exponent - d.exp = int32(binary.BigEndian.Uint32(data[:4])) - - // Extract the value - d.value = new(big.Int) - return d.value.GobDecode(data[4:]) -} - -// MarshalBinary implements the encoding.BinaryMarshaler interface. -func (d Decimal) MarshalBinary() (data []byte, err error) { - // Write the exponent first since it's a fixed size - v1 := make([]byte, 4) - binary.BigEndian.PutUint32(v1, uint32(d.exp)) - - // Add the value - var v2 []byte - if v2, err = d.value.GobEncode(); err != nil { - return - } - - // Return the byte array - data = append(v1, v2...) - return -} - -// Scan implements the sql.Scanner interface for database deserialization. -func (d *Decimal) Scan(value interface{}) error { - // first try to see if the data is stored in database as a Numeric datatype - switch v := value.(type) { - - case float32: - *d = NewFromFloat(float64(v)) - return nil - - case float64: - // numeric in sqlite3 sends us float64 - *d = NewFromFloat(v) - return nil - - case int64: - // at least in sqlite3 when the value is 0 in db, the data is sent - // to us as an int64 instead of a float64 ... - *d = New(v, 0) - return nil - - default: - // default is trying to interpret value stored as string - str, err := unquoteIfQuoted(v) - if err != nil { - return err - } - *d, err = NewFromString(str) - return err - } -} - -// Value implements the driver.Valuer interface for database serialization. -func (d Decimal) Value() (driver.Value, error) { - return d.String(), nil -} - -// UnmarshalText implements the encoding.TextUnmarshaler interface for XML -// deserialization. -func (d *Decimal) UnmarshalText(text []byte) error { - str := string(text) - - dec, err := NewFromString(str) - *d = dec - if err != nil { - return fmt.Errorf("error decoding string '%s': %s", str, err) - } - - return nil -} - -// MarshalText implements the encoding.TextMarshaler interface for XML -// serialization. -func (d Decimal) MarshalText() (text []byte, err error) { - return []byte(d.String()), nil -} - -// GobEncode implements the gob.GobEncoder interface for gob serialization. -func (d Decimal) GobEncode() ([]byte, error) { - return d.MarshalBinary() -} - -// GobDecode implements the gob.GobDecoder interface for gob serialization. -func (d *Decimal) GobDecode(data []byte) error { - return d.UnmarshalBinary(data) -} - -// StringScaled first scales the decimal then calls .String() on it. -// NOTE: buggy, unintuitive, and DEPRECATED! Use StringFixed instead. -func (d Decimal) StringScaled(exp int32) string { - return d.rescale(exp).String() -} - -func (d Decimal) string(trimTrailingZeros bool) string { - if d.exp >= 0 { - return d.rescale(0).value.String() - } - - abs := new(big.Int).Abs(d.value) - str := abs.String() - - var intPart, fractionalPart string - - // NOTE(vadim): this cast to int will cause bugs if d.exp == INT_MIN - // and you are on a 32-bit machine. Won't fix this super-edge case. - dExpInt := int(d.exp) - if len(str) > -dExpInt { - intPart = str[:len(str)+dExpInt] - fractionalPart = str[len(str)+dExpInt:] - } else { - intPart = "0" - - num0s := -dExpInt - len(str) - fractionalPart = strings.Repeat("0", num0s) + str - } - - if trimTrailingZeros { - i := len(fractionalPart) - 1 - for ; i >= 0; i-- { - if fractionalPart[i] != '0' { - break - } - } - fractionalPart = fractionalPart[:i+1] - } - - number := intPart - if len(fractionalPart) > 0 { - number += "." + fractionalPart - } - - if d.value.Sign() < 0 { - return "-" + number - } - - return number -} - -func (d *Decimal) ensureInitialized() { - if d.value == nil { - d.value = new(big.Int) - } -} - -// Min returns the smallest Decimal that was passed in the arguments. -// -// To call this function with an array, you must do: -// -// Min(arr[0], arr[1:]...) -// -// This makes it harder to accidentally call Min with 0 arguments. -func Min(first Decimal, rest ...Decimal) Decimal { - ans := first - for _, item := range rest { - if item.Cmp(ans) < 0 { - ans = item - } - } - return ans -} - -// Max returns the largest Decimal that was passed in the arguments. -// -// To call this function with an array, you must do: -// -// Max(arr[0], arr[1:]...) -// -// This makes it harder to accidentally call Max with 0 arguments. -func Max(first Decimal, rest ...Decimal) Decimal { - ans := first - for _, item := range rest { - if item.Cmp(ans) > 0 { - ans = item - } - } - return ans -} - -// Sum returns the combined total of the provided first and rest Decimals -func Sum(first Decimal, rest ...Decimal) Decimal { - total := first - for _, item := range rest { - total = total.Add(item) - } - - return total -} - -// Avg returns the average value of the provided first and rest Decimals -func Avg(first Decimal, rest ...Decimal) Decimal { - count := New(int64(len(rest)+1), 0) - sum := Sum(first, rest...) - return sum.Div(count) -} - -// RescalePair rescales two decimals to common exponential value (minimal exp of both decimals) -func RescalePair(d1 Decimal, d2 Decimal) (Decimal, Decimal) { - d1.ensureInitialized() - d2.ensureInitialized() - - if d1.exp == d2.exp { - return d1, d2 - } - - baseScale := min(d1.exp, d2.exp) - if baseScale != d1.exp { - return d1.rescale(baseScale), d2 - } - return d1, d2.rescale(baseScale) -} - -func min(x, y int32) int32 { - if x >= y { - return y - } - return x -} - -func unquoteIfQuoted(value interface{}) (string, error) { - var bytes []byte - - switch v := value.(type) { - case string: - bytes = []byte(v) - case []byte: - bytes = v - default: - return "", fmt.Errorf("could not convert value '%+v' to byte array of type '%T'", - value, value) - } - - // If the amount is quoted, strip the quotes - if len(bytes) > 2 && bytes[0] == '"' && bytes[len(bytes)-1] == '"' { - bytes = bytes[1 : len(bytes)-1] - } - return string(bytes), nil -} - -// NullDecimal represents a nullable decimal with compatibility for -// scanning null values from the database. -type NullDecimal struct { - Decimal Decimal - Valid bool -} - -// Scan implements the sql.Scanner interface for database deserialization. -func (d *NullDecimal) Scan(value interface{}) error { - if value == nil { - d.Valid = false - return nil - } - d.Valid = true - return d.Decimal.Scan(value) -} - -// Value implements the driver.Valuer interface for database serialization. -func (d NullDecimal) Value() (driver.Value, error) { - if !d.Valid { - return nil, nil - } - return d.Decimal.Value() -} - -// UnmarshalJSON implements the json.Unmarshaler interface. -func (d *NullDecimal) UnmarshalJSON(decimalBytes []byte) error { - if string(decimalBytes) == "null" { - d.Valid = false - return nil - } - d.Valid = true - return d.Decimal.UnmarshalJSON(decimalBytes) -} - -// MarshalJSON implements the json.Marshaler interface. -func (d NullDecimal) MarshalJSON() ([]byte, error) { - if !d.Valid { - return []byte("null"), nil - } - return d.Decimal.MarshalJSON() -} - -// Trig functions - -// Atan returns the arctangent, in radians, of x. -func (d Decimal) Atan() Decimal { - if d.Equal(NewFromFloat(0.0)) { - return d - } - if d.GreaterThan(NewFromFloat(0.0)) { - return d.satan() - } - return d.Neg().satan().Neg() -} - -func (d Decimal) xatan() Decimal { - P0 := NewFromFloat(-8.750608600031904122785e-01) - P1 := NewFromFloat(-1.615753718733365076637e+01) - P2 := NewFromFloat(-7.500855792314704667340e+01) - P3 := NewFromFloat(-1.228866684490136173410e+02) - P4 := NewFromFloat(-6.485021904942025371773e+01) - Q0 := NewFromFloat(2.485846490142306297962e+01) - Q1 := NewFromFloat(1.650270098316988542046e+02) - Q2 := NewFromFloat(4.328810604912902668951e+02) - Q3 := NewFromFloat(4.853903996359136964868e+02) - Q4 := NewFromFloat(1.945506571482613964425e+02) - z := d.Mul(d) - b1 := P0.Mul(z).Add(P1).Mul(z).Add(P2).Mul(z).Add(P3).Mul(z).Add(P4).Mul(z) - b2 := z.Add(Q0).Mul(z).Add(Q1).Mul(z).Add(Q2).Mul(z).Add(Q3).Mul(z).Add(Q4) - z = b1.Div(b2) - z = d.Mul(z).Add(d) - return z -} - -// satan reduces its argument (known to be positive) -// to the range [0, 0.66] and calls xatan. -func (d Decimal) satan() Decimal { - Morebits := NewFromFloat(6.123233995736765886130e-17) // pi/2 = PIO2 + Morebits - Tan3pio8 := NewFromFloat(2.41421356237309504880) // tan(3*pi/8) - pi := NewFromFloat(3.14159265358979323846264338327950288419716939937510582097494459) - - if d.LessThanOrEqual(NewFromFloat(0.66)) { - return d.xatan() - } - if d.GreaterThan(Tan3pio8) { - return pi.Div(NewFromFloat(2.0)).Sub(NewFromFloat(1.0).Div(d).xatan()).Add(Morebits) - } - return pi.Div(NewFromFloat(4.0)).Add((d.Sub(NewFromFloat(1.0)).Div(d.Add(NewFromFloat(1.0)))).xatan()).Add(NewFromFloat(0.5).Mul(Morebits)) -} - -// sin coefficients -var _sin = [...]Decimal{ - NewFromFloat(1.58962301576546568060e-10), // 0x3de5d8fd1fd19ccd - NewFromFloat(-2.50507477628578072866e-8), // 0xbe5ae5e5a9291f5d - NewFromFloat(2.75573136213857245213e-6), // 0x3ec71de3567d48a1 - NewFromFloat(-1.98412698295895385996e-4), // 0xbf2a01a019bfdf03 - NewFromFloat(8.33333333332211858878e-3), // 0x3f8111111110f7d0 - NewFromFloat(-1.66666666666666307295e-1), // 0xbfc5555555555548 -} - -// Sin returns the sine of the radian argument x. -func (d Decimal) Sin() Decimal { - PI4A := NewFromFloat(7.85398125648498535156e-1) // 0x3fe921fb40000000, Pi/4 split into three parts - PI4B := NewFromFloat(3.77489470793079817668e-8) // 0x3e64442d00000000, - PI4C := NewFromFloat(2.69515142907905952645e-15) // 0x3ce8469898cc5170, - M4PI := NewFromFloat(1.273239544735162542821171882678754627704620361328125) // 4/pi - - if d.Equal(NewFromFloat(0.0)) { - return d - } - // make argument positive but save the sign - sign := false - if d.LessThan(NewFromFloat(0.0)) { - d = d.Neg() - sign = true - } - - j := d.Mul(M4PI).IntPart() // integer part of x/(Pi/4), as integer for tests on the phase angle - y := NewFromFloat(float64(j)) // integer part of x/(Pi/4), as float - - // map zeros to origin - if j&1 == 1 { - j++ - y = y.Add(NewFromFloat(1.0)) - } - j &= 7 // octant modulo 2Pi radians (360 degrees) - // reflect in x axis - if j > 3 { - sign = !sign - j -= 4 - } - z := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic - zz := z.Mul(z) - - if j == 1 || j == 2 { - w := zz.Mul(zz).Mul(_cos[0].Mul(zz).Add(_cos[1]).Mul(zz).Add(_cos[2]).Mul(zz).Add(_cos[3]).Mul(zz).Add(_cos[4]).Mul(zz).Add(_cos[5])) - y = NewFromFloat(1.0).Sub(NewFromFloat(0.5).Mul(zz)).Add(w) - } else { - y = z.Add(z.Mul(zz).Mul(_sin[0].Mul(zz).Add(_sin[1]).Mul(zz).Add(_sin[2]).Mul(zz).Add(_sin[3]).Mul(zz).Add(_sin[4]).Mul(zz).Add(_sin[5]))) - } - if sign { - y = y.Neg() - } - return y -} - -// cos coefficients -var _cos = [...]Decimal{ - NewFromFloat(-1.13585365213876817300e-11), // 0xbda8fa49a0861a9b - NewFromFloat(2.08757008419747316778e-9), // 0x3e21ee9d7b4e3f05 - NewFromFloat(-2.75573141792967388112e-7), // 0xbe927e4f7eac4bc6 - NewFromFloat(2.48015872888517045348e-5), // 0x3efa01a019c844f5 - NewFromFloat(-1.38888888888730564116e-3), // 0xbf56c16c16c14f91 - NewFromFloat(4.16666666666665929218e-2), // 0x3fa555555555554b -} - -// Cos returns the cosine of the radian argument x. -func (d Decimal) Cos() Decimal { - - PI4A := NewFromFloat(7.85398125648498535156e-1) // 0x3fe921fb40000000, Pi/4 split into three parts - PI4B := NewFromFloat(3.77489470793079817668e-8) // 0x3e64442d00000000, - PI4C := NewFromFloat(2.69515142907905952645e-15) // 0x3ce8469898cc5170, - M4PI := NewFromFloat(1.273239544735162542821171882678754627704620361328125) // 4/pi - - // make argument positive - sign := false - if d.LessThan(NewFromFloat(0.0)) { - d = d.Neg() - } - - j := d.Mul(M4PI).IntPart() // integer part of x/(Pi/4), as integer for tests on the phase angle - y := NewFromFloat(float64(j)) // integer part of x/(Pi/4), as float - - // map zeros to origin - if j&1 == 1 { - j++ - y = y.Add(NewFromFloat(1.0)) - } - j &= 7 // octant modulo 2Pi radians (360 degrees) - // reflect in x axis - if j > 3 { - sign = !sign - j -= 4 - } - if j > 1 { - sign = !sign - } - - z := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic - zz := z.Mul(z) - - if j == 1 || j == 2 { - y = z.Add(z.Mul(zz).Mul(_sin[0].Mul(zz).Add(_sin[1]).Mul(zz).Add(_sin[2]).Mul(zz).Add(_sin[3]).Mul(zz).Add(_sin[4]).Mul(zz).Add(_sin[5]))) - } else { - w := zz.Mul(zz).Mul(_cos[0].Mul(zz).Add(_cos[1]).Mul(zz).Add(_cos[2]).Mul(zz).Add(_cos[3]).Mul(zz).Add(_cos[4]).Mul(zz).Add(_cos[5])) - y = NewFromFloat(1.0).Sub(NewFromFloat(0.5).Mul(zz)).Add(w) - } - if sign { - y = y.Neg() - } - return y -} - -var _tanP = [...]Decimal{ - NewFromFloat(-1.30936939181383777646e+4), // 0xc0c992d8d24f3f38 - NewFromFloat(1.15351664838587416140e+6), // 0x413199eca5fc9ddd - NewFromFloat(-1.79565251976484877988e+7), // 0xc1711fead3299176 -} -var _tanQ = [...]Decimal{ - NewFromFloat(1.00000000000000000000e+0), - NewFromFloat(1.36812963470692954678e+4), //0x40cab8a5eeb36572 - NewFromFloat(-1.32089234440210967447e+6), //0xc13427bc582abc96 - NewFromFloat(2.50083801823357915839e+7), //0x4177d98fc2ead8ef - NewFromFloat(-5.38695755929454629881e+7), //0xc189afe03cbe5a31 -} - -// Tan returns the tangent of the radian argument x. -func (d Decimal) Tan() Decimal { - - PI4A := NewFromFloat(7.85398125648498535156e-1) // 0x3fe921fb40000000, Pi/4 split into three parts - PI4B := NewFromFloat(3.77489470793079817668e-8) // 0x3e64442d00000000, - PI4C := NewFromFloat(2.69515142907905952645e-15) // 0x3ce8469898cc5170, - M4PI := NewFromFloat(1.273239544735162542821171882678754627704620361328125) // 4/pi - - if d.Equal(NewFromFloat(0.0)) { - return d - } - - // make argument positive but save the sign - sign := false - if d.LessThan(NewFromFloat(0.0)) { - d = d.Neg() - sign = true - } - - j := d.Mul(M4PI).IntPart() // integer part of x/(Pi/4), as integer for tests on the phase angle - y := NewFromFloat(float64(j)) // integer part of x/(Pi/4), as float - - // map zeros to origin - if j&1 == 1 { - j++ - y = y.Add(NewFromFloat(1.0)) - } - - z := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic - zz := z.Mul(z) - - if zz.GreaterThan(NewFromFloat(1e-14)) { - w := zz.Mul(_tanP[0].Mul(zz).Add(_tanP[1]).Mul(zz).Add(_tanP[2])) - x := zz.Add(_tanQ[1]).Mul(zz).Add(_tanQ[2]).Mul(zz).Add(_tanQ[3]).Mul(zz).Add(_tanQ[4]) - y = z.Add(z.Mul(w.Div(x))) - } else { - y = z - } - if j&2 == 2 { - y = NewFromFloat(-1.0).Div(y) - } - if sign { - y = y.Neg() - } - return y -} diff --git a/vendor/github.com/shopspring/decimal/rounding.go b/vendor/github.com/shopspring/decimal/rounding.go deleted file mode 100644 index 8008f55cb980..000000000000 --- a/vendor/github.com/shopspring/decimal/rounding.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Multiprecision decimal numbers. -// For floating-point formatting only; not general purpose. -// Only operations are assign and (binary) left/right shift. -// Can do binary floating point in multiprecision decimal precisely -// because 2 divides 10; cannot do decimal floating point -// in multiprecision binary precisely. - -package decimal - -type floatInfo struct { - mantbits uint - expbits uint - bias int -} - -var float32info = floatInfo{23, 8, -127} -var float64info = floatInfo{52, 11, -1023} - -// roundShortest rounds d (= mant * 2^exp) to the shortest number of digits -// that will let the original floating point value be precisely reconstructed. -func roundShortest(d *decimal, mant uint64, exp int, flt *floatInfo) { - // If mantissa is zero, the number is zero; stop now. - if mant == 0 { - d.nd = 0 - return - } - - // Compute upper and lower such that any decimal number - // between upper and lower (possibly inclusive) - // will round to the original floating point number. - - // We may see at once that the number is already shortest. - // - // Suppose d is not denormal, so that 2^exp <= d < 10^dp. - // The closest shorter number is at least 10^(dp-nd) away. - // The lower/upper bounds computed below are at distance - // at most 2^(exp-mantbits). - // - // So the number is already shortest if 10^(dp-nd) > 2^(exp-mantbits), - // or equivalently log2(10)*(dp-nd) > exp-mantbits. - // It is true if 332/100*(dp-nd) >= exp-mantbits (log2(10) > 3.32). - minexp := flt.bias + 1 // minimum possible exponent - if exp > minexp && 332*(d.dp-d.nd) >= 100*(exp-int(flt.mantbits)) { - // The number is already shortest. - return - } - - // d = mant << (exp - mantbits) - // Next highest floating point number is mant+1 << exp-mantbits. - // Our upper bound is halfway between, mant*2+1 << exp-mantbits-1. - upper := new(decimal) - upper.Assign(mant*2 + 1) - upper.Shift(exp - int(flt.mantbits) - 1) - - // d = mant << (exp - mantbits) - // Next lowest floating point number is mant-1 << exp-mantbits, - // unless mant-1 drops the significant bit and exp is not the minimum exp, - // in which case the next lowest is mant*2-1 << exp-mantbits-1. - // Either way, call it mantlo << explo-mantbits. - // Our lower bound is halfway between, mantlo*2+1 << explo-mantbits-1. - var mantlo uint64 - var explo int - if mant > 1<