package config

import (
	"context"
	"reflect"

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

type Features struct {
	KeyVault               *FeaturesKeyVault               `pulumi:"keyVault"`
	VirtualMachine         *FeaturesVirtualMachine         `pulumi:"virtualMachine"`
	VirtualMachineScaleSet *FeaturesVirtualMachineScaleSet `pulumi:"virtualMachineScaleSet"`
}

type FeaturesInput interface {
	pulumi.Input

	ToFeaturesOutput() FeaturesOutput
	ToFeaturesOutputWithContext(context.Context) FeaturesOutput
}

type FeaturesArgs struct {
	KeyVault               FeaturesKeyVaultPtrInput               `pulumi:"keyVault"`
	VirtualMachine         FeaturesVirtualMachinePtrInput         `pulumi:"virtualMachine"`
	VirtualMachineScaleSet FeaturesVirtualMachineScaleSetPtrInput `pulumi:"virtualMachineScaleSet"`
}

func (FeaturesArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*Features)(nil)).Elem()
}

func (i FeaturesArgs) ToFeaturesOutput() FeaturesOutput {
	return i.ToFeaturesOutputWithContext(context.Background())
}

func (i FeaturesArgs) ToFeaturesOutputWithContext(ctx context.Context) FeaturesOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesOutput)
}

type FeaturesOutput struct{ *pulumi.OutputState }

func (FeaturesOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*Features)(nil)).Elem()
}

func (o FeaturesOutput) ToFeaturesOutput() FeaturesOutput {
	return o
}

func (o FeaturesOutput) ToFeaturesOutputWithContext(ctx context.Context) FeaturesOutput {
	return o
}

func (o FeaturesOutput) KeyVault() FeaturesKeyVaultPtrOutput {
	return o.ApplyT(func(v Features) *FeaturesKeyVault { return v.KeyVault }).(FeaturesKeyVaultPtrOutput)
}

func (o FeaturesOutput) VirtualMachine() FeaturesVirtualMachinePtrOutput {
	return o.ApplyT(func(v Features) *FeaturesVirtualMachine { return v.VirtualMachine }).(FeaturesVirtualMachinePtrOutput)
}

func (o FeaturesOutput) VirtualMachineScaleSet() FeaturesVirtualMachineScaleSetPtrOutput {
	return o.ApplyT(func(v Features) *FeaturesVirtualMachineScaleSet { return v.VirtualMachineScaleSet }).(FeaturesVirtualMachineScaleSetPtrOutput)
}

type FeaturesKeyVault struct {
	PurgeSoftDeleteOnDestroy    *bool `pulumi:"purgeSoftDeleteOnDestroy"`
	RecoverSoftDeletedKeyVaults *bool `pulumi:"recoverSoftDeletedKeyVaults"`
}

type FeaturesKeyVaultInput interface {
	pulumi.Input

	ToFeaturesKeyVaultOutput() FeaturesKeyVaultOutput
	ToFeaturesKeyVaultOutputWithContext(context.Context) FeaturesKeyVaultOutput
}

type FeaturesKeyVaultArgs struct {
	PurgeSoftDeleteOnDestroy    pulumi.BoolPtrInput `pulumi:"purgeSoftDeleteOnDestroy"`
	RecoverSoftDeletedKeyVaults pulumi.BoolPtrInput `pulumi:"recoverSoftDeletedKeyVaults"`
}

func (FeaturesKeyVaultArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesKeyVault)(nil)).Elem()
}

func (i FeaturesKeyVaultArgs) ToFeaturesKeyVaultOutput() FeaturesKeyVaultOutput {
	return i.ToFeaturesKeyVaultOutputWithContext(context.Background())
}

func (i FeaturesKeyVaultArgs) ToFeaturesKeyVaultOutputWithContext(ctx context.Context) FeaturesKeyVaultOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesKeyVaultOutput)
}

func (i FeaturesKeyVaultArgs) ToFeaturesKeyVaultPtrOutput() FeaturesKeyVaultPtrOutput {
	return i.ToFeaturesKeyVaultPtrOutputWithContext(context.Background())
}

func (i FeaturesKeyVaultArgs) ToFeaturesKeyVaultPtrOutputWithContext(ctx context.Context) FeaturesKeyVaultPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesKeyVaultOutput).ToFeaturesKeyVaultPtrOutputWithContext(ctx)
}

type FeaturesKeyVaultPtrInput interface {
	pulumi.Input

	ToFeaturesKeyVaultPtrOutput() FeaturesKeyVaultPtrOutput
	ToFeaturesKeyVaultPtrOutputWithContext(context.Context) FeaturesKeyVaultPtrOutput
}

type featuresKeyVaultPtrType FeaturesKeyVaultArgs

func FeaturesKeyVaultPtr(v *FeaturesKeyVaultArgs) FeaturesKeyVaultPtrInput {
	return (*featuresKeyVaultPtrType)(v)
}

func (*featuresKeyVaultPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesKeyVault)(nil)).Elem()
}

