// 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 StorageAccount_Spec struct {
	// ExtendedLocation: Optional. Set the extended location of the resource. If not set, the storage account will be created
	// in Azure main region. Otherwise it will be created in the specified extended location
	ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"`

	// Identity: The identity of the resource.
	Identity *Identity `json:"identity,omitempty"`

	// Kind: Required. Indicates the type of storage account.
	Kind *StorageAccount_Kind_Spec `json:"kind,omitempty"`

	// Location: Required. Gets or sets the location of the resource. This will be one of the supported and registered Azure
	// Geo Regions (e.g. West US, East US, Southeast Asia, etc.). The geo region of a resource cannot be changed once it is
	// created, but if an identical geo region is specified on update, the request will succeed.
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: The parameters used to create the storage account.
	Properties *StorageAccountPropertiesCreateParameters `json:"properties,omitempty"`

	// Sku: Required. Gets or sets the SKU name.
	Sku *Sku `json:"sku,omitempty"`

	// Tags: Gets or sets a list of key value pairs that describe the resource. These tags can be used for viewing and grouping
	// this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key
	// with a length no greater than 128 characters and a value with a length no greater than 256 characters.
	Tags map[string]string `json:"tags"`
}

var _ genruntime.ARMResourceSpec = &StorageAccount_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2021-04-01"
func (account StorageAccount_Spec) GetAPIVersion() string {
	return "2021-04-01"
}

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

// GetType returns the ARM Type of the resource. This is always "Microsoft.Storage/storageAccounts"
func (account *StorageAccount_Spec) GetType() string {
	return "Microsoft.Storage/storageAccounts"
}

// The complex type of the extended location.
type ExtendedLocation struct {
	// Name: The name of the extended location.
	Name *string `json:"name,omitempty"`

	// Type: The type of the extended location.
	Type *ExtendedLocationType `json:"type,omitempty"`
}

