package consumption

import (
	"context"
	"reflect"

	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

type BudgetResourceGroupFilter struct {

	Dimensions []BudgetResourceGroupFilterDimension `pulumi:"dimensions"`

	Not *BudgetResourceGroupFilterNot `pulumi:"not"`

	Tags []BudgetResourceGroupFilterTag `pulumi:"tags"`
}

type BudgetResourceGroupFilterInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterOutput() BudgetResourceGroupFilterOutput
	ToBudgetResourceGroupFilterOutputWithContext(context.Context) BudgetResourceGroupFilterOutput
}

type BudgetResourceGroupFilterArgs struct {

	Dimensions BudgetResourceGroupFilterDimensionArrayInput `pulumi:"dimensions"`

	Not BudgetResourceGroupFilterNotPtrInput `pulumi:"not"`

	Tags BudgetResourceGroupFilterTagArrayInput `pulumi:"tags"`
}

func (BudgetResourceGroupFilterArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilter)(nil)).Elem()
}

func (i BudgetResourceGroupFilterArgs) ToBudgetResourceGroupFilterOutput() BudgetResourceGroupFilterOutput {
	return i.ToBudgetResourceGroupFilterOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterArgs) ToBudgetResourceGroupFilterOutputWithContext(ctx context.Context) BudgetResourceGroupFilterOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterOutput)
}

func (i BudgetResourceGroupFilterArgs) ToBudgetResourceGroupFilterPtrOutput() BudgetResourceGroupFilterPtrOutput {
	return i.ToBudgetResourceGroupFilterPtrOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterArgs) ToBudgetResourceGroupFilterPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterOutput).ToBudgetResourceGroupFilterPtrOutputWithContext(ctx)
}

type BudgetResourceGroupFilterPtrInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterPtrOutput() BudgetResourceGroupFilterPtrOutput
	ToBudgetResourceGroupFilterPtrOutputWithContext(context.Context) BudgetResourceGroupFilterPtrOutput
}

type budgetResourceGroupFilterPtrType BudgetResourceGroupFilterArgs

func BudgetResourceGroupFilterPtr(v *BudgetResourceGroupFilterArgs) BudgetResourceGroupFilterPtrInput {
	return (*budgetResourceGroupFilterPtrType)(v)
}

func (*budgetResourceGroupFilterPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilter)(nil)).Elem()
}

func (i *budgetResourceGroupFilterPtrType) ToBudgetResourceGroupFilterPtrOutput() BudgetResourceGroupFilterPtrOutput {
	return i.ToBudgetResourceGroupFilterPtrOutputWithContext(context.Background())
}

func (i *budgetResourceGroupFilterPtrType) ToBudgetResourceGroupFilterPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterPtrOutput)
}

type BudgetResourceGroupFilterOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilter)(nil)).Elem()
}

func (o BudgetResourceGroupFilterOutput) ToBudgetResourceGroupFilterOutput() BudgetResourceGroupFilterOutput {
	return o
}

func (o BudgetResourceGroupFilterOutput) ToBudgetResourceGroupFilterOutputWithContext(ctx context.Context) BudgetResourceGroupFilterOutput {
	return o
}

func (o BudgetResourceGroupFilterOutput) ToBudgetResourceGroupFilterPtrOutput() BudgetResourceGroupFilterPtrOutput {
	return o.ToBudgetResourceGroupFilterPtrOutputWithContext(context.Background())
}

func (o BudgetResourceGroupFilterOutput) ToBudgetResourceGroupFilterPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilter) *BudgetResourceGroupFilter {
		return &v
	}).(BudgetResourceGroupFilterPtrOutput)
}

func (o BudgetResourceGroupFilterOutput) Dimensions() BudgetResourceGroupFilterDimensionArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilter) []BudgetResourceGroupFilterDimension { return v.Dimensions }).(BudgetResourceGroupFilterDimensionArrayOutput)
}

func (o BudgetResourceGroupFilterOutput) Not() BudgetResourceGroupFilterNotPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilter) *BudgetResourceGroupFilterNot { return v.Not }).(BudgetResourceGroupFilterNotPtrOutput)
}

func (o BudgetResourceGroupFilterOutput) Tags() BudgetResourceGroupFilterTagArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilter) []BudgetResourceGroupFilterTag { return v.Tags }).(BudgetResourceGroupFilterTagArrayOutput)
}

type BudgetResourceGroupFilterPtrOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilter)(nil)).Elem()
}

func (o BudgetResourceGroupFilterPtrOutput) ToBudgetResourceGroupFilterPtrOutput() BudgetResourceGroupFilterPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterPtrOutput) ToBudgetResourceGroupFilterPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterPtrOutput) Elem() BudgetResourceGroupFilterOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilter) BudgetResourceGroupFilter { return *v }).(BudgetResourceGroupFilterOutput)
}

func (o BudgetResourceGroupFilterPtrOutput) Dimensions() BudgetResourceGroupFilterDimensionArrayOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilter) []BudgetResourceGroupFilterDimension {
		if v == nil {
			return nil
		}
		return v.Dimensions
	}).(BudgetResourceGroupFilterDimensionArrayOutput)
}

func (o BudgetResourceGroupFilterPtrOutput) Not() BudgetResourceGroupFilterNotPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilter) *BudgetResourceGroupFilterNot {
		if v == nil {
			return nil
		}
		return v.Not
	}).(BudgetResourceGroupFilterNotPtrOutput)
}

func (o BudgetResourceGroupFilterPtrOutput) Tags() BudgetResourceGroupFilterTagArrayOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilter) []BudgetResourceGroupFilterTag {
		if v == nil {
			return nil
		}
		return v.Tags
	}).(BudgetResourceGroupFilterTagArrayOutput)
}

type BudgetResourceGroupFilterDimension struct {

	Name string `pulumi:"name"`

	Operator *string `pulumi:"operator"`

	Values []string `pulumi:"values"`
}

type BudgetResourceGroupFilterDimensionInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterDimensionOutput() BudgetResourceGroupFilterDimensionOutput
	ToBudgetResourceGroupFilterDimensionOutputWithContext(context.Context) BudgetResourceGroupFilterDimensionOutput
}

type BudgetResourceGroupFilterDimensionArgs struct {

	Name pulumi.StringInput `pulumi:"name"`

	Operator pulumi.StringPtrInput `pulumi:"operator"`

	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetResourceGroupFilterDimensionArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterDimension)(nil)).Elem()
}

func (i BudgetResourceGroupFilterDimensionArgs) ToBudgetResourceGroupFilterDimensionOutput() BudgetResourceGroupFilterDimensionOutput {
	return i.ToBudgetResourceGroupFilterDimensionOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterDimensionArgs) ToBudgetResourceGroupFilterDimensionOutputWithContext(ctx context.Context) BudgetResourceGroupFilterDimensionOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterDimensionOutput)
}

type BudgetResourceGroupFilterDimensionArrayInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterDimensionArrayOutput() BudgetResourceGroupFilterDimensionArrayOutput
	ToBudgetResourceGroupFilterDimensionArrayOutputWithContext(context.Context) BudgetResourceGroupFilterDimensionArrayOutput
}

type BudgetResourceGroupFilterDimensionArray []BudgetResourceGroupFilterDimensionInput

func (BudgetResourceGroupFilterDimensionArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupFilterDimension)(nil)).Elem()
}

func (i BudgetResourceGroupFilterDimensionArray) ToBudgetResourceGroupFilterDimensionArrayOutput() BudgetResourceGroupFilterDimensionArrayOutput {
	return i.ToBudgetResourceGroupFilterDimensionArrayOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterDimensionArray) ToBudgetResourceGroupFilterDimensionArrayOutputWithContext(ctx context.Context) BudgetResourceGroupFilterDimensionArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterDimensionArrayOutput)
}

type BudgetResourceGroupFilterDimensionOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterDimensionOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterDimension)(nil)).Elem()
}

func (o BudgetResourceGroupFilterDimensionOutput) ToBudgetResourceGroupFilterDimensionOutput() BudgetResourceGroupFilterDimensionOutput {
	return o
}

func (o BudgetResourceGroupFilterDimensionOutput) ToBudgetResourceGroupFilterDimensionOutputWithContext(ctx context.Context) BudgetResourceGroupFilterDimensionOutput {
	return o
}

func (o BudgetResourceGroupFilterDimensionOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterDimension) string { return v.Name }).(pulumi.StringOutput)
}

func (o BudgetResourceGroupFilterDimensionOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterDimension) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

func (o BudgetResourceGroupFilterDimensionOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterDimension) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterDimensionArrayOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterDimensionArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupFilterDimension)(nil)).Elem()
}

func (o BudgetResourceGroupFilterDimensionArrayOutput) ToBudgetResourceGroupFilterDimensionArrayOutput() BudgetResourceGroupFilterDimensionArrayOutput {
	return o
}

func (o BudgetResourceGroupFilterDimensionArrayOutput) ToBudgetResourceGroupFilterDimensionArrayOutputWithContext(ctx context.Context) BudgetResourceGroupFilterDimensionArrayOutput {
	return o
}

func (o BudgetResourceGroupFilterDimensionArrayOutput) Index(i pulumi.IntInput) BudgetResourceGroupFilterDimensionOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetResourceGroupFilterDimension {
		return vs[0].([]BudgetResourceGroupFilterDimension)[vs[1].(int)]
	}).(BudgetResourceGroupFilterDimensionOutput)
}

type BudgetResourceGroupFilterNot struct {

	Dimension *BudgetResourceGroupFilterNotDimension `pulumi:"dimension"`

	Tag *BudgetResourceGroupFilterNotTag `pulumi:"tag"`
}

type BudgetResourceGroupFilterNotInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotOutput() BudgetResourceGroupFilterNotOutput
	ToBudgetResourceGroupFilterNotOutputWithContext(context.Context) BudgetResourceGroupFilterNotOutput
}

type BudgetResourceGroupFilterNotArgs struct {

	Dimension BudgetResourceGroupFilterNotDimensionPtrInput `pulumi:"dimension"`

	Tag BudgetResourceGroupFilterNotTagPtrInput `pulumi:"tag"`
}

func (BudgetResourceGroupFilterNotArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNot)(nil)).Elem()
}

func (i BudgetResourceGroupFilterNotArgs) ToBudgetResourceGroupFilterNotOutput() BudgetResourceGroupFilterNotOutput {
	return i.ToBudgetResourceGroupFilterNotOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotArgs) ToBudgetResourceGroupFilterNotOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotOutput)
}

func (i BudgetResourceGroupFilterNotArgs) ToBudgetResourceGroupFilterNotPtrOutput() BudgetResourceGroupFilterNotPtrOutput {
	return i.ToBudgetResourceGroupFilterNotPtrOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotArgs) ToBudgetResourceGroupFilterNotPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotOutput).ToBudgetResourceGroupFilterNotPtrOutputWithContext(ctx)
}

type BudgetResourceGroupFilterNotPtrInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotPtrOutput() BudgetResourceGroupFilterNotPtrOutput
	ToBudgetResourceGroupFilterNotPtrOutputWithContext(context.Context) BudgetResourceGroupFilterNotPtrOutput
}

type budgetResourceGroupFilterNotPtrType BudgetResourceGroupFilterNotArgs

func BudgetResourceGroupFilterNotPtr(v *BudgetResourceGroupFilterNotArgs) BudgetResourceGroupFilterNotPtrInput {
	return (*budgetResourceGroupFilterNotPtrType)(v)
}

func (*budgetResourceGroupFilterNotPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNot)(nil)).Elem()
}

func (i *budgetResourceGroupFilterNotPtrType) ToBudgetResourceGroupFilterNotPtrOutput() BudgetResourceGroupFilterNotPtrOutput {
	return i.ToBudgetResourceGroupFilterNotPtrOutputWithContext(context.Background())
}

func (i *budgetResourceGroupFilterNotPtrType) ToBudgetResourceGroupFilterNotPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotPtrOutput)
}

type BudgetResourceGroupFilterNotOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNot)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotOutput) ToBudgetResourceGroupFilterNotOutput() BudgetResourceGroupFilterNotOutput {
	return o
}

func (o BudgetResourceGroupFilterNotOutput) ToBudgetResourceGroupFilterNotOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotOutput {
	return o
}

func (o BudgetResourceGroupFilterNotOutput) ToBudgetResourceGroupFilterNotPtrOutput() BudgetResourceGroupFilterNotPtrOutput {
	return o.ToBudgetResourceGroupFilterNotPtrOutputWithContext(context.Background())
}

func (o BudgetResourceGroupFilterNotOutput) ToBudgetResourceGroupFilterNotPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNot) *BudgetResourceGroupFilterNot {
		return &v
	}).(BudgetResourceGroupFilterNotPtrOutput)
}

func (o BudgetResourceGroupFilterNotOutput) Dimension() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNot) *BudgetResourceGroupFilterNotDimension { return v.Dimension }).(BudgetResourceGroupFilterNotDimensionPtrOutput)
}

func (o BudgetResourceGroupFilterNotOutput) Tag() BudgetResourceGroupFilterNotTagPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNot) *BudgetResourceGroupFilterNotTag { return v.Tag }).(BudgetResourceGroupFilterNotTagPtrOutput)
}

type BudgetResourceGroupFilterNotPtrOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNot)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotPtrOutput) ToBudgetResourceGroupFilterNotPtrOutput() BudgetResourceGroupFilterNotPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotPtrOutput) ToBudgetResourceGroupFilterNotPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotPtrOutput) Elem() BudgetResourceGroupFilterNotOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNot) BudgetResourceGroupFilterNot { return *v }).(BudgetResourceGroupFilterNotOutput)
}

func (o BudgetResourceGroupFilterNotPtrOutput) Dimension() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNot) *BudgetResourceGroupFilterNotDimension {
		if v == nil {
			return nil
		}
		return v.Dimension
	}).(BudgetResourceGroupFilterNotDimensionPtrOutput)
}

func (o BudgetResourceGroupFilterNotPtrOutput) Tag() BudgetResourceGroupFilterNotTagPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNot) *BudgetResourceGroupFilterNotTag {
		if v == nil {
			return nil
		}
		return v.Tag
	}).(BudgetResourceGroupFilterNotTagPtrOutput)
}

type BudgetResourceGroupFilterNotDimension struct {

	Name string `pulumi:"name"`

	Operator *string `pulumi:"operator"`

	Values []string `pulumi:"values"`
}

type BudgetResourceGroupFilterNotDimensionInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotDimensionOutput() BudgetResourceGroupFilterNotDimensionOutput
	ToBudgetResourceGroupFilterNotDimensionOutputWithContext(context.Context) BudgetResourceGroupFilterNotDimensionOutput
}

type BudgetResourceGroupFilterNotDimensionArgs struct {

	Name pulumi.StringInput `pulumi:"name"`

	Operator pulumi.StringPtrInput `pulumi:"operator"`

	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetResourceGroupFilterNotDimensionArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNotDimension)(nil)).Elem()
}

func (i BudgetResourceGroupFilterNotDimensionArgs) ToBudgetResourceGroupFilterNotDimensionOutput() BudgetResourceGroupFilterNotDimensionOutput {
	return i.ToBudgetResourceGroupFilterNotDimensionOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotDimensionArgs) ToBudgetResourceGroupFilterNotDimensionOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotDimensionOutput)
}

func (i BudgetResourceGroupFilterNotDimensionArgs) ToBudgetResourceGroupFilterNotDimensionPtrOutput() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return i.ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotDimensionArgs) ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotDimensionOutput).ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(ctx)
}

type BudgetResourceGroupFilterNotDimensionPtrInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotDimensionPtrOutput() BudgetResourceGroupFilterNotDimensionPtrOutput
	ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(context.Context) BudgetResourceGroupFilterNotDimensionPtrOutput
}

type budgetResourceGroupFilterNotDimensionPtrType BudgetResourceGroupFilterNotDimensionArgs

func BudgetResourceGroupFilterNotDimensionPtr(v *BudgetResourceGroupFilterNotDimensionArgs) BudgetResourceGroupFilterNotDimensionPtrInput {
	return (*budgetResourceGroupFilterNotDimensionPtrType)(v)
}

func (*budgetResourceGroupFilterNotDimensionPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNotDimension)(nil)).Elem()
}

func (i *budgetResourceGroupFilterNotDimensionPtrType) ToBudgetResourceGroupFilterNotDimensionPtrOutput() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return i.ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (i *budgetResourceGroupFilterNotDimensionPtrType) ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotDimensionPtrOutput)
}

type BudgetResourceGroupFilterNotDimensionOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotDimensionOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNotDimension)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotDimensionOutput) ToBudgetResourceGroupFilterNotDimensionOutput() BudgetResourceGroupFilterNotDimensionOutput {
	return o
}

func (o BudgetResourceGroupFilterNotDimensionOutput) ToBudgetResourceGroupFilterNotDimensionOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionOutput {
	return o
}

func (o BudgetResourceGroupFilterNotDimensionOutput) ToBudgetResourceGroupFilterNotDimensionPtrOutput() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o.ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (o BudgetResourceGroupFilterNotDimensionOutput) ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotDimension) *BudgetResourceGroupFilterNotDimension {
		return &v
	}).(BudgetResourceGroupFilterNotDimensionPtrOutput)
}

func (o BudgetResourceGroupFilterNotDimensionOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotDimension) string { return v.Name }).(pulumi.StringOutput)
}

func (o BudgetResourceGroupFilterNotDimensionOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotDimension) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

func (o BudgetResourceGroupFilterNotDimensionOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotDimension) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterNotDimensionPtrOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotDimensionPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNotDimension)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotDimensionPtrOutput) ToBudgetResourceGroupFilterNotDimensionPtrOutput() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotDimensionPtrOutput) ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotDimensionPtrOutput) Elem() BudgetResourceGroupFilterNotDimensionOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotDimension) BudgetResourceGroupFilterNotDimension { return *v }).(BudgetResourceGroupFilterNotDimensionOutput)
}

func (o BudgetResourceGroupFilterNotDimensionPtrOutput) Name() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotDimension) *string {
		if v == nil {
			return nil
		}
		return &v.Name
	}).(pulumi.StringPtrOutput)
}

func (o BudgetResourceGroupFilterNotDimensionPtrOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotDimension) *string {
		if v == nil {
			return nil
		}
		return v.Operator
	}).(pulumi.StringPtrOutput)
}

func (o BudgetResourceGroupFilterNotDimensionPtrOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotDimension) []string {
		if v == nil {
			return nil
		}
		return v.Values
	}).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterNotTag struct {

	Name string `pulumi:"name"`

	Operator *string `pulumi:"operator"`

	Values []string `pulumi:"values"`
}

type BudgetResourceGroupFilterNotTagInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotTagOutput() BudgetResourceGroupFilterNotTagOutput
	ToBudgetResourceGroupFilterNotTagOutputWithContext(context.Context) BudgetResourceGroupFilterNotTagOutput
}

type BudgetResourceGroupFilterNotTagArgs struct {

	Name pulumi.StringInput `pulumi:"name"`

	Operator pulumi.StringPtrInput `pulumi:"operator"`

	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetResourceGroupFilterNotTagArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNotTag)(nil)).Elem()
}

func (i BudgetResourceGroupFilterNotTagArgs) ToBudgetResourceGroupFilterNotTagOutput() BudgetResourceGroupFilterNotTagOutput {
	return i.ToBudgetResourceGroupFilterNotTagOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotTagArgs) ToBudgetResourceGroupFilterNotTagOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotTagOutput)
}

func (i BudgetResourceGroupFilterNotTagArgs) ToBudgetResourceGroupFilterNotTagPtrOutput() BudgetResourceGroupFilterNotTagPtrOutput {
	return i.ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotTagArgs) ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotTagOutput).ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(ctx)
}

type BudgetResourceGroupFilterNotTagPtrInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotTagPtrOutput() BudgetResourceGroupFilterNotTagPtrOutput
	ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(context.Context) BudgetResourceGroupFilterNotTagPtrOutput
}

type budgetResourceGroupFilterNotTagPtrType BudgetResourceGroupFilterNotTagArgs

func BudgetResourceGroupFilterNotTagPtr(v *BudgetResourceGroupFilterNotTagArgs) BudgetResourceGroupFilterNotTagPtrInput {
	return (*budgetResourceGroupFilterNotTagPtrType)(v)
}

func (*budgetResourceGroupFilterNotTagPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNotTag)(nil)).Elem()
}

func (i *budgetResourceGroupFilterNotTagPtrType) ToBudgetResourceGroupFilterNotTagPtrOutput() BudgetResourceGroupFilterNotTagPtrOutput {
	return i.ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(context.Background())
}

