package eventgrid

// Copyright (c) Microsoft and contributors.  All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by Microsoft (R) AutoRest Code Generator 1.2.2.0
// Changes may cause incorrect behavior and will be lost if the code is regenerated.

import (
	"github.com/Azure/go-autorest/autorest"
)

// EndpointType enumerates the values for endpoint type.
type EndpointType string

const (
	// WebHook specifies the web hook state for endpoint type.
	WebHook EndpointType = "WebHook"
)

// EventSubscriptionProvisioningState enumerates the values for event subscription provisioning state.
type EventSubscriptionProvisioningState string

const (
	// Canceled specifies the canceled state for event subscription provisioning state.
	Canceled EventSubscriptionProvisioningState = "Canceled"
	// Creating specifies the creating state for event subscription provisioning state.
	Creating EventSubscriptionProvisioningState = "Creating"
	// Deleting specifies the deleting state for event subscription provisioning state.
	Deleting EventSubscriptionProvisioningState = "Deleting"
	// Failed specifies the failed state for event subscription provisioning state.
	Failed EventSubscriptionProvisioningState = "Failed"
	// Succeeded specifies the succeeded state for event subscription provisioning state.
	Succeeded EventSubscriptionProvisioningState = "Succeeded"
	// Updating specifies the updating state for event subscription provisioning state.
	Updating EventSubscriptionProvisioningState = "Updating"
)

// OperationOrigin enumerates the values for operation origin.
type OperationOrigin string

const (
	// System specifies the system state for operation origin.
	System OperationOrigin = "System"
	// User specifies the user state for operation origin.
	User OperationOrigin = "User"
	// UserAndSystem specifies the user and system state for operation origin.
	UserAndSystem OperationOrigin = "UserAndSystem"
)

// ResourceRegionType enumerates the values for resource region type.
type ResourceRegionType string

const (
	// GlobalResource specifies the global resource state for resource region type.
	GlobalResource ResourceRegionType = "GlobalResource"
	// RegionalResource specifies the regional resource state for resource region type.
	RegionalResource ResourceRegionType = "RegionalResource"
)

// TopicProvisioningState enumerates the values for topic provisioning state.
type TopicProvisioningState string

const (
	// TopicProvisioningStateCanceled specifies the topic provisioning state canceled state for topic provisioning
	// state.
	TopicProvisioningStateCanceled TopicProvisioningState = "Canceled"
	// TopicProvisioningStateCreating specifies the topic provisioning state creating state for topic provisioning
	// state.
	TopicProvisioningStateCreating TopicProvisioningState = "Creating"
	// TopicProvisioningStateDeleting specifies the topic provisioning state deleting state for topic provisioning
	// state.
	TopicProvisioningStateDeleting TopicProvisioningState = "Deleting"
	// TopicProvisioningStateFailed specifies the topic provisioning state failed state for topic provisioning state.
	TopicProvisioningStateFailed TopicProvisioningState = "Failed"
	// TopicProvisioningStateSucceeded specifies the topic provisioning state succeeded state for topic provisioning
	// state.
	TopicProvisioningStateSucceeded TopicProvisioningState = "Succeeded"
	// TopicProvisioningStateUpdating specifies the topic provisioning state updating state for topic provisioning
	// state.
	TopicProvisioningStateUpdating TopicProvisioningState = "Updating"
)

// TopicTypeProvisioningState enumerates the values for topic type provisioning state.
type TopicTypeProvisioningState string

