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

import "encoding/json"

// Event Subscription
type EventSubscription_STATUS struct {
	// Id: Fully qualified identifier of the resource.
	Id *string `json:"id,omitempty"`

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

	// Properties: Properties of the event subscription.
	Properties *EventSubscriptionProperties_STATUS `json:"properties,omitempty"`

	// SystemData: The system metadata relating to Event Subscription resource.
	SystemData *SystemData_STATUS `json:"systemData,omitempty"`

	// Type: Type of the resource.
	Type *string `json:"type,omitempty"`
}

// Properties of the Event Subscription.
type EventSubscriptionProperties_STATUS struct {
	// DeadLetterDestination: The DeadLetter destination of the event subscription.
	DeadLetterDestination *DeadLetterDestination_STATUS `json:"deadLetterDestination,omitempty"`

	// Destination: Information about the destination where events have to be delivered for the event subscription.
	Destination *EventSubscriptionDestination_STATUS `json:"destination,omitempty"`

	// EventDeliverySchema: The event delivery schema for the event subscription.
	EventDeliverySchema *EventSubscriptionProperties_EventDeliverySchema_STATUS `json:"eventDeliverySchema,omitempty"`

	// ExpirationTimeUtc: Expiration time of the event subscription.
	ExpirationTimeUtc *string `json:"expirationTimeUtc,omitempty"`

	// Filter: Information about the filter for the event subscription.
	Filter *EventSubscriptionFilter_STATUS `json:"filter,omitempty"`

	// Labels: List of user defined labels.
	Labels []string `json:"labels,omitempty"`

	// ProvisioningState: Provisioning state of the event subscription.
	ProvisioningState *EventSubscriptionProperties_ProvisioningState_STATUS `json:"provisioningState,omitempty"`

	// RetryPolicy: The retry policy for events. This can be used to configure maximum number of delivery attempts and time to
	// live for events.
	RetryPolicy *RetryPolicy_STATUS `json:"retryPolicy,omitempty"`

	// Topic: Name of the topic of the event subscription.
	Topic *string `json:"topic,omitempty"`
}

type DeadLetterDestination_STATUS struct {
	// StorageBlob: Mutually exclusive with all other properties
	StorageBlob *StorageBlobDeadLetterDestination_STATUS `json:"storageBlob,omitempty"`
}

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

	return nil, nil
}

// UnmarshalJSON unmarshals the DeadLetterDestination_STATUS
func (destination *DeadLetterDestination_STATUS) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["endpointType"]
	if discriminator == "StorageBlob" {
		destination.StorageBlob = &StorageBlobDeadLetterDestination_STATUS{}
		return json.Unmarshal(data, destination.StorageBlob)
	}

	// No error
	return nil
}

type EventSubscriptionDestination_STATUS struct {
	// AzureFunction: Mutually exclusive with all other properties
	AzureFunction *AzureFunctionEventSubscriptionDestination_STATUS `json:"azureFunction,omitempty"`

	// EventHub: Mutually exclusive with all other properties
	EventHub *EventHubEventSubscriptionDestination_STATUS `json:"eventHub,omitempty"`

	// HybridConnection: Mutually exclusive with all other properties
	HybridConnection *HybridConnectionEventSubscriptionDestination_STATUS `json:"hybridConnection,omitempty"`

	// ServiceBusQueue: Mutually exclusive with all other properties
	ServiceBusQueue *ServiceBusQueueEventSubscriptionDestination_STATUS `json:"serviceBusQueue,omitempty"`

	// ServiceBusTopic: Mutually exclusive with all other properties
	ServiceBusTopic *ServiceBusTopicEventSubscriptionDestination_STATUS `json:"serviceBusTopic,omitempty"`

	// StorageQueue: Mutually exclusive with all other properties
	StorageQueue *StorageQueueEventSubscriptionDestination_STATUS `json:"storageQueue,omitempty"`

	// WebHook: Mutually exclusive with all other properties
	WebHook *WebHookEventSubscriptionDestination_STATUS `json:"webHook,omitempty"`
}

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

	if destination.EventHub != nil {
		return json.Marshal(destination.EventHub)
	}

	if destination.HybridConnection != nil {
		return json.Marshal(destination.HybridConnection)
	}

	if destination.ServiceBusQueue != nil {
		return json.Marshal(destination.ServiceBusQueue)
	}

	if destination.ServiceBusTopic != nil {
		return json.Marshal(destination.ServiceBusTopic)
	}

	if destination.StorageQueue != nil {
		return json.Marshal(destination.StorageQueue)
	}

	if destination.WebHook != nil {
		return json.Marshal(destination.WebHook)
	}

	return nil, nil
}