func (i *budgetResourceGroupFilterNotTagPtrType) ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotTagPtrOutput)
}

type BudgetResourceGroupFilterNotTagOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotTagOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNotTag)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotTagOutput) ToBudgetResourceGroupFilterNotTagOutput() BudgetResourceGroupFilterNotTagOutput {
	return o
}

func (o BudgetResourceGroupFilterNotTagOutput) ToBudgetResourceGroupFilterNotTagOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagOutput {
	return o
}

func (o BudgetResourceGroupFilterNotTagOutput) ToBudgetResourceGroupFilterNotTagPtrOutput() BudgetResourceGroupFilterNotTagPtrOutput {
	return o.ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(context.Background())
}

func (o BudgetResourceGroupFilterNotTagOutput) ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotTag) *BudgetResourceGroupFilterNotTag {
		return &v
	}).(BudgetResourceGroupFilterNotTagPtrOutput)
}

func (o BudgetResourceGroupFilterNotTagOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotTag) string { return v.Name }).(pulumi.StringOutput)
}

func (o BudgetResourceGroupFilterNotTagOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotTag) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

func (o BudgetResourceGroupFilterNotTagOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotTag) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterNotTagPtrOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotTagPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNotTag)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotTagPtrOutput) ToBudgetResourceGroupFilterNotTagPtrOutput() BudgetResourceGroupFilterNotTagPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotTagPtrOutput) ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotTagPtrOutput) Elem() BudgetResourceGroupFilterNotTagOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotTag) BudgetResourceGroupFilterNotTag { return *v }).(BudgetResourceGroupFilterNotTagOutput)
}

func (o BudgetResourceGroupFilterNotTagPtrOutput) Name() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotTag) *string {
		if v == nil {
			return nil
		}
		return &v.Name
	}).(pulumi.StringPtrOutput)
}

func (o BudgetResourceGroupFilterNotTagPtrOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotTag) *string {
		if v == nil {
			return nil
		}
		return v.Operator
	}).(pulumi.StringPtrOutput)
}

func (o BudgetResourceGroupFilterNotTagPtrOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotTag) []string {
		if v == nil {
			return nil
		}
		return v.Values
	}).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterTag struct {

	Name string `pulumi:"name"`

	Operator *string `pulumi:"operator"`

	Values []string `pulumi:"values"`
}

type BudgetResourceGroupFilterTagInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterTagOutput() BudgetResourceGroupFilterTagOutput
	ToBudgetResourceGroupFilterTagOutputWithContext(context.Context) BudgetResourceGroupFilterTagOutput
}

type BudgetResourceGroupFilterTagArgs struct {

	Name pulumi.StringInput `pulumi:"name"`

	Operator pulumi.StringPtrInput `pulumi:"operator"`

	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetResourceGroupFilterTagArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterTag)(nil)).Elem()
}

func (i BudgetResourceGroupFilterTagArgs) ToBudgetResourceGroupFilterTagOutput() BudgetResourceGroupFilterTagOutput {
	return i.ToBudgetResourceGroupFilterTagOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterTagArgs) ToBudgetResourceGroupFilterTagOutputWithContext(ctx context.Context) BudgetResourceGroupFilterTagOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterTagOutput)
}

type BudgetResourceGroupFilterTagArrayInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterTagArrayOutput() BudgetResourceGroupFilterTagArrayOutput
	ToBudgetResourceGroupFilterTagArrayOutputWithContext(context.Context) BudgetResourceGroupFilterTagArrayOutput
}

type BudgetResourceGroupFilterTagArray []BudgetResourceGroupFilterTagInput

func (BudgetResourceGroupFilterTagArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupFilterTag)(nil)).Elem()
}

func (i BudgetResourceGroupFilterTagArray) ToBudgetResourceGroupFilterTagArrayOutput() BudgetResourceGroupFilterTagArrayOutput {
	return i.ToBudgetResourceGroupFilterTagArrayOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterTagArray) ToBudgetResourceGroupFilterTagArrayOutputWithContext(ctx context.Context) BudgetResourceGroupFilterTagArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterTagArrayOutput)
}

type BudgetResourceGroupFilterTagOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterTagOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterTag)(nil)).Elem()
}

func (o BudgetResourceGroupFilterTagOutput) ToBudgetResourceGroupFilterTagOutput() BudgetResourceGroupFilterTagOutput {
	return o
}

func (o BudgetResourceGroupFilterTagOutput) ToBudgetResourceGroupFilterTagOutputWithContext(ctx context.Context) BudgetResourceGroupFilterTagOutput {
	return o
}

func (o BudgetResourceGroupFilterTagOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterTag) string { return v.Name }).(pulumi.StringOutput)
}

func (o BudgetResourceGroupFilterTagOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterTag) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

func (o BudgetResourceGroupFilterTagOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterTag) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterTagArrayOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterTagArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupFilterTag)(nil)).Elem()
}

func (o BudgetResourceGroupFilterTagArrayOutput) ToBudgetResourceGroupFilterTagArrayOutput() BudgetResourceGroupFilterTagArrayOutput {
	return o
}

func (o BudgetResourceGroupFilterTagArrayOutput) ToBudgetResourceGroupFilterTagArrayOutputWithContext(ctx context.Context) BudgetResourceGroupFilterTagArrayOutput {
	return o
}

func (o BudgetResourceGroupFilterTagArrayOutput) Index(i pulumi.IntInput) BudgetResourceGroupFilterTagOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetResourceGroupFilterTag {
		return vs[0].([]BudgetResourceGroupFilterTag)[vs[1].(int)]
	}).(BudgetResourceGroupFilterTagOutput)
}

type BudgetResourceGroupNotification struct {

	ContactEmails []string `pulumi:"contactEmails"`

	ContactGroups []string `pulumi:"contactGroups"`

	ContactRoles []string `pulumi:"contactRoles"`

	Enabled *bool `pulumi:"enabled"`

	Operator string `pulumi:"operator"`

	Threshold int `pulumi:"threshold"`
}

type BudgetResourceGroupNotificationInput interface {
	pulumi.Input

	ToBudgetResourceGroupNotificationOutput() BudgetResourceGroupNotificationOutput
	ToBudgetResourceGroupNotificationOutputWithContext(context.Context) BudgetResourceGroupNotificationOutput
}

type BudgetResourceGroupNotificationArgs struct {

	ContactEmails pulumi.StringArrayInput `pulumi:"contactEmails"`

	ContactGroups pulumi.StringArrayInput `pulumi:"contactGroups"`

	ContactRoles pulumi.StringArrayInput `pulumi:"contactRoles"`

	Enabled pulumi.BoolPtrInput `pulumi:"enabled"`

	Operator pulumi.StringInput `pulumi:"operator"`

	Threshold pulumi.IntInput `pulumi:"threshold"`
}

func (BudgetResourceGroupNotificationArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupNotification)(nil)).Elem()
}

func (i BudgetResourceGroupNotificationArgs) ToBudgetResourceGroupNotificationOutput() BudgetResourceGroupNotificationOutput {
	return i.ToBudgetResourceGroupNotificationOutputWithContext(context.Background())
}

func (i BudgetResourceGroupNotificationArgs) ToBudgetResourceGroupNotificationOutputWithContext(ctx context.Context) BudgetResourceGroupNotificationOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupNotificationOutput)
}

type BudgetResourceGroupNotificationArrayInput interface {
	pulumi.Input

	ToBudgetResourceGroupNotificationArrayOutput() BudgetResourceGroupNotificationArrayOutput
	ToBudgetResourceGroupNotificationArrayOutputWithContext(context.Context) BudgetResourceGroupNotificationArrayOutput
}

type BudgetResourceGroupNotificationArray []BudgetResourceGroupNotificationInput

func (BudgetResourceGroupNotificationArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupNotification)(nil)).Elem()
}

func (i BudgetResourceGroupNotificationArray) ToBudgetResourceGroupNotificationArrayOutput() BudgetResourceGroupNotificationArrayOutput {
	return i.ToBudgetResourceGroupNotificationArrayOutputWithContext(context.Background())
}

func (i BudgetResourceGroupNotificationArray) ToBudgetResourceGroupNotificationArrayOutputWithContext(ctx context.Context) BudgetResourceGroupNotificationArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupNotificationArrayOutput)
}

type BudgetResourceGroupNotificationOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupNotificationOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupNotification)(nil)).Elem()
}

func (o BudgetResourceGroupNotificationOutput) ToBudgetResourceGroupNotificationOutput() BudgetResourceGroupNotificationOutput {
	return o
}

func (o BudgetResourceGroupNotificationOutput) ToBudgetResourceGroupNotificationOutputWithContext(ctx context.Context) BudgetResourceGroupNotificationOutput {
	return o
}

func (o BudgetResourceGroupNotificationOutput) ContactEmails() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) []string { return v.ContactEmails }).(pulumi.StringArrayOutput)
}

func (o BudgetResourceGroupNotificationOutput) ContactGroups() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) []string { return v.ContactGroups }).(pulumi.StringArrayOutput)
}

func (o BudgetResourceGroupNotificationOutput) ContactRoles() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) []string { return v.ContactRoles }).(pulumi.StringArrayOutput)
}

func (o BudgetResourceGroupNotificationOutput) Enabled() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) *bool { return v.Enabled }).(pulumi.BoolPtrOutput)
}

func (o BudgetResourceGroupNotificationOutput) Operator() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) string { return v.Operator }).(pulumi.StringOutput)
}

func (o BudgetResourceGroupNotificationOutput) Threshold() pulumi.IntOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) int { return v.Threshold }).(pulumi.IntOutput)
}

type BudgetResourceGroupNotificationArrayOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupNotificationArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupNotification)(nil)).Elem()
}

func (o BudgetResourceGroupNotificationArrayOutput) ToBudgetResourceGroupNotificationArrayOutput() BudgetResourceGroupNotificationArrayOutput {
	return o
}

func (o BudgetResourceGroupNotificationArrayOutput) ToBudgetResourceGroupNotificationArrayOutputWithContext(ctx context.Context) BudgetResourceGroupNotificationArrayOutput {
	return o
}

func (o BudgetResourceGroupNotificationArrayOutput) Index(i pulumi.IntInput) BudgetResourceGroupNotificationOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetResourceGroupNotification {
		return vs[0].([]BudgetResourceGroupNotification)[vs[1].(int)]
	}).(BudgetResourceGroupNotificationOutput)
}

type BudgetResourceGroupTimePeriod struct {

	EndDate *string `pulumi:"endDate"`

	StartDate string `pulumi:"startDate"`
}

type BudgetResourceGroupTimePeriodInput interface {
	pulumi.Input

	ToBudgetResourceGroupTimePeriodOutput() BudgetResourceGroupTimePeriodOutput
	ToBudgetResourceGroupTimePeriodOutputWithContext(context.Context) BudgetResourceGroupTimePeriodOutput
}

type BudgetResourceGroupTimePeriodArgs struct {

	EndDate pulumi.StringPtrInput `pulumi:"endDate"`

	StartDate pulumi.StringInput `pulumi:"startDate"`
}

func (BudgetResourceGroupTimePeriodArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupTimePeriod)(nil)).Elem()
}

func (i BudgetResourceGroupTimePeriodArgs) ToBudgetResourceGroupTimePeriodOutput() BudgetResourceGroupTimePeriodOutput {
	return i.ToBudgetResourceGroupTimePeriodOutputWithContext(context.Background())
}

func (i BudgetResourceGroupTimePeriodArgs) ToBudgetResourceGroupTimePeriodOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupTimePeriodOutput)
}

func (i BudgetResourceGroupTimePeriodArgs) ToBudgetResourceGroupTimePeriodPtrOutput() BudgetResourceGroupTimePeriodPtrOutput {
	return i.ToBudgetResourceGroupTimePeriodPtrOutputWithContext(context.Background())
}

func (i BudgetResourceGroupTimePeriodArgs) ToBudgetResourceGroupTimePeriodPtrOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupTimePeriodOutput).ToBudgetResourceGroupTimePeriodPtrOutputWithContext(ctx)
}

type BudgetResourceGroupTimePeriodPtrInput interface {
	pulumi.Input

	ToBudgetResourceGroupTimePeriodPtrOutput() BudgetResourceGroupTimePeriodPtrOutput
	ToBudgetResourceGroupTimePeriodPtrOutputWithContext(context.Context) BudgetResourceGroupTimePeriodPtrOutput
}

type budgetResourceGroupTimePeriodPtrType BudgetResourceGroupTimePeriodArgs

func BudgetResourceGroupTimePeriodPtr(v *BudgetResourceGroupTimePeriodArgs) BudgetResourceGroupTimePeriodPtrInput {
	return (*budgetResourceGroupTimePeriodPtrType)(v)
}

func (*budgetResourceGroupTimePeriodPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupTimePeriod)(nil)).Elem()
}

func (i *budgetResourceGroupTimePeriodPtrType) ToBudgetResourceGroupTimePeriodPtrOutput() BudgetResourceGroupTimePeriodPtrOutput {
	return i.ToBudgetResourceGroupTimePeriodPtrOutputWithContext(context.Background())
}

func (i *budgetResourceGroupTimePeriodPtrType) ToBudgetResourceGroupTimePeriodPtrOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupTimePeriodPtrOutput)
}

type BudgetResourceGroupTimePeriodOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupTimePeriodOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupTimePeriod)(nil)).Elem()
}

func (o BudgetResourceGroupTimePeriodOutput) ToBudgetResourceGroupTimePeriodOutput() BudgetResourceGroupTimePeriodOutput {
	return o
}

func (o BudgetResourceGroupTimePeriodOutput) ToBudgetResourceGroupTimePeriodOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodOutput {
	return o
}

func (o BudgetResourceGroupTimePeriodOutput) ToBudgetResourceGroupTimePeriodPtrOutput() BudgetResourceGroupTimePeriodPtrOutput {
	return o.ToBudgetResourceGroupTimePeriodPtrOutputWithContext(context.Background())
}

func (o BudgetResourceGroupTimePeriodOutput) ToBudgetResourceGroupTimePeriodPtrOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupTimePeriod) *BudgetResourceGroupTimePeriod {
		return &v
	}).(BudgetResourceGroupTimePeriodPtrOutput)
}

func (o BudgetResourceGroupTimePeriodOutput) EndDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupTimePeriod) *string { return v.EndDate }).(pulumi.StringPtrOutput)
}

func (o BudgetResourceGroupTimePeriodOutput) StartDate() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupTimePeriod) string { return v.StartDate }).(pulumi.StringOutput)
}

type BudgetResourceGroupTimePeriodPtrOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupTimePeriodPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupTimePeriod)(nil)).Elem()
}

func (o BudgetResourceGroupTimePeriodPtrOutput) ToBudgetResourceGroupTimePeriodPtrOutput() BudgetResourceGroupTimePeriodPtrOutput {
	return o
}

func (o BudgetResourceGroupTimePeriodPtrOutput) ToBudgetResourceGroupTimePeriodPtrOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodPtrOutput {
	return o
}

func (o BudgetResourceGroupTimePeriodPtrOutput) Elem() BudgetResourceGroupTimePeriodOutput {
	return o.ApplyT(func(v *BudgetResourceGroupTimePeriod) BudgetResourceGroupTimePeriod { return *v }).(BudgetResourceGroupTimePeriodOutput)
}

func (o BudgetResourceGroupTimePeriodPtrOutput) EndDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupTimePeriod) *string {
		if v == nil {
			return nil
		}
		return v.EndDate
	}).(pulumi.StringPtrOutput)
}

func (o BudgetResourceGroupTimePeriodPtrOutput) StartDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupTimePeriod) *string {
		if v == nil {
			return nil
		}
		return &v.StartDate
	}).(pulumi.StringPtrOutput)
}

type BudgetSubscriptionFilter struct {

	Dimensions []BudgetSubscriptionFilterDimension `pulumi:"dimensions"`

	Not *BudgetSubscriptionFilterNot `pulumi:"not"`

	Tags []BudgetSubscriptionFilterTag `pulumi:"tags"`
}

type BudgetSubscriptionFilterInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterOutput() BudgetSubscriptionFilterOutput
	ToBudgetSubscriptionFilterOutputWithContext(context.Context) BudgetSubscriptionFilterOutput
}

type BudgetSubscriptionFilterArgs struct {

	Dimensions BudgetSubscriptionFilterDimensionArrayInput `pulumi:"dimensions"`

	Not BudgetSubscriptionFilterNotPtrInput `pulumi:"not"`

	Tags BudgetSubscriptionFilterTagArrayInput `pulumi:"tags"`
}

func (BudgetSubscriptionFilterArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilter)(nil)).Elem()
}

func (i BudgetSubscriptionFilterArgs) ToBudgetSubscriptionFilterOutput() BudgetSubscriptionFilterOutput {
	return i.ToBudgetSubscriptionFilterOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterArgs) ToBudgetSubscriptionFilterOutputWithContext(ctx context.Context) BudgetSubscriptionFilterOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterOutput)
}

func (i BudgetSubscriptionFilterArgs) ToBudgetSubscriptionFilterPtrOutput() BudgetSubscriptionFilterPtrOutput {
	return i.ToBudgetSubscriptionFilterPtrOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterArgs) ToBudgetSubscriptionFilterPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterOutput).ToBudgetSubscriptionFilterPtrOutputWithContext(ctx)
}

type BudgetSubscriptionFilterPtrInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterPtrOutput() BudgetSubscriptionFilterPtrOutput
	ToBudgetSubscriptionFilterPtrOutputWithContext(context.Context) BudgetSubscriptionFilterPtrOutput
}

type budgetSubscriptionFilterPtrType BudgetSubscriptionFilterArgs

func BudgetSubscriptionFilterPtr(v *BudgetSubscriptionFilterArgs) BudgetSubscriptionFilterPtrInput {
	return (*budgetSubscriptionFilterPtrType)(v)
}

func (*budgetSubscriptionFilterPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilter)(nil)).Elem()
}

func (i *budgetSubscriptionFilterPtrType) ToBudgetSubscriptionFilterPtrOutput() BudgetSubscriptionFilterPtrOutput {
	return i.ToBudgetSubscriptionFilterPtrOutputWithContext(context.Background())
}

func (i *budgetSubscriptionFilterPtrType) ToBudgetSubscriptionFilterPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterPtrOutput)
}

type BudgetSubscriptionFilterOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilter)(nil)).Elem()
}

func (o BudgetSubscriptionFilterOutput) ToBudgetSubscriptionFilterOutput() BudgetSubscriptionFilterOutput {
	return o
}

func (o BudgetSubscriptionFilterOutput) ToBudgetSubscriptionFilterOutputWithContext(ctx context.Context) BudgetSubscriptionFilterOutput {
	return o
}

func (o BudgetSubscriptionFilterOutput) ToBudgetSubscriptionFilterPtrOutput() BudgetSubscriptionFilterPtrOutput {
	return o.ToBudgetSubscriptionFilterPtrOutputWithContext(context.Background())
}

func (o BudgetSubscriptionFilterOutput) ToBudgetSubscriptionFilterPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilter) *BudgetSubscriptionFilter {
		return &v
	}).(BudgetSubscriptionFilterPtrOutput)
}

func (o BudgetSubscriptionFilterOutput) Dimensions() BudgetSubscriptionFilterDimensionArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilter) []BudgetSubscriptionFilterDimension { return v.Dimensions }).(BudgetSubscriptionFilterDimensionArrayOutput)
}

func (o BudgetSubscriptionFilterOutput) Not() BudgetSubscriptionFilterNotPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilter) *BudgetSubscriptionFilterNot { return v.Not }).(BudgetSubscriptionFilterNotPtrOutput)
}

func (o BudgetSubscriptionFilterOutput) Tags() BudgetSubscriptionFilterTagArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilter) []BudgetSubscriptionFilterTag { return v.Tags }).(BudgetSubscriptionFilterTagArrayOutput)
}

type BudgetSubscriptionFilterPtrOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilter)(nil)).Elem()
}

func (o BudgetSubscriptionFilterPtrOutput) ToBudgetSubscriptionFilterPtrOutput() BudgetSubscriptionFilterPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterPtrOutput) ToBudgetSubscriptionFilterPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterPtrOutput) Elem() BudgetSubscriptionFilterOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilter) BudgetSubscriptionFilter { return *v }).(BudgetSubscriptionFilterOutput)
}

func (o BudgetSubscriptionFilterPtrOutput) Dimensions() BudgetSubscriptionFilterDimensionArrayOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilter) []BudgetSubscriptionFilterDimension {
		if v == nil {
			return nil
		}
		return v.Dimensions
	}).(BudgetSubscriptionFilterDimensionArrayOutput)
}