func (i *featuresKeyVaultPtrType) ToFeaturesKeyVaultPtrOutput() FeaturesKeyVaultPtrOutput {
	return i.ToFeaturesKeyVaultPtrOutputWithContext(context.Background())
}

func (i *featuresKeyVaultPtrType) ToFeaturesKeyVaultPtrOutputWithContext(ctx context.Context) FeaturesKeyVaultPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesKeyVaultPtrOutput)
}

type FeaturesKeyVaultOutput struct{ *pulumi.OutputState }

func (FeaturesKeyVaultOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesKeyVault)(nil)).Elem()
}

func (o FeaturesKeyVaultOutput) ToFeaturesKeyVaultOutput() FeaturesKeyVaultOutput {
	return o
}

func (o FeaturesKeyVaultOutput) ToFeaturesKeyVaultOutputWithContext(ctx context.Context) FeaturesKeyVaultOutput {
	return o
}

func (o FeaturesKeyVaultOutput) ToFeaturesKeyVaultPtrOutput() FeaturesKeyVaultPtrOutput {
	return o.ToFeaturesKeyVaultPtrOutputWithContext(context.Background())
}

func (o FeaturesKeyVaultOutput) ToFeaturesKeyVaultPtrOutputWithContext(ctx context.Context) FeaturesKeyVaultPtrOutput {
	return o.ApplyT(func(v FeaturesKeyVault) *FeaturesKeyVault {
		return &v
	}).(FeaturesKeyVaultPtrOutput)
}
func (o FeaturesKeyVaultOutput) PurgeSoftDeleteOnDestroy() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v FeaturesKeyVault) *bool { return v.PurgeSoftDeleteOnDestroy }).(pulumi.BoolPtrOutput)
}

func (o FeaturesKeyVaultOutput) RecoverSoftDeletedKeyVaults() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v FeaturesKeyVault) *bool { return v.RecoverSoftDeletedKeyVaults }).(pulumi.BoolPtrOutput)
}

type FeaturesKeyVaultPtrOutput struct{ *pulumi.OutputState }

func (FeaturesKeyVaultPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesKeyVault)(nil)).Elem()
}

func (o FeaturesKeyVaultPtrOutput) ToFeaturesKeyVaultPtrOutput() FeaturesKeyVaultPtrOutput {
	return o
}

func (o FeaturesKeyVaultPtrOutput) ToFeaturesKeyVaultPtrOutputWithContext(ctx context.Context) FeaturesKeyVaultPtrOutput {
	return o
}

func (o FeaturesKeyVaultPtrOutput) Elem() FeaturesKeyVaultOutput {
	return o.ApplyT(func(v *FeaturesKeyVault) FeaturesKeyVault { return *v }).(FeaturesKeyVaultOutput)
}

func (o FeaturesKeyVaultPtrOutput) PurgeSoftDeleteOnDestroy() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v FeaturesKeyVault) *bool { return v.PurgeSoftDeleteOnDestroy }).(pulumi.BoolPtrOutput)
}

func (o FeaturesKeyVaultPtrOutput) RecoverSoftDeletedKeyVaults() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v FeaturesKeyVault) *bool { return v.RecoverSoftDeletedKeyVaults }).(pulumi.BoolPtrOutput)
}

type FeaturesVirtualMachine struct {
	DeleteOsDiskOnDeletion bool `pulumi:"deleteOsDiskOnDeletion"`
}

type FeaturesVirtualMachineInput interface {
	pulumi.Input

	ToFeaturesVirtualMachineOutput() FeaturesVirtualMachineOutput
	ToFeaturesVirtualMachineOutputWithContext(context.Context) FeaturesVirtualMachineOutput
}

type FeaturesVirtualMachineArgs struct {
	DeleteOsDiskOnDeletion pulumi.BoolInput `pulumi:"deleteOsDiskOnDeletion"`
}

func (FeaturesVirtualMachineArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesVirtualMachine)(nil)).Elem()
}

func (i FeaturesVirtualMachineArgs) ToFeaturesVirtualMachineOutput() FeaturesVirtualMachineOutput {
	return i.ToFeaturesVirtualMachineOutputWithContext(context.Background())
}

func (i FeaturesVirtualMachineArgs) ToFeaturesVirtualMachineOutputWithContext(ctx context.Context) FeaturesVirtualMachineOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachineOutput)
}

func (i FeaturesVirtualMachineArgs) ToFeaturesVirtualMachinePtrOutput() FeaturesVirtualMachinePtrOutput {
	return i.ToFeaturesVirtualMachinePtrOutputWithContext(context.Background())
}

func (i FeaturesVirtualMachineArgs) ToFeaturesVirtualMachinePtrOutputWithContext(ctx context.Context) FeaturesVirtualMachinePtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachineOutput).ToFeaturesVirtualMachinePtrOutputWithContext(ctx)
}