// UnmarshalJSON unmarshals the EventSubscriptionDestination_STATUS
func (destination *EventSubscriptionDestination_STATUS) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["endpointType"]
	if discriminator == "AzureFunction" {
		destination.AzureFunction = &AzureFunctionEventSubscriptionDestination_STATUS{}
		return json.Unmarshal(data, destination.AzureFunction)
	}
	if discriminator == "EventHub" {
		destination.EventHub = &EventHubEventSubscriptionDestination_STATUS{}
		return json.Unmarshal(data, destination.EventHub)
	}
	if discriminator == "HybridConnection" {
		destination.HybridConnection = &HybridConnectionEventSubscriptionDestination_STATUS{}
		return json.Unmarshal(data, destination.HybridConnection)
	}
	if discriminator == "ServiceBusQueue" {
		destination.ServiceBusQueue = &ServiceBusQueueEventSubscriptionDestination_STATUS{}
		return json.Unmarshal(data, destination.ServiceBusQueue)
	}
	if discriminator == "ServiceBusTopic" {
		destination.ServiceBusTopic = &ServiceBusTopicEventSubscriptionDestination_STATUS{}
		return json.Unmarshal(data, destination.ServiceBusTopic)
	}
	if discriminator == "StorageQueue" {
		destination.StorageQueue = &StorageQueueEventSubscriptionDestination_STATUS{}
		return json.Unmarshal(data, destination.StorageQueue)
	}
	if discriminator == "WebHook" {
		destination.WebHook = &WebHookEventSubscriptionDestination_STATUS{}
		return json.Unmarshal(data, destination.WebHook)
	}

	// No error
	return nil
}

// Filter for the Event Subscription.
type EventSubscriptionFilter_STATUS struct {
	// AdvancedFilters: An array of advanced filters that are used for filtering event subscriptions.
	AdvancedFilters []AdvancedFilter_STATUS `json:"advancedFilters,omitempty"`

	// IncludedEventTypes: A list of applicable event types that need to be part of the event subscription. If it is desired to
	// subscribe to all default event types, set the IncludedEventTypes to null.
	IncludedEventTypes []string `json:"includedEventTypes,omitempty"`

	// IsSubjectCaseSensitive: Specifies if the SubjectBeginsWith and SubjectEndsWith properties of the filter
	// should be compared in a case sensitive manner.
	IsSubjectCaseSensitive *bool `json:"isSubjectCaseSensitive,omitempty"`

	// SubjectBeginsWith: An optional string to filter events for an event subscription based on a resource path prefix.
	// The format of this depends on the publisher of the events.
	// Wildcard characters are not supported in this path.
	SubjectBeginsWith *string `json:"subjectBeginsWith,omitempty"`

	// SubjectEndsWith: An optional string to filter events for an event subscription based on a resource path suffix.
	// Wildcard characters are not supported in this path.
	SubjectEndsWith *string `json:"subjectEndsWith,omitempty"`
}

type EventSubscriptionProperties_EventDeliverySchema_STATUS string

const (
	EventSubscriptionProperties_EventDeliverySchema_STATUS_CloudEventSchemaV1_0 = EventSubscriptionProperties_EventDeliverySchema_STATUS("CloudEventSchemaV1_0")
	EventSubscriptionProperties_EventDeliverySchema_STATUS_CustomInputSchema    = EventSubscriptionProperties_EventDeliverySchema_STATUS("CustomInputSchema")
	EventSubscriptionProperties_EventDeliverySchema_STATUS_EventGridSchema      = EventSubscriptionProperties_EventDeliverySchema_STATUS("EventGridSchema")
)

// Mapping from string to EventSubscriptionProperties_EventDeliverySchema_STATUS
var eventSubscriptionProperties_EventDeliverySchema_STATUS_Values = map[string]EventSubscriptionProperties_EventDeliverySchema_STATUS{
	"cloudeventschemav1_0": EventSubscriptionProperties_EventDeliverySchema_STATUS_CloudEventSchemaV1_0,
	"custominputschema":    EventSubscriptionProperties_EventDeliverySchema_STATUS_CustomInputSchema,
	"eventgridschema":      EventSubscriptionProperties_EventDeliverySchema_STATUS_EventGridSchema,
}

type EventSubscriptionProperties_ProvisioningState_STATUS string

const (
	EventSubscriptionProperties_ProvisioningState_STATUS_AwaitingManualAction = EventSubscriptionProperties_ProvisioningState_STATUS("AwaitingManualAction")
	EventSubscriptionProperties_ProvisioningState_STATUS_Canceled             = EventSubscriptionProperties_ProvisioningState_STATUS("Canceled")
	EventSubscriptionProperties_ProvisioningState_STATUS_Creating             = EventSubscriptionProperties_ProvisioningState_STATUS("Creating")
	EventSubscriptionProperties_ProvisioningState_STATUS_Deleting             = EventSubscriptionProperties_ProvisioningState_STATUS("Deleting")
	EventSubscriptionProperties_ProvisioningState_STATUS_Failed               = EventSubscriptionProperties_ProvisioningState_STATUS("Failed")
	EventSubscriptionProperties_ProvisioningState_STATUS_Succeeded            = EventSubscriptionProperties_ProvisioningState_STATUS("Succeeded")
	EventSubscriptionProperties_ProvisioningState_STATUS_Updating             = EventSubscriptionProperties_ProvisioningState_STATUS("Updating")
)