func (o BudgetSubscriptionFilterPtrOutput) Not() BudgetSubscriptionFilterNotPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilter) *BudgetSubscriptionFilterNot {
		if v == nil {
			return nil
		}
		return v.Not
	}).(BudgetSubscriptionFilterNotPtrOutput)
}

func (o BudgetSubscriptionFilterPtrOutput) Tags() BudgetSubscriptionFilterTagArrayOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilter) []BudgetSubscriptionFilterTag {
		if v == nil {
			return nil
		}
		return v.Tags
	}).(BudgetSubscriptionFilterTagArrayOutput)
}

type BudgetSubscriptionFilterDimension struct {

	Name string `pulumi:"name"`

	Operator *string `pulumi:"operator"`

	Values []string `pulumi:"values"`
}

type BudgetSubscriptionFilterDimensionInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterDimensionOutput() BudgetSubscriptionFilterDimensionOutput
	ToBudgetSubscriptionFilterDimensionOutputWithContext(context.Context) BudgetSubscriptionFilterDimensionOutput
}

type BudgetSubscriptionFilterDimensionArgs struct {

	Name pulumi.StringInput `pulumi:"name"`

	Operator pulumi.StringPtrInput `pulumi:"operator"`

	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetSubscriptionFilterDimensionArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterDimension)(nil)).Elem()
}

func (i BudgetSubscriptionFilterDimensionArgs) ToBudgetSubscriptionFilterDimensionOutput() BudgetSubscriptionFilterDimensionOutput {
	return i.ToBudgetSubscriptionFilterDimensionOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterDimensionArgs) ToBudgetSubscriptionFilterDimensionOutputWithContext(ctx context.Context) BudgetSubscriptionFilterDimensionOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterDimensionOutput)
}

type BudgetSubscriptionFilterDimensionArrayInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterDimensionArrayOutput() BudgetSubscriptionFilterDimensionArrayOutput
	ToBudgetSubscriptionFilterDimensionArrayOutputWithContext(context.Context) BudgetSubscriptionFilterDimensionArrayOutput
}

type BudgetSubscriptionFilterDimensionArray []BudgetSubscriptionFilterDimensionInput

func (BudgetSubscriptionFilterDimensionArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionFilterDimension)(nil)).Elem()
}

func (i BudgetSubscriptionFilterDimensionArray) ToBudgetSubscriptionFilterDimensionArrayOutput() BudgetSubscriptionFilterDimensionArrayOutput {
	return i.ToBudgetSubscriptionFilterDimensionArrayOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterDimensionArray) ToBudgetSubscriptionFilterDimensionArrayOutputWithContext(ctx context.Context) BudgetSubscriptionFilterDimensionArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterDimensionArrayOutput)
}

type BudgetSubscriptionFilterDimensionOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterDimensionOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterDimension)(nil)).Elem()
}

func (o BudgetSubscriptionFilterDimensionOutput) ToBudgetSubscriptionFilterDimensionOutput() BudgetSubscriptionFilterDimensionOutput {
	return o
}

func (o BudgetSubscriptionFilterDimensionOutput) ToBudgetSubscriptionFilterDimensionOutputWithContext(ctx context.Context) BudgetSubscriptionFilterDimensionOutput {
	return o
}

func (o BudgetSubscriptionFilterDimensionOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterDimension) string { return v.Name }).(pulumi.StringOutput)
}

func (o BudgetSubscriptionFilterDimensionOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterDimension) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

func (o BudgetSubscriptionFilterDimensionOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterDimension) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterDimensionArrayOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterDimensionArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionFilterDimension)(nil)).Elem()
}

func (o BudgetSubscriptionFilterDimensionArrayOutput) ToBudgetSubscriptionFilterDimensionArrayOutput() BudgetSubscriptionFilterDimensionArrayOutput {
	return o
}

func (o BudgetSubscriptionFilterDimensionArrayOutput) ToBudgetSubscriptionFilterDimensionArrayOutputWithContext(ctx context.Context) BudgetSubscriptionFilterDimensionArrayOutput {
	return o
}

func (o BudgetSubscriptionFilterDimensionArrayOutput) Index(i pulumi.IntInput) BudgetSubscriptionFilterDimensionOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetSubscriptionFilterDimension {
		return vs[0].([]BudgetSubscriptionFilterDimension)[vs[1].(int)]
	}).(BudgetSubscriptionFilterDimensionOutput)
}

type BudgetSubscriptionFilterNot struct {

	Dimension *BudgetSubscriptionFilterNotDimension `pulumi:"dimension"`

	Tag *BudgetSubscriptionFilterNotTag `pulumi:"tag"`
}

type BudgetSubscriptionFilterNotInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotOutput() BudgetSubscriptionFilterNotOutput
	ToBudgetSubscriptionFilterNotOutputWithContext(context.Context) BudgetSubscriptionFilterNotOutput
}

type BudgetSubscriptionFilterNotArgs struct {

	Dimension BudgetSubscriptionFilterNotDimensionPtrInput `pulumi:"dimension"`

	Tag BudgetSubscriptionFilterNotTagPtrInput `pulumi:"tag"`
}

func (BudgetSubscriptionFilterNotArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNot)(nil)).Elem()
}

func (i BudgetSubscriptionFilterNotArgs) ToBudgetSubscriptionFilterNotOutput() BudgetSubscriptionFilterNotOutput {
	return i.ToBudgetSubscriptionFilterNotOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotArgs) ToBudgetSubscriptionFilterNotOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotOutput)
}

func (i BudgetSubscriptionFilterNotArgs) ToBudgetSubscriptionFilterNotPtrOutput() BudgetSubscriptionFilterNotPtrOutput {
	return i.ToBudgetSubscriptionFilterNotPtrOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotArgs) ToBudgetSubscriptionFilterNotPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotOutput).ToBudgetSubscriptionFilterNotPtrOutputWithContext(ctx)
}

type BudgetSubscriptionFilterNotPtrInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotPtrOutput() BudgetSubscriptionFilterNotPtrOutput
	ToBudgetSubscriptionFilterNotPtrOutputWithContext(context.Context) BudgetSubscriptionFilterNotPtrOutput
}

type budgetSubscriptionFilterNotPtrType BudgetSubscriptionFilterNotArgs

func BudgetSubscriptionFilterNotPtr(v *BudgetSubscriptionFilterNotArgs) BudgetSubscriptionFilterNotPtrInput {
	return (*budgetSubscriptionFilterNotPtrType)(v)
}

func (*budgetSubscriptionFilterNotPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNot)(nil)).Elem()
}

func (i *budgetSubscriptionFilterNotPtrType) ToBudgetSubscriptionFilterNotPtrOutput() BudgetSubscriptionFilterNotPtrOutput {
	return i.ToBudgetSubscriptionFilterNotPtrOutputWithContext(context.Background())
}

func (i *budgetSubscriptionFilterNotPtrType) ToBudgetSubscriptionFilterNotPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotPtrOutput)
}

type BudgetSubscriptionFilterNotOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNot)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotOutput) ToBudgetSubscriptionFilterNotOutput() BudgetSubscriptionFilterNotOutput {
	return o
}

func (o BudgetSubscriptionFilterNotOutput) ToBudgetSubscriptionFilterNotOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotOutput {
	return o
}

func (o BudgetSubscriptionFilterNotOutput) ToBudgetSubscriptionFilterNotPtrOutput() BudgetSubscriptionFilterNotPtrOutput {
	return o.ToBudgetSubscriptionFilterNotPtrOutputWithContext(context.Background())
}

func (o BudgetSubscriptionFilterNotOutput) ToBudgetSubscriptionFilterNotPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNot) *BudgetSubscriptionFilterNot {
		return &v
	}).(BudgetSubscriptionFilterNotPtrOutput)
}

func (o BudgetSubscriptionFilterNotOutput) Dimension() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNot) *BudgetSubscriptionFilterNotDimension { return v.Dimension }).(BudgetSubscriptionFilterNotDimensionPtrOutput)
}

func (o BudgetSubscriptionFilterNotOutput) Tag() BudgetSubscriptionFilterNotTagPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNot) *BudgetSubscriptionFilterNotTag { return v.Tag }).(BudgetSubscriptionFilterNotTagPtrOutput)
}

type BudgetSubscriptionFilterNotPtrOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNot)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotPtrOutput) ToBudgetSubscriptionFilterNotPtrOutput() BudgetSubscriptionFilterNotPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotPtrOutput) ToBudgetSubscriptionFilterNotPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotPtrOutput) Elem() BudgetSubscriptionFilterNotOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNot) BudgetSubscriptionFilterNot { return *v }).(BudgetSubscriptionFilterNotOutput)
}

func (o BudgetSubscriptionFilterNotPtrOutput) Dimension() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNot) *BudgetSubscriptionFilterNotDimension {
		if v == nil {
			return nil
		}
		return v.Dimension
	}).(BudgetSubscriptionFilterNotDimensionPtrOutput)
}

func (o BudgetSubscriptionFilterNotPtrOutput) Tag() BudgetSubscriptionFilterNotTagPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNot) *BudgetSubscriptionFilterNotTag {
		if v == nil {
			return nil
		}
		return v.Tag
	}).(BudgetSubscriptionFilterNotTagPtrOutput)
}

type BudgetSubscriptionFilterNotDimension struct {

	Name string `pulumi:"name"`

	Operator *string `pulumi:"operator"`

	Values []string `pulumi:"values"`
}

type BudgetSubscriptionFilterNotDimensionInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotDimensionOutput() BudgetSubscriptionFilterNotDimensionOutput
	ToBudgetSubscriptionFilterNotDimensionOutputWithContext(context.Context) BudgetSubscriptionFilterNotDimensionOutput
}

type BudgetSubscriptionFilterNotDimensionArgs struct {

	Name pulumi.StringInput `pulumi:"name"`

	Operator pulumi.StringPtrInput `pulumi:"operator"`

	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetSubscriptionFilterNotDimensionArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNotDimension)(nil)).Elem()
}

func (i BudgetSubscriptionFilterNotDimensionArgs) ToBudgetSubscriptionFilterNotDimensionOutput() BudgetSubscriptionFilterNotDimensionOutput {
	return i.ToBudgetSubscriptionFilterNotDimensionOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotDimensionArgs) ToBudgetSubscriptionFilterNotDimensionOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotDimensionOutput)
}

func (i BudgetSubscriptionFilterNotDimensionArgs) ToBudgetSubscriptionFilterNotDimensionPtrOutput() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return i.ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotDimensionArgs) ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotDimensionOutput).ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(ctx)
}

type BudgetSubscriptionFilterNotDimensionPtrInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotDimensionPtrOutput() BudgetSubscriptionFilterNotDimensionPtrOutput
	ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(context.Context) BudgetSubscriptionFilterNotDimensionPtrOutput
}

type budgetSubscriptionFilterNotDimensionPtrType BudgetSubscriptionFilterNotDimensionArgs

func BudgetSubscriptionFilterNotDimensionPtr(v *BudgetSubscriptionFilterNotDimensionArgs) BudgetSubscriptionFilterNotDimensionPtrInput {
	return (*budgetSubscriptionFilterNotDimensionPtrType)(v)
}

func (*budgetSubscriptionFilterNotDimensionPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNotDimension)(nil)).Elem()
}

func (i *budgetSubscriptionFilterNotDimensionPtrType) ToBudgetSubscriptionFilterNotDimensionPtrOutput() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return i.ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (i *budgetSubscriptionFilterNotDimensionPtrType) ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotDimensionPtrOutput)
}

type BudgetSubscriptionFilterNotDimensionOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotDimensionOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNotDimension)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotDimensionOutput) ToBudgetSubscriptionFilterNotDimensionOutput() BudgetSubscriptionFilterNotDimensionOutput {
	return o
}

func (o BudgetSubscriptionFilterNotDimensionOutput) ToBudgetSubscriptionFilterNotDimensionOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionOutput {
	return o
}

func (o BudgetSubscriptionFilterNotDimensionOutput) ToBudgetSubscriptionFilterNotDimensionPtrOutput() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o.ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (o BudgetSubscriptionFilterNotDimensionOutput) ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotDimension) *BudgetSubscriptionFilterNotDimension {
		return &v
	}).(BudgetSubscriptionFilterNotDimensionPtrOutput)
}

func (o BudgetSubscriptionFilterNotDimensionOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotDimension) string { return v.Name }).(pulumi.StringOutput)
}

func (o BudgetSubscriptionFilterNotDimensionOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotDimension) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

func (o BudgetSubscriptionFilterNotDimensionOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotDimension) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterNotDimensionPtrOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotDimensionPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNotDimension)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotDimensionPtrOutput) ToBudgetSubscriptionFilterNotDimensionPtrOutput() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotDimensionPtrOutput) ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotDimensionPtrOutput) Elem() BudgetSubscriptionFilterNotDimensionOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotDimension) BudgetSubscriptionFilterNotDimension { return *v }).(BudgetSubscriptionFilterNotDimensionOutput)
}

func (o BudgetSubscriptionFilterNotDimensionPtrOutput) Name() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotDimension) *string {
		if v == nil {
			return nil
		}
		return &v.Name
	}).(pulumi.StringPtrOutput)
}

func (o BudgetSubscriptionFilterNotDimensionPtrOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotDimension) *string {
		if v == nil {
			return nil
		}
		return v.Operator
	}).(pulumi.StringPtrOutput)
}

func (o BudgetSubscriptionFilterNotDimensionPtrOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotDimension) []string {
		if v == nil {
			return nil
		}
		return v.Values
	}).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterNotTag struct {

	Name string `pulumi:"name"`

	Operator *string `pulumi:"operator"`

	Values []string `pulumi:"values"`
}

type BudgetSubscriptionFilterNotTagInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotTagOutput() BudgetSubscriptionFilterNotTagOutput
	ToBudgetSubscriptionFilterNotTagOutputWithContext(context.Context) BudgetSubscriptionFilterNotTagOutput
}

type BudgetSubscriptionFilterNotTagArgs struct {

	Name pulumi.StringInput `pulumi:"name"`

	Operator pulumi.StringPtrInput `pulumi:"operator"`

	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetSubscriptionFilterNotTagArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNotTag)(nil)).Elem()
}

func (i BudgetSubscriptionFilterNotTagArgs) ToBudgetSubscriptionFilterNotTagOutput() BudgetSubscriptionFilterNotTagOutput {
	return i.ToBudgetSubscriptionFilterNotTagOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotTagArgs) ToBudgetSubscriptionFilterNotTagOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotTagOutput)
}

func (i BudgetSubscriptionFilterNotTagArgs) ToBudgetSubscriptionFilterNotTagPtrOutput() BudgetSubscriptionFilterNotTagPtrOutput {
	return i.ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotTagArgs) ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotTagOutput).ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(ctx)
}

type BudgetSubscriptionFilterNotTagPtrInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotTagPtrOutput() BudgetSubscriptionFilterNotTagPtrOutput
	ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(context.Context) BudgetSubscriptionFilterNotTagPtrOutput
}

type budgetSubscriptionFilterNotTagPtrType BudgetSubscriptionFilterNotTagArgs

func BudgetSubscriptionFilterNotTagPtr(v *BudgetSubscriptionFilterNotTagArgs) BudgetSubscriptionFilterNotTagPtrInput {
	return (*budgetSubscriptionFilterNotTagPtrType)(v)
}

func (*budgetSubscriptionFilterNotTagPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNotTag)(nil)).Elem()
}

func (i *budgetSubscriptionFilterNotTagPtrType) ToBudgetSubscriptionFilterNotTagPtrOutput() BudgetSubscriptionFilterNotTagPtrOutput {
	return i.ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(context.Background())
}

func (i *budgetSubscriptionFilterNotTagPtrType) ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotTagPtrOutput)
}

type BudgetSubscriptionFilterNotTagOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotTagOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNotTag)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotTagOutput) ToBudgetSubscriptionFilterNotTagOutput() BudgetSubscriptionFilterNotTagOutput {
	return o
}

func (o BudgetSubscriptionFilterNotTagOutput) ToBudgetSubscriptionFilterNotTagOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagOutput {
	return o
}

func (o BudgetSubscriptionFilterNotTagOutput) ToBudgetSubscriptionFilterNotTagPtrOutput() BudgetSubscriptionFilterNotTagPtrOutput {
	return o.ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(context.Background())
}

func (o BudgetSubscriptionFilterNotTagOutput) ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotTag) *BudgetSubscriptionFilterNotTag {
		return &v
	}).(BudgetSubscriptionFilterNotTagPtrOutput)
}

func (o BudgetSubscriptionFilterNotTagOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotTag) string { return v.Name }).(pulumi.StringOutput)
}

func (o BudgetSubscriptionFilterNotTagOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotTag) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

func (o BudgetSubscriptionFilterNotTagOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotTag) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterNotTagPtrOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotTagPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNotTag)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotTagPtrOutput) ToBudgetSubscriptionFilterNotTagPtrOutput() BudgetSubscriptionFilterNotTagPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotTagPtrOutput) ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotTagPtrOutput) Elem() BudgetSubscriptionFilterNotTagOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotTag) BudgetSubscriptionFilterNotTag { return *v }).(BudgetSubscriptionFilterNotTagOutput)
}

func (o BudgetSubscriptionFilterNotTagPtrOutput) Name() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotTag) *string {
		if v == nil {
			return nil
		}
		return &v.Name
	}).(pulumi.StringPtrOutput)
}

func (o BudgetSubscriptionFilterNotTagPtrOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotTag) *string {
		if v == nil {
			return nil
		}
		return v.Operator
	}).(pulumi.StringPtrOutput)
}

func (o BudgetSubscriptionFilterNotTagPtrOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotTag) []string {
		if v == nil {
			return nil
		}
		return v.Values
	}).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterTag struct {

	Name string `pulumi:"name"`

	Operator *string `pulumi:"operator"`

	Values []string `pulumi:"values"`
}

type BudgetSubscriptionFilterTagInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterTagOutput() BudgetSubscriptionFilterTagOutput
	ToBudgetSubscriptionFilterTagOutputWithContext(context.Context) BudgetSubscriptionFilterTagOutput
}

type BudgetSubscriptionFilterTagArgs struct {

	Name pulumi.StringInput `pulumi:"name"`

	Operator pulumi.StringPtrInput `pulumi:"operator"`

	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetSubscriptionFilterTagArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterTag)(nil)).Elem()
}

func (i BudgetSubscriptionFilterTagArgs) ToBudgetSubscriptionFilterTagOutput() BudgetSubscriptionFilterTagOutput {
	return i.ToBudgetSubscriptionFilterTagOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterTagArgs) ToBudgetSubscriptionFilterTagOutputWithContext(ctx context.Context) BudgetSubscriptionFilterTagOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterTagOutput)
}

type BudgetSubscriptionFilterTagArrayInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterTagArrayOutput() BudgetSubscriptionFilterTagArrayOutput
	ToBudgetSubscriptionFilterTagArrayOutputWithContext(context.Context) BudgetSubscriptionFilterTagArrayOutput
}

type BudgetSubscriptionFilterTagArray []BudgetSubscriptionFilterTagInput

func (BudgetSubscriptionFilterTagArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionFilterTag)(nil)).Elem()
}

func (i BudgetSubscriptionFilterTagArray) ToBudgetSubscriptionFilterTagArrayOutput() BudgetSubscriptionFilterTagArrayOutput {
	return i.ToBudgetSubscriptionFilterTagArrayOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterTagArray) ToBudgetSubscriptionFilterTagArrayOutputWithContext(ctx context.Context) BudgetSubscriptionFilterTagArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterTagArrayOutput)
}

type BudgetSubscriptionFilterTagOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterTagOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterTag)(nil)).Elem()
}

func (o BudgetSubscriptionFilterTagOutput) ToBudgetSubscriptionFilterTagOutput() BudgetSubscriptionFilterTagOutput {
	return o
}

func (o BudgetSubscriptionFilterTagOutput) ToBudgetSubscriptionFilterTagOutputWithContext(ctx context.Context) BudgetSubscriptionFilterTagOutput {
	return o
}

func (o BudgetSubscriptionFilterTagOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterTag) string { return v.Name }).(pulumi.StringOutput)
}

func (o BudgetSubscriptionFilterTagOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterTag) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

func (o BudgetSubscriptionFilterTagOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterTag) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterTagArrayOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterTagArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionFilterTag)(nil)).Elem()
}

func (o BudgetSubscriptionFilterTagArrayOutput) ToBudgetSubscriptionFilterTagArrayOutput() BudgetSubscriptionFilterTagArrayOutput {
	return o
}