type FeaturesVirtualMachinePtrInput interface {
	pulumi.Input

	ToFeaturesVirtualMachinePtrOutput() FeaturesVirtualMachinePtrOutput
	ToFeaturesVirtualMachinePtrOutputWithContext(context.Context) FeaturesVirtualMachinePtrOutput
}

type featuresVirtualMachinePtrType FeaturesVirtualMachineArgs

func FeaturesVirtualMachinePtr(v *FeaturesVirtualMachineArgs) FeaturesVirtualMachinePtrInput {
	return (*featuresVirtualMachinePtrType)(v)
}

func (*featuresVirtualMachinePtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesVirtualMachine)(nil)).Elem()
}

func (i *featuresVirtualMachinePtrType) ToFeaturesVirtualMachinePtrOutput() FeaturesVirtualMachinePtrOutput {
	return i.ToFeaturesVirtualMachinePtrOutputWithContext(context.Background())
}

func (i *featuresVirtualMachinePtrType) ToFeaturesVirtualMachinePtrOutputWithContext(ctx context.Context) FeaturesVirtualMachinePtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachinePtrOutput)
}

type FeaturesVirtualMachineOutput struct{ *pulumi.OutputState }

func (FeaturesVirtualMachineOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesVirtualMachine)(nil)).Elem()
}

func (o FeaturesVirtualMachineOutput) ToFeaturesVirtualMachineOutput() FeaturesVirtualMachineOutput {
	return o
}

func (o FeaturesVirtualMachineOutput) ToFeaturesVirtualMachineOutputWithContext(ctx context.Context) FeaturesVirtualMachineOutput {
	return o
}

func (o FeaturesVirtualMachineOutput) ToFeaturesVirtualMachinePtrOutput() FeaturesVirtualMachinePtrOutput {
	return o.ToFeaturesVirtualMachinePtrOutputWithContext(context.Background())
}

func (o FeaturesVirtualMachineOutput) ToFeaturesVirtualMachinePtrOutputWithContext(ctx context.Context) FeaturesVirtualMachinePtrOutput {
	return o.ApplyT(func(v FeaturesVirtualMachine) *FeaturesVirtualMachine {
		return &v
	}).(FeaturesVirtualMachinePtrOutput)
}
func (o FeaturesVirtualMachineOutput) DeleteOsDiskOnDeletion() pulumi.BoolOutput {
	return o.ApplyT(func(v FeaturesVirtualMachine) bool { return v.DeleteOsDiskOnDeletion }).(pulumi.BoolOutput)
}

type FeaturesVirtualMachinePtrOutput struct{ *pulumi.OutputState }

func (FeaturesVirtualMachinePtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesVirtualMachine)(nil)).Elem()
}

func (o FeaturesVirtualMachinePtrOutput) ToFeaturesVirtualMachinePtrOutput() FeaturesVirtualMachinePtrOutput {
	return o
}

func (o FeaturesVirtualMachinePtrOutput) ToFeaturesVirtualMachinePtrOutputWithContext(ctx context.Context) FeaturesVirtualMachinePtrOutput {
	return o
}

func (o FeaturesVirtualMachinePtrOutput) Elem() FeaturesVirtualMachineOutput {
	return o.ApplyT(func(v *FeaturesVirtualMachine) FeaturesVirtualMachine { return *v }).(FeaturesVirtualMachineOutput)
}

func (o FeaturesVirtualMachinePtrOutput) DeleteOsDiskOnDeletion() pulumi.BoolOutput {
	return o.ApplyT(func(v FeaturesVirtualMachine) bool { return v.DeleteOsDiskOnDeletion }).(pulumi.BoolOutput)
}

type FeaturesVirtualMachineScaleSet struct {
	RollInstancesWhenRequired bool `pulumi:"rollInstancesWhenRequired"`
}

type FeaturesVirtualMachineScaleSetInput interface {
	pulumi.Input

	ToFeaturesVirtualMachineScaleSetOutput() FeaturesVirtualMachineScaleSetOutput
	ToFeaturesVirtualMachineScaleSetOutputWithContext(context.Context) FeaturesVirtualMachineScaleSetOutput
}

type FeaturesVirtualMachineScaleSetArgs struct {
	RollInstancesWhenRequired pulumi.BoolInput `pulumi:"rollInstancesWhenRequired"`
}

func (FeaturesVirtualMachineScaleSetArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesVirtualMachineScaleSet)(nil)).Elem()
}

func (i FeaturesVirtualMachineScaleSetArgs) ToFeaturesVirtualMachineScaleSetOutput() FeaturesVirtualMachineScaleSetOutput {
	return i.ToFeaturesVirtualMachineScaleSetOutputWithContext(context.Background())
}

func (i FeaturesVirtualMachineScaleSetArgs) ToFeaturesVirtualMachineScaleSetOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachineScaleSetOutput)
}

func (i FeaturesVirtualMachineScaleSetArgs) ToFeaturesVirtualMachineScaleSetPtrOutput() FeaturesVirtualMachineScaleSetPtrOutput {
	return i.ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(context.Background())
}

