// 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 ApplicationGateway_Spec struct {
	// Identity: The identity of the application gateway, if configured.
	Identity *ManagedServiceIdentity `json:"identity,omitempty"`

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

	// Properties: Properties of the application gateway.
	Properties *ApplicationGatewayPropertiesFormat `json:"properties,omitempty"`

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

	// Zones: A list of availability zones denoting where the resource needs to come from.
	Zones []string `json:"zones,omitempty"`
}

var _ genruntime.ARMResourceSpec = &ApplicationGateway_Spec{}

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

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

// GetType returns the ARM Type of the resource. This is always "Microsoft.Network/applicationGateways"
func (gateway *ApplicationGateway_Spec) GetType() string {
	return "Microsoft.Network/applicationGateways"
}

// Properties of the application gateway.
type ApplicationGatewayPropertiesFormat struct {
	// AuthenticationCertificates: Authentication certificates of the application gateway resource. For default limits, see
	// [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	AuthenticationCertificates []ApplicationGatewayAuthenticationCertificate `json:"authenticationCertificates,omitempty"`

	// AutoscaleConfiguration: Autoscale Configuration.
	AutoscaleConfiguration *ApplicationGatewayAutoscaleConfiguration `json:"autoscaleConfiguration,omitempty"`

	// BackendAddressPools: Backend address pool of the application gateway resource. For default limits, see [Application
	// Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	BackendAddressPools []ApplicationGatewayBackendAddressPool `json:"backendAddressPools,omitempty"`

	// BackendHttpSettingsCollection: Backend http settings of the application gateway resource. For default limits, see
	// [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	BackendHttpSettingsCollection []ApplicationGatewayBackendHttpSettings `json:"backendHttpSettingsCollection,omitempty"`

	// BackendSettingsCollection: Backend settings of the application gateway resource. For default limits, see [Application
	// Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	BackendSettingsCollection []ApplicationGatewayBackendSettings `json:"backendSettingsCollection,omitempty"`

	// CustomErrorConfigurations: Custom error configurations of the application gateway resource.
	CustomErrorConfigurations []ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`

	// EnableFips: Whether FIPS is enabled on the application gateway resource.
	EnableFips *bool `json:"enableFips,omitempty"`

	// EnableHttp2: Whether HTTP2 is enabled on the application gateway resource.
	EnableHttp2 *bool `json:"enableHttp2,omitempty"`

	// FirewallPolicy: Reference to the FirewallPolicy resource.
	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`

	// ForceFirewallPolicyAssociation: If true, associates a firewall policy with an application gateway regardless whether the
	// policy differs from the WAF Config.
	ForceFirewallPolicyAssociation *bool `json:"forceFirewallPolicyAssociation,omitempty"`

	// FrontendIPConfigurations: Frontend IP addresses of the application gateway resource. For default limits, see
	// [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	FrontendIPConfigurations []ApplicationGatewayFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`

	// FrontendPorts: Frontend ports of the application gateway resource. For default limits, see [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	FrontendPorts []ApplicationGatewayFrontendPort `json:"frontendPorts,omitempty"`

	// GatewayIPConfigurations: Subnets of the application gateway resource. For default limits, see [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	GatewayIPConfigurations []ApplicationGatewayIPConfiguration_ApplicationGateway_SubResourceEmbedded `json:"gatewayIPConfigurations,omitempty"`

	// GlobalConfiguration: Global Configuration.
	GlobalConfiguration *ApplicationGatewayGlobalConfiguration `json:"globalConfiguration,omitempty"`

	// HttpListeners: Http listeners of the application gateway resource. For default limits, see [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	HttpListeners []ApplicationGatewayHttpListener `json:"httpListeners,omitempty"`

	// Listeners: Listeners of the application gateway resource. For default limits, see [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	Listeners []ApplicationGatewayListener `json:"listeners,omitempty"`

	// LoadDistributionPolicies: Load distribution policies of the application gateway resource.
	LoadDistributionPolicies []ApplicationGatewayLoadDistributionPolicy `json:"loadDistributionPolicies,omitempty"`

	// PrivateLinkConfigurations: PrivateLink configurations on application gateway.
	PrivateLinkConfigurations []ApplicationGatewayPrivateLinkConfiguration `json:"privateLinkConfigurations,omitempty"`

	// Probes: Probes of the application gateway resource.
	Probes []ApplicationGatewayProbe `json:"probes,omitempty"`

	// RedirectConfigurations: Redirect configurations of the application gateway resource. For default limits, see
	// [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	RedirectConfigurations []ApplicationGatewayRedirectConfiguration `json:"redirectConfigurations,omitempty"`

	// RequestRoutingRules: Request routing rules of the application gateway resource.
	RequestRoutingRules []ApplicationGatewayRequestRoutingRule `json:"requestRoutingRules,omitempty"`

	// RewriteRuleSets: Rewrite rules for the application gateway resource.
	RewriteRuleSets []ApplicationGatewayRewriteRuleSet `json:"rewriteRuleSets,omitempty"`

	// RoutingRules: Routing rules of the application gateway resource.
	RoutingRules []ApplicationGatewayRoutingRule `json:"routingRules,omitempty"`

	// Sku: SKU of the application gateway resource.
	Sku *ApplicationGatewaySku `json:"sku,omitempty"`

	// SslCertificates: SSL certificates of the application gateway resource. For default limits, see [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	SslCertificates []ApplicationGatewaySslCertificate `json:"sslCertificates,omitempty"`

	// SslPolicy: SSL policy of the application gateway resource.
	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`

	// SslProfiles: SSL profiles of the application gateway resource. For default limits, see [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	SslProfiles []ApplicationGatewaySslProfile `json:"sslProfiles,omitempty"`

	// TrustedClientCertificates: Trusted client certificates of the application gateway resource. For default limits, see
	// [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	TrustedClientCertificates []ApplicationGatewayTrustedClientCertificate `json:"trustedClientCertificates,omitempty"`

	// TrustedRootCertificates: Trusted Root certificates of the application gateway resource. For default limits, see
	// [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	TrustedRootCertificates []ApplicationGatewayTrustedRootCertificate `json:"trustedRootCertificates,omitempty"`

	// UrlPathMaps: URL path map of the application gateway resource. For default limits, see [Application Gateway
	// limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
	UrlPathMaps []ApplicationGatewayUrlPathMap `json:"urlPathMaps,omitempty"`

	// WebApplicationFirewallConfiguration: Web application firewall configuration.
	WebApplicationFirewallConfiguration *ApplicationGatewayWebApplicationFirewallConfiguration `json:"webApplicationFirewallConfiguration,omitempty"`
}

// Identity for the resource.
type ManagedServiceIdentity struct {
	// Type: The type of identity used for the resource. The type 'SystemAssigned, UserAssigned' includes both an implicitly
	// created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual
	// machine.
	Type                   *ManagedServiceIdentity_Type           `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

// Authentication certificates of an application gateway.
type ApplicationGatewayAuthenticationCertificate struct {
	// Name: Name of the authentication certificate that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway authentication certificate.
	Properties *ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"`
}

// Application Gateway autoscale configuration.
type ApplicationGatewayAutoscaleConfiguration struct {
	// MaxCapacity: Upper bound on number of Application Gateway capacity.
	MaxCapacity *int `json:"maxCapacity,omitempty"`

	// MinCapacity: Lower bound on number of Application Gateway capacity.
	MinCapacity *int `json:"minCapacity,omitempty"`
}

// Backend Address Pool of an application gateway.
type ApplicationGatewayBackendAddressPool struct {
	// Name: Name of the backend address pool that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway backend address pool.
	Properties *ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
}

// Backend address pool settings of an application gateway.
type ApplicationGatewayBackendHttpSettings struct {
	// Name: Name of the backend http settings that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway backend HTTP settings.
	Properties *ApplicationGatewayBackendHttpSettingsPropertiesFormat `json:"properties,omitempty"`
}

// Backend address pool settings of an application gateway.
type ApplicationGatewayBackendSettings struct {
	// Name: Name of the backend settings that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway backend settings.
	Properties *ApplicationGatewayBackendSettingsPropertiesFormat `json:"properties,omitempty"`
}

// Customer error of an application gateway.
type ApplicationGatewayCustomError struct {
	// CustomErrorPageUrl: Error page URL of the application gateway customer error.
	CustomErrorPageUrl *string `json:"customErrorPageUrl,omitempty"`

	// StatusCode: Status code of the application gateway customer error.
	StatusCode *ApplicationGatewayCustomError_StatusCode `json:"statusCode,omitempty"`
}

// Frontend IP configuration of an application gateway.
type ApplicationGatewayFrontendIPConfiguration struct {
	// Name: Name of the frontend IP configuration that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway frontend IP configuration.
	Properties *ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
}

// Frontend port of an application gateway.
type ApplicationGatewayFrontendPort struct {
	// Name: Name of the frontend port that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway frontend port.
	Properties *ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"`
}

// Application Gateway global configuration.
type ApplicationGatewayGlobalConfiguration struct {
	// EnableRequestBuffering: Enable request buffering.
	EnableRequestBuffering *bool `json:"enableRequestBuffering,omitempty"`

	// EnableResponseBuffering: Enable response buffering.
	EnableResponseBuffering *bool `json:"enableResponseBuffering,omitempty"`
}

// Http listener of an application gateway.
type ApplicationGatewayHttpListener struct {
	// Name: Name of the HTTP listener that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway HTTP listener.
	Properties *ApplicationGatewayHttpListenerPropertiesFormat `json:"properties,omitempty"`
}

// IP configuration of an application gateway. Currently 1 public and 1 private IP configuration is allowed.
type ApplicationGatewayIPConfiguration_ApplicationGateway_SubResourceEmbedded struct {
	// Name: Name of the IP configuration that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway IP configuration.
	Properties *ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
}

// Listener of an application gateway.
type ApplicationGatewayListener struct {
	// Name: Name of the listener that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway listener.
	Properties *ApplicationGatewayListenerPropertiesFormat `json:"properties,omitempty"`
}

// Load Distribution Policy of an application gateway.
type ApplicationGatewayLoadDistributionPolicy struct {
	// Name: Name of the load distribution policy that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway load distribution policy.
	Properties *ApplicationGatewayLoadDistributionPolicyPropertiesFormat `json:"properties,omitempty"`
}

// Private Link Configuration on an application gateway.
type ApplicationGatewayPrivateLinkConfiguration struct {
	// Name: Name of the private link configuration that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway private link configuration.
	Properties *ApplicationGatewayPrivateLinkConfigurationProperties `json:"properties,omitempty"`
}

// Probe of the application gateway.
type ApplicationGatewayProbe struct {
	// Name: Name of the probe that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway probe.
	Properties *ApplicationGatewayProbePropertiesFormat `json:"properties,omitempty"`
}

// Redirect configuration of an application gateway.
type ApplicationGatewayRedirectConfiguration struct {
	// Name: Name of the redirect configuration that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway redirect configuration.
	Properties *ApplicationGatewayRedirectConfigurationPropertiesFormat `json:"properties,omitempty"`
}

// Request routing rule of an application gateway.
type ApplicationGatewayRequestRoutingRule struct {
	// Name: Name of the request routing rule that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway request routing rule.
	Properties *ApplicationGatewayRequestRoutingRulePropertiesFormat `json:"properties,omitempty"`
}

// Rewrite rule set of an application gateway.
type ApplicationGatewayRewriteRuleSet struct {
	// Name: Name of the rewrite rule set that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway rewrite rule set.
	Properties *ApplicationGatewayRewriteRuleSetPropertiesFormat `json:"properties,omitempty"`
}

// Routing rule of an application gateway.
type ApplicationGatewayRoutingRule struct {
	// Name: Name of the routing rule that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway routing rule.
	Properties *ApplicationGatewayRoutingRulePropertiesFormat `json:"properties,omitempty"`
}

// SKU of an application gateway.
type ApplicationGatewaySku struct {
	// Capacity: Capacity (instance count) of an application gateway.
	Capacity *int `json:"capacity,omitempty"`

	// Name: Name of an application gateway SKU.
	Name *ApplicationGatewaySku_Name `json:"name,omitempty"`

	// Tier: Tier of an application gateway.
	Tier *ApplicationGatewaySku_Tier `json:"tier,omitempty"`
}

// SSL certificates of an application gateway.
type ApplicationGatewaySslCertificate struct {
	// Name: Name of the SSL certificate that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway SSL certificate.
	Properties *ApplicationGatewaySslCertificatePropertiesFormat `json:"properties,omitempty"`
}

// Application Gateway Ssl policy.
type ApplicationGatewaySslPolicy struct {
	// CipherSuites: Ssl cipher suites to be enabled in the specified order to application gateway.
	CipherSuites []CipherSuitesEnum `json:"cipherSuites,omitempty"`

	// DisabledSslProtocols: Ssl protocols to be disabled on application gateway.
	DisabledSslProtocols []ProtocolsEnum `json:"disabledSslProtocols,omitempty"`

	// MinProtocolVersion: Minimum version of Ssl protocol to be supported on application gateway.
	MinProtocolVersion *ProtocolsEnum `json:"minProtocolVersion,omitempty"`

	// PolicyName: Name of Ssl predefined policy.
	PolicyName *PolicyNameEnum `json:"policyName,omitempty"`

	// PolicyType: Type of Ssl Policy.
	PolicyType *ApplicationGatewaySslPolicy_PolicyType `json:"policyType,omitempty"`
}

// SSL profile of an application gateway.
type ApplicationGatewaySslProfile struct {
	// Name: Name of the SSL profile that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway SSL profile.
	Properties *ApplicationGatewaySslProfilePropertiesFormat `json:"properties,omitempty"`
}

// Trusted client certificates of an application gateway.
type ApplicationGatewayTrustedClientCertificate struct {
	// Name: Name of the trusted client certificate that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway trusted client certificate.
	Properties *ApplicationGatewayTrustedClientCertificatePropertiesFormat `json:"properties,omitempty"`
}

// Trusted Root certificates of an application gateway.
type ApplicationGatewayTrustedRootCertificate struct {
	// Name: Name of the trusted root certificate that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway trusted root certificate.
	Properties *ApplicationGatewayTrustedRootCertificatePropertiesFormat `json:"properties,omitempty"`
}

// UrlPathMaps give a url path to the backend mapping information for PathBasedRouting.
type ApplicationGatewayUrlPathMap struct {
	// Name: Name of the URL path map that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway URL path map.
	Properties *ApplicationGatewayUrlPathMapPropertiesFormat `json:"properties,omitempty"`
}

// Application gateway web application firewall configuration.
type ApplicationGatewayWebApplicationFirewallConfiguration struct {
	// DisabledRuleGroups: The disabled rule groups.
	DisabledRuleGroups []ApplicationGatewayFirewallDisabledRuleGroup `json:"disabledRuleGroups,omitempty"`

	// Enabled: Whether the web application firewall is enabled or not.
	Enabled *bool `json:"enabled,omitempty"`

	// Exclusions: The exclusion list.
	Exclusions []ApplicationGatewayFirewallExclusion `json:"exclusions,omitempty"`

	// FileUploadLimitInMb: Maximum file upload size in Mb for WAF.
	FileUploadLimitInMb *int `json:"fileUploadLimitInMb,omitempty"`

	// FirewallMode: Web application firewall mode.
	FirewallMode *ApplicationGatewayWebApplicationFirewallConfiguration_FirewallMode `json:"firewallMode,omitempty"`

	// MaxRequestBodySize: Maximum request body size for WAF.
	MaxRequestBodySize *int `json:"maxRequestBodySize,omitempty"`

	// MaxRequestBodySizeInKb: Maximum request body size in Kb for WAF.
	MaxRequestBodySizeInKb *int `json:"maxRequestBodySizeInKb,omitempty"`

	// RequestBodyCheck: Whether allow WAF to check request Body.
	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`

	// RuleSetType: The type of the web application firewall rule set. Possible values are: 'OWASP'.
	RuleSetType *string `json:"ruleSetType,omitempty"`

	// RuleSetVersion: The version of the rule set type.
	RuleSetVersion *string `json:"ruleSetVersion,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,
}

// Reference to another ARM resource.
type SubResource struct {
	// Id: Resource ID.
	Id *string `json:"id,omitempty"`
}

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

// Authentication certificates properties of an application gateway.
type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct {
	// Data: Certificate public data.
	Data *string `json:"data,omitempty"`
}

// Properties of Backend Address Pool of an application gateway.
type ApplicationGatewayBackendAddressPoolPropertiesFormat struct {
	// BackendAddresses: Backend addresses.
	BackendAddresses []ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"`
}

// Properties of Backend address pool settings of an application gateway.
type ApplicationGatewayBackendHttpSettingsPropertiesFormat struct {
	// AffinityCookieName: Cookie name to use for the affinity cookie.
	AffinityCookieName *string `json:"affinityCookieName,omitempty"`

	// AuthenticationCertificates: Array of references to application gateway authentication certificates.
	AuthenticationCertificates []SubResource `json:"authenticationCertificates,omitempty"`

	// ConnectionDraining: Connection draining of the backend http settings resource.
	ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"`

	// CookieBasedAffinity: Cookie based affinity.
	CookieBasedAffinity *ApplicationGatewayBackendHttpSettingsPropertiesFormat_CookieBasedAffinity `json:"cookieBasedAffinity,omitempty"`

	// HostName: Host header to be sent to the backend servers.
	HostName *string `json:"hostName,omitempty"`

	// Path: Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is
	// null.
	Path *string `json:"path,omitempty"`

	// PickHostNameFromBackendAddress: Whether to pick host header should be picked from the host name of the backend server.
	// Default value is false.
	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`

	// Port: The destination port on the backend.
	Port *int `json:"port,omitempty"`

	// Probe: Probe resource of an application gateway.
	Probe *SubResource `json:"probe,omitempty"`

	// ProbeEnabled: Whether the probe is enabled. Default value is false.
	ProbeEnabled *bool `json:"probeEnabled,omitempty"`

	// Protocol: The protocol used to communicate with the backend.
	Protocol *ApplicationGatewayProtocol `json:"protocol,omitempty"`

	// RequestTimeout: Request timeout in seconds. Application Gateway will fail the request if response is not received within
	// RequestTimeout. Acceptable values are from 1 second to 86400 seconds.
	RequestTimeout *int `json:"requestTimeout,omitempty"`

	// TrustedRootCertificates: Array of references to application gateway trusted root certificates.
	TrustedRootCertificates []SubResource `json:"trustedRootCertificates,omitempty"`
}

// Properties of Backend address pool settings of an application gateway.
type ApplicationGatewayBackendSettingsPropertiesFormat struct {
	// HostName: Server name indication to be sent to the backend servers for Tls protocol.
	HostName *string `json:"hostName,omitempty"`

	// PickHostNameFromBackendAddress: Whether to pick server name indication from the host name of the backend server for Tls
	// protocol. Default value is false.
	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`

	// Port: The destination port on the backend.
	Port *int `json:"port,omitempty"`

	// Probe: Probe resource of an application gateway.
	Probe *SubResource `json:"probe,omitempty"`

	// Protocol: The protocol used to communicate with the backend.
	Protocol *ApplicationGatewayProtocol `json:"protocol,omitempty"`

	// Timeout: Connection timeout in seconds. Application Gateway will fail the request if response is not received within
	// ConnectionTimeout. Acceptable values are from 1 second to 86400 seconds.
	Timeout *int `json:"timeout,omitempty"`

	// TrustedRootCertificates: Array of references to application gateway trusted root certificates.
	TrustedRootCertificates []SubResource `json:"trustedRootCertificates,omitempty"`
}

// +kubebuilder:validation:Enum={"HttpStatus403","HttpStatus502"}
type ApplicationGatewayCustomError_StatusCode string

const (
	ApplicationGatewayCustomError_StatusCode_HttpStatus403 = ApplicationGatewayCustomError_StatusCode("HttpStatus403")
	ApplicationGatewayCustomError_StatusCode_HttpStatus502 = ApplicationGatewayCustomError_StatusCode("HttpStatus502")
)

// Mapping from string to ApplicationGatewayCustomError_StatusCode
var applicationGatewayCustomError_StatusCode_Values = map[string]ApplicationGatewayCustomError_StatusCode{
	"httpstatus403": ApplicationGatewayCustomError_StatusCode_HttpStatus403,
	"httpstatus502": ApplicationGatewayCustomError_StatusCode_HttpStatus502,
}

// Allows to disable rules within a rule group or an entire rule group.
type ApplicationGatewayFirewallDisabledRuleGroup struct {
	// RuleGroupName: The name of the rule group that will be disabled.
	RuleGroupName *string `json:"ruleGroupName,omitempty"`

	// Rules: The list of rules that will be disabled. If null, all rules of the rule group will be disabled.
	Rules []int `json:"rules,omitempty"`
}

// Allow to exclude some variable satisfy the condition for the WAF check.
type ApplicationGatewayFirewallExclusion struct {
	// MatchVariable: The variable to be excluded.
	MatchVariable *string `json:"matchVariable,omitempty"`

	// Selector: When matchVariable is a collection, operator used to specify which elements in the collection this exclusion
	// applies to.
	Selector *string `json:"selector,omitempty"`

	// SelectorMatchOperator: When matchVariable is a collection, operate on the selector to specify which elements in the
	// collection this exclusion applies to.
	SelectorMatchOperator *string `json:"selectorMatchOperator,omitempty"`
}

// Properties of Frontend IP configuration of an application gateway.
type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct {
	// PrivateIPAddress: PrivateIPAddress of the network interface IP Configuration.
	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`

	// PrivateIPAllocationMethod: The private IP address allocation method.
	PrivateIPAllocationMethod *IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`

	// PrivateLinkConfiguration: Reference to the application gateway private link configuration.
	PrivateLinkConfiguration *SubResource `json:"privateLinkConfiguration,omitempty"`

	// PublicIPAddress: Reference to the PublicIP resource.
	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`

	// Subnet: Reference to the subnet resource.
	Subnet *SubResource `json:"subnet,omitempty"`
}

// Properties of Frontend port of an application gateway.
type ApplicationGatewayFrontendPortPropertiesFormat struct {
	// Port: Frontend port.
	Port *int `json:"port,omitempty"`
}

// Properties of HTTP listener of an application gateway.
type ApplicationGatewayHttpListenerPropertiesFormat struct {
	// CustomErrorConfigurations: Custom error configurations of the HTTP listener.
	CustomErrorConfigurations []ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`

	// FirewallPolicy: Reference to the FirewallPolicy resource.
	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`

	// FrontendIPConfiguration: Frontend IP configuration resource of an application gateway.
	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`

	// FrontendPort: Frontend port resource of an application gateway.
	FrontendPort *SubResource `json:"frontendPort,omitempty"`

	// HostName: Host name of HTTP listener.
	HostName *string `json:"hostName,omitempty"`

	// HostNames: List of Host names for HTTP Listener that allows special wildcard characters as well.
	HostNames []string `json:"hostNames,omitempty"`

	// Protocol: Protocol of the HTTP listener.
	Protocol *ApplicationGatewayProtocol `json:"protocol,omitempty"`

	// RequireServerNameIndication: Applicable only if protocol is https. Enables SNI for multi-hosting.
	RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"`

	// SslCertificate: SSL certificate resource of an application gateway.
	SslCertificate *SubResource `json:"sslCertificate,omitempty"`

	// SslProfile: SSL profile resource of the application gateway.
	SslProfile *SubResource `json:"sslProfile,omitempty"`
}

// Properties of IP configuration of an application gateway.
type ApplicationGatewayIPConfigurationPropertiesFormat struct {
	// Subnet: Reference to the subnet resource. A subnet from where application gateway gets its private address.
	Subnet *SubResource `json:"subnet,omitempty"`
}

// Properties of listener of an application gateway.
type ApplicationGatewayListenerPropertiesFormat struct {
	// FrontendIPConfiguration: Frontend IP configuration resource of an application gateway.
	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`

	// FrontendPort: Frontend port resource of an application gateway.
	FrontendPort *SubResource `json:"frontendPort,omitempty"`

	// Protocol: Protocol of the listener.
	Protocol *ApplicationGatewayProtocol `json:"protocol,omitempty"`

	// SslCertificate: SSL certificate resource of an application gateway.
	SslCertificate *SubResource `json:"sslCertificate,omitempty"`

	// SslProfile: SSL profile resource of the application gateway.
	SslProfile *SubResource `json:"sslProfile,omitempty"`
}

// Properties of Load Distribution Policy of an application gateway.
type ApplicationGatewayLoadDistributionPolicyPropertiesFormat struct {
	// LoadDistributionAlgorithm: Load Distribution Targets resource of an application gateway.
	LoadDistributionAlgorithm *ApplicationGatewayLoadDistributionAlgorithmEnum `json:"loadDistributionAlgorithm,omitempty"`

	// LoadDistributionTargets: Load Distribution Targets resource of an application gateway.
	LoadDistributionTargets []ApplicationGatewayLoadDistributionTarget `json:"loadDistributionTargets,omitempty"`
}

// Properties of private link configuration on an application gateway.
type ApplicationGatewayPrivateLinkConfigurationProperties struct {
	// IpConfigurations: An array of application gateway private link ip configurations.
	IpConfigurations []ApplicationGatewayPrivateLinkIpConfiguration `json:"ipConfigurations,omitempty"`
}

// Properties of probe of an application gateway.
type ApplicationGatewayProbePropertiesFormat struct {
	// Host: Host name to send the probe to.
	Host *string `json:"host,omitempty"`

	// Interval: The probing interval in seconds. This is the time interval between two consecutive probes. Acceptable values
	// are from 1 second to 86400 seconds.
	Interval *int `json:"interval,omitempty"`

	// Match: Criterion for classifying a healthy probe response.
	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`

	// MinServers: Minimum number of servers that are always marked healthy. Default value is 0.
	MinServers *int `json:"minServers,omitempty"`

	// Path: Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
	Path *string `json:"path,omitempty"`

	// PickHostNameFromBackendHttpSettings: Whether the host header should be picked from the backend http settings. Default
	// value is false.
	PickHostNameFromBackendHttpSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`

	// PickHostNameFromBackendSettings: Whether the server name indication should be picked from the backend settings for Tls
	// protocol. Default value is false.
	PickHostNameFromBackendSettings *bool `json:"pickHostNameFromBackendSettings,omitempty"`

	// Port: Custom port which will be used for probing the backend servers. The valid value ranges from 1 to 65535. In case
	// not set, port from http settings will be used. This property is valid for Standard_v2 and WAF_v2 only.
	Port *int `json:"port,omitempty"`

	// Protocol: The protocol used for the probe.
	Protocol *ApplicationGatewayProtocol `json:"protocol,omitempty"`

	// Timeout: The probe timeout in seconds. Probe marked as failed if valid response is not received with this timeout
	// period. Acceptable values are from 1 second to 86400 seconds.
	Timeout *int `json:"timeout,omitempty"`

	// UnhealthyThreshold: The probe retry count. Backend server is marked down after consecutive probe failure count reaches
	// UnhealthyThreshold. Acceptable values are from 1 second to 20.
	UnhealthyThreshold *int `json:"unhealthyThreshold,omitempty"`
}

// Properties of redirect configuration of the application gateway.
type ApplicationGatewayRedirectConfigurationPropertiesFormat struct {
	// IncludePath: Include path in the redirected url.
	IncludePath *bool `json:"includePath,omitempty"`

	// IncludeQueryString: Include query string in the redirected url.
	IncludeQueryString *bool `json:"includeQueryString,omitempty"`

	// PathRules: Path rules specifying redirect configuration.
	PathRules []SubResource `json:"pathRules,omitempty"`

	// RedirectType: HTTP redirection type.
	RedirectType *RedirectTypeEnum `json:"redirectType,omitempty"`

	// RequestRoutingRules: Request routing specifying redirect configuration.
	RequestRoutingRules []SubResource `json:"requestRoutingRules,omitempty"`

	// TargetListener: Reference to a listener to redirect the request to.
	TargetListener *SubResource `json:"targetListener,omitempty"`

	// TargetUrl: Url to redirect the request to.
	TargetUrl *string `json:"targetUrl,omitempty"`

	// UrlPathMaps: Url path maps specifying default redirect configuration.
	UrlPathMaps []SubResource `json:"urlPathMaps,omitempty"`
}

// Properties of request routing rule of the application gateway.
type ApplicationGatewayRequestRoutingRulePropertiesFormat struct {
	// BackendAddressPool: Backend address pool resource of the application gateway.
	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`

	// BackendHttpSettings: Backend http settings resource of the application gateway.
	BackendHttpSettings *SubResource `json:"backendHttpSettings,omitempty"`

	// HttpListener: Http listener resource of the application gateway.
	HttpListener *SubResource `json:"httpListener,omitempty"`

	// LoadDistributionPolicy: Load Distribution Policy resource of the application gateway.
	LoadDistributionPolicy *SubResource `json:"loadDistributionPolicy,omitempty"`

	// Priority: Priority of the request routing rule.
	Priority *int `json:"priority,omitempty"`

	// RedirectConfiguration: Redirect configuration resource of the application gateway.
	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`

	// RewriteRuleSet: Rewrite Rule Set resource in Basic rule of the application gateway.
	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`

	// RuleType: Rule type.
	RuleType *ApplicationGatewayRequestRoutingRulePropertiesFormat_RuleType `json:"ruleType,omitempty"`

	// UrlPathMap: URL path map resource of the application gateway.
	UrlPathMap *SubResource `json:"urlPathMap,omitempty"`
}

// Properties of rewrite rule set of the application gateway.
type ApplicationGatewayRewriteRuleSetPropertiesFormat struct {
	// RewriteRules: Rewrite rules in the rewrite rule set.
	RewriteRules []ApplicationGatewayRewriteRule `json:"rewriteRules,omitempty"`
}

// Properties of routing rule of the application gateway.
type ApplicationGatewayRoutingRulePropertiesFormat struct {
	// BackendAddressPool: Backend address pool resource of the application gateway.
	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`

	// BackendSettings: Backend settings resource of the application gateway.
	BackendSettings *SubResource `json:"backendSettings,omitempty"`

	// Listener: Listener resource of the application gateway.
	Listener *SubResource `json:"listener,omitempty"`

	// Priority: Priority of the routing rule.
	Priority *int `json:"priority,omitempty"`

	// RuleType: Rule type.
	RuleType *ApplicationGatewayRoutingRulePropertiesFormat_RuleType `json:"ruleType,omitempty"`
}

// +kubebuilder:validation:Enum={"Standard_Large","Standard_Medium","Standard_Small","Standard_v2","WAF_Large","WAF_Medium","WAF_v2"}
type ApplicationGatewaySku_Name string

const (
	ApplicationGatewaySku_Name_Standard_Large  = ApplicationGatewaySku_Name("Standard_Large")
	ApplicationGatewaySku_Name_Standard_Medium = ApplicationGatewaySku_Name("Standard_Medium")
	ApplicationGatewaySku_Name_Standard_Small  = ApplicationGatewaySku_Name("Standard_Small")
	ApplicationGatewaySku_Name_Standard_V2     = ApplicationGatewaySku_Name("Standard_v2")
	ApplicationGatewaySku_Name_WAF_Large       = ApplicationGatewaySku_Name("WAF_Large")
	ApplicationGatewaySku_Name_WAF_Medium      = ApplicationGatewaySku_Name("WAF_Medium")
	ApplicationGatewaySku_Name_WAF_V2          = ApplicationGatewaySku_Name("WAF_v2")
)

// Mapping from string to ApplicationGatewaySku_Name
var applicationGatewaySku_Name_Values = map[string]ApplicationGatewaySku_Name{
	"standard_large":  ApplicationGatewaySku_Name_Standard_Large,
	"standard_medium": ApplicationGatewaySku_Name_Standard_Medium,
	"standard_small":  ApplicationGatewaySku_Name_Standard_Small,
	"standard_v2":     ApplicationGatewaySku_Name_Standard_V2,
	"waf_large":       ApplicationGatewaySku_Name_WAF_Large,
	"waf_medium":      ApplicationGatewaySku_Name_WAF_Medium,
	"waf_v2":          ApplicationGatewaySku_Name_WAF_V2,
}

// +kubebuilder:validation:Enum={"Standard","Standard_v2","WAF","WAF_v2"}
type ApplicationGatewaySku_Tier string

const (
	ApplicationGatewaySku_Tier_Standard    = ApplicationGatewaySku_Tier("Standard")
	ApplicationGatewaySku_Tier_Standard_V2 = ApplicationGatewaySku_Tier("Standard_v2")
	ApplicationGatewaySku_Tier_WAF         = ApplicationGatewaySku_Tier("WAF")
	ApplicationGatewaySku_Tier_WAF_V2      = ApplicationGatewaySku_Tier("WAF_v2")
)

// Mapping from string to ApplicationGatewaySku_Tier
var applicationGatewaySku_Tier_Values = map[string]ApplicationGatewaySku_Tier{
	"standard":    ApplicationGatewaySku_Tier_Standard,
	"standard_v2": ApplicationGatewaySku_Tier_Standard_V2,
	"waf":         ApplicationGatewaySku_Tier_WAF,
	"waf_v2":      ApplicationGatewaySku_Tier_WAF_V2,
}

// Properties of SSL certificates of an application gateway.
type ApplicationGatewaySslCertificatePropertiesFormat struct {
	// Data: Base-64 encoded pfx certificate. Only applicable in PUT Request.
	Data *string `json:"data,omitempty"`

	// KeyVaultSecretId: Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
	KeyVaultSecretId *string `json:"keyVaultSecretId,omitempty"`

	// Password: Password for the pfx file specified in data. Only applicable in PUT request.
	Password *string `json:"password,omitempty"`
}

// +kubebuilder:validation:Enum={"Custom","CustomV2","Predefined"}
type ApplicationGatewaySslPolicy_PolicyType string

const (
	ApplicationGatewaySslPolicy_PolicyType_Custom     = ApplicationGatewaySslPolicy_PolicyType("Custom")
	ApplicationGatewaySslPolicy_PolicyType_CustomV2   = ApplicationGatewaySslPolicy_PolicyType("CustomV2")
	ApplicationGatewaySslPolicy_PolicyType_Predefined = ApplicationGatewaySslPolicy_PolicyType("Predefined")
)

// Mapping from string to ApplicationGatewaySslPolicy_PolicyType
var applicationGatewaySslPolicy_PolicyType_Values = map[string]ApplicationGatewaySslPolicy_PolicyType{
	"custom":     ApplicationGatewaySslPolicy_PolicyType_Custom,
	"customv2":   ApplicationGatewaySslPolicy_PolicyType_CustomV2,
	"predefined": ApplicationGatewaySslPolicy_PolicyType_Predefined,
}

// Properties of SSL profile of an application gateway.
type ApplicationGatewaySslProfilePropertiesFormat struct {
	// ClientAuthConfiguration: Client authentication configuration of the application gateway resource.
	ClientAuthConfiguration *ApplicationGatewayClientAuthConfiguration `json:"clientAuthConfiguration,omitempty"`

	// SslPolicy: SSL policy of the application gateway resource.
	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`

	// TrustedClientCertificates: Array of references to application gateway trusted client certificates.
	TrustedClientCertificates []SubResource `json:"trustedClientCertificates,omitempty"`
}

// Trusted client certificates properties of an application gateway.
type ApplicationGatewayTrustedClientCertificatePropertiesFormat struct {
	// Data: Certificate public data.
	Data *string `json:"data,omitempty"`
}

// Trusted Root certificates properties of an application gateway.
type ApplicationGatewayTrustedRootCertificatePropertiesFormat struct {
	// Data: Certificate public data.
	Data *string `json:"data,omitempty"`

	// KeyVaultSecretId: Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
	KeyVaultSecretId *string `json:"keyVaultSecretId,omitempty"`
}

// Properties of UrlPathMap of the application gateway.
type ApplicationGatewayUrlPathMapPropertiesFormat struct {
	// DefaultBackendAddressPool: Default backend address pool resource of URL path map.
	DefaultBackendAddressPool *SubResource `json:"defaultBackendAddressPool,omitempty"`

	// DefaultBackendHttpSettings: Default backend http settings resource of URL path map.
	DefaultBackendHttpSettings *SubResource `json:"defaultBackendHttpSettings,omitempty"`

	// DefaultLoadDistributionPolicy: Default Load Distribution Policy resource of URL path map.
	DefaultLoadDistributionPolicy *SubResource `json:"defaultLoadDistributionPolicy,omitempty"`

	// DefaultRedirectConfiguration: Default redirect configuration resource of URL path map.
	DefaultRedirectConfiguration *SubResource `json:"defaultRedirectConfiguration,omitempty"`

	// DefaultRewriteRuleSet: Default Rewrite rule set resource of URL path map.
	DefaultRewriteRuleSet *SubResource `json:"defaultRewriteRuleSet,omitempty"`

	// PathRules: Path rule of URL path map resource.
	PathRules []ApplicationGatewayPathRule `json:"pathRules,omitempty"`
}

// +kubebuilder:validation:Enum={"Detection","Prevention"}
type ApplicationGatewayWebApplicationFirewallConfiguration_FirewallMode string

const (
	ApplicationGatewayWebApplicationFirewallConfiguration_FirewallMode_Detection  = ApplicationGatewayWebApplicationFirewallConfiguration_FirewallMode("Detection")
	ApplicationGatewayWebApplicationFirewallConfiguration_FirewallMode_Prevention = ApplicationGatewayWebApplicationFirewallConfiguration_FirewallMode("Prevention")
)

// Mapping from string to ApplicationGatewayWebApplicationFirewallConfiguration_FirewallMode
var applicationGatewayWebApplicationFirewallConfiguration_FirewallMode_Values = map[string]ApplicationGatewayWebApplicationFirewallConfiguration_FirewallMode{
	"detection":  ApplicationGatewayWebApplicationFirewallConfiguration_FirewallMode_Detection,
	"prevention": ApplicationGatewayWebApplicationFirewallConfiguration_FirewallMode_Prevention,
}

// Ssl cipher suites enums.
// +kubebuilder:validation:Enum={"TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA","TLS_DHE_DSS_WITH_AES_128_CBC_SHA","TLS_DHE_DSS_WITH_AES_128_CBC_SHA256","TLS_DHE_DSS_WITH_AES_256_CBC_SHA","TLS_DHE_DSS_WITH_AES_256_CBC_SHA256","TLS_DHE_RSA_WITH_AES_128_CBC_SHA","TLS_DHE_RSA_WITH_AES_128_GCM_SHA256","TLS_DHE_RSA_WITH_AES_256_CBC_SHA","TLS_DHE_RSA_WITH_AES_256_GCM_SHA384","TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA","TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256","TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256","TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA","TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384","TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384","TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA","TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256","TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256","TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA","TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384","TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384","TLS_RSA_WITH_3DES_EDE_CBC_SHA","TLS_RSA_WITH_AES_128_CBC_SHA","TLS_RSA_WITH_AES_128_CBC_SHA256","TLS_RSA_WITH_AES_128_GCM_SHA256","TLS_RSA_WITH_AES_256_CBC_SHA","TLS_RSA_WITH_AES_256_CBC_SHA256","TLS_RSA_WITH_AES_256_GCM_SHA384"}
type CipherSuitesEnum string

const (
	CipherSuitesEnum_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA       = CipherSuitesEnum("TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA")
	CipherSuitesEnum_TLS_DHE_DSS_WITH_AES_128_CBC_SHA        = CipherSuitesEnum("TLS_DHE_DSS_WITH_AES_128_CBC_SHA")
	CipherSuitesEnum_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256     = CipherSuitesEnum("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256")
	CipherSuitesEnum_TLS_DHE_DSS_WITH_AES_256_CBC_SHA        = CipherSuitesEnum("TLS_DHE_DSS_WITH_AES_256_CBC_SHA")
	CipherSuitesEnum_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256     = CipherSuitesEnum("TLS_DHE_DSS_WITH_AES_256_CBC_SHA256")
	CipherSuitesEnum_TLS_DHE_RSA_WITH_AES_128_CBC_SHA        = CipherSuitesEnum("TLS_DHE_RSA_WITH_AES_128_CBC_SHA")
	CipherSuitesEnum_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256     = CipherSuitesEnum("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256")
	CipherSuitesEnum_TLS_DHE_RSA_WITH_AES_256_CBC_SHA        = CipherSuitesEnum("TLS_DHE_RSA_WITH_AES_256_CBC_SHA")
	CipherSuitesEnum_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384     = CipherSuitesEnum("TLS_DHE_RSA_WITH_AES_256_GCM_SHA384")
	CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA    = CipherSuitesEnum("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA")
	CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = CipherSuitesEnum("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256")
	CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = CipherSuitesEnum("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256")
	CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA    = CipherSuitesEnum("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA")
	CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = CipherSuitesEnum("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384")
	CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = CipherSuitesEnum("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384")
	CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA      = CipherSuitesEnum("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA")
	CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   = CipherSuitesEnum("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256")
	CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   = CipherSuitesEnum("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256")
	CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA      = CipherSuitesEnum("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA")
	CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384   = CipherSuitesEnum("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384")
	CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384   = CipherSuitesEnum("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384")
	CipherSuitesEnum_TLS_RSA_WITH_3DES_EDE_CBC_SHA           = CipherSuitesEnum("TLS_RSA_WITH_3DES_EDE_CBC_SHA")
	CipherSuitesEnum_TLS_RSA_WITH_AES_128_CBC_SHA            = CipherSuitesEnum("TLS_RSA_WITH_AES_128_CBC_SHA")
	CipherSuitesEnum_TLS_RSA_WITH_AES_128_CBC_SHA256         = CipherSuitesEnum("TLS_RSA_WITH_AES_128_CBC_SHA256")
	CipherSuitesEnum_TLS_RSA_WITH_AES_128_GCM_SHA256         = CipherSuitesEnum("TLS_RSA_WITH_AES_128_GCM_SHA256")
	CipherSuitesEnum_TLS_RSA_WITH_AES_256_CBC_SHA            = CipherSuitesEnum("TLS_RSA_WITH_AES_256_CBC_SHA")
	CipherSuitesEnum_TLS_RSA_WITH_AES_256_CBC_SHA256         = CipherSuitesEnum("TLS_RSA_WITH_AES_256_CBC_SHA256")
	CipherSuitesEnum_TLS_RSA_WITH_AES_256_GCM_SHA384         = CipherSuitesEnum("TLS_RSA_WITH_AES_256_GCM_SHA384")
)

// Mapping from string to CipherSuitesEnum
var cipherSuitesEnum_Values = map[string]CipherSuitesEnum{
	"tls_dhe_dss_with_3des_ede_cbc_sha":       CipherSuitesEnum_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,
	"tls_dhe_dss_with_aes_128_cbc_sha":        CipherSuitesEnum_TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
	"tls_dhe_dss_with_aes_128_cbc_sha256":     CipherSuitesEnum_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,
	"tls_dhe_dss_with_aes_256_cbc_sha":        CipherSuitesEnum_TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
	"tls_dhe_dss_with_aes_256_cbc_sha256":     CipherSuitesEnum_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,
	"tls_dhe_rsa_with_aes_128_cbc_sha":        CipherSuitesEnum_TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
	"tls_dhe_rsa_with_aes_128_gcm_sha256":     CipherSuitesEnum_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
	"tls_dhe_rsa_with_aes_256_cbc_sha":        CipherSuitesEnum_TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
	"tls_dhe_rsa_with_aes_256_gcm_sha384":     CipherSuitesEnum_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
	"tls_ecdhe_ecdsa_with_aes_128_cbc_sha":    CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
	"tls_ecdhe_ecdsa_with_aes_128_cbc_sha256": CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
	"tls_ecdhe_ecdsa_with_aes_128_gcm_sha256": CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
	"tls_ecdhe_ecdsa_with_aes_256_cbc_sha":    CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
	"tls_ecdhe_ecdsa_with_aes_256_cbc_sha384": CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
	"tls_ecdhe_ecdsa_with_aes_256_gcm_sha384": CipherSuitesEnum_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
	"tls_ecdhe_rsa_with_aes_128_cbc_sha":      CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
	"tls_ecdhe_rsa_with_aes_128_cbc_sha256":   CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
	"tls_ecdhe_rsa_with_aes_128_gcm_sha256":   CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
	"tls_ecdhe_rsa_with_aes_256_cbc_sha":      CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
	"tls_ecdhe_rsa_with_aes_256_cbc_sha384":   CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
	"tls_ecdhe_rsa_with_aes_256_gcm_sha384":   CipherSuitesEnum_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
	"tls_rsa_with_3des_ede_cbc_sha":           CipherSuitesEnum_TLS_RSA_WITH_3DES_EDE_CBC_SHA,
	"tls_rsa_with_aes_128_cbc_sha":            CipherSuitesEnum_TLS_RSA_WITH_AES_128_CBC_SHA,
	"tls_rsa_with_aes_128_cbc_sha256":         CipherSuitesEnum_TLS_RSA_WITH_AES_128_CBC_SHA256,
	"tls_rsa_with_aes_128_gcm_sha256":         CipherSuitesEnum_TLS_RSA_WITH_AES_128_GCM_SHA256,
	"tls_rsa_with_aes_256_cbc_sha":            CipherSuitesEnum_TLS_RSA_WITH_AES_256_CBC_SHA,
	"tls_rsa_with_aes_256_cbc_sha256":         CipherSuitesEnum_TLS_RSA_WITH_AES_256_CBC_SHA256,
	"tls_rsa_with_aes_256_gcm_sha384":         CipherSuitesEnum_TLS_RSA_WITH_AES_256_GCM_SHA384,
}

// Ssl predefined policy name enums.
// +kubebuilder:validation:Enum={"AppGwSslPolicy20150501","AppGwSslPolicy20170401","AppGwSslPolicy20170401S","AppGwSslPolicy20220101","AppGwSslPolicy20220101S"}
type PolicyNameEnum string

const (
	PolicyNameEnum_AppGwSslPolicy20150501  = PolicyNameEnum("AppGwSslPolicy20150501")
	PolicyNameEnum_AppGwSslPolicy20170401  = PolicyNameEnum("AppGwSslPolicy20170401")
	PolicyNameEnum_AppGwSslPolicy20170401S = PolicyNameEnum("AppGwSslPolicy20170401S")
	PolicyNameEnum_AppGwSslPolicy20220101  = PolicyNameEnum("AppGwSslPolicy20220101")
	PolicyNameEnum_AppGwSslPolicy20220101S = PolicyNameEnum("AppGwSslPolicy20220101S")
)

// Mapping from string to PolicyNameEnum
var policyNameEnum_Values = map[string]PolicyNameEnum{
	"appgwsslpolicy20150501":  PolicyNameEnum_AppGwSslPolicy20150501,
	"appgwsslpolicy20170401":  PolicyNameEnum_AppGwSslPolicy20170401,
	"appgwsslpolicy20170401s": PolicyNameEnum_AppGwSslPolicy20170401S,
	"appgwsslpolicy20220101":  PolicyNameEnum_AppGwSslPolicy20220101,
	"appgwsslpolicy20220101s": PolicyNameEnum_AppGwSslPolicy20220101S,
}

// Ssl protocol enums.
// +kubebuilder:validation:Enum={"TLSv1_0","TLSv1_1","TLSv1_2","TLSv1_3"}
type ProtocolsEnum string

const (
	ProtocolsEnum_TLSv1_0 = ProtocolsEnum("TLSv1_0")
	ProtocolsEnum_TLSv1_1 = ProtocolsEnum("TLSv1_1")
	ProtocolsEnum_TLSv1_2 = ProtocolsEnum("TLSv1_2")
	ProtocolsEnum_TLSv1_3 = ProtocolsEnum("TLSv1_3")
)

// Mapping from string to ProtocolsEnum
var protocolsEnum_Values = map[string]ProtocolsEnum{
	"tlsv1_0": ProtocolsEnum_TLSv1_0,
	"tlsv1_1": ProtocolsEnum_TLSv1_1,
	"tlsv1_2": ProtocolsEnum_TLSv1_2,
	"tlsv1_3": ProtocolsEnum_TLSv1_3,
}

// Backend address of an application gateway.
type ApplicationGatewayBackendAddress struct {
	// Fqdn: Fully qualified domain name (FQDN).
	Fqdn *string `json:"fqdn,omitempty"`

	// IpAddress: IP address.
	IpAddress *string `json:"ipAddress,omitempty"`
}

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

const (
	ApplicationGatewayBackendHttpSettingsPropertiesFormat_CookieBasedAffinity_Disabled = ApplicationGatewayBackendHttpSettingsPropertiesFormat_CookieBasedAffinity("Disabled")
	ApplicationGatewayBackendHttpSettingsPropertiesFormat_CookieBasedAffinity_Enabled  = ApplicationGatewayBackendHttpSettingsPropertiesFormat_CookieBasedAffinity("Enabled")
)

// Mapping from string to ApplicationGatewayBackendHttpSettingsPropertiesFormat_CookieBasedAffinity
var applicationGatewayBackendHttpSettingsPropertiesFormat_CookieBasedAffinity_Values = map[string]ApplicationGatewayBackendHttpSettingsPropertiesFormat_CookieBasedAffinity{
	"disabled": ApplicationGatewayBackendHttpSettingsPropertiesFormat_CookieBasedAffinity_Disabled,
	"enabled":  ApplicationGatewayBackendHttpSettingsPropertiesFormat_CookieBasedAffinity_Enabled,
}

// Application gateway client authentication configuration.
type ApplicationGatewayClientAuthConfiguration struct {
	// VerifyClientCertIssuerDN: Verify client certificate issuer name on the application gateway.
	VerifyClientCertIssuerDN *bool `json:"verifyClientCertIssuerDN,omitempty"`

	// VerifyClientRevocation: Verify client certificate revocation status.
	VerifyClientRevocation *ApplicationGatewayClientAuthConfiguration_VerifyClientRevocation `json:"verifyClientRevocation,omitempty"`
}

// Connection draining allows open connections to a backend server to be active for a specified time after the backend
// server got removed from the configuration.
type ApplicationGatewayConnectionDraining struct {
	// DrainTimeoutInSec: The number of seconds connection draining is active. Acceptable values are from 1 second to 3600
	// seconds.
	DrainTimeoutInSec *int `json:"drainTimeoutInSec,omitempty"`

	// Enabled: Whether connection draining is enabled or not.
	Enabled *bool `json:"enabled,omitempty"`
}

// Load Distribution Algorithm enums.
// +kubebuilder:validation:Enum={"IpHash","LeastConnections","RoundRobin"}
type ApplicationGatewayLoadDistributionAlgorithmEnum string

const (
	ApplicationGatewayLoadDistributionAlgorithmEnum_IpHash           = ApplicationGatewayLoadDistributionAlgorithmEnum("IpHash")
	ApplicationGatewayLoadDistributionAlgorithmEnum_LeastConnections = ApplicationGatewayLoadDistributionAlgorithmEnum("LeastConnections")
	ApplicationGatewayLoadDistributionAlgorithmEnum_RoundRobin       = ApplicationGatewayLoadDistributionAlgorithmEnum("RoundRobin")
)

// Mapping from string to ApplicationGatewayLoadDistributionAlgorithmEnum
var applicationGatewayLoadDistributionAlgorithmEnum_Values = map[string]ApplicationGatewayLoadDistributionAlgorithmEnum{
	"iphash":           ApplicationGatewayLoadDistributionAlgorithmEnum_IpHash,
	"leastconnections": ApplicationGatewayLoadDistributionAlgorithmEnum_LeastConnections,
	"roundrobin":       ApplicationGatewayLoadDistributionAlgorithmEnum_RoundRobin,
}

// Load Distribution Target of an application gateway.
type ApplicationGatewayLoadDistributionTarget struct {
	// Id: Resource ID.
	Id *string `json:"id,omitempty"`
}

// Path rule of URL path map of an application gateway.
type ApplicationGatewayPathRule struct {
	// Name: Name of the path rule that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the application gateway path rule.
	Properties *ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"`
}

// The application gateway private link ip configuration.
type ApplicationGatewayPrivateLinkIpConfiguration struct {
	// Id: Resource ID.
	Id *string `json:"id,omitempty"`
}

// Application gateway probe health response match.
type ApplicationGatewayProbeHealthResponseMatch struct {
	// Body: Body that must be contained in the health response. Default value is empty.
	Body *string `json:"body,omitempty"`

	// StatusCodes: Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.
	StatusCodes []string `json:"statusCodes,omitempty"`
}

// Application Gateway protocol.
// +kubebuilder:validation:Enum={"Http","Https","Tcp","Tls"}
type ApplicationGatewayProtocol string

const (
	ApplicationGatewayProtocol_Http  = ApplicationGatewayProtocol("Http")
	ApplicationGatewayProtocol_Https = ApplicationGatewayProtocol("Https")
	ApplicationGatewayProtocol_Tcp   = ApplicationGatewayProtocol("Tcp")
	ApplicationGatewayProtocol_Tls   = ApplicationGatewayProtocol("Tls")
)

// Mapping from string to ApplicationGatewayProtocol
var applicationGatewayProtocol_Values = map[string]ApplicationGatewayProtocol{
	"http":  ApplicationGatewayProtocol_Http,
	"https": ApplicationGatewayProtocol_Https,
	"tcp":   ApplicationGatewayProtocol_Tcp,
	"tls":   ApplicationGatewayProtocol_Tls,
}

// +kubebuilder:validation:Enum={"Basic","PathBasedRouting"}
type ApplicationGatewayRequestRoutingRulePropertiesFormat_RuleType string

const (
	ApplicationGatewayRequestRoutingRulePropertiesFormat_RuleType_Basic            = ApplicationGatewayRequestRoutingRulePropertiesFormat_RuleType("Basic")
	ApplicationGatewayRequestRoutingRulePropertiesFormat_RuleType_PathBasedRouting = ApplicationGatewayRequestRoutingRulePropertiesFormat_RuleType("PathBasedRouting")
)

// Mapping from string to ApplicationGatewayRequestRoutingRulePropertiesFormat_RuleType
var applicationGatewayRequestRoutingRulePropertiesFormat_RuleType_Values = map[string]ApplicationGatewayRequestRoutingRulePropertiesFormat_RuleType{
	"basic":            ApplicationGatewayRequestRoutingRulePropertiesFormat_RuleType_Basic,
	"pathbasedrouting": ApplicationGatewayRequestRoutingRulePropertiesFormat_RuleType_PathBasedRouting,
}

// Rewrite rule of an application gateway.
type ApplicationGatewayRewriteRule struct {
	// ActionSet: Set of actions to be done as part of the rewrite Rule.
	ActionSet *ApplicationGatewayRewriteRuleActionSet `json:"actionSet,omitempty"`

	// Conditions: Conditions based on which the action set execution will be evaluated.
	Conditions []ApplicationGatewayRewriteRuleCondition `json:"conditions,omitempty"`

	// Name: Name of the rewrite rule that is unique within an Application Gateway.
	Name *string `json:"name,omitempty"`

	// RuleSequence: Rule Sequence of the rewrite rule that determines the order of execution of a particular rule in a
	// RewriteRuleSet.
	RuleSequence *int `json:"ruleSequence,omitempty"`
}

// +kubebuilder:validation:Enum={"Basic","PathBasedRouting"}
type ApplicationGatewayRoutingRulePropertiesFormat_RuleType string

const (
	ApplicationGatewayRoutingRulePropertiesFormat_RuleType_Basic            = ApplicationGatewayRoutingRulePropertiesFormat_RuleType("Basic")
	ApplicationGatewayRoutingRulePropertiesFormat_RuleType_PathBasedRouting = ApplicationGatewayRoutingRulePropertiesFormat_RuleType("PathBasedRouting")
)

// Mapping from string to ApplicationGatewayRoutingRulePropertiesFormat_RuleType
var applicationGatewayRoutingRulePropertiesFormat_RuleType_Values = map[string]ApplicationGatewayRoutingRulePropertiesFormat_RuleType{
	"basic":            ApplicationGatewayRoutingRulePropertiesFormat_RuleType_Basic,
	"pathbasedrouting": ApplicationGatewayRoutingRulePropertiesFormat_RuleType_PathBasedRouting,
}

// IP address allocation method.
// +kubebuilder:validation:Enum={"Dynamic","Static"}
type IPAllocationMethod string

const (
	IPAllocationMethod_Dynamic = IPAllocationMethod("Dynamic")
	IPAllocationMethod_Static  = IPAllocationMethod("Static")
)

// Mapping from string to IPAllocationMethod
var iPAllocationMethod_Values = map[string]IPAllocationMethod{
	"dynamic": IPAllocationMethod_Dynamic,
	"static":  IPAllocationMethod_Static,
}

// Redirect type enum.
// +kubebuilder:validation:Enum={"Found","Permanent","SeeOther","Temporary"}
type RedirectTypeEnum string

const (
	RedirectTypeEnum_Found     = RedirectTypeEnum("Found")
	RedirectTypeEnum_Permanent = RedirectTypeEnum("Permanent")
	RedirectTypeEnum_SeeOther  = RedirectTypeEnum("SeeOther")
	RedirectTypeEnum_Temporary = RedirectTypeEnum("Temporary")
)

// Mapping from string to RedirectTypeEnum
var redirectTypeEnum_Values = map[string]RedirectTypeEnum{
	"found":     RedirectTypeEnum_Found,
	"permanent": RedirectTypeEnum_Permanent,
	"seeother":  RedirectTypeEnum_SeeOther,
	"temporary": RedirectTypeEnum_Temporary,
}

// +kubebuilder:validation:Enum={"None","OCSP"}
type ApplicationGatewayClientAuthConfiguration_VerifyClientRevocation string

const (
	ApplicationGatewayClientAuthConfiguration_VerifyClientRevocation_None = ApplicationGatewayClientAuthConfiguration_VerifyClientRevocation("None")
	ApplicationGatewayClientAuthConfiguration_VerifyClientRevocation_OCSP = ApplicationGatewayClientAuthConfiguration_VerifyClientRevocation("OCSP")
)

// Mapping from string to ApplicationGatewayClientAuthConfiguration_VerifyClientRevocation
var applicationGatewayClientAuthConfiguration_VerifyClientRevocation_Values = map[string]ApplicationGatewayClientAuthConfiguration_VerifyClientRevocation{
	"none": ApplicationGatewayClientAuthConfiguration_VerifyClientRevocation_None,
	"ocsp": ApplicationGatewayClientAuthConfiguration_VerifyClientRevocation_OCSP,
}

// Properties of path rule of an application gateway.
type ApplicationGatewayPathRulePropertiesFormat struct {
	// BackendAddressPool: Backend address pool resource of URL path map path rule.
	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`

	// BackendHttpSettings: Backend http settings resource of URL path map path rule.
	BackendHttpSettings *SubResource `json:"backendHttpSettings,omitempty"`

	// FirewallPolicy: Reference to the FirewallPolicy resource.
	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`

	// LoadDistributionPolicy: Load Distribution Policy resource of URL path map path rule.
	LoadDistributionPolicy *SubResource `json:"loadDistributionPolicy,omitempty"`

	// Paths: Path rules of URL path map.
	Paths []string `json:"paths,omitempty"`

	// RedirectConfiguration: Redirect configuration resource of URL path map path rule.
	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`

	// RewriteRuleSet: Rewrite rule set resource of URL path map path rule.
	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
}

// Set of actions in the Rewrite Rule in Application Gateway.
type ApplicationGatewayRewriteRuleActionSet struct {
	// RequestHeaderConfigurations: Request Header Actions in the Action Set.
	RequestHeaderConfigurations []ApplicationGatewayHeaderConfiguration `json:"requestHeaderConfigurations,omitempty"`

	// ResponseHeaderConfigurations: Response Header Actions in the Action Set.
	ResponseHeaderConfigurations []ApplicationGatewayHeaderConfiguration `json:"responseHeaderConfigurations,omitempty"`

	// UrlConfiguration: Url Configuration Action in the Action Set.
	UrlConfiguration *ApplicationGatewayUrlConfiguration `json:"urlConfiguration,omitempty"`
}

// Set of conditions in the Rewrite Rule in Application Gateway.
type ApplicationGatewayRewriteRuleCondition struct {
	// IgnoreCase: Setting this parameter to truth value with force the pattern to do a case in-sensitive comparison.
	IgnoreCase *bool `json:"ignoreCase,omitempty"`

	// Negate: Setting this value as truth will force to check the negation of the condition given by the user.
	Negate *bool `json:"negate,omitempty"`

	// Pattern: The pattern, either fixed string or regular expression, that evaluates the truthfulness of the condition.
	Pattern *string `json:"pattern,omitempty"`

	// Variable: The condition parameter of the RewriteRuleCondition.
	Variable *string `json:"variable,omitempty"`
}

// Header configuration of the Actions set in Application Gateway.
type ApplicationGatewayHeaderConfiguration struct {
	// HeaderName: Header name of the header configuration.
	HeaderName *string `json:"headerName,omitempty"`

	// HeaderValue: Header value of the header configuration.
	HeaderValue *string `json:"headerValue,omitempty"`
}

// Url configuration of the Actions set in Application Gateway.
type ApplicationGatewayUrlConfiguration struct {
	// ModifiedPath: Url path which user has provided for url rewrite. Null means no path will be updated. Default value is
	// null.
	ModifiedPath *string `json:"modifiedPath,omitempty"`

	// ModifiedQueryString: Query string which user has provided for url rewrite. Null means no query string will be updated.
	// Default value is null.
	ModifiedQueryString *string `json:"modifiedQueryString,omitempty"`

	// Reroute: If set as true, it will re-evaluate the url path map provided in path based request routing rules using
	// modified path. Default value is false.
	Reroute *bool `json:"reroute,omitempty"`
}