func (o BudgetSubscriptionFilterTagArrayOutput) ToBudgetSubscriptionFilterTagArrayOutputWithContext(ctx context.Context) BudgetSubscriptionFilterTagArrayOutput {
	return o
}

func (o BudgetSubscriptionFilterTagArrayOutput) Index(i pulumi.IntInput) BudgetSubscriptionFilterTagOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetSubscriptionFilterTag {
		return vs[0].([]BudgetSubscriptionFilterTag)[vs[1].(int)]
	}).(BudgetSubscriptionFilterTagOutput)
}

type BudgetSubscriptionNotification struct {

	ContactEmails []string `pulumi:"contactEmails"`

	ContactGroups []string `pulumi:"contactGroups"`

	ContactRoles []string `pulumi:"contactRoles"`

	Enabled *bool `pulumi:"enabled"`

	Operator string `pulumi:"operator"`

	Threshold int `pulumi:"threshold"`
}

type BudgetSubscriptionNotificationInput interface {
	pulumi.Input

	ToBudgetSubscriptionNotificationOutput() BudgetSubscriptionNotificationOutput
	ToBudgetSubscriptionNotificationOutputWithContext(context.Context) BudgetSubscriptionNotificationOutput
}

type BudgetSubscriptionNotificationArgs struct {

	ContactEmails pulumi.StringArrayInput `pulumi:"contactEmails"`

	ContactGroups pulumi.StringArrayInput `pulumi:"contactGroups"`

	ContactRoles pulumi.StringArrayInput `pulumi:"contactRoles"`

	Enabled pulumi.BoolPtrInput `pulumi:"enabled"`

	Operator pulumi.StringInput `pulumi:"operator"`

	Threshold pulumi.IntInput `pulumi:"threshold"`
}

func (BudgetSubscriptionNotificationArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionNotification)(nil)).Elem()
}

func (i BudgetSubscriptionNotificationArgs) ToBudgetSubscriptionNotificationOutput() BudgetSubscriptionNotificationOutput {
	return i.ToBudgetSubscriptionNotificationOutputWithContext(context.Background())
}

func (i BudgetSubscriptionNotificationArgs) ToBudgetSubscriptionNotificationOutputWithContext(ctx context.Context) BudgetSubscriptionNotificationOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionNotificationOutput)
}

type BudgetSubscriptionNotificationArrayInput interface {
	pulumi.Input

	ToBudgetSubscriptionNotificationArrayOutput() BudgetSubscriptionNotificationArrayOutput
	ToBudgetSubscriptionNotificationArrayOutputWithContext(context.Context) BudgetSubscriptionNotificationArrayOutput
}

type BudgetSubscriptionNotificationArray []BudgetSubscriptionNotificationInput

func (BudgetSubscriptionNotificationArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionNotification)(nil)).Elem()
}

func (i BudgetSubscriptionNotificationArray) ToBudgetSubscriptionNotificationArrayOutput() BudgetSubscriptionNotificationArrayOutput {
	return i.ToBudgetSubscriptionNotificationArrayOutputWithContext(context.Background())
}

func (i BudgetSubscriptionNotificationArray) ToBudgetSubscriptionNotificationArrayOutputWithContext(ctx context.Context) BudgetSubscriptionNotificationArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionNotificationArrayOutput)
}

type BudgetSubscriptionNotificationOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionNotificationOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionNotification)(nil)).Elem()
}

func (o BudgetSubscriptionNotificationOutput) ToBudgetSubscriptionNotificationOutput() BudgetSubscriptionNotificationOutput {
	return o
}

func (o BudgetSubscriptionNotificationOutput) ToBudgetSubscriptionNotificationOutputWithContext(ctx context.Context) BudgetSubscriptionNotificationOutput {
	return o
}

func (o BudgetSubscriptionNotificationOutput) ContactEmails() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) []string { return v.ContactEmails }).(pulumi.StringArrayOutput)
}

func (o BudgetSubscriptionNotificationOutput) ContactGroups() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) []string { return v.ContactGroups }).(pulumi.StringArrayOutput)
}

func (o BudgetSubscriptionNotificationOutput) ContactRoles() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) []string { return v.ContactRoles }).(pulumi.StringArrayOutput)
}

func (o BudgetSubscriptionNotificationOutput) Enabled() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) *bool { return v.Enabled }).(pulumi.BoolPtrOutput)
}

func (o BudgetSubscriptionNotificationOutput) Operator() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) string { return v.Operator }).(pulumi.StringOutput)
}

func (o BudgetSubscriptionNotificationOutput) Threshold() pulumi.IntOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) int { return v.Threshold }).(pulumi.IntOutput)
}

type BudgetSubscriptionNotificationArrayOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionNotificationArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionNotification)(nil)).Elem()
}

func (o BudgetSubscriptionNotificationArrayOutput) ToBudgetSubscriptionNotificationArrayOutput() BudgetSubscriptionNotificationArrayOutput {
	return o
}

func (o BudgetSubscriptionNotificationArrayOutput) ToBudgetSubscriptionNotificationArrayOutputWithContext(ctx context.Context) BudgetSubscriptionNotificationArrayOutput {
	return o
}

func (o BudgetSubscriptionNotificationArrayOutput) Index(i pulumi.IntInput) BudgetSubscriptionNotificationOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetSubscriptionNotification {
		return vs[0].([]BudgetSubscriptionNotification)[vs[1].(int)]
	}).(BudgetSubscriptionNotificationOutput)
}

type BudgetSubscriptionTimePeriod struct {

	EndDate *string `pulumi:"endDate"`

	StartDate string `pulumi:"startDate"`
}

type BudgetSubscriptionTimePeriodInput interface {
	pulumi.Input

	ToBudgetSubscriptionTimePeriodOutput() BudgetSubscriptionTimePeriodOutput
	ToBudgetSubscriptionTimePeriodOutputWithContext(context.Context) BudgetSubscriptionTimePeriodOutput
}

type BudgetSubscriptionTimePeriodArgs struct {

	EndDate pulumi.StringPtrInput `pulumi:"endDate"`

	StartDate pulumi.StringInput `pulumi:"startDate"`
}

func (BudgetSubscriptionTimePeriodArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionTimePeriod)(nil)).Elem()
}

func (i BudgetSubscriptionTimePeriodArgs) ToBudgetSubscriptionTimePeriodOutput() BudgetSubscriptionTimePeriodOutput {
	return i.ToBudgetSubscriptionTimePeriodOutputWithContext(context.Background())
}

func (i BudgetSubscriptionTimePeriodArgs) ToBudgetSubscriptionTimePeriodOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionTimePeriodOutput)
}

func (i BudgetSubscriptionTimePeriodArgs) ToBudgetSubscriptionTimePeriodPtrOutput() BudgetSubscriptionTimePeriodPtrOutput {
	return i.ToBudgetSubscriptionTimePeriodPtrOutputWithContext(context.Background())
}

func (i BudgetSubscriptionTimePeriodArgs) ToBudgetSubscriptionTimePeriodPtrOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionTimePeriodOutput).ToBudgetSubscriptionTimePeriodPtrOutputWithContext(ctx)
}

type BudgetSubscriptionTimePeriodPtrInput interface {
	pulumi.Input

	ToBudgetSubscriptionTimePeriodPtrOutput() BudgetSubscriptionTimePeriodPtrOutput
	ToBudgetSubscriptionTimePeriodPtrOutputWithContext(context.Context) BudgetSubscriptionTimePeriodPtrOutput
}

type budgetSubscriptionTimePeriodPtrType BudgetSubscriptionTimePeriodArgs

func BudgetSubscriptionTimePeriodPtr(v *BudgetSubscriptionTimePeriodArgs) BudgetSubscriptionTimePeriodPtrInput {
	return (*budgetSubscriptionTimePeriodPtrType)(v)
}

func (*budgetSubscriptionTimePeriodPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionTimePeriod)(nil)).Elem()
}

func (i *budgetSubscriptionTimePeriodPtrType) ToBudgetSubscriptionTimePeriodPtrOutput() BudgetSubscriptionTimePeriodPtrOutput {
	return i.ToBudgetSubscriptionTimePeriodPtrOutputWithContext(context.Background())
}

func (i *budgetSubscriptionTimePeriodPtrType) ToBudgetSubscriptionTimePeriodPtrOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionTimePeriodPtrOutput)
}

type BudgetSubscriptionTimePeriodOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionTimePeriodOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionTimePeriod)(nil)).Elem()
}

func (o BudgetSubscriptionTimePeriodOutput) ToBudgetSubscriptionTimePeriodOutput() BudgetSubscriptionTimePeriodOutput {
	return o
}

func (o BudgetSubscriptionTimePeriodOutput) ToBudgetSubscriptionTimePeriodOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodOutput {
	return o
}

func (o BudgetSubscriptionTimePeriodOutput) ToBudgetSubscriptionTimePeriodPtrOutput() BudgetSubscriptionTimePeriodPtrOutput {
	return o.ToBudgetSubscriptionTimePeriodPtrOutputWithContext(context.Background())
}

func (o BudgetSubscriptionTimePeriodOutput) ToBudgetSubscriptionTimePeriodPtrOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionTimePeriod) *BudgetSubscriptionTimePeriod {
		return &v
	}).(BudgetSubscriptionTimePeriodPtrOutput)
}

func (o BudgetSubscriptionTimePeriodOutput) EndDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionTimePeriod) *string { return v.EndDate }).(pulumi.StringPtrOutput)
}

func (o BudgetSubscriptionTimePeriodOutput) StartDate() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionTimePeriod) string { return v.StartDate }).(pulumi.StringOutput)
}

type BudgetSubscriptionTimePeriodPtrOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionTimePeriodPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionTimePeriod)(nil)).Elem()
}

func (o BudgetSubscriptionTimePeriodPtrOutput) ToBudgetSubscriptionTimePeriodPtrOutput() BudgetSubscriptionTimePeriodPtrOutput {
	return o
}

func (o BudgetSubscriptionTimePeriodPtrOutput) ToBudgetSubscriptionTimePeriodPtrOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodPtrOutput {
	return o
}

func (o BudgetSubscriptionTimePeriodPtrOutput) Elem() BudgetSubscriptionTimePeriodOutput {
	return o.ApplyT(func(v *BudgetSubscriptionTimePeriod) BudgetSubscriptionTimePeriod { return *v }).(BudgetSubscriptionTimePeriodOutput)
}

func (o BudgetSubscriptionTimePeriodPtrOutput) EndDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionTimePeriod) *string {
		if v == nil {
			return nil
		}
		return v.EndDate
	}).(pulumi.StringPtrOutput)
}

func (o BudgetSubscriptionTimePeriodPtrOutput) StartDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionTimePeriod) *string {
		if v == nil {
			return nil
		}
		return &v.StartDate
	}).(pulumi.StringPtrOutput)
}

func init() {
	pulumi.RegisterOutputType(BudgetResourceGroupFilterOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterPtrOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterDimensionOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterDimensionArrayOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotPtrOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotDimensionOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotDimensionPtrOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotTagOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotTagPtrOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterTagOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterTagArrayOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupNotificationOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupNotificationArrayOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupTimePeriodOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupTimePeriodPtrOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterPtrOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterDimensionOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterDimensionArrayOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotPtrOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotDimensionOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotDimensionPtrOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotTagOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotTagPtrOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterTagOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterTagArrayOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionNotificationOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionNotificationArrayOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionTimePeriodOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionTimePeriodPtrOutput{})
}
// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package consumption

import (
	"context"
	"reflect"

	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

type BudgetResourceGroupFilter struct {
	// One or more `dimension` blocks as defined below to filter the budget on.
	Dimensions []BudgetResourceGroupFilterDimension `pulumi:"dimensions"`
	// A `not` block as defined below to filter the budget on.
	Not *BudgetResourceGroupFilterNot `pulumi:"not"`
	// One or more `tag` blocks as defined below to filter the budget on.
	Tags []BudgetResourceGroupFilterTag `pulumi:"tags"`
}

// BudgetResourceGroupFilterInput is an input type that accepts BudgetResourceGroupFilterArgs and BudgetResourceGroupFilterOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterInput` via:
//
//          BudgetResourceGroupFilterArgs{...}
type BudgetResourceGroupFilterInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterOutput() BudgetResourceGroupFilterOutput
	ToBudgetResourceGroupFilterOutputWithContext(context.Context) BudgetResourceGroupFilterOutput
}

type BudgetResourceGroupFilterArgs struct {
	// One or more `dimension` blocks as defined below to filter the budget on.
	Dimensions BudgetResourceGroupFilterDimensionArrayInput `pulumi:"dimensions"`
	// A `not` block as defined below to filter the budget on.
	Not BudgetResourceGroupFilterNotPtrInput `pulumi:"not"`
	// One or more `tag` blocks as defined below to filter the budget on.
	Tags BudgetResourceGroupFilterTagArrayInput `pulumi:"tags"`
}

func (BudgetResourceGroupFilterArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilter)(nil)).Elem()
}

func (i BudgetResourceGroupFilterArgs) ToBudgetResourceGroupFilterOutput() BudgetResourceGroupFilterOutput {
	return i.ToBudgetResourceGroupFilterOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterArgs) ToBudgetResourceGroupFilterOutputWithContext(ctx context.Context) BudgetResourceGroupFilterOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterOutput)
}

func (i BudgetResourceGroupFilterArgs) ToBudgetResourceGroupFilterPtrOutput() BudgetResourceGroupFilterPtrOutput {
	return i.ToBudgetResourceGroupFilterPtrOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterArgs) ToBudgetResourceGroupFilterPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterOutput).ToBudgetResourceGroupFilterPtrOutputWithContext(ctx)
}

// BudgetResourceGroupFilterPtrInput is an input type that accepts BudgetResourceGroupFilterArgs, BudgetResourceGroupFilterPtr and BudgetResourceGroupFilterPtrOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterPtrInput` via:
//
//          BudgetResourceGroupFilterArgs{...}
//
//  or:
//
//          nil
type BudgetResourceGroupFilterPtrInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterPtrOutput() BudgetResourceGroupFilterPtrOutput
	ToBudgetResourceGroupFilterPtrOutputWithContext(context.Context) BudgetResourceGroupFilterPtrOutput
}

type budgetResourceGroupFilterPtrType BudgetResourceGroupFilterArgs

func BudgetResourceGroupFilterPtr(v *BudgetResourceGroupFilterArgs) BudgetResourceGroupFilterPtrInput {
	return (*budgetResourceGroupFilterPtrType)(v)
}

func (*budgetResourceGroupFilterPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilter)(nil)).Elem()
}

func (i *budgetResourceGroupFilterPtrType) ToBudgetResourceGroupFilterPtrOutput() BudgetResourceGroupFilterPtrOutput {
	return i.ToBudgetResourceGroupFilterPtrOutputWithContext(context.Background())
}

func (i *budgetResourceGroupFilterPtrType) ToBudgetResourceGroupFilterPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterPtrOutput)
}

type BudgetResourceGroupFilterOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilter)(nil)).Elem()
}

func (o BudgetResourceGroupFilterOutput) ToBudgetResourceGroupFilterOutput() BudgetResourceGroupFilterOutput {
	return o
}

func (o BudgetResourceGroupFilterOutput) ToBudgetResourceGroupFilterOutputWithContext(ctx context.Context) BudgetResourceGroupFilterOutput {
	return o
}

func (o BudgetResourceGroupFilterOutput) ToBudgetResourceGroupFilterPtrOutput() BudgetResourceGroupFilterPtrOutput {
	return o.ToBudgetResourceGroupFilterPtrOutputWithContext(context.Background())
}

func (o BudgetResourceGroupFilterOutput) ToBudgetResourceGroupFilterPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilter) *BudgetResourceGroupFilter {
		return &v
	}).(BudgetResourceGroupFilterPtrOutput)
}

// One or more `dimension` blocks as defined below to filter the budget on.
func (o BudgetResourceGroupFilterOutput) Dimensions() BudgetResourceGroupFilterDimensionArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilter) []BudgetResourceGroupFilterDimension { return v.Dimensions }).(BudgetResourceGroupFilterDimensionArrayOutput)
}

// A `not` block as defined below to filter the budget on.
func (o BudgetResourceGroupFilterOutput) Not() BudgetResourceGroupFilterNotPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilter) *BudgetResourceGroupFilterNot { return v.Not }).(BudgetResourceGroupFilterNotPtrOutput)
}

// One or more `tag` blocks as defined below to filter the budget on.
func (o BudgetResourceGroupFilterOutput) Tags() BudgetResourceGroupFilterTagArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilter) []BudgetResourceGroupFilterTag { return v.Tags }).(BudgetResourceGroupFilterTagArrayOutput)
}

type BudgetResourceGroupFilterPtrOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilter)(nil)).Elem()
}

func (o BudgetResourceGroupFilterPtrOutput) ToBudgetResourceGroupFilterPtrOutput() BudgetResourceGroupFilterPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterPtrOutput) ToBudgetResourceGroupFilterPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterPtrOutput) Elem() BudgetResourceGroupFilterOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilter) BudgetResourceGroupFilter { return *v }).(BudgetResourceGroupFilterOutput)
}

// One or more `dimension` blocks as defined below to filter the budget on.
func (o BudgetResourceGroupFilterPtrOutput) Dimensions() BudgetResourceGroupFilterDimensionArrayOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilter) []BudgetResourceGroupFilterDimension {
		if v == nil {
			return nil
		}
		return v.Dimensions
	}).(BudgetResourceGroupFilterDimensionArrayOutput)
}

// A `not` block as defined below to filter the budget on.
func (o BudgetResourceGroupFilterPtrOutput) Not() BudgetResourceGroupFilterNotPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilter) *BudgetResourceGroupFilterNot {
		if v == nil {
			return nil
		}
		return v.Not
	}).(BudgetResourceGroupFilterNotPtrOutput)
}

// One or more `tag` blocks as defined below to filter the budget on.
func (o BudgetResourceGroupFilterPtrOutput) Tags() BudgetResourceGroupFilterTagArrayOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilter) []BudgetResourceGroupFilterTag {
		if v == nil {
			return nil
		}
		return v.Tags
	}).(BudgetResourceGroupFilterTagArrayOutput)
}

type BudgetResourceGroupFilterDimension struct {
	// The name of the column to use for the filter. The allowed values are
	Name string `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator *string `pulumi:"operator"`
	// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
	Values []string `pulumi:"values"`
}

// BudgetResourceGroupFilterDimensionInput is an input type that accepts BudgetResourceGroupFilterDimensionArgs and BudgetResourceGroupFilterDimensionOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterDimensionInput` via:
//
//          BudgetResourceGroupFilterDimensionArgs{...}
type BudgetResourceGroupFilterDimensionInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterDimensionOutput() BudgetResourceGroupFilterDimensionOutput
	ToBudgetResourceGroupFilterDimensionOutputWithContext(context.Context) BudgetResourceGroupFilterDimensionOutput
}

type BudgetResourceGroupFilterDimensionArgs struct {
	// The name of the column to use for the filter. The allowed values are
	Name pulumi.StringInput `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator pulumi.StringPtrInput `pulumi:"operator"`
	// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetResourceGroupFilterDimensionArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterDimension)(nil)).Elem()
}

func (i BudgetResourceGroupFilterDimensionArgs) ToBudgetResourceGroupFilterDimensionOutput() BudgetResourceGroupFilterDimensionOutput {
	return i.ToBudgetResourceGroupFilterDimensionOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterDimensionArgs) ToBudgetResourceGroupFilterDimensionOutputWithContext(ctx context.Context) BudgetResourceGroupFilterDimensionOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterDimensionOutput)
}

// BudgetResourceGroupFilterDimensionArrayInput is an input type that accepts BudgetResourceGroupFilterDimensionArray and BudgetResourceGroupFilterDimensionArrayOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterDimensionArrayInput` via:
//
//          BudgetResourceGroupFilterDimensionArray{ BudgetResourceGroupFilterDimensionArgs{...} }
type BudgetResourceGroupFilterDimensionArrayInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterDimensionArrayOutput() BudgetResourceGroupFilterDimensionArrayOutput
	ToBudgetResourceGroupFilterDimensionArrayOutputWithContext(context.Context) BudgetResourceGroupFilterDimensionArrayOutput
}

type BudgetResourceGroupFilterDimensionArray []BudgetResourceGroupFilterDimensionInput

func (BudgetResourceGroupFilterDimensionArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupFilterDimension)(nil)).Elem()
}