// Mapping from string to EventSubscriptionProperties_ProvisioningState_STATUS
var eventSubscriptionProperties_ProvisioningState_STATUS_Values = map[string]EventSubscriptionProperties_ProvisioningState_STATUS{
	"awaitingmanualaction": EventSubscriptionProperties_ProvisioningState_STATUS_AwaitingManualAction,
	"canceled":             EventSubscriptionProperties_ProvisioningState_STATUS_Canceled,
	"creating":             EventSubscriptionProperties_ProvisioningState_STATUS_Creating,
	"deleting":             EventSubscriptionProperties_ProvisioningState_STATUS_Deleting,
	"failed":               EventSubscriptionProperties_ProvisioningState_STATUS_Failed,
	"succeeded":            EventSubscriptionProperties_ProvisioningState_STATUS_Succeeded,
	"updating":             EventSubscriptionProperties_ProvisioningState_STATUS_Updating,
}

// Information about the retry policy for an event subscription.
type RetryPolicy_STATUS struct {
	// EventTimeToLiveInMinutes: Time To Live (in minutes) for events.
	EventTimeToLiveInMinutes *int `json:"eventTimeToLiveInMinutes,omitempty"`

	// MaxDeliveryAttempts: Maximum number of delivery retry attempts for events.
	MaxDeliveryAttempts *int `json:"maxDeliveryAttempts,omitempty"`
}

type AdvancedFilter_STATUS struct {
	// BoolEquals: Mutually exclusive with all other properties
	BoolEquals *BoolEqualsAdvancedFilter_STATUS `json:"boolEquals,omitempty"`

	// NumberGreaterThan: Mutually exclusive with all other properties
	NumberGreaterThan *NumberGreaterThanAdvancedFilter_STATUS `json:"numberGreaterThan,omitempty"`

	// NumberGreaterThanOrEquals: Mutually exclusive with all other properties
	NumberGreaterThanOrEquals *NumberGreaterThanOrEqualsAdvancedFilter_STATUS `json:"numberGreaterThanOrEquals,omitempty"`

	// NumberIn: Mutually exclusive with all other properties
	NumberIn *NumberInAdvancedFilter_STATUS `json:"numberIn,omitempty"`

	// NumberLessThan: Mutually exclusive with all other properties
	NumberLessThan *NumberLessThanAdvancedFilter_STATUS `json:"numberLessThan,omitempty"`

	// NumberLessThanOrEquals: Mutually exclusive with all other properties
	NumberLessThanOrEquals *NumberLessThanOrEqualsAdvancedFilter_STATUS `json:"numberLessThanOrEquals,omitempty"`

	// NumberNotIn: Mutually exclusive with all other properties
	NumberNotIn *NumberNotInAdvancedFilter_STATUS `json:"numberNotIn,omitempty"`

	// StringBeginsWith: Mutually exclusive with all other properties
	StringBeginsWith *StringBeginsWithAdvancedFilter_STATUS `json:"stringBeginsWith,omitempty"`

	// StringContains: Mutually exclusive with all other properties
	StringContains *StringContainsAdvancedFilter_STATUS `json:"stringContains,omitempty"`

	// StringEndsWith: Mutually exclusive with all other properties
	StringEndsWith *StringEndsWithAdvancedFilter_STATUS `json:"stringEndsWith,omitempty"`

	// StringIn: Mutually exclusive with all other properties
	StringIn *StringInAdvancedFilter_STATUS `json:"stringIn,omitempty"`

	// StringNotIn: Mutually exclusive with all other properties
	StringNotIn *StringNotInAdvancedFilter_STATUS `json:"stringNotIn,omitempty"`
}

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

	if filter.NumberGreaterThan != nil {
		return json.Marshal(filter.NumberGreaterThan)
	}

	if filter.NumberGreaterThanOrEquals != nil {
		return json.Marshal(filter.NumberGreaterThanOrEquals)
	}

	if filter.NumberIn != nil {
		return json.Marshal(filter.NumberIn)
	}

	if filter.NumberLessThan != nil {
		return json.Marshal(filter.NumberLessThan)
	}

	if filter.NumberLessThanOrEquals != nil {
		return json.Marshal(filter.NumberLessThanOrEquals)
	}

	if filter.NumberNotIn != nil {
		return json.Marshal(filter.NumberNotIn)
	}

	if filter.StringBeginsWith != nil {
		return json.Marshal(filter.StringBeginsWith)
	}

	if filter.StringContains != nil {
		return json.Marshal(filter.StringContains)
	}

	if filter.StringEndsWith != nil {
		return json.Marshal(filter.StringEndsWith)
	}

	if filter.StringIn != nil {
		return json.Marshal(filter.StringIn)
	}

	if filter.StringNotIn != nil {
		return json.Marshal(filter.StringNotIn)
	}

	return nil, nil
}

