// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package arm

import "github.com/Azure/azure-service-operator/v2/pkg/genruntime"

type Disk_Spec struct {
	// ExtendedLocation: The extended location where the disk will be created. Extended location cannot be changed.
	ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"`

	// Location: The geo-location where the resource lives
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: Disk resource properties.
	Properties *DiskProperties `json:"properties,omitempty"`

	// Sku: The disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, StandardSSD_ZRS,
	// or PremiumV2_LRS.
	Sku *DiskSku `json:"sku,omitempty"`

	// Tags: Resource tags.
	Tags map[string]string `json:"tags,omitempty"`

	// Zones: The Logical zone list for Disk.
	Zones []string `json:"zones,omitempty"`
}

var _ genruntime.ARMResourceSpec = &Disk_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2024-03-02"
func (disk Disk_Spec) GetAPIVersion() string {
	return "2024-03-02"
}

// GetName returns the Name of the resource
func (disk *Disk_Spec) GetName() string {
	return disk.Name
}

// GetType returns the ARM Type of the resource. This is always "Microsoft.Compute/disks"
func (disk *Disk_Spec) GetType() string {
	return "Microsoft.Compute/disks"
}

// Disk resource properties.
type DiskProperties struct {
	// BurstingEnabled: Set to true to enable bursting beyond the provisioned performance target of the disk. Bursting is
	// disabled by default. Does not apply to Ultra disks.
	BurstingEnabled *bool `json:"burstingEnabled,omitempty"`

	// CompletionPercent: Percentage complete for the background copy when a resource is created via the CopyStart operation.
	CompletionPercent *float64 `json:"completionPercent,omitempty"`

	// CreationData: Disk source information. CreationData information cannot be changed after the disk has been created.
	CreationData *CreationData `json:"creationData,omitempty"`

	// DataAccessAuthMode: Additional authentication requirements when exporting or uploading to a disk or snapshot.
	DataAccessAuthMode *DataAccessAuthMode `json:"dataAccessAuthMode,omitempty"`

	// DiskAccessId: ARM id of the DiskAccess resource for using private endpoints on disks.
	DiskAccessId *string `json:"diskAccessId,omitempty"`

	// DiskIOPSReadOnly: The total number of IOPS that will be allowed across all VMs mounting the shared disk as ReadOnly. One
	// operation can transfer between 4k and 256k bytes.
	DiskIOPSReadOnly *int `json:"diskIOPSReadOnly,omitempty"`

	// DiskIOPSReadWrite: The number of IOPS allowed for this disk; only settable for UltraSSD disks. One operation can
	// transfer between 4k and 256k bytes.
	DiskIOPSReadWrite *int `json:"diskIOPSReadWrite,omitempty"`

	// DiskMBpsReadOnly: The total throughput (MBps) that will be allowed across all VMs mounting the shared disk as ReadOnly.
	// MBps means millions of bytes per second - MB here uses the ISO notation, of powers of 10.
	DiskMBpsReadOnly *int `json:"diskMBpsReadOnly,omitempty"`

	// DiskMBpsReadWrite: The bandwidth allowed for this disk; only settable for UltraSSD disks. MBps means millions of bytes
	// per second - MB here uses the ISO notation, of powers of 10.
	DiskMBpsReadWrite *int `json:"diskMBpsReadWrite,omitempty"`

	// DiskSizeGB: If creationData.createOption is Empty, this field is mandatory and it indicates the size of the disk to
	// create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only
	// allowed if the disk is not attached to a running VM, and can only increase the disk's size.
	DiskSizeGB *int `json:"diskSizeGB,omitempty"`

	// Encryption: Encryption property can be used to encrypt data at rest with customer managed keys or platform managed keys.
	Encryption *Encryption `json:"encryption,omitempty"`

	// EncryptionSettingsCollection: Encryption settings collection used for Azure Disk Encryption, can contain multiple
	// encryption settings per disk or snapshot.
	EncryptionSettingsCollection *EncryptionSettingsCollection `json:"encryptionSettingsCollection,omitempty"`

	// HyperVGeneration: The hypervisor generation of the Virtual Machine. Applicable to OS disks only.
	HyperVGeneration *HyperVGeneration `json:"hyperVGeneration,omitempty"`

	// MaxShares: The maximum number of VMs that can attach to the disk at the same time. Value greater than one indicates a
	// disk that can be mounted on multiple VMs at the same time.
	MaxShares *int `json:"maxShares,omitempty"`

	// NetworkAccessPolicy: Policy for accessing the disk via network.
	NetworkAccessPolicy *NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"`

	// OptimizedForFrequentAttach: Setting this property to true improves reliability and performance of data disks that are
	// frequently (more than 5 times a day) by detached from one virtual machine and attached to another. This property should
	// not be set for disks that are not detached and attached frequently as it causes the disks to not align with the fault
	// domain of the virtual machine.
	OptimizedForFrequentAttach *bool `json:"optimizedForFrequentAttach,omitempty"`

	// OsType: The Operating System type.
	OsType *OperatingSystemTypes `json:"osType,omitempty"`

	// PublicNetworkAccess: Policy for controlling export on the disk.
	PublicNetworkAccess *PublicNetworkAccess `json:"publicNetworkAccess,omitempty"`

	// PurchasePlan: Purchase plan information for the the image from which the OS disk was created. E.g. - {name:
	// 2019-Datacenter, publisher: MicrosoftWindowsServer, product: WindowsServer}
	PurchasePlan *DiskPurchasePlan `json:"purchasePlan,omitempty"`

	// SecurityProfile: Contains the security related information for the resource.
	SecurityProfile *DiskSecurityProfile `json:"securityProfile,omitempty"`

	// SupportedCapabilities: List of supported capabilities for the image from which the OS disk was created.
	SupportedCapabilities *SupportedCapabilities `json:"supportedCapabilities,omitempty"`

	// SupportsHibernation: Indicates the OS on a disk supports hibernation.
	SupportsHibernation *bool `json:"supportsHibernation,omitempty"`

	// Tier: Performance tier of the disk (e.g, P4, S10) as described here:
	// https://azure.microsoft.com/en-us/pricing/details/managed-disks/. Does not apply to Ultra disks.
	Tier *string `json:"tier,omitempty"`
}