func (i BudgetResourceGroupFilterDimensionArray) ToBudgetResourceGroupFilterDimensionArrayOutput() BudgetResourceGroupFilterDimensionArrayOutput {
	return i.ToBudgetResourceGroupFilterDimensionArrayOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterDimensionArray) ToBudgetResourceGroupFilterDimensionArrayOutputWithContext(ctx context.Context) BudgetResourceGroupFilterDimensionArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterDimensionArrayOutput)
}

type BudgetResourceGroupFilterDimensionOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterDimensionOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterDimension)(nil)).Elem()
}

func (o BudgetResourceGroupFilterDimensionOutput) ToBudgetResourceGroupFilterDimensionOutput() BudgetResourceGroupFilterDimensionOutput {
	return o
}

func (o BudgetResourceGroupFilterDimensionOutput) ToBudgetResourceGroupFilterDimensionOutputWithContext(ctx context.Context) BudgetResourceGroupFilterDimensionOutput {
	return o
}

// The name of the column to use for the filter. The allowed values are
func (o BudgetResourceGroupFilterDimensionOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterDimension) string { return v.Name }).(pulumi.StringOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetResourceGroupFilterDimensionOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterDimension) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
func (o BudgetResourceGroupFilterDimensionOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterDimension) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterDimensionArrayOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterDimensionArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupFilterDimension)(nil)).Elem()
}

func (o BudgetResourceGroupFilterDimensionArrayOutput) ToBudgetResourceGroupFilterDimensionArrayOutput() BudgetResourceGroupFilterDimensionArrayOutput {
	return o
}

func (o BudgetResourceGroupFilterDimensionArrayOutput) ToBudgetResourceGroupFilterDimensionArrayOutputWithContext(ctx context.Context) BudgetResourceGroupFilterDimensionArrayOutput {
	return o
}

func (o BudgetResourceGroupFilterDimensionArrayOutput) Index(i pulumi.IntInput) BudgetResourceGroupFilterDimensionOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetResourceGroupFilterDimension {
		return vs[0].([]BudgetResourceGroupFilterDimension)[vs[1].(int)]
	}).(BudgetResourceGroupFilterDimensionOutput)
}

type BudgetResourceGroupFilterNot struct {
	// One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
	Dimension *BudgetResourceGroupFilterNotDimension `pulumi:"dimension"`
	// One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
	Tag *BudgetResourceGroupFilterNotTag `pulumi:"tag"`
}

// BudgetResourceGroupFilterNotInput is an input type that accepts BudgetResourceGroupFilterNotArgs and BudgetResourceGroupFilterNotOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterNotInput` via:
//
//          BudgetResourceGroupFilterNotArgs{...}
type BudgetResourceGroupFilterNotInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotOutput() BudgetResourceGroupFilterNotOutput
	ToBudgetResourceGroupFilterNotOutputWithContext(context.Context) BudgetResourceGroupFilterNotOutput
}

type BudgetResourceGroupFilterNotArgs struct {
	// One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
	Dimension BudgetResourceGroupFilterNotDimensionPtrInput `pulumi:"dimension"`
	// One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
	Tag BudgetResourceGroupFilterNotTagPtrInput `pulumi:"tag"`
}

func (BudgetResourceGroupFilterNotArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNot)(nil)).Elem()
}

func (i BudgetResourceGroupFilterNotArgs) ToBudgetResourceGroupFilterNotOutput() BudgetResourceGroupFilterNotOutput {
	return i.ToBudgetResourceGroupFilterNotOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotArgs) ToBudgetResourceGroupFilterNotOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotOutput)
}

func (i BudgetResourceGroupFilterNotArgs) ToBudgetResourceGroupFilterNotPtrOutput() BudgetResourceGroupFilterNotPtrOutput {
	return i.ToBudgetResourceGroupFilterNotPtrOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotArgs) ToBudgetResourceGroupFilterNotPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotOutput).ToBudgetResourceGroupFilterNotPtrOutputWithContext(ctx)
}

// BudgetResourceGroupFilterNotPtrInput is an input type that accepts BudgetResourceGroupFilterNotArgs, BudgetResourceGroupFilterNotPtr and BudgetResourceGroupFilterNotPtrOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterNotPtrInput` via:
//
//          BudgetResourceGroupFilterNotArgs{...}
//
//  or:
//
//          nil
type BudgetResourceGroupFilterNotPtrInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotPtrOutput() BudgetResourceGroupFilterNotPtrOutput
	ToBudgetResourceGroupFilterNotPtrOutputWithContext(context.Context) BudgetResourceGroupFilterNotPtrOutput
}

type budgetResourceGroupFilterNotPtrType BudgetResourceGroupFilterNotArgs

func BudgetResourceGroupFilterNotPtr(v *BudgetResourceGroupFilterNotArgs) BudgetResourceGroupFilterNotPtrInput {
	return (*budgetResourceGroupFilterNotPtrType)(v)
}

func (*budgetResourceGroupFilterNotPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNot)(nil)).Elem()
}

func (i *budgetResourceGroupFilterNotPtrType) ToBudgetResourceGroupFilterNotPtrOutput() BudgetResourceGroupFilterNotPtrOutput {
	return i.ToBudgetResourceGroupFilterNotPtrOutputWithContext(context.Background())
}

func (i *budgetResourceGroupFilterNotPtrType) ToBudgetResourceGroupFilterNotPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotPtrOutput)
}

type BudgetResourceGroupFilterNotOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNot)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotOutput) ToBudgetResourceGroupFilterNotOutput() BudgetResourceGroupFilterNotOutput {
	return o
}

func (o BudgetResourceGroupFilterNotOutput) ToBudgetResourceGroupFilterNotOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotOutput {
	return o
}

func (o BudgetResourceGroupFilterNotOutput) ToBudgetResourceGroupFilterNotPtrOutput() BudgetResourceGroupFilterNotPtrOutput {
	return o.ToBudgetResourceGroupFilterNotPtrOutputWithContext(context.Background())
}

func (o BudgetResourceGroupFilterNotOutput) ToBudgetResourceGroupFilterNotPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNot) *BudgetResourceGroupFilterNot {
		return &v
	}).(BudgetResourceGroupFilterNotPtrOutput)
}

// One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
func (o BudgetResourceGroupFilterNotOutput) Dimension() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNot) *BudgetResourceGroupFilterNotDimension { return v.Dimension }).(BudgetResourceGroupFilterNotDimensionPtrOutput)
}

// One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
func (o BudgetResourceGroupFilterNotOutput) Tag() BudgetResourceGroupFilterNotTagPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNot) *BudgetResourceGroupFilterNotTag { return v.Tag }).(BudgetResourceGroupFilterNotTagPtrOutput)
}

type BudgetResourceGroupFilterNotPtrOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNot)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotPtrOutput) ToBudgetResourceGroupFilterNotPtrOutput() BudgetResourceGroupFilterNotPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotPtrOutput) ToBudgetResourceGroupFilterNotPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotPtrOutput) Elem() BudgetResourceGroupFilterNotOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNot) BudgetResourceGroupFilterNot { return *v }).(BudgetResourceGroupFilterNotOutput)
}

// One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
func (o BudgetResourceGroupFilterNotPtrOutput) Dimension() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNot) *BudgetResourceGroupFilterNotDimension {
		if v == nil {
			return nil
		}
		return v.Dimension
	}).(BudgetResourceGroupFilterNotDimensionPtrOutput)
}

// One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
func (o BudgetResourceGroupFilterNotPtrOutput) Tag() BudgetResourceGroupFilterNotTagPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNot) *BudgetResourceGroupFilterNotTag {
		if v == nil {
			return nil
		}
		return v.Tag
	}).(BudgetResourceGroupFilterNotTagPtrOutput)
}

type BudgetResourceGroupFilterNotDimension struct {
	// The name of the column to use for the filter. The allowed values are
	Name string `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator *string `pulumi:"operator"`
	// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
	Values []string `pulumi:"values"`
}

// BudgetResourceGroupFilterNotDimensionInput is an input type that accepts BudgetResourceGroupFilterNotDimensionArgs and BudgetResourceGroupFilterNotDimensionOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterNotDimensionInput` via:
//
//          BudgetResourceGroupFilterNotDimensionArgs{...}
type BudgetResourceGroupFilterNotDimensionInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotDimensionOutput() BudgetResourceGroupFilterNotDimensionOutput
	ToBudgetResourceGroupFilterNotDimensionOutputWithContext(context.Context) BudgetResourceGroupFilterNotDimensionOutput
}

type BudgetResourceGroupFilterNotDimensionArgs struct {
	// The name of the column to use for the filter. The allowed values are
	Name pulumi.StringInput `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator pulumi.StringPtrInput `pulumi:"operator"`
	// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetResourceGroupFilterNotDimensionArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNotDimension)(nil)).Elem()
}

func (i BudgetResourceGroupFilterNotDimensionArgs) ToBudgetResourceGroupFilterNotDimensionOutput() BudgetResourceGroupFilterNotDimensionOutput {
	return i.ToBudgetResourceGroupFilterNotDimensionOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotDimensionArgs) ToBudgetResourceGroupFilterNotDimensionOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotDimensionOutput)
}

func (i BudgetResourceGroupFilterNotDimensionArgs) ToBudgetResourceGroupFilterNotDimensionPtrOutput() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return i.ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotDimensionArgs) ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotDimensionOutput).ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(ctx)
}

// BudgetResourceGroupFilterNotDimensionPtrInput is an input type that accepts BudgetResourceGroupFilterNotDimensionArgs, BudgetResourceGroupFilterNotDimensionPtr and BudgetResourceGroupFilterNotDimensionPtrOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterNotDimensionPtrInput` via:
//
//          BudgetResourceGroupFilterNotDimensionArgs{...}
//
//  or:
//
//          nil
type BudgetResourceGroupFilterNotDimensionPtrInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotDimensionPtrOutput() BudgetResourceGroupFilterNotDimensionPtrOutput
	ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(context.Context) BudgetResourceGroupFilterNotDimensionPtrOutput
}

type budgetResourceGroupFilterNotDimensionPtrType BudgetResourceGroupFilterNotDimensionArgs

func BudgetResourceGroupFilterNotDimensionPtr(v *BudgetResourceGroupFilterNotDimensionArgs) BudgetResourceGroupFilterNotDimensionPtrInput {
	return (*budgetResourceGroupFilterNotDimensionPtrType)(v)
}

func (*budgetResourceGroupFilterNotDimensionPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNotDimension)(nil)).Elem()
}

func (i *budgetResourceGroupFilterNotDimensionPtrType) ToBudgetResourceGroupFilterNotDimensionPtrOutput() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return i.ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (i *budgetResourceGroupFilterNotDimensionPtrType) ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotDimensionPtrOutput)
}

type BudgetResourceGroupFilterNotDimensionOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotDimensionOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNotDimension)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotDimensionOutput) ToBudgetResourceGroupFilterNotDimensionOutput() BudgetResourceGroupFilterNotDimensionOutput {
	return o
}

func (o BudgetResourceGroupFilterNotDimensionOutput) ToBudgetResourceGroupFilterNotDimensionOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionOutput {
	return o
}

func (o BudgetResourceGroupFilterNotDimensionOutput) ToBudgetResourceGroupFilterNotDimensionPtrOutput() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o.ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (o BudgetResourceGroupFilterNotDimensionOutput) ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotDimension) *BudgetResourceGroupFilterNotDimension {
		return &v
	}).(BudgetResourceGroupFilterNotDimensionPtrOutput)
}

// The name of the column to use for the filter. The allowed values are
func (o BudgetResourceGroupFilterNotDimensionOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotDimension) string { return v.Name }).(pulumi.StringOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetResourceGroupFilterNotDimensionOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotDimension) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
func (o BudgetResourceGroupFilterNotDimensionOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotDimension) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterNotDimensionPtrOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotDimensionPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNotDimension)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotDimensionPtrOutput) ToBudgetResourceGroupFilterNotDimensionPtrOutput() BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotDimensionPtrOutput) ToBudgetResourceGroupFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotDimensionPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotDimensionPtrOutput) Elem() BudgetResourceGroupFilterNotDimensionOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotDimension) BudgetResourceGroupFilterNotDimension { return *v }).(BudgetResourceGroupFilterNotDimensionOutput)
}

// The name of the column to use for the filter. The allowed values are
func (o BudgetResourceGroupFilterNotDimensionPtrOutput) Name() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotDimension) *string {
		if v == nil {
			return nil
		}
		return &v.Name
	}).(pulumi.StringPtrOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetResourceGroupFilterNotDimensionPtrOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotDimension) *string {
		if v == nil {
			return nil
		}
		return v.Operator
	}).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
func (o BudgetResourceGroupFilterNotDimensionPtrOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotDimension) []string {
		if v == nil {
			return nil
		}
		return v.Values
	}).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterNotTag struct {
	// The name of the tag to use for the filter.
	Name string `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator *string `pulumi:"operator"`
	// Specifies a list of values for the tag.
	Values []string `pulumi:"values"`
}

// BudgetResourceGroupFilterNotTagInput is an input type that accepts BudgetResourceGroupFilterNotTagArgs and BudgetResourceGroupFilterNotTagOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterNotTagInput` via:
//
//          BudgetResourceGroupFilterNotTagArgs{...}
type BudgetResourceGroupFilterNotTagInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotTagOutput() BudgetResourceGroupFilterNotTagOutput
	ToBudgetResourceGroupFilterNotTagOutputWithContext(context.Context) BudgetResourceGroupFilterNotTagOutput
}

type BudgetResourceGroupFilterNotTagArgs struct {
	// The name of the tag to use for the filter.
	Name pulumi.StringInput `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator pulumi.StringPtrInput `pulumi:"operator"`
	// Specifies a list of values for the tag.
	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetResourceGroupFilterNotTagArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNotTag)(nil)).Elem()
}

func (i BudgetResourceGroupFilterNotTagArgs) ToBudgetResourceGroupFilterNotTagOutput() BudgetResourceGroupFilterNotTagOutput {
	return i.ToBudgetResourceGroupFilterNotTagOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotTagArgs) ToBudgetResourceGroupFilterNotTagOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotTagOutput)
}

func (i BudgetResourceGroupFilterNotTagArgs) ToBudgetResourceGroupFilterNotTagPtrOutput() BudgetResourceGroupFilterNotTagPtrOutput {
	return i.ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterNotTagArgs) ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotTagOutput).ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(ctx)
}

// BudgetResourceGroupFilterNotTagPtrInput is an input type that accepts BudgetResourceGroupFilterNotTagArgs, BudgetResourceGroupFilterNotTagPtr and BudgetResourceGroupFilterNotTagPtrOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterNotTagPtrInput` via:
//
//          BudgetResourceGroupFilterNotTagArgs{...}
//
//  or:
//
//          nil
type BudgetResourceGroupFilterNotTagPtrInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterNotTagPtrOutput() BudgetResourceGroupFilterNotTagPtrOutput
	ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(context.Context) BudgetResourceGroupFilterNotTagPtrOutput
}

type budgetResourceGroupFilterNotTagPtrType BudgetResourceGroupFilterNotTagArgs

func BudgetResourceGroupFilterNotTagPtr(v *BudgetResourceGroupFilterNotTagArgs) BudgetResourceGroupFilterNotTagPtrInput {
	return (*budgetResourceGroupFilterNotTagPtrType)(v)
}

func (*budgetResourceGroupFilterNotTagPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNotTag)(nil)).Elem()
}

func (i *budgetResourceGroupFilterNotTagPtrType) ToBudgetResourceGroupFilterNotTagPtrOutput() BudgetResourceGroupFilterNotTagPtrOutput {
	return i.ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(context.Background())
}

func (i *budgetResourceGroupFilterNotTagPtrType) ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterNotTagPtrOutput)
}

type BudgetResourceGroupFilterNotTagOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotTagOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterNotTag)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotTagOutput) ToBudgetResourceGroupFilterNotTagOutput() BudgetResourceGroupFilterNotTagOutput {
	return o
}

func (o BudgetResourceGroupFilterNotTagOutput) ToBudgetResourceGroupFilterNotTagOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagOutput {
	return o
}

func (o BudgetResourceGroupFilterNotTagOutput) ToBudgetResourceGroupFilterNotTagPtrOutput() BudgetResourceGroupFilterNotTagPtrOutput {
	return o.ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(context.Background())
}

func (o BudgetResourceGroupFilterNotTagOutput) ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotTag) *BudgetResourceGroupFilterNotTag {
		return &v
	}).(BudgetResourceGroupFilterNotTagPtrOutput)
}

// The name of the tag to use for the filter.
func (o BudgetResourceGroupFilterNotTagOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotTag) string { return v.Name }).(pulumi.StringOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetResourceGroupFilterNotTagOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotTag) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the tag.
func (o BudgetResourceGroupFilterNotTagOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterNotTag) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterNotTagPtrOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterNotTagPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupFilterNotTag)(nil)).Elem()
}

func (o BudgetResourceGroupFilterNotTagPtrOutput) ToBudgetResourceGroupFilterNotTagPtrOutput() BudgetResourceGroupFilterNotTagPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotTagPtrOutput) ToBudgetResourceGroupFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetResourceGroupFilterNotTagPtrOutput {
	return o
}

func (o BudgetResourceGroupFilterNotTagPtrOutput) Elem() BudgetResourceGroupFilterNotTagOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotTag) BudgetResourceGroupFilterNotTag { return *v }).(BudgetResourceGroupFilterNotTagOutput)
}

// The name of the tag to use for the filter.
func (o BudgetResourceGroupFilterNotTagPtrOutput) Name() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotTag) *string {
		if v == nil {
			return nil
		}
		return &v.Name
	}).(pulumi.StringPtrOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetResourceGroupFilterNotTagPtrOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotTag) *string {
		if v == nil {
			return nil
		}
		return v.Operator
	}).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the tag.
func (o BudgetResourceGroupFilterNotTagPtrOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v *BudgetResourceGroupFilterNotTag) []string {
		if v == nil {
			return nil
		}
		return v.Values
	}).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterTag struct {
	// The name of the tag to use for the filter.
	Name string `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator *string `pulumi:"operator"`
	// Specifies a list of values for the tag.
	Values []string `pulumi:"values"`
}

// BudgetResourceGroupFilterTagInput is an input type that accepts BudgetResourceGroupFilterTagArgs and BudgetResourceGroupFilterTagOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterTagInput` via:
//
//          BudgetResourceGroupFilterTagArgs{...}
type BudgetResourceGroupFilterTagInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterTagOutput() BudgetResourceGroupFilterTagOutput
	ToBudgetResourceGroupFilterTagOutputWithContext(context.Context) BudgetResourceGroupFilterTagOutput
}