func (i FeaturesVirtualMachineScaleSetArgs) ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachineScaleSetOutput).ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(ctx)
}

type FeaturesVirtualMachineScaleSetPtrInput interface {
	pulumi.Input

	ToFeaturesVirtualMachineScaleSetPtrOutput() FeaturesVirtualMachineScaleSetPtrOutput
	ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(context.Context) FeaturesVirtualMachineScaleSetPtrOutput
}

type featuresVirtualMachineScaleSetPtrType FeaturesVirtualMachineScaleSetArgs

func FeaturesVirtualMachineScaleSetPtr(v *FeaturesVirtualMachineScaleSetArgs) FeaturesVirtualMachineScaleSetPtrInput {
	return (*featuresVirtualMachineScaleSetPtrType)(v)
}

func (*featuresVirtualMachineScaleSetPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesVirtualMachineScaleSet)(nil)).Elem()
}

func (i *featuresVirtualMachineScaleSetPtrType) ToFeaturesVirtualMachineScaleSetPtrOutput() FeaturesVirtualMachineScaleSetPtrOutput {
	return i.ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(context.Background())
}

func (i *featuresVirtualMachineScaleSetPtrType) ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachineScaleSetPtrOutput)
}

type FeaturesVirtualMachineScaleSetOutput struct{ *pulumi.OutputState }

func (FeaturesVirtualMachineScaleSetOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesVirtualMachineScaleSet)(nil)).Elem()
}

func (o FeaturesVirtualMachineScaleSetOutput) ToFeaturesVirtualMachineScaleSetOutput() FeaturesVirtualMachineScaleSetOutput {
	return o
}

func (o FeaturesVirtualMachineScaleSetOutput) ToFeaturesVirtualMachineScaleSetOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetOutput {
	return o
}

func (o FeaturesVirtualMachineScaleSetOutput) ToFeaturesVirtualMachineScaleSetPtrOutput() FeaturesVirtualMachineScaleSetPtrOutput {
	return o.ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(context.Background())
}

func (o FeaturesVirtualMachineScaleSetOutput) ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetPtrOutput {
	return o.ApplyT(func(v FeaturesVirtualMachineScaleSet) *FeaturesVirtualMachineScaleSet {
		return &v
	}).(FeaturesVirtualMachineScaleSetPtrOutput)
}
func (o FeaturesVirtualMachineScaleSetOutput) RollInstancesWhenRequired() pulumi.BoolOutput {
	return o.ApplyT(func(v FeaturesVirtualMachineScaleSet) bool { return v.RollInstancesWhenRequired }).(pulumi.BoolOutput)
}

type FeaturesVirtualMachineScaleSetPtrOutput struct{ *pulumi.OutputState }

func (FeaturesVirtualMachineScaleSetPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesVirtualMachineScaleSet)(nil)).Elem()
}

func (o FeaturesVirtualMachineScaleSetPtrOutput) ToFeaturesVirtualMachineScaleSetPtrOutput() FeaturesVirtualMachineScaleSetPtrOutput {
	return o
}

func (o FeaturesVirtualMachineScaleSetPtrOutput) ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetPtrOutput {
	return o
}

func (o FeaturesVirtualMachineScaleSetPtrOutput) Elem() FeaturesVirtualMachineScaleSetOutput {
	return o.ApplyT(func(v *FeaturesVirtualMachineScaleSet) FeaturesVirtualMachineScaleSet { return *v }).(FeaturesVirtualMachineScaleSetOutput)
}

func (o FeaturesVirtualMachineScaleSetPtrOutput) RollInstancesWhenRequired() pulumi.BoolOutput {
	return o.ApplyT(func(v FeaturesVirtualMachineScaleSet) bool { return v.RollInstancesWhenRequired }).(pulumi.BoolOutput)
}

func init() {
	pulumi.RegisterOutputType(FeaturesOutput{})
	pulumi.RegisterOutputType(FeaturesKeyVaultOutput{})
	pulumi.RegisterOutputType(FeaturesKeyVaultPtrOutput{})
	pulumi.RegisterOutputType(FeaturesVirtualMachineOutput{})
	pulumi.RegisterOutputType(FeaturesVirtualMachinePtrOutput{})
	pulumi.RegisterOutputType(FeaturesVirtualMachineScaleSetOutput{})
	pulumi.RegisterOutputType(FeaturesVirtualMachineScaleSetPtrOutput{})
}
// *** 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 config

import (
	"context"
	"reflect"

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

type Features struct {
	KeyVault               *FeaturesKeyVault               `pulumi:"keyVault"`
	VirtualMachine         *FeaturesVirtualMachine         `pulumi:"virtualMachine"`
	VirtualMachineScaleSet *FeaturesVirtualMachineScaleSet `pulumi:"virtualMachineScaleSet"`
}

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

	ToFeaturesOutput() FeaturesOutput
	ToFeaturesOutputWithContext(context.Context) FeaturesOutput
}