// The disks sku name. Can be Standard_LRS, Premium_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, StandardSSD_ZRS, or
// PremiumV2_LRS.
type DiskSku struct {
	// Name: The sku name.
	Name *DiskStorageAccountTypes `json:"name,omitempty"`
}

// Data used when creating a disk.
type CreationData struct {
	// CreateOption: This enumerates the possible sources of a disk's creation.
	CreateOption *DiskCreateOption `json:"createOption,omitempty"`

	// ElasticSanResourceId: Required if createOption is CopyFromSanSnapshot. This is the ARM id of the source elastic san
	// volume snapshot.
	ElasticSanResourceId *string `json:"elasticSanResourceId,omitempty"`

	// GalleryImageReference: Required if creating from a Gallery Image. The id/sharedGalleryImageId/communityGalleryImageId of
	// the ImageDiskReference will be the ARM id of the shared galley image version from which to create a disk.
	GalleryImageReference *ImageDiskReference `json:"galleryImageReference,omitempty"`

	// ImageReference: Disk source information for PIR or user images.
	ImageReference *ImageDiskReference `json:"imageReference,omitempty"`

	// LogicalSectorSize: Logical sector size in bytes for Ultra disks. Supported values are 512 ad 4096. 4096 is the default.
	LogicalSectorSize *int `json:"logicalSectorSize,omitempty"`

	// PerformancePlus: Set this flag to true to get a boost on the performance target of the disk deployed, see here on the
	// respective performance target. This flag can only be set on disk creation time and cannot be disabled after enabled.
	PerformancePlus *bool `json:"performancePlus,omitempty"`

	// ProvisionedBandwidthCopySpeed: If this field is set on a snapshot and createOption is CopyStart, the snapshot will be
	// copied at a quicker speed.
	ProvisionedBandwidthCopySpeed *ProvisionedBandwidthCopyOption `json:"provisionedBandwidthCopySpeed,omitempty"`

	// SecurityDataUri: If createOption is ImportSecure, this is the URI of a blob to be imported into VM guest state.
	SecurityDataUri *string `json:"securityDataUri,omitempty"`

	// SourceResourceId: If createOption is Copy, this is the ARM id of the source snapshot or disk.
	SourceResourceId *string `json:"sourceResourceId,omitempty"`

	// SourceUri: If createOption is Import, this is the URI of a blob to be imported into a managed disk.
	SourceUri *string `json:"sourceUri,omitempty"`

	// StorageAccountId: Required if createOption is Import. The Azure Resource Manager identifier of the storage account
	// containing the blob to import as a disk.
	StorageAccountId *string `json:"storageAccountId,omitempty"`

	// UploadSizeBytes: If createOption is Upload, this is the size of the contents of the upload including the VHD footer.
	// This value should be between 20972032 (20 MiB + 512 bytes for the VHD footer) and 35183298347520 bytes (32 TiB + 512
	// bytes for the VHD footer).
	UploadSizeBytes *int `json:"uploadSizeBytes,omitempty"`
}