type BudgetResourceGroupFilterTagArgs struct {
	// The name of the tag to use for the filter.
	Name pulumi.StringInput `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator pulumi.StringPtrInput `pulumi:"operator"`
	// Specifies a list of values for the tag.
	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetResourceGroupFilterTagArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterTag)(nil)).Elem()
}

func (i BudgetResourceGroupFilterTagArgs) ToBudgetResourceGroupFilterTagOutput() BudgetResourceGroupFilterTagOutput {
	return i.ToBudgetResourceGroupFilterTagOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterTagArgs) ToBudgetResourceGroupFilterTagOutputWithContext(ctx context.Context) BudgetResourceGroupFilterTagOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterTagOutput)
}

// BudgetResourceGroupFilterTagArrayInput is an input type that accepts BudgetResourceGroupFilterTagArray and BudgetResourceGroupFilterTagArrayOutput values.
// You can construct a concrete instance of `BudgetResourceGroupFilterTagArrayInput` via:
//
//          BudgetResourceGroupFilterTagArray{ BudgetResourceGroupFilterTagArgs{...} }
type BudgetResourceGroupFilterTagArrayInput interface {
	pulumi.Input

	ToBudgetResourceGroupFilterTagArrayOutput() BudgetResourceGroupFilterTagArrayOutput
	ToBudgetResourceGroupFilterTagArrayOutputWithContext(context.Context) BudgetResourceGroupFilterTagArrayOutput
}

type BudgetResourceGroupFilterTagArray []BudgetResourceGroupFilterTagInput

func (BudgetResourceGroupFilterTagArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupFilterTag)(nil)).Elem()
}

func (i BudgetResourceGroupFilterTagArray) ToBudgetResourceGroupFilterTagArrayOutput() BudgetResourceGroupFilterTagArrayOutput {
	return i.ToBudgetResourceGroupFilterTagArrayOutputWithContext(context.Background())
}

func (i BudgetResourceGroupFilterTagArray) ToBudgetResourceGroupFilterTagArrayOutputWithContext(ctx context.Context) BudgetResourceGroupFilterTagArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupFilterTagArrayOutput)
}

type BudgetResourceGroupFilterTagOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterTagOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupFilterTag)(nil)).Elem()
}

func (o BudgetResourceGroupFilterTagOutput) ToBudgetResourceGroupFilterTagOutput() BudgetResourceGroupFilterTagOutput {
	return o
}

func (o BudgetResourceGroupFilterTagOutput) ToBudgetResourceGroupFilterTagOutputWithContext(ctx context.Context) BudgetResourceGroupFilterTagOutput {
	return o
}

// The name of the tag to use for the filter.
func (o BudgetResourceGroupFilterTagOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterTag) string { return v.Name }).(pulumi.StringOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetResourceGroupFilterTagOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterTag) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the tag.
func (o BudgetResourceGroupFilterTagOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupFilterTag) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetResourceGroupFilterTagArrayOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupFilterTagArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupFilterTag)(nil)).Elem()
}

func (o BudgetResourceGroupFilterTagArrayOutput) ToBudgetResourceGroupFilterTagArrayOutput() BudgetResourceGroupFilterTagArrayOutput {
	return o
}

func (o BudgetResourceGroupFilterTagArrayOutput) ToBudgetResourceGroupFilterTagArrayOutputWithContext(ctx context.Context) BudgetResourceGroupFilterTagArrayOutput {
	return o
}

func (o BudgetResourceGroupFilterTagArrayOutput) Index(i pulumi.IntInput) BudgetResourceGroupFilterTagOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetResourceGroupFilterTag {
		return vs[0].([]BudgetResourceGroupFilterTag)[vs[1].(int)]
	}).(BudgetResourceGroupFilterTagOutput)
}

type BudgetResourceGroupNotification struct {
	// Specifies a list of email addresses to send the budget notification to when the threshold is exceeded.
	ContactEmails []string `pulumi:"contactEmails"`
	// Specifies a list of Action Group IDs to send the budget notification to when the threshold is exceeded.
	ContactGroups []string `pulumi:"contactGroups"`
	// Specifies a list of contact roles to send the budget notification to when the threshold is exceeded.
	ContactRoles []string `pulumi:"contactRoles"`
	// Should the notification be enabled?
	Enabled *bool `pulumi:"enabled"`
	// The comparison operator for the notification. Must be one of `EqualTo`, `GreaterThan`, or `GreaterThanOrEqualTo`.
	Operator string `pulumi:"operator"`
	// 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 int `pulumi:"threshold"`
}

// BudgetResourceGroupNotificationInput is an input type that accepts BudgetResourceGroupNotificationArgs and BudgetResourceGroupNotificationOutput values.
// You can construct a concrete instance of `BudgetResourceGroupNotificationInput` via:
//
//          BudgetResourceGroupNotificationArgs{...}
type BudgetResourceGroupNotificationInput interface {
	pulumi.Input

	ToBudgetResourceGroupNotificationOutput() BudgetResourceGroupNotificationOutput
	ToBudgetResourceGroupNotificationOutputWithContext(context.Context) BudgetResourceGroupNotificationOutput
}

type BudgetResourceGroupNotificationArgs struct {
	// Specifies a list of email addresses to send the budget notification to when the threshold is exceeded.
	ContactEmails pulumi.StringArrayInput `pulumi:"contactEmails"`
	// Specifies a list of Action Group IDs to send the budget notification to when the threshold is exceeded.
	ContactGroups pulumi.StringArrayInput `pulumi:"contactGroups"`
	// Specifies a list of contact roles to send the budget notification to when the threshold is exceeded.
	ContactRoles pulumi.StringArrayInput `pulumi:"contactRoles"`
	// Should the notification be enabled?
	Enabled pulumi.BoolPtrInput `pulumi:"enabled"`
	// The comparison operator for the notification. Must be one of `EqualTo`, `GreaterThan`, or `GreaterThanOrEqualTo`.
	Operator pulumi.StringInput `pulumi:"operator"`
	// 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 pulumi.IntInput `pulumi:"threshold"`
}

func (BudgetResourceGroupNotificationArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupNotification)(nil)).Elem()
}

func (i BudgetResourceGroupNotificationArgs) ToBudgetResourceGroupNotificationOutput() BudgetResourceGroupNotificationOutput {
	return i.ToBudgetResourceGroupNotificationOutputWithContext(context.Background())
}

func (i BudgetResourceGroupNotificationArgs) ToBudgetResourceGroupNotificationOutputWithContext(ctx context.Context) BudgetResourceGroupNotificationOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupNotificationOutput)
}

// BudgetResourceGroupNotificationArrayInput is an input type that accepts BudgetResourceGroupNotificationArray and BudgetResourceGroupNotificationArrayOutput values.
// You can construct a concrete instance of `BudgetResourceGroupNotificationArrayInput` via:
//
//          BudgetResourceGroupNotificationArray{ BudgetResourceGroupNotificationArgs{...} }
type BudgetResourceGroupNotificationArrayInput interface {
	pulumi.Input

	ToBudgetResourceGroupNotificationArrayOutput() BudgetResourceGroupNotificationArrayOutput
	ToBudgetResourceGroupNotificationArrayOutputWithContext(context.Context) BudgetResourceGroupNotificationArrayOutput
}

type BudgetResourceGroupNotificationArray []BudgetResourceGroupNotificationInput

func (BudgetResourceGroupNotificationArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupNotification)(nil)).Elem()
}

func (i BudgetResourceGroupNotificationArray) ToBudgetResourceGroupNotificationArrayOutput() BudgetResourceGroupNotificationArrayOutput {
	return i.ToBudgetResourceGroupNotificationArrayOutputWithContext(context.Background())
}

func (i BudgetResourceGroupNotificationArray) ToBudgetResourceGroupNotificationArrayOutputWithContext(ctx context.Context) BudgetResourceGroupNotificationArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupNotificationArrayOutput)
}

type BudgetResourceGroupNotificationOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupNotificationOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupNotification)(nil)).Elem()
}

func (o BudgetResourceGroupNotificationOutput) ToBudgetResourceGroupNotificationOutput() BudgetResourceGroupNotificationOutput {
	return o
}

func (o BudgetResourceGroupNotificationOutput) ToBudgetResourceGroupNotificationOutputWithContext(ctx context.Context) BudgetResourceGroupNotificationOutput {
	return o
}

// Specifies a list of email addresses to send the budget notification to when the threshold is exceeded.
func (o BudgetResourceGroupNotificationOutput) ContactEmails() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) []string { return v.ContactEmails }).(pulumi.StringArrayOutput)
}

// Specifies a list of Action Group IDs to send the budget notification to when the threshold is exceeded.
func (o BudgetResourceGroupNotificationOutput) ContactGroups() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) []string { return v.ContactGroups }).(pulumi.StringArrayOutput)
}

// Specifies a list of contact roles to send the budget notification to when the threshold is exceeded.
func (o BudgetResourceGroupNotificationOutput) ContactRoles() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) []string { return v.ContactRoles }).(pulumi.StringArrayOutput)
}

// Should the notification be enabled?
func (o BudgetResourceGroupNotificationOutput) Enabled() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) *bool { return v.Enabled }).(pulumi.BoolPtrOutput)
}

// The comparison operator for the notification. Must be one of `EqualTo`, `GreaterThan`, or `GreaterThanOrEqualTo`.
func (o BudgetResourceGroupNotificationOutput) Operator() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) string { return v.Operator }).(pulumi.StringOutput)
}

// 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.
func (o BudgetResourceGroupNotificationOutput) Threshold() pulumi.IntOutput {
	return o.ApplyT(func(v BudgetResourceGroupNotification) int { return v.Threshold }).(pulumi.IntOutput)
}

type BudgetResourceGroupNotificationArrayOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupNotificationArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetResourceGroupNotification)(nil)).Elem()
}

func (o BudgetResourceGroupNotificationArrayOutput) ToBudgetResourceGroupNotificationArrayOutput() BudgetResourceGroupNotificationArrayOutput {
	return o
}

func (o BudgetResourceGroupNotificationArrayOutput) ToBudgetResourceGroupNotificationArrayOutputWithContext(ctx context.Context) BudgetResourceGroupNotificationArrayOutput {
	return o
}

func (o BudgetResourceGroupNotificationArrayOutput) Index(i pulumi.IntInput) BudgetResourceGroupNotificationOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetResourceGroupNotification {
		return vs[0].([]BudgetResourceGroupNotification)[vs[1].(int)]
	}).(BudgetResourceGroupNotificationOutput)
}

type BudgetResourceGroupTimePeriod struct {
	// The end date for the budget. If not set this will be 10 years after the start date.
	EndDate *string `pulumi:"endDate"`
	// The start date for 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. Changing this forces a new Resource Group Consumption Budget to be created.
	StartDate string `pulumi:"startDate"`
}

// BudgetResourceGroupTimePeriodInput is an input type that accepts BudgetResourceGroupTimePeriodArgs and BudgetResourceGroupTimePeriodOutput values.
// You can construct a concrete instance of `BudgetResourceGroupTimePeriodInput` via:
//
//          BudgetResourceGroupTimePeriodArgs{...}
type BudgetResourceGroupTimePeriodInput interface {
	pulumi.Input

	ToBudgetResourceGroupTimePeriodOutput() BudgetResourceGroupTimePeriodOutput
	ToBudgetResourceGroupTimePeriodOutputWithContext(context.Context) BudgetResourceGroupTimePeriodOutput
}

type BudgetResourceGroupTimePeriodArgs struct {
	// The end date for the budget. If not set this will be 10 years after the start date.
	EndDate pulumi.StringPtrInput `pulumi:"endDate"`
	// The start date for 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. Changing this forces a new Resource Group Consumption Budget to be created.
	StartDate pulumi.StringInput `pulumi:"startDate"`
}

func (BudgetResourceGroupTimePeriodArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupTimePeriod)(nil)).Elem()
}

func (i BudgetResourceGroupTimePeriodArgs) ToBudgetResourceGroupTimePeriodOutput() BudgetResourceGroupTimePeriodOutput {
	return i.ToBudgetResourceGroupTimePeriodOutputWithContext(context.Background())
}

func (i BudgetResourceGroupTimePeriodArgs) ToBudgetResourceGroupTimePeriodOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupTimePeriodOutput)
}

func (i BudgetResourceGroupTimePeriodArgs) ToBudgetResourceGroupTimePeriodPtrOutput() BudgetResourceGroupTimePeriodPtrOutput {
	return i.ToBudgetResourceGroupTimePeriodPtrOutputWithContext(context.Background())
}

func (i BudgetResourceGroupTimePeriodArgs) ToBudgetResourceGroupTimePeriodPtrOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupTimePeriodOutput).ToBudgetResourceGroupTimePeriodPtrOutputWithContext(ctx)
}

// BudgetResourceGroupTimePeriodPtrInput is an input type that accepts BudgetResourceGroupTimePeriodArgs, BudgetResourceGroupTimePeriodPtr and BudgetResourceGroupTimePeriodPtrOutput values.
// You can construct a concrete instance of `BudgetResourceGroupTimePeriodPtrInput` via:
//
//          BudgetResourceGroupTimePeriodArgs{...}
//
//  or:
//
//          nil
type BudgetResourceGroupTimePeriodPtrInput interface {
	pulumi.Input

	ToBudgetResourceGroupTimePeriodPtrOutput() BudgetResourceGroupTimePeriodPtrOutput
	ToBudgetResourceGroupTimePeriodPtrOutputWithContext(context.Context) BudgetResourceGroupTimePeriodPtrOutput
}

type budgetResourceGroupTimePeriodPtrType BudgetResourceGroupTimePeriodArgs

func BudgetResourceGroupTimePeriodPtr(v *BudgetResourceGroupTimePeriodArgs) BudgetResourceGroupTimePeriodPtrInput {
	return (*budgetResourceGroupTimePeriodPtrType)(v)
}

func (*budgetResourceGroupTimePeriodPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupTimePeriod)(nil)).Elem()
}

func (i *budgetResourceGroupTimePeriodPtrType) ToBudgetResourceGroupTimePeriodPtrOutput() BudgetResourceGroupTimePeriodPtrOutput {
	return i.ToBudgetResourceGroupTimePeriodPtrOutputWithContext(context.Background())
}

func (i *budgetResourceGroupTimePeriodPtrType) ToBudgetResourceGroupTimePeriodPtrOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetResourceGroupTimePeriodPtrOutput)
}

type BudgetResourceGroupTimePeriodOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupTimePeriodOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetResourceGroupTimePeriod)(nil)).Elem()
}

func (o BudgetResourceGroupTimePeriodOutput) ToBudgetResourceGroupTimePeriodOutput() BudgetResourceGroupTimePeriodOutput {
	return o
}

func (o BudgetResourceGroupTimePeriodOutput) ToBudgetResourceGroupTimePeriodOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodOutput {
	return o
}

func (o BudgetResourceGroupTimePeriodOutput) ToBudgetResourceGroupTimePeriodPtrOutput() BudgetResourceGroupTimePeriodPtrOutput {
	return o.ToBudgetResourceGroupTimePeriodPtrOutputWithContext(context.Background())
}

func (o BudgetResourceGroupTimePeriodOutput) ToBudgetResourceGroupTimePeriodPtrOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupTimePeriod) *BudgetResourceGroupTimePeriod {
		return &v
	}).(BudgetResourceGroupTimePeriodPtrOutput)
}

// The end date for the budget. If not set this will be 10 years after the start date.
func (o BudgetResourceGroupTimePeriodOutput) EndDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetResourceGroupTimePeriod) *string { return v.EndDate }).(pulumi.StringPtrOutput)
}

// The start date for 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. Changing this forces a new Resource Group Consumption Budget to be created.
func (o BudgetResourceGroupTimePeriodOutput) StartDate() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetResourceGroupTimePeriod) string { return v.StartDate }).(pulumi.StringOutput)
}

type BudgetResourceGroupTimePeriodPtrOutput struct{ *pulumi.OutputState }

func (BudgetResourceGroupTimePeriodPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetResourceGroupTimePeriod)(nil)).Elem()
}

func (o BudgetResourceGroupTimePeriodPtrOutput) ToBudgetResourceGroupTimePeriodPtrOutput() BudgetResourceGroupTimePeriodPtrOutput {
	return o
}

func (o BudgetResourceGroupTimePeriodPtrOutput) ToBudgetResourceGroupTimePeriodPtrOutputWithContext(ctx context.Context) BudgetResourceGroupTimePeriodPtrOutput {
	return o
}

func (o BudgetResourceGroupTimePeriodPtrOutput) Elem() BudgetResourceGroupTimePeriodOutput {
	return o.ApplyT(func(v *BudgetResourceGroupTimePeriod) BudgetResourceGroupTimePeriod { return *v }).(BudgetResourceGroupTimePeriodOutput)
}

// The end date for the budget. If not set this will be 10 years after the start date.
func (o BudgetResourceGroupTimePeriodPtrOutput) EndDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupTimePeriod) *string {
		if v == nil {
			return nil
		}
		return v.EndDate
	}).(pulumi.StringPtrOutput)
}

// The start date for 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. Changing this forces a new Resource Group Consumption Budget to be created.
func (o BudgetResourceGroupTimePeriodPtrOutput) StartDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetResourceGroupTimePeriod) *string {
		if v == nil {
			return nil
		}
		return &v.StartDate
	}).(pulumi.StringPtrOutput)
}

type BudgetSubscriptionFilter struct {
	// One or more `dimension` blocks as defined below to filter the budget on.
	Dimensions []BudgetSubscriptionFilterDimension `pulumi:"dimensions"`
	// A `not` block as defined below to filter the budget on.
	Not *BudgetSubscriptionFilterNot `pulumi:"not"`
	// One or more `tag` blocks as defined below to filter the budget on.
	Tags []BudgetSubscriptionFilterTag `pulumi:"tags"`
}

// BudgetSubscriptionFilterInput is an input type that accepts BudgetSubscriptionFilterArgs and BudgetSubscriptionFilterOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterInput` via:
//
//          BudgetSubscriptionFilterArgs{...}
type BudgetSubscriptionFilterInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterOutput() BudgetSubscriptionFilterOutput
	ToBudgetSubscriptionFilterOutputWithContext(context.Context) BudgetSubscriptionFilterOutput
}

type BudgetSubscriptionFilterArgs struct {
	// One or more `dimension` blocks as defined below to filter the budget on.
	Dimensions BudgetSubscriptionFilterDimensionArrayInput `pulumi:"dimensions"`
	// A `not` block as defined below to filter the budget on.
	Not BudgetSubscriptionFilterNotPtrInput `pulumi:"not"`
	// One or more `tag` blocks as defined below to filter the budget on.
	Tags BudgetSubscriptionFilterTagArrayInput `pulumi:"tags"`
}

func (BudgetSubscriptionFilterArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilter)(nil)).Elem()
}

func (i BudgetSubscriptionFilterArgs) ToBudgetSubscriptionFilterOutput() BudgetSubscriptionFilterOutput {
	return i.ToBudgetSubscriptionFilterOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterArgs) ToBudgetSubscriptionFilterOutputWithContext(ctx context.Context) BudgetSubscriptionFilterOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterOutput)
}

func (i BudgetSubscriptionFilterArgs) ToBudgetSubscriptionFilterPtrOutput() BudgetSubscriptionFilterPtrOutput {
	return i.ToBudgetSubscriptionFilterPtrOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterArgs) ToBudgetSubscriptionFilterPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterOutput).ToBudgetSubscriptionFilterPtrOutputWithContext(ctx)
}

// BudgetSubscriptionFilterPtrInput is an input type that accepts BudgetSubscriptionFilterArgs, BudgetSubscriptionFilterPtr and BudgetSubscriptionFilterPtrOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterPtrInput` via:
//
//          BudgetSubscriptionFilterArgs{...}
//
//  or:
//
//          nil
type BudgetSubscriptionFilterPtrInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterPtrOutput() BudgetSubscriptionFilterPtrOutput
	ToBudgetSubscriptionFilterPtrOutputWithContext(context.Context) BudgetSubscriptionFilterPtrOutput
}

type budgetSubscriptionFilterPtrType BudgetSubscriptionFilterArgs

func BudgetSubscriptionFilterPtr(v *BudgetSubscriptionFilterArgs) BudgetSubscriptionFilterPtrInput {
	return (*budgetSubscriptionFilterPtrType)(v)
}

func (*budgetSubscriptionFilterPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilter)(nil)).Elem()
}

func (i *budgetSubscriptionFilterPtrType) ToBudgetSubscriptionFilterPtrOutput() BudgetSubscriptionFilterPtrOutput {
	return i.ToBudgetSubscriptionFilterPtrOutputWithContext(context.Background())
}

func (i *budgetSubscriptionFilterPtrType) ToBudgetSubscriptionFilterPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterPtrOutput)
}

type BudgetSubscriptionFilterOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilter)(nil)).Elem()
}

func (o BudgetSubscriptionFilterOutput) ToBudgetSubscriptionFilterOutput() BudgetSubscriptionFilterOutput {
	return o
}

func (o BudgetSubscriptionFilterOutput) ToBudgetSubscriptionFilterOutputWithContext(ctx context.Context) BudgetSubscriptionFilterOutput {
	return o
}

func (o BudgetSubscriptionFilterOutput) ToBudgetSubscriptionFilterPtrOutput() BudgetSubscriptionFilterPtrOutput {
	return o.ToBudgetSubscriptionFilterPtrOutputWithContext(context.Background())
}

func (o BudgetSubscriptionFilterOutput) ToBudgetSubscriptionFilterPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilter) *BudgetSubscriptionFilter {
		return &v
	}).(BudgetSubscriptionFilterPtrOutput)
}

// One or more `dimension` blocks as defined below to filter the budget on.
func (o BudgetSubscriptionFilterOutput) Dimensions() BudgetSubscriptionFilterDimensionArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilter) []BudgetSubscriptionFilterDimension { return v.Dimensions }).(BudgetSubscriptionFilterDimensionArrayOutput)
}

// A `not` block as defined below to filter the budget on.
func (o BudgetSubscriptionFilterOutput) Not() BudgetSubscriptionFilterNotPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilter) *BudgetSubscriptionFilterNot { return v.Not }).(BudgetSubscriptionFilterNotPtrOutput)
}

// One or more `tag` blocks as defined below to filter the budget on.
func (o BudgetSubscriptionFilterOutput) Tags() BudgetSubscriptionFilterTagArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilter) []BudgetSubscriptionFilterTag { return v.Tags }).(BudgetSubscriptionFilterTagArrayOutput)
}

type BudgetSubscriptionFilterPtrOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilter)(nil)).Elem()
}

