// 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 Namespace_Spec struct {
	// Identity: Properties of BYOK Identity description
	Identity *Identity `json:"identity,omitempty"`

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

	// Properties: Namespace properties supplied for create namespace operation.
	Properties *Namespace_Properties_Spec `json:"properties,omitempty"`

	// Sku: Properties of sku resource
	Sku *Sku `json:"sku,omitempty"`

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

var _ genruntime.ARMResourceSpec = &Namespace_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2021-11-01"
func (namespace Namespace_Spec) GetAPIVersion() string {
	return "2021-11-01"
}

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

// GetType returns the ARM Type of the resource. This is always "Microsoft.EventHub/namespaces"
func (namespace *Namespace_Spec) GetType() string {
	return "Microsoft.EventHub/namespaces"
}

// Properties to configure Identity for Bring your Own Keys
type Identity struct {
	// Type: Type of managed service identity.
	Type                   *Identity_Type                         `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

type Namespace_Properties_Spec struct {
	// AlternateName: Alternate name specified when alias and namespace names are same.
	AlternateName *string `json:"alternateName,omitempty"`

	// ClusterArmId: Cluster ARM ID of the Namespace.
	ClusterArmId *string `json:"clusterArmId,omitempty"`

	// DisableLocalAuth: This property disables SAS authentication for the Event Hubs namespace.
	DisableLocalAuth *bool `json:"disableLocalAuth,omitempty"`

	// Encryption: Properties of BYOK Encryption description
	Encryption *Encryption `json:"encryption,omitempty"`

	// IsAutoInflateEnabled: Value that indicates whether AutoInflate is enabled for eventhub namespace.
	IsAutoInflateEnabled *bool `json:"isAutoInflateEnabled,omitempty"`

	// KafkaEnabled: Value that indicates whether Kafka is enabled for eventhub namespace.
	KafkaEnabled *bool `json:"kafkaEnabled,omitempty"`

	// MaximumThroughputUnits: Upper limit of throughput units when AutoInflate is enabled, value should be within 0 to 20
	// throughput units. ( '0' if AutoInflateEnabled = true)
	MaximumThroughputUnits *int `json:"maximumThroughputUnits,omitempty"`

	// ZoneRedundant: Enabling this property creates a Standard Event Hubs Namespace in regions supported availability zones.
	ZoneRedundant *bool `json:"zoneRedundant,omitempty"`
}

// SKU parameters supplied to the create namespace operation
type Sku struct {
	// Capacity: The Event Hubs throughput units for Basic or Standard tiers, where value should be 0 to 20 throughput units.
	// The Event Hubs premium units for Premium tier, where value should be 0 to 10 premium units.
	Capacity *int `json:"capacity,omitempty"`

	// Name: Name of this SKU.
	Name *Sku_Name `json:"name,omitempty"`

	// Tier: The billing tier of this particular SKU.
	Tier *Sku_Tier `json:"tier,omitempty"`
}

// Properties to configure Encryption
type Encryption struct {
	// KeySource: Enumerates the possible value of keySource for Encryption
	KeySource *Encryption_KeySource `json:"keySource,omitempty"`

	// KeyVaultProperties: Properties of KeyVault
	KeyVaultProperties []KeyVaultProperties `json:"keyVaultProperties,omitempty"`

	// RequireInfrastructureEncryption: Enable Infrastructure Encryption (Double Encryption)
	RequireInfrastructureEncryption *bool `json:"requireInfrastructureEncryption,omitempty"`
}

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

const (
	Identity_Type_None                       = Identity_Type("None")
	Identity_Type_SystemAssigned             = Identity_Type("SystemAssigned")
	Identity_Type_SystemAssignedUserAssigned = Identity_Type("SystemAssigned, UserAssigned")
	Identity_Type_UserAssigned               = Identity_Type("UserAssigned")
)

// Mapping from string to Identity_Type
var identity_Type_Values = map[string]Identity_Type{
	"none":                         Identity_Type_None,
	"systemassigned":               Identity_Type_SystemAssigned,
	"systemassigned, userassigned": Identity_Type_SystemAssignedUserAssigned,
	"userassigned":                 Identity_Type_UserAssigned,
}

// +kubebuilder:validation:Enum={"Basic","Premium","Standard"}
type Sku_Name string

const (
	Sku_Name_Basic    = Sku_Name("Basic")
	Sku_Name_Premium  = Sku_Name("Premium")
	Sku_Name_Standard = Sku_Name("Standard")
)

// Mapping from string to Sku_Name
var sku_Name_Values = map[string]Sku_Name{
	"basic":    Sku_Name_Basic,
	"premium":  Sku_Name_Premium,
	"standard": Sku_Name_Standard,
}

// +kubebuilder:validation:Enum={"Basic","Premium","Standard"}
type Sku_Tier string

const (
	Sku_Tier_Basic    = Sku_Tier("Basic")
	Sku_Tier_Premium  = Sku_Tier("Premium")
	Sku_Tier_Standard = Sku_Tier("Standard")
)

// Mapping from string to Sku_Tier
var sku_Tier_Values = map[string]Sku_Tier{
	"basic":    Sku_Tier_Basic,
	"premium":  Sku_Tier_Premium,
	"standard": Sku_Tier_Standard,
}

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

// +kubebuilder:validation:Enum={"Microsoft.KeyVault"}
type Encryption_KeySource string

const Encryption_KeySource_MicrosoftKeyVault = Encryption_KeySource("Microsoft.KeyVault")

// Mapping from string to Encryption_KeySource
var encryption_KeySource_Values = map[string]Encryption_KeySource{
	"microsoft.keyvault": Encryption_KeySource_MicrosoftKeyVault,
}

// Properties to configure keyVault Properties
type KeyVaultProperties struct {
	Identity *UserAssignedIdentityProperties `json:"identity,omitempty"`

	// KeyName: Name of the Key from KeyVault
	KeyName *string `json:"keyName,omitempty"`

	// KeyVaultUri: Uri of KeyVault
	KeyVaultUri *string `json:"keyVaultUri,omitempty"`

	// KeyVersion: Key Version
	KeyVersion *string `json:"keyVersion,omitempty"`
}

type UserAssignedIdentityProperties struct {
	// UserAssignedIdentity: ARM ID of user Identity selected for encryption
	UserAssignedIdentity *string `json:"userAssignedIdentity,omitempty"`
}