// Additional authentication requirements when exporting or uploading to a disk or snapshot.
// +kubebuilder:validation:Enum={"AzureActiveDirectory","None"}
type DataAccessAuthMode string

const (
	DataAccessAuthMode_AzureActiveDirectory = DataAccessAuthMode("AzureActiveDirectory")
	DataAccessAuthMode_None                 = DataAccessAuthMode("None")
)

// Mapping from string to DataAccessAuthMode
var dataAccessAuthMode_Values = map[string]DataAccessAuthMode{
	"azureactivedirectory": DataAccessAuthMode_AzureActiveDirectory,
	"none":                 DataAccessAuthMode_None,
}

// Used for establishing the purchase context of any 3rd Party artifact through MarketPlace.
type DiskPurchasePlan struct {
	// Name: The plan ID.
	Name *string `json:"name,omitempty"`

	// Product: Specifies the product of the image from the marketplace. This is the same value as Offer under the
	// imageReference element.
	Product *string `json:"product,omitempty"`

	// PromotionCode: The Offer Promotion Code.
	PromotionCode *string `json:"promotionCode,omitempty"`

	// Publisher: The publisher ID.
	Publisher *string `json:"publisher,omitempty"`
}

// Contains the security related information for the resource.
type DiskSecurityProfile struct {
	// SecureVMDiskEncryptionSetId: ResourceId of the disk encryption set associated to Confidential VM supported disk
	// encrypted with customer managed key
	SecureVMDiskEncryptionSetId *string `json:"secureVMDiskEncryptionSetId,omitempty"`

	// SecurityType: Specifies the SecurityType of the VM. Applicable for OS disks only.
	SecurityType *DiskSecurityTypes `json:"securityType,omitempty"`
}

// The sku name.
// +kubebuilder:validation:Enum={"PremiumV2_LRS","Premium_LRS","Premium_ZRS","StandardSSD_LRS","StandardSSD_ZRS","Standard_LRS","UltraSSD_LRS"}
type DiskStorageAccountTypes string

const (
	DiskStorageAccountTypes_PremiumV2_LRS   = DiskStorageAccountTypes("PremiumV2_LRS")
	DiskStorageAccountTypes_Premium_LRS     = DiskStorageAccountTypes("Premium_LRS")
	DiskStorageAccountTypes_Premium_ZRS     = DiskStorageAccountTypes("Premium_ZRS")
	DiskStorageAccountTypes_StandardSSD_LRS = DiskStorageAccountTypes("StandardSSD_LRS")
	DiskStorageAccountTypes_StandardSSD_ZRS = DiskStorageAccountTypes("StandardSSD_ZRS")
	DiskStorageAccountTypes_Standard_LRS    = DiskStorageAccountTypes("Standard_LRS")
	DiskStorageAccountTypes_UltraSSD_LRS    = DiskStorageAccountTypes("UltraSSD_LRS")
)

// Mapping from string to DiskStorageAccountTypes
var diskStorageAccountTypes_Values = map[string]DiskStorageAccountTypes{
	"premiumv2_lrs":   DiskStorageAccountTypes_PremiumV2_LRS,
	"premium_lrs":     DiskStorageAccountTypes_Premium_LRS,
	"premium_zrs":     DiskStorageAccountTypes_Premium_ZRS,
	"standardssd_lrs": DiskStorageAccountTypes_StandardSSD_LRS,
	"standardssd_zrs": DiskStorageAccountTypes_StandardSSD_ZRS,
	"standard_lrs":    DiskStorageAccountTypes_Standard_LRS,
	"ultrassd_lrs":    DiskStorageAccountTypes_UltraSSD_LRS,
}