// UnmarshalJSON unmarshals the AdvancedFilter_STATUS
func (filter *AdvancedFilter_STATUS) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["operatorType"]
	if discriminator == "BoolEquals" {
		filter.BoolEquals = &BoolEqualsAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.BoolEquals)
	}
	if discriminator == "NumberGreaterThan" {
		filter.NumberGreaterThan = &NumberGreaterThanAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.NumberGreaterThan)
	}
	if discriminator == "NumberGreaterThanOrEquals" {
		filter.NumberGreaterThanOrEquals = &NumberGreaterThanOrEqualsAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.NumberGreaterThanOrEquals)
	}
	if discriminator == "NumberIn" {
		filter.NumberIn = &NumberInAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.NumberIn)
	}
	if discriminator == "NumberLessThan" {
		filter.NumberLessThan = &NumberLessThanAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.NumberLessThan)
	}
	if discriminator == "NumberLessThanOrEquals" {
		filter.NumberLessThanOrEquals = &NumberLessThanOrEqualsAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.NumberLessThanOrEquals)
	}
	if discriminator == "NumberNotIn" {
		filter.NumberNotIn = &NumberNotInAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.NumberNotIn)
	}
	if discriminator == "StringBeginsWith" {
		filter.StringBeginsWith = &StringBeginsWithAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.StringBeginsWith)
	}
	if discriminator == "StringContains" {
		filter.StringContains = &StringContainsAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.StringContains)
	}
	if discriminator == "StringEndsWith" {
		filter.StringEndsWith = &StringEndsWithAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.StringEndsWith)
	}
	if discriminator == "StringIn" {
		filter.StringIn = &StringInAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.StringIn)
	}
	if discriminator == "StringNotIn" {
		filter.StringNotIn = &StringNotInAdvancedFilter_STATUS{}
		return json.Unmarshal(data, filter.StringNotIn)
	}

	// No error
	return nil
}

type AzureFunctionEventSubscriptionDestination_STATUS struct {
	// EndpointType: Type of the endpoint for the event subscription destination.
	EndpointType AzureFunctionEventSubscriptionDestination_EndpointType_STATUS `json:"endpointType,omitempty"`

	// Properties: Azure Function Properties of the event subscription destination.
	Properties *AzureFunctionEventSubscriptionDestinationProperties_STATUS `json:"properties,omitempty"`
}

type EventHubEventSubscriptionDestination_STATUS struct {
	// EndpointType: Type of the endpoint for the event subscription destination.
	EndpointType EventHubEventSubscriptionDestination_EndpointType_STATUS `json:"endpointType,omitempty"`

	// Properties: Event Hub Properties of the event subscription destination.
	Properties *EventHubEventSubscriptionDestinationProperties_STATUS `json:"properties,omitempty"`
}

type HybridConnectionEventSubscriptionDestination_STATUS struct {
	// EndpointType: Type of the endpoint for the event subscription destination.
	EndpointType HybridConnectionEventSubscriptionDestination_EndpointType_STATUS `json:"endpointType,omitempty"`

	// Properties: Hybrid connection Properties of the event subscription destination.
	Properties *HybridConnectionEventSubscriptionDestinationProperties_STATUS `json:"properties,omitempty"`
}

type ServiceBusQueueEventSubscriptionDestination_STATUS struct {
	// EndpointType: Type of the endpoint for the event subscription destination.
	EndpointType ServiceBusQueueEventSubscriptionDestination_EndpointType_STATUS `json:"endpointType,omitempty"`

	// Properties: Service Bus Properties of the event subscription destination.
	Properties *ServiceBusQueueEventSubscriptionDestinationProperties_STATUS `json:"properties,omitempty"`
}

type ServiceBusTopicEventSubscriptionDestination_STATUS struct {
	// EndpointType: Type of the endpoint for the event subscription destination.
	EndpointType ServiceBusTopicEventSubscriptionDestination_EndpointType_STATUS `json:"endpointType,omitempty"`

	// Properties: Service Bus Topic Properties of the event subscription destination.
	Properties *ServiceBusTopicEventSubscriptionDestinationProperties_STATUS `json:"properties,omitempty"`
}

type StorageBlobDeadLetterDestination_STATUS struct {
	// EndpointType: Type of the endpoint for the dead letter destination
	EndpointType StorageBlobDeadLetterDestination_EndpointType_STATUS `json:"endpointType,omitempty"`

	// Properties: The properties of the Storage Blob based deadletter destination
	Properties *StorageBlobDeadLetterDestinationProperties_STATUS `json:"properties,omitempty"`
}

