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

import (
	"encoding/json"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime"
)

type Rule_Spec struct {
	Name string `json:"name,omitempty"`

	// Properties: The JSON object that contains the properties of the Rules to create.
	Properties *RuleProperties `json:"properties,omitempty"`
}

var _ genruntime.ARMResourceSpec = &Rule_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2023-05-01"
func (rule Rule_Spec) GetAPIVersion() string {
	return "2023-05-01"
}

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

// GetType returns the ARM Type of the resource. This is always "Microsoft.Cdn/profiles/ruleSets/rules"
func (rule *Rule_Spec) GetType() string {
	return "Microsoft.Cdn/profiles/ruleSets/rules"
}

// The JSON object that contains the properties of the Rules to create.
type RuleProperties struct {
	// Actions: A list of actions that are executed when all the conditions of a rule are satisfied.
	Actions []DeliveryRuleAction `json:"actions,omitempty"`

	// Conditions: A list of conditions that must be matched for the actions to be executed
	Conditions []DeliveryRuleCondition `json:"conditions,omitempty"`

	// MatchProcessingBehavior: If this rule is a match should the rules engine continue running the remaining rules or stop.
	// If not present, defaults to Continue.
	MatchProcessingBehavior *RuleProperties_MatchProcessingBehavior `json:"matchProcessingBehavior,omitempty"`

	// Order: The order in which the rules are applied for the endpoint. Possible values {0,1,2,3,………}. A rule with a
	// lesser order will be applied before a rule with a greater order. Rule with order 0 is a special rule. It does not
	// require any condition and actions listed in it will always be applied.
	Order *int `json:"order,omitempty"`
}

// An action for the delivery rule.
type DeliveryRuleAction struct {
	// CacheExpiration: Mutually exclusive with all other properties
	CacheExpiration *DeliveryRuleCacheExpirationAction `json:"cacheExpiration,omitempty"`

	// CacheKeyQueryString: Mutually exclusive with all other properties
	CacheKeyQueryString *DeliveryRuleCacheKeyQueryStringAction `json:"cacheKeyQueryString,omitempty"`

	// ModifyRequestHeader: Mutually exclusive with all other properties
	ModifyRequestHeader *DeliveryRuleRequestHeaderAction `json:"modifyRequestHeader,omitempty"`

	// ModifyResponseHeader: Mutually exclusive with all other properties
	ModifyResponseHeader *DeliveryRuleResponseHeaderAction `json:"modifyResponseHeader,omitempty"`

	// OriginGroupOverride: Mutually exclusive with all other properties
	OriginGroupOverride *OriginGroupOverrideAction `json:"originGroupOverride,omitempty"`

	// RouteConfigurationOverride: Mutually exclusive with all other properties
	RouteConfigurationOverride *DeliveryRuleRouteConfigurationOverrideAction `json:"routeConfigurationOverride,omitempty"`

	// UrlRedirect: Mutually exclusive with all other properties
	UrlRedirect *UrlRedirectAction `json:"urlRedirect,omitempty"`

	// UrlRewrite: Mutually exclusive with all other properties
	UrlRewrite *UrlRewriteAction `json:"urlRewrite,omitempty"`

	// UrlSigning: Mutually exclusive with all other properties
	UrlSigning *UrlSigningAction `json:"urlSigning,omitempty"`
}

// MarshalJSON defers JSON marshaling to the first non-nil property, because DeliveryRuleAction represents a discriminated union (JSON OneOf)
func (action DeliveryRuleAction) MarshalJSON() ([]byte, error) {
	if action.CacheExpiration != nil {
		return json.Marshal(action.CacheExpiration)
	}

	if action.CacheKeyQueryString != nil {
		return json.Marshal(action.CacheKeyQueryString)
	}

	if action.ModifyRequestHeader != nil {
		return json.Marshal(action.ModifyRequestHeader)
	}

	if action.ModifyResponseHeader != nil {
		return json.Marshal(action.ModifyResponseHeader)
	}

	if action.OriginGroupOverride != nil {
		return json.Marshal(action.OriginGroupOverride)
	}

	if action.RouteConfigurationOverride != nil {
		return json.Marshal(action.RouteConfigurationOverride)
	}

	if action.UrlRedirect != nil {
		return json.Marshal(action.UrlRedirect)
	}

	if action.UrlRewrite != nil {
		return json.Marshal(action.UrlRewrite)
	}

	if action.UrlSigning != nil {
		return json.Marshal(action.UrlSigning)
	}

	return nil, nil
}

// UnmarshalJSON unmarshals the DeliveryRuleAction
func (action *DeliveryRuleAction) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["name"]
	if discriminator == "CacheExpiration" {
		action.CacheExpiration = &DeliveryRuleCacheExpirationAction{}
		return json.Unmarshal(data, action.CacheExpiration)
	}
	if discriminator == "CacheKeyQueryString" {
		action.CacheKeyQueryString = &DeliveryRuleCacheKeyQueryStringAction{}
		return json.Unmarshal(data, action.CacheKeyQueryString)
	}
	if discriminator == "ModifyRequestHeader" {
		action.ModifyRequestHeader = &DeliveryRuleRequestHeaderAction{}
		return json.Unmarshal(data, action.ModifyRequestHeader)
	}
	if discriminator == "ModifyResponseHeader" {
		action.ModifyResponseHeader = &DeliveryRuleResponseHeaderAction{}
		return json.Unmarshal(data, action.ModifyResponseHeader)
	}
	if discriminator == "OriginGroupOverride" {
		action.OriginGroupOverride = &OriginGroupOverrideAction{}
		return json.Unmarshal(data, action.OriginGroupOverride)
	}
	if discriminator == "RouteConfigurationOverride" {
		action.RouteConfigurationOverride = &DeliveryRuleRouteConfigurationOverrideAction{}
		return json.Unmarshal(data, action.RouteConfigurationOverride)
	}
	if discriminator == "UrlRedirect" {
		action.UrlRedirect = &UrlRedirectAction{}
		return json.Unmarshal(data, action.UrlRedirect)
	}
	if discriminator == "UrlRewrite" {
		action.UrlRewrite = &UrlRewriteAction{}
		return json.Unmarshal(data, action.UrlRewrite)
	}
	if discriminator == "UrlSigning" {
		action.UrlSigning = &UrlSigningAction{}
		return json.Unmarshal(data, action.UrlSigning)
	}

	// No error
	return nil
}

// A condition for the delivery rule.
type DeliveryRuleCondition struct {
	// ClientPort: Mutually exclusive with all other properties
	ClientPort *DeliveryRuleClientPortCondition `json:"clientPort,omitempty"`

	// Cookies: Mutually exclusive with all other properties
	Cookies *DeliveryRuleCookiesCondition `json:"cookies,omitempty"`

	// HostName: Mutually exclusive with all other properties
	HostName *DeliveryRuleHostNameCondition `json:"hostName,omitempty"`

	// HttpVersion: Mutually exclusive with all other properties
	HttpVersion *DeliveryRuleHttpVersionCondition `json:"httpVersion,omitempty"`

	// IsDevice: Mutually exclusive with all other properties
	IsDevice *DeliveryRuleIsDeviceCondition `json:"isDevice,omitempty"`

	// PostArgs: Mutually exclusive with all other properties
	PostArgs *DeliveryRulePostArgsCondition `json:"postArgs,omitempty"`

	// QueryString: Mutually exclusive with all other properties
	QueryString *DeliveryRuleQueryStringCondition `json:"queryString,omitempty"`

	// RemoteAddress: Mutually exclusive with all other properties
	RemoteAddress *DeliveryRuleRemoteAddressCondition `json:"remoteAddress,omitempty"`

	// RequestBody: Mutually exclusive with all other properties
	RequestBody *DeliveryRuleRequestBodyCondition `json:"requestBody,omitempty"`

	// RequestHeader: Mutually exclusive with all other properties
	RequestHeader *DeliveryRuleRequestHeaderCondition `json:"requestHeader,omitempty"`

	// RequestMethod: Mutually exclusive with all other properties
	RequestMethod *DeliveryRuleRequestMethodCondition `json:"requestMethod,omitempty"`

	// RequestScheme: Mutually exclusive with all other properties
	RequestScheme *DeliveryRuleRequestSchemeCondition `json:"requestScheme,omitempty"`

	// RequestUri: Mutually exclusive with all other properties
	RequestUri *DeliveryRuleRequestUriCondition `json:"requestUri,omitempty"`

	// ServerPort: Mutually exclusive with all other properties
	ServerPort *DeliveryRuleServerPortCondition `json:"serverPort,omitempty"`

	// SocketAddr: Mutually exclusive with all other properties
	SocketAddr *DeliveryRuleSocketAddrCondition `json:"socketAddr,omitempty"`

	// SslProtocol: Mutually exclusive with all other properties
	SslProtocol *DeliveryRuleSslProtocolCondition `json:"sslProtocol,omitempty"`

	// UrlFileExtension: Mutually exclusive with all other properties
	UrlFileExtension *DeliveryRuleUrlFileExtensionCondition `json:"urlFileExtension,omitempty"`

	// UrlFileName: Mutually exclusive with all other properties
	UrlFileName *DeliveryRuleUrlFileNameCondition `json:"urlFileName,omitempty"`

	// UrlPath: Mutually exclusive with all other properties
	UrlPath *DeliveryRuleUrlPathCondition `json:"urlPath,omitempty"`
}

// MarshalJSON defers JSON marshaling to the first non-nil property, because DeliveryRuleCondition represents a discriminated union (JSON OneOf)
func (condition DeliveryRuleCondition) MarshalJSON() ([]byte, error) {
	if condition.ClientPort != nil {
		return json.Marshal(condition.ClientPort)
	}

	if condition.Cookies != nil {
		return json.Marshal(condition.Cookies)
	}

	if condition.HostName != nil {
		return json.Marshal(condition.HostName)
	}

	if condition.HttpVersion != nil {
		return json.Marshal(condition.HttpVersion)
	}

	if condition.IsDevice != nil {
		return json.Marshal(condition.IsDevice)
	}

	if condition.PostArgs != nil {
		return json.Marshal(condition.PostArgs)
	}

	if condition.QueryString != nil {
		return json.Marshal(condition.QueryString)
	}

	if condition.RemoteAddress != nil {
		return json.Marshal(condition.RemoteAddress)
	}

	if condition.RequestBody != nil {
		return json.Marshal(condition.RequestBody)
	}

	if condition.RequestHeader != nil {
		return json.Marshal(condition.RequestHeader)
	}

	if condition.RequestMethod != nil {
		return json.Marshal(condition.RequestMethod)
	}

	if condition.RequestScheme != nil {
		return json.Marshal(condition.RequestScheme)
	}

	if condition.RequestUri != nil {
		return json.Marshal(condition.RequestUri)
	}

	if condition.ServerPort != nil {
		return json.Marshal(condition.ServerPort)
	}

	if condition.SocketAddr != nil {
		return json.Marshal(condition.SocketAddr)
	}

	if condition.SslProtocol != nil {
		return json.Marshal(condition.SslProtocol)
	}

	if condition.UrlFileExtension != nil {
		return json.Marshal(condition.UrlFileExtension)
	}

	if condition.UrlFileName != nil {
		return json.Marshal(condition.UrlFileName)
	}

	if condition.UrlPath != nil {
		return json.Marshal(condition.UrlPath)
	}

	return nil, nil
}

// UnmarshalJSON unmarshals the DeliveryRuleCondition
func (condition *DeliveryRuleCondition) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["name"]
	if discriminator == "ClientPort" {
		condition.ClientPort = &DeliveryRuleClientPortCondition{}
		return json.Unmarshal(data, condition.ClientPort)
	}
	if discriminator == "Cookies" {
		condition.Cookies = &DeliveryRuleCookiesCondition{}
		return json.Unmarshal(data, condition.Cookies)
	}
	if discriminator == "HostName" {
		condition.HostName = &DeliveryRuleHostNameCondition{}
		return json.Unmarshal(data, condition.HostName)
	}
	if discriminator == "HttpVersion" {
		condition.HttpVersion = &DeliveryRuleHttpVersionCondition{}
		return json.Unmarshal(data, condition.HttpVersion)
	}
	if discriminator == "IsDevice" {
		condition.IsDevice = &DeliveryRuleIsDeviceCondition{}
		return json.Unmarshal(data, condition.IsDevice)
	}
	if discriminator == "PostArgs" {
		condition.PostArgs = &DeliveryRulePostArgsCondition{}
		return json.Unmarshal(data, condition.PostArgs)
	}
	if discriminator == "QueryString" {
		condition.QueryString = &DeliveryRuleQueryStringCondition{}
		return json.Unmarshal(data, condition.QueryString)
	}
	if discriminator == "RemoteAddress" {
		condition.RemoteAddress = &DeliveryRuleRemoteAddressCondition{}
		return json.Unmarshal(data, condition.RemoteAddress)
	}
	if discriminator == "RequestBody" {
		condition.RequestBody = &DeliveryRuleRequestBodyCondition{}
		return json.Unmarshal(data, condition.RequestBody)
	}
	if discriminator == "RequestHeader" {
		condition.RequestHeader = &DeliveryRuleRequestHeaderCondition{}
		return json.Unmarshal(data, condition.RequestHeader)
	}
	if discriminator == "RequestMethod" {
		condition.RequestMethod = &DeliveryRuleRequestMethodCondition{}
		return json.Unmarshal(data, condition.RequestMethod)
	}
	if discriminator == "RequestScheme" {
		condition.RequestScheme = &DeliveryRuleRequestSchemeCondition{}
		return json.Unmarshal(data, condition.RequestScheme)
	}
	if discriminator == "RequestUri" {
		condition.RequestUri = &DeliveryRuleRequestUriCondition{}
		return json.Unmarshal(data, condition.RequestUri)
	}
	if discriminator == "ServerPort" {
		condition.ServerPort = &DeliveryRuleServerPortCondition{}
		return json.Unmarshal(data, condition.ServerPort)
	}
	if discriminator == "SocketAddr" {
		condition.SocketAddr = &DeliveryRuleSocketAddrCondition{}
		return json.Unmarshal(data, condition.SocketAddr)
	}
	if discriminator == "SslProtocol" {
		condition.SslProtocol = &DeliveryRuleSslProtocolCondition{}
		return json.Unmarshal(data, condition.SslProtocol)
	}
	if discriminator == "UrlFileExtension" {
		condition.UrlFileExtension = &DeliveryRuleUrlFileExtensionCondition{}
		return json.Unmarshal(data, condition.UrlFileExtension)
	}
	if discriminator == "UrlFileName" {
		condition.UrlFileName = &DeliveryRuleUrlFileNameCondition{}
		return json.Unmarshal(data, condition.UrlFileName)
	}
	if discriminator == "UrlPath" {
		condition.UrlPath = &DeliveryRuleUrlPathCondition{}
		return json.Unmarshal(data, condition.UrlPath)
	}

	// No error
	return nil
}