// Encryption at rest settings for disk or snapshot
type Encryption struct {
	// DiskEncryptionSetId: ResourceId of the disk encryption set to use for enabling encryption at rest.
	DiskEncryptionSetId *string `json:"diskEncryptionSetId,omitempty"`

	// Type: The type of key used to encrypt the data of the disk.
	Type *EncryptionType `json:"type,omitempty"`
}

// Encryption settings for disk or snapshot
type EncryptionSettingsCollection struct {
	// Enabled: Set this flag to true and provide DiskEncryptionKey and optional KeyEncryptionKey to enable encryption. Set
	// this flag to false and remove DiskEncryptionKey and KeyEncryptionKey to disable encryption. If EncryptionSettings is
	// null in the request object, the existing settings remain unchanged.
	Enabled *bool `json:"enabled,omitempty"`

	// EncryptionSettings: A collection of encryption settings, one for each disk volume.
	EncryptionSettings []EncryptionSettingsElement `json:"encryptionSettings,omitempty"`

	// EncryptionSettingsVersion: Describes what type of encryption is used for the disks. Once this field is set, it cannot be
	// overwritten. '1.0' corresponds to Azure Disk Encryption with AAD app.'1.1' corresponds to Azure Disk Encryption.
	EncryptionSettingsVersion *string `json:"encryptionSettingsVersion,omitempty"`
}

// The hypervisor generation of the Virtual Machine. Applicable to OS disks only.
// +kubebuilder:validation:Enum={"V1","V2"}
type HyperVGeneration string

const (
	HyperVGeneration_V1 = HyperVGeneration("V1")
	HyperVGeneration_V2 = HyperVGeneration("V2")
)

// Mapping from string to HyperVGeneration
var hyperVGeneration_Values = map[string]HyperVGeneration{
	"v1": HyperVGeneration_V1,
	"v2": HyperVGeneration_V2,
}

// Policy for accessing the disk via network.
// +kubebuilder:validation:Enum={"AllowAll","AllowPrivate","DenyAll"}
type NetworkAccessPolicy string

const (
	NetworkAccessPolicy_AllowAll     = NetworkAccessPolicy("AllowAll")
	NetworkAccessPolicy_AllowPrivate = NetworkAccessPolicy("AllowPrivate")
	NetworkAccessPolicy_DenyAll      = NetworkAccessPolicy("DenyAll")
)

// Mapping from string to NetworkAccessPolicy
var networkAccessPolicy_Values = map[string]NetworkAccessPolicy{
	"allowall":     NetworkAccessPolicy_AllowAll,
	"allowprivate": NetworkAccessPolicy_AllowPrivate,
	"denyall":      NetworkAccessPolicy_DenyAll,
}

// The Operating System type.
// +kubebuilder:validation:Enum={"Linux","Windows"}
type OperatingSystemTypes string

const (
	OperatingSystemTypes_Linux   = OperatingSystemTypes("Linux")
	OperatingSystemTypes_Windows = OperatingSystemTypes("Windows")
)

// Mapping from string to OperatingSystemTypes
var operatingSystemTypes_Values = map[string]OperatingSystemTypes{
	"linux":   OperatingSystemTypes_Linux,
	"windows": OperatingSystemTypes_Windows,
}

// Policy for controlling export on the disk.
// +kubebuilder:validation:Enum={"Disabled","Enabled"}
type PublicNetworkAccess string

const (
	PublicNetworkAccess_Disabled = PublicNetworkAccess("Disabled")
	PublicNetworkAccess_Enabled  = PublicNetworkAccess("Enabled")
)

// Mapping from string to PublicNetworkAccess
var publicNetworkAccess_Values = map[string]PublicNetworkAccess{
	"disabled": PublicNetworkAccess_Disabled,
	"enabled":  PublicNetworkAccess_Enabled,
}

// List of supported capabilities persisted on the disk resource for VM use.
type SupportedCapabilities struct {
	// AcceleratedNetwork: True if the image from which the OS disk is created supports accelerated networking.
	AcceleratedNetwork *bool `json:"acceleratedNetwork,omitempty"`

	// Architecture: CPU architecture supported by an OS disk.
	Architecture *Architecture `json:"architecture,omitempty"`

	// DiskControllerTypes: The disk controllers that an OS disk supports. If set it can be SCSI or SCSI, NVME or NVME, SCSI.
	DiskControllerTypes *string `json:"diskControllerTypes,omitempty"`
}