const (
	// TopicTypeProvisioningStateCanceled specifies the topic type provisioning state canceled state for topic type
	// provisioning state.
	TopicTypeProvisioningStateCanceled TopicTypeProvisioningState = "Canceled"
	// TopicTypeProvisioningStateCreating specifies the topic type provisioning state creating state for topic type
	// provisioning state.
	TopicTypeProvisioningStateCreating TopicTypeProvisioningState = "Creating"
	// TopicTypeProvisioningStateDeleting specifies the topic type provisioning state deleting state for topic type
	// provisioning state.
	TopicTypeProvisioningStateDeleting TopicTypeProvisioningState = "Deleting"
	// TopicTypeProvisioningStateFailed specifies the topic type provisioning state failed state for topic type
	// provisioning state.
	TopicTypeProvisioningStateFailed TopicTypeProvisioningState = "Failed"
	// TopicTypeProvisioningStateSucceeded specifies the topic type provisioning state succeeded state for topic type
	// provisioning state.
	TopicTypeProvisioningStateSucceeded TopicTypeProvisioningState = "Succeeded"
	// TopicTypeProvisioningStateUpdating specifies the topic type provisioning state updating state for topic type
	// provisioning state.
	TopicTypeProvisioningStateUpdating TopicTypeProvisioningState = "Updating"
)

// EventSubscription is event Subscription
type EventSubscription struct {
	autorest.Response            `json:"-"`
	ID                           *string `json:"id,omitempty"`
	Name                         *string `json:"name,omitempty"`
	Type                         *string `json:"type,omitempty"`
	*EventSubscriptionProperties `json:"properties,omitempty"`
}

// EventSubscriptionDestination is information about the destination for an event subscription
type EventSubscriptionDestination struct {
	EndpointType                            EndpointType `json:"endpointType,omitempty"`
	*EventSubscriptionDestinationProperties `json:"properties,omitempty"`
}

// EventSubscriptionDestinationProperties is properties of the event subscription destination
type EventSubscriptionDestinationProperties struct {
	EndpointURL     *string `json:"endpointUrl,omitempty"`
	EndpointBaseURL *string `json:"endpointBaseUrl,omitempty"`
}

// EventSubscriptionFilter is filter for the Event Subscription
type EventSubscriptionFilter struct {
	SubjectBeginsWith      *string   `json:"subjectBeginsWith,omitempty"`
	SubjectEndsWith        *string   `json:"subjectEndsWith,omitempty"`
	IncludedEventTypes     *[]string `json:"includedEventTypes,omitempty"`
	IsSubjectCaseSensitive *bool     `json:"isSubjectCaseSensitive,omitempty"`
}

// EventSubscriptionFullURL is full endpoint url of an event subscription
type EventSubscriptionFullURL struct {
	autorest.Response `json:"-"`
	EndpointURL       *string `json:"endpointUrl,omitempty"`
}

// EventSubscriptionProperties is properties of the Event Subscription
type EventSubscriptionProperties struct {
	Topic             *string                            `json:"topic,omitempty"`
	ProvisioningState EventSubscriptionProvisioningState `json:"provisioningState,omitempty"`
	Destination       *EventSubscriptionDestination      `json:"destination,omitempty"`
	Filter            *EventSubscriptionFilter           `json:"filter,omitempty"`
	Labels            *[]string                          `json:"labels,omitempty"`
}

// EventSubscriptionsListResult is result of the List EventSubscriptions operation
type EventSubscriptionsListResult struct {
	autorest.Response `json:"-"`
	Value             *[]EventSubscription `json:"value,omitempty"`
}

// EventSubscriptionUpdateParameters is properties of the Event Subscription update
type EventSubscriptionUpdateParameters struct {
	Destination *EventSubscriptionDestination `json:"destination,omitempty"`
	Filter      *EventSubscriptionFilter      `json:"filter,omitempty"`
	Labels      *[]string                     `json:"labels,omitempty"`
}

// EventType is event Type for a subject under a topic
type EventType struct {
	ID                   *string `json:"id,omitempty"`
	Name                 *string `json:"name,omitempty"`
	Type                 *string `json:"type,omitempty"`
	*EventTypeProperties `json:"properties,omitempty"`
}

// EventTypeProperties is properties of the event type
type EventTypeProperties struct {
	DisplayName *string `json:"displayName,omitempty"`
	Description *string `json:"description,omitempty"`
	SchemaURL   *string `json:"schemaUrl,omitempty"`
}