// +kubebuilder:validation:Enum={"Continue","Stop"}
type RuleProperties_MatchProcessingBehavior string

const (
	RuleProperties_MatchProcessingBehavior_Continue = RuleProperties_MatchProcessingBehavior("Continue")
	RuleProperties_MatchProcessingBehavior_Stop     = RuleProperties_MatchProcessingBehavior("Stop")
)

// Mapping from string to RuleProperties_MatchProcessingBehavior
var ruleProperties_MatchProcessingBehavior_Values = map[string]RuleProperties_MatchProcessingBehavior{
	"continue": RuleProperties_MatchProcessingBehavior_Continue,
	"stop":     RuleProperties_MatchProcessingBehavior_Stop,
}

type DeliveryRuleCacheExpirationAction struct {
	// Name: The name of the action for the delivery rule.
	Name DeliveryRuleCacheExpirationAction_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the action.
	Parameters *CacheExpirationActionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleCacheKeyQueryStringAction struct {
	// Name: The name of the action for the delivery rule.
	Name DeliveryRuleCacheKeyQueryStringAction_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the action.
	Parameters *CacheKeyQueryStringActionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleClientPortCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleClientPortCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *ClientPortMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleCookiesCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleCookiesCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *CookiesMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleHostNameCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleHostNameCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *HostNameMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleHttpVersionCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleHttpVersionCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *HttpVersionMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleIsDeviceCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleIsDeviceCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *IsDeviceMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRulePostArgsCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRulePostArgsCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *PostArgsMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleQueryStringCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleQueryStringCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *QueryStringMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleRemoteAddressCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleRemoteAddressCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *RemoteAddressMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleRequestBodyCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleRequestBodyCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *RequestBodyMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleRequestHeaderAction struct {
	// Name: The name of the action for the delivery rule.
	Name DeliveryRuleRequestHeaderAction_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the action.
	Parameters *HeaderActionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleRequestHeaderCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleRequestHeaderCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *RequestHeaderMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleRequestMethodCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleRequestMethodCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *RequestMethodMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleRequestSchemeCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleRequestSchemeCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *RequestSchemeMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleRequestUriCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleRequestUriCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *RequestUriMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleResponseHeaderAction struct {
	// Name: The name of the action for the delivery rule.
	Name DeliveryRuleResponseHeaderAction_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the action.
	Parameters *HeaderActionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleRouteConfigurationOverrideAction struct {
	// Name: The name of the action for the delivery rule.
	Name DeliveryRuleRouteConfigurationOverrideAction_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the action.
	Parameters *RouteConfigurationOverrideActionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleServerPortCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleServerPortCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *ServerPortMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleSocketAddrCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleSocketAddrCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *SocketAddrMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleSslProtocolCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleSslProtocolCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *SslProtocolMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleUrlFileExtensionCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleUrlFileExtensionCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *UrlFileExtensionMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleUrlFileNameCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleUrlFileNameCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *UrlFileNameMatchConditionParameters `json:"parameters,omitempty"`
}

type DeliveryRuleUrlPathCondition struct {
	// Name: The name of the condition for the delivery rule.
	Name DeliveryRuleUrlPathCondition_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the condition.
	Parameters *UrlPathMatchConditionParameters `json:"parameters,omitempty"`
}

type OriginGroupOverrideAction struct {
	// Name: The name of the action for the delivery rule.
	Name OriginGroupOverrideAction_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the action.
	Parameters *OriginGroupOverrideActionParameters `json:"parameters,omitempty"`
}

type UrlRedirectAction struct {
	// Name: The name of the action for the delivery rule.
	Name UrlRedirectAction_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the action.
	Parameters *UrlRedirectActionParameters `json:"parameters,omitempty"`
}

type UrlRewriteAction struct {
	// Name: The name of the action for the delivery rule.
	Name UrlRewriteAction_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the action.
	Parameters *UrlRewriteActionParameters `json:"parameters,omitempty"`
}

type UrlSigningAction struct {
	// Name: The name of the action for the delivery rule.
	Name UrlSigningAction_Name `json:"name,omitempty"`

	// Parameters: Defines the parameters for the action.
	Parameters *UrlSigningActionParameters `json:"parameters,omitempty"`
}

// Defines the parameters for the cache expiration action.
type CacheExpirationActionParameters struct {
	// CacheBehavior: Caching behavior for the requests
	CacheBehavior *CacheExpirationActionParameters_CacheBehavior `json:"cacheBehavior,omitempty"`

	// CacheDuration: The duration for which the content needs to be cached. Allowed format is [d.]hh:mm:ss
	CacheDuration *string `json:"cacheDuration,omitempty"`

	// CacheType: The level at which the content needs to be cached.
	CacheType *CacheExpirationActionParameters_CacheType `json:"cacheType,omitempty"`
	TypeName  *CacheExpirationActionParameters_TypeName  `json:"typeName,omitempty"`
}

// Defines the parameters for the cache-key query string action.
type CacheKeyQueryStringActionParameters struct {
	// QueryParameters: query parameters to include or exclude (comma separated).
	QueryParameters *string `json:"queryParameters,omitempty"`

	// QueryStringBehavior: Caching behavior for the requests
	QueryStringBehavior *CacheKeyQueryStringActionParameters_QueryStringBehavior `json:"queryStringBehavior,omitempty"`
	TypeName            *CacheKeyQueryStringActionParameters_TypeName            `json:"typeName,omitempty"`
}

// Defines the parameters for ClientPort match conditions
type ClientPortMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *ClientPortMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                  `json:"transforms,omitempty"`
	TypeName   *ClientPortMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for Cookies match conditions
type CookiesMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *CookiesMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Selector: Name of Cookies to be matched
	Selector *string `json:"selector,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                               `json:"transforms,omitempty"`
	TypeName   *CookiesMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// +kubebuilder:validation:Enum={"CacheExpiration"}
type DeliveryRuleCacheExpirationAction_Name string

const DeliveryRuleCacheExpirationAction_Name_CacheExpiration = DeliveryRuleCacheExpirationAction_Name("CacheExpiration")

// Mapping from string to DeliveryRuleCacheExpirationAction_Name
var deliveryRuleCacheExpirationAction_Name_Values = map[string]DeliveryRuleCacheExpirationAction_Name{
	"cacheexpiration": DeliveryRuleCacheExpirationAction_Name_CacheExpiration,
}

// +kubebuilder:validation:Enum={"CacheKeyQueryString"}
type DeliveryRuleCacheKeyQueryStringAction_Name string

const DeliveryRuleCacheKeyQueryStringAction_Name_CacheKeyQueryString = DeliveryRuleCacheKeyQueryStringAction_Name("CacheKeyQueryString")

// Mapping from string to DeliveryRuleCacheKeyQueryStringAction_Name
var deliveryRuleCacheKeyQueryStringAction_Name_Values = map[string]DeliveryRuleCacheKeyQueryStringAction_Name{
	"cachekeyquerystring": DeliveryRuleCacheKeyQueryStringAction_Name_CacheKeyQueryString,
}

// +kubebuilder:validation:Enum={"ClientPort"}
type DeliveryRuleClientPortCondition_Name string

const DeliveryRuleClientPortCondition_Name_ClientPort = DeliveryRuleClientPortCondition_Name("ClientPort")

// Mapping from string to DeliveryRuleClientPortCondition_Name
var deliveryRuleClientPortCondition_Name_Values = map[string]DeliveryRuleClientPortCondition_Name{
	"clientport": DeliveryRuleClientPortCondition_Name_ClientPort,
}

// +kubebuilder:validation:Enum={"Cookies"}
type DeliveryRuleCookiesCondition_Name string

const DeliveryRuleCookiesCondition_Name_Cookies = DeliveryRuleCookiesCondition_Name("Cookies")

// Mapping from string to DeliveryRuleCookiesCondition_Name
var deliveryRuleCookiesCondition_Name_Values = map[string]DeliveryRuleCookiesCondition_Name{
	"cookies": DeliveryRuleCookiesCondition_Name_Cookies,
}

// +kubebuilder:validation:Enum={"HostName"}
type DeliveryRuleHostNameCondition_Name string

const DeliveryRuleHostNameCondition_Name_HostName = DeliveryRuleHostNameCondition_Name("HostName")

// Mapping from string to DeliveryRuleHostNameCondition_Name
var deliveryRuleHostNameCondition_Name_Values = map[string]DeliveryRuleHostNameCondition_Name{
	"hostname": DeliveryRuleHostNameCondition_Name_HostName,
}

// +kubebuilder:validation:Enum={"HttpVersion"}
type DeliveryRuleHttpVersionCondition_Name string

const DeliveryRuleHttpVersionCondition_Name_HttpVersion = DeliveryRuleHttpVersionCondition_Name("HttpVersion")

// Mapping from string to DeliveryRuleHttpVersionCondition_Name
var deliveryRuleHttpVersionCondition_Name_Values = map[string]DeliveryRuleHttpVersionCondition_Name{
	"httpversion": DeliveryRuleHttpVersionCondition_Name_HttpVersion,
}

// +kubebuilder:validation:Enum={"IsDevice"}
type DeliveryRuleIsDeviceCondition_Name string

const DeliveryRuleIsDeviceCondition_Name_IsDevice = DeliveryRuleIsDeviceCondition_Name("IsDevice")

// Mapping from string to DeliveryRuleIsDeviceCondition_Name
var deliveryRuleIsDeviceCondition_Name_Values = map[string]DeliveryRuleIsDeviceCondition_Name{
	"isdevice": DeliveryRuleIsDeviceCondition_Name_IsDevice,
}

// +kubebuilder:validation:Enum={"PostArgs"}
type DeliveryRulePostArgsCondition_Name string

const DeliveryRulePostArgsCondition_Name_PostArgs = DeliveryRulePostArgsCondition_Name("PostArgs")

// Mapping from string to DeliveryRulePostArgsCondition_Name
var deliveryRulePostArgsCondition_Name_Values = map[string]DeliveryRulePostArgsCondition_Name{
	"postargs": DeliveryRulePostArgsCondition_Name_PostArgs,
}

// +kubebuilder:validation:Enum={"QueryString"}
type DeliveryRuleQueryStringCondition_Name string

const DeliveryRuleQueryStringCondition_Name_QueryString = DeliveryRuleQueryStringCondition_Name("QueryString")

// Mapping from string to DeliveryRuleQueryStringCondition_Name
var deliveryRuleQueryStringCondition_Name_Values = map[string]DeliveryRuleQueryStringCondition_Name{
	"querystring": DeliveryRuleQueryStringCondition_Name_QueryString,
}

// +kubebuilder:validation:Enum={"RemoteAddress"}
type DeliveryRuleRemoteAddressCondition_Name string

const DeliveryRuleRemoteAddressCondition_Name_RemoteAddress = DeliveryRuleRemoteAddressCondition_Name("RemoteAddress")

// Mapping from string to DeliveryRuleRemoteAddressCondition_Name
var deliveryRuleRemoteAddressCondition_Name_Values = map[string]DeliveryRuleRemoteAddressCondition_Name{
	"remoteaddress": DeliveryRuleRemoteAddressCondition_Name_RemoteAddress,
}

// +kubebuilder:validation:Enum={"RequestBody"}
type DeliveryRuleRequestBodyCondition_Name string

const DeliveryRuleRequestBodyCondition_Name_RequestBody = DeliveryRuleRequestBodyCondition_Name("RequestBody")

// Mapping from string to DeliveryRuleRequestBodyCondition_Name
var deliveryRuleRequestBodyCondition_Name_Values = map[string]DeliveryRuleRequestBodyCondition_Name{
	"requestbody": DeliveryRuleRequestBodyCondition_Name_RequestBody,
}

// +kubebuilder:validation:Enum={"ModifyRequestHeader"}
type DeliveryRuleRequestHeaderAction_Name string

const DeliveryRuleRequestHeaderAction_Name_ModifyRequestHeader = DeliveryRuleRequestHeaderAction_Name("ModifyRequestHeader")

// Mapping from string to DeliveryRuleRequestHeaderAction_Name
var deliveryRuleRequestHeaderAction_Name_Values = map[string]DeliveryRuleRequestHeaderAction_Name{
	"modifyrequestheader": DeliveryRuleRequestHeaderAction_Name_ModifyRequestHeader,
}

// +kubebuilder:validation:Enum={"RequestHeader"}
type DeliveryRuleRequestHeaderCondition_Name string

const DeliveryRuleRequestHeaderCondition_Name_RequestHeader = DeliveryRuleRequestHeaderCondition_Name("RequestHeader")

// Mapping from string to DeliveryRuleRequestHeaderCondition_Name
var deliveryRuleRequestHeaderCondition_Name_Values = map[string]DeliveryRuleRequestHeaderCondition_Name{
	"requestheader": DeliveryRuleRequestHeaderCondition_Name_RequestHeader,
}

// +kubebuilder:validation:Enum={"RequestMethod"}
type DeliveryRuleRequestMethodCondition_Name string

const DeliveryRuleRequestMethodCondition_Name_RequestMethod = DeliveryRuleRequestMethodCondition_Name("RequestMethod")

// Mapping from string to DeliveryRuleRequestMethodCondition_Name
var deliveryRuleRequestMethodCondition_Name_Values = map[string]DeliveryRuleRequestMethodCondition_Name{
	"requestmethod": DeliveryRuleRequestMethodCondition_Name_RequestMethod,
}

// +kubebuilder:validation:Enum={"RequestScheme"}
type DeliveryRuleRequestSchemeCondition_Name string

const DeliveryRuleRequestSchemeCondition_Name_RequestScheme = DeliveryRuleRequestSchemeCondition_Name("RequestScheme")

// Mapping from string to DeliveryRuleRequestSchemeCondition_Name
var deliveryRuleRequestSchemeCondition_Name_Values = map[string]DeliveryRuleRequestSchemeCondition_Name{
	"requestscheme": DeliveryRuleRequestSchemeCondition_Name_RequestScheme,
}

// +kubebuilder:validation:Enum={"RequestUri"}
type DeliveryRuleRequestUriCondition_Name string

const DeliveryRuleRequestUriCondition_Name_RequestUri = DeliveryRuleRequestUriCondition_Name("RequestUri")

// Mapping from string to DeliveryRuleRequestUriCondition_Name
var deliveryRuleRequestUriCondition_Name_Values = map[string]DeliveryRuleRequestUriCondition_Name{
	"requesturi": DeliveryRuleRequestUriCondition_Name_RequestUri,
}

// +kubebuilder:validation:Enum={"ModifyResponseHeader"}
type DeliveryRuleResponseHeaderAction_Name string

const DeliveryRuleResponseHeaderAction_Name_ModifyResponseHeader = DeliveryRuleResponseHeaderAction_Name("ModifyResponseHeader")

// Mapping from string to DeliveryRuleResponseHeaderAction_Name
var deliveryRuleResponseHeaderAction_Name_Values = map[string]DeliveryRuleResponseHeaderAction_Name{
	"modifyresponseheader": DeliveryRuleResponseHeaderAction_Name_ModifyResponseHeader,
}

// +kubebuilder:validation:Enum={"RouteConfigurationOverride"}
type DeliveryRuleRouteConfigurationOverrideAction_Name string

const DeliveryRuleRouteConfigurationOverrideAction_Name_RouteConfigurationOverride = DeliveryRuleRouteConfigurationOverrideAction_Name("RouteConfigurationOverride")

// Mapping from string to DeliveryRuleRouteConfigurationOverrideAction_Name
var deliveryRuleRouteConfigurationOverrideAction_Name_Values = map[string]DeliveryRuleRouteConfigurationOverrideAction_Name{
	"routeconfigurationoverride": DeliveryRuleRouteConfigurationOverrideAction_Name_RouteConfigurationOverride,
}

// +kubebuilder:validation:Enum={"ServerPort"}
type DeliveryRuleServerPortCondition_Name string

const DeliveryRuleServerPortCondition_Name_ServerPort = DeliveryRuleServerPortCondition_Name("ServerPort")

// Mapping from string to DeliveryRuleServerPortCondition_Name
var deliveryRuleServerPortCondition_Name_Values = map[string]DeliveryRuleServerPortCondition_Name{
	"serverport": DeliveryRuleServerPortCondition_Name_ServerPort,
}

// +kubebuilder:validation:Enum={"SocketAddr"}
type DeliveryRuleSocketAddrCondition_Name string

const DeliveryRuleSocketAddrCondition_Name_SocketAddr = DeliveryRuleSocketAddrCondition_Name("SocketAddr")

// Mapping from string to DeliveryRuleSocketAddrCondition_Name
var deliveryRuleSocketAddrCondition_Name_Values = map[string]DeliveryRuleSocketAddrCondition_Name{
	"socketaddr": DeliveryRuleSocketAddrCondition_Name_SocketAddr,
}

// +kubebuilder:validation:Enum={"SslProtocol"}
type DeliveryRuleSslProtocolCondition_Name string

const DeliveryRuleSslProtocolCondition_Name_SslProtocol = DeliveryRuleSslProtocolCondition_Name("SslProtocol")

// Mapping from string to DeliveryRuleSslProtocolCondition_Name
var deliveryRuleSslProtocolCondition_Name_Values = map[string]DeliveryRuleSslProtocolCondition_Name{
	"sslprotocol": DeliveryRuleSslProtocolCondition_Name_SslProtocol,
}

// +kubebuilder:validation:Enum={"UrlFileExtension"}
type DeliveryRuleUrlFileExtensionCondition_Name string

const DeliveryRuleUrlFileExtensionCondition_Name_UrlFileExtension = DeliveryRuleUrlFileExtensionCondition_Name("UrlFileExtension")

// Mapping from string to DeliveryRuleUrlFileExtensionCondition_Name
var deliveryRuleUrlFileExtensionCondition_Name_Values = map[string]DeliveryRuleUrlFileExtensionCondition_Name{
	"urlfileextension": DeliveryRuleUrlFileExtensionCondition_Name_UrlFileExtension,
}

// +kubebuilder:validation:Enum={"UrlFileName"}
type DeliveryRuleUrlFileNameCondition_Name string

const DeliveryRuleUrlFileNameCondition_Name_UrlFileName = DeliveryRuleUrlFileNameCondition_Name("UrlFileName")

// Mapping from string to DeliveryRuleUrlFileNameCondition_Name
var deliveryRuleUrlFileNameCondition_Name_Values = map[string]DeliveryRuleUrlFileNameCondition_Name{
	"urlfilename": DeliveryRuleUrlFileNameCondition_Name_UrlFileName,
}

// +kubebuilder:validation:Enum={"UrlPath"}
type DeliveryRuleUrlPathCondition_Name string

const DeliveryRuleUrlPathCondition_Name_UrlPath = DeliveryRuleUrlPathCondition_Name("UrlPath")

// Mapping from string to DeliveryRuleUrlPathCondition_Name
var deliveryRuleUrlPathCondition_Name_Values = map[string]DeliveryRuleUrlPathCondition_Name{
	"urlpath": DeliveryRuleUrlPathCondition_Name_UrlPath,
}

// Defines the parameters for the request header action.
type HeaderActionParameters struct {
	// HeaderAction: Action to perform
	HeaderAction *HeaderActionParameters_HeaderAction `json:"headerAction,omitempty"`

	// HeaderName: Name of the header to modify
	HeaderName *string                          `json:"headerName,omitempty"`
	TypeName   *HeaderActionParameters_TypeName `json:"typeName,omitempty"`

	// Value: Value for the specified action
	Value *string `json:"value,omitempty"`
}

// Defines the parameters for HostName match conditions
type HostNameMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *HostNameMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                `json:"transforms,omitempty"`
	TypeName   *HostNameMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for HttpVersion match conditions
type HttpVersionMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *HttpVersionMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                   `json:"transforms,omitempty"`
	TypeName   *HttpVersionMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for IsDevice match conditions
type IsDeviceMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []IsDeviceMatchConditionParameters_MatchValues `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *IsDeviceMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                `json:"transforms,omitempty"`
	TypeName   *IsDeviceMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// +kubebuilder:validation:Enum={"OriginGroupOverride"}
type OriginGroupOverrideAction_Name string

const OriginGroupOverrideAction_Name_OriginGroupOverride = OriginGroupOverrideAction_Name("OriginGroupOverride")

// Mapping from string to OriginGroupOverrideAction_Name
var originGroupOverrideAction_Name_Values = map[string]OriginGroupOverrideAction_Name{
	"origingroupoverride": OriginGroupOverrideAction_Name_OriginGroupOverride,
}

// Defines the parameters for the origin group override action.
type OriginGroupOverrideActionParameters struct {
	// OriginGroup: defines the OriginGroup that would override the DefaultOriginGroup.
	OriginGroup *ResourceReference                            `json:"originGroup,omitempty"`
	TypeName    *OriginGroupOverrideActionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for PostArgs match conditions
type PostArgsMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *PostArgsMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Selector: Name of PostArg to be matched
	Selector *string `json:"selector,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                `json:"transforms,omitempty"`
	TypeName   *PostArgsMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for QueryString match conditions
type QueryStringMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *QueryStringMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                   `json:"transforms,omitempty"`
	TypeName   *QueryStringMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for RemoteAddress match conditions
type RemoteAddressMatchConditionParameters struct {
	// MatchValues: Match values to match against. The operator will apply to each value in here with OR semantics. If any of
	// them match the variable with the given operator this match condition is considered a match.
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *RemoteAddressMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                     `json:"transforms,omitempty"`
	TypeName   *RemoteAddressMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for RequestBody match conditions
type RequestBodyMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *RequestBodyMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                   `json:"transforms,omitempty"`
	TypeName   *RequestBodyMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for RequestHeader match conditions
type RequestHeaderMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *RequestHeaderMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Selector: Name of Header to be matched
	Selector *string `json:"selector,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                     `json:"transforms,omitempty"`
	TypeName   *RequestHeaderMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for RequestMethod match conditions
type RequestMethodMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []RequestMethodMatchConditionParameters_MatchValues `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *RequestMethodMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                     `json:"transforms,omitempty"`
	TypeName   *RequestMethodMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for RequestScheme match conditions
type RequestSchemeMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []RequestSchemeMatchConditionParameters_MatchValues `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *RequestSchemeMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                     `json:"transforms,omitempty"`
	TypeName   *RequestSchemeMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for RequestUri match conditions
type RequestUriMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *RequestUriMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                  `json:"transforms,omitempty"`
	TypeName   *RequestUriMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for the route configuration override action.
type RouteConfigurationOverrideActionParameters struct {
	// CacheConfiguration: The caching configuration associated with this rule. To disable caching, do not provide a
	// cacheConfiguration object.
	CacheConfiguration *CacheConfiguration `json:"cacheConfiguration,omitempty"`

	// OriginGroupOverride: A reference to the origin group override configuration. Leave empty to use the default origin group
	// on route.
	OriginGroupOverride *OriginGroupOverride                                 `json:"originGroupOverride,omitempty"`
	TypeName            *RouteConfigurationOverrideActionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for ServerPort match conditions
type ServerPortMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *ServerPortMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                  `json:"transforms,omitempty"`
	TypeName   *ServerPortMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for SocketAddress match conditions
type SocketAddrMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *SocketAddrMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                  `json:"transforms,omitempty"`
	TypeName   *SocketAddrMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for SslProtocol match conditions
type SslProtocolMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []SslProtocol `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *SslProtocolMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                   `json:"transforms,omitempty"`
	TypeName   *SslProtocolMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for UrlFileExtension match conditions
type UrlFileExtensionMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *UrlFileExtensionMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                        `json:"transforms,omitempty"`
	TypeName   *UrlFileExtensionMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for UrlFilename match conditions
type UrlFileNameMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *UrlFileNameMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                                   `json:"transforms,omitempty"`
	TypeName   *UrlFileNameMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// Defines the parameters for UrlPath match conditions
type UrlPathMatchConditionParameters struct {
	// MatchValues: The match value for the condition of the delivery rule
	MatchValues []string `json:"matchValues,omitempty"`

	// NegateCondition: Describes if this is negate condition or not
	NegateCondition *bool `json:"negateCondition,omitempty"`

	// Operator: Describes operator to be matched
	Operator *UrlPathMatchConditionParameters_Operator `json:"operator,omitempty"`

	// Transforms: List of transforms
	Transforms []Transform                               `json:"transforms,omitempty"`
	TypeName   *UrlPathMatchConditionParameters_TypeName `json:"typeName,omitempty"`
}

// +kubebuilder:validation:Enum={"UrlRedirect"}
type UrlRedirectAction_Name string

const UrlRedirectAction_Name_UrlRedirect = UrlRedirectAction_Name("UrlRedirect")

// Mapping from string to UrlRedirectAction_Name
var urlRedirectAction_Name_Values = map[string]UrlRedirectAction_Name{
	"urlredirect": UrlRedirectAction_Name_UrlRedirect,
}

// Defines the parameters for the url redirect action.
type UrlRedirectActionParameters struct {
	// CustomFragment: Fragment to add to the redirect URL. Fragment is the part of the URL that comes after #. Do not include
	// the #.
	CustomFragment *string `json:"customFragment,omitempty"`

	// CustomHostname: Host to redirect. Leave empty to use the incoming host as the destination host.
	CustomHostname *string `json:"customHostname,omitempty"`

	// CustomPath: The full path to redirect. Path cannot be empty and must start with /. Leave empty to use the incoming path
	// as destination path.
	CustomPath *string `json:"customPath,omitempty"`

	// CustomQueryString: The set of query strings to be placed in the redirect URL. Setting this value would replace any
	// existing query string; leave empty to preserve the incoming query string. Query string must be in <key>=<value> format.
	// ? and & will be added automatically so do not include them.
	CustomQueryString *string `json:"customQueryString,omitempty"`

	// DestinationProtocol: Protocol to use for the redirect. The default value is MatchRequest
	DestinationProtocol *UrlRedirectActionParameters_DestinationProtocol `json:"destinationProtocol,omitempty"`

	// RedirectType: The redirect type the rule will use when redirecting traffic.
	RedirectType *UrlRedirectActionParameters_RedirectType `json:"redirectType,omitempty"`
	TypeName     *UrlRedirectActionParameters_TypeName     `json:"typeName,omitempty"`
}

// +kubebuilder:validation:Enum={"UrlRewrite"}
type UrlRewriteAction_Name string

const UrlRewriteAction_Name_UrlRewrite = UrlRewriteAction_Name("UrlRewrite")

// Mapping from string to UrlRewriteAction_Name
var urlRewriteAction_Name_Values = map[string]UrlRewriteAction_Name{
	"urlrewrite": UrlRewriteAction_Name_UrlRewrite,
}

// Defines the parameters for the url rewrite action.
type UrlRewriteActionParameters struct {
	// Destination: Define the relative URL to which the above requests will be rewritten by.
	Destination *string `json:"destination,omitempty"`

	// PreserveUnmatchedPath: Whether to preserve unmatched path. Default value is true.
	PreserveUnmatchedPath *bool `json:"preserveUnmatchedPath,omitempty"`

	// SourcePattern: define a request URI pattern that identifies the type of requests that may be rewritten. If value is
	// blank, all strings are matched.
	SourcePattern *string                              `json:"sourcePattern,omitempty"`
	TypeName      *UrlRewriteActionParameters_TypeName `json:"typeName,omitempty"`
}

// +kubebuilder:validation:Enum={"UrlSigning"}
type UrlSigningAction_Name string

const UrlSigningAction_Name_UrlSigning = UrlSigningAction_Name("UrlSigning")

// Mapping from string to UrlSigningAction_Name
var urlSigningAction_Name_Values = map[string]UrlSigningAction_Name{
	"urlsigning": UrlSigningAction_Name_UrlSigning,
}

// Defines the parameters for the Url Signing action.
type UrlSigningActionParameters struct {
	// Algorithm: Algorithm to use for URL signing
	Algorithm *UrlSigningActionParameters_Algorithm `json:"algorithm,omitempty"`

	// ParameterNameOverride: Defines which query string parameters in the url to be considered for expires, key id etc.
	ParameterNameOverride []UrlSigningParamIdentifier          `json:"parameterNameOverride,omitempty"`
	TypeName              *UrlSigningActionParameters_TypeName `json:"typeName,omitempty"`
}

// Caching settings for a caching-type route. To disable caching, do not provide a cacheConfiguration object.
type CacheConfiguration struct {
	// CacheBehavior: Caching behavior for the requests
	CacheBehavior *CacheConfiguration_CacheBehavior `json:"cacheBehavior,omitempty"`

	// CacheDuration: The duration for which the content needs to be cached. Allowed format is [d.]hh:mm:ss
	CacheDuration *string `json:"cacheDuration,omitempty"`

	// IsCompressionEnabled: Indicates whether content compression is enabled. If compression is enabled, content will be
	// served as compressed if user requests for a compressed version. Content won't be compressed on AzureFrontDoor when
	// requested content is smaller than 1 byte or larger than 1 MB.
	IsCompressionEnabled *CacheConfiguration_IsCompressionEnabled `json:"isCompressionEnabled,omitempty"`

	// QueryParameters: query parameters to include or exclude (comma separated).
	QueryParameters *string `json:"queryParameters,omitempty"`

	// QueryStringCachingBehavior: Defines how Frontdoor caches requests that include query strings. You can ignore any query
	// strings when caching, ignore specific query strings, cache every request with a unique URL, or cache specific query
	// strings.
	QueryStringCachingBehavior *CacheConfiguration_QueryStringCachingBehavior `json:"queryStringCachingBehavior,omitempty"`
}

// +kubebuilder:validation:Enum={"BypassCache","Override","SetIfMissing"}
type CacheExpirationActionParameters_CacheBehavior string

const (
	CacheExpirationActionParameters_CacheBehavior_BypassCache  = CacheExpirationActionParameters_CacheBehavior("BypassCache")
	CacheExpirationActionParameters_CacheBehavior_Override     = CacheExpirationActionParameters_CacheBehavior("Override")
	CacheExpirationActionParameters_CacheBehavior_SetIfMissing = CacheExpirationActionParameters_CacheBehavior("SetIfMissing")
)

// Mapping from string to CacheExpirationActionParameters_CacheBehavior
var cacheExpirationActionParameters_CacheBehavior_Values = map[string]CacheExpirationActionParameters_CacheBehavior{
	"bypasscache":  CacheExpirationActionParameters_CacheBehavior_BypassCache,
	"override":     CacheExpirationActionParameters_CacheBehavior_Override,
	"setifmissing": CacheExpirationActionParameters_CacheBehavior_SetIfMissing,
}

// +kubebuilder:validation:Enum={"All"}
type CacheExpirationActionParameters_CacheType string

const CacheExpirationActionParameters_CacheType_All = CacheExpirationActionParameters_CacheType("All")

// Mapping from string to CacheExpirationActionParameters_CacheType
var cacheExpirationActionParameters_CacheType_Values = map[string]CacheExpirationActionParameters_CacheType{
	"all": CacheExpirationActionParameters_CacheType_All,
}

// +kubebuilder:validation:Enum={"DeliveryRuleCacheExpirationActionParameters"}
type CacheExpirationActionParameters_TypeName string

const CacheExpirationActionParameters_TypeName_DeliveryRuleCacheExpirationActionParameters = CacheExpirationActionParameters_TypeName("DeliveryRuleCacheExpirationActionParameters")

// Mapping from string to CacheExpirationActionParameters_TypeName
var cacheExpirationActionParameters_TypeName_Values = map[string]CacheExpirationActionParameters_TypeName{
	"deliveryrulecacheexpirationactionparameters": CacheExpirationActionParameters_TypeName_DeliveryRuleCacheExpirationActionParameters,
}

// +kubebuilder:validation:Enum={"Exclude","ExcludeAll","Include","IncludeAll"}
type CacheKeyQueryStringActionParameters_QueryStringBehavior string

const (
	CacheKeyQueryStringActionParameters_QueryStringBehavior_Exclude    = CacheKeyQueryStringActionParameters_QueryStringBehavior("Exclude")
	CacheKeyQueryStringActionParameters_QueryStringBehavior_ExcludeAll = CacheKeyQueryStringActionParameters_QueryStringBehavior("ExcludeAll")
	CacheKeyQueryStringActionParameters_QueryStringBehavior_Include    = CacheKeyQueryStringActionParameters_QueryStringBehavior("Include")
	CacheKeyQueryStringActionParameters_QueryStringBehavior_IncludeAll = CacheKeyQueryStringActionParameters_QueryStringBehavior("IncludeAll")
)

// Mapping from string to CacheKeyQueryStringActionParameters_QueryStringBehavior
var cacheKeyQueryStringActionParameters_QueryStringBehavior_Values = map[string]CacheKeyQueryStringActionParameters_QueryStringBehavior{
	"exclude":    CacheKeyQueryStringActionParameters_QueryStringBehavior_Exclude,
	"excludeall": CacheKeyQueryStringActionParameters_QueryStringBehavior_ExcludeAll,
	"include":    CacheKeyQueryStringActionParameters_QueryStringBehavior_Include,
	"includeall": CacheKeyQueryStringActionParameters_QueryStringBehavior_IncludeAll,
}

// +kubebuilder:validation:Enum={"DeliveryRuleCacheKeyQueryStringBehaviorActionParameters"}
type CacheKeyQueryStringActionParameters_TypeName string

const CacheKeyQueryStringActionParameters_TypeName_DeliveryRuleCacheKeyQueryStringBehaviorActionParameters = CacheKeyQueryStringActionParameters_TypeName("DeliveryRuleCacheKeyQueryStringBehaviorActionParameters")

// Mapping from string to CacheKeyQueryStringActionParameters_TypeName
var cacheKeyQueryStringActionParameters_TypeName_Values = map[string]CacheKeyQueryStringActionParameters_TypeName{
	"deliveryrulecachekeyquerystringbehavioractionparameters": CacheKeyQueryStringActionParameters_TypeName_DeliveryRuleCacheKeyQueryStringBehaviorActionParameters,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx"}
type ClientPortMatchConditionParameters_Operator string

const (
	ClientPortMatchConditionParameters_Operator_Any                = ClientPortMatchConditionParameters_Operator("Any")
	ClientPortMatchConditionParameters_Operator_BeginsWith         = ClientPortMatchConditionParameters_Operator("BeginsWith")
	ClientPortMatchConditionParameters_Operator_Contains           = ClientPortMatchConditionParameters_Operator("Contains")
	ClientPortMatchConditionParameters_Operator_EndsWith           = ClientPortMatchConditionParameters_Operator("EndsWith")
	ClientPortMatchConditionParameters_Operator_Equal              = ClientPortMatchConditionParameters_Operator("Equal")
	ClientPortMatchConditionParameters_Operator_GreaterThan        = ClientPortMatchConditionParameters_Operator("GreaterThan")
	ClientPortMatchConditionParameters_Operator_GreaterThanOrEqual = ClientPortMatchConditionParameters_Operator("GreaterThanOrEqual")
	ClientPortMatchConditionParameters_Operator_LessThan           = ClientPortMatchConditionParameters_Operator("LessThan")
	ClientPortMatchConditionParameters_Operator_LessThanOrEqual    = ClientPortMatchConditionParameters_Operator("LessThanOrEqual")
	ClientPortMatchConditionParameters_Operator_RegEx              = ClientPortMatchConditionParameters_Operator("RegEx")
)

// Mapping from string to ClientPortMatchConditionParameters_Operator
var clientPortMatchConditionParameters_Operator_Values = map[string]ClientPortMatchConditionParameters_Operator{
	"any":                ClientPortMatchConditionParameters_Operator_Any,
	"beginswith":         ClientPortMatchConditionParameters_Operator_BeginsWith,
	"contains":           ClientPortMatchConditionParameters_Operator_Contains,
	"endswith":           ClientPortMatchConditionParameters_Operator_EndsWith,
	"equal":              ClientPortMatchConditionParameters_Operator_Equal,
	"greaterthan":        ClientPortMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": ClientPortMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           ClientPortMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    ClientPortMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              ClientPortMatchConditionParameters_Operator_RegEx,
}

// +kubebuilder:validation:Enum={"DeliveryRuleClientPortConditionParameters"}
type ClientPortMatchConditionParameters_TypeName string

const ClientPortMatchConditionParameters_TypeName_DeliveryRuleClientPortConditionParameters = ClientPortMatchConditionParameters_TypeName("DeliveryRuleClientPortConditionParameters")

// Mapping from string to ClientPortMatchConditionParameters_TypeName
var clientPortMatchConditionParameters_TypeName_Values = map[string]ClientPortMatchConditionParameters_TypeName{
	"deliveryruleclientportconditionparameters": ClientPortMatchConditionParameters_TypeName_DeliveryRuleClientPortConditionParameters,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx"}
type CookiesMatchConditionParameters_Operator string

const (
	CookiesMatchConditionParameters_Operator_Any                = CookiesMatchConditionParameters_Operator("Any")
	CookiesMatchConditionParameters_Operator_BeginsWith         = CookiesMatchConditionParameters_Operator("BeginsWith")
	CookiesMatchConditionParameters_Operator_Contains           = CookiesMatchConditionParameters_Operator("Contains")
	CookiesMatchConditionParameters_Operator_EndsWith           = CookiesMatchConditionParameters_Operator("EndsWith")
	CookiesMatchConditionParameters_Operator_Equal              = CookiesMatchConditionParameters_Operator("Equal")
	CookiesMatchConditionParameters_Operator_GreaterThan        = CookiesMatchConditionParameters_Operator("GreaterThan")
	CookiesMatchConditionParameters_Operator_GreaterThanOrEqual = CookiesMatchConditionParameters_Operator("GreaterThanOrEqual")
	CookiesMatchConditionParameters_Operator_LessThan           = CookiesMatchConditionParameters_Operator("LessThan")
	CookiesMatchConditionParameters_Operator_LessThanOrEqual    = CookiesMatchConditionParameters_Operator("LessThanOrEqual")
	CookiesMatchConditionParameters_Operator_RegEx              = CookiesMatchConditionParameters_Operator("RegEx")
)

// Mapping from string to CookiesMatchConditionParameters_Operator
var cookiesMatchConditionParameters_Operator_Values = map[string]CookiesMatchConditionParameters_Operator{
	"any":                CookiesMatchConditionParameters_Operator_Any,
	"beginswith":         CookiesMatchConditionParameters_Operator_BeginsWith,
	"contains":           CookiesMatchConditionParameters_Operator_Contains,
	"endswith":           CookiesMatchConditionParameters_Operator_EndsWith,
	"equal":              CookiesMatchConditionParameters_Operator_Equal,
	"greaterthan":        CookiesMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": CookiesMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           CookiesMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    CookiesMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              CookiesMatchConditionParameters_Operator_RegEx,
}

// +kubebuilder:validation:Enum={"DeliveryRuleCookiesConditionParameters"}
type CookiesMatchConditionParameters_TypeName string

const CookiesMatchConditionParameters_TypeName_DeliveryRuleCookiesConditionParameters = CookiesMatchConditionParameters_TypeName("DeliveryRuleCookiesConditionParameters")

// Mapping from string to CookiesMatchConditionParameters_TypeName
var cookiesMatchConditionParameters_TypeName_Values = map[string]CookiesMatchConditionParameters_TypeName{
	"deliveryrulecookiesconditionparameters": CookiesMatchConditionParameters_TypeName_DeliveryRuleCookiesConditionParameters,
}

// +kubebuilder:validation:Enum={"Append","Delete","Overwrite"}
type HeaderActionParameters_HeaderAction string

const (
	HeaderActionParameters_HeaderAction_Append    = HeaderActionParameters_HeaderAction("Append")
	HeaderActionParameters_HeaderAction_Delete    = HeaderActionParameters_HeaderAction("Delete")
	HeaderActionParameters_HeaderAction_Overwrite = HeaderActionParameters_HeaderAction("Overwrite")
)

// Mapping from string to HeaderActionParameters_HeaderAction
var headerActionParameters_HeaderAction_Values = map[string]HeaderActionParameters_HeaderAction{
	"append":    HeaderActionParameters_HeaderAction_Append,
	"delete":    HeaderActionParameters_HeaderAction_Delete,
	"overwrite": HeaderActionParameters_HeaderAction_Overwrite,
}

// +kubebuilder:validation:Enum={"DeliveryRuleHeaderActionParameters"}
type HeaderActionParameters_TypeName string

const HeaderActionParameters_TypeName_DeliveryRuleHeaderActionParameters = HeaderActionParameters_TypeName("DeliveryRuleHeaderActionParameters")

// Mapping from string to HeaderActionParameters_TypeName
var headerActionParameters_TypeName_Values = map[string]HeaderActionParameters_TypeName{
	"deliveryruleheaderactionparameters": HeaderActionParameters_TypeName_DeliveryRuleHeaderActionParameters,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx"}
type HostNameMatchConditionParameters_Operator string

const (
	HostNameMatchConditionParameters_Operator_Any                = HostNameMatchConditionParameters_Operator("Any")
	HostNameMatchConditionParameters_Operator_BeginsWith         = HostNameMatchConditionParameters_Operator("BeginsWith")
	HostNameMatchConditionParameters_Operator_Contains           = HostNameMatchConditionParameters_Operator("Contains")
	HostNameMatchConditionParameters_Operator_EndsWith           = HostNameMatchConditionParameters_Operator("EndsWith")
	HostNameMatchConditionParameters_Operator_Equal              = HostNameMatchConditionParameters_Operator("Equal")
	HostNameMatchConditionParameters_Operator_GreaterThan        = HostNameMatchConditionParameters_Operator("GreaterThan")
	HostNameMatchConditionParameters_Operator_GreaterThanOrEqual = HostNameMatchConditionParameters_Operator("GreaterThanOrEqual")
	HostNameMatchConditionParameters_Operator_LessThan           = HostNameMatchConditionParameters_Operator("LessThan")
	HostNameMatchConditionParameters_Operator_LessThanOrEqual    = HostNameMatchConditionParameters_Operator("LessThanOrEqual")
	HostNameMatchConditionParameters_Operator_RegEx              = HostNameMatchConditionParameters_Operator("RegEx")
)

// Mapping from string to HostNameMatchConditionParameters_Operator
var hostNameMatchConditionParameters_Operator_Values = map[string]HostNameMatchConditionParameters_Operator{
	"any":                HostNameMatchConditionParameters_Operator_Any,
	"beginswith":         HostNameMatchConditionParameters_Operator_BeginsWith,
	"contains":           HostNameMatchConditionParameters_Operator_Contains,
	"endswith":           HostNameMatchConditionParameters_Operator_EndsWith,
	"equal":              HostNameMatchConditionParameters_Operator_Equal,
	"greaterthan":        HostNameMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": HostNameMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           HostNameMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    HostNameMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              HostNameMatchConditionParameters_Operator_RegEx,
}

// +kubebuilder:validation:Enum={"DeliveryRuleHostNameConditionParameters"}
type HostNameMatchConditionParameters_TypeName string

const HostNameMatchConditionParameters_TypeName_DeliveryRuleHostNameConditionParameters = HostNameMatchConditionParameters_TypeName("DeliveryRuleHostNameConditionParameters")

// Mapping from string to HostNameMatchConditionParameters_TypeName
var hostNameMatchConditionParameters_TypeName_Values = map[string]HostNameMatchConditionParameters_TypeName{
	"deliveryrulehostnameconditionparameters": HostNameMatchConditionParameters_TypeName_DeliveryRuleHostNameConditionParameters,
}

// +kubebuilder:validation:Enum={"Equal"}
type HttpVersionMatchConditionParameters_Operator string

const HttpVersionMatchConditionParameters_Operator_Equal = HttpVersionMatchConditionParameters_Operator("Equal")

// Mapping from string to HttpVersionMatchConditionParameters_Operator
var httpVersionMatchConditionParameters_Operator_Values = map[string]HttpVersionMatchConditionParameters_Operator{
	"equal": HttpVersionMatchConditionParameters_Operator_Equal,
}

// +kubebuilder:validation:Enum={"DeliveryRuleHttpVersionConditionParameters"}
type HttpVersionMatchConditionParameters_TypeName string

const HttpVersionMatchConditionParameters_TypeName_DeliveryRuleHttpVersionConditionParameters = HttpVersionMatchConditionParameters_TypeName("DeliveryRuleHttpVersionConditionParameters")

// Mapping from string to HttpVersionMatchConditionParameters_TypeName
var httpVersionMatchConditionParameters_TypeName_Values = map[string]HttpVersionMatchConditionParameters_TypeName{
	"deliveryrulehttpversionconditionparameters": HttpVersionMatchConditionParameters_TypeName_DeliveryRuleHttpVersionConditionParameters,
}

// +kubebuilder:validation:Enum={"Desktop","Mobile"}
type IsDeviceMatchConditionParameters_MatchValues string

const (
	IsDeviceMatchConditionParameters_MatchValues_Desktop = IsDeviceMatchConditionParameters_MatchValues("Desktop")
	IsDeviceMatchConditionParameters_MatchValues_Mobile  = IsDeviceMatchConditionParameters_MatchValues("Mobile")
)

// Mapping from string to IsDeviceMatchConditionParameters_MatchValues
var isDeviceMatchConditionParameters_MatchValues_Values = map[string]IsDeviceMatchConditionParameters_MatchValues{
	"desktop": IsDeviceMatchConditionParameters_MatchValues_Desktop,
	"mobile":  IsDeviceMatchConditionParameters_MatchValues_Mobile,
}

// +kubebuilder:validation:Enum={"Equal"}
type IsDeviceMatchConditionParameters_Operator string

const IsDeviceMatchConditionParameters_Operator_Equal = IsDeviceMatchConditionParameters_Operator("Equal")

// Mapping from string to IsDeviceMatchConditionParameters_Operator
var isDeviceMatchConditionParameters_Operator_Values = map[string]IsDeviceMatchConditionParameters_Operator{
	"equal": IsDeviceMatchConditionParameters_Operator_Equal,
}

// +kubebuilder:validation:Enum={"DeliveryRuleIsDeviceConditionParameters"}
type IsDeviceMatchConditionParameters_TypeName string

const IsDeviceMatchConditionParameters_TypeName_DeliveryRuleIsDeviceConditionParameters = IsDeviceMatchConditionParameters_TypeName("DeliveryRuleIsDeviceConditionParameters")

// Mapping from string to IsDeviceMatchConditionParameters_TypeName
var isDeviceMatchConditionParameters_TypeName_Values = map[string]IsDeviceMatchConditionParameters_TypeName{
	"deliveryruleisdeviceconditionparameters": IsDeviceMatchConditionParameters_TypeName_DeliveryRuleIsDeviceConditionParameters,
}

// Defines the parameters for the origin group override configuration.
type OriginGroupOverride struct {
	// ForwardingProtocol: Protocol this rule will use when forwarding traffic to backends.
	ForwardingProtocol *OriginGroupOverride_ForwardingProtocol `json:"forwardingProtocol,omitempty"`

	// OriginGroup: defines the OriginGroup that would override the DefaultOriginGroup on route.
	OriginGroup *ResourceReference `json:"originGroup,omitempty"`
}

// +kubebuilder:validation:Enum={"DeliveryRuleOriginGroupOverrideActionParameters"}
type OriginGroupOverrideActionParameters_TypeName string

const OriginGroupOverrideActionParameters_TypeName_DeliveryRuleOriginGroupOverrideActionParameters = OriginGroupOverrideActionParameters_TypeName("DeliveryRuleOriginGroupOverrideActionParameters")

// Mapping from string to OriginGroupOverrideActionParameters_TypeName
var originGroupOverrideActionParameters_TypeName_Values = map[string]OriginGroupOverrideActionParameters_TypeName{
	"deliveryruleorigingroupoverrideactionparameters": OriginGroupOverrideActionParameters_TypeName_DeliveryRuleOriginGroupOverrideActionParameters,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx"}
type PostArgsMatchConditionParameters_Operator string

const (
	PostArgsMatchConditionParameters_Operator_Any                = PostArgsMatchConditionParameters_Operator("Any")
	PostArgsMatchConditionParameters_Operator_BeginsWith         = PostArgsMatchConditionParameters_Operator("BeginsWith")
	PostArgsMatchConditionParameters_Operator_Contains           = PostArgsMatchConditionParameters_Operator("Contains")
	PostArgsMatchConditionParameters_Operator_EndsWith           = PostArgsMatchConditionParameters_Operator("EndsWith")
	PostArgsMatchConditionParameters_Operator_Equal              = PostArgsMatchConditionParameters_Operator("Equal")
	PostArgsMatchConditionParameters_Operator_GreaterThan        = PostArgsMatchConditionParameters_Operator("GreaterThan")
	PostArgsMatchConditionParameters_Operator_GreaterThanOrEqual = PostArgsMatchConditionParameters_Operator("GreaterThanOrEqual")
	PostArgsMatchConditionParameters_Operator_LessThan           = PostArgsMatchConditionParameters_Operator("LessThan")
	PostArgsMatchConditionParameters_Operator_LessThanOrEqual    = PostArgsMatchConditionParameters_Operator("LessThanOrEqual")
	PostArgsMatchConditionParameters_Operator_RegEx              = PostArgsMatchConditionParameters_Operator("RegEx")
)

// Mapping from string to PostArgsMatchConditionParameters_Operator
var postArgsMatchConditionParameters_Operator_Values = map[string]PostArgsMatchConditionParameters_Operator{
	"any":                PostArgsMatchConditionParameters_Operator_Any,
	"beginswith":         PostArgsMatchConditionParameters_Operator_BeginsWith,
	"contains":           PostArgsMatchConditionParameters_Operator_Contains,
	"endswith":           PostArgsMatchConditionParameters_Operator_EndsWith,
	"equal":              PostArgsMatchConditionParameters_Operator_Equal,
	"greaterthan":        PostArgsMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": PostArgsMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           PostArgsMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    PostArgsMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              PostArgsMatchConditionParameters_Operator_RegEx,
}

// +kubebuilder:validation:Enum={"DeliveryRulePostArgsConditionParameters"}
type PostArgsMatchConditionParameters_TypeName string

const PostArgsMatchConditionParameters_TypeName_DeliveryRulePostArgsConditionParameters = PostArgsMatchConditionParameters_TypeName("DeliveryRulePostArgsConditionParameters")

// Mapping from string to PostArgsMatchConditionParameters_TypeName
var postArgsMatchConditionParameters_TypeName_Values = map[string]PostArgsMatchConditionParameters_TypeName{
	"deliveryrulepostargsconditionparameters": PostArgsMatchConditionParameters_TypeName_DeliveryRulePostArgsConditionParameters,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx"}
type QueryStringMatchConditionParameters_Operator string

const (
	QueryStringMatchConditionParameters_Operator_Any                = QueryStringMatchConditionParameters_Operator("Any")
	QueryStringMatchConditionParameters_Operator_BeginsWith         = QueryStringMatchConditionParameters_Operator("BeginsWith")
	QueryStringMatchConditionParameters_Operator_Contains           = QueryStringMatchConditionParameters_Operator("Contains")
	QueryStringMatchConditionParameters_Operator_EndsWith           = QueryStringMatchConditionParameters_Operator("EndsWith")
	QueryStringMatchConditionParameters_Operator_Equal              = QueryStringMatchConditionParameters_Operator("Equal")
	QueryStringMatchConditionParameters_Operator_GreaterThan        = QueryStringMatchConditionParameters_Operator("GreaterThan")
	QueryStringMatchConditionParameters_Operator_GreaterThanOrEqual = QueryStringMatchConditionParameters_Operator("GreaterThanOrEqual")
	QueryStringMatchConditionParameters_Operator_LessThan           = QueryStringMatchConditionParameters_Operator("LessThan")
	QueryStringMatchConditionParameters_Operator_LessThanOrEqual    = QueryStringMatchConditionParameters_Operator("LessThanOrEqual")
	QueryStringMatchConditionParameters_Operator_RegEx              = QueryStringMatchConditionParameters_Operator("RegEx")
)

// Mapping from string to QueryStringMatchConditionParameters_Operator
var queryStringMatchConditionParameters_Operator_Values = map[string]QueryStringMatchConditionParameters_Operator{
	"any":                QueryStringMatchConditionParameters_Operator_Any,
	"beginswith":         QueryStringMatchConditionParameters_Operator_BeginsWith,
	"contains":           QueryStringMatchConditionParameters_Operator_Contains,
	"endswith":           QueryStringMatchConditionParameters_Operator_EndsWith,
	"equal":              QueryStringMatchConditionParameters_Operator_Equal,
	"greaterthan":        QueryStringMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": QueryStringMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           QueryStringMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    QueryStringMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              QueryStringMatchConditionParameters_Operator_RegEx,
}

// +kubebuilder:validation:Enum={"DeliveryRuleQueryStringConditionParameters"}
type QueryStringMatchConditionParameters_TypeName string

const QueryStringMatchConditionParameters_TypeName_DeliveryRuleQueryStringConditionParameters = QueryStringMatchConditionParameters_TypeName("DeliveryRuleQueryStringConditionParameters")

// Mapping from string to QueryStringMatchConditionParameters_TypeName
var queryStringMatchConditionParameters_TypeName_Values = map[string]QueryStringMatchConditionParameters_TypeName{
	"deliveryrulequerystringconditionparameters": QueryStringMatchConditionParameters_TypeName_DeliveryRuleQueryStringConditionParameters,
}

// +kubebuilder:validation:Enum={"Any","GeoMatch","IPMatch"}
type RemoteAddressMatchConditionParameters_Operator string

const (
	RemoteAddressMatchConditionParameters_Operator_Any      = RemoteAddressMatchConditionParameters_Operator("Any")
	RemoteAddressMatchConditionParameters_Operator_GeoMatch = RemoteAddressMatchConditionParameters_Operator("GeoMatch")
	RemoteAddressMatchConditionParameters_Operator_IPMatch  = RemoteAddressMatchConditionParameters_Operator("IPMatch")
)

// Mapping from string to RemoteAddressMatchConditionParameters_Operator
var remoteAddressMatchConditionParameters_Operator_Values = map[string]RemoteAddressMatchConditionParameters_Operator{
	"any":      RemoteAddressMatchConditionParameters_Operator_Any,
	"geomatch": RemoteAddressMatchConditionParameters_Operator_GeoMatch,
	"ipmatch":  RemoteAddressMatchConditionParameters_Operator_IPMatch,
}

// +kubebuilder:validation:Enum={"DeliveryRuleRemoteAddressConditionParameters"}
type RemoteAddressMatchConditionParameters_TypeName string

const RemoteAddressMatchConditionParameters_TypeName_DeliveryRuleRemoteAddressConditionParameters = RemoteAddressMatchConditionParameters_TypeName("DeliveryRuleRemoteAddressConditionParameters")

// Mapping from string to RemoteAddressMatchConditionParameters_TypeName
var remoteAddressMatchConditionParameters_TypeName_Values = map[string]RemoteAddressMatchConditionParameters_TypeName{
	"deliveryruleremoteaddressconditionparameters": RemoteAddressMatchConditionParameters_TypeName_DeliveryRuleRemoteAddressConditionParameters,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx"}
type RequestBodyMatchConditionParameters_Operator string

const (
	RequestBodyMatchConditionParameters_Operator_Any                = RequestBodyMatchConditionParameters_Operator("Any")
	RequestBodyMatchConditionParameters_Operator_BeginsWith         = RequestBodyMatchConditionParameters_Operator("BeginsWith")
	RequestBodyMatchConditionParameters_Operator_Contains           = RequestBodyMatchConditionParameters_Operator("Contains")
	RequestBodyMatchConditionParameters_Operator_EndsWith           = RequestBodyMatchConditionParameters_Operator("EndsWith")
	RequestBodyMatchConditionParameters_Operator_Equal              = RequestBodyMatchConditionParameters_Operator("Equal")
	RequestBodyMatchConditionParameters_Operator_GreaterThan        = RequestBodyMatchConditionParameters_Operator("GreaterThan")
	RequestBodyMatchConditionParameters_Operator_GreaterThanOrEqual = RequestBodyMatchConditionParameters_Operator("GreaterThanOrEqual")
	RequestBodyMatchConditionParameters_Operator_LessThan           = RequestBodyMatchConditionParameters_Operator("LessThan")
	RequestBodyMatchConditionParameters_Operator_LessThanOrEqual    = RequestBodyMatchConditionParameters_Operator("LessThanOrEqual")
	RequestBodyMatchConditionParameters_Operator_RegEx              = RequestBodyMatchConditionParameters_Operator("RegEx")
)

// Mapping from string to RequestBodyMatchConditionParameters_Operator
var requestBodyMatchConditionParameters_Operator_Values = map[string]RequestBodyMatchConditionParameters_Operator{
	"any":                RequestBodyMatchConditionParameters_Operator_Any,
	"beginswith":         RequestBodyMatchConditionParameters_Operator_BeginsWith,
	"contains":           RequestBodyMatchConditionParameters_Operator_Contains,
	"endswith":           RequestBodyMatchConditionParameters_Operator_EndsWith,
	"equal":              RequestBodyMatchConditionParameters_Operator_Equal,
	"greaterthan":        RequestBodyMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": RequestBodyMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           RequestBodyMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    RequestBodyMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              RequestBodyMatchConditionParameters_Operator_RegEx,
}

// +kubebuilder:validation:Enum={"DeliveryRuleRequestBodyConditionParameters"}
type RequestBodyMatchConditionParameters_TypeName string

const RequestBodyMatchConditionParameters_TypeName_DeliveryRuleRequestBodyConditionParameters = RequestBodyMatchConditionParameters_TypeName("DeliveryRuleRequestBodyConditionParameters")

// Mapping from string to RequestBodyMatchConditionParameters_TypeName
var requestBodyMatchConditionParameters_TypeName_Values = map[string]RequestBodyMatchConditionParameters_TypeName{
	"deliveryrulerequestbodyconditionparameters": RequestBodyMatchConditionParameters_TypeName_DeliveryRuleRequestBodyConditionParameters,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx"}
type RequestHeaderMatchConditionParameters_Operator string

const (
	RequestHeaderMatchConditionParameters_Operator_Any                = RequestHeaderMatchConditionParameters_Operator("Any")
	RequestHeaderMatchConditionParameters_Operator_BeginsWith         = RequestHeaderMatchConditionParameters_Operator("BeginsWith")
	RequestHeaderMatchConditionParameters_Operator_Contains           = RequestHeaderMatchConditionParameters_Operator("Contains")
	RequestHeaderMatchConditionParameters_Operator_EndsWith           = RequestHeaderMatchConditionParameters_Operator("EndsWith")
	RequestHeaderMatchConditionParameters_Operator_Equal              = RequestHeaderMatchConditionParameters_Operator("Equal")
	RequestHeaderMatchConditionParameters_Operator_GreaterThan        = RequestHeaderMatchConditionParameters_Operator("GreaterThan")
	RequestHeaderMatchConditionParameters_Operator_GreaterThanOrEqual = RequestHeaderMatchConditionParameters_Operator("GreaterThanOrEqual")
	RequestHeaderMatchConditionParameters_Operator_LessThan           = RequestHeaderMatchConditionParameters_Operator("LessThan")
	RequestHeaderMatchConditionParameters_Operator_LessThanOrEqual    = RequestHeaderMatchConditionParameters_Operator("LessThanOrEqual")
	RequestHeaderMatchConditionParameters_Operator_RegEx              = RequestHeaderMatchConditionParameters_Operator("RegEx")
)

// Mapping from string to RequestHeaderMatchConditionParameters_Operator
var requestHeaderMatchConditionParameters_Operator_Values = map[string]RequestHeaderMatchConditionParameters_Operator{
	"any":                RequestHeaderMatchConditionParameters_Operator_Any,
	"beginswith":         RequestHeaderMatchConditionParameters_Operator_BeginsWith,
	"contains":           RequestHeaderMatchConditionParameters_Operator_Contains,
	"endswith":           RequestHeaderMatchConditionParameters_Operator_EndsWith,
	"equal":              RequestHeaderMatchConditionParameters_Operator_Equal,
	"greaterthan":        RequestHeaderMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": RequestHeaderMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           RequestHeaderMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    RequestHeaderMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              RequestHeaderMatchConditionParameters_Operator_RegEx,
}

// +kubebuilder:validation:Enum={"DeliveryRuleRequestHeaderConditionParameters"}
type RequestHeaderMatchConditionParameters_TypeName string

const RequestHeaderMatchConditionParameters_TypeName_DeliveryRuleRequestHeaderConditionParameters = RequestHeaderMatchConditionParameters_TypeName("DeliveryRuleRequestHeaderConditionParameters")

// Mapping from string to RequestHeaderMatchConditionParameters_TypeName
var requestHeaderMatchConditionParameters_TypeName_Values = map[string]RequestHeaderMatchConditionParameters_TypeName{
	"deliveryrulerequestheaderconditionparameters": RequestHeaderMatchConditionParameters_TypeName_DeliveryRuleRequestHeaderConditionParameters,
}

// +kubebuilder:validation:Enum={"DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE"}
type RequestMethodMatchConditionParameters_MatchValues string

const (
	RequestMethodMatchConditionParameters_MatchValues_DELETE  = RequestMethodMatchConditionParameters_MatchValues("DELETE")
	RequestMethodMatchConditionParameters_MatchValues_GET     = RequestMethodMatchConditionParameters_MatchValues("GET")
	RequestMethodMatchConditionParameters_MatchValues_HEAD    = RequestMethodMatchConditionParameters_MatchValues("HEAD")
	RequestMethodMatchConditionParameters_MatchValues_OPTIONS = RequestMethodMatchConditionParameters_MatchValues("OPTIONS")
	RequestMethodMatchConditionParameters_MatchValues_POST    = RequestMethodMatchConditionParameters_MatchValues("POST")
	RequestMethodMatchConditionParameters_MatchValues_PUT     = RequestMethodMatchConditionParameters_MatchValues("PUT")
	RequestMethodMatchConditionParameters_MatchValues_TRACE   = RequestMethodMatchConditionParameters_MatchValues("TRACE")
)

// Mapping from string to RequestMethodMatchConditionParameters_MatchValues
var requestMethodMatchConditionParameters_MatchValues_Values = map[string]RequestMethodMatchConditionParameters_MatchValues{
	"delete":  RequestMethodMatchConditionParameters_MatchValues_DELETE,
	"get":     RequestMethodMatchConditionParameters_MatchValues_GET,
	"head":    RequestMethodMatchConditionParameters_MatchValues_HEAD,
	"options": RequestMethodMatchConditionParameters_MatchValues_OPTIONS,
	"post":    RequestMethodMatchConditionParameters_MatchValues_POST,
	"put":     RequestMethodMatchConditionParameters_MatchValues_PUT,
	"trace":   RequestMethodMatchConditionParameters_MatchValues_TRACE,
}

// +kubebuilder:validation:Enum={"Equal"}
type RequestMethodMatchConditionParameters_Operator string

const RequestMethodMatchConditionParameters_Operator_Equal = RequestMethodMatchConditionParameters_Operator("Equal")

// Mapping from string to RequestMethodMatchConditionParameters_Operator
var requestMethodMatchConditionParameters_Operator_Values = map[string]RequestMethodMatchConditionParameters_Operator{
	"equal": RequestMethodMatchConditionParameters_Operator_Equal,
}

// +kubebuilder:validation:Enum={"DeliveryRuleRequestMethodConditionParameters"}
type RequestMethodMatchConditionParameters_TypeName string

const RequestMethodMatchConditionParameters_TypeName_DeliveryRuleRequestMethodConditionParameters = RequestMethodMatchConditionParameters_TypeName("DeliveryRuleRequestMethodConditionParameters")

// Mapping from string to RequestMethodMatchConditionParameters_TypeName
var requestMethodMatchConditionParameters_TypeName_Values = map[string]RequestMethodMatchConditionParameters_TypeName{
	"deliveryrulerequestmethodconditionparameters": RequestMethodMatchConditionParameters_TypeName_DeliveryRuleRequestMethodConditionParameters,
}

// +kubebuilder:validation:Enum={"HTTP","HTTPS"}
type RequestSchemeMatchConditionParameters_MatchValues string

const (
	RequestSchemeMatchConditionParameters_MatchValues_HTTP  = RequestSchemeMatchConditionParameters_MatchValues("HTTP")
	RequestSchemeMatchConditionParameters_MatchValues_HTTPS = RequestSchemeMatchConditionParameters_MatchValues("HTTPS")
)

// Mapping from string to RequestSchemeMatchConditionParameters_MatchValues
var requestSchemeMatchConditionParameters_MatchValues_Values = map[string]RequestSchemeMatchConditionParameters_MatchValues{
	"http":  RequestSchemeMatchConditionParameters_MatchValues_HTTP,
	"https": RequestSchemeMatchConditionParameters_MatchValues_HTTPS,
}

// +kubebuilder:validation:Enum={"Equal"}
type RequestSchemeMatchConditionParameters_Operator string

const RequestSchemeMatchConditionParameters_Operator_Equal = RequestSchemeMatchConditionParameters_Operator("Equal")

// Mapping from string to RequestSchemeMatchConditionParameters_Operator
var requestSchemeMatchConditionParameters_Operator_Values = map[string]RequestSchemeMatchConditionParameters_Operator{
	"equal": RequestSchemeMatchConditionParameters_Operator_Equal,
}

// +kubebuilder:validation:Enum={"DeliveryRuleRequestSchemeConditionParameters"}
type RequestSchemeMatchConditionParameters_TypeName string

const RequestSchemeMatchConditionParameters_TypeName_DeliveryRuleRequestSchemeConditionParameters = RequestSchemeMatchConditionParameters_TypeName("DeliveryRuleRequestSchemeConditionParameters")

// Mapping from string to RequestSchemeMatchConditionParameters_TypeName
var requestSchemeMatchConditionParameters_TypeName_Values = map[string]RequestSchemeMatchConditionParameters_TypeName{
	"deliveryrulerequestschemeconditionparameters": RequestSchemeMatchConditionParameters_TypeName_DeliveryRuleRequestSchemeConditionParameters,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx"}
type RequestUriMatchConditionParameters_Operator string

const (
	RequestUriMatchConditionParameters_Operator_Any                = RequestUriMatchConditionParameters_Operator("Any")
	RequestUriMatchConditionParameters_Operator_BeginsWith         = RequestUriMatchConditionParameters_Operator("BeginsWith")
	RequestUriMatchConditionParameters_Operator_Contains           = RequestUriMatchConditionParameters_Operator("Contains")
	RequestUriMatchConditionParameters_Operator_EndsWith           = RequestUriMatchConditionParameters_Operator("EndsWith")
	RequestUriMatchConditionParameters_Operator_Equal              = RequestUriMatchConditionParameters_Operator("Equal")
	RequestUriMatchConditionParameters_Operator_GreaterThan        = RequestUriMatchConditionParameters_Operator("GreaterThan")
	RequestUriMatchConditionParameters_Operator_GreaterThanOrEqual = RequestUriMatchConditionParameters_Operator("GreaterThanOrEqual")
	RequestUriMatchConditionParameters_Operator_LessThan           = RequestUriMatchConditionParameters_Operator("LessThan")
	RequestUriMatchConditionParameters_Operator_LessThanOrEqual    = RequestUriMatchConditionParameters_Operator("LessThanOrEqual")
	RequestUriMatchConditionParameters_Operator_RegEx              = RequestUriMatchConditionParameters_Operator("RegEx")
)

// Mapping from string to RequestUriMatchConditionParameters_Operator
var requestUriMatchConditionParameters_Operator_Values = map[string]RequestUriMatchConditionParameters_Operator{
	"any":                RequestUriMatchConditionParameters_Operator_Any,
	"beginswith":         RequestUriMatchConditionParameters_Operator_BeginsWith,
	"contains":           RequestUriMatchConditionParameters_Operator_Contains,
	"endswith":           RequestUriMatchConditionParameters_Operator_EndsWith,
	"equal":              RequestUriMatchConditionParameters_Operator_Equal,
	"greaterthan":        RequestUriMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": RequestUriMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           RequestUriMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    RequestUriMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              RequestUriMatchConditionParameters_Operator_RegEx,
}

// +kubebuilder:validation:Enum={"DeliveryRuleRequestUriConditionParameters"}
type RequestUriMatchConditionParameters_TypeName string

const RequestUriMatchConditionParameters_TypeName_DeliveryRuleRequestUriConditionParameters = RequestUriMatchConditionParameters_TypeName("DeliveryRuleRequestUriConditionParameters")

// Mapping from string to RequestUriMatchConditionParameters_TypeName
var requestUriMatchConditionParameters_TypeName_Values = map[string]RequestUriMatchConditionParameters_TypeName{
	"deliveryrulerequesturiconditionparameters": RequestUriMatchConditionParameters_TypeName_DeliveryRuleRequestUriConditionParameters,
}

// +kubebuilder:validation:Enum={"DeliveryRuleRouteConfigurationOverrideActionParameters"}
type RouteConfigurationOverrideActionParameters_TypeName string

const RouteConfigurationOverrideActionParameters_TypeName_DeliveryRuleRouteConfigurationOverrideActionParameters = RouteConfigurationOverrideActionParameters_TypeName("DeliveryRuleRouteConfigurationOverrideActionParameters")

// Mapping from string to RouteConfigurationOverrideActionParameters_TypeName
var routeConfigurationOverrideActionParameters_TypeName_Values = map[string]RouteConfigurationOverrideActionParameters_TypeName{
	"deliveryrulerouteconfigurationoverrideactionparameters": RouteConfigurationOverrideActionParameters_TypeName_DeliveryRuleRouteConfigurationOverrideActionParameters,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx"}
type ServerPortMatchConditionParameters_Operator string

const (
	ServerPortMatchConditionParameters_Operator_Any                = ServerPortMatchConditionParameters_Operator("Any")
	ServerPortMatchConditionParameters_Operator_BeginsWith         = ServerPortMatchConditionParameters_Operator("BeginsWith")
	ServerPortMatchConditionParameters_Operator_Contains           = ServerPortMatchConditionParameters_Operator("Contains")
	ServerPortMatchConditionParameters_Operator_EndsWith           = ServerPortMatchConditionParameters_Operator("EndsWith")
	ServerPortMatchConditionParameters_Operator_Equal              = ServerPortMatchConditionParameters_Operator("Equal")
	ServerPortMatchConditionParameters_Operator_GreaterThan        = ServerPortMatchConditionParameters_Operator("GreaterThan")
	ServerPortMatchConditionParameters_Operator_GreaterThanOrEqual = ServerPortMatchConditionParameters_Operator("GreaterThanOrEqual")
	ServerPortMatchConditionParameters_Operator_LessThan           = ServerPortMatchConditionParameters_Operator("LessThan")
	ServerPortMatchConditionParameters_Operator_LessThanOrEqual    = ServerPortMatchConditionParameters_Operator("LessThanOrEqual")
	ServerPortMatchConditionParameters_Operator_RegEx              = ServerPortMatchConditionParameters_Operator("RegEx")
)

// Mapping from string to ServerPortMatchConditionParameters_Operator
var serverPortMatchConditionParameters_Operator_Values = map[string]ServerPortMatchConditionParameters_Operator{
	"any":                ServerPortMatchConditionParameters_Operator_Any,
	"beginswith":         ServerPortMatchConditionParameters_Operator_BeginsWith,
	"contains":           ServerPortMatchConditionParameters_Operator_Contains,
	"endswith":           ServerPortMatchConditionParameters_Operator_EndsWith,
	"equal":              ServerPortMatchConditionParameters_Operator_Equal,
	"greaterthan":        ServerPortMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": ServerPortMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           ServerPortMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    ServerPortMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              ServerPortMatchConditionParameters_Operator_RegEx,
}

// +kubebuilder:validation:Enum={"DeliveryRuleServerPortConditionParameters"}
type ServerPortMatchConditionParameters_TypeName string

const ServerPortMatchConditionParameters_TypeName_DeliveryRuleServerPortConditionParameters = ServerPortMatchConditionParameters_TypeName("DeliveryRuleServerPortConditionParameters")

// Mapping from string to ServerPortMatchConditionParameters_TypeName
var serverPortMatchConditionParameters_TypeName_Values = map[string]ServerPortMatchConditionParameters_TypeName{
	"deliveryruleserverportconditionparameters": ServerPortMatchConditionParameters_TypeName_DeliveryRuleServerPortConditionParameters,
}

// +kubebuilder:validation:Enum={"Any","IPMatch"}
type SocketAddrMatchConditionParameters_Operator string

const (
	SocketAddrMatchConditionParameters_Operator_Any     = SocketAddrMatchConditionParameters_Operator("Any")
	SocketAddrMatchConditionParameters_Operator_IPMatch = SocketAddrMatchConditionParameters_Operator("IPMatch")
)

// Mapping from string to SocketAddrMatchConditionParameters_Operator
var socketAddrMatchConditionParameters_Operator_Values = map[string]SocketAddrMatchConditionParameters_Operator{
	"any":     SocketAddrMatchConditionParameters_Operator_Any,
	"ipmatch": SocketAddrMatchConditionParameters_Operator_IPMatch,
}

// +kubebuilder:validation:Enum={"DeliveryRuleSocketAddrConditionParameters"}
type SocketAddrMatchConditionParameters_TypeName string

const SocketAddrMatchConditionParameters_TypeName_DeliveryRuleSocketAddrConditionParameters = SocketAddrMatchConditionParameters_TypeName("DeliveryRuleSocketAddrConditionParameters")

// Mapping from string to SocketAddrMatchConditionParameters_TypeName
var socketAddrMatchConditionParameters_TypeName_Values = map[string]SocketAddrMatchConditionParameters_TypeName{
	"deliveryrulesocketaddrconditionparameters": SocketAddrMatchConditionParameters_TypeName_DeliveryRuleSocketAddrConditionParameters,
}

// The protocol of an established TLS connection.
// +kubebuilder:validation:Enum={"TLSv1","TLSv1.1","TLSv1.2"}
type SslProtocol string

const (
	SslProtocol_TLSv1  = SslProtocol("TLSv1")
	SslProtocol_TLSv11 = SslProtocol("TLSv1.1")
	SslProtocol_TLSv12 = SslProtocol("TLSv1.2")
)

// Mapping from string to SslProtocol
var sslProtocol_Values = map[string]SslProtocol{
	"tlsv1":   SslProtocol_TLSv1,
	"tlsv1.1": SslProtocol_TLSv11,
	"tlsv1.2": SslProtocol_TLSv12,
}

// +kubebuilder:validation:Enum={"Equal"}
type SslProtocolMatchConditionParameters_Operator string

const SslProtocolMatchConditionParameters_Operator_Equal = SslProtocolMatchConditionParameters_Operator("Equal")

// Mapping from string to SslProtocolMatchConditionParameters_Operator
var sslProtocolMatchConditionParameters_Operator_Values = map[string]SslProtocolMatchConditionParameters_Operator{
	"equal": SslProtocolMatchConditionParameters_Operator_Equal,
}

// +kubebuilder:validation:Enum={"DeliveryRuleSslProtocolConditionParameters"}
type SslProtocolMatchConditionParameters_TypeName string

const SslProtocolMatchConditionParameters_TypeName_DeliveryRuleSslProtocolConditionParameters = SslProtocolMatchConditionParameters_TypeName("DeliveryRuleSslProtocolConditionParameters")

// Mapping from string to SslProtocolMatchConditionParameters_TypeName
var sslProtocolMatchConditionParameters_TypeName_Values = map[string]SslProtocolMatchConditionParameters_TypeName{
	"deliveryrulesslprotocolconditionparameters": SslProtocolMatchConditionParameters_TypeName_DeliveryRuleSslProtocolConditionParameters,
}

// Describes what transforms are applied before matching
// +kubebuilder:validation:Enum={"Lowercase","RemoveNulls","Trim","Uppercase","UrlDecode","UrlEncode"}
type Transform string

const (
	Transform_Lowercase   = Transform("Lowercase")
	Transform_RemoveNulls = Transform("RemoveNulls")
	Transform_Trim        = Transform("Trim")
	Transform_Uppercase   = Transform("Uppercase")
	Transform_UrlDecode   = Transform("UrlDecode")
	Transform_UrlEncode   = Transform("UrlEncode")
)

// Mapping from string to Transform
var transform_Values = map[string]Transform{
	"lowercase":   Transform_Lowercase,
	"removenulls": Transform_RemoveNulls,
	"trim":        Transform_Trim,
	"uppercase":   Transform_Uppercase,
	"urldecode":   Transform_UrlDecode,
	"urlencode":   Transform_UrlEncode,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx"}
type UrlFileExtensionMatchConditionParameters_Operator string

const (
	UrlFileExtensionMatchConditionParameters_Operator_Any                = UrlFileExtensionMatchConditionParameters_Operator("Any")
	UrlFileExtensionMatchConditionParameters_Operator_BeginsWith         = UrlFileExtensionMatchConditionParameters_Operator("BeginsWith")
	UrlFileExtensionMatchConditionParameters_Operator_Contains           = UrlFileExtensionMatchConditionParameters_Operator("Contains")
	UrlFileExtensionMatchConditionParameters_Operator_EndsWith           = UrlFileExtensionMatchConditionParameters_Operator("EndsWith")
	UrlFileExtensionMatchConditionParameters_Operator_Equal              = UrlFileExtensionMatchConditionParameters_Operator("Equal")
	UrlFileExtensionMatchConditionParameters_Operator_GreaterThan        = UrlFileExtensionMatchConditionParameters_Operator("GreaterThan")
	UrlFileExtensionMatchConditionParameters_Operator_GreaterThanOrEqual = UrlFileExtensionMatchConditionParameters_Operator("GreaterThanOrEqual")
	UrlFileExtensionMatchConditionParameters_Operator_LessThan           = UrlFileExtensionMatchConditionParameters_Operator("LessThan")
	UrlFileExtensionMatchConditionParameters_Operator_LessThanOrEqual    = UrlFileExtensionMatchConditionParameters_Operator("LessThanOrEqual")
	UrlFileExtensionMatchConditionParameters_Operator_RegEx              = UrlFileExtensionMatchConditionParameters_Operator("RegEx")
)

// Mapping from string to UrlFileExtensionMatchConditionParameters_Operator
var urlFileExtensionMatchConditionParameters_Operator_Values = map[string]UrlFileExtensionMatchConditionParameters_Operator{
	"any":                UrlFileExtensionMatchConditionParameters_Operator_Any,
	"beginswith":         UrlFileExtensionMatchConditionParameters_Operator_BeginsWith,
	"contains":           UrlFileExtensionMatchConditionParameters_Operator_Contains,
	"endswith":           UrlFileExtensionMatchConditionParameters_Operator_EndsWith,
	"equal":              UrlFileExtensionMatchConditionParameters_Operator_Equal,
	"greaterthan":        UrlFileExtensionMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": UrlFileExtensionMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           UrlFileExtensionMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    UrlFileExtensionMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              UrlFileExtensionMatchConditionParameters_Operator_RegEx,
}

// +kubebuilder:validation:Enum={"DeliveryRuleUrlFileExtensionMatchConditionParameters"}
type UrlFileExtensionMatchConditionParameters_TypeName string

const UrlFileExtensionMatchConditionParameters_TypeName_DeliveryRuleUrlFileExtensionMatchConditionParameters = UrlFileExtensionMatchConditionParameters_TypeName("DeliveryRuleUrlFileExtensionMatchConditionParameters")

// Mapping from string to UrlFileExtensionMatchConditionParameters_TypeName
var urlFileExtensionMatchConditionParameters_TypeName_Values = map[string]UrlFileExtensionMatchConditionParameters_TypeName{
	"deliveryruleurlfileextensionmatchconditionparameters": UrlFileExtensionMatchConditionParameters_TypeName_DeliveryRuleUrlFileExtensionMatchConditionParameters,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx"}
type UrlFileNameMatchConditionParameters_Operator string

const (
	UrlFileNameMatchConditionParameters_Operator_Any                = UrlFileNameMatchConditionParameters_Operator("Any")
	UrlFileNameMatchConditionParameters_Operator_BeginsWith         = UrlFileNameMatchConditionParameters_Operator("BeginsWith")
	UrlFileNameMatchConditionParameters_Operator_Contains           = UrlFileNameMatchConditionParameters_Operator("Contains")
	UrlFileNameMatchConditionParameters_Operator_EndsWith           = UrlFileNameMatchConditionParameters_Operator("EndsWith")
	UrlFileNameMatchConditionParameters_Operator_Equal              = UrlFileNameMatchConditionParameters_Operator("Equal")
	UrlFileNameMatchConditionParameters_Operator_GreaterThan        = UrlFileNameMatchConditionParameters_Operator("GreaterThan")
	UrlFileNameMatchConditionParameters_Operator_GreaterThanOrEqual = UrlFileNameMatchConditionParameters_Operator("GreaterThanOrEqual")
	UrlFileNameMatchConditionParameters_Operator_LessThan           = UrlFileNameMatchConditionParameters_Operator("LessThan")
	UrlFileNameMatchConditionParameters_Operator_LessThanOrEqual    = UrlFileNameMatchConditionParameters_Operator("LessThanOrEqual")
	UrlFileNameMatchConditionParameters_Operator_RegEx              = UrlFileNameMatchConditionParameters_Operator("RegEx")
)

// Mapping from string to UrlFileNameMatchConditionParameters_Operator
var urlFileNameMatchConditionParameters_Operator_Values = map[string]UrlFileNameMatchConditionParameters_Operator{
	"any":                UrlFileNameMatchConditionParameters_Operator_Any,
	"beginswith":         UrlFileNameMatchConditionParameters_Operator_BeginsWith,
	"contains":           UrlFileNameMatchConditionParameters_Operator_Contains,
	"endswith":           UrlFileNameMatchConditionParameters_Operator_EndsWith,
	"equal":              UrlFileNameMatchConditionParameters_Operator_Equal,
	"greaterthan":        UrlFileNameMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": UrlFileNameMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           UrlFileNameMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    UrlFileNameMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              UrlFileNameMatchConditionParameters_Operator_RegEx,
}

// +kubebuilder:validation:Enum={"DeliveryRuleUrlFilenameConditionParameters"}
type UrlFileNameMatchConditionParameters_TypeName string

const UrlFileNameMatchConditionParameters_TypeName_DeliveryRuleUrlFilenameConditionParameters = UrlFileNameMatchConditionParameters_TypeName("DeliveryRuleUrlFilenameConditionParameters")

// Mapping from string to UrlFileNameMatchConditionParameters_TypeName
var urlFileNameMatchConditionParameters_TypeName_Values = map[string]UrlFileNameMatchConditionParameters_TypeName{
	"deliveryruleurlfilenameconditionparameters": UrlFileNameMatchConditionParameters_TypeName_DeliveryRuleUrlFilenameConditionParameters,
}

// +kubebuilder:validation:Enum={"Any","BeginsWith","Contains","EndsWith","Equal","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","RegEx","Wildcard"}
type UrlPathMatchConditionParameters_Operator string

const (
	UrlPathMatchConditionParameters_Operator_Any                = UrlPathMatchConditionParameters_Operator("Any")
	UrlPathMatchConditionParameters_Operator_BeginsWith         = UrlPathMatchConditionParameters_Operator("BeginsWith")
	UrlPathMatchConditionParameters_Operator_Contains           = UrlPathMatchConditionParameters_Operator("Contains")
	UrlPathMatchConditionParameters_Operator_EndsWith           = UrlPathMatchConditionParameters_Operator("EndsWith")
	UrlPathMatchConditionParameters_Operator_Equal              = UrlPathMatchConditionParameters_Operator("Equal")
	UrlPathMatchConditionParameters_Operator_GreaterThan        = UrlPathMatchConditionParameters_Operator("GreaterThan")
	UrlPathMatchConditionParameters_Operator_GreaterThanOrEqual = UrlPathMatchConditionParameters_Operator("GreaterThanOrEqual")
	UrlPathMatchConditionParameters_Operator_LessThan           = UrlPathMatchConditionParameters_Operator("LessThan")
	UrlPathMatchConditionParameters_Operator_LessThanOrEqual    = UrlPathMatchConditionParameters_Operator("LessThanOrEqual")
	UrlPathMatchConditionParameters_Operator_RegEx              = UrlPathMatchConditionParameters_Operator("RegEx")
	UrlPathMatchConditionParameters_Operator_Wildcard           = UrlPathMatchConditionParameters_Operator("Wildcard")
)

// Mapping from string to UrlPathMatchConditionParameters_Operator
var urlPathMatchConditionParameters_Operator_Values = map[string]UrlPathMatchConditionParameters_Operator{
	"any":                UrlPathMatchConditionParameters_Operator_Any,
	"beginswith":         UrlPathMatchConditionParameters_Operator_BeginsWith,
	"contains":           UrlPathMatchConditionParameters_Operator_Contains,
	"endswith":           UrlPathMatchConditionParameters_Operator_EndsWith,
	"equal":              UrlPathMatchConditionParameters_Operator_Equal,
	"greaterthan":        UrlPathMatchConditionParameters_Operator_GreaterThan,
	"greaterthanorequal": UrlPathMatchConditionParameters_Operator_GreaterThanOrEqual,
	"lessthan":           UrlPathMatchConditionParameters_Operator_LessThan,
	"lessthanorequal":    UrlPathMatchConditionParameters_Operator_LessThanOrEqual,
	"regex":              UrlPathMatchConditionParameters_Operator_RegEx,
	"wildcard":           UrlPathMatchConditionParameters_Operator_Wildcard,
}

// +kubebuilder:validation:Enum={"DeliveryRuleUrlPathMatchConditionParameters"}
type UrlPathMatchConditionParameters_TypeName string

const UrlPathMatchConditionParameters_TypeName_DeliveryRuleUrlPathMatchConditionParameters = UrlPathMatchConditionParameters_TypeName("DeliveryRuleUrlPathMatchConditionParameters")

// Mapping from string to UrlPathMatchConditionParameters_TypeName
var urlPathMatchConditionParameters_TypeName_Values = map[string]UrlPathMatchConditionParameters_TypeName{
	"deliveryruleurlpathmatchconditionparameters": UrlPathMatchConditionParameters_TypeName_DeliveryRuleUrlPathMatchConditionParameters,
}

// +kubebuilder:validation:Enum={"Http","Https","MatchRequest"}
type UrlRedirectActionParameters_DestinationProtocol string

const (
	UrlRedirectActionParameters_DestinationProtocol_Http         = UrlRedirectActionParameters_DestinationProtocol("Http")
	UrlRedirectActionParameters_DestinationProtocol_Https        = UrlRedirectActionParameters_DestinationProtocol("Https")
	UrlRedirectActionParameters_DestinationProtocol_MatchRequest = UrlRedirectActionParameters_DestinationProtocol("MatchRequest")
)

// Mapping from string to UrlRedirectActionParameters_DestinationProtocol
var urlRedirectActionParameters_DestinationProtocol_Values = map[string]UrlRedirectActionParameters_DestinationProtocol{
	"http":         UrlRedirectActionParameters_DestinationProtocol_Http,
	"https":        UrlRedirectActionParameters_DestinationProtocol_Https,
	"matchrequest": UrlRedirectActionParameters_DestinationProtocol_MatchRequest,
}

// +kubebuilder:validation:Enum={"Found","Moved","PermanentRedirect","TemporaryRedirect"}
type UrlRedirectActionParameters_RedirectType string

const (
	UrlRedirectActionParameters_RedirectType_Found             = UrlRedirectActionParameters_RedirectType("Found")
	UrlRedirectActionParameters_RedirectType_Moved             = UrlRedirectActionParameters_RedirectType("Moved")
	UrlRedirectActionParameters_RedirectType_PermanentRedirect = UrlRedirectActionParameters_RedirectType("PermanentRedirect")
	UrlRedirectActionParameters_RedirectType_TemporaryRedirect = UrlRedirectActionParameters_RedirectType("TemporaryRedirect")
)

// Mapping from string to UrlRedirectActionParameters_RedirectType
var urlRedirectActionParameters_RedirectType_Values = map[string]UrlRedirectActionParameters_RedirectType{
	"found":             UrlRedirectActionParameters_RedirectType_Found,
	"moved":             UrlRedirectActionParameters_RedirectType_Moved,
	"permanentredirect": UrlRedirectActionParameters_RedirectType_PermanentRedirect,
	"temporaryredirect": UrlRedirectActionParameters_RedirectType_TemporaryRedirect,
}

// +kubebuilder:validation:Enum={"DeliveryRuleUrlRedirectActionParameters"}
type UrlRedirectActionParameters_TypeName string

const UrlRedirectActionParameters_TypeName_DeliveryRuleUrlRedirectActionParameters = UrlRedirectActionParameters_TypeName("DeliveryRuleUrlRedirectActionParameters")

// Mapping from string to UrlRedirectActionParameters_TypeName
var urlRedirectActionParameters_TypeName_Values = map[string]UrlRedirectActionParameters_TypeName{
	"deliveryruleurlredirectactionparameters": UrlRedirectActionParameters_TypeName_DeliveryRuleUrlRedirectActionParameters,
}

// +kubebuilder:validation:Enum={"DeliveryRuleUrlRewriteActionParameters"}
type UrlRewriteActionParameters_TypeName string

const UrlRewriteActionParameters_TypeName_DeliveryRuleUrlRewriteActionParameters = UrlRewriteActionParameters_TypeName("DeliveryRuleUrlRewriteActionParameters")

// Mapping from string to UrlRewriteActionParameters_TypeName
var urlRewriteActionParameters_TypeName_Values = map[string]UrlRewriteActionParameters_TypeName{
	"deliveryruleurlrewriteactionparameters": UrlRewriteActionParameters_TypeName_DeliveryRuleUrlRewriteActionParameters,
}

// +kubebuilder:validation:Enum={"SHA256"}
type UrlSigningActionParameters_Algorithm string

const UrlSigningActionParameters_Algorithm_SHA256 = UrlSigningActionParameters_Algorithm("SHA256")

// Mapping from string to UrlSigningActionParameters_Algorithm
var urlSigningActionParameters_Algorithm_Values = map[string]UrlSigningActionParameters_Algorithm{
	"sha256": UrlSigningActionParameters_Algorithm_SHA256,
}

// +kubebuilder:validation:Enum={"DeliveryRuleUrlSigningActionParameters"}
type UrlSigningActionParameters_TypeName string

const UrlSigningActionParameters_TypeName_DeliveryRuleUrlSigningActionParameters = UrlSigningActionParameters_TypeName("DeliveryRuleUrlSigningActionParameters")

// Mapping from string to UrlSigningActionParameters_TypeName
var urlSigningActionParameters_TypeName_Values = map[string]UrlSigningActionParameters_TypeName{
	"deliveryruleurlsigningactionparameters": UrlSigningActionParameters_TypeName_DeliveryRuleUrlSigningActionParameters,
}

// Defines how to identify a parameter for a specific purpose e.g. expires
type UrlSigningParamIdentifier struct {
	// ParamIndicator: Indicates the purpose of the parameter
	ParamIndicator *UrlSigningParamIdentifier_ParamIndicator `json:"paramIndicator,omitempty"`

	// ParamName: Parameter name
	ParamName *string `json:"paramName,omitempty"`
}

// +kubebuilder:validation:Enum={"HonorOrigin","OverrideAlways","OverrideIfOriginMissing"}
type CacheConfiguration_CacheBehavior string

const (
	CacheConfiguration_CacheBehavior_HonorOrigin             = CacheConfiguration_CacheBehavior("HonorOrigin")
	CacheConfiguration_CacheBehavior_OverrideAlways          = CacheConfiguration_CacheBehavior("OverrideAlways")
	CacheConfiguration_CacheBehavior_OverrideIfOriginMissing = CacheConfiguration_CacheBehavior("OverrideIfOriginMissing")
)

// Mapping from string to CacheConfiguration_CacheBehavior
var cacheConfiguration_CacheBehavior_Values = map[string]CacheConfiguration_CacheBehavior{
	"honororigin":             CacheConfiguration_CacheBehavior_HonorOrigin,
	"overridealways":          CacheConfiguration_CacheBehavior_OverrideAlways,
	"overrideiforiginmissing": CacheConfiguration_CacheBehavior_OverrideIfOriginMissing,
}

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

const (
	CacheConfiguration_IsCompressionEnabled_Disabled = CacheConfiguration_IsCompressionEnabled("Disabled")
	CacheConfiguration_IsCompressionEnabled_Enabled  = CacheConfiguration_IsCompressionEnabled("Enabled")
)

// Mapping from string to CacheConfiguration_IsCompressionEnabled
var cacheConfiguration_IsCompressionEnabled_Values = map[string]CacheConfiguration_IsCompressionEnabled{
	"disabled": CacheConfiguration_IsCompressionEnabled_Disabled,
	"enabled":  CacheConfiguration_IsCompressionEnabled_Enabled,
}

// +kubebuilder:validation:Enum={"IgnoreQueryString","IgnoreSpecifiedQueryStrings","IncludeSpecifiedQueryStrings","UseQueryString"}
type CacheConfiguration_QueryStringCachingBehavior string

const (
	CacheConfiguration_QueryStringCachingBehavior_IgnoreQueryString            = CacheConfiguration_QueryStringCachingBehavior("IgnoreQueryString")
	CacheConfiguration_QueryStringCachingBehavior_IgnoreSpecifiedQueryStrings  = CacheConfiguration_QueryStringCachingBehavior("IgnoreSpecifiedQueryStrings")
	CacheConfiguration_QueryStringCachingBehavior_IncludeSpecifiedQueryStrings = CacheConfiguration_QueryStringCachingBehavior("IncludeSpecifiedQueryStrings")
	CacheConfiguration_QueryStringCachingBehavior_UseQueryString               = CacheConfiguration_QueryStringCachingBehavior("UseQueryString")
)

// Mapping from string to CacheConfiguration_QueryStringCachingBehavior
var cacheConfiguration_QueryStringCachingBehavior_Values = map[string]CacheConfiguration_QueryStringCachingBehavior{
	"ignorequerystring":            CacheConfiguration_QueryStringCachingBehavior_IgnoreQueryString,
	"ignorespecifiedquerystrings":  CacheConfiguration_QueryStringCachingBehavior_IgnoreSpecifiedQueryStrings,
	"includespecifiedquerystrings": CacheConfiguration_QueryStringCachingBehavior_IncludeSpecifiedQueryStrings,
	"usequerystring":               CacheConfiguration_QueryStringCachingBehavior_UseQueryString,
}

// +kubebuilder:validation:Enum={"HttpOnly","HttpsOnly","MatchRequest"}
type OriginGroupOverride_ForwardingProtocol string

const (
	OriginGroupOverride_ForwardingProtocol_HttpOnly     = OriginGroupOverride_ForwardingProtocol("HttpOnly")
	OriginGroupOverride_ForwardingProtocol_HttpsOnly    = OriginGroupOverride_ForwardingProtocol("HttpsOnly")
	OriginGroupOverride_ForwardingProtocol_MatchRequest = OriginGroupOverride_ForwardingProtocol("MatchRequest")
)

// Mapping from string to OriginGroupOverride_ForwardingProtocol
var originGroupOverride_ForwardingProtocol_Values = map[string]OriginGroupOverride_ForwardingProtocol{
	"httponly":     OriginGroupOverride_ForwardingProtocol_HttpOnly,
	"httpsonly":    OriginGroupOverride_ForwardingProtocol_HttpsOnly,
	"matchrequest": OriginGroupOverride_ForwardingProtocol_MatchRequest,
}

// +kubebuilder:validation:Enum={"Expires","KeyId","Signature"}
type UrlSigningParamIdentifier_ParamIndicator string

const (
	UrlSigningParamIdentifier_ParamIndicator_Expires   = UrlSigningParamIdentifier_ParamIndicator("Expires")
	UrlSigningParamIdentifier_ParamIndicator_KeyId     = UrlSigningParamIdentifier_ParamIndicator("KeyId")
	UrlSigningParamIdentifier_ParamIndicator_Signature = UrlSigningParamIdentifier_ParamIndicator("Signature")
)

// Mapping from string to UrlSigningParamIdentifier_ParamIndicator
var urlSigningParamIdentifier_ParamIndicator_Values = map[string]UrlSigningParamIdentifier_ParamIndicator{
	"expires":   UrlSigningParamIdentifier_ParamIndicator_Expires,
	"keyid":     UrlSigningParamIdentifier_ParamIndicator_KeyId,
	"signature": UrlSigningParamIdentifier_ParamIndicator_Signature,
}