// CPU architecture supported by an OS disk.
// +kubebuilder:validation:Enum={"Arm64","x64"}
type Architecture string

const (
	Architecture_Arm64 = Architecture("Arm64")
	Architecture_X64   = Architecture("x64")
)

// Mapping from string to Architecture
var architecture_Values = map[string]Architecture{
	"arm64": Architecture_Arm64,
	"x64":   Architecture_X64,
}

// This enumerates the possible sources of a disk's creation.
// +kubebuilder:validation:Enum={"Attach","Copy","CopyFromSanSnapshot","CopyStart","Empty","FromImage","Import","ImportSecure","Restore","Upload","UploadPreparedSecure"}
type DiskCreateOption string

const (
	DiskCreateOption_Attach               = DiskCreateOption("Attach")
	DiskCreateOption_Copy                 = DiskCreateOption("Copy")
	DiskCreateOption_CopyFromSanSnapshot  = DiskCreateOption("CopyFromSanSnapshot")
	DiskCreateOption_CopyStart            = DiskCreateOption("CopyStart")
	DiskCreateOption_Empty                = DiskCreateOption("Empty")
	DiskCreateOption_FromImage            = DiskCreateOption("FromImage")
	DiskCreateOption_Import               = DiskCreateOption("Import")
	DiskCreateOption_ImportSecure         = DiskCreateOption("ImportSecure")
	DiskCreateOption_Restore              = DiskCreateOption("Restore")
	DiskCreateOption_Upload               = DiskCreateOption("Upload")
	DiskCreateOption_UploadPreparedSecure = DiskCreateOption("UploadPreparedSecure")
)

// Mapping from string to DiskCreateOption
var diskCreateOption_Values = map[string]DiskCreateOption{
	"attach":               DiskCreateOption_Attach,
	"copy":                 DiskCreateOption_Copy,
	"copyfromsansnapshot":  DiskCreateOption_CopyFromSanSnapshot,
	"copystart":            DiskCreateOption_CopyStart,
	"empty":                DiskCreateOption_Empty,
	"fromimage":            DiskCreateOption_FromImage,
	"import":               DiskCreateOption_Import,
	"importsecure":         DiskCreateOption_ImportSecure,
	"restore":              DiskCreateOption_Restore,
	"upload":               DiskCreateOption_Upload,
	"uploadpreparedsecure": DiskCreateOption_UploadPreparedSecure,
}

// Specifies the SecurityType of the VM. Applicable for OS disks only.
// +kubebuilder:validation:Enum={"ConfidentialVM_DiskEncryptedWithCustomerKey","ConfidentialVM_DiskEncryptedWithPlatformKey","ConfidentialVM_NonPersistedTPM","ConfidentialVM_VMGuestStateOnlyEncryptedWithPlatformKey","TrustedLaunch"}
type DiskSecurityTypes string

const (
	DiskSecurityTypes_ConfidentialVM_DiskEncryptedWithCustomerKey             = DiskSecurityTypes("ConfidentialVM_DiskEncryptedWithCustomerKey")
	DiskSecurityTypes_ConfidentialVM_DiskEncryptedWithPlatformKey             = DiskSecurityTypes("ConfidentialVM_DiskEncryptedWithPlatformKey")
	DiskSecurityTypes_ConfidentialVM_NonPersistedTPM                          = DiskSecurityTypes("ConfidentialVM_NonPersistedTPM")
	DiskSecurityTypes_ConfidentialVM_VMGuestStateOnlyEncryptedWithPlatformKey = DiskSecurityTypes("ConfidentialVM_VMGuestStateOnlyEncryptedWithPlatformKey")
	DiskSecurityTypes_TrustedLaunch                                           = DiskSecurityTypes("TrustedLaunch")
)

// Mapping from string to DiskSecurityTypes
var diskSecurityTypes_Values = map[string]DiskSecurityTypes{
	"confidentialvm_diskencryptedwithcustomerkey":             DiskSecurityTypes_ConfidentialVM_DiskEncryptedWithCustomerKey,
	"confidentialvm_diskencryptedwithplatformkey":             DiskSecurityTypes_ConfidentialVM_DiskEncryptedWithPlatformKey,
	"confidentialvm_nonpersistedtpm":                          DiskSecurityTypes_ConfidentialVM_NonPersistedTPM,
	"confidentialvm_vmgueststateonlyencryptedwithplatformkey": DiskSecurityTypes_ConfidentialVM_VMGuestStateOnlyEncryptedWithPlatformKey,
	"trustedlaunch": DiskSecurityTypes_TrustedLaunch,
}

