// 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 DataCollectionEndpoint_Spec struct {
	// Identity: Managed service identity of the resource.
	Identity *ManagedServiceIdentity `json:"identity,omitempty"`

	// Kind: The kind of the resource.
	Kind *DataCollectionEndpoint_Kind_Spec `json:"kind,omitempty"`

	// Location: The geo-location where the resource lives.
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: Resource properties.
	Properties *DataCollectionEndpointSpec `json:"properties,omitempty"`

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

var _ genruntime.ARMResourceSpec = &DataCollectionEndpoint_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2023-03-11"
func (endpoint DataCollectionEndpoint_Spec) GetAPIVersion() string {
	return "2023-03-11"
}

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

// GetType returns the ARM Type of the resource. This is always "Microsoft.Insights/dataCollectionEndpoints"
func (endpoint *DataCollectionEndpoint_Spec) GetType() string {
	return "Microsoft.Insights/dataCollectionEndpoints"
}

// +kubebuilder:validation:Enum={"Linux","Windows"}
type DataCollectionEndpoint_Kind_Spec string

const (
	DataCollectionEndpoint_Kind_Spec_Linux   = DataCollectionEndpoint_Kind_Spec("Linux")
	DataCollectionEndpoint_Kind_Spec_Windows = DataCollectionEndpoint_Kind_Spec("Windows")
)

// Mapping from string to DataCollectionEndpoint_Kind_Spec
var dataCollectionEndpoint_Kind_Spec_Values = map[string]DataCollectionEndpoint_Kind_Spec{
	"linux":   DataCollectionEndpoint_Kind_Spec_Linux,
	"windows": DataCollectionEndpoint_Kind_Spec_Windows,
}

// Definition of data collection endpoint.
type DataCollectionEndpointSpec struct {
	// Description: Description of the data collection endpoint.
	Description *string `json:"description,omitempty"`

	// NetworkAcls: Network access control rules for the endpoints.
	NetworkAcls *NetworkRuleSet `json:"networkAcls,omitempty"`
}

// Managed service identity (system assigned and/or user assigned identities)
type ManagedServiceIdentity struct {
	// Type: Type of managed service identity (where both SystemAssigned and UserAssigned types are allowed).
	Type                   *ManagedServiceIdentityType            `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

// Type of managed service identity (where both SystemAssigned and UserAssigned types are allowed).
// +kubebuilder:validation:Enum={"None","SystemAssigned","SystemAssigned,UserAssigned","UserAssigned"}
type ManagedServiceIdentityType string

const (
	ManagedServiceIdentityType_None                       = ManagedServiceIdentityType("None")
	ManagedServiceIdentityType_SystemAssigned             = ManagedServiceIdentityType("SystemAssigned")
	ManagedServiceIdentityType_SystemAssignedUserAssigned = ManagedServiceIdentityType("SystemAssigned,UserAssigned")
	ManagedServiceIdentityType_UserAssigned               = ManagedServiceIdentityType("UserAssigned")
)

// Mapping from string to ManagedServiceIdentityType
var managedServiceIdentityType_Values = map[string]ManagedServiceIdentityType{
	"none":                        ManagedServiceIdentityType_None,
	"systemassigned":              ManagedServiceIdentityType_SystemAssigned,
	"systemassigned,userassigned": ManagedServiceIdentityType_SystemAssignedUserAssigned,
	"userassigned":                ManagedServiceIdentityType_UserAssigned,
}

// Definition of the network rules.
type NetworkRuleSet struct {
	// PublicNetworkAccess: The configuration to set whether network access from public internet to the endpoints are allowed.
	PublicNetworkAccess *NetworkRuleSet_PublicNetworkAccess `json:"publicNetworkAccess,omitempty"`
}

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

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

const (
	NetworkRuleSet_PublicNetworkAccess_Disabled           = NetworkRuleSet_PublicNetworkAccess("Disabled")
	NetworkRuleSet_PublicNetworkAccess_Enabled            = NetworkRuleSet_PublicNetworkAccess("Enabled")
	NetworkRuleSet_PublicNetworkAccess_SecuredByPerimeter = NetworkRuleSet_PublicNetworkAccess("SecuredByPerimeter")
)

// Mapping from string to NetworkRuleSet_PublicNetworkAccess
var networkRuleSet_PublicNetworkAccess_Values = map[string]NetworkRuleSet_PublicNetworkAccess{
	"disabled":           NetworkRuleSet_PublicNetworkAccess_Disabled,
	"enabled":            NetworkRuleSet_PublicNetworkAccess_Enabled,
	"securedbyperimeter": NetworkRuleSet_PublicNetworkAccess_SecuredByPerimeter,
}