type FeaturesArgs struct {
	KeyVault               FeaturesKeyVaultPtrInput               `pulumi:"keyVault"`
	VirtualMachine         FeaturesVirtualMachinePtrInput         `pulumi:"virtualMachine"`
	VirtualMachineScaleSet FeaturesVirtualMachineScaleSetPtrInput `pulumi:"virtualMachineScaleSet"`
}

func (FeaturesArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*Features)(nil)).Elem()
}

func (i FeaturesArgs) ToFeaturesOutput() FeaturesOutput {
	return i.ToFeaturesOutputWithContext(context.Background())
}

func (i FeaturesArgs) ToFeaturesOutputWithContext(ctx context.Context) FeaturesOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesOutput)
}

type FeaturesOutput struct{ *pulumi.OutputState }

func (FeaturesOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*Features)(nil)).Elem()
}

func (o FeaturesOutput) ToFeaturesOutput() FeaturesOutput {
	return o
}

func (o FeaturesOutput) ToFeaturesOutputWithContext(ctx context.Context) FeaturesOutput {
	return o
}

func (o FeaturesOutput) KeyVault() FeaturesKeyVaultPtrOutput {
	return o.ApplyT(func(v Features) *FeaturesKeyVault { return v.KeyVault }).(FeaturesKeyVaultPtrOutput)
}

func (o FeaturesOutput) VirtualMachine() FeaturesVirtualMachinePtrOutput {
	return o.ApplyT(func(v Features) *FeaturesVirtualMachine { return v.VirtualMachine }).(FeaturesVirtualMachinePtrOutput)
}

func (o FeaturesOutput) VirtualMachineScaleSet() FeaturesVirtualMachineScaleSetPtrOutput {
	return o.ApplyT(func(v Features) *FeaturesVirtualMachineScaleSet { return v.VirtualMachineScaleSet }).(FeaturesVirtualMachineScaleSetPtrOutput)
}

type FeaturesKeyVault struct {
	PurgeSoftDeleteOnDestroy    *bool `pulumi:"purgeSoftDeleteOnDestroy"`
	RecoverSoftDeletedKeyVaults *bool `pulumi:"recoverSoftDeletedKeyVaults"`
}

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

	ToFeaturesKeyVaultOutput() FeaturesKeyVaultOutput
	ToFeaturesKeyVaultOutputWithContext(context.Context) FeaturesKeyVaultOutput
}

type FeaturesKeyVaultArgs struct {
	PurgeSoftDeleteOnDestroy    pulumi.BoolPtrInput `pulumi:"purgeSoftDeleteOnDestroy"`
	RecoverSoftDeletedKeyVaults pulumi.BoolPtrInput `pulumi:"recoverSoftDeletedKeyVaults"`
}

func (FeaturesKeyVaultArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesKeyVault)(nil)).Elem()
}

func (i FeaturesKeyVaultArgs) ToFeaturesKeyVaultOutput() FeaturesKeyVaultOutput {
	return i.ToFeaturesKeyVaultOutputWithContext(context.Background())
}

func (i FeaturesKeyVaultArgs) ToFeaturesKeyVaultOutputWithContext(ctx context.Context) FeaturesKeyVaultOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesKeyVaultOutput)
}

func (i FeaturesKeyVaultArgs) ToFeaturesKeyVaultPtrOutput() FeaturesKeyVaultPtrOutput {
	return i.ToFeaturesKeyVaultPtrOutputWithContext(context.Background())
}

func (i FeaturesKeyVaultArgs) ToFeaturesKeyVaultPtrOutputWithContext(ctx context.Context) FeaturesKeyVaultPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesKeyVaultOutput).ToFeaturesKeyVaultPtrOutputWithContext(ctx)
}

// FeaturesKeyVaultPtrInput is an input type that accepts FeaturesKeyVaultArgs, FeaturesKeyVaultPtr and FeaturesKeyVaultPtrOutput values.
// You can construct a concrete instance of `FeaturesKeyVaultPtrInput` via:
//
// 		 FeaturesKeyVaultArgs{...}
//
//  or:
//
// 		 nil
//
type FeaturesKeyVaultPtrInput interface {
	pulumi.Input

	ToFeaturesKeyVaultPtrOutput() FeaturesKeyVaultPtrOutput
	ToFeaturesKeyVaultPtrOutputWithContext(context.Context) FeaturesKeyVaultPtrOutput
}

type featuresKeyVaultPtrType FeaturesKeyVaultArgs

func FeaturesKeyVaultPtr(v *FeaturesKeyVaultArgs) FeaturesKeyVaultPtrInput {
	return (*featuresKeyVaultPtrType)(v)
}

func (*featuresKeyVaultPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesKeyVault)(nil)).Elem()
}

func (i *featuresKeyVaultPtrType) ToFeaturesKeyVaultPtrOutput() FeaturesKeyVaultPtrOutput {
	return i.ToFeaturesKeyVaultPtrOutputWithContext(context.Background())
}

func (i *featuresKeyVaultPtrType) ToFeaturesKeyVaultPtrOutputWithContext(ctx context.Context) FeaturesKeyVaultPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesKeyVaultPtrOutput)
}