// Encryption settings for one disk volume.
type EncryptionSettingsElement struct {
	// DiskEncryptionKey: Key Vault Secret Url and vault id of the disk encryption key
	DiskEncryptionKey *KeyVaultAndSecretReference `json:"diskEncryptionKey,omitempty"`

	// KeyEncryptionKey: Key Vault Key Url and vault id of the key encryption key. KeyEncryptionKey is optional and when
	// provided is used to unwrap the disk encryption key.
	KeyEncryptionKey *KeyVaultAndKeyReference `json:"keyEncryptionKey,omitempty"`
}

// The type of key used to encrypt the data of the disk.
// +kubebuilder:validation:Enum={"EncryptionAtRestWithCustomerKey","EncryptionAtRestWithPlatformAndCustomerKeys","EncryptionAtRestWithPlatformKey"}
type EncryptionType string

const (
	EncryptionType_EncryptionAtRestWithCustomerKey             = EncryptionType("EncryptionAtRestWithCustomerKey")
	EncryptionType_EncryptionAtRestWithPlatformAndCustomerKeys = EncryptionType("EncryptionAtRestWithPlatformAndCustomerKeys")
	EncryptionType_EncryptionAtRestWithPlatformKey             = EncryptionType("EncryptionAtRestWithPlatformKey")
)

// Mapping from string to EncryptionType
var encryptionType_Values = map[string]EncryptionType{
	"encryptionatrestwithcustomerkey":             EncryptionType_EncryptionAtRestWithCustomerKey,
	"encryptionatrestwithplatformandcustomerkeys": EncryptionType_EncryptionAtRestWithPlatformAndCustomerKeys,
	"encryptionatrestwithplatformkey":             EncryptionType_EncryptionAtRestWithPlatformKey,
}

// The source image used for creating the disk.
type ImageDiskReference struct {
	// CommunityGalleryImageId: A relative uri containing a community Azure Compute Gallery image reference.
	CommunityGalleryImageId *string `json:"communityGalleryImageId,omitempty"`

	// Id: A relative uri containing either a Platform Image Repository, user image, or Azure Compute Gallery image reference.
	Id *string `json:"id,omitempty"`

	// Lun: If the disk is created from an image's data disk, this is an index that indicates which of the data disks in the
	// image to use. For OS disks, this field is null.
	Lun *int `json:"lun,omitempty"`

	// SharedGalleryImageId: A relative uri containing a direct shared Azure Compute Gallery image reference.
	SharedGalleryImageId *string `json:"sharedGalleryImageId,omitempty"`
}

// If this field is set on a snapshot and createOption is CopyStart, the snapshot will be copied at a quicker speed.
// +kubebuilder:validation:Enum={"Enhanced","None"}
type ProvisionedBandwidthCopyOption string

const (
	ProvisionedBandwidthCopyOption_Enhanced = ProvisionedBandwidthCopyOption("Enhanced")
	ProvisionedBandwidthCopyOption_None     = ProvisionedBandwidthCopyOption("None")
)

// Mapping from string to ProvisionedBandwidthCopyOption
var provisionedBandwidthCopyOption_Values = map[string]ProvisionedBandwidthCopyOption{
	"enhanced": ProvisionedBandwidthCopyOption_Enhanced,
	"none":     ProvisionedBandwidthCopyOption_None,
}

// Key Vault Key Url and vault id of KeK, KeK is optional and when provided is used to unwrap the encryptionKey
type KeyVaultAndKeyReference struct {
	// KeyUrl: Url pointing to a key or secret in KeyVault
	KeyUrl *string `json:"keyUrl,omitempty"`

	// SourceVault: Resource id of the KeyVault containing the key or secret
	SourceVault *SourceVault `json:"sourceVault,omitempty"`
}

// Key Vault Secret Url and vault id of the encryption key
type KeyVaultAndSecretReference struct {
	// SecretUrl: Url pointing to a key or secret in KeyVault
	SecretUrl *string `json:"secretUrl,omitempty"`

	// SourceVault: Resource id of the KeyVault containing the key or secret
	SourceVault *SourceVault `json:"sourceVault,omitempty"`
}