type StorageQueueEventSubscriptionDestination_STATUS struct {
	// EndpointType: Type of the endpoint for the event subscription destination.
	EndpointType StorageQueueEventSubscriptionDestination_EndpointType_STATUS `json:"endpointType,omitempty"`

	// Properties: Storage Queue Properties of the event subscription destination.
	Properties *StorageQueueEventSubscriptionDestinationProperties_STATUS `json:"properties,omitempty"`
}

type WebHookEventSubscriptionDestination_STATUS struct {
	// EndpointType: Type of the endpoint for the event subscription destination.
	EndpointType WebHookEventSubscriptionDestination_EndpointType_STATUS `json:"endpointType,omitempty"`

	// Properties: WebHook Properties of the event subscription destination.
	Properties *WebHookEventSubscriptionDestinationProperties_STATUS `json:"properties,omitempty"`
}

type AzureFunctionEventSubscriptionDestination_EndpointType_STATUS string

const AzureFunctionEventSubscriptionDestination_EndpointType_STATUS_AzureFunction = AzureFunctionEventSubscriptionDestination_EndpointType_STATUS("AzureFunction")

// Mapping from string to AzureFunctionEventSubscriptionDestination_EndpointType_STATUS
var azureFunctionEventSubscriptionDestination_EndpointType_STATUS_Values = map[string]AzureFunctionEventSubscriptionDestination_EndpointType_STATUS{
	"azurefunction": AzureFunctionEventSubscriptionDestination_EndpointType_STATUS_AzureFunction,
}

// The properties that represent the Azure Function destination of an event subscription.
type AzureFunctionEventSubscriptionDestinationProperties_STATUS struct {
	// MaxEventsPerBatch: Maximum number of events per batch.
	MaxEventsPerBatch *int `json:"maxEventsPerBatch,omitempty"`

	// PreferredBatchSizeInKilobytes: Preferred batch size in Kilobytes.
	PreferredBatchSizeInKilobytes *int `json:"preferredBatchSizeInKilobytes,omitempty"`

	// ResourceId: The Azure Resource Id that represents the endpoint of the Azure Function destination of an event
	// subscription.
	ResourceId *string `json:"resourceId,omitempty"`
}

type BoolEqualsAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType BoolEqualsAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Value: The boolean filter value.
	Value *bool `json:"value,omitempty"`
}

type EventHubEventSubscriptionDestination_EndpointType_STATUS string

const EventHubEventSubscriptionDestination_EndpointType_STATUS_EventHub = EventHubEventSubscriptionDestination_EndpointType_STATUS("EventHub")

// Mapping from string to EventHubEventSubscriptionDestination_EndpointType_STATUS
var eventHubEventSubscriptionDestination_EndpointType_STATUS_Values = map[string]EventHubEventSubscriptionDestination_EndpointType_STATUS{
	"eventhub": EventHubEventSubscriptionDestination_EndpointType_STATUS_EventHub,
}

// The properties for a event hub destination.
type EventHubEventSubscriptionDestinationProperties_STATUS struct {
	// ResourceId: The Azure Resource Id that represents the endpoint of an Event Hub destination of an event subscription.
	ResourceId *string `json:"resourceId,omitempty"`
}

type HybridConnectionEventSubscriptionDestination_EndpointType_STATUS string

const HybridConnectionEventSubscriptionDestination_EndpointType_STATUS_HybridConnection = HybridConnectionEventSubscriptionDestination_EndpointType_STATUS("HybridConnection")

// Mapping from string to HybridConnectionEventSubscriptionDestination_EndpointType_STATUS
var hybridConnectionEventSubscriptionDestination_EndpointType_STATUS_Values = map[string]HybridConnectionEventSubscriptionDestination_EndpointType_STATUS{
	"hybridconnection": HybridConnectionEventSubscriptionDestination_EndpointType_STATUS_HybridConnection,
}

// The properties for a hybrid connection destination.
type HybridConnectionEventSubscriptionDestinationProperties_STATUS struct {
	// ResourceId: The Azure Resource ID of an hybrid connection that is the destination of an event subscription.
	ResourceId *string `json:"resourceId,omitempty"`
}

type NumberGreaterThanAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType NumberGreaterThanAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Value: The filter value.
	Value *float64 `json:"value,omitempty"`
}

type NumberGreaterThanOrEqualsAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType NumberGreaterThanOrEqualsAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Value: The filter value.
	Value *float64 `json:"value,omitempty"`
}

type NumberInAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType NumberInAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Values: The set of filter values.
	Values []float64 `json:"values,omitempty"`
}

type NumberLessThanAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType NumberLessThanAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Value: The filter value.
	Value *float64 `json:"value,omitempty"`
}

type NumberLessThanOrEqualsAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType NumberLessThanOrEqualsAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Value: The filter value.
	Value *float64 `json:"value,omitempty"`
}

type NumberNotInAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType NumberNotInAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Values: The set of filter values.
	Values []float64 `json:"values,omitempty"`
}

type ServiceBusQueueEventSubscriptionDestination_EndpointType_STATUS string

const ServiceBusQueueEventSubscriptionDestination_EndpointType_STATUS_ServiceBusQueue = ServiceBusQueueEventSubscriptionDestination_EndpointType_STATUS("ServiceBusQueue")

// Mapping from string to ServiceBusQueueEventSubscriptionDestination_EndpointType_STATUS
var serviceBusQueueEventSubscriptionDestination_EndpointType_STATUS_Values = map[string]ServiceBusQueueEventSubscriptionDestination_EndpointType_STATUS{
	"servicebusqueue": ServiceBusQueueEventSubscriptionDestination_EndpointType_STATUS_ServiceBusQueue,
}

// The properties that represent the Service Bus destination of an event subscription.
type ServiceBusQueueEventSubscriptionDestinationProperties_STATUS struct {
	// ResourceId: The Azure Resource Id that represents the endpoint of the Service Bus destination of an event subscription.
	ResourceId *string `json:"resourceId,omitempty"`
}

type ServiceBusTopicEventSubscriptionDestination_EndpointType_STATUS string

const ServiceBusTopicEventSubscriptionDestination_EndpointType_STATUS_ServiceBusTopic = ServiceBusTopicEventSubscriptionDestination_EndpointType_STATUS("ServiceBusTopic")

// Mapping from string to ServiceBusTopicEventSubscriptionDestination_EndpointType_STATUS
var serviceBusTopicEventSubscriptionDestination_EndpointType_STATUS_Values = map[string]ServiceBusTopicEventSubscriptionDestination_EndpointType_STATUS{
	"servicebustopic": ServiceBusTopicEventSubscriptionDestination_EndpointType_STATUS_ServiceBusTopic,
}

// The properties that represent the Service Bus Topic destination of an event subscription.
type ServiceBusTopicEventSubscriptionDestinationProperties_STATUS struct {
	// ResourceId: The Azure Resource Id that represents the endpoint of the Service Bus Topic destination of an event
	// subscription.
	ResourceId *string `json:"resourceId,omitempty"`
}

type StorageBlobDeadLetterDestination_EndpointType_STATUS string

const StorageBlobDeadLetterDestination_EndpointType_STATUS_StorageBlob = StorageBlobDeadLetterDestination_EndpointType_STATUS("StorageBlob")

// Mapping from string to StorageBlobDeadLetterDestination_EndpointType_STATUS
var storageBlobDeadLetterDestination_EndpointType_STATUS_Values = map[string]StorageBlobDeadLetterDestination_EndpointType_STATUS{
	"storageblob": StorageBlobDeadLetterDestination_EndpointType_STATUS_StorageBlob,
}

// Properties of the storage blob based dead letter destination.
type StorageBlobDeadLetterDestinationProperties_STATUS struct {
	// BlobContainerName: The name of the Storage blob container that is the destination of the deadletter events
	BlobContainerName *string `json:"blobContainerName,omitempty"`

	// ResourceId: The Azure Resource ID of the storage account that is the destination of the deadletter events
	ResourceId *string `json:"resourceId,omitempty"`
}

type StorageQueueEventSubscriptionDestination_EndpointType_STATUS string

const StorageQueueEventSubscriptionDestination_EndpointType_STATUS_StorageQueue = StorageQueueEventSubscriptionDestination_EndpointType_STATUS("StorageQueue")

// Mapping from string to StorageQueueEventSubscriptionDestination_EndpointType_STATUS
var storageQueueEventSubscriptionDestination_EndpointType_STATUS_Values = map[string]StorageQueueEventSubscriptionDestination_EndpointType_STATUS{
	"storagequeue": StorageQueueEventSubscriptionDestination_EndpointType_STATUS_StorageQueue,
}

// The properties for a storage queue destination.
type StorageQueueEventSubscriptionDestinationProperties_STATUS struct {
	// QueueName: The name of the Storage queue under a storage account that is the destination of an event subscription.
	QueueName *string `json:"queueName,omitempty"`

	// ResourceId: The Azure Resource ID of the storage account that contains the queue that is the destination of an event
	// subscription.
	ResourceId *string `json:"resourceId,omitempty"`
}

type StringBeginsWithAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType StringBeginsWithAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Values: The set of filter values.
	Values []string `json:"values,omitempty"`
}

type StringContainsAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType StringContainsAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Values: The set of filter values.
	Values []string `json:"values,omitempty"`
}

type StringEndsWithAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType StringEndsWithAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Values: The set of filter values.
	Values []string `json:"values,omitempty"`
}

type StringInAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType StringInAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Values: The set of filter values.
	Values []string `json:"values,omitempty"`
}

