// 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 Site_Spec struct {
	// ExtendedLocation: Extended Location.
	ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"`

	// Identity: Managed service identity.
	Identity *ManagedServiceIdentity `json:"identity,omitempty"`

	// Kind: Kind of resource.
	Kind *string `json:"kind,omitempty"`

	// Location: Resource Location.
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: Site resource specific properties
	Properties *Site_Properties_Spec `json:"properties,omitempty"`

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

var _ genruntime.ARMResourceSpec = &Site_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2022-03-01"
func (site Site_Spec) GetAPIVersion() string {
	return "2022-03-01"
}

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

// GetType returns the ARM Type of the resource. This is always "Microsoft.Web/sites"
func (site *Site_Spec) GetType() string {
	return "Microsoft.Web/sites"
}

// Managed service identity.
type ManagedServiceIdentity struct {
	// Type: Type of managed service identity.
	Type                   *ManagedServiceIdentity_Type           `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

type Site_Properties_Spec struct {
	// ClientAffinityEnabled: <code>true</code> to enable client affinity; <code>false</code> to stop sending session affinity
	// cookies, which route client requests in the same session to the same instance. Default is <code>true</code>.
	ClientAffinityEnabled *bool `json:"clientAffinityEnabled,omitempty"`

	// ClientCertEnabled: <code>true</code> to enable client certificate authentication (TLS mutual authentication); otherwise,
	// <code>false</code>. Default is <code>false</code>.
	ClientCertEnabled *bool `json:"clientCertEnabled,omitempty"`

	// ClientCertExclusionPaths: client certificate authentication comma-separated exclusion paths
	ClientCertExclusionPaths *string `json:"clientCertExclusionPaths,omitempty"`

	// ClientCertMode: This composes with ClientCertEnabled setting.
	// - ClientCertEnabled: false means ClientCert is ignored.
	// - ClientCertEnabled: true and ClientCertMode: Required means ClientCert is required.
	// - ClientCertEnabled: true and ClientCertMode: Optional means ClientCert is optional or accepted.
	ClientCertMode *Site_Properties_ClientCertMode_Spec `json:"clientCertMode,omitempty"`

	// CloningInfo: If specified during app creation, the app is cloned from a source app.
	CloningInfo *CloningInfo `json:"cloningInfo,omitempty"`

	// ContainerSize: Size of the function container.
	ContainerSize *int `json:"containerSize,omitempty"`

	// CustomDomainVerificationId: Unique identifier that verifies the custom domains assigned to the app. Customer will add
	// this id to a txt record for verification.
	CustomDomainVerificationId *string `json:"customDomainVerificationId,omitempty"`

	// DailyMemoryTimeQuota: Maximum allowed daily memory-time quota (applicable on dynamic apps only).
	DailyMemoryTimeQuota *int `json:"dailyMemoryTimeQuota,omitempty"`

	// Enabled: <code>true</code> if the app is enabled; otherwise, <code>false</code>. Setting this value to false disables
	// the app (takes the app offline).
	Enabled *bool `json:"enabled,omitempty"`

	// HostNameSslStates: Hostname SSL states are used to manage the SSL bindings for app's hostnames.
	HostNameSslStates []HostNameSslState `json:"hostNameSslStates,omitempty"`

	// HostNamesDisabled: <code>true</code> to disable the public hostnames of the app; otherwise, <code>false</code>.
	// If <code>true</code>, the app is only accessible via API management process.
	HostNamesDisabled *bool `json:"hostNamesDisabled,omitempty"`

	// HostingEnvironmentProfile: App Service Environment to use for the app.
	HostingEnvironmentProfile *HostingEnvironmentProfile `json:"hostingEnvironmentProfile,omitempty"`

	// HttpsOnly: HttpsOnly: configures a web site to accept only https requests. Issues redirect for
	// http requests
	HttpsOnly *bool `json:"httpsOnly,omitempty"`

	// HyperV: Hyper-V sandbox.
	HyperV *bool `json:"hyperV,omitempty"`

	// IsXenon: Obsolete: Hyper-V sandbox.
	IsXenon *bool `json:"isXenon,omitempty"`

	// KeyVaultReferenceIdentity: Identity to use for Key Vault Reference authentication.
	KeyVaultReferenceIdentity *string `json:"keyVaultReferenceIdentity,omitempty"`

	// PublicNetworkAccess: Property to allow or block all public traffic. Allowed Values: 'Enabled', 'Disabled' or an empty
	// string.
	PublicNetworkAccess *string `json:"publicNetworkAccess,omitempty"`

	// RedundancyMode: Site redundancy mode
	RedundancyMode *Site_Properties_RedundancyMode_Spec `json:"redundancyMode,omitempty"`

	// Reserved: <code>true</code> if reserved; otherwise, <code>false</code>.
	Reserved *bool `json:"reserved,omitempty"`

	// ScmSiteAlsoStopped: <code>true</code> to stop SCM (KUDU) site when the app is stopped; otherwise, <code>false</code>.
	// The default is <code>false</code>.
	ScmSiteAlsoStopped *bool `json:"scmSiteAlsoStopped,omitempty"`

	// ServerFarmId: Resource ID of the associated App Service plan, formatted as:
	// "/subscriptions/{subscriptionID}/resourceGroups/{groupName}/providers/Microsoft.Web/serverfarms/{appServicePlanName}".
	ServerFarmId *string `json:"serverFarmId,omitempty"`

	// SiteConfig: Configuration of the app.
	SiteConfig *SiteConfig `json:"siteConfig,omitempty"`

	// StorageAccountRequired: Checks if Customer provided storage account is required
	StorageAccountRequired *bool `json:"storageAccountRequired,omitempty"`

	// VirtualNetworkSubnetId: Azure Resource Manager ID of the Virtual network and subnet to be joined by Regional VNET
	// Integration.
	// This must be of the form
	// /subscriptions/{subscriptionName}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}
	VirtualNetworkSubnetId *string `json:"virtualNetworkSubnetId,omitempty"`

	// VnetContentShareEnabled: To enable accessing content over virtual network
	VnetContentShareEnabled *bool `json:"vnetContentShareEnabled,omitempty"`

	// VnetImagePullEnabled: To enable pulling image over Virtual Network
	VnetImagePullEnabled *bool `json:"vnetImagePullEnabled,omitempty"`

	// VnetRouteAllEnabled: Virtual Network Route All enabled. This causes all outbound traffic to have Virtual Network
	// Security Groups and User Defined Routes applied.
	VnetRouteAllEnabled *bool `json:"vnetRouteAllEnabled,omitempty"`
}

// Information needed for cloning operation.
type CloningInfo struct {
	// AppSettingsOverrides: Application setting overrides for cloned app. If specified, these settings override the settings
	// cloned
	// from source app. Otherwise, application settings from source app are retained.
	AppSettingsOverrides map[string]string `json:"appSettingsOverrides,omitempty"`

	// CloneCustomHostNames: <code>true</code> to clone custom hostnames from source app; otherwise, <code>false</code>.
	CloneCustomHostNames *bool `json:"cloneCustomHostNames,omitempty"`

	// CloneSourceControl: <code>true</code> to clone source control from source app; otherwise, <code>false</code>.
	CloneSourceControl *bool `json:"cloneSourceControl,omitempty"`

	// ConfigureLoadBalancing: <code>true</code> to configure load balancing for source and destination app.
	ConfigureLoadBalancing *bool `json:"configureLoadBalancing,omitempty"`

	// CorrelationId: Correlation ID of cloning operation. This ID ties multiple cloning operations
	// together to use the same snapshot.
	CorrelationId *string `json:"correlationId,omitempty"`

	// HostingEnvironment: App Service Environment.
	HostingEnvironment *string `json:"hostingEnvironment,omitempty"`

	// Overwrite: <code>true</code> to overwrite destination app; otherwise, <code>false</code>.
	Overwrite *bool `json:"overwrite,omitempty"`

	// SourceWebAppId: ARM resource ID of the source app. App resource ID is of the form
	// /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName} for production slots
	// and
	// /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/slots/{slotName} for
	// other slots.
	SourceWebAppId *string `json:"sourceWebAppId,omitempty"`

	// SourceWebAppLocation: Location of source app ex: West US or North Europe
	SourceWebAppLocation *string `json:"sourceWebAppLocation,omitempty"`

	// TrafficManagerProfileId: ARM resource ID of the Traffic Manager profile to use, if it exists. Traffic Manager resource
	// ID is of the form
	// /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/trafficManagerProfiles/{profileName}.
	TrafficManagerProfileId *string `json:"trafficManagerProfileId,omitempty"`

	// TrafficManagerProfileName: Name of Traffic Manager profile to create. This is only needed if Traffic Manager profile
	// does not already exist.
	TrafficManagerProfileName *string `json:"trafficManagerProfileName,omitempty"`
}

// SSL-enabled hostname.
type HostNameSslState struct {
	// HostType: Indicates whether the hostname is a standard or repository hostname.
	HostType *HostNameSslState_HostType `json:"hostType,omitempty"`

	// Name: Hostname.
	Name *string `json:"name,omitempty"`

	// SslState: SSL type.
	SslState *HostNameSslState_SslState `json:"sslState,omitempty"`

	// Thumbprint: SSL certificate thumbprint.
	Thumbprint *string `json:"thumbprint,omitempty"`

	// ToUpdate: Set to <code>true</code> to update existing hostname.
	ToUpdate *bool `json:"toUpdate,omitempty"`

	// VirtualIP: Virtual IP address assigned to the hostname if IP based SSL is enabled.
	VirtualIP *string `json:"virtualIP,omitempty"`
}

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

const (
	ManagedServiceIdentity_Type_None                       = ManagedServiceIdentity_Type("None")
	ManagedServiceIdentity_Type_SystemAssigned             = ManagedServiceIdentity_Type("SystemAssigned")
	ManagedServiceIdentity_Type_SystemAssignedUserAssigned = ManagedServiceIdentity_Type("SystemAssigned, UserAssigned")
	ManagedServiceIdentity_Type_UserAssigned               = ManagedServiceIdentity_Type("UserAssigned")
)

// Mapping from string to ManagedServiceIdentity_Type
var managedServiceIdentity_Type_Values = map[string]ManagedServiceIdentity_Type{
	"none":                         ManagedServiceIdentity_Type_None,
	"systemassigned":               ManagedServiceIdentity_Type_SystemAssigned,
	"systemassigned, userassigned": ManagedServiceIdentity_Type_SystemAssignedUserAssigned,
	"userassigned":                 ManagedServiceIdentity_Type_UserAssigned,
}

// +kubebuilder:validation:Enum={"Optional","OptionalInteractiveUser","Required"}
type Site_Properties_ClientCertMode_Spec string

const (
	Site_Properties_ClientCertMode_Spec_Optional                = Site_Properties_ClientCertMode_Spec("Optional")
	Site_Properties_ClientCertMode_Spec_OptionalInteractiveUser = Site_Properties_ClientCertMode_Spec("OptionalInteractiveUser")
	Site_Properties_ClientCertMode_Spec_Required                = Site_Properties_ClientCertMode_Spec("Required")
)

// Mapping from string to Site_Properties_ClientCertMode_Spec
var site_Properties_ClientCertMode_Spec_Values = map[string]Site_Properties_ClientCertMode_Spec{
	"optional":                Site_Properties_ClientCertMode_Spec_Optional,
	"optionalinteractiveuser": Site_Properties_ClientCertMode_Spec_OptionalInteractiveUser,
	"required":                Site_Properties_ClientCertMode_Spec_Required,
}

// +kubebuilder:validation:Enum={"ActiveActive","Failover","GeoRedundant","Manual","None"}
type Site_Properties_RedundancyMode_Spec string

const (
	Site_Properties_RedundancyMode_Spec_ActiveActive = Site_Properties_RedundancyMode_Spec("ActiveActive")
	Site_Properties_RedundancyMode_Spec_Failover     = Site_Properties_RedundancyMode_Spec("Failover")
	Site_Properties_RedundancyMode_Spec_GeoRedundant = Site_Properties_RedundancyMode_Spec("GeoRedundant")
	Site_Properties_RedundancyMode_Spec_Manual       = Site_Properties_RedundancyMode_Spec("Manual")
	Site_Properties_RedundancyMode_Spec_None         = Site_Properties_RedundancyMode_Spec("None")
)

// Mapping from string to Site_Properties_RedundancyMode_Spec
var site_Properties_RedundancyMode_Spec_Values = map[string]Site_Properties_RedundancyMode_Spec{
	"activeactive": Site_Properties_RedundancyMode_Spec_ActiveActive,
	"failover":     Site_Properties_RedundancyMode_Spec_Failover,
	"georedundant": Site_Properties_RedundancyMode_Spec_GeoRedundant,
	"manual":       Site_Properties_RedundancyMode_Spec_Manual,
	"none":         Site_Properties_RedundancyMode_Spec_None,
}

// Configuration of an App Service app.
type SiteConfig struct {
	// AcrUseManagedIdentityCreds: Flag to use Managed Identity Creds for ACR pull
	AcrUseManagedIdentityCreds *bool `json:"acrUseManagedIdentityCreds,omitempty"`

	// AcrUserManagedIdentityID: If using user managed identity, the user managed identity ClientId
	AcrUserManagedIdentityID *string `json:"acrUserManagedIdentityID,omitempty"`

	// AlwaysOn: <code>true</code> if Always On is enabled; otherwise, <code>false</code>.
	AlwaysOn *bool `json:"alwaysOn,omitempty"`

	// ApiDefinition: Information about the formal API definition for the app.
	ApiDefinition *ApiDefinitionInfo `json:"apiDefinition,omitempty"`

	// ApiManagementConfig: Azure API management settings linked to the app.
	ApiManagementConfig *ApiManagementConfig `json:"apiManagementConfig,omitempty"`

	// AppCommandLine: App command line to launch.
	AppCommandLine *string `json:"appCommandLine,omitempty"`

	// AppSettings: Application settings.
	AppSettings []NameValuePair `json:"appSettings,omitempty"`

	// AutoHealEnabled: <code>true</code> if Auto Heal is enabled; otherwise, <code>false</code>.
	AutoHealEnabled *bool `json:"autoHealEnabled,omitempty"`

	// AutoHealRules: Auto Heal rules.
	AutoHealRules *AutoHealRules `json:"autoHealRules,omitempty"`

	// AutoSwapSlotName: Auto-swap slot name.
	AutoSwapSlotName *string `json:"autoSwapSlotName,omitempty"`

	// AzureStorageAccounts: List of Azure Storage Accounts.
	AzureStorageAccounts map[string]AzureStorageInfoValue `json:"azureStorageAccounts,omitempty"`

	// ConnectionStrings: Connection strings.
	ConnectionStrings []ConnStringInfo `json:"connectionStrings,omitempty"`

	// Cors: Cross-Origin Resource Sharing (CORS) settings.
	Cors *CorsSettings `json:"cors,omitempty"`

	// DefaultDocuments: Default documents.
	DefaultDocuments []string `json:"defaultDocuments,omitempty"`

	// DetailedErrorLoggingEnabled: <code>true</code> if detailed error logging is enabled; otherwise, <code>false</code>.
	DetailedErrorLoggingEnabled *bool `json:"detailedErrorLoggingEnabled,omitempty"`

	// DocumentRoot: Document root.
	DocumentRoot *string `json:"documentRoot,omitempty"`

	// Experiments: This is work around for polymorphic types.
	Experiments *Experiments `json:"experiments,omitempty"`

	// FtpsState: State of FTP / FTPS service
	FtpsState *SiteConfig_FtpsState `json:"ftpsState,omitempty"`

	// FunctionAppScaleLimit: Maximum number of workers that a site can scale out to.
	// This setting only applies to the Consumption and Elastic Premium Plans
	FunctionAppScaleLimit *int `json:"functionAppScaleLimit,omitempty"`

	// FunctionsRuntimeScaleMonitoringEnabled: Gets or sets a value indicating whether functions runtime scale monitoring is
	// enabled. When enabled,
	// the ScaleController will not monitor event sources directly, but will instead call to the
	// runtime to get scale status.
	FunctionsRuntimeScaleMonitoringEnabled *bool `json:"functionsRuntimeScaleMonitoringEnabled,omitempty"`

	// HandlerMappings: Handler mappings.
	HandlerMappings []HandlerMapping `json:"handlerMappings,omitempty"`

	// HealthCheckPath: Health check path
	HealthCheckPath *string `json:"healthCheckPath,omitempty"`

	// Http20Enabled: Http20Enabled: configures a web site to allow clients to connect over http2.0
	Http20Enabled *bool `json:"http20Enabled,omitempty"`

	// HttpLoggingEnabled: <code>true</code> if HTTP logging is enabled; otherwise, <code>false</code>.
	HttpLoggingEnabled *bool `json:"httpLoggingEnabled,omitempty"`

	// IpSecurityRestrictions: IP security restrictions for main.
	IpSecurityRestrictions []IpSecurityRestriction `json:"ipSecurityRestrictions,omitempty"`

	// JavaContainer: Java container.
	JavaContainer *string `json:"javaContainer,omitempty"`

	// JavaContainerVersion: Java container version.
	JavaContainerVersion *string `json:"javaContainerVersion,omitempty"`

	// JavaVersion: Java version.
	JavaVersion *string `json:"javaVersion,omitempty"`

	// KeyVaultReferenceIdentity: Identity to use for Key Vault Reference authentication.
	KeyVaultReferenceIdentity *string `json:"keyVaultReferenceIdentity,omitempty"`

	// Limits: Site limits.
	Limits *SiteLimits `json:"limits,omitempty"`

	// LinuxFxVersion: Linux App Framework and version
	LinuxFxVersion *string `json:"linuxFxVersion,omitempty"`

	// LoadBalancing: Site load balancing.
	LoadBalancing *SiteConfig_LoadBalancing `json:"loadBalancing,omitempty"`

	// LocalMySqlEnabled: <code>true</code> to enable local MySQL; otherwise, <code>false</code>.
	LocalMySqlEnabled *bool `json:"localMySqlEnabled,omitempty"`

	// LogsDirectorySizeLimit: HTTP logs directory size limit.
	LogsDirectorySizeLimit *int `json:"logsDirectorySizeLimit,omitempty"`

	// ManagedPipelineMode: Managed pipeline mode.
	ManagedPipelineMode *SiteConfig_ManagedPipelineMode `json:"managedPipelineMode,omitempty"`

	// ManagedServiceIdentityId: Managed Service Identity Id
	ManagedServiceIdentityId *int `json:"managedServiceIdentityId,omitempty"`

	// MinTlsVersion: MinTlsVersion: configures the minimum version of TLS required for SSL requests
	MinTlsVersion *SiteConfig_MinTlsVersion `json:"minTlsVersion,omitempty"`

	// MinimumElasticInstanceCount: Number of minimum instance count for a site
	// This setting only applies to the Elastic Plans
	MinimumElasticInstanceCount *int `json:"minimumElasticInstanceCount,omitempty"`

	// NetFrameworkVersion: .NET Framework version.
	NetFrameworkVersion *string `json:"netFrameworkVersion,omitempty"`

	// NodeVersion: Version of Node.js.
	NodeVersion *string `json:"nodeVersion,omitempty"`

	// NumberOfWorkers: Number of workers.
	NumberOfWorkers *int `json:"numberOfWorkers,omitempty"`

	// PhpVersion: Version of PHP.
	PhpVersion *string `json:"phpVersion,omitempty"`

	// PowerShellVersion: Version of PowerShell.
	PowerShellVersion *string `json:"powerShellVersion,omitempty"`

	// PreWarmedInstanceCount: Number of preWarmed instances.
	// This setting only applies to the Consumption and Elastic Plans
	PreWarmedInstanceCount *int `json:"preWarmedInstanceCount,omitempty"`

	// PublicNetworkAccess: Property to allow or block all public traffic.
	PublicNetworkAccess *string `json:"publicNetworkAccess,omitempty"`

	// PublishingUsername: Publishing user name.
	PublishingUsername *string `json:"publishingUsername,omitempty"`

	// Push: Push endpoint settings.
	Push *PushSettings `json:"push,omitempty"`

	// PythonVersion: Version of Python.
	PythonVersion *string `json:"pythonVersion,omitempty"`

	// RemoteDebuggingEnabled: <code>true</code> if remote debugging is enabled; otherwise, <code>false</code>.
	RemoteDebuggingEnabled *bool `json:"remoteDebuggingEnabled,omitempty"`

	// RemoteDebuggingVersion: Remote debugging version.
	RemoteDebuggingVersion *string `json:"remoteDebuggingVersion,omitempty"`

	// RequestTracingEnabled: <code>true</code> if request tracing is enabled; otherwise, <code>false</code>.
	RequestTracingEnabled *bool `json:"requestTracingEnabled,omitempty"`

	// RequestTracingExpirationTime: Request tracing expiration time.
	RequestTracingExpirationTime *string `json:"requestTracingExpirationTime,omitempty"`

	// ScmIpSecurityRestrictions: IP security restrictions for scm.
	ScmIpSecurityRestrictions []IpSecurityRestriction `json:"scmIpSecurityRestrictions,omitempty"`

	// ScmIpSecurityRestrictionsUseMain: IP security restrictions for scm to use main.
	ScmIpSecurityRestrictionsUseMain *bool `json:"scmIpSecurityRestrictionsUseMain,omitempty"`

	// ScmMinTlsVersion: ScmMinTlsVersion: configures the minimum version of TLS required for SSL requests for SCM site
	ScmMinTlsVersion *SiteConfig_ScmMinTlsVersion `json:"scmMinTlsVersion,omitempty"`

	// ScmType: SCM type.
	ScmType *SiteConfig_ScmType `json:"scmType,omitempty"`

	// TracingOptions: Tracing options.
	TracingOptions *string `json:"tracingOptions,omitempty"`

	// Use32BitWorkerProcess: <code>true</code> to use 32-bit worker process; otherwise, <code>false</code>.
	Use32BitWorkerProcess *bool `json:"use32BitWorkerProcess,omitempty"`

	// VirtualApplications: Virtual applications.
	VirtualApplications []VirtualApplication `json:"virtualApplications,omitempty"`

	// VnetName: Virtual Network name.
	VnetName *string `json:"vnetName,omitempty"`

	// VnetPrivatePortsCount: The number of private ports assigned to this app. These will be assigned dynamically on runtime.
	VnetPrivatePortsCount *int `json:"vnetPrivatePortsCount,omitempty"`

	// VnetRouteAllEnabled: Virtual Network Route All enabled. This causes all outbound traffic to have Virtual Network
	// Security Groups and User Defined Routes applied.
	VnetRouteAllEnabled *bool `json:"vnetRouteAllEnabled,omitempty"`

	// WebSocketsEnabled: <code>true</code> if WebSocket is enabled; otherwise, <code>false</code>.
	WebSocketsEnabled *bool `json:"webSocketsEnabled,omitempty"`

	// WebsiteTimeZone: Sets the time zone a site uses for generating timestamps. Compatible with Linux and Windows App
	// Service. Setting the WEBSITE_TIME_ZONE app setting takes precedence over this config. For Linux, expects tz database
	// values https://www.iana.org/time-zones (for a quick reference see
	// https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). For Windows, expects one of the time zones listed under
	// HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
	WebsiteTimeZone *string `json:"websiteTimeZone,omitempty"`

	// WindowsFxVersion: Xenon App Framework and version
	WindowsFxVersion *string `json:"windowsFxVersion,omitempty"`

	// XManagedServiceIdentityId: Explicit Managed Service Identity Id
	XManagedServiceIdentityId *int `json:"xManagedServiceIdentityId,omitempty"`
}

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

// Information about the formal API definition for the app.
type ApiDefinitionInfo struct {
	// Url: The URL of the API definition.
	Url *string `json:"url,omitempty"`
}

// Azure API management (APIM) configuration linked to the app.
type ApiManagementConfig struct {
	// Id: APIM-Api Identifier.
	Id *string `json:"id,omitempty"`
}

// Rules that can be defined for auto-heal.
type AutoHealRules struct {
	// Actions: Actions to be executed when a rule is triggered.
	Actions *AutoHealActions `json:"actions,omitempty"`

	// Triggers: Conditions that describe when to execute the auto-heal actions.
	Triggers *AutoHealTriggers `json:"triggers,omitempty"`
}

// Azure Files or Blob Storage access information value for dictionary storage.
type AzureStorageInfoValue struct {
	// AccessKey: Access key for the storage account.
	AccessKey *string `json:"accessKey,omitempty"`

	// AccountName: Name of the storage account.
	AccountName *string `json:"accountName,omitempty"`

	// MountPath: Path to mount the storage within the site's runtime environment.
	MountPath *string `json:"mountPath,omitempty"`

	// ShareName: Name of the file share (container name, for Blob storage).
	ShareName *string `json:"shareName,omitempty"`

	// Type: Type of storage.
	Type *AzureStorageInfoValue_Type `json:"type,omitempty"`
}

// Database connection string information.
type ConnStringInfo struct {
	// ConnectionString: Connection string value.
	ConnectionString *string `json:"connectionString,omitempty"`

	// Name: Name of connection string.
	Name *string `json:"name,omitempty"`

	// Type: Type of database.
	Type *ConnStringInfo_Type `json:"type,omitempty"`
}

// Cross-Origin Resource Sharing (CORS) settings for the app.
type CorsSettings struct {
	// AllowedOrigins: Gets or sets the list of origins that should be allowed to make cross-origin
	// calls (for example: http://example.com:12345). Use "*" to allow all.
	AllowedOrigins []string `json:"allowedOrigins,omitempty"`

	// SupportCredentials: Gets or sets whether CORS requests with credentials are allowed. See
	// https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Requests_with_credentials
	// for more details.
	SupportCredentials *bool `json:"supportCredentials,omitempty"`
}

// Routing rules in production experiments.
type Experiments struct {
	// RampUpRules: List of ramp-up rules.
	RampUpRules []RampUpRule `json:"rampUpRules,omitempty"`
}

// The IIS handler mappings used to define which handler processes HTTP requests with certain extension.
// For example, it
// is used to configure php-cgi.exe process to handle all HTTP requests with *.php extension.
type HandlerMapping struct {
	// Arguments: Command-line arguments to be passed to the script processor.
	Arguments *string `json:"arguments,omitempty"`

	// Extension: Requests with this extension will be handled using the specified FastCGI application.
	Extension *string `json:"extension,omitempty"`

	// ScriptProcessor: The absolute path to the FastCGI application.
	ScriptProcessor *string `json:"scriptProcessor,omitempty"`
}

// +kubebuilder:validation:Enum={"Repository","Standard"}
type HostNameSslState_HostType string

const (
	HostNameSslState_HostType_Repository = HostNameSslState_HostType("Repository")
	HostNameSslState_HostType_Standard   = HostNameSslState_HostType("Standard")
)

// Mapping from string to HostNameSslState_HostType
var hostNameSslState_HostType_Values = map[string]HostNameSslState_HostType{
	"repository": HostNameSslState_HostType_Repository,
	"standard":   HostNameSslState_HostType_Standard,
}

// +kubebuilder:validation:Enum={"Disabled","IpBasedEnabled","SniEnabled"}
type HostNameSslState_SslState string

const (
	HostNameSslState_SslState_Disabled       = HostNameSslState_SslState("Disabled")
	HostNameSslState_SslState_IpBasedEnabled = HostNameSslState_SslState("IpBasedEnabled")
	HostNameSslState_SslState_SniEnabled     = HostNameSslState_SslState("SniEnabled")
)

// Mapping from string to HostNameSslState_SslState
var hostNameSslState_SslState_Values = map[string]HostNameSslState_SslState{
	"disabled":       HostNameSslState_SslState_Disabled,
	"ipbasedenabled": HostNameSslState_SslState_IpBasedEnabled,
	"snienabled":     HostNameSslState_SslState_SniEnabled,
}

// IP security restriction on an app.
type IpSecurityRestriction struct {
	// Action: Allow or Deny access for this IP range.
	Action *string `json:"action,omitempty"`

	// Description: IP restriction rule description.
	Description *string `json:"description,omitempty"`

	// Headers: IP restriction rule headers.
	// X-Forwarded-Host (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host#Examples).
	// The matching logic is ..
	// - If the property is null or empty (default), all hosts(or lack of) are allowed.
	// - A value is compared using ordinal-ignore-case (excluding port number).
	// - Subdomain wildcards are permitted but don't match the root domain. For example, *.contoso.com matches the subdomain
	// foo.contoso.com
	// but not the root domain contoso.com or multi-level foo.bar.contoso.com
	// - Unicode host names are allowed but are converted to Punycode for matching.
	// X-Forwarded-For (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For#Examples).
	// The matching logic is ..
	// - If the property is null or empty (default), any forwarded-for chains (or lack of) are allowed.
	// - If any address (excluding port number) in the chain (comma separated) matches the CIDR defined by the property.
	// X-Azure-FDID and X-FD-HealthProbe.
	// The matching logic is exact match.
	Headers map[string][]string `json:"headers,omitempty"`

	// IpAddress: IP address the security restriction is valid for.
	// It can be in form of pure ipv4 address (required SubnetMask property) or
	// CIDR notation such as ipv4/mask (leading bit match). For CIDR,
	// SubnetMask property must not be specified.
	IpAddress *string `json:"ipAddress,omitempty"`

	// Name: IP restriction rule name.
	Name *string `json:"name,omitempty"`

	// Priority: Priority of IP restriction rule.
	Priority *int `json:"priority,omitempty"`

	// SubnetMask: Subnet mask for the range of IP addresses the restriction is valid for.
	SubnetMask *string `json:"subnetMask,omitempty"`

	// SubnetTrafficTag: (internal) Subnet traffic tag
	SubnetTrafficTag *int `json:"subnetTrafficTag,omitempty"`

	// Tag: Defines what this IP filter will be used for. This is to support IP filtering on proxies.
	Tag *IpSecurityRestriction_Tag `json:"tag,omitempty"`

	// VnetSubnetResourceId: Virtual network resource id
	VnetSubnetResourceId *string `json:"vnetSubnetResourceId,omitempty"`

	// VnetTrafficTag: (internal) Vnet traffic tag
	VnetTrafficTag *int `json:"vnetTrafficTag,omitempty"`
}

// Name value pair.
type NameValuePair struct {
	// Name: Pair name.
	Name *string `json:"name,omitempty"`

	// Value: Pair value.
	Value *string `json:"value,omitempty"`
}

// Push settings for the App.
type PushSettings struct {
	// Kind: Kind of resource.
	Kind *string `json:"kind,omitempty"`

	// Properties: PushSettings resource specific properties
	Properties *PushSettings_Properties `json:"properties,omitempty"`
}

// +kubebuilder:validation:Enum={"AllAllowed","Disabled","FtpsOnly"}
type SiteConfig_FtpsState string

const (
	SiteConfig_FtpsState_AllAllowed = SiteConfig_FtpsState("AllAllowed")
	SiteConfig_FtpsState_Disabled   = SiteConfig_FtpsState("Disabled")
	SiteConfig_FtpsState_FtpsOnly   = SiteConfig_FtpsState("FtpsOnly")
)

// Mapping from string to SiteConfig_FtpsState
var siteConfig_FtpsState_Values = map[string]SiteConfig_FtpsState{
	"allallowed": SiteConfig_FtpsState_AllAllowed,
	"disabled":   SiteConfig_FtpsState_Disabled,
	"ftpsonly":   SiteConfig_FtpsState_FtpsOnly,
}

// +kubebuilder:validation:Enum={"LeastRequests","LeastResponseTime","PerSiteRoundRobin","RequestHash","WeightedRoundRobin","WeightedTotalTraffic"}
type SiteConfig_LoadBalancing string

const (
	SiteConfig_LoadBalancing_LeastRequests        = SiteConfig_LoadBalancing("LeastRequests")
	SiteConfig_LoadBalancing_LeastResponseTime    = SiteConfig_LoadBalancing("LeastResponseTime")
	SiteConfig_LoadBalancing_PerSiteRoundRobin    = SiteConfig_LoadBalancing("PerSiteRoundRobin")
	SiteConfig_LoadBalancing_RequestHash          = SiteConfig_LoadBalancing("RequestHash")
	SiteConfig_LoadBalancing_WeightedRoundRobin   = SiteConfig_LoadBalancing("WeightedRoundRobin")
	SiteConfig_LoadBalancing_WeightedTotalTraffic = SiteConfig_LoadBalancing("WeightedTotalTraffic")
)

// Mapping from string to SiteConfig_LoadBalancing
var siteConfig_LoadBalancing_Values = map[string]SiteConfig_LoadBalancing{
	"leastrequests":        SiteConfig_LoadBalancing_LeastRequests,
	"leastresponsetime":    SiteConfig_LoadBalancing_LeastResponseTime,
	"persiteroundrobin":    SiteConfig_LoadBalancing_PerSiteRoundRobin,
	"requesthash":          SiteConfig_LoadBalancing_RequestHash,
	"weightedroundrobin":   SiteConfig_LoadBalancing_WeightedRoundRobin,
	"weightedtotaltraffic": SiteConfig_LoadBalancing_WeightedTotalTraffic,
}

// +kubebuilder:validation:Enum={"Classic","Integrated"}
type SiteConfig_ManagedPipelineMode string

const (
	SiteConfig_ManagedPipelineMode_Classic    = SiteConfig_ManagedPipelineMode("Classic")
	SiteConfig_ManagedPipelineMode_Integrated = SiteConfig_ManagedPipelineMode("Integrated")
)

// Mapping from string to SiteConfig_ManagedPipelineMode
var siteConfig_ManagedPipelineMode_Values = map[string]SiteConfig_ManagedPipelineMode{
	"classic":    SiteConfig_ManagedPipelineMode_Classic,
	"integrated": SiteConfig_ManagedPipelineMode_Integrated,
}

// +kubebuilder:validation:Enum={"1.0","1.1","1.2"}
type SiteConfig_MinTlsVersion string

const (
	SiteConfig_MinTlsVersion_10 = SiteConfig_MinTlsVersion("1.0")
	SiteConfig_MinTlsVersion_11 = SiteConfig_MinTlsVersion("1.1")
	SiteConfig_MinTlsVersion_12 = SiteConfig_MinTlsVersion("1.2")
)

// Mapping from string to SiteConfig_MinTlsVersion
var siteConfig_MinTlsVersion_Values = map[string]SiteConfig_MinTlsVersion{
	"1.0": SiteConfig_MinTlsVersion_10,
	"1.1": SiteConfig_MinTlsVersion_11,
	"1.2": SiteConfig_MinTlsVersion_12,
}

// +kubebuilder:validation:Enum={"1.0","1.1","1.2"}
type SiteConfig_ScmMinTlsVersion string

const (
	SiteConfig_ScmMinTlsVersion_10 = SiteConfig_ScmMinTlsVersion("1.0")
	SiteConfig_ScmMinTlsVersion_11 = SiteConfig_ScmMinTlsVersion("1.1")
	SiteConfig_ScmMinTlsVersion_12 = SiteConfig_ScmMinTlsVersion("1.2")
)

// Mapping from string to SiteConfig_ScmMinTlsVersion
var siteConfig_ScmMinTlsVersion_Values = map[string]SiteConfig_ScmMinTlsVersion{
	"1.0": SiteConfig_ScmMinTlsVersion_10,
	"1.1": SiteConfig_ScmMinTlsVersion_11,
	"1.2": SiteConfig_ScmMinTlsVersion_12,
}

// +kubebuilder:validation:Enum={"BitbucketGit","BitbucketHg","CodePlexGit","CodePlexHg","Dropbox","ExternalGit","ExternalHg","GitHub","LocalGit","None","OneDrive","Tfs","VSO","VSTSRM"}
type SiteConfig_ScmType string

const (
	SiteConfig_ScmType_BitbucketGit = SiteConfig_ScmType("BitbucketGit")
	SiteConfig_ScmType_BitbucketHg  = SiteConfig_ScmType("BitbucketHg")
	SiteConfig_ScmType_CodePlexGit  = SiteConfig_ScmType("CodePlexGit")
	SiteConfig_ScmType_CodePlexHg   = SiteConfig_ScmType("CodePlexHg")
	SiteConfig_ScmType_Dropbox      = SiteConfig_ScmType("Dropbox")
	SiteConfig_ScmType_ExternalGit  = SiteConfig_ScmType("ExternalGit")
	SiteConfig_ScmType_ExternalHg   = SiteConfig_ScmType("ExternalHg")
	SiteConfig_ScmType_GitHub       = SiteConfig_ScmType("GitHub")
	SiteConfig_ScmType_LocalGit     = SiteConfig_ScmType("LocalGit")
	SiteConfig_ScmType_None         = SiteConfig_ScmType("None")
	SiteConfig_ScmType_OneDrive     = SiteConfig_ScmType("OneDrive")
	SiteConfig_ScmType_Tfs          = SiteConfig_ScmType("Tfs")
	SiteConfig_ScmType_VSO          = SiteConfig_ScmType("VSO")
	SiteConfig_ScmType_VSTSRM       = SiteConfig_ScmType("VSTSRM")
)

// Mapping from string to SiteConfig_ScmType
var siteConfig_ScmType_Values = map[string]SiteConfig_ScmType{
	"bitbucketgit": SiteConfig_ScmType_BitbucketGit,
	"bitbuckethg":  SiteConfig_ScmType_BitbucketHg,
	"codeplexgit":  SiteConfig_ScmType_CodePlexGit,
	"codeplexhg":   SiteConfig_ScmType_CodePlexHg,
	"dropbox":      SiteConfig_ScmType_Dropbox,
	"externalgit":  SiteConfig_ScmType_ExternalGit,
	"externalhg":   SiteConfig_ScmType_ExternalHg,
	"github":       SiteConfig_ScmType_GitHub,
	"localgit":     SiteConfig_ScmType_LocalGit,
	"none":         SiteConfig_ScmType_None,
	"onedrive":     SiteConfig_ScmType_OneDrive,
	"tfs":          SiteConfig_ScmType_Tfs,
	"vso":          SiteConfig_ScmType_VSO,
	"vstsrm":       SiteConfig_ScmType_VSTSRM,
}

// Metric limits set on an app.
type SiteLimits struct {
	// MaxDiskSizeInMb: Maximum allowed disk size usage in MB.
	MaxDiskSizeInMb *int `json:"maxDiskSizeInMb,omitempty"`

	// MaxMemoryInMb: Maximum allowed memory usage in MB.
	MaxMemoryInMb *int `json:"maxMemoryInMb,omitempty"`

	// MaxPercentageCpu: Maximum allowed CPU usage percentage.
	MaxPercentageCpu *float64 `json:"maxPercentageCpu,omitempty"`
}

// Virtual application in an app.
type VirtualApplication struct {
	// PhysicalPath: Physical path.
	PhysicalPath *string `json:"physicalPath,omitempty"`

	// PreloadEnabled: <code>true</code> if preloading is enabled; otherwise, <code>false</code>.
	PreloadEnabled *bool `json:"preloadEnabled,omitempty"`

	// VirtualDirectories: Virtual directories for virtual application.
	VirtualDirectories []VirtualDirectory `json:"virtualDirectories,omitempty"`

	// VirtualPath: Virtual path.
	VirtualPath *string `json:"virtualPath,omitempty"`
}

// Actions which to take by the auto-heal module when a rule is triggered.
type AutoHealActions struct {
	// ActionType: Predefined action to be taken.
	ActionType *AutoHealActions_ActionType `json:"actionType,omitempty"`

	// CustomAction: Custom action to be taken.
	CustomAction *AutoHealCustomAction `json:"customAction,omitempty"`

	// MinProcessExecutionTime: Minimum time the process must execute
	// before taking the action
	MinProcessExecutionTime *string `json:"minProcessExecutionTime,omitempty"`
}

// Triggers for auto-heal.
type AutoHealTriggers struct {
	// PrivateBytesInKB: A rule based on private bytes.
	PrivateBytesInKB *int `json:"privateBytesInKB,omitempty"`

	// Requests: A rule based on total requests.
	Requests *RequestsBasedTrigger `json:"requests,omitempty"`

	// SlowRequests: A rule based on request execution time.
	SlowRequests *SlowRequestsBasedTrigger `json:"slowRequests,omitempty"`

	// SlowRequestsWithPath: A rule based on multiple Slow Requests Rule with path
	SlowRequestsWithPath []SlowRequestsBasedTrigger `json:"slowRequestsWithPath,omitempty"`

	// StatusCodes: A rule based on status codes.
	StatusCodes []StatusCodesBasedTrigger `json:"statusCodes,omitempty"`

	// StatusCodesRange: A rule based on status codes ranges.
	StatusCodesRange []StatusCodesRangeBasedTrigger `json:"statusCodesRange,omitempty"`
}

// +kubebuilder:validation:Enum={"AzureBlob","AzureFiles"}
type AzureStorageInfoValue_Type string

const (
	AzureStorageInfoValue_Type_AzureBlob  = AzureStorageInfoValue_Type("AzureBlob")
	AzureStorageInfoValue_Type_AzureFiles = AzureStorageInfoValue_Type("AzureFiles")
)

// Mapping from string to AzureStorageInfoValue_Type
var azureStorageInfoValue_Type_Values = map[string]AzureStorageInfoValue_Type{
	"azureblob":  AzureStorageInfoValue_Type_AzureBlob,
	"azurefiles": AzureStorageInfoValue_Type_AzureFiles,
}

// +kubebuilder:validation:Enum={"ApiHub","Custom","DocDb","EventHub","MySql","NotificationHub","PostgreSQL","RedisCache","SQLAzure","SQLServer","ServiceBus"}
type ConnStringInfo_Type string

const (
	ConnStringInfo_Type_ApiHub          = ConnStringInfo_Type("ApiHub")
	ConnStringInfo_Type_Custom          = ConnStringInfo_Type("Custom")
	ConnStringInfo_Type_DocDb           = ConnStringInfo_Type("DocDb")
	ConnStringInfo_Type_EventHub        = ConnStringInfo_Type("EventHub")
	ConnStringInfo_Type_MySql           = ConnStringInfo_Type("MySql")
	ConnStringInfo_Type_NotificationHub = ConnStringInfo_Type("NotificationHub")
	ConnStringInfo_Type_PostgreSQL      = ConnStringInfo_Type("PostgreSQL")
	ConnStringInfo_Type_RedisCache      = ConnStringInfo_Type("RedisCache")
	ConnStringInfo_Type_SQLAzure        = ConnStringInfo_Type("SQLAzure")
	ConnStringInfo_Type_SQLServer       = ConnStringInfo_Type("SQLServer")
	ConnStringInfo_Type_ServiceBus      = ConnStringInfo_Type("ServiceBus")
)

// Mapping from string to ConnStringInfo_Type
var connStringInfo_Type_Values = map[string]ConnStringInfo_Type{
	"apihub":          ConnStringInfo_Type_ApiHub,
	"custom":          ConnStringInfo_Type_Custom,
	"docdb":           ConnStringInfo_Type_DocDb,
	"eventhub":        ConnStringInfo_Type_EventHub,
	"mysql":           ConnStringInfo_Type_MySql,
	"notificationhub": ConnStringInfo_Type_NotificationHub,
	"postgresql":      ConnStringInfo_Type_PostgreSQL,
	"rediscache":      ConnStringInfo_Type_RedisCache,
	"sqlazure":        ConnStringInfo_Type_SQLAzure,
	"sqlserver":       ConnStringInfo_Type_SQLServer,
	"servicebus":      ConnStringInfo_Type_ServiceBus,
}

// +kubebuilder:validation:Enum={"Default","ServiceTag","XffProxy"}
type IpSecurityRestriction_Tag string

const (
	IpSecurityRestriction_Tag_Default    = IpSecurityRestriction_Tag("Default")
	IpSecurityRestriction_Tag_ServiceTag = IpSecurityRestriction_Tag("ServiceTag")
	IpSecurityRestriction_Tag_XffProxy   = IpSecurityRestriction_Tag("XffProxy")
)

// Mapping from string to IpSecurityRestriction_Tag
var ipSecurityRestriction_Tag_Values = map[string]IpSecurityRestriction_Tag{
	"default":    IpSecurityRestriction_Tag_Default,
	"servicetag": IpSecurityRestriction_Tag_ServiceTag,
	"xffproxy":   IpSecurityRestriction_Tag_XffProxy,
}

type PushSettings_Properties struct {
	// DynamicTagsJson: Gets or sets a JSON string containing a list of dynamic tags that will be evaluated from user claims in
	// the push registration endpoint.
	DynamicTagsJson *string `json:"dynamicTagsJson,omitempty"`

	// IsPushEnabled: Gets or sets a flag indicating whether the Push endpoint is enabled.
	IsPushEnabled *bool `json:"isPushEnabled,omitempty"`

	// TagWhitelistJson: Gets or sets a JSON string containing a list of tags that are in the allowed list for use by the push
	// registration endpoint.
	TagWhitelistJson *string `json:"tagWhitelistJson,omitempty"`

	// TagsRequiringAuth: Gets or sets a JSON string containing a list of tags that require user authentication to be used in
	// the push registration endpoint.
	// Tags can consist of alphanumeric characters and the following:
	// '_', '@', '#', '.', ':', '-'.
	// Validation should be performed at the PushRequestHandler.
	TagsRequiringAuth *string `json:"tagsRequiringAuth,omitempty"`
}

// Routing rules for ramp up testing. This rule allows to redirect static traffic % to a slot or to gradually change
// routing % based on performance.
type RampUpRule struct {
	// ActionHostName: Hostname of a slot to which the traffic will be redirected if decided to. E.g.
	// myapp-stage.azurewebsites.net.
	ActionHostName *string `json:"actionHostName,omitempty"`

	// ChangeDecisionCallbackUrl: Custom decision algorithm can be provided in TiPCallback site extension which URL can be
	// specified.
	ChangeDecisionCallbackUrl *string `json:"changeDecisionCallbackUrl,omitempty"`

	// ChangeIntervalInMinutes: Specifies interval in minutes to reevaluate ReroutePercentage.
	ChangeIntervalInMinutes *int `json:"changeIntervalInMinutes,omitempty"`

	// ChangeStep: In auto ramp up scenario this is the step to add/remove from <code>ReroutePercentage</code> until it reaches
	// \n<code>MinReroutePercentage</code> or
	// <code>MaxReroutePercentage</code>. Site metrics are checked every N minutes specified in
	// <code>ChangeIntervalInMinutes</code>.\nCustom decision algorithm
	// can be provided in TiPCallback site extension which URL can be specified in <code>ChangeDecisionCallbackUrl</code>.
	ChangeStep *float64 `json:"changeStep,omitempty"`

	// MaxReroutePercentage: Specifies upper boundary below which ReroutePercentage will stay.
	MaxReroutePercentage *float64 `json:"maxReroutePercentage,omitempty"`

	// MinReroutePercentage: Specifies lower boundary above which ReroutePercentage will stay.
	MinReroutePercentage *float64 `json:"minReroutePercentage,omitempty"`

	// Name: Name of the routing rule. The recommended name would be to point to the slot which will receive the traffic in the
	// experiment.
	Name *string `json:"name,omitempty"`

	// ReroutePercentage: Percentage of the traffic which will be redirected to <code>ActionHostName</code>.
	ReroutePercentage *float64 `json:"reroutePercentage,omitempty"`
}

// Directory for virtual application.
type VirtualDirectory struct {
	// PhysicalPath: Physical path.
	PhysicalPath *string `json:"physicalPath,omitempty"`

	// VirtualPath: Path to virtual application.
	VirtualPath *string `json:"virtualPath,omitempty"`
}

// +kubebuilder:validation:Enum={"CustomAction","LogEvent","Recycle"}
type AutoHealActions_ActionType string

const (
	AutoHealActions_ActionType_CustomAction = AutoHealActions_ActionType("CustomAction")
	AutoHealActions_ActionType_LogEvent     = AutoHealActions_ActionType("LogEvent")
	AutoHealActions_ActionType_Recycle      = AutoHealActions_ActionType("Recycle")
)

// Mapping from string to AutoHealActions_ActionType
var autoHealActions_ActionType_Values = map[string]AutoHealActions_ActionType{
	"customaction": AutoHealActions_ActionType_CustomAction,
	"logevent":     AutoHealActions_ActionType_LogEvent,
	"recycle":      AutoHealActions_ActionType_Recycle,
}

// Custom action to be executed
// when an auto heal rule is triggered.
type AutoHealCustomAction struct {
	// Exe: Executable to be run.
	Exe *string `json:"exe,omitempty"`

	// Parameters: Parameters for the executable.
	Parameters *string `json:"parameters,omitempty"`
}

// Trigger based on total requests.
type RequestsBasedTrigger struct {
	// Count: Request Count.
	Count *int `json:"count,omitempty"`

	// TimeInterval: Time interval.
	TimeInterval *string `json:"timeInterval,omitempty"`
}

// Trigger based on request execution time.
type SlowRequestsBasedTrigger struct {
	// Count: Request Count.
	Count *int `json:"count,omitempty"`

	// Path: Request Path.
	Path *string `json:"path,omitempty"`

	// TimeInterval: Time interval.
	TimeInterval *string `json:"timeInterval,omitempty"`

	// TimeTaken: Time taken.
	TimeTaken *string `json:"timeTaken,omitempty"`
}

// Trigger based on status code.
type StatusCodesBasedTrigger struct {
	// Count: Request Count.
	Count *int `json:"count,omitempty"`

	// Path: Request Path
	Path *string `json:"path,omitempty"`

	// Status: HTTP status code.
	Status *int `json:"status,omitempty"`

	// SubStatus: Request Sub Status.
	SubStatus *int `json:"subStatus,omitempty"`

	// TimeInterval: Time interval.
	TimeInterval *string `json:"timeInterval,omitempty"`

	// Win32Status: Win32 error code.
	Win32Status *int `json:"win32Status,omitempty"`
}

// Trigger based on range of status codes.
type StatusCodesRangeBasedTrigger struct {
	// Count: Request Count.
	Count *int    `json:"count,omitempty"`
	Path  *string `json:"path,omitempty"`

	// StatusCodes: HTTP status code.
	StatusCodes *string `json:"statusCodes,omitempty"`

	// TimeInterval: Time interval.
	TimeInterval *string `json:"timeInterval,omitempty"`
}