func (o BudgetSubscriptionFilterPtrOutput) ToBudgetSubscriptionFilterPtrOutput() BudgetSubscriptionFilterPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterPtrOutput) ToBudgetSubscriptionFilterPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterPtrOutput) Elem() BudgetSubscriptionFilterOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilter) BudgetSubscriptionFilter { return *v }).(BudgetSubscriptionFilterOutput)
}

// One or more `dimension` blocks as defined below to filter the budget on.
func (o BudgetSubscriptionFilterPtrOutput) Dimensions() BudgetSubscriptionFilterDimensionArrayOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilter) []BudgetSubscriptionFilterDimension {
		if v == nil {
			return nil
		}
		return v.Dimensions
	}).(BudgetSubscriptionFilterDimensionArrayOutput)
}

// A `not` block as defined below to filter the budget on.
func (o BudgetSubscriptionFilterPtrOutput) Not() BudgetSubscriptionFilterNotPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilter) *BudgetSubscriptionFilterNot {
		if v == nil {
			return nil
		}
		return v.Not
	}).(BudgetSubscriptionFilterNotPtrOutput)
}

// One or more `tag` blocks as defined below to filter the budget on.
func (o BudgetSubscriptionFilterPtrOutput) Tags() BudgetSubscriptionFilterTagArrayOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilter) []BudgetSubscriptionFilterTag {
		if v == nil {
			return nil
		}
		return v.Tags
	}).(BudgetSubscriptionFilterTagArrayOutput)
}

type BudgetSubscriptionFilterDimension struct {
	// The name of the column to use for the filter. The allowed values are
	Name string `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator *string `pulumi:"operator"`
	// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
	Values []string `pulumi:"values"`
}

// BudgetSubscriptionFilterDimensionInput is an input type that accepts BudgetSubscriptionFilterDimensionArgs and BudgetSubscriptionFilterDimensionOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterDimensionInput` via:
//
//          BudgetSubscriptionFilterDimensionArgs{...}
type BudgetSubscriptionFilterDimensionInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterDimensionOutput() BudgetSubscriptionFilterDimensionOutput
	ToBudgetSubscriptionFilterDimensionOutputWithContext(context.Context) BudgetSubscriptionFilterDimensionOutput
}

type BudgetSubscriptionFilterDimensionArgs struct {
	// The name of the column to use for the filter. The allowed values are
	Name pulumi.StringInput `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator pulumi.StringPtrInput `pulumi:"operator"`
	// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetSubscriptionFilterDimensionArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterDimension)(nil)).Elem()
}

func (i BudgetSubscriptionFilterDimensionArgs) ToBudgetSubscriptionFilterDimensionOutput() BudgetSubscriptionFilterDimensionOutput {
	return i.ToBudgetSubscriptionFilterDimensionOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterDimensionArgs) ToBudgetSubscriptionFilterDimensionOutputWithContext(ctx context.Context) BudgetSubscriptionFilterDimensionOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterDimensionOutput)
}

// BudgetSubscriptionFilterDimensionArrayInput is an input type that accepts BudgetSubscriptionFilterDimensionArray and BudgetSubscriptionFilterDimensionArrayOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterDimensionArrayInput` via:
//
//          BudgetSubscriptionFilterDimensionArray{ BudgetSubscriptionFilterDimensionArgs{...} }
type BudgetSubscriptionFilterDimensionArrayInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterDimensionArrayOutput() BudgetSubscriptionFilterDimensionArrayOutput
	ToBudgetSubscriptionFilterDimensionArrayOutputWithContext(context.Context) BudgetSubscriptionFilterDimensionArrayOutput
}

type BudgetSubscriptionFilterDimensionArray []BudgetSubscriptionFilterDimensionInput

func (BudgetSubscriptionFilterDimensionArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionFilterDimension)(nil)).Elem()
}

func (i BudgetSubscriptionFilterDimensionArray) ToBudgetSubscriptionFilterDimensionArrayOutput() BudgetSubscriptionFilterDimensionArrayOutput {
	return i.ToBudgetSubscriptionFilterDimensionArrayOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterDimensionArray) ToBudgetSubscriptionFilterDimensionArrayOutputWithContext(ctx context.Context) BudgetSubscriptionFilterDimensionArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterDimensionArrayOutput)
}

type BudgetSubscriptionFilterDimensionOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterDimensionOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterDimension)(nil)).Elem()
}

func (o BudgetSubscriptionFilterDimensionOutput) ToBudgetSubscriptionFilterDimensionOutput() BudgetSubscriptionFilterDimensionOutput {
	return o
}

func (o BudgetSubscriptionFilterDimensionOutput) ToBudgetSubscriptionFilterDimensionOutputWithContext(ctx context.Context) BudgetSubscriptionFilterDimensionOutput {
	return o
}

// The name of the column to use for the filter. The allowed values are
func (o BudgetSubscriptionFilterDimensionOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterDimension) string { return v.Name }).(pulumi.StringOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetSubscriptionFilterDimensionOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterDimension) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
func (o BudgetSubscriptionFilterDimensionOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterDimension) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterDimensionArrayOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterDimensionArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionFilterDimension)(nil)).Elem()
}

func (o BudgetSubscriptionFilterDimensionArrayOutput) ToBudgetSubscriptionFilterDimensionArrayOutput() BudgetSubscriptionFilterDimensionArrayOutput {
	return o
}

func (o BudgetSubscriptionFilterDimensionArrayOutput) ToBudgetSubscriptionFilterDimensionArrayOutputWithContext(ctx context.Context) BudgetSubscriptionFilterDimensionArrayOutput {
	return o
}

func (o BudgetSubscriptionFilterDimensionArrayOutput) Index(i pulumi.IntInput) BudgetSubscriptionFilterDimensionOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetSubscriptionFilterDimension {
		return vs[0].([]BudgetSubscriptionFilterDimension)[vs[1].(int)]
	}).(BudgetSubscriptionFilterDimensionOutput)
}

type BudgetSubscriptionFilterNot struct {
	// One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
	Dimension *BudgetSubscriptionFilterNotDimension `pulumi:"dimension"`
	// One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
	Tag *BudgetSubscriptionFilterNotTag `pulumi:"tag"`
}

// BudgetSubscriptionFilterNotInput is an input type that accepts BudgetSubscriptionFilterNotArgs and BudgetSubscriptionFilterNotOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterNotInput` via:
//
//          BudgetSubscriptionFilterNotArgs{...}
type BudgetSubscriptionFilterNotInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotOutput() BudgetSubscriptionFilterNotOutput
	ToBudgetSubscriptionFilterNotOutputWithContext(context.Context) BudgetSubscriptionFilterNotOutput
}

type BudgetSubscriptionFilterNotArgs struct {
	// One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
	Dimension BudgetSubscriptionFilterNotDimensionPtrInput `pulumi:"dimension"`
	// One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
	Tag BudgetSubscriptionFilterNotTagPtrInput `pulumi:"tag"`
}

func (BudgetSubscriptionFilterNotArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNot)(nil)).Elem()
}

func (i BudgetSubscriptionFilterNotArgs) ToBudgetSubscriptionFilterNotOutput() BudgetSubscriptionFilterNotOutput {
	return i.ToBudgetSubscriptionFilterNotOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotArgs) ToBudgetSubscriptionFilterNotOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotOutput)
}

func (i BudgetSubscriptionFilterNotArgs) ToBudgetSubscriptionFilterNotPtrOutput() BudgetSubscriptionFilterNotPtrOutput {
	return i.ToBudgetSubscriptionFilterNotPtrOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotArgs) ToBudgetSubscriptionFilterNotPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotOutput).ToBudgetSubscriptionFilterNotPtrOutputWithContext(ctx)
}

// BudgetSubscriptionFilterNotPtrInput is an input type that accepts BudgetSubscriptionFilterNotArgs, BudgetSubscriptionFilterNotPtr and BudgetSubscriptionFilterNotPtrOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterNotPtrInput` via:
//
//          BudgetSubscriptionFilterNotArgs{...}
//
//  or:
//
//          nil
type BudgetSubscriptionFilterNotPtrInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotPtrOutput() BudgetSubscriptionFilterNotPtrOutput
	ToBudgetSubscriptionFilterNotPtrOutputWithContext(context.Context) BudgetSubscriptionFilterNotPtrOutput
}

type budgetSubscriptionFilterNotPtrType BudgetSubscriptionFilterNotArgs

func BudgetSubscriptionFilterNotPtr(v *BudgetSubscriptionFilterNotArgs) BudgetSubscriptionFilterNotPtrInput {
	return (*budgetSubscriptionFilterNotPtrType)(v)
}

func (*budgetSubscriptionFilterNotPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNot)(nil)).Elem()
}

func (i *budgetSubscriptionFilterNotPtrType) ToBudgetSubscriptionFilterNotPtrOutput() BudgetSubscriptionFilterNotPtrOutput {
	return i.ToBudgetSubscriptionFilterNotPtrOutputWithContext(context.Background())
}

func (i *budgetSubscriptionFilterNotPtrType) ToBudgetSubscriptionFilterNotPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotPtrOutput)
}

type BudgetSubscriptionFilterNotOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNot)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotOutput) ToBudgetSubscriptionFilterNotOutput() BudgetSubscriptionFilterNotOutput {
	return o
}

func (o BudgetSubscriptionFilterNotOutput) ToBudgetSubscriptionFilterNotOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotOutput {
	return o
}

func (o BudgetSubscriptionFilterNotOutput) ToBudgetSubscriptionFilterNotPtrOutput() BudgetSubscriptionFilterNotPtrOutput {
	return o.ToBudgetSubscriptionFilterNotPtrOutputWithContext(context.Background())
}

func (o BudgetSubscriptionFilterNotOutput) ToBudgetSubscriptionFilterNotPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNot) *BudgetSubscriptionFilterNot {
		return &v
	}).(BudgetSubscriptionFilterNotPtrOutput)
}

// One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
func (o BudgetSubscriptionFilterNotOutput) Dimension() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNot) *BudgetSubscriptionFilterNotDimension { return v.Dimension }).(BudgetSubscriptionFilterNotDimensionPtrOutput)
}

// One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
func (o BudgetSubscriptionFilterNotOutput) Tag() BudgetSubscriptionFilterNotTagPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNot) *BudgetSubscriptionFilterNotTag { return v.Tag }).(BudgetSubscriptionFilterNotTagPtrOutput)
}

type BudgetSubscriptionFilterNotPtrOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNot)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotPtrOutput) ToBudgetSubscriptionFilterNotPtrOutput() BudgetSubscriptionFilterNotPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotPtrOutput) ToBudgetSubscriptionFilterNotPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotPtrOutput) Elem() BudgetSubscriptionFilterNotOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNot) BudgetSubscriptionFilterNot { return *v }).(BudgetSubscriptionFilterNotOutput)
}

// One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
func (o BudgetSubscriptionFilterNotPtrOutput) Dimension() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNot) *BudgetSubscriptionFilterNotDimension {
		if v == nil {
			return nil
		}
		return v.Dimension
	}).(BudgetSubscriptionFilterNotDimensionPtrOutput)
}

// One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
func (o BudgetSubscriptionFilterNotPtrOutput) Tag() BudgetSubscriptionFilterNotTagPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNot) *BudgetSubscriptionFilterNotTag {
		if v == nil {
			return nil
		}
		return v.Tag
	}).(BudgetSubscriptionFilterNotTagPtrOutput)
}

type BudgetSubscriptionFilterNotDimension struct {
	// The name of the column to use for the filter. The allowed values are
	Name string `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator *string `pulumi:"operator"`
	// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
	Values []string `pulumi:"values"`
}

// BudgetSubscriptionFilterNotDimensionInput is an input type that accepts BudgetSubscriptionFilterNotDimensionArgs and BudgetSubscriptionFilterNotDimensionOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterNotDimensionInput` via:
//
//          BudgetSubscriptionFilterNotDimensionArgs{...}
type BudgetSubscriptionFilterNotDimensionInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotDimensionOutput() BudgetSubscriptionFilterNotDimensionOutput
	ToBudgetSubscriptionFilterNotDimensionOutputWithContext(context.Context) BudgetSubscriptionFilterNotDimensionOutput
}

type BudgetSubscriptionFilterNotDimensionArgs struct {
	// The name of the column to use for the filter. The allowed values are
	Name pulumi.StringInput `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator pulumi.StringPtrInput `pulumi:"operator"`
	// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetSubscriptionFilterNotDimensionArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNotDimension)(nil)).Elem()
}

func (i BudgetSubscriptionFilterNotDimensionArgs) ToBudgetSubscriptionFilterNotDimensionOutput() BudgetSubscriptionFilterNotDimensionOutput {
	return i.ToBudgetSubscriptionFilterNotDimensionOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotDimensionArgs) ToBudgetSubscriptionFilterNotDimensionOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotDimensionOutput)
}

func (i BudgetSubscriptionFilterNotDimensionArgs) ToBudgetSubscriptionFilterNotDimensionPtrOutput() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return i.ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotDimensionArgs) ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotDimensionOutput).ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(ctx)
}

// BudgetSubscriptionFilterNotDimensionPtrInput is an input type that accepts BudgetSubscriptionFilterNotDimensionArgs, BudgetSubscriptionFilterNotDimensionPtr and BudgetSubscriptionFilterNotDimensionPtrOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterNotDimensionPtrInput` via:
//
//          BudgetSubscriptionFilterNotDimensionArgs{...}
//
//  or:
//
//          nil
type BudgetSubscriptionFilterNotDimensionPtrInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotDimensionPtrOutput() BudgetSubscriptionFilterNotDimensionPtrOutput
	ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(context.Context) BudgetSubscriptionFilterNotDimensionPtrOutput
}

type budgetSubscriptionFilterNotDimensionPtrType BudgetSubscriptionFilterNotDimensionArgs

func BudgetSubscriptionFilterNotDimensionPtr(v *BudgetSubscriptionFilterNotDimensionArgs) BudgetSubscriptionFilterNotDimensionPtrInput {
	return (*budgetSubscriptionFilterNotDimensionPtrType)(v)
}

func (*budgetSubscriptionFilterNotDimensionPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNotDimension)(nil)).Elem()
}

func (i *budgetSubscriptionFilterNotDimensionPtrType) ToBudgetSubscriptionFilterNotDimensionPtrOutput() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return i.ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (i *budgetSubscriptionFilterNotDimensionPtrType) ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotDimensionPtrOutput)
}

type BudgetSubscriptionFilterNotDimensionOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotDimensionOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNotDimension)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotDimensionOutput) ToBudgetSubscriptionFilterNotDimensionOutput() BudgetSubscriptionFilterNotDimensionOutput {
	return o
}

func (o BudgetSubscriptionFilterNotDimensionOutput) ToBudgetSubscriptionFilterNotDimensionOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionOutput {
	return o
}

func (o BudgetSubscriptionFilterNotDimensionOutput) ToBudgetSubscriptionFilterNotDimensionPtrOutput() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o.ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(context.Background())
}

func (o BudgetSubscriptionFilterNotDimensionOutput) ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotDimension) *BudgetSubscriptionFilterNotDimension {
		return &v
	}).(BudgetSubscriptionFilterNotDimensionPtrOutput)
}

// The name of the column to use for the filter. The allowed values are
func (o BudgetSubscriptionFilterNotDimensionOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotDimension) string { return v.Name }).(pulumi.StringOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetSubscriptionFilterNotDimensionOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotDimension) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
func (o BudgetSubscriptionFilterNotDimensionOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotDimension) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterNotDimensionPtrOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotDimensionPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNotDimension)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotDimensionPtrOutput) ToBudgetSubscriptionFilterNotDimensionPtrOutput() BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotDimensionPtrOutput) ToBudgetSubscriptionFilterNotDimensionPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotDimensionPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotDimensionPtrOutput) Elem() BudgetSubscriptionFilterNotDimensionOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotDimension) BudgetSubscriptionFilterNotDimension { return *v }).(BudgetSubscriptionFilterNotDimensionOutput)
}

// The name of the column to use for the filter. The allowed values are
func (o BudgetSubscriptionFilterNotDimensionPtrOutput) Name() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotDimension) *string {
		if v == nil {
			return nil
		}
		return &v.Name
	}).(pulumi.StringPtrOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetSubscriptionFilterNotDimensionPtrOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotDimension) *string {
		if v == nil {
			return nil
		}
		return v.Operator
	}).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the column. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
func (o BudgetSubscriptionFilterNotDimensionPtrOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotDimension) []string {
		if v == nil {
			return nil
		}
		return v.Values
	}).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterNotTag struct {
	// The name of the tag to use for the filter.
	Name string `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator *string `pulumi:"operator"`
	// Specifies a list of values for the tag.
	Values []string `pulumi:"values"`
}

// BudgetSubscriptionFilterNotTagInput is an input type that accepts BudgetSubscriptionFilterNotTagArgs and BudgetSubscriptionFilterNotTagOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterNotTagInput` via:
//
//          BudgetSubscriptionFilterNotTagArgs{...}
type BudgetSubscriptionFilterNotTagInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotTagOutput() BudgetSubscriptionFilterNotTagOutput
	ToBudgetSubscriptionFilterNotTagOutputWithContext(context.Context) BudgetSubscriptionFilterNotTagOutput
}

type BudgetSubscriptionFilterNotTagArgs struct {
	// The name of the tag to use for the filter.
	Name pulumi.StringInput `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator pulumi.StringPtrInput `pulumi:"operator"`
	// Specifies a list of values for the tag.
	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetSubscriptionFilterNotTagArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNotTag)(nil)).Elem()
}

func (i BudgetSubscriptionFilterNotTagArgs) ToBudgetSubscriptionFilterNotTagOutput() BudgetSubscriptionFilterNotTagOutput {
	return i.ToBudgetSubscriptionFilterNotTagOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotTagArgs) ToBudgetSubscriptionFilterNotTagOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotTagOutput)
}

func (i BudgetSubscriptionFilterNotTagArgs) ToBudgetSubscriptionFilterNotTagPtrOutput() BudgetSubscriptionFilterNotTagPtrOutput {
	return i.ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterNotTagArgs) ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotTagOutput).ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(ctx)
}

// BudgetSubscriptionFilterNotTagPtrInput is an input type that accepts BudgetSubscriptionFilterNotTagArgs, BudgetSubscriptionFilterNotTagPtr and BudgetSubscriptionFilterNotTagPtrOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterNotTagPtrInput` via:
//
//          BudgetSubscriptionFilterNotTagArgs{...}
//
//  or:
//
//          nil
type BudgetSubscriptionFilterNotTagPtrInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterNotTagPtrOutput() BudgetSubscriptionFilterNotTagPtrOutput
	ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(context.Context) BudgetSubscriptionFilterNotTagPtrOutput
}

type budgetSubscriptionFilterNotTagPtrType BudgetSubscriptionFilterNotTagArgs

func BudgetSubscriptionFilterNotTagPtr(v *BudgetSubscriptionFilterNotTagArgs) BudgetSubscriptionFilterNotTagPtrInput {
	return (*budgetSubscriptionFilterNotTagPtrType)(v)
}

func (*budgetSubscriptionFilterNotTagPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNotTag)(nil)).Elem()
}

func (i *budgetSubscriptionFilterNotTagPtrType) ToBudgetSubscriptionFilterNotTagPtrOutput() BudgetSubscriptionFilterNotTagPtrOutput {
	return i.ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(context.Background())
}

func (i *budgetSubscriptionFilterNotTagPtrType) ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterNotTagPtrOutput)
}

type BudgetSubscriptionFilterNotTagOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotTagOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterNotTag)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotTagOutput) ToBudgetSubscriptionFilterNotTagOutput() BudgetSubscriptionFilterNotTagOutput {
	return o
}

func (o BudgetSubscriptionFilterNotTagOutput) ToBudgetSubscriptionFilterNotTagOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagOutput {
	return o
}

func (o BudgetSubscriptionFilterNotTagOutput) ToBudgetSubscriptionFilterNotTagPtrOutput() BudgetSubscriptionFilterNotTagPtrOutput {
	return o.ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(context.Background())
}

func (o BudgetSubscriptionFilterNotTagOutput) ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotTag) *BudgetSubscriptionFilterNotTag {
		return &v
	}).(BudgetSubscriptionFilterNotTagPtrOutput)
}

// The name of the tag to use for the filter.
func (o BudgetSubscriptionFilterNotTagOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotTag) string { return v.Name }).(pulumi.StringOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetSubscriptionFilterNotTagOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotTag) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the tag.
func (o BudgetSubscriptionFilterNotTagOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterNotTag) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterNotTagPtrOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterNotTagPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionFilterNotTag)(nil)).Elem()
}