type StringNotInAdvancedFilter_STATUS struct {
	// Key: The field/property in the event based on which you want to filter.
	Key *string `json:"key,omitempty"`

	// OperatorType: The operator type used for filtering, e.g., NumberIn, StringContains, BoolEquals and others.
	OperatorType StringNotInAdvancedFilter_OperatorType_STATUS `json:"operatorType,omitempty"`

	// Values: The set of filter values.
	Values []string `json:"values,omitempty"`
}

type WebHookEventSubscriptionDestination_EndpointType_STATUS string

const WebHookEventSubscriptionDestination_EndpointType_STATUS_WebHook = WebHookEventSubscriptionDestination_EndpointType_STATUS("WebHook")

// Mapping from string to WebHookEventSubscriptionDestination_EndpointType_STATUS
var webHookEventSubscriptionDestination_EndpointType_STATUS_Values = map[string]WebHookEventSubscriptionDestination_EndpointType_STATUS{
	"webhook": WebHookEventSubscriptionDestination_EndpointType_STATUS_WebHook,
}

// Information about the webhook destination properties for an event subscription.
type WebHookEventSubscriptionDestinationProperties_STATUS struct {
	// AzureActiveDirectoryApplicationIdOrUri: The Azure Active Directory Application ID or URI to get the access token that
	// will be included as the bearer token in delivery requests.
	AzureActiveDirectoryApplicationIdOrUri *string `json:"azureActiveDirectoryApplicationIdOrUri,omitempty"`

	// AzureActiveDirectoryTenantId: The Azure Active Directory Tenant ID to get the access token that will be included as the
	// bearer token in delivery requests.
	AzureActiveDirectoryTenantId *string `json:"azureActiveDirectoryTenantId,omitempty"`

	// EndpointBaseUrl: The base URL that represents the endpoint of the destination of an event subscription.
	EndpointBaseUrl *string `json:"endpointBaseUrl,omitempty"`

	// MaxEventsPerBatch: Maximum number of events per batch.
	MaxEventsPerBatch *int `json:"maxEventsPerBatch,omitempty"`

	// PreferredBatchSizeInKilobytes: Preferred batch size in Kilobytes.
	PreferredBatchSizeInKilobytes *int `json:"preferredBatchSizeInKilobytes,omitempty"`
}

type BoolEqualsAdvancedFilter_OperatorType_STATUS string

const BoolEqualsAdvancedFilter_OperatorType_STATUS_BoolEquals = BoolEqualsAdvancedFilter_OperatorType_STATUS("BoolEquals")

// Mapping from string to BoolEqualsAdvancedFilter_OperatorType_STATUS
var boolEqualsAdvancedFilter_OperatorType_STATUS_Values = map[string]BoolEqualsAdvancedFilter_OperatorType_STATUS{
	"boolequals": BoolEqualsAdvancedFilter_OperatorType_STATUS_BoolEquals,
}

type NumberGreaterThanAdvancedFilter_OperatorType_STATUS string

const NumberGreaterThanAdvancedFilter_OperatorType_STATUS_NumberGreaterThan = NumberGreaterThanAdvancedFilter_OperatorType_STATUS("NumberGreaterThan")

// Mapping from string to NumberGreaterThanAdvancedFilter_OperatorType_STATUS
var numberGreaterThanAdvancedFilter_OperatorType_STATUS_Values = map[string]NumberGreaterThanAdvancedFilter_OperatorType_STATUS{
	"numbergreaterthan": NumberGreaterThanAdvancedFilter_OperatorType_STATUS_NumberGreaterThan,
}

type NumberGreaterThanOrEqualsAdvancedFilter_OperatorType_STATUS string

const NumberGreaterThanOrEqualsAdvancedFilter_OperatorType_STATUS_NumberGreaterThanOrEquals = NumberGreaterThanOrEqualsAdvancedFilter_OperatorType_STATUS("NumberGreaterThanOrEquals")

// Mapping from string to NumberGreaterThanOrEqualsAdvancedFilter_OperatorType_STATUS
var numberGreaterThanOrEqualsAdvancedFilter_OperatorType_STATUS_Values = map[string]NumberGreaterThanOrEqualsAdvancedFilter_OperatorType_STATUS{
	"numbergreaterthanorequals": NumberGreaterThanOrEqualsAdvancedFilter_OperatorType_STATUS_NumberGreaterThanOrEquals,
}

type NumberInAdvancedFilter_OperatorType_STATUS string

const NumberInAdvancedFilter_OperatorType_STATUS_NumberIn = NumberInAdvancedFilter_OperatorType_STATUS("NumberIn")

// Mapping from string to NumberInAdvancedFilter_OperatorType_STATUS
var numberInAdvancedFilter_OperatorType_STATUS_Values = map[string]NumberInAdvancedFilter_OperatorType_STATUS{
	"numberin": NumberInAdvancedFilter_OperatorType_STATUS_NumberIn,
}