// Identity for the resource.
type Identity struct {
	// Type: The identity type.
	Type                   *Identity_Type                         `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

// The SKU of the storage account.
type Sku struct {
	// Name: The SKU name. Required for account creation; optional for update. Note that in older versions, SKU name was called
	//  accountType.
	Name *SkuName `json:"name,omitempty"`

	// Tier: The SKU tier. This is based on the SKU name.
	Tier *Tier `json:"tier,omitempty"`
}

// +kubebuilder:validation:Enum={"BlobStorage","BlockBlobStorage","FileStorage","Storage","StorageV2"}
type StorageAccount_Kind_Spec string

const (
	StorageAccount_Kind_Spec_BlobStorage      = StorageAccount_Kind_Spec("BlobStorage")
	StorageAccount_Kind_Spec_BlockBlobStorage = StorageAccount_Kind_Spec("BlockBlobStorage")
	StorageAccount_Kind_Spec_FileStorage      = StorageAccount_Kind_Spec("FileStorage")
	StorageAccount_Kind_Spec_Storage          = StorageAccount_Kind_Spec("Storage")
	StorageAccount_Kind_Spec_StorageV2        = StorageAccount_Kind_Spec("StorageV2")
)

// Mapping from string to StorageAccount_Kind_Spec
var storageAccount_Kind_Spec_Values = map[string]StorageAccount_Kind_Spec{
	"blobstorage":      StorageAccount_Kind_Spec_BlobStorage,
	"blockblobstorage": StorageAccount_Kind_Spec_BlockBlobStorage,
	"filestorage":      StorageAccount_Kind_Spec_FileStorage,
	"storage":          StorageAccount_Kind_Spec_Storage,
	"storagev2":        StorageAccount_Kind_Spec_StorageV2,
}

// The parameters used to create the storage account.
type StorageAccountPropertiesCreateParameters struct {
	// AccessTier: Required for storage accounts where kind = BlobStorage. The access tier used for billing.
	AccessTier *StorageAccountPropertiesCreateParameters_AccessTier `json:"accessTier,omitempty"`

	// AllowBlobPublicAccess: Allow or disallow public access to all blobs or containers in the storage account. The default
	// interpretation is true for this property.
	AllowBlobPublicAccess *bool `json:"allowBlobPublicAccess,omitempty"`

	// AllowCrossTenantReplication: Allow or disallow cross AAD tenant object replication. The default interpretation is true
	// for this property.
	AllowCrossTenantReplication *bool `json:"allowCrossTenantReplication,omitempty"`

	// AllowSharedKeyAccess: Indicates whether the storage account permits requests to be authorized with the account access
	// key via Shared Key. If false, then all requests, including shared access signatures, must be authorized with Azure
	// Active Directory (Azure AD). The default value is null, which is equivalent to true.
	AllowSharedKeyAccess *bool `json:"allowSharedKeyAccess,omitempty"`

	// AzureFilesIdentityBasedAuthentication: Provides the identity based authentication settings for Azure Files.
	AzureFilesIdentityBasedAuthentication *AzureFilesIdentityBasedAuthentication `json:"azureFilesIdentityBasedAuthentication,omitempty"`

	// CustomDomain: User domain assigned to the storage account. Name is the CNAME source. Only one custom domain is supported
	// per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name
	// property.
	CustomDomain *CustomDomain `json:"customDomain,omitempty"`

	// Encryption: Not applicable. Azure Storage encryption is enabled for all storage accounts and cannot be disabled.
	Encryption *Encryption `json:"encryption,omitempty"`

	// IsHnsEnabled: Account HierarchicalNamespace enabled if sets to true.
	IsHnsEnabled *bool `json:"isHnsEnabled,omitempty"`

	// IsNfsV3Enabled: NFS 3.0 protocol support enabled if set to true.
	IsNfsV3Enabled *bool `json:"isNfsV3Enabled,omitempty"`

	// KeyPolicy: KeyPolicy assigned to the storage account.
	KeyPolicy *KeyPolicy `json:"keyPolicy,omitempty"`

	// LargeFileSharesState: Allow large file shares if sets to Enabled. It cannot be disabled once it is enabled.
	LargeFileSharesState *StorageAccountPropertiesCreateParameters_LargeFileSharesState `json:"largeFileSharesState,omitempty"`

	// MinimumTlsVersion: Set the minimum TLS version to be permitted on requests to storage. The default interpretation is TLS
	// 1.0 for this property.
	MinimumTlsVersion *StorageAccountPropertiesCreateParameters_MinimumTlsVersion `json:"minimumTlsVersion,omitempty"`

	// NetworkAcls: Network rule set
	NetworkAcls *NetworkRuleSet `json:"networkAcls,omitempty"`

	// RoutingPreference: Maintains information about the network routing choice opted by the user for data transfer
	RoutingPreference *RoutingPreference `json:"routingPreference,omitempty"`

	// SasPolicy: SasPolicy assigned to the storage account.
	SasPolicy *SasPolicy `json:"sasPolicy,omitempty"`

	// SupportsHttpsTrafficOnly: Allows https traffic only to storage service if sets to true. The default value is true since
	// API version 2019-04-01.
	SupportsHttpsTrafficOnly *bool `json:"supportsHttpsTrafficOnly,omitempty"`
}

// Settings for Azure Files identity based authentication.
type AzureFilesIdentityBasedAuthentication struct {
	// ActiveDirectoryProperties: Required if choose AD.
	ActiveDirectoryProperties *ActiveDirectoryProperties `json:"activeDirectoryProperties,omitempty"`

	// DefaultSharePermission: Default share permission for users using Kerberos authentication if RBAC role is not assigned.
	DefaultSharePermission *AzureFilesIdentityBasedAuthentication_DefaultSharePermission `json:"defaultSharePermission,omitempty"`

	// DirectoryServiceOptions: Indicates the directory service used.
	DirectoryServiceOptions *AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions `json:"directoryServiceOptions,omitempty"`
}

// The custom domain assigned to this storage account. This can be set via Update.
type CustomDomain struct {
	// Name: Gets or sets the custom domain name assigned to the storage account. Name is the CNAME source.
	Name *string `json:"name,omitempty"`

	// UseSubDomainName: Indicates whether indirect CName validation is enabled. Default value is false. This should only be
	// set on updates.
	UseSubDomainName *bool `json:"useSubDomainName,omitempty"`
}

// The encryption settings on the storage account.
type Encryption struct {
	// Identity: The identity to be used with service-side encryption at rest.
	Identity *EncryptionIdentity `json:"identity,omitempty"`

	// KeySource: The encryption keySource (provider). Possible values (case-insensitive):  Microsoft.Storage,
	// Microsoft.Keyvault
	KeySource *Encryption_KeySource `json:"keySource,omitempty"`

	// Keyvaultproperties: Properties provided by key vault.
	Keyvaultproperties *KeyVaultProperties `json:"keyvaultproperties,omitempty"`

	// RequireInfrastructureEncryption: A boolean indicating whether or not the service applies a secondary layer of encryption
	// with platform managed keys for data at rest.
	RequireInfrastructureEncryption *bool `json:"requireInfrastructureEncryption,omitempty"`

	// Services: List of services which support encryption.
	Services *EncryptionServices `json:"services,omitempty"`
}

// The type of extendedLocation.
// +kubebuilder:validation:Enum={"EdgeZone"}
type ExtendedLocationType string

const ExtendedLocationType_EdgeZone = ExtendedLocationType("EdgeZone")

// Mapping from string to ExtendedLocationType
var extendedLocationType_Values = map[string]ExtendedLocationType{
	"edgezone": ExtendedLocationType_EdgeZone,
}

// +kubebuilder:validation:Enum={"None","SystemAssigned","SystemAssigned,UserAssigned","UserAssigned"}
type Identity_Type string

const (
	Identity_Type_None                       = Identity_Type("None")
	Identity_Type_SystemAssigned             = Identity_Type("SystemAssigned")
	Identity_Type_SystemAssignedUserAssigned = Identity_Type("SystemAssigned,UserAssigned")
	Identity_Type_UserAssigned               = Identity_Type("UserAssigned")
)

// Mapping from string to Identity_Type
var identity_Type_Values = map[string]Identity_Type{
	"none":                        Identity_Type_None,
	"systemassigned":              Identity_Type_SystemAssigned,
	"systemassigned,userassigned": Identity_Type_SystemAssignedUserAssigned,
	"userassigned":                Identity_Type_UserAssigned,
}

// KeyPolicy assigned to the storage account.
type KeyPolicy struct {
	// KeyExpirationPeriodInDays: The key expiration period in days.
	KeyExpirationPeriodInDays *int `json:"keyExpirationPeriodInDays,omitempty"`
}

// Network rule set
type NetworkRuleSet struct {
	// Bypass: Specifies whether traffic is bypassed for Logging/Metrics/AzureServices. Possible values are any combination of
	// Logging|Metrics|AzureServices (For example, "Logging, Metrics"), or None to bypass none of those traffics.
	Bypass *string `json:"bypass,omitempty"`

	// DefaultAction: Specifies the default action of allow or deny when no other rules match.
	DefaultAction *NetworkRuleSet_DefaultAction `json:"defaultAction,omitempty"`

	// IpRules: Sets the IP ACL rules
	IpRules []IPRule `json:"ipRules"`

	// ResourceAccessRules: Sets the resource access rules
	ResourceAccessRules []ResourceAccessRule `json:"resourceAccessRules"`

	// VirtualNetworkRules: Sets the virtual network rules
	VirtualNetworkRules []VirtualNetworkRule `json:"virtualNetworkRules"`
}

// Routing preference defines the type of network, either microsoft or internet routing to be used to deliver the user
// data, the default option is microsoft routing
type RoutingPreference struct {
	// PublishInternetEndpoints: A boolean flag which indicates whether internet routing storage endpoints are to be published
	PublishInternetEndpoints *bool `json:"publishInternetEndpoints,omitempty"`

	// PublishMicrosoftEndpoints: A boolean flag which indicates whether microsoft routing storage endpoints are to be published
	PublishMicrosoftEndpoints *bool `json:"publishMicrosoftEndpoints,omitempty"`

	// RoutingChoice: Routing Choice defines the kind of network routing opted by the user.
	RoutingChoice *RoutingPreference_RoutingChoice `json:"routingChoice,omitempty"`
}

// SasPolicy assigned to the storage account.
type SasPolicy struct {
	// ExpirationAction: The SAS expiration action. Can only be Log.
	ExpirationAction *SasPolicy_ExpirationAction `json:"expirationAction,omitempty"`

	// SasExpirationPeriod: The SAS expiration period, DD.HH:MM:SS.
	SasExpirationPeriod *string `json:"sasExpirationPeriod,omitempty"`
}

// The SKU name. Required for account creation; optional for update. Note that in older versions, SKU name was called
// accountType.
// +kubebuilder:validation:Enum={"Premium_LRS","Premium_ZRS","Standard_GRS","Standard_GZRS","Standard_LRS","Standard_RAGRS","Standard_RAGZRS","Standard_ZRS"}
type SkuName string

const (
	SkuName_Premium_LRS     = SkuName("Premium_LRS")
	SkuName_Premium_ZRS     = SkuName("Premium_ZRS")
	SkuName_Standard_GRS    = SkuName("Standard_GRS")
	SkuName_Standard_GZRS   = SkuName("Standard_GZRS")
	SkuName_Standard_LRS    = SkuName("Standard_LRS")
	SkuName_Standard_RAGRS  = SkuName("Standard_RAGRS")
	SkuName_Standard_RAGZRS = SkuName("Standard_RAGZRS")
	SkuName_Standard_ZRS    = SkuName("Standard_ZRS")
)

// Mapping from string to SkuName
var skuName_Values = map[string]SkuName{
	"premium_lrs":     SkuName_Premium_LRS,
	"premium_zrs":     SkuName_Premium_ZRS,
	"standard_grs":    SkuName_Standard_GRS,
	"standard_gzrs":   SkuName_Standard_GZRS,
	"standard_lrs":    SkuName_Standard_LRS,
	"standard_ragrs":  SkuName_Standard_RAGRS,
	"standard_ragzrs": SkuName_Standard_RAGZRS,
	"standard_zrs":    SkuName_Standard_ZRS,
}

// +kubebuilder:validation:Enum={"Cool","Hot"}
type StorageAccountPropertiesCreateParameters_AccessTier string

const (
	StorageAccountPropertiesCreateParameters_AccessTier_Cool = StorageAccountPropertiesCreateParameters_AccessTier("Cool")
	StorageAccountPropertiesCreateParameters_AccessTier_Hot  = StorageAccountPropertiesCreateParameters_AccessTier("Hot")
)

// Mapping from string to StorageAccountPropertiesCreateParameters_AccessTier
var storageAccountPropertiesCreateParameters_AccessTier_Values = map[string]StorageAccountPropertiesCreateParameters_AccessTier{
	"cool": StorageAccountPropertiesCreateParameters_AccessTier_Cool,
	"hot":  StorageAccountPropertiesCreateParameters_AccessTier_Hot,
}

// +kubebuilder:validation:Enum={"Disabled","Enabled"}
type StorageAccountPropertiesCreateParameters_LargeFileSharesState string

const (
	StorageAccountPropertiesCreateParameters_LargeFileSharesState_Disabled = StorageAccountPropertiesCreateParameters_LargeFileSharesState("Disabled")
	StorageAccountPropertiesCreateParameters_LargeFileSharesState_Enabled  = StorageAccountPropertiesCreateParameters_LargeFileSharesState("Enabled")
)

// Mapping from string to StorageAccountPropertiesCreateParameters_LargeFileSharesState
var storageAccountPropertiesCreateParameters_LargeFileSharesState_Values = map[string]StorageAccountPropertiesCreateParameters_LargeFileSharesState{
	"disabled": StorageAccountPropertiesCreateParameters_LargeFileSharesState_Disabled,
	"enabled":  StorageAccountPropertiesCreateParameters_LargeFileSharesState_Enabled,
}

// +kubebuilder:validation:Enum={"TLS1_0","TLS1_1","TLS1_2"}
type StorageAccountPropertiesCreateParameters_MinimumTlsVersion string

const (
	StorageAccountPropertiesCreateParameters_MinimumTlsVersion_TLS1_0 = StorageAccountPropertiesCreateParameters_MinimumTlsVersion("TLS1_0")
	StorageAccountPropertiesCreateParameters_MinimumTlsVersion_TLS1_1 = StorageAccountPropertiesCreateParameters_MinimumTlsVersion("TLS1_1")
	StorageAccountPropertiesCreateParameters_MinimumTlsVersion_TLS1_2 = StorageAccountPropertiesCreateParameters_MinimumTlsVersion("TLS1_2")
)

// Mapping from string to StorageAccountPropertiesCreateParameters_MinimumTlsVersion
var storageAccountPropertiesCreateParameters_MinimumTlsVersion_Values = map[string]StorageAccountPropertiesCreateParameters_MinimumTlsVersion{
	"tls1_0": StorageAccountPropertiesCreateParameters_MinimumTlsVersion_TLS1_0,
	"tls1_1": StorageAccountPropertiesCreateParameters_MinimumTlsVersion_TLS1_1,
	"tls1_2": StorageAccountPropertiesCreateParameters_MinimumTlsVersion_TLS1_2,
}

// The SKU tier. This is based on the SKU name.
// +kubebuilder:validation:Enum={"Premium","Standard"}
type Tier string

const (
	Tier_Premium  = Tier("Premium")
	Tier_Standard = Tier("Standard")
)

// Mapping from string to Tier
var tier_Values = map[string]Tier{
	"premium":  Tier_Premium,
	"standard": Tier_Standard,
}

// Information about the user assigned identity for the resource
type UserAssignedIdentityDetails struct {
}

// Settings properties for Active Directory (AD).
type ActiveDirectoryProperties struct {
	// AzureStorageSid: Specifies the security identifier (SID) for Azure Storage.
	AzureStorageSid *string `json:"azureStorageSid,omitempty"`

	// DomainGuid: Specifies the domain GUID.
	DomainGuid *string `json:"domainGuid,omitempty"`

	// DomainName: Specifies the primary domain that the AD DNS server is authoritative for.
	DomainName *string `json:"domainName,omitempty"`

	// DomainSid: Specifies the security identifier (SID).
	DomainSid *string `json:"domainSid,omitempty"`

	// ForestName: Specifies the Active Directory forest to get.
	ForestName *string `json:"forestName,omitempty"`

	// NetBiosDomainName: Specifies the NetBIOS domain name.
	NetBiosDomainName *string `json:"netBiosDomainName,omitempty"`
}

// +kubebuilder:validation:Enum={"None","StorageFileDataSmbShareContributor","StorageFileDataSmbShareElevatedContributor","StorageFileDataSmbShareOwner","StorageFileDataSmbShareReader"}
type AzureFilesIdentityBasedAuthentication_DefaultSharePermission string

const (
	AzureFilesIdentityBasedAuthentication_DefaultSharePermission_None                                       = AzureFilesIdentityBasedAuthentication_DefaultSharePermission("None")
	AzureFilesIdentityBasedAuthentication_DefaultSharePermission_StorageFileDataSmbShareContributor         = AzureFilesIdentityBasedAuthentication_DefaultSharePermission("StorageFileDataSmbShareContributor")
	AzureFilesIdentityBasedAuthentication_DefaultSharePermission_StorageFileDataSmbShareElevatedContributor = AzureFilesIdentityBasedAuthentication_DefaultSharePermission("StorageFileDataSmbShareElevatedContributor")
	AzureFilesIdentityBasedAuthentication_DefaultSharePermission_StorageFileDataSmbShareOwner               = AzureFilesIdentityBasedAuthentication_DefaultSharePermission("StorageFileDataSmbShareOwner")
	AzureFilesIdentityBasedAuthentication_DefaultSharePermission_StorageFileDataSmbShareReader              = AzureFilesIdentityBasedAuthentication_DefaultSharePermission("StorageFileDataSmbShareReader")
)

// Mapping from string to AzureFilesIdentityBasedAuthentication_DefaultSharePermission
var azureFilesIdentityBasedAuthentication_DefaultSharePermission_Values = map[string]AzureFilesIdentityBasedAuthentication_DefaultSharePermission{
	"none":                               AzureFilesIdentityBasedAuthentication_DefaultSharePermission_None,
	"storagefiledatasmbsharecontributor": AzureFilesIdentityBasedAuthentication_DefaultSharePermission_StorageFileDataSmbShareContributor,
	"storagefiledatasmbshareelevatedcontributor": AzureFilesIdentityBasedAuthentication_DefaultSharePermission_StorageFileDataSmbShareElevatedContributor,
	"storagefiledatasmbshareowner":               AzureFilesIdentityBasedAuthentication_DefaultSharePermission_StorageFileDataSmbShareOwner,
	"storagefiledatasmbsharereader":              AzureFilesIdentityBasedAuthentication_DefaultSharePermission_StorageFileDataSmbShareReader,
}

// +kubebuilder:validation:Enum={"AADDS","AD","None"}
type AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions string

const (
	AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions_AADDS = AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions("AADDS")
	AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions_AD    = AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions("AD")
	AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions_None  = AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions("None")
)

// Mapping from string to AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions
var azureFilesIdentityBasedAuthentication_DirectoryServiceOptions_Values = map[string]AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions{
	"aadds": AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions_AADDS,
	"ad":    AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions_AD,
	"none":  AzureFilesIdentityBasedAuthentication_DirectoryServiceOptions_None,
}

// +kubebuilder:validation:Enum={"Microsoft.Keyvault","Microsoft.Storage"}
type Encryption_KeySource string

const (
	Encryption_KeySource_MicrosoftKeyvault = Encryption_KeySource("Microsoft.Keyvault")
	Encryption_KeySource_MicrosoftStorage  = Encryption_KeySource("Microsoft.Storage")
)

// Mapping from string to Encryption_KeySource
var encryption_KeySource_Values = map[string]Encryption_KeySource{
	"microsoft.keyvault": Encryption_KeySource_MicrosoftKeyvault,
	"microsoft.storage":  Encryption_KeySource_MicrosoftStorage,
}

// Encryption identity for the storage account.
type EncryptionIdentity struct {
	// UserAssignedIdentity: Resource identifier of the UserAssigned identity to be associated with server-side encryption on
	// the storage account.
	UserAssignedIdentity *string `json:"userAssignedIdentity,omitempty"`
}

// A list of services that support encryption.
type EncryptionServices struct {
	// Blob: The encryption function of the blob storage service.
	Blob *EncryptionService `json:"blob,omitempty"`

	// File: The encryption function of the file storage service.
	File *EncryptionService `json:"file,omitempty"`

	// Queue: The encryption function of the queue storage service.
	Queue *EncryptionService `json:"queue,omitempty"`

	// Table: The encryption function of the table storage service.
	Table *EncryptionService `json:"table,omitempty"`
}

// IP rule with specific IP or IP range in CIDR format.
type IPRule struct {
	// Action: The action of IP ACL rule.
	Action *IPRule_Action `json:"action,omitempty"`

	// Value: Specifies the IP or IP range in CIDR format. Only IPV4 address is allowed.
	Value *string `json:"value,omitempty" optionalConfigMapPair:"Value"`
}

// Properties of key vault.
type KeyVaultProperties struct {
	// Keyname: The name of KeyVault key.
	Keyname *string `json:"keyname,omitempty"`

	// Keyvaulturi: The Uri of KeyVault.
	Keyvaulturi *string `json:"keyvaulturi,omitempty"`

	// Keyversion: The version of KeyVault key.
	Keyversion *string `json:"keyversion,omitempty"`
}

// +kubebuilder:validation:Enum={"Allow","Deny"}
type NetworkRuleSet_DefaultAction string

const (
	NetworkRuleSet_DefaultAction_Allow = NetworkRuleSet_DefaultAction("Allow")
	NetworkRuleSet_DefaultAction_Deny  = NetworkRuleSet_DefaultAction("Deny")
)

// Mapping from string to NetworkRuleSet_DefaultAction
var networkRuleSet_DefaultAction_Values = map[string]NetworkRuleSet_DefaultAction{
	"allow": NetworkRuleSet_DefaultAction_Allow,
	"deny":  NetworkRuleSet_DefaultAction_Deny,
}

// Resource Access Rule.
type ResourceAccessRule struct {
	// ResourceId: Resource Id
	ResourceId *string `json:"resourceId,omitempty"`

	// TenantId: Tenant Id
	TenantId *string `json:"tenantId,omitempty"`
}

// +kubebuilder:validation:Enum={"InternetRouting","MicrosoftRouting"}
type RoutingPreference_RoutingChoice string

const (
	RoutingPreference_RoutingChoice_InternetRouting  = RoutingPreference_RoutingChoice("InternetRouting")
	RoutingPreference_RoutingChoice_MicrosoftRouting = RoutingPreference_RoutingChoice("MicrosoftRouting")
)

// Mapping from string to RoutingPreference_RoutingChoice
var routingPreference_RoutingChoice_Values = map[string]RoutingPreference_RoutingChoice{
	"internetrouting":  RoutingPreference_RoutingChoice_InternetRouting,
	"microsoftrouting": RoutingPreference_RoutingChoice_MicrosoftRouting,
}

// +kubebuilder:validation:Enum={"Log"}
type SasPolicy_ExpirationAction string

const SasPolicy_ExpirationAction_Log = SasPolicy_ExpirationAction("Log")

// Mapping from string to SasPolicy_ExpirationAction
var sasPolicy_ExpirationAction_Values = map[string]SasPolicy_ExpirationAction{
	"log": SasPolicy_ExpirationAction_Log,
}

// Virtual Network rule.
type VirtualNetworkRule struct {
	// Action: The action of virtual network rule.
	Action *VirtualNetworkRule_Action `json:"action,omitempty"`

	// Id: Resource ID of a subnet, for example:
	// /subscriptions/{subscriptionId}/resourceGroups/{groupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}.
	Id *string `json:"id,omitempty"`

	// State: Gets the state of virtual network rule.
	State *VirtualNetworkRule_State `json:"state,omitempty"`
}

// A service that allows server-side encryption to be used.
type EncryptionService struct {
	// Enabled: A boolean indicating whether or not the service encrypts the data as it is stored.
	Enabled *bool `json:"enabled,omitempty"`

	// KeyType: Encryption key type to be used for the encryption service. 'Account' key type implies that an account-scoped
	// encryption key will be used. 'Service' key type implies that a default service key is used.
	KeyType *EncryptionService_KeyType `json:"keyType,omitempty"`
}

// +kubebuilder:validation:Enum={"Allow"}
type IPRule_Action string

const IPRule_Action_Allow = IPRule_Action("Allow")

// Mapping from string to IPRule_Action
var iPRule_Action_Values = map[string]IPRule_Action{
	"allow": IPRule_Action_Allow,
}

// +kubebuilder:validation:Enum={"Allow"}
type VirtualNetworkRule_Action string

const VirtualNetworkRule_Action_Allow = VirtualNetworkRule_Action("Allow")

// Mapping from string to VirtualNetworkRule_Action
var virtualNetworkRule_Action_Values = map[string]VirtualNetworkRule_Action{
	"allow": VirtualNetworkRule_Action_Allow,
}

// +kubebuilder:validation:Enum={"Deprovisioning","Failed","NetworkSourceDeleted","Provisioning","Succeeded"}
type VirtualNetworkRule_State string

const (
	VirtualNetworkRule_State_Deprovisioning       = VirtualNetworkRule_State("Deprovisioning")
	VirtualNetworkRule_State_Failed               = VirtualNetworkRule_State("Failed")
	VirtualNetworkRule_State_NetworkSourceDeleted = VirtualNetworkRule_State("NetworkSourceDeleted")
	VirtualNetworkRule_State_Provisioning         = VirtualNetworkRule_State("Provisioning")
	VirtualNetworkRule_State_Succeeded            = VirtualNetworkRule_State("Succeeded")
)

// Mapping from string to VirtualNetworkRule_State
var virtualNetworkRule_State_Values = map[string]VirtualNetworkRule_State{
	"deprovisioning":       VirtualNetworkRule_State_Deprovisioning,
	"failed":               VirtualNetworkRule_State_Failed,
	"networksourcedeleted": VirtualNetworkRule_State_NetworkSourceDeleted,
	"provisioning":         VirtualNetworkRule_State_Provisioning,
	"succeeded":            VirtualNetworkRule_State_Succeeded,
}

// +kubebuilder:validation:Enum={"Account","Service"}
type EncryptionService_KeyType string

const (
	EncryptionService_KeyType_Account = EncryptionService_KeyType("Account")
	EncryptionService_KeyType_Service = EncryptionService_KeyType("Service")
)

// Mapping from string to EncryptionService_KeyType
var encryptionService_KeyType_Values = map[string]EncryptionService_KeyType{
	"account": EncryptionService_KeyType_Account,
	"service": EncryptionService_KeyType_Service,
}