// EventTypesListResult is result of the List Event Types operation
type EventTypesListResult struct {
	autorest.Response `json:"-"`
	Value             *[]EventType `json:"value,omitempty"`
}

// Operation is represents an operation returned by the GetOperations request
type Operation struct {
	Name       *string                 `json:"name,omitempty"`
	Display    *OperationInfo          `json:"display,omitempty"`
	Origin     OperationOrigin         `json:"origin,omitempty"`
	Properties *map[string]interface{} `json:"properties,omitempty"`
}

// OperationInfo is information about an operation
type OperationInfo struct {
	Provider    *string `json:"provider,omitempty"`
	Resource    *string `json:"resource,omitempty"`
	Operation   *string `json:"operation,omitempty"`
	Description *string `json:"description,omitempty"`
}

// OperationsListResult is result of the List Operations operation
type OperationsListResult struct {
	autorest.Response `json:"-"`
	Value             *[]Operation `json:"value,omitempty"`
}

// Resource is definition of a Resource
type Resource struct {
	ID   *string `json:"id,omitempty"`
	Name *string `json:"name,omitempty"`
	Type *string `json:"type,omitempty"`
}

// Topic is eventGrid Topic
type Topic struct {
	autorest.Response `json:"-"`
	ID                *string             `json:"id,omitempty"`
	Name              *string             `json:"name,omitempty"`
	Type              *string             `json:"type,omitempty"`
	Location          *string             `json:"location,omitempty"`
	Tags              *map[string]*string `json:"tags,omitempty"`
	*TopicProperties  `json:"properties,omitempty"`
}

// TopicProperties is properties of the Topic
type TopicProperties struct {
	ProvisioningState TopicProvisioningState `json:"provisioningState,omitempty"`
	Endpoint          *string                `json:"endpoint,omitempty"`
}

// TopicRegenerateKeyRequest is topic regenerate share access key key request
type TopicRegenerateKeyRequest struct {
	KeyName *string `json:"keyName,omitempty"`
}

// TopicSharedAccessKeys is shared access keys of the Topic
type TopicSharedAccessKeys struct {
	autorest.Response `json:"-"`
	Key1              *string `json:"key1,omitempty"`
	Key2              *string `json:"key2,omitempty"`
}

// TopicsListResult is result of the List Topics operation
type TopicsListResult struct {
	autorest.Response `json:"-"`
	Value             *[]Topic `json:"value,omitempty"`
}

// TopicTypeInfo is properties of a topic type info.
type TopicTypeInfo struct {
	autorest.Response    `json:"-"`
	ID                   *string `json:"id,omitempty"`
	Name                 *string `json:"name,omitempty"`
	Type                 *string `json:"type,omitempty"`
	*TopicTypeProperties `json:"properties,omitempty"`
}

// TopicTypeProperties is properties of a topic type.
type TopicTypeProperties struct {
	Provider           *string                    `json:"provider,omitempty"`
	DisplayName        *string                    `json:"displayName,omitempty"`
	Description        *string                    `json:"description,omitempty"`
	ResourceRegionType ResourceRegionType         `json:"resourceRegionType,omitempty"`
	ProvisioningState  TopicTypeProvisioningState `json:"provisioningState,omitempty"`
}

// TopicTypesListResult is result of the List Topic Types operation
type TopicTypesListResult struct {
	autorest.Response `json:"-"`
	Value             *[]TopicTypeInfo `json:"value,omitempty"`
}

// TrackedResource is definition of a Tracked Resource
type TrackedResource struct {
	ID       *string             `json:"id,omitempty"`
	Name     *string             `json:"name,omitempty"`
	Type     *string             `json:"type,omitempty"`
	Location *string             `json:"location,omitempty"`
	Tags     *map[string]*string `json:"tags,omitempty"`
}