// 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 PublicIPPrefix_Spec struct {
	// ExtendedLocation: The extended location of the public ip address.
	ExtendedLocation *ExtendedLocation `json:"extendedLocation,omitempty"`

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

	// Properties: Public IP prefix properties.
	Properties *PublicIPPrefixPropertiesFormat `json:"properties,omitempty"`

	// Sku: The public IP prefix SKU.
	Sku *PublicIPPrefixSku `json:"sku,omitempty"`

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

	// Zones: A list of availability zones denoting the IP allocated for the resource needs to come from.
	Zones []string `json:"zones,omitempty"`
}

var _ genruntime.ARMResourceSpec = &PublicIPPrefix_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2022-07-01"
func (prefix PublicIPPrefix_Spec) GetAPIVersion() string {
	return "2022-07-01"
}

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

// GetType returns the ARM Type of the resource. This is always "Microsoft.Network/publicIPPrefixes"
func (prefix *PublicIPPrefix_Spec) GetType() string {
	return "Microsoft.Network/publicIPPrefixes"
}

// Public IP prefix properties.
type PublicIPPrefixPropertiesFormat struct {
	// CustomIPPrefix: The customIpPrefix that this prefix is associated with.
	CustomIPPrefix *SubResource `json:"customIPPrefix,omitempty"`

	// IpTags: The list of tags associated with the public IP prefix.
	IpTags []IpTag `json:"ipTags,omitempty"`

	// NatGateway: NatGateway of Public IP Prefix.
	NatGateway *NatGatewaySpec_PublicIPPrefix_SubResourceEmbedded `json:"natGateway,omitempty"`

	// PrefixLength: The Length of the Public IP Prefix.
	PrefixLength *int `json:"prefixLength,omitempty"`

	// PublicIPAddressVersion: The public IP address version.
	PublicIPAddressVersion *IPVersion `json:"publicIPAddressVersion,omitempty"`
}

// SKU of a public IP prefix.
type PublicIPPrefixSku struct {
	// Name: Name of a public IP prefix SKU.
	Name *PublicIPPrefixSku_Name `json:"name,omitempty"`

	// Tier: Tier of a public IP prefix SKU.
	Tier *PublicIPPrefixSku_Tier `json:"tier,omitempty"`
}

// Contains the IpTag associated with the object.
type IpTag struct {
	// IpTagType: The IP tag type. Example: FirstPartyUsage.
	IpTagType *string `json:"ipTagType,omitempty"`

	// Tag: The value of the IP tag associated with the public IP. Example: SQL.
	Tag *string `json:"tag,omitempty"`
}

// IP address version.
// +kubebuilder:validation:Enum={"IPv4","IPv6"}
type IPVersion string

const (
	IPVersion_IPv4 = IPVersion("IPv4")
	IPVersion_IPv6 = IPVersion("IPv6")
)

// Mapping from string to IPVersion
var iPVersion_Values = map[string]IPVersion{
	"ipv4": IPVersion_IPv4,
	"ipv6": IPVersion_IPv6,
}

// Nat Gateway resource.
type NatGatewaySpec_PublicIPPrefix_SubResourceEmbedded struct {
	// Id: Resource ID.
	Id *string `json:"id,omitempty"`
}

// +kubebuilder:validation:Enum={"Standard"}
type PublicIPPrefixSku_Name string

const PublicIPPrefixSku_Name_Standard = PublicIPPrefixSku_Name("Standard")

// Mapping from string to PublicIPPrefixSku_Name
var publicIPPrefixSku_Name_Values = map[string]PublicIPPrefixSku_Name{
	"standard": PublicIPPrefixSku_Name_Standard,
}

// +kubebuilder:validation:Enum={"Global","Regional"}
type PublicIPPrefixSku_Tier string

const (
	PublicIPPrefixSku_Tier_Global   = PublicIPPrefixSku_Tier("Global")
	PublicIPPrefixSku_Tier_Regional = PublicIPPrefixSku_Tier("Regional")
)

// Mapping from string to PublicIPPrefixSku_Tier
var publicIPPrefixSku_Tier_Values = map[string]PublicIPPrefixSku_Tier{
	"global":   PublicIPPrefixSku_Tier_Global,
	"regional": PublicIPPrefixSku_Tier_Regional,
}