type NumberLessThanAdvancedFilter_OperatorType_STATUS string

const NumberLessThanAdvancedFilter_OperatorType_STATUS_NumberLessThan = NumberLessThanAdvancedFilter_OperatorType_STATUS("NumberLessThan")

// Mapping from string to NumberLessThanAdvancedFilter_OperatorType_STATUS
var numberLessThanAdvancedFilter_OperatorType_STATUS_Values = map[string]NumberLessThanAdvancedFilter_OperatorType_STATUS{
	"numberlessthan": NumberLessThanAdvancedFilter_OperatorType_STATUS_NumberLessThan,
}

type NumberLessThanOrEqualsAdvancedFilter_OperatorType_STATUS string

const NumberLessThanOrEqualsAdvancedFilter_OperatorType_STATUS_NumberLessThanOrEquals = NumberLessThanOrEqualsAdvancedFilter_OperatorType_STATUS("NumberLessThanOrEquals")

// Mapping from string to NumberLessThanOrEqualsAdvancedFilter_OperatorType_STATUS
var numberLessThanOrEqualsAdvancedFilter_OperatorType_STATUS_Values = map[string]NumberLessThanOrEqualsAdvancedFilter_OperatorType_STATUS{
	"numberlessthanorequals": NumberLessThanOrEqualsAdvancedFilter_OperatorType_STATUS_NumberLessThanOrEquals,
}

type NumberNotInAdvancedFilter_OperatorType_STATUS string

const NumberNotInAdvancedFilter_OperatorType_STATUS_NumberNotIn = NumberNotInAdvancedFilter_OperatorType_STATUS("NumberNotIn")

// Mapping from string to NumberNotInAdvancedFilter_OperatorType_STATUS
var numberNotInAdvancedFilter_OperatorType_STATUS_Values = map[string]NumberNotInAdvancedFilter_OperatorType_STATUS{
	"numbernotin": NumberNotInAdvancedFilter_OperatorType_STATUS_NumberNotIn,
}

type StringBeginsWithAdvancedFilter_OperatorType_STATUS string

const StringBeginsWithAdvancedFilter_OperatorType_STATUS_StringBeginsWith = StringBeginsWithAdvancedFilter_OperatorType_STATUS("StringBeginsWith")

// Mapping from string to StringBeginsWithAdvancedFilter_OperatorType_STATUS
var stringBeginsWithAdvancedFilter_OperatorType_STATUS_Values = map[string]StringBeginsWithAdvancedFilter_OperatorType_STATUS{
	"stringbeginswith": StringBeginsWithAdvancedFilter_OperatorType_STATUS_StringBeginsWith,
}

type StringContainsAdvancedFilter_OperatorType_STATUS string

const StringContainsAdvancedFilter_OperatorType_STATUS_StringContains = StringContainsAdvancedFilter_OperatorType_STATUS("StringContains")

// Mapping from string to StringContainsAdvancedFilter_OperatorType_STATUS
var stringContainsAdvancedFilter_OperatorType_STATUS_Values = map[string]StringContainsAdvancedFilter_OperatorType_STATUS{
	"stringcontains": StringContainsAdvancedFilter_OperatorType_STATUS_StringContains,
}

type StringEndsWithAdvancedFilter_OperatorType_STATUS string

const StringEndsWithAdvancedFilter_OperatorType_STATUS_StringEndsWith = StringEndsWithAdvancedFilter_OperatorType_STATUS("StringEndsWith")

// Mapping from string to StringEndsWithAdvancedFilter_OperatorType_STATUS
var stringEndsWithAdvancedFilter_OperatorType_STATUS_Values = map[string]StringEndsWithAdvancedFilter_OperatorType_STATUS{
	"stringendswith": StringEndsWithAdvancedFilter_OperatorType_STATUS_StringEndsWith,
}

type StringInAdvancedFilter_OperatorType_STATUS string

const StringInAdvancedFilter_OperatorType_STATUS_StringIn = StringInAdvancedFilter_OperatorType_STATUS("StringIn")

// Mapping from string to StringInAdvancedFilter_OperatorType_STATUS
var stringInAdvancedFilter_OperatorType_STATUS_Values = map[string]StringInAdvancedFilter_OperatorType_STATUS{
	"stringin": StringInAdvancedFilter_OperatorType_STATUS_StringIn,
}

type StringNotInAdvancedFilter_OperatorType_STATUS string

const StringNotInAdvancedFilter_OperatorType_STATUS_StringNotIn = StringNotInAdvancedFilter_OperatorType_STATUS("StringNotIn")

// Mapping from string to StringNotInAdvancedFilter_OperatorType_STATUS
var stringNotInAdvancedFilter_OperatorType_STATUS_Values = map[string]StringNotInAdvancedFilter_OperatorType_STATUS{
	"stringnotin": StringNotInAdvancedFilter_OperatorType_STATUS_StringNotIn,
}