func (o BudgetSubscriptionFilterNotTagPtrOutput) ToBudgetSubscriptionFilterNotTagPtrOutput() BudgetSubscriptionFilterNotTagPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotTagPtrOutput) ToBudgetSubscriptionFilterNotTagPtrOutputWithContext(ctx context.Context) BudgetSubscriptionFilterNotTagPtrOutput {
	return o
}

func (o BudgetSubscriptionFilterNotTagPtrOutput) Elem() BudgetSubscriptionFilterNotTagOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotTag) BudgetSubscriptionFilterNotTag { return *v }).(BudgetSubscriptionFilterNotTagOutput)
}

// The name of the tag to use for the filter.
func (o BudgetSubscriptionFilterNotTagPtrOutput) Name() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotTag) *string {
		if v == nil {
			return nil
		}
		return &v.Name
	}).(pulumi.StringPtrOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetSubscriptionFilterNotTagPtrOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotTag) *string {
		if v == nil {
			return nil
		}
		return v.Operator
	}).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the tag.
func (o BudgetSubscriptionFilterNotTagPtrOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v *BudgetSubscriptionFilterNotTag) []string {
		if v == nil {
			return nil
		}
		return v.Values
	}).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterTag struct {
	// The name of the tag to use for the filter.
	Name string `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator *string `pulumi:"operator"`
	// Specifies a list of values for the tag.
	Values []string `pulumi:"values"`
}

// BudgetSubscriptionFilterTagInput is an input type that accepts BudgetSubscriptionFilterTagArgs and BudgetSubscriptionFilterTagOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterTagInput` via:
//
//          BudgetSubscriptionFilterTagArgs{...}
type BudgetSubscriptionFilterTagInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterTagOutput() BudgetSubscriptionFilterTagOutput
	ToBudgetSubscriptionFilterTagOutputWithContext(context.Context) BudgetSubscriptionFilterTagOutput
}

type BudgetSubscriptionFilterTagArgs struct {
	// The name of the tag to use for the filter.
	Name pulumi.StringInput `pulumi:"name"`
	// The operator to use for comparison. The allowed values are `In`.
	Operator pulumi.StringPtrInput `pulumi:"operator"`
	// Specifies a list of values for the tag.
	Values pulumi.StringArrayInput `pulumi:"values"`
}

func (BudgetSubscriptionFilterTagArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterTag)(nil)).Elem()
}

func (i BudgetSubscriptionFilterTagArgs) ToBudgetSubscriptionFilterTagOutput() BudgetSubscriptionFilterTagOutput {
	return i.ToBudgetSubscriptionFilterTagOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterTagArgs) ToBudgetSubscriptionFilterTagOutputWithContext(ctx context.Context) BudgetSubscriptionFilterTagOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterTagOutput)
}

// BudgetSubscriptionFilterTagArrayInput is an input type that accepts BudgetSubscriptionFilterTagArray and BudgetSubscriptionFilterTagArrayOutput values.
// You can construct a concrete instance of `BudgetSubscriptionFilterTagArrayInput` via:
//
//          BudgetSubscriptionFilterTagArray{ BudgetSubscriptionFilterTagArgs{...} }
type BudgetSubscriptionFilterTagArrayInput interface {
	pulumi.Input

	ToBudgetSubscriptionFilterTagArrayOutput() BudgetSubscriptionFilterTagArrayOutput
	ToBudgetSubscriptionFilterTagArrayOutputWithContext(context.Context) BudgetSubscriptionFilterTagArrayOutput
}

type BudgetSubscriptionFilterTagArray []BudgetSubscriptionFilterTagInput

func (BudgetSubscriptionFilterTagArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionFilterTag)(nil)).Elem()
}

func (i BudgetSubscriptionFilterTagArray) ToBudgetSubscriptionFilterTagArrayOutput() BudgetSubscriptionFilterTagArrayOutput {
	return i.ToBudgetSubscriptionFilterTagArrayOutputWithContext(context.Background())
}

func (i BudgetSubscriptionFilterTagArray) ToBudgetSubscriptionFilterTagArrayOutputWithContext(ctx context.Context) BudgetSubscriptionFilterTagArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionFilterTagArrayOutput)
}

type BudgetSubscriptionFilterTagOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterTagOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionFilterTag)(nil)).Elem()
}

func (o BudgetSubscriptionFilterTagOutput) ToBudgetSubscriptionFilterTagOutput() BudgetSubscriptionFilterTagOutput {
	return o
}

func (o BudgetSubscriptionFilterTagOutput) ToBudgetSubscriptionFilterTagOutputWithContext(ctx context.Context) BudgetSubscriptionFilterTagOutput {
	return o
}

// The name of the tag to use for the filter.
func (o BudgetSubscriptionFilterTagOutput) Name() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterTag) string { return v.Name }).(pulumi.StringOutput)
}

// The operator to use for comparison. The allowed values are `In`.
func (o BudgetSubscriptionFilterTagOutput) Operator() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterTag) *string { return v.Operator }).(pulumi.StringPtrOutput)
}

// Specifies a list of values for the tag.
func (o BudgetSubscriptionFilterTagOutput) Values() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionFilterTag) []string { return v.Values }).(pulumi.StringArrayOutput)
}

type BudgetSubscriptionFilterTagArrayOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionFilterTagArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionFilterTag)(nil)).Elem()
}

func (o BudgetSubscriptionFilterTagArrayOutput) ToBudgetSubscriptionFilterTagArrayOutput() BudgetSubscriptionFilterTagArrayOutput {
	return o
}

func (o BudgetSubscriptionFilterTagArrayOutput) ToBudgetSubscriptionFilterTagArrayOutputWithContext(ctx context.Context) BudgetSubscriptionFilterTagArrayOutput {
	return o
}

func (o BudgetSubscriptionFilterTagArrayOutput) Index(i pulumi.IntInput) BudgetSubscriptionFilterTagOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetSubscriptionFilterTag {
		return vs[0].([]BudgetSubscriptionFilterTag)[vs[1].(int)]
	}).(BudgetSubscriptionFilterTagOutput)
}

type BudgetSubscriptionNotification struct {
	// Specifies a list of email addresses to send the budget notification to when the threshold is exceeded.
	ContactEmails []string `pulumi:"contactEmails"`
	// Specifies a list of Action Group IDs to send the budget notification to when the threshold is exceeded.
	ContactGroups []string `pulumi:"contactGroups"`
	// Specifies a list of contact roles to send the budget notification to when the threshold is exceeded.
	ContactRoles []string `pulumi:"contactRoles"`
	// Should the notification be enabled?
	Enabled *bool `pulumi:"enabled"`
	// The comparison operator for the notification. Must be one of `EqualTo`, `GreaterThan`, or `GreaterThanOrEqualTo`.
	Operator string `pulumi:"operator"`
	// 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 int `pulumi:"threshold"`
}

// BudgetSubscriptionNotificationInput is an input type that accepts BudgetSubscriptionNotificationArgs and BudgetSubscriptionNotificationOutput values.
// You can construct a concrete instance of `BudgetSubscriptionNotificationInput` via:
//
//          BudgetSubscriptionNotificationArgs{...}
type BudgetSubscriptionNotificationInput interface {
	pulumi.Input

	ToBudgetSubscriptionNotificationOutput() BudgetSubscriptionNotificationOutput
	ToBudgetSubscriptionNotificationOutputWithContext(context.Context) BudgetSubscriptionNotificationOutput
}

type BudgetSubscriptionNotificationArgs struct {
	// Specifies a list of email addresses to send the budget notification to when the threshold is exceeded.
	ContactEmails pulumi.StringArrayInput `pulumi:"contactEmails"`
	// Specifies a list of Action Group IDs to send the budget notification to when the threshold is exceeded.
	ContactGroups pulumi.StringArrayInput `pulumi:"contactGroups"`
	// Specifies a list of contact roles to send the budget notification to when the threshold is exceeded.
	ContactRoles pulumi.StringArrayInput `pulumi:"contactRoles"`
	// Should the notification be enabled?
	Enabled pulumi.BoolPtrInput `pulumi:"enabled"`
	// The comparison operator for the notification. Must be one of `EqualTo`, `GreaterThan`, or `GreaterThanOrEqualTo`.
	Operator pulumi.StringInput `pulumi:"operator"`
	// 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 pulumi.IntInput `pulumi:"threshold"`
}

func (BudgetSubscriptionNotificationArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionNotification)(nil)).Elem()
}

func (i BudgetSubscriptionNotificationArgs) ToBudgetSubscriptionNotificationOutput() BudgetSubscriptionNotificationOutput {
	return i.ToBudgetSubscriptionNotificationOutputWithContext(context.Background())
}

func (i BudgetSubscriptionNotificationArgs) ToBudgetSubscriptionNotificationOutputWithContext(ctx context.Context) BudgetSubscriptionNotificationOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionNotificationOutput)
}

// BudgetSubscriptionNotificationArrayInput is an input type that accepts BudgetSubscriptionNotificationArray and BudgetSubscriptionNotificationArrayOutput values.
// You can construct a concrete instance of `BudgetSubscriptionNotificationArrayInput` via:
//
//          BudgetSubscriptionNotificationArray{ BudgetSubscriptionNotificationArgs{...} }
type BudgetSubscriptionNotificationArrayInput interface {
	pulumi.Input

	ToBudgetSubscriptionNotificationArrayOutput() BudgetSubscriptionNotificationArrayOutput
	ToBudgetSubscriptionNotificationArrayOutputWithContext(context.Context) BudgetSubscriptionNotificationArrayOutput
}

type BudgetSubscriptionNotificationArray []BudgetSubscriptionNotificationInput

func (BudgetSubscriptionNotificationArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionNotification)(nil)).Elem()
}

func (i BudgetSubscriptionNotificationArray) ToBudgetSubscriptionNotificationArrayOutput() BudgetSubscriptionNotificationArrayOutput {
	return i.ToBudgetSubscriptionNotificationArrayOutputWithContext(context.Background())
}

func (i BudgetSubscriptionNotificationArray) ToBudgetSubscriptionNotificationArrayOutputWithContext(ctx context.Context) BudgetSubscriptionNotificationArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionNotificationArrayOutput)
}

type BudgetSubscriptionNotificationOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionNotificationOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionNotification)(nil)).Elem()
}

func (o BudgetSubscriptionNotificationOutput) ToBudgetSubscriptionNotificationOutput() BudgetSubscriptionNotificationOutput {
	return o
}

func (o BudgetSubscriptionNotificationOutput) ToBudgetSubscriptionNotificationOutputWithContext(ctx context.Context) BudgetSubscriptionNotificationOutput {
	return o
}

// Specifies a list of email addresses to send the budget notification to when the threshold is exceeded.
func (o BudgetSubscriptionNotificationOutput) ContactEmails() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) []string { return v.ContactEmails }).(pulumi.StringArrayOutput)
}

// Specifies a list of Action Group IDs to send the budget notification to when the threshold is exceeded.
func (o BudgetSubscriptionNotificationOutput) ContactGroups() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) []string { return v.ContactGroups }).(pulumi.StringArrayOutput)
}

// Specifies a list of contact roles to send the budget notification to when the threshold is exceeded.
func (o BudgetSubscriptionNotificationOutput) ContactRoles() pulumi.StringArrayOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) []string { return v.ContactRoles }).(pulumi.StringArrayOutput)
}

// Should the notification be enabled?
func (o BudgetSubscriptionNotificationOutput) Enabled() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) *bool { return v.Enabled }).(pulumi.BoolPtrOutput)
}

// The comparison operator for the notification. Must be one of `EqualTo`, `GreaterThan`, or `GreaterThanOrEqualTo`.
func (o BudgetSubscriptionNotificationOutput) Operator() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) string { return v.Operator }).(pulumi.StringOutput)
}

// 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.
func (o BudgetSubscriptionNotificationOutput) Threshold() pulumi.IntOutput {
	return o.ApplyT(func(v BudgetSubscriptionNotification) int { return v.Threshold }).(pulumi.IntOutput)
}

type BudgetSubscriptionNotificationArrayOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionNotificationArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]BudgetSubscriptionNotification)(nil)).Elem()
}

func (o BudgetSubscriptionNotificationArrayOutput) ToBudgetSubscriptionNotificationArrayOutput() BudgetSubscriptionNotificationArrayOutput {
	return o
}

func (o BudgetSubscriptionNotificationArrayOutput) ToBudgetSubscriptionNotificationArrayOutputWithContext(ctx context.Context) BudgetSubscriptionNotificationArrayOutput {
	return o
}

func (o BudgetSubscriptionNotificationArrayOutput) Index(i pulumi.IntInput) BudgetSubscriptionNotificationOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) BudgetSubscriptionNotification {
		return vs[0].([]BudgetSubscriptionNotification)[vs[1].(int)]
	}).(BudgetSubscriptionNotificationOutput)
}

type BudgetSubscriptionTimePeriod struct {
	// The end date for the budget. If not set this will be 10 years after the start date.
	EndDate *string `pulumi:"endDate"`
	// The start date for 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. Changing this forces a new Subscription Consumption Budget to be created.
	StartDate string `pulumi:"startDate"`
}

// BudgetSubscriptionTimePeriodInput is an input type that accepts BudgetSubscriptionTimePeriodArgs and BudgetSubscriptionTimePeriodOutput values.
// You can construct a concrete instance of `BudgetSubscriptionTimePeriodInput` via:
//
//          BudgetSubscriptionTimePeriodArgs{...}
type BudgetSubscriptionTimePeriodInput interface {
	pulumi.Input

	ToBudgetSubscriptionTimePeriodOutput() BudgetSubscriptionTimePeriodOutput
	ToBudgetSubscriptionTimePeriodOutputWithContext(context.Context) BudgetSubscriptionTimePeriodOutput
}

type BudgetSubscriptionTimePeriodArgs struct {
	// The end date for the budget. If not set this will be 10 years after the start date.
	EndDate pulumi.StringPtrInput `pulumi:"endDate"`
	// The start date for 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. Changing this forces a new Subscription Consumption Budget to be created.
	StartDate pulumi.StringInput `pulumi:"startDate"`
}

func (BudgetSubscriptionTimePeriodArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionTimePeriod)(nil)).Elem()
}

func (i BudgetSubscriptionTimePeriodArgs) ToBudgetSubscriptionTimePeriodOutput() BudgetSubscriptionTimePeriodOutput {
	return i.ToBudgetSubscriptionTimePeriodOutputWithContext(context.Background())
}

func (i BudgetSubscriptionTimePeriodArgs) ToBudgetSubscriptionTimePeriodOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionTimePeriodOutput)
}

func (i BudgetSubscriptionTimePeriodArgs) ToBudgetSubscriptionTimePeriodPtrOutput() BudgetSubscriptionTimePeriodPtrOutput {
	return i.ToBudgetSubscriptionTimePeriodPtrOutputWithContext(context.Background())
}

func (i BudgetSubscriptionTimePeriodArgs) ToBudgetSubscriptionTimePeriodPtrOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionTimePeriodOutput).ToBudgetSubscriptionTimePeriodPtrOutputWithContext(ctx)
}

// BudgetSubscriptionTimePeriodPtrInput is an input type that accepts BudgetSubscriptionTimePeriodArgs, BudgetSubscriptionTimePeriodPtr and BudgetSubscriptionTimePeriodPtrOutput values.
// You can construct a concrete instance of `BudgetSubscriptionTimePeriodPtrInput` via:
//
//          BudgetSubscriptionTimePeriodArgs{...}
//
//  or:
//
//          nil
type BudgetSubscriptionTimePeriodPtrInput interface {
	pulumi.Input

	ToBudgetSubscriptionTimePeriodPtrOutput() BudgetSubscriptionTimePeriodPtrOutput
	ToBudgetSubscriptionTimePeriodPtrOutputWithContext(context.Context) BudgetSubscriptionTimePeriodPtrOutput
}

type budgetSubscriptionTimePeriodPtrType BudgetSubscriptionTimePeriodArgs

func BudgetSubscriptionTimePeriodPtr(v *BudgetSubscriptionTimePeriodArgs) BudgetSubscriptionTimePeriodPtrInput {
	return (*budgetSubscriptionTimePeriodPtrType)(v)
}

func (*budgetSubscriptionTimePeriodPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionTimePeriod)(nil)).Elem()
}

func (i *budgetSubscriptionTimePeriodPtrType) ToBudgetSubscriptionTimePeriodPtrOutput() BudgetSubscriptionTimePeriodPtrOutput {
	return i.ToBudgetSubscriptionTimePeriodPtrOutputWithContext(context.Background())
}

func (i *budgetSubscriptionTimePeriodPtrType) ToBudgetSubscriptionTimePeriodPtrOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(BudgetSubscriptionTimePeriodPtrOutput)
}

type BudgetSubscriptionTimePeriodOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionTimePeriodOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*BudgetSubscriptionTimePeriod)(nil)).Elem()
}

func (o BudgetSubscriptionTimePeriodOutput) ToBudgetSubscriptionTimePeriodOutput() BudgetSubscriptionTimePeriodOutput {
	return o
}

func (o BudgetSubscriptionTimePeriodOutput) ToBudgetSubscriptionTimePeriodOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodOutput {
	return o
}

func (o BudgetSubscriptionTimePeriodOutput) ToBudgetSubscriptionTimePeriodPtrOutput() BudgetSubscriptionTimePeriodPtrOutput {
	return o.ToBudgetSubscriptionTimePeriodPtrOutputWithContext(context.Background())
}

func (o BudgetSubscriptionTimePeriodOutput) ToBudgetSubscriptionTimePeriodPtrOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionTimePeriod) *BudgetSubscriptionTimePeriod {
		return &v
	}).(BudgetSubscriptionTimePeriodPtrOutput)
}

// The end date for the budget. If not set this will be 10 years after the start date.
func (o BudgetSubscriptionTimePeriodOutput) EndDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v BudgetSubscriptionTimePeriod) *string { return v.EndDate }).(pulumi.StringPtrOutput)
}

// The start date for 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. Changing this forces a new Subscription Consumption Budget to be created.
func (o BudgetSubscriptionTimePeriodOutput) StartDate() pulumi.StringOutput {
	return o.ApplyT(func(v BudgetSubscriptionTimePeriod) string { return v.StartDate }).(pulumi.StringOutput)
}

type BudgetSubscriptionTimePeriodPtrOutput struct{ *pulumi.OutputState }

func (BudgetSubscriptionTimePeriodPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**BudgetSubscriptionTimePeriod)(nil)).Elem()
}

func (o BudgetSubscriptionTimePeriodPtrOutput) ToBudgetSubscriptionTimePeriodPtrOutput() BudgetSubscriptionTimePeriodPtrOutput {
	return o
}

func (o BudgetSubscriptionTimePeriodPtrOutput) ToBudgetSubscriptionTimePeriodPtrOutputWithContext(ctx context.Context) BudgetSubscriptionTimePeriodPtrOutput {
	return o
}

func (o BudgetSubscriptionTimePeriodPtrOutput) Elem() BudgetSubscriptionTimePeriodOutput {
	return o.ApplyT(func(v *BudgetSubscriptionTimePeriod) BudgetSubscriptionTimePeriod { return *v }).(BudgetSubscriptionTimePeriodOutput)
}

// The end date for the budget. If not set this will be 10 years after the start date.
func (o BudgetSubscriptionTimePeriodPtrOutput) EndDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionTimePeriod) *string {
		if v == nil {
			return nil
		}
		return v.EndDate
	}).(pulumi.StringPtrOutput)
}

// The start date for 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. Changing this forces a new Subscription Consumption Budget to be created.
func (o BudgetSubscriptionTimePeriodPtrOutput) StartDate() pulumi.StringPtrOutput {
	return o.ApplyT(func(v *BudgetSubscriptionTimePeriod) *string {
		if v == nil {
			return nil
		}
		return &v.StartDate
	}).(pulumi.StringPtrOutput)
}

func init() {
	pulumi.RegisterOutputType(BudgetResourceGroupFilterOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterPtrOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterDimensionOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterDimensionArrayOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotPtrOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotDimensionOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotDimensionPtrOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotTagOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterNotTagPtrOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterTagOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupFilterTagArrayOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupNotificationOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupNotificationArrayOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupTimePeriodOutput{})
	pulumi.RegisterOutputType(BudgetResourceGroupTimePeriodPtrOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterPtrOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterDimensionOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterDimensionArrayOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotPtrOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotDimensionOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotDimensionPtrOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotTagOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterNotTagPtrOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterTagOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionFilterTagArrayOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionNotificationOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionNotificationArrayOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionTimePeriodOutput{})
	pulumi.RegisterOutputType(BudgetSubscriptionTimePeriodPtrOutput{})
}
