// 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 {
	// Location: The geo-location where the resource lives
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: Represents namespace properties.
	Properties *NamespaceProperties `json:"properties,omitempty"`

	// Sku: The Sku description for a namespace
	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 "2023-09-01"
func (namespace Namespace_Spec) GetAPIVersion() string {
	return "2023-09-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.NotificationHubs/namespaces"
func (namespace *Namespace_Spec) GetType() string {
	return "Microsoft.NotificationHubs/namespaces"
}

// Represents namespace properties.
type NamespaceProperties struct {
	// DataCenter: Deprecated.
	DataCenter *string `json:"dataCenter,omitempty"`

	// NamespaceType: Defines values for NamespaceType.
	NamespaceType *NamespaceType `json:"namespaceType,omitempty"`

	// NetworkAcls: A collection of network authorization rules.
	NetworkAcls *NetworkAcls `json:"networkAcls,omitempty"`

	// PnsCredentials: Collection of Notification Hub or Notification Hub Namespace PNS credentials.
	PnsCredentials *PnsCredentials `json:"pnsCredentials,omitempty"`

	// PublicNetworkAccess: Type of public network access.
	PublicNetworkAccess *PublicNetworkAccess `json:"publicNetworkAccess,omitempty"`

	// ReplicationRegion: Allowed replication region
	ReplicationRegion *ReplicationRegion `json:"replicationRegion,omitempty"`

	// ScaleUnit: Gets or sets scaleUnit where the namespace gets created
	ScaleUnit *string `json:"scaleUnit,omitempty"`

	// ZoneRedundancy: Namespace SKU name.
	ZoneRedundancy *ZoneRedundancyPreference `json:"zoneRedundancy,omitempty"`
}

// The Sku description for a namespace
type Sku struct {
	// Capacity: Gets or sets the capacity of the resource
	Capacity *int `json:"capacity,omitempty"`

	// Family: Gets or sets the Sku Family
	Family *string `json:"family,omitempty"`

	// Name: Namespace SKU name.
	Name *SkuName `json:"name,omitempty"`

	// Size: Gets or sets the Sku size
	Size *string `json:"size,omitempty"`

	// Tier: Gets or sets the tier of particular sku
	Tier *string `json:"tier,omitempty"`
}

// Defines values for NamespaceType.
// +kubebuilder:validation:Enum={"Messaging","NotificationHub"}
type NamespaceType string

const (
	NamespaceType_Messaging       = NamespaceType("Messaging")
	NamespaceType_NotificationHub = NamespaceType("NotificationHub")
)

// Mapping from string to NamespaceType
var namespaceType_Values = map[string]NamespaceType{
	"messaging":       NamespaceType_Messaging,
	"notificationhub": NamespaceType_NotificationHub,
}

// A collection of network authorization rules.
type NetworkAcls struct {
	// IpRules: List of IP rules.
	IpRules []IpRule `json:"ipRules,omitempty"`

	// PublicNetworkRule: A default (public Internet) network authorization rule, which contains rights if no other network
	// rule matches.
	PublicNetworkRule *PublicInternetAuthorizationRule `json:"publicNetworkRule,omitempty"`
}

// Collection of Notification Hub or Notification Hub Namespace PNS credentials.
type PnsCredentials struct {
	// AdmCredential: Description of a NotificationHub AdmCredential.
	AdmCredential *AdmCredential `json:"admCredential,omitempty"`

	// ApnsCredential: Description of a NotificationHub ApnsCredential.
	ApnsCredential *ApnsCredential `json:"apnsCredential,omitempty"`

	// BaiduCredential: Description of a NotificationHub BaiduCredential.
	BaiduCredential *BaiduCredential `json:"baiduCredential,omitempty"`

	// BrowserCredential: Description of a NotificationHub BrowserCredential.
	BrowserCredential *BrowserCredential `json:"browserCredential,omitempty"`

	// GcmCredential: Description of a NotificationHub GcmCredential.
	GcmCredential *GcmCredential `json:"gcmCredential,omitempty"`

	// MpnsCredential: Description of a NotificationHub MpnsCredential.
	MpnsCredential *MpnsCredential `json:"mpnsCredential,omitempty"`

	// WnsCredential: Description of a NotificationHub WnsCredential.
	WnsCredential *WnsCredential `json:"wnsCredential,omitempty"`

	// XiaomiCredential: Description of a NotificationHub XiaomiCredential.
	XiaomiCredential *XiaomiCredential `json:"xiaomiCredential,omitempty"`
}

// Type of public network access.
// +kubebuilder:validation:Enum={"Disabled","Enabled"}
type PublicNetworkAccess string

const (
	PublicNetworkAccess_Disabled = PublicNetworkAccess("Disabled")
	PublicNetworkAccess_Enabled  = PublicNetworkAccess("Enabled")
)

// Mapping from string to PublicNetworkAccess
var publicNetworkAccess_Values = map[string]PublicNetworkAccess{
	"disabled": PublicNetworkAccess_Disabled,
	"enabled":  PublicNetworkAccess_Enabled,
}

// Allowed replication region
// +kubebuilder:validation:Enum={"AustraliaEast","BrazilSouth","Default","None","NorthEurope","SouthAfricaNorth","SouthEastAsia","WestUs2"}
type ReplicationRegion string

const (
	ReplicationRegion_AustraliaEast    = ReplicationRegion("AustraliaEast")
	ReplicationRegion_BrazilSouth      = ReplicationRegion("BrazilSouth")
	ReplicationRegion_Default          = ReplicationRegion("Default")
	ReplicationRegion_None             = ReplicationRegion("None")
	ReplicationRegion_NorthEurope      = ReplicationRegion("NorthEurope")
	ReplicationRegion_SouthAfricaNorth = ReplicationRegion("SouthAfricaNorth")
	ReplicationRegion_SouthEastAsia    = ReplicationRegion("SouthEastAsia")
	ReplicationRegion_WestUs2          = ReplicationRegion("WestUs2")
)

// Mapping from string to ReplicationRegion
var replicationRegion_Values = map[string]ReplicationRegion{
	"australiaeast":    ReplicationRegion_AustraliaEast,
	"brazilsouth":      ReplicationRegion_BrazilSouth,
	"default":          ReplicationRegion_Default,
	"none":             ReplicationRegion_None,
	"northeurope":      ReplicationRegion_NorthEurope,
	"southafricanorth": ReplicationRegion_SouthAfricaNorth,
	"southeastasia":    ReplicationRegion_SouthEastAsia,
	"westus2":          ReplicationRegion_WestUs2,
}

// Namespace SKU name.
// +kubebuilder:validation:Enum={"Basic","Free","Standard"}
type SkuName string

const (
	SkuName_Basic    = SkuName("Basic")
	SkuName_Free     = SkuName("Free")
	SkuName_Standard = SkuName("Standard")
)

// Mapping from string to SkuName
var skuName_Values = map[string]SkuName{
	"basic":    SkuName_Basic,
	"free":     SkuName_Free,
	"standard": SkuName_Standard,
}

// Namespace SKU name.
// +kubebuilder:validation:Enum={"Disabled","Enabled"}
type ZoneRedundancyPreference string

const (
	ZoneRedundancyPreference_Disabled = ZoneRedundancyPreference("Disabled")
	ZoneRedundancyPreference_Enabled  = ZoneRedundancyPreference("Enabled")
)

// Mapping from string to ZoneRedundancyPreference
var zoneRedundancyPreference_Values = map[string]ZoneRedundancyPreference{
	"disabled": ZoneRedundancyPreference_Disabled,
	"enabled":  ZoneRedundancyPreference_Enabled,
}

// A network authorization rule that filters traffic based on IP address.
type IpRule struct {
	// IpMask: IP mask.
	IpMask *string `json:"ipMask,omitempty"`

	// Rights: List of access rights.
	Rights []AccessRights `json:"rights,omitempty"`
}

// A default (public Internet) network authorization rule, which contains rights if no other network rule matches.
type PublicInternetAuthorizationRule struct {
	// Rights: List of access rights.
	Rights []AccessRights `json:"rights,omitempty"`
}