type FeaturesKeyVaultOutput struct{ *pulumi.OutputState }

func (FeaturesKeyVaultOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesKeyVault)(nil)).Elem()
}

func (o FeaturesKeyVaultOutput) ToFeaturesKeyVaultOutput() FeaturesKeyVaultOutput {
	return o
}

func (o FeaturesKeyVaultOutput) ToFeaturesKeyVaultOutputWithContext(ctx context.Context) FeaturesKeyVaultOutput {
	return o
}

func (o FeaturesKeyVaultOutput) ToFeaturesKeyVaultPtrOutput() FeaturesKeyVaultPtrOutput {
	return o.ToFeaturesKeyVaultPtrOutputWithContext(context.Background())
}

func (o FeaturesKeyVaultOutput) ToFeaturesKeyVaultPtrOutputWithContext(ctx context.Context) FeaturesKeyVaultPtrOutput {
	return o.ApplyT(func(v FeaturesKeyVault) *FeaturesKeyVault {
		return &v
	}).(FeaturesKeyVaultPtrOutput)
}
func (o FeaturesKeyVaultOutput) PurgeSoftDeleteOnDestroy() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v FeaturesKeyVault) *bool { return v.PurgeSoftDeleteOnDestroy }).(pulumi.BoolPtrOutput)
}

func (o FeaturesKeyVaultOutput) RecoverSoftDeletedKeyVaults() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v FeaturesKeyVault) *bool { return v.RecoverSoftDeletedKeyVaults }).(pulumi.BoolPtrOutput)
}

type FeaturesKeyVaultPtrOutput struct{ *pulumi.OutputState }

func (FeaturesKeyVaultPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesKeyVault)(nil)).Elem()
}

func (o FeaturesKeyVaultPtrOutput) ToFeaturesKeyVaultPtrOutput() FeaturesKeyVaultPtrOutput {
	return o
}

func (o FeaturesKeyVaultPtrOutput) ToFeaturesKeyVaultPtrOutputWithContext(ctx context.Context) FeaturesKeyVaultPtrOutput {
	return o
}

func (o FeaturesKeyVaultPtrOutput) Elem() FeaturesKeyVaultOutput {
	return o.ApplyT(func(v *FeaturesKeyVault) FeaturesKeyVault { return *v }).(FeaturesKeyVaultOutput)
}

func (o FeaturesKeyVaultPtrOutput) PurgeSoftDeleteOnDestroy() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v FeaturesKeyVault) *bool { return v.PurgeSoftDeleteOnDestroy }).(pulumi.BoolPtrOutput)
}

func (o FeaturesKeyVaultPtrOutput) RecoverSoftDeletedKeyVaults() pulumi.BoolPtrOutput {
	return o.ApplyT(func(v FeaturesKeyVault) *bool { return v.RecoverSoftDeletedKeyVaults }).(pulumi.BoolPtrOutput)
}

type FeaturesVirtualMachine struct {
	DeleteOsDiskOnDeletion bool `pulumi:"deleteOsDiskOnDeletion"`
}

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

	ToFeaturesVirtualMachineOutput() FeaturesVirtualMachineOutput
	ToFeaturesVirtualMachineOutputWithContext(context.Context) FeaturesVirtualMachineOutput
}

type FeaturesVirtualMachineArgs struct {
	DeleteOsDiskOnDeletion pulumi.BoolInput `pulumi:"deleteOsDiskOnDeletion"`
}

func (FeaturesVirtualMachineArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesVirtualMachine)(nil)).Elem()
}

func (i FeaturesVirtualMachineArgs) ToFeaturesVirtualMachineOutput() FeaturesVirtualMachineOutput {
	return i.ToFeaturesVirtualMachineOutputWithContext(context.Background())
}

func (i FeaturesVirtualMachineArgs) ToFeaturesVirtualMachineOutputWithContext(ctx context.Context) FeaturesVirtualMachineOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachineOutput)
}

func (i FeaturesVirtualMachineArgs) ToFeaturesVirtualMachinePtrOutput() FeaturesVirtualMachinePtrOutput {
	return i.ToFeaturesVirtualMachinePtrOutputWithContext(context.Background())
}

func (i FeaturesVirtualMachineArgs) ToFeaturesVirtualMachinePtrOutputWithContext(ctx context.Context) FeaturesVirtualMachinePtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachineOutput).ToFeaturesVirtualMachinePtrOutputWithContext(ctx)
}

// FeaturesVirtualMachinePtrInput is an input type that accepts FeaturesVirtualMachineArgs, FeaturesVirtualMachinePtr and FeaturesVirtualMachinePtrOutput values.
// You can construct a concrete instance of `FeaturesVirtualMachinePtrInput` via:
//
// 		 FeaturesVirtualMachineArgs{...}
//
//  or:
//
// 		 nil
//
type FeaturesVirtualMachinePtrInput interface {
	pulumi.Input

	ToFeaturesVirtualMachinePtrOutput() FeaturesVirtualMachinePtrOutput
	ToFeaturesVirtualMachinePtrOutputWithContext(context.Context) FeaturesVirtualMachinePtrOutput
}

