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

import "github.com/Azure/azure-service-operator/v2/pkg/genruntime"

type IotHub_Spec struct {
	// Identity: The managed identities for the IotHub.
	Identity *ArmIdentity `json:"identity,omitempty"`

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

	// Properties: IotHub properties
	Properties *IotHubProperties `json:"properties,omitempty"`

	// Sku: IotHub SKU info
	Sku *IotHubSkuInfo `json:"sku,omitempty"`

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

var _ genruntime.ARMResourceSpec = &IotHub_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2021-07-02"
func (iotHub IotHub_Spec) GetAPIVersion() string {
	return "2021-07-02"
}

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

// GetType returns the ARM Type of the resource. This is always "Microsoft.Devices/IotHubs"
func (iotHub *IotHub_Spec) GetType() string {
	return "Microsoft.Devices/IotHubs"
}

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

// The properties of an IoT hub.
type IotHubProperties struct {
	// AllowedFqdnList: List of allowed FQDNs(Fully Qualified Domain Name) for egress from Iot Hub.
	AllowedFqdnList []string `json:"allowedFqdnList,omitempty"`

	// AuthorizationPolicies: The shared access policies you can use to secure a connection to the IoT hub.
	AuthorizationPolicies []SharedAccessSignatureAuthorizationRule `json:"authorizationPolicies,omitempty"`

	// CloudToDevice: The IoT hub cloud-to-device messaging properties.
	CloudToDevice *CloudToDeviceProperties `json:"cloudToDevice,omitempty"`

	// Comments: IoT hub comments.
	Comments *string `json:"comments,omitempty"`

	// DisableDeviceSAS: If true, all device(including Edge devices but excluding modules) scoped SAS keys cannot be used for
	// authentication.
	DisableDeviceSAS *bool `json:"disableDeviceSAS,omitempty"`

	// DisableLocalAuth: If true, SAS tokens with Iot hub scoped SAS keys cannot be used for authentication.
	DisableLocalAuth *bool `json:"disableLocalAuth,omitempty"`

	// DisableModuleSAS: If true, all module scoped SAS keys cannot be used for authentication.
	DisableModuleSAS *bool `json:"disableModuleSAS,omitempty"`

	// EnableDataResidency: This property when set to true, will enable data residency, thus, disabling disaster recovery.
	EnableDataResidency *bool `json:"enableDataResidency,omitempty"`

	// EnableFileUploadNotifications: If True, file upload notifications are enabled.
	EnableFileUploadNotifications *bool `json:"enableFileUploadNotifications,omitempty"`

	// EventHubEndpoints: The Event Hub-compatible endpoint properties. The only possible keys to this dictionary is events.
	// This key has to be present in the dictionary while making create or update calls for the IoT hub.
	EventHubEndpoints map[string]EventHubProperties `json:"eventHubEndpoints,omitempty"`

	// Features: The capabilities and features enabled for the IoT hub.
	Features *IotHubProperties_Features `json:"features,omitempty"`

	// IpFilterRules: The IP filter rules.
	IpFilterRules []IpFilterRule `json:"ipFilterRules,omitempty"`

	// MessagingEndpoints: The messaging endpoint properties for the file upload notification queue.
	MessagingEndpoints map[string]MessagingEndpointProperties `json:"messagingEndpoints,omitempty"`

	// MinTlsVersion: Specifies the minimum TLS version to support for this hub. Can be set to "1.2" to have clients that use a
	// TLS version below 1.2 to be rejected.
	MinTlsVersion *string `json:"minTlsVersion,omitempty"`

	// NetworkRuleSets: Network Rule Set Properties of IotHub
	NetworkRuleSets *NetworkRuleSetProperties `json:"networkRuleSets,omitempty"`

	// PublicNetworkAccess: Whether requests from Public Network are allowed
	PublicNetworkAccess *IotHubProperties_PublicNetworkAccess `json:"publicNetworkAccess,omitempty"`

	// RestrictOutboundNetworkAccess: If true, egress from IotHub will be restricted to only the allowed FQDNs that are
	// configured via allowedFqdnList.
	RestrictOutboundNetworkAccess *bool `json:"restrictOutboundNetworkAccess,omitempty"`

	// Routing: The routing related properties of the IoT hub. See:
	// https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging
	Routing *RoutingProperties `json:"routing,omitempty"`

	// StorageEndpoints: The list of Azure Storage endpoints where you can upload files. Currently you can configure only one
	// Azure Storage account and that MUST have its key as $default. Specifying more than one storage account causes an error
	// to be thrown. Not specifying a value for this property when the enableFileUploadNotifications property is set to True,
	// causes an error to be thrown.
	StorageEndpoints map[string]StorageEndpointProperties `json:"storageEndpoints,omitempty"`
}

// Information about the SKU of the IoT hub.
type IotHubSkuInfo struct {
	// Capacity: The number of provisioned IoT Hub units. See:
	// https://docs.microsoft.com/azure/azure-subscription-service-limits#iot-hub-limits.
	Capacity *int `json:"capacity,omitempty"`

	// Name: The name of the SKU.
	Name *IotHubSkuInfo_Name `json:"name,omitempty"`
}

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

const (
	ArmIdentity_Type_None                       = ArmIdentity_Type("None")
	ArmIdentity_Type_SystemAssigned             = ArmIdentity_Type("SystemAssigned")
	ArmIdentity_Type_SystemAssignedUserAssigned = ArmIdentity_Type("SystemAssigned, UserAssigned")
	ArmIdentity_Type_UserAssigned               = ArmIdentity_Type("UserAssigned")
)

// Mapping from string to ArmIdentity_Type
var armIdentity_Type_Values = map[string]ArmIdentity_Type{
	"none":                         ArmIdentity_Type_None,
	"systemassigned":               ArmIdentity_Type_SystemAssigned,
	"systemassigned, userassigned": ArmIdentity_Type_SystemAssignedUserAssigned,
	"userassigned":                 ArmIdentity_Type_UserAssigned,
}

// The IoT hub cloud-to-device messaging properties.
type CloudToDeviceProperties struct {
	// DefaultTtlAsIso8601: The default time to live for cloud-to-device messages in the device queue. See:
	// https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
	DefaultTtlAsIso8601 *string `json:"defaultTtlAsIso8601,omitempty"`

	// Feedback: The properties of the feedback queue for cloud-to-device messages.
	Feedback *FeedbackProperties `json:"feedback,omitempty"`

	// MaxDeliveryCount: The max delivery count for cloud-to-device messages in the device queue. See:
	// https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
	MaxDeliveryCount *int `json:"maxDeliveryCount,omitempty"`
}

// The properties of the provisioned Event Hub-compatible endpoint used by the IoT hub.
type EventHubProperties struct {
	// PartitionCount: The number of partitions for receiving device-to-cloud messages in the Event Hub-compatible endpoint.
	// See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages.
	PartitionCount *int `json:"partitionCount,omitempty"`

	// RetentionTimeInDays: The retention time for device-to-cloud messages in days. See:
	// https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#device-to-cloud-messages
	RetentionTimeInDays *int `json:"retentionTimeInDays,omitempty"`
}

// +kubebuilder:validation:Enum={"DeviceManagement","None"}
type IotHubProperties_Features string

const (
	IotHubProperties_Features_DeviceManagement = IotHubProperties_Features("DeviceManagement")
	IotHubProperties_Features_None             = IotHubProperties_Features("None")
)

// Mapping from string to IotHubProperties_Features
var iotHubProperties_Features_Values = map[string]IotHubProperties_Features{
	"devicemanagement": IotHubProperties_Features_DeviceManagement,
	"none":             IotHubProperties_Features_None,
}

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

const (
	IotHubProperties_PublicNetworkAccess_Disabled = IotHubProperties_PublicNetworkAccess("Disabled")
	IotHubProperties_PublicNetworkAccess_Enabled  = IotHubProperties_PublicNetworkAccess("Enabled")
)

// Mapping from string to IotHubProperties_PublicNetworkAccess
var iotHubProperties_PublicNetworkAccess_Values = map[string]IotHubProperties_PublicNetworkAccess{
	"disabled": IotHubProperties_PublicNetworkAccess_Disabled,
	"enabled":  IotHubProperties_PublicNetworkAccess_Enabled,
}

// +kubebuilder:validation:Enum={"B1","B2","B3","F1","S1","S2","S3"}
type IotHubSkuInfo_Name string

const (
	IotHubSkuInfo_Name_B1 = IotHubSkuInfo_Name("B1")
	IotHubSkuInfo_Name_B2 = IotHubSkuInfo_Name("B2")
	IotHubSkuInfo_Name_B3 = IotHubSkuInfo_Name("B3")
	IotHubSkuInfo_Name_F1 = IotHubSkuInfo_Name("F1")
	IotHubSkuInfo_Name_S1 = IotHubSkuInfo_Name("S1")
	IotHubSkuInfo_Name_S2 = IotHubSkuInfo_Name("S2")
	IotHubSkuInfo_Name_S3 = IotHubSkuInfo_Name("S3")
)

// Mapping from string to IotHubSkuInfo_Name
var iotHubSkuInfo_Name_Values = map[string]IotHubSkuInfo_Name{
	"b1": IotHubSkuInfo_Name_B1,
	"b2": IotHubSkuInfo_Name_B2,
	"b3": IotHubSkuInfo_Name_B3,
	"f1": IotHubSkuInfo_Name_F1,
	"s1": IotHubSkuInfo_Name_S1,
	"s2": IotHubSkuInfo_Name_S2,
	"s3": IotHubSkuInfo_Name_S3,
}

// The IP filter rules for the IoT hub.
type IpFilterRule struct {
	// Action: The desired action for requests captured by this rule.
	Action *IpFilterRule_Action `json:"action,omitempty"`

	// FilterName: The name of the IP filter rule.
	FilterName *string `json:"filterName,omitempty"`

	// IpMask: A string that contains the IP address range in CIDR notation for the rule.
	IpMask *string `json:"ipMask,omitempty"`
}

// The properties of the messaging endpoints used by this IoT hub.
type MessagingEndpointProperties struct {
	// LockDurationAsIso8601: The lock duration. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
	LockDurationAsIso8601 *string `json:"lockDurationAsIso8601,omitempty"`

	// MaxDeliveryCount: The number of times the IoT hub attempts to deliver a message. See:
	// https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
	MaxDeliveryCount *int `json:"maxDeliveryCount,omitempty"`

	// TtlAsIso8601: The period of time for which a message is available to consume before it is expired by the IoT hub. See:
	// https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload.
	TtlAsIso8601 *string `json:"ttlAsIso8601,omitempty"`
}

// Network Rule Set Properties of IotHub
type NetworkRuleSetProperties struct {
	// ApplyToBuiltInEventHubEndpoint: If True, then Network Rule Set is also applied to BuiltIn EventHub EndPoint of IotHub
	ApplyToBuiltInEventHubEndpoint *bool `json:"applyToBuiltInEventHubEndpoint,omitempty"`

	// DefaultAction: Default Action for Network Rule Set
	DefaultAction *NetworkRuleSetProperties_DefaultAction `json:"defaultAction,omitempty"`

	// IpRules: List of IP Rules
	IpRules []NetworkRuleSetIpRule `json:"ipRules,omitempty"`
}

// The routing related properties of the IoT hub. See: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging
type RoutingProperties struct {
	// Endpoints: The properties related to the custom endpoints to which your IoT hub routes messages based on the routing
	// rules. A  maximum of 10 custom endpoints are allowed across all endpoint types for paid hubs and only 1 custom endpoint
	// is allowed  across all endpoint types for free hubs.
	Endpoints *RoutingEndpoints `json:"endpoints,omitempty"`

	// Enrichments: The list of user-provided enrichments that the IoT hub applies to messages to be delivered to built-in and
	// custom endpoints. See: https://aka.ms/telemetryoneventgrid
	Enrichments []EnrichmentProperties `json:"enrichments,omitempty"`

	// FallbackRoute: The properties of the route that is used as a fall-back route when none of the conditions specified in
	// the 'routes' section are met. This is an optional parameter. When this property is not present in the template, the
	// fallback route is disabled by default.
	FallbackRoute *FallbackRouteProperties `json:"fallbackRoute,omitempty"`

	// Routes: The list of user-provided routing rules that the IoT hub uses to route messages to built-in and custom
	// endpoints. A maximum of 100 routing rules are allowed for paid hubs and a maximum of 5 routing rules are allowed for
	// free hubs.
	Routes []RouteProperties `json:"routes,omitempty"`
}

// The properties of an IoT hub shared access policy.
type SharedAccessSignatureAuthorizationRule struct {
	// KeyName: The name of the shared access policy.
	KeyName *string `json:"keyName,omitempty"`

	// Rights: The permissions assigned to the shared access policy.
	Rights *SharedAccessSignatureAuthorizationRule_Rights `json:"rights,omitempty"`
}

// The properties of the Azure Storage endpoint for file upload.
type StorageEndpointProperties struct {
	// AuthenticationType: Specifies authentication type being used for connecting to the storage account.
	AuthenticationType *StorageEndpointProperties_AuthenticationType `json:"authenticationType,omitempty"`

	// ConnectionString: The connection string for the Azure Storage account to which files are uploaded.
	ConnectionString *string `json:"connectionString,omitempty"`

	// ContainerName: The name of the root container where you upload files. The container need not exist but should be
	// creatable using the connectionString specified.
	ContainerName *string `json:"containerName,omitempty"`

	// Identity: Managed identity properties of storage endpoint for file upload.
	Identity *ManagedIdentity `json:"identity,omitempty"`

	// SasTtlAsIso8601: The period of time for which the SAS URI generated by IoT Hub for file upload is valid. See:
	// https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-file-upload#file-upload-notification-configuration-options.
	SasTtlAsIso8601 *string `json:"sasTtlAsIso8601,omitempty"`
}

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

// The properties of an enrichment that your IoT hub applies to messages delivered to endpoints.
type EnrichmentProperties struct {
	// EndpointNames: The list of endpoints for which the enrichment is applied to the message.
	EndpointNames []string `json:"endpointNames,omitempty"`

	// Key: The key or name for the enrichment property.
	Key *string `json:"key,omitempty"`

	// Value: The value for the enrichment property.
	Value *string `json:"value,omitempty"`
}

// The properties of the fallback route. IoT Hub uses these properties when it routes messages to the fallback endpoint.
type FallbackRouteProperties struct {
	// Condition: The condition which is evaluated in order to apply the fallback route. If the condition is not provided it
	// will evaluate to true by default. For grammar, See:
	// https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
	Condition *string `json:"condition,omitempty"`

	// EndpointNames: The list of endpoints to which the messages that satisfy the condition are routed to. Currently only 1
	// endpoint is allowed.
	EndpointNames []string `json:"endpointNames,omitempty"`

	// IsEnabled: Used to specify whether the fallback route is enabled.
	IsEnabled *bool `json:"isEnabled,omitempty"`

	// Name: The name of the route. The name can only include alphanumeric characters, periods, underscores, hyphens, has a
	// maximum length of 64 characters, and must be unique.
	Name *string `json:"name,omitempty"`

	// Source: The source to which the routing rule is to be applied to. For example, DeviceMessages
	Source *FallbackRouteProperties_Source `json:"source,omitempty"`
}

// The properties of the feedback queue for cloud-to-device messages.
type FeedbackProperties struct {
	// LockDurationAsIso8601: The lock duration for the feedback queue. See:
	// https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
	LockDurationAsIso8601 *string `json:"lockDurationAsIso8601,omitempty"`

	// MaxDeliveryCount: The number of times the IoT hub attempts to deliver a message on the feedback queue. See:
	// https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
	MaxDeliveryCount *int `json:"maxDeliveryCount,omitempty"`

	// TtlAsIso8601: The period of time for which a message is available to consume before it is expired by the IoT hub. See:
	// https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-messaging#cloud-to-device-messages.
	TtlAsIso8601 *string `json:"ttlAsIso8601,omitempty"`
}

// +kubebuilder:validation:Enum={"Accept","Reject"}
type IpFilterRule_Action string

const (
	IpFilterRule_Action_Accept = IpFilterRule_Action("Accept")
	IpFilterRule_Action_Reject = IpFilterRule_Action("Reject")
)

// Mapping from string to IpFilterRule_Action
var ipFilterRule_Action_Values = map[string]IpFilterRule_Action{
	"accept": IpFilterRule_Action_Accept,
	"reject": IpFilterRule_Action_Reject,
}

// The properties of the Managed identity.
type ManagedIdentity struct {
	// UserAssignedIdentity: The user assigned identity.
	UserAssignedIdentity *string `json:"userAssignedIdentity,omitempty"`
}

// IP Rule to be applied as part of Network Rule Set
type NetworkRuleSetIpRule struct {
	// Action: IP Filter Action
	Action *NetworkRuleSetIpRule_Action `json:"action,omitempty"`

	// FilterName: Name of the IP filter rule.
	FilterName *string `json:"filterName,omitempty"`

	// IpMask: A string that contains the IP address range in CIDR notation for the rule.
	IpMask *string `json:"ipMask,omitempty"`
}

// +kubebuilder:validation:Enum={"Allow","Deny"}
type NetworkRuleSetProperties_DefaultAction string

const (
	NetworkRuleSetProperties_DefaultAction_Allow = NetworkRuleSetProperties_DefaultAction("Allow")
	NetworkRuleSetProperties_DefaultAction_Deny  = NetworkRuleSetProperties_DefaultAction("Deny")
)

// Mapping from string to NetworkRuleSetProperties_DefaultAction
var networkRuleSetProperties_DefaultAction_Values = map[string]NetworkRuleSetProperties_DefaultAction{
	"allow": NetworkRuleSetProperties_DefaultAction_Allow,
	"deny":  NetworkRuleSetProperties_DefaultAction_Deny,
}

// The properties of a routing rule that your IoT hub uses to route messages to endpoints.
type RouteProperties struct {
	// Condition: The condition that is evaluated to apply the routing rule. If no condition is provided, it evaluates to true
	// by default. For grammar, see: https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-query-language
	Condition *string `json:"condition,omitempty"`

	// EndpointNames: The list of endpoints to which messages that satisfy the condition are routed. Currently only one
	// endpoint is allowed.
	EndpointNames []string `json:"endpointNames,omitempty"`

	// IsEnabled: Used to specify whether a route is enabled.
	IsEnabled *bool `json:"isEnabled,omitempty"`

	// Name: The name of the route. The name can only include alphanumeric characters, periods, underscores, hyphens, has a
	// maximum length of 64 characters, and must be unique.
	Name *string `json:"name,omitempty"`

	// Source: The source that the routing rule is to be applied to, such as DeviceMessages.
	Source *RouteProperties_Source `json:"source,omitempty"`
}

// The properties related to the custom endpoints to which your IoT hub routes messages based on the routing rules. A
// maximum of 10 custom endpoints are allowed across all endpoint types for paid hubs and only 1 custom endpoint is allowed
// across all endpoint types for free hubs.
type RoutingEndpoints struct {
	// EventHubs: The list of Event Hubs endpoints that IoT hub routes messages to, based on the routing rules. This list does
	// not include the built-in Event Hubs endpoint.
	EventHubs []RoutingEventHubProperties `json:"eventHubs,omitempty"`

	// ServiceBusQueues: The list of Service Bus queue endpoints that IoT hub routes the messages to, based on the routing
	// rules.
	ServiceBusQueues []RoutingServiceBusQueueEndpointProperties `json:"serviceBusQueues,omitempty"`

	// ServiceBusTopics: The list of Service Bus topic endpoints that the IoT hub routes the messages to, based on the routing
	// rules.
	ServiceBusTopics []RoutingServiceBusTopicEndpointProperties `json:"serviceBusTopics,omitempty"`

	// StorageContainers: The list of storage container endpoints that IoT hub routes messages to, based on the routing rules.
	StorageContainers []RoutingStorageContainerProperties `json:"storageContainers,omitempty"`
}

// +kubebuilder:validation:Enum={"DeviceConnect","RegistryRead","RegistryRead, DeviceConnect","RegistryRead, RegistryWrite","RegistryRead, RegistryWrite, DeviceConnect","RegistryRead, RegistryWrite, ServiceConnect","RegistryRead, RegistryWrite, ServiceConnect, DeviceConnect","RegistryRead, ServiceConnect","RegistryRead, ServiceConnect, DeviceConnect","RegistryWrite","RegistryWrite, DeviceConnect","RegistryWrite, ServiceConnect","RegistryWrite, ServiceConnect, DeviceConnect","ServiceConnect","ServiceConnect, DeviceConnect"}
type SharedAccessSignatureAuthorizationRule_Rights string

const (
	SharedAccessSignatureAuthorizationRule_Rights_DeviceConnect                                        = SharedAccessSignatureAuthorizationRule_Rights("DeviceConnect")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryRead                                         = SharedAccessSignatureAuthorizationRule_Rights("RegistryRead")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryReadDeviceConnect                            = SharedAccessSignatureAuthorizationRule_Rights("RegistryRead, DeviceConnect")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryReadRegistryWrite                            = SharedAccessSignatureAuthorizationRule_Rights("RegistryRead, RegistryWrite")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryReadRegistryWriteDeviceConnect               = SharedAccessSignatureAuthorizationRule_Rights("RegistryRead, RegistryWrite, DeviceConnect")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryReadRegistryWriteServiceConnect              = SharedAccessSignatureAuthorizationRule_Rights("RegistryRead, RegistryWrite, ServiceConnect")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryReadRegistryWriteServiceConnectDeviceConnect = SharedAccessSignatureAuthorizationRule_Rights("RegistryRead, RegistryWrite, ServiceConnect, DeviceConnect")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryReadServiceConnect                           = SharedAccessSignatureAuthorizationRule_Rights("RegistryRead, ServiceConnect")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryReadServiceConnectDeviceConnect              = SharedAccessSignatureAuthorizationRule_Rights("RegistryRead, ServiceConnect, DeviceConnect")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryWrite                                        = SharedAccessSignatureAuthorizationRule_Rights("RegistryWrite")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryWriteDeviceConnect                           = SharedAccessSignatureAuthorizationRule_Rights("RegistryWrite, DeviceConnect")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryWriteServiceConnect                          = SharedAccessSignatureAuthorizationRule_Rights("RegistryWrite, ServiceConnect")
	SharedAccessSignatureAuthorizationRule_Rights_RegistryWriteServiceConnectDeviceConnect             = SharedAccessSignatureAuthorizationRule_Rights("RegistryWrite, ServiceConnect, DeviceConnect")
	SharedAccessSignatureAuthorizationRule_Rights_ServiceConnect                                       = SharedAccessSignatureAuthorizationRule_Rights("ServiceConnect")
	SharedAccessSignatureAuthorizationRule_Rights_ServiceConnectDeviceConnect                          = SharedAccessSignatureAuthorizationRule_Rights("ServiceConnect, DeviceConnect")
)

// Mapping from string to SharedAccessSignatureAuthorizationRule_Rights
var sharedAccessSignatureAuthorizationRule_Rights_Values = map[string]SharedAccessSignatureAuthorizationRule_Rights{
	"deviceconnect":                                              SharedAccessSignatureAuthorizationRule_Rights_DeviceConnect,
	"registryread":                                               SharedAccessSignatureAuthorizationRule_Rights_RegistryRead,
	"registryread, deviceconnect":                                SharedAccessSignatureAuthorizationRule_Rights_RegistryReadDeviceConnect,
	"registryread, registrywrite":                                SharedAccessSignatureAuthorizationRule_Rights_RegistryReadRegistryWrite,
	"registryread, registrywrite, deviceconnect":                 SharedAccessSignatureAuthorizationRule_Rights_RegistryReadRegistryWriteDeviceConnect,
	"registryread, registrywrite, serviceconnect":                SharedAccessSignatureAuthorizationRule_Rights_RegistryReadRegistryWriteServiceConnect,
	"registryread, registrywrite, serviceconnect, deviceconnect": SharedAccessSignatureAuthorizationRule_Rights_RegistryReadRegistryWriteServiceConnectDeviceConnect,
	"registryread, serviceconnect":                               SharedAccessSignatureAuthorizationRule_Rights_RegistryReadServiceConnect,
	"registryread, serviceconnect, deviceconnect":                SharedAccessSignatureAuthorizationRule_Rights_RegistryReadServiceConnectDeviceConnect,
	"registrywrite":                                              SharedAccessSignatureAuthorizationRule_Rights_RegistryWrite,
	"registrywrite, deviceconnect":                               SharedAccessSignatureAuthorizationRule_Rights_RegistryWriteDeviceConnect,
	"registrywrite, serviceconnect":                              SharedAccessSignatureAuthorizationRule_Rights_RegistryWriteServiceConnect,
	"registrywrite, serviceconnect, deviceconnect":               SharedAccessSignatureAuthorizationRule_Rights_RegistryWriteServiceConnectDeviceConnect,
	"serviceconnect":                                             SharedAccessSignatureAuthorizationRule_Rights_ServiceConnect,
	"serviceconnect, deviceconnect":                              SharedAccessSignatureAuthorizationRule_Rights_ServiceConnectDeviceConnect,
}

// +kubebuilder:validation:Enum={"identityBased","keyBased"}
type StorageEndpointProperties_AuthenticationType string

const (
	StorageEndpointProperties_AuthenticationType_IdentityBased = StorageEndpointProperties_AuthenticationType("identityBased")
	StorageEndpointProperties_AuthenticationType_KeyBased      = StorageEndpointProperties_AuthenticationType("keyBased")
)

// Mapping from string to StorageEndpointProperties_AuthenticationType
var storageEndpointProperties_AuthenticationType_Values = map[string]StorageEndpointProperties_AuthenticationType{
	"identitybased": StorageEndpointProperties_AuthenticationType_IdentityBased,
	"keybased":      StorageEndpointProperties_AuthenticationType_KeyBased,
}

// +kubebuilder:validation:Enum={"DeviceMessages"}
type FallbackRouteProperties_Source string

const FallbackRouteProperties_Source_DeviceMessages = FallbackRouteProperties_Source("DeviceMessages")

// Mapping from string to FallbackRouteProperties_Source
var fallbackRouteProperties_Source_Values = map[string]FallbackRouteProperties_Source{
	"devicemessages": FallbackRouteProperties_Source_DeviceMessages,
}

// +kubebuilder:validation:Enum={"Allow"}
type NetworkRuleSetIpRule_Action string

const NetworkRuleSetIpRule_Action_Allow = NetworkRuleSetIpRule_Action("Allow")

// Mapping from string to NetworkRuleSetIpRule_Action
var networkRuleSetIpRule_Action_Values = map[string]NetworkRuleSetIpRule_Action{
	"allow": NetworkRuleSetIpRule_Action_Allow,
}

// +kubebuilder:validation:Enum={"DeviceConnectionStateEvents","DeviceJobLifecycleEvents","DeviceLifecycleEvents","DeviceMessages","Invalid","TwinChangeEvents"}
type RouteProperties_Source string

const (
	RouteProperties_Source_DeviceConnectionStateEvents = RouteProperties_Source("DeviceConnectionStateEvents")
	RouteProperties_Source_DeviceJobLifecycleEvents    = RouteProperties_Source("DeviceJobLifecycleEvents")
	RouteProperties_Source_DeviceLifecycleEvents       = RouteProperties_Source("DeviceLifecycleEvents")
	RouteProperties_Source_DeviceMessages              = RouteProperties_Source("DeviceMessages")
	RouteProperties_Source_Invalid                     = RouteProperties_Source("Invalid")
	RouteProperties_Source_TwinChangeEvents            = RouteProperties_Source("TwinChangeEvents")
)

// Mapping from string to RouteProperties_Source
var routeProperties_Source_Values = map[string]RouteProperties_Source{
	"deviceconnectionstateevents": RouteProperties_Source_DeviceConnectionStateEvents,
	"devicejoblifecycleevents":    RouteProperties_Source_DeviceJobLifecycleEvents,
	"devicelifecycleevents":       RouteProperties_Source_DeviceLifecycleEvents,
	"devicemessages":              RouteProperties_Source_DeviceMessages,
	"invalid":                     RouteProperties_Source_Invalid,
	"twinchangeevents":            RouteProperties_Source_TwinChangeEvents,
}

// The properties related to an event hub endpoint.
type RoutingEventHubProperties struct {
	// AuthenticationType: Method used to authenticate against the event hub endpoint
	AuthenticationType *RoutingEventHubProperties_AuthenticationType `json:"authenticationType,omitempty"`

	// ConnectionString: The connection string of the event hub endpoint.
	ConnectionString *string `json:"connectionString,omitempty"`

	// EndpointUri: The url of the event hub endpoint. It must include the protocol sb://
	EndpointUri *string `json:"endpointUri,omitempty"`

	// EntityPath: Event hub name on the event hub namespace
	EntityPath *string `json:"entityPath,omitempty"`

	// Id: Id of the event hub endpoint
	Id *string `json:"id,omitempty"`

	// Identity: Managed identity properties of routing event hub endpoint.
	Identity *ManagedIdentity `json:"identity,omitempty"`

	// Name: The name that identifies this endpoint. The name can only include alphanumeric characters, periods, underscores,
	// hyphens and has a maximum length of 64 characters. The following names are reserved:  events, fileNotifications,
	// $default. Endpoint names must be unique across endpoint types.
	Name *string `json:"name,omitempty"`

	// ResourceGroup: The name of the resource group of the event hub endpoint.
	ResourceGroup *string `json:"resourceGroup,omitempty"`

	// SubscriptionId: The subscription identifier of the event hub endpoint.
	SubscriptionId *string `json:"subscriptionId,omitempty"`
}

// The properties related to service bus queue endpoint types.
type RoutingServiceBusQueueEndpointProperties struct {
	// AuthenticationType: Method used to authenticate against the service bus queue endpoint
	AuthenticationType *RoutingServiceBusQueueEndpointProperties_AuthenticationType `json:"authenticationType,omitempty"`

	// ConnectionString: The connection string of the service bus queue endpoint.
	ConnectionString *string `json:"connectionString,omitempty"`

	// EndpointUri: The url of the service bus queue endpoint. It must include the protocol sb://
	EndpointUri *string `json:"endpointUri,omitempty"`

	// EntityPath: Queue name on the service bus namespace
	EntityPath *string `json:"entityPath,omitempty"`

	// Id: Id of the service bus queue endpoint
	Id *string `json:"id,omitempty"`

	// Identity: Managed identity properties of routing service bus queue endpoint.
	Identity *ManagedIdentity `json:"identity,omitempty"`

	// Name: The name that identifies this endpoint. The name can only include alphanumeric characters, periods, underscores,
	// hyphens and has a maximum length of 64 characters. The following names are reserved:  events, fileNotifications,
	// $default. Endpoint names must be unique across endpoint types. The name need not be the same as the actual queue name.
	Name *string `json:"name,omitempty"`

	// ResourceGroup: The name of the resource group of the service bus queue endpoint.
	ResourceGroup *string `json:"resourceGroup,omitempty"`

	// SubscriptionId: The subscription identifier of the service bus queue endpoint.
	SubscriptionId *string `json:"subscriptionId,omitempty"`
}

// The properties related to service bus topic endpoint types.
type RoutingServiceBusTopicEndpointProperties struct {
	// AuthenticationType: Method used to authenticate against the service bus topic endpoint
	AuthenticationType *RoutingServiceBusTopicEndpointProperties_AuthenticationType `json:"authenticationType,omitempty"`

	// ConnectionString: The connection string of the service bus topic endpoint.
	ConnectionString *string `json:"connectionString,omitempty"`

	// EndpointUri: The url of the service bus topic endpoint. It must include the protocol sb://
	EndpointUri *string `json:"endpointUri,omitempty"`

	// EntityPath: Queue name on the service bus topic
	EntityPath *string `json:"entityPath,omitempty"`

	// Id: Id of the service bus topic endpoint
	Id *string `json:"id,omitempty"`

	// Identity: Managed identity properties of routing service bus topic endpoint.
	Identity *ManagedIdentity `json:"identity,omitempty"`

	// Name: The name that identifies this endpoint. The name can only include alphanumeric characters, periods, underscores,
	// hyphens and has a maximum length of 64 characters. The following names are reserved:  events, fileNotifications,
	// $default. Endpoint names must be unique across endpoint types.  The name need not be the same as the actual topic name.
	Name *string `json:"name,omitempty"`

	// ResourceGroup: The name of the resource group of the service bus topic endpoint.
	ResourceGroup *string `json:"resourceGroup,omitempty"`

	// SubscriptionId: The subscription identifier of the service bus topic endpoint.
	SubscriptionId *string `json:"subscriptionId,omitempty"`
}

// The properties related to a storage container endpoint.
type RoutingStorageContainerProperties struct {
	// AuthenticationType: Method used to authenticate against the storage endpoint
	AuthenticationType *RoutingStorageContainerProperties_AuthenticationType `json:"authenticationType,omitempty"`

	// BatchFrequencyInSeconds: Time interval at which blobs are written to storage. Value should be between 60 and 720
	// seconds. Default value is 300 seconds.
	BatchFrequencyInSeconds *int `json:"batchFrequencyInSeconds,omitempty"`

	// ConnectionString: The connection string of the storage account.
	ConnectionString *string `json:"connectionString,omitempty"`

	// ContainerName: The name of storage container in the storage account.
	ContainerName *string `json:"containerName,omitempty"`

	// Encoding: Encoding that is used to serialize messages to blobs. Supported values are 'avro', 'avrodeflate', and 'JSON'.
	// Default value is 'avro'.
	Encoding *RoutingStorageContainerProperties_Encoding `json:"encoding,omitempty"`

	// EndpointUri: The url of the storage endpoint. It must include the protocol https://
	EndpointUri *string `json:"endpointUri,omitempty"`

	// FileNameFormat: File name format for the blob. Default format is {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}. All
	// parameters are mandatory but can be reordered.
	FileNameFormat *string `json:"fileNameFormat,omitempty"`

	// Id: Id of the storage container endpoint
	Id *string `json:"id,omitempty"`

	// Identity: Managed identity properties of routing storage endpoint.
	Identity *ManagedIdentity `json:"identity,omitempty"`

	// MaxChunkSizeInBytes: Maximum number of bytes for each blob written to storage. Value should be between 10485760(10MB)
	// and 524288000(500MB). Default value is 314572800(300MB).
	MaxChunkSizeInBytes *int `json:"maxChunkSizeInBytes,omitempty"`

	// Name: The name that identifies this endpoint. The name can only include alphanumeric characters, periods, underscores,
	// hyphens and has a maximum length of 64 characters. The following names are reserved:  events, fileNotifications,
	// $default. Endpoint names must be unique across endpoint types.
	Name *string `json:"name,omitempty"`

	// ResourceGroup: The name of the resource group of the storage account.
	ResourceGroup *string `json:"resourceGroup,omitempty"`

	// SubscriptionId: The subscription identifier of the storage account.
	SubscriptionId *string `json:"subscriptionId,omitempty"`
}

// +kubebuilder:validation:Enum={"identityBased","keyBased"}
type RoutingEventHubProperties_AuthenticationType string

const (
	RoutingEventHubProperties_AuthenticationType_IdentityBased = RoutingEventHubProperties_AuthenticationType("identityBased")
	RoutingEventHubProperties_AuthenticationType_KeyBased      = RoutingEventHubProperties_AuthenticationType("keyBased")
)

// Mapping from string to RoutingEventHubProperties_AuthenticationType
var routingEventHubProperties_AuthenticationType_Values = map[string]RoutingEventHubProperties_AuthenticationType{
	"identitybased": RoutingEventHubProperties_AuthenticationType_IdentityBased,
	"keybased":      RoutingEventHubProperties_AuthenticationType_KeyBased,
}

// +kubebuilder:validation:Enum={"identityBased","keyBased"}
type RoutingServiceBusQueueEndpointProperties_AuthenticationType string

const (
	RoutingServiceBusQueueEndpointProperties_AuthenticationType_IdentityBased = RoutingServiceBusQueueEndpointProperties_AuthenticationType("identityBased")
	RoutingServiceBusQueueEndpointProperties_AuthenticationType_KeyBased      = RoutingServiceBusQueueEndpointProperties_AuthenticationType("keyBased")
)

// Mapping from string to RoutingServiceBusQueueEndpointProperties_AuthenticationType
var routingServiceBusQueueEndpointProperties_AuthenticationType_Values = map[string]RoutingServiceBusQueueEndpointProperties_AuthenticationType{
	"identitybased": RoutingServiceBusQueueEndpointProperties_AuthenticationType_IdentityBased,
	"keybased":      RoutingServiceBusQueueEndpointProperties_AuthenticationType_KeyBased,
}

// +kubebuilder:validation:Enum={"identityBased","keyBased"}
type RoutingServiceBusTopicEndpointProperties_AuthenticationType string

const (
	RoutingServiceBusTopicEndpointProperties_AuthenticationType_IdentityBased = RoutingServiceBusTopicEndpointProperties_AuthenticationType("identityBased")
	RoutingServiceBusTopicEndpointProperties_AuthenticationType_KeyBased      = RoutingServiceBusTopicEndpointProperties_AuthenticationType("keyBased")
)

// Mapping from string to RoutingServiceBusTopicEndpointProperties_AuthenticationType
var routingServiceBusTopicEndpointProperties_AuthenticationType_Values = map[string]RoutingServiceBusTopicEndpointProperties_AuthenticationType{
	"identitybased": RoutingServiceBusTopicEndpointProperties_AuthenticationType_IdentityBased,
	"keybased":      RoutingServiceBusTopicEndpointProperties_AuthenticationType_KeyBased,
}

// +kubebuilder:validation:Enum={"identityBased","keyBased"}
type RoutingStorageContainerProperties_AuthenticationType string

const (
	RoutingStorageContainerProperties_AuthenticationType_IdentityBased = RoutingStorageContainerProperties_AuthenticationType("identityBased")
	RoutingStorageContainerProperties_AuthenticationType_KeyBased      = RoutingStorageContainerProperties_AuthenticationType("keyBased")
)

// Mapping from string to RoutingStorageContainerProperties_AuthenticationType
var routingStorageContainerProperties_AuthenticationType_Values = map[string]RoutingStorageContainerProperties_AuthenticationType{
	"identitybased": RoutingStorageContainerProperties_AuthenticationType_IdentityBased,
	"keybased":      RoutingStorageContainerProperties_AuthenticationType_KeyBased,
}

// +kubebuilder:validation:Enum={"Avro","AvroDeflate","JSON"}
type RoutingStorageContainerProperties_Encoding string

const (
	RoutingStorageContainerProperties_Encoding_Avro        = RoutingStorageContainerProperties_Encoding("Avro")
	RoutingStorageContainerProperties_Encoding_AvroDeflate = RoutingStorageContainerProperties_Encoding("AvroDeflate")
	RoutingStorageContainerProperties_Encoding_JSON        = RoutingStorageContainerProperties_Encoding("JSON")
)

// Mapping from string to RoutingStorageContainerProperties_Encoding
var routingStorageContainerProperties_Encoding_Values = map[string]RoutingStorageContainerProperties_Encoding{
	"avro":        RoutingStorageContainerProperties_Encoding_Avro,
	"avrodeflate": RoutingStorageContainerProperties_Encoding_AvroDeflate,
	"json":        RoutingStorageContainerProperties_Encoding_JSON,
}
