// 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 Registry_Spec struct {
	// Identity: The identity of the container registry.
	Identity *IdentityProperties `json:"identity,omitempty"`

	// Location: The location of the resource. This cannot be changed after the resource is created.
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: The properties of the container registry.
	Properties *RegistryProperties `json:"properties,omitempty"`

	// Sku: The SKU of the container registry.
	Sku *Sku `json:"sku,omitempty"`

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

var _ genruntime.ARMResourceSpec = &Registry_Spec{}

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

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

// GetType returns the ARM Type of the resource. This is always "Microsoft.ContainerRegistry/registries"
func (registry *Registry_Spec) GetType() string {
	return "Microsoft.ContainerRegistry/registries"
}

// Managed identity for the resource.
type IdentityProperties struct {
	// Type: The identity type.
	Type                   *IdentityProperties_Type               `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

// The properties of a container registry.
type RegistryProperties struct {
	// AdminUserEnabled: The value that indicates whether the admin user is enabled.
	AdminUserEnabled *bool `json:"adminUserEnabled,omitempty"`

	// DataEndpointEnabled: Enable a single data endpoint per region for serving data.
	DataEndpointEnabled *bool `json:"dataEndpointEnabled,omitempty"`

	// Encryption: The encryption settings of container registry.
	Encryption *EncryptionProperty `json:"encryption,omitempty"`

	// NetworkRuleBypassOptions: Whether to allow trusted Azure services to access a network restricted registry.
	NetworkRuleBypassOptions *RegistryProperties_NetworkRuleBypassOptions `json:"networkRuleBypassOptions,omitempty"`

	// NetworkRuleSet: The network rule set for a container registry.
	NetworkRuleSet *NetworkRuleSet `json:"networkRuleSet,omitempty"`

	// Policies: The policies for a container registry.
	Policies *Policies `json:"policies,omitempty"`

	// PublicNetworkAccess: Whether or not public network access is allowed for the container registry.
	PublicNetworkAccess *RegistryProperties_PublicNetworkAccess `json:"publicNetworkAccess,omitempty"`

	// ZoneRedundancy: Whether or not zone redundancy is enabled for this container registry
	ZoneRedundancy *RegistryProperties_ZoneRedundancy `json:"zoneRedundancy,omitempty"`
}

// The SKU of a container registry.
type Sku struct {
	// Name: The SKU name of the container registry. Required for registry creation.
	Name *Sku_Name `json:"name,omitempty"`
}

type EncryptionProperty struct {
	// KeyVaultProperties: Key vault properties.
	KeyVaultProperties *KeyVaultProperties `json:"keyVaultProperties,omitempty"`

	// Status: Indicates whether or not the encryption is enabled for container registry.
	Status *EncryptionProperty_Status `json:"status,omitempty"`
}

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

const (
	IdentityProperties_Type_None                       = IdentityProperties_Type("None")
	IdentityProperties_Type_SystemAssigned             = IdentityProperties_Type("SystemAssigned")
	IdentityProperties_Type_SystemAssignedUserAssigned = IdentityProperties_Type("SystemAssigned, UserAssigned")
	IdentityProperties_Type_UserAssigned               = IdentityProperties_Type("UserAssigned")
)

// Mapping from string to IdentityProperties_Type
var identityProperties_Type_Values = map[string]IdentityProperties_Type{
	"none":                         IdentityProperties_Type_None,
	"systemassigned":               IdentityProperties_Type_SystemAssigned,
	"systemassigned, userassigned": IdentityProperties_Type_SystemAssignedUserAssigned,
	"userassigned":                 IdentityProperties_Type_UserAssigned,
}

// The network rule set for a container registry.
type NetworkRuleSet struct {
	// DefaultAction: The default action of allow or deny when no other rules match.
	DefaultAction *NetworkRuleSet_DefaultAction `json:"defaultAction,omitempty"`

	// IpRules: The IP ACL rules.
	IpRules []IPRule `json:"ipRules,omitempty"`
}

// The policies for a container registry.
type Policies struct {
	// ExportPolicy: The export policy for a container registry.
	ExportPolicy *ExportPolicy `json:"exportPolicy,omitempty"`

	// QuarantinePolicy: The quarantine policy for a container registry.
	QuarantinePolicy *QuarantinePolicy `json:"quarantinePolicy,omitempty"`

	// RetentionPolicy: The retention policy for a container registry.
	RetentionPolicy *RetentionPolicy `json:"retentionPolicy,omitempty"`

	// TrustPolicy: The content trust policy for a container registry.
	TrustPolicy *TrustPolicy `json:"trustPolicy,omitempty"`
}

// +kubebuilder:validation:Enum={"AzureServices","None"}
type RegistryProperties_NetworkRuleBypassOptions string

const (
	RegistryProperties_NetworkRuleBypassOptions_AzureServices = RegistryProperties_NetworkRuleBypassOptions("AzureServices")
	RegistryProperties_NetworkRuleBypassOptions_None          = RegistryProperties_NetworkRuleBypassOptions("None")
)

// Mapping from string to RegistryProperties_NetworkRuleBypassOptions
var registryProperties_NetworkRuleBypassOptions_Values = map[string]RegistryProperties_NetworkRuleBypassOptions{
	"azureservices": RegistryProperties_NetworkRuleBypassOptions_AzureServices,
	"none":          RegistryProperties_NetworkRuleBypassOptions_None,
}

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

const (
	RegistryProperties_PublicNetworkAccess_Disabled = RegistryProperties_PublicNetworkAccess("Disabled")
	RegistryProperties_PublicNetworkAccess_Enabled  = RegistryProperties_PublicNetworkAccess("Enabled")
)

// Mapping from string to RegistryProperties_PublicNetworkAccess
var registryProperties_PublicNetworkAccess_Values = map[string]RegistryProperties_PublicNetworkAccess{
	"disabled": RegistryProperties_PublicNetworkAccess_Disabled,
	"enabled":  RegistryProperties_PublicNetworkAccess_Enabled,
}

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

const (
	RegistryProperties_ZoneRedundancy_Disabled = RegistryProperties_ZoneRedundancy("Disabled")
	RegistryProperties_ZoneRedundancy_Enabled  = RegistryProperties_ZoneRedundancy("Enabled")
)

// Mapping from string to RegistryProperties_ZoneRedundancy
var registryProperties_ZoneRedundancy_Values = map[string]RegistryProperties_ZoneRedundancy{
	"disabled": RegistryProperties_ZoneRedundancy_Disabled,
	"enabled":  RegistryProperties_ZoneRedundancy_Enabled,
}

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

const (
	Sku_Name_Basic    = Sku_Name("Basic")
	Sku_Name_Classic  = Sku_Name("Classic")
	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,
	"classic":  Sku_Name_Classic,
	"premium":  Sku_Name_Premium,
	"standard": Sku_Name_Standard,
}

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

// +kubebuilder:validation:Enum={"disabled","enabled"}
type EncryptionProperty_Status string

const (
	EncryptionProperty_Status_Disabled = EncryptionProperty_Status("disabled")
	EncryptionProperty_Status_Enabled  = EncryptionProperty_Status("enabled")
)

// Mapping from string to EncryptionProperty_Status
var encryptionProperty_Status_Values = map[string]EncryptionProperty_Status{
	"disabled": EncryptionProperty_Status_Disabled,
	"enabled":  EncryptionProperty_Status_Enabled,
}

// The export policy for a container registry.
type ExportPolicy struct {
	// Status: The value that indicates whether the policy is enabled or not.
	Status *ExportPolicy_Status `json:"status,omitempty"`
}

// IP rule with specific IP or IP range in CIDR format.
type IPRule struct {
	// Action: The action of IP ACL rule.
	Action *IPRule_Action `json:"action,omitempty"`

	// Value: Specifies the IP or IP range in CIDR format. Only IPV4 address is allowed.
	Value *string `json:"value,omitempty"`
}

type KeyVaultProperties struct {
	// Identity: The client id of the identity which will be used to access key vault.
	Identity *string `json:"identity,omitempty" optionalConfigMapPair:"Identity"`

	// KeyIdentifier: Key vault uri to access the encryption key.
	KeyIdentifier *string `json:"keyIdentifier,omitempty"`
}

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

const (
	NetworkRuleSet_DefaultAction_Allow = NetworkRuleSet_DefaultAction("Allow")
	NetworkRuleSet_DefaultAction_Deny  = NetworkRuleSet_DefaultAction("Deny")
)

// Mapping from string to NetworkRuleSet_DefaultAction
var networkRuleSet_DefaultAction_Values = map[string]NetworkRuleSet_DefaultAction{
	"allow": NetworkRuleSet_DefaultAction_Allow,
	"deny":  NetworkRuleSet_DefaultAction_Deny,
}

// The quarantine policy for a container registry.
type QuarantinePolicy struct {
	// Status: The value that indicates whether the policy is enabled or not.
	Status *QuarantinePolicy_Status `json:"status,omitempty"`
}

// The retention policy for a container registry.
type RetentionPolicy struct {
	// Days: The number of days to retain an untagged manifest after which it gets purged.
	Days *int `json:"days,omitempty"`

	// Status: The value that indicates whether the policy is enabled or not.
	Status *RetentionPolicy_Status `json:"status,omitempty"`
}

// The content trust policy for a container registry.
type TrustPolicy struct {
	// Status: The value that indicates whether the policy is enabled or not.
	Status *TrustPolicy_Status `json:"status,omitempty"`

	// Type: The type of trust policy.
	Type *TrustPolicy_Type `json:"type,omitempty"`
}

// +kubebuilder:validation:Enum={"disabled","enabled"}
type ExportPolicy_Status string

const (
	ExportPolicy_Status_Disabled = ExportPolicy_Status("disabled")
	ExportPolicy_Status_Enabled  = ExportPolicy_Status("enabled")
)

// Mapping from string to ExportPolicy_Status
var exportPolicy_Status_Values = map[string]ExportPolicy_Status{
	"disabled": ExportPolicy_Status_Disabled,
	"enabled":  ExportPolicy_Status_Enabled,
}

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

const IPRule_Action_Allow = IPRule_Action("Allow")

// Mapping from string to IPRule_Action
var iPRule_Action_Values = map[string]IPRule_Action{
	"allow": IPRule_Action_Allow,
}

// +kubebuilder:validation:Enum={"disabled","enabled"}
type QuarantinePolicy_Status string

const (
	QuarantinePolicy_Status_Disabled = QuarantinePolicy_Status("disabled")
	QuarantinePolicy_Status_Enabled  = QuarantinePolicy_Status("enabled")
)

// Mapping from string to QuarantinePolicy_Status
var quarantinePolicy_Status_Values = map[string]QuarantinePolicy_Status{
	"disabled": QuarantinePolicy_Status_Disabled,
	"enabled":  QuarantinePolicy_Status_Enabled,
}

// +kubebuilder:validation:Enum={"disabled","enabled"}
type RetentionPolicy_Status string

const (
	RetentionPolicy_Status_Disabled = RetentionPolicy_Status("disabled")
	RetentionPolicy_Status_Enabled  = RetentionPolicy_Status("enabled")
)

// Mapping from string to RetentionPolicy_Status
var retentionPolicy_Status_Values = map[string]RetentionPolicy_Status{
	"disabled": RetentionPolicy_Status_Disabled,
	"enabled":  RetentionPolicy_Status_Enabled,
}

// +kubebuilder:validation:Enum={"disabled","enabled"}
type TrustPolicy_Status string

const (
	TrustPolicy_Status_Disabled = TrustPolicy_Status("disabled")
	TrustPolicy_Status_Enabled  = TrustPolicy_Status("enabled")
)

// Mapping from string to TrustPolicy_Status
var trustPolicy_Status_Values = map[string]TrustPolicy_Status{
	"disabled": TrustPolicy_Status_Disabled,
	"enabled":  TrustPolicy_Status_Enabled,
}

// +kubebuilder:validation:Enum={"Notary"}
type TrustPolicy_Type string

const TrustPolicy_Type_Notary = TrustPolicy_Type("Notary")

// Mapping from string to TrustPolicy_Type
var trustPolicy_Type_Values = map[string]TrustPolicy_Type{
	"notary": TrustPolicy_Type_Notary,
}