type featuresVirtualMachinePtrType FeaturesVirtualMachineArgs

func FeaturesVirtualMachinePtr(v *FeaturesVirtualMachineArgs) FeaturesVirtualMachinePtrInput {
	return (*featuresVirtualMachinePtrType)(v)
}

func (*featuresVirtualMachinePtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesVirtualMachine)(nil)).Elem()
}

func (i *featuresVirtualMachinePtrType) ToFeaturesVirtualMachinePtrOutput() FeaturesVirtualMachinePtrOutput {
	return i.ToFeaturesVirtualMachinePtrOutputWithContext(context.Background())
}

func (i *featuresVirtualMachinePtrType) ToFeaturesVirtualMachinePtrOutputWithContext(ctx context.Context) FeaturesVirtualMachinePtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachinePtrOutput)
}

type FeaturesVirtualMachineOutput struct{ *pulumi.OutputState }

func (FeaturesVirtualMachineOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesVirtualMachine)(nil)).Elem()
}

func (o FeaturesVirtualMachineOutput) ToFeaturesVirtualMachineOutput() FeaturesVirtualMachineOutput {
	return o
}

func (o FeaturesVirtualMachineOutput) ToFeaturesVirtualMachineOutputWithContext(ctx context.Context) FeaturesVirtualMachineOutput {
	return o
}

func (o FeaturesVirtualMachineOutput) ToFeaturesVirtualMachinePtrOutput() FeaturesVirtualMachinePtrOutput {
	return o.ToFeaturesVirtualMachinePtrOutputWithContext(context.Background())
}

func (o FeaturesVirtualMachineOutput) ToFeaturesVirtualMachinePtrOutputWithContext(ctx context.Context) FeaturesVirtualMachinePtrOutput {
	return o.ApplyT(func(v FeaturesVirtualMachine) *FeaturesVirtualMachine {
		return &v
	}).(FeaturesVirtualMachinePtrOutput)
}
func (o FeaturesVirtualMachineOutput) DeleteOsDiskOnDeletion() pulumi.BoolOutput {
	return o.ApplyT(func(v FeaturesVirtualMachine) bool { return v.DeleteOsDiskOnDeletion }).(pulumi.BoolOutput)
}

type FeaturesVirtualMachinePtrOutput struct{ *pulumi.OutputState }

func (FeaturesVirtualMachinePtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesVirtualMachine)(nil)).Elem()
}

func (o FeaturesVirtualMachinePtrOutput) ToFeaturesVirtualMachinePtrOutput() FeaturesVirtualMachinePtrOutput {
	return o
}

func (o FeaturesVirtualMachinePtrOutput) ToFeaturesVirtualMachinePtrOutputWithContext(ctx context.Context) FeaturesVirtualMachinePtrOutput {
	return o
}

func (o FeaturesVirtualMachinePtrOutput) Elem() FeaturesVirtualMachineOutput {
	return o.ApplyT(func(v *FeaturesVirtualMachine) FeaturesVirtualMachine { return *v }).(FeaturesVirtualMachineOutput)
}

func (o FeaturesVirtualMachinePtrOutput) DeleteOsDiskOnDeletion() pulumi.BoolOutput {
	return o.ApplyT(func(v FeaturesVirtualMachine) bool { return v.DeleteOsDiskOnDeletion }).(pulumi.BoolOutput)
}

type FeaturesVirtualMachineScaleSet struct {
	RollInstancesWhenRequired bool `pulumi:"rollInstancesWhenRequired"`
}

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

	ToFeaturesVirtualMachineScaleSetOutput() FeaturesVirtualMachineScaleSetOutput
	ToFeaturesVirtualMachineScaleSetOutputWithContext(context.Context) FeaturesVirtualMachineScaleSetOutput
}

type FeaturesVirtualMachineScaleSetArgs struct {
	RollInstancesWhenRequired pulumi.BoolInput `pulumi:"rollInstancesWhenRequired"`
}

func (FeaturesVirtualMachineScaleSetArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesVirtualMachineScaleSet)(nil)).Elem()
}

func (i FeaturesVirtualMachineScaleSetArgs) ToFeaturesVirtualMachineScaleSetOutput() FeaturesVirtualMachineScaleSetOutput {
	return i.ToFeaturesVirtualMachineScaleSetOutputWithContext(context.Background())
}

func (i FeaturesVirtualMachineScaleSetArgs) ToFeaturesVirtualMachineScaleSetOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachineScaleSetOutput)
}

func (i FeaturesVirtualMachineScaleSetArgs) ToFeaturesVirtualMachineScaleSetPtrOutput() FeaturesVirtualMachineScaleSetPtrOutput {
	return i.ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(context.Background())
}

func (i FeaturesVirtualMachineScaleSetArgs) ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachineScaleSetOutput).ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(ctx)
}

// FeaturesVirtualMachineScaleSetPtrInput is an input type that accepts FeaturesVirtualMachineScaleSetArgs, FeaturesVirtualMachineScaleSetPtr and FeaturesVirtualMachineScaleSetPtrOutput values.
// You can construct a concrete instance of `FeaturesVirtualMachineScaleSetPtrInput` via:
//
// 		 FeaturesVirtualMachineScaleSetArgs{...}
//
//  or:
//
// 		 nil
//
type FeaturesVirtualMachineScaleSetPtrInput interface {
	pulumi.Input

	ToFeaturesVirtualMachineScaleSetPtrOutput() FeaturesVirtualMachineScaleSetPtrOutput
	ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(context.Context) FeaturesVirtualMachineScaleSetPtrOutput
}

type featuresVirtualMachineScaleSetPtrType FeaturesVirtualMachineScaleSetArgs

func FeaturesVirtualMachineScaleSetPtr(v *FeaturesVirtualMachineScaleSetArgs) FeaturesVirtualMachineScaleSetPtrInput {
	return (*featuresVirtualMachineScaleSetPtrType)(v)
}

func (*featuresVirtualMachineScaleSetPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesVirtualMachineScaleSet)(nil)).Elem()
}

func (i *featuresVirtualMachineScaleSetPtrType) ToFeaturesVirtualMachineScaleSetPtrOutput() FeaturesVirtualMachineScaleSetPtrOutput {
	return i.ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(context.Background())
}

func (i *featuresVirtualMachineScaleSetPtrType) ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(FeaturesVirtualMachineScaleSetPtrOutput)
}

type FeaturesVirtualMachineScaleSetOutput struct{ *pulumi.OutputState }

func (FeaturesVirtualMachineScaleSetOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*FeaturesVirtualMachineScaleSet)(nil)).Elem()
}

func (o FeaturesVirtualMachineScaleSetOutput) ToFeaturesVirtualMachineScaleSetOutput() FeaturesVirtualMachineScaleSetOutput {
	return o
}

func (o FeaturesVirtualMachineScaleSetOutput) ToFeaturesVirtualMachineScaleSetOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetOutput {
	return o
}

func (o FeaturesVirtualMachineScaleSetOutput) ToFeaturesVirtualMachineScaleSetPtrOutput() FeaturesVirtualMachineScaleSetPtrOutput {
	return o.ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(context.Background())
}

func (o FeaturesVirtualMachineScaleSetOutput) ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetPtrOutput {
	return o.ApplyT(func(v FeaturesVirtualMachineScaleSet) *FeaturesVirtualMachineScaleSet {
		return &v
	}).(FeaturesVirtualMachineScaleSetPtrOutput)
}
func (o FeaturesVirtualMachineScaleSetOutput) RollInstancesWhenRequired() pulumi.BoolOutput {
	return o.ApplyT(func(v FeaturesVirtualMachineScaleSet) bool { return v.RollInstancesWhenRequired }).(pulumi.BoolOutput)
}

type FeaturesVirtualMachineScaleSetPtrOutput struct{ *pulumi.OutputState }

func (FeaturesVirtualMachineScaleSetPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**FeaturesVirtualMachineScaleSet)(nil)).Elem()
}

func (o FeaturesVirtualMachineScaleSetPtrOutput) ToFeaturesVirtualMachineScaleSetPtrOutput() FeaturesVirtualMachineScaleSetPtrOutput {
	return o
}

func (o FeaturesVirtualMachineScaleSetPtrOutput) ToFeaturesVirtualMachineScaleSetPtrOutputWithContext(ctx context.Context) FeaturesVirtualMachineScaleSetPtrOutput {
	return o
}

func (o FeaturesVirtualMachineScaleSetPtrOutput) Elem() FeaturesVirtualMachineScaleSetOutput {
	return o.ApplyT(func(v *FeaturesVirtualMachineScaleSet) FeaturesVirtualMachineScaleSet { return *v }).(FeaturesVirtualMachineScaleSetOutput)
}

func (o FeaturesVirtualMachineScaleSetPtrOutput) RollInstancesWhenRequired() pulumi.BoolOutput {
	return o.ApplyT(func(v FeaturesVirtualMachineScaleSet) bool { return v.RollInstancesWhenRequired }).(pulumi.BoolOutput)
}

func init() {
	pulumi.RegisterOutputType(FeaturesOutput{})
	pulumi.RegisterOutputType(FeaturesKeyVaultOutput{})
	pulumi.RegisterOutputType(FeaturesKeyVaultPtrOutput{})
	pulumi.RegisterOutputType(FeaturesVirtualMachineOutput{})
	pulumi.RegisterOutputType(FeaturesVirtualMachinePtrOutput{})
	pulumi.RegisterOutputType(FeaturesVirtualMachineScaleSetOutput{})
	pulumi.RegisterOutputType(FeaturesVirtualMachineScaleSetPtrOutput{})
}
