// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// Code generated by Microsoft (R) Go Code Generator. DO NOT EDIT.

package armpolicy

import (
	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
	"time"
)

// Alias - The alias type.
type Alias struct {
	// The default alias path metadata. Applies to the default path and to any alias path that doesn't have metadata.
	DefaultMetadata *AliasPathMetadata

	// The default path for an alias.
	DefaultPath *string

	// The default pattern for an alias.
	DefaultPattern *AliasPattern

	// The alias name.
	Name *string

	// The paths for an alias.
	Paths []*AliasPath

	// The type of the alias.
	Type *AliasType
}

// AliasPath - The type of the paths for alias.
type AliasPath struct {
	// The API versions.
	APIVersions []*string

	// The path of an alias.
	Path *string

	// The pattern for an alias path.
	Pattern *AliasPattern

	// READ-ONLY; The metadata of the alias path. If missing, fall back to the default metadata of the alias.
	Metadata *AliasPathMetadata
}

// AliasPathMetadata - The alias path metadata.
type AliasPathMetadata struct {
	// The attributes of the token that the alias path is referring to.
	Attributes *AliasPathAttributes

	// The type of the token that the alias path is referring to.
	Type *AliasPathTokenType
}

// AliasPattern - The type of the pattern for an alias path.
type AliasPattern struct {
	// The alias pattern phrase.
	Phrase *string

	// The pattern for an alias path.
	Type *AliasPatternType

	// The alias pattern variable.
	Variable *string
}

// Assignment - The policy assignment.
type Assignment struct {
	// The managed identity associated with the policy assignment.
	Identity *Identity

	// The location of the policy assignment. Only required when utilizing managed identity.
	Location *string

	// Properties for the policy assignment.
	Properties *AssignmentProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// AssignmentListResult - The response of a PolicyAssignment list operation.
type AssignmentListResult struct {
	// REQUIRED; The PolicyAssignment items on this page
	Value []*Assignment

	// The link to the next page of items
	NextLink *string
}

// AssignmentProperties - The policy assignment properties.
type AssignmentProperties struct {
	// The type of policy assignment. Possible values are NotSpecified, System, SystemHidden, and Custom. Immutable.
	AssignmentType *AssignmentType

	// The version of the policy definition to use.
	DefinitionVersion *string

	// This message will be part of response in case of policy violation.
	Description *string

	// The display name of the policy assignment.
	DisplayName *string

	// The policy assignment enforcement mode. Possible values are Default, DoNotEnforce, and Enroll
	EnforcementMode *EnforcementMode

	// The policy assignment metadata. Metadata is an open ended object and is typically a collection of key value pairs.
	Metadata any

	// The messages that describe why a resource is non-compliant with the policy.
	NonComplianceMessages []*NonComplianceMessage

	// The policy's excluded scopes.
	NotScopes []*string

	// The policy property value override.
	Overrides []*Override

	// The parameter values for the assigned policy rule. The keys are the parameter names.
	Parameters map[string]*ParameterValuesValue

	// The ID of the policy definition or policy set definition being assigned.
	PolicyDefinitionID *string

	// The resource selector list to filter policies by resource properties.
	ResourceSelectors []*ResourceSelector

	// The self-serve exemption settings for the policy assignment.
	SelfServeExemptionSettings *SelfServeExemptionSettings

	// READ-ONLY; The effective version of the policy definition in use. This is only present if requested via the $expand query
	// parameter.
	EffectiveDefinitionVersion *string

	// READ-ONLY; The instance ID of the policy assignment. This ID only and always changes when the assignment is deleted and
	// recreated.
	InstanceID *string

	// READ-ONLY; The latest version of the policy definition available. This is only present if requested via the $expand query
	// parameter.
	LatestDefinitionVersion *string

	// READ-ONLY; The scope for the policy assignment.
	Scope *string
}

// AssignmentUpdate - The policy assignment for Patch request.
type AssignmentUpdate struct {
	// The managed identity associated with the policy assignment.
	Identity *Identity

	// The location of the policy assignment. Only required when utilizing managed identity.
	Location *string

	// The policy assignment properties for Patch request.
	Properties *AssignmentUpdateProperties
}

// AssignmentUpdateProperties - The policy assignment properties for Patch request.
type AssignmentUpdateProperties struct {
	// The policy property value override.
	Overrides []*Override

	// The resource selector list to filter policies by resource properties.
	ResourceSelectors []*ResourceSelector

	// The self-serve exemption settings for the policy assignment.
	SelfServeExemptionSettings *SelfServeExemptionSettings
}

// DataEffect - The data effect definition.
type DataEffect struct {
	// The data effect details schema.
	DetailsSchema any

	// The data effect name.
	Name *string
}

// DataManifestCustomResourceFunctionDefinition - The custom resource function definition.
type DataManifestCustomResourceFunctionDefinition struct {
	// A value indicating whether the custom properties within the property bag are allowed. Needs api-version to be specified
	// in the policy rule eg - vault('2019-06-01').
	AllowCustomProperties *bool

	// The top-level properties that can be selected on the function's output. eg - [ \"name\", \"location\" ] if vault().name
	// and vault().location are supported.
	DefaultProperties []*string

	// The fully qualified control plane resource type that this function represents. eg - 'Microsoft.KeyVault/vaults'.
	FullyQualifiedResourceType *string

	// The function name as it will appear in the policy rule. eg - 'vault'.
	Name *string
}

// DataManifestResourceFunctionsDefinition - The resource functions supported by a manifest.
type DataManifestResourceFunctionsDefinition struct {
	// An array of data manifest custom resource definitions.
	Custom []*DataManifestCustomResourceFunctionDefinition

	// The standard resource functions (subscription and/or resourceGroup).
	Standard []*string
}

// DataPolicyManifest - The data policy manifest.
type DataPolicyManifest struct {
	// The resource-specific properties for this resource.
	Properties *DataPolicyManifestProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// DataPolicyManifestListResult - The response of a DataPolicyManifest list operation.
type DataPolicyManifestListResult struct {
	// REQUIRED; The DataPolicyManifest items on this page
	Value []*DataPolicyManifest

	// The link to the next page of items
	NextLink *string
}

// DataPolicyManifestProperties - The properties of the data policy manifest.
type DataPolicyManifestProperties struct {
	// The effect definition.
	Effects []*DataEffect

	// The non-alias field accessor values that can be used in the policy rule.
	FieldValues []*string

	// A value indicating whether policy mode is allowed only in built-in definitions.
	IsBuiltInOnly *bool

	// The list of namespaces for the data policy manifest.
	Namespaces []*string

	// The policy mode of the data policy manifest.
	PolicyMode *string

	// The resource functions definition specified in the data manifest.
	ResourceFunctions *DataManifestResourceFunctionsDefinition

	// An array of resource type aliases.
	ResourceTypeAliases []*ResourceTypeAliases
}

// Definition - The policy definition.
type Definition struct {
	// The policy definition properties.
	Properties *DefinitionProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// DefinitionGroup - The policy definition group.
type DefinitionGroup struct {
	// REQUIRED; The name of the group.
	Name *string

	// A resource ID of a resource that contains additional metadata about the group.
	AdditionalMetadataID *string

	// The group's category.
	Category *string

	// The group's description.
	Description *string

	// The group's display name.
	DisplayName *string
}

// DefinitionListResult - The response of a PolicyDefinition list operation.
type DefinitionListResult struct {
	// REQUIRED; The PolicyDefinition items on this page
	Value []*Definition

	// The link to the next page of items
	NextLink *string
}

// DefinitionProperties - The policy definition properties.
type DefinitionProperties struct {
	// The policy definition description.
	Description *string

	// The display name of the policy definition.
	DisplayName *string

	// The details of the source of external evaluation results required by the policy during enforcement evaluation.
	ExternalEvaluationEnforcementSettings *ExternalEvaluationEnforcementSettings

	// The policy definition metadata. Metadata is an open ended object and is typically a collection of key value pairs.
	Metadata any

	// The policy definition mode. Some examples are All, Indexed, Microsoft.KeyVault.Data.
	Mode *string

	// The parameter definitions for parameters used in the policy rule. The keys are the parameter names.
	Parameters map[string]*ParameterDefinitionsValue

	// The policy rule.
	PolicyRule any

	// The type of policy definition. Possible values are NotSpecified, BuiltIn, Custom, and Static.
	PolicyType *PolicyType

	// The policy definition version in #.#.# format.
	Version *string

	// A list of available versions for this policy definition.
	Versions []*string
}

// DefinitionReference - The policy definition reference.
type DefinitionReference struct {
	// REQUIRED; The ID of the policy definition or policy set definition.
	PolicyDefinitionID *string

	// The version of the policy definition to use.
	DefinitionVersion *string

	// The name of the groups that this policy definition reference belongs to.
	GroupNames []*string

	// The parameter values for the referenced policy rule. The keys are the parameter names.
	Parameters map[string]*ParameterValuesValue

	// A unique id (within the policy set definition) for this policy definition reference.
	PolicyDefinitionReferenceID *string

	// READ-ONLY; The effective version of the policy definition in use. This is only present if requested via the $expand query
	// parameter.
	EffectiveDefinitionVersion *string

	// READ-ONLY; The latest version of the policy definition available. This is only present if requested via the $expand query
	// parameter.
	LatestDefinitionVersion *string
}

// DefinitionVersion - The ID of the policy definition version.
type DefinitionVersion struct {
	// The policy definition version properties.
	Properties *DefinitionVersionProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// DefinitionVersionListResult - The response of a PolicyDefinitionVersion list operation.
type DefinitionVersionListResult struct {
	// REQUIRED; The PolicyDefinitionVersion items on this page
	Value []*DefinitionVersion

	// The link to the next page of items
	NextLink *string
}

// DefinitionVersionProperties - The policy definition properties.
type DefinitionVersionProperties struct {
	// The policy definition description.
	Description *string

	// The display name of the policy definition.
	DisplayName *string

	// The details of the source of external evaluation results required by the policy during enforcement evaluation.
	ExternalEvaluationEnforcementSettings *ExternalEvaluationEnforcementSettings

	// The policy definition metadata. Metadata is an open ended object and is typically a collection of key value pairs.
	Metadata any

	// The policy definition mode. Some examples are All, Indexed, Microsoft.KeyVault.Data.
	Mode *string

	// The parameter definitions for parameters used in the policy rule. The keys are the parameter names.
	Parameters map[string]*ParameterDefinitionsValue

	// The policy rule.
	PolicyRule any

	// The type of policy definition. Possible values are NotSpecified, BuiltIn, Custom, and Static.
	PolicyType *PolicyType

	// The policy definition version in #.#.# format.
	Version *string
}

// Enrollment - The policy enrollment.
type Enrollment struct {
	// The ETag for the policy enrollment.
	ETag *azcore.ETag

	// The properties of the policy enrollment.
	Properties *EnrollmentProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// EnrollmentListResult - The response of a PolicyEnrollment list operation.
type EnrollmentListResult struct {
	// REQUIRED; The PolicyEnrollment items on this page
	Value []*Enrollment

	// The link to the next page of items
	NextLink *string
}

// EnrollmentProperties - The policy enrollment properties.
type EnrollmentProperties struct {
	// REQUIRED; The ID of the policy assignment that is being enrolled.
	PolicyAssignmentID *string

	// The option whether to validate the enrollment is at or under the assignment scope.
	AssignmentScopeValidation *AssignmentScopeValidation

	// The description of the policy enrollment.
	Description *string

	// The display name of the policy enrollment.
	DisplayName *string

	// The policy enrollment metadata. Metadata is an open ended object and is typically a collection of key value pairs.
	Metadata any

	// The policy definition reference IDs for policy definitions in an assigned policy set definition.
	// These IDs correspond to a subset of `policyDefinitions[*].policyDefinitionReferenceId` in the policy set definition.
	// When specified and not empty, only the referenced policy definitions will be enrolled to. Otherwise, the entire policy
	// set is enrolled to
	PolicyDefinitionReferenceIDs []*string

	// The resource selector list to filter policies by resource properties.
	ResourceSelectors []*ResourceSelector

	// READ-ONLY; The policy assignment instance ID associated with this enrollment.
	// The value is set to the instance ID of the policy assignment the policyAssignmentId references when the enrollment is created
	// or updated.
	// The format is a GUID string.
	PolicyAssignmentInstanceID *string
}

// EnrollmentUpdate - The policy enrollment for Patch request.
type EnrollmentUpdate struct {
	// The policy enrollment properties for Patch request.
	Properties *EnrollmentUpdateProperties
}

// EnrollmentUpdateProperties - The policy enrollment properties for Patch request.
type EnrollmentUpdateProperties struct {
	// The option whether to validate the enrollment is at or under the assignment scope.
	AssignmentScopeValidation *AssignmentScopeValidation

	// The resource selector list to filter policies by resource properties.
	ResourceSelectors []*ResourceSelector
}

// Exemption - The policy exemption.
type Exemption struct {
	// Properties for the policy exemption.
	Properties *ExemptionProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// ExemptionListResult - The response of a PolicyExemption list operation.
type ExemptionListResult struct {
	// REQUIRED; The PolicyExemption items on this page
	Value []*Exemption

	// The link to the next page of items
	NextLink *string
}

// ExemptionProperties - The policy exemption properties.
type ExemptionProperties struct {
	// REQUIRED; The policy exemption category. Possible values are Waiver and Mitigated.
	ExemptionCategory *ExemptionCategory

	// REQUIRED; The ID of the policy assignment that is being exempted.
	PolicyAssignmentID *string

	// The option whether validate the exemption is at or under the assignment scope.
	AssignmentScopeValidation *AssignmentScopeValidation

	// The description of the policy exemption.
	Description *string

	// The display name of the policy exemption.
	DisplayName *string

	// The expiration date and time (in UTC ISO 8601 format yyyy-MM-ddTHH:mm:ssZ) of the policy exemption.
	ExpiresOn *time.Time

	// The policy exemption metadata. Metadata is an open ended object and is typically a collection of key value pairs.
	Metadata any

	// The policy definition reference ID list when the associated policy assignment is an assignment of a policy set definition.
	PolicyDefinitionReferenceIDs []*string

	// The resource selector list to filter policies by resource properties.
	ResourceSelectors []*ResourceSelector
}

// ExemptionUpdate - The policy exemption for Patch request.
type ExemptionUpdate struct {
	// The policy exemption properties for Patch request.
	Properties *ExemptionUpdateProperties
}

// ExemptionUpdateProperties - The policy exemption properties for Patch request.
type ExemptionUpdateProperties struct {
	// The option whether validate the exemption is at or under the assignment scope.
	AssignmentScopeValidation *AssignmentScopeValidation

	// The resource selector list to filter policies by resource properties.
	ResourceSelectors []*ResourceSelector
}

// ExternalEvaluationEndpointInvocationResult - The external evaluation endpoint invocation results.
type ExternalEvaluationEndpointInvocationResult struct {
	// The endpoint specific metadata.
	AdditionalInfo any

	// The set of claims that will be attached to the policy token as an attestation for the result of the endpoint invocation.
	Claims any

	// The external evaluation endpoint kind.
	EndpointKind *string

	// The expiration of the results.
	Expiration *time.Time

	// The status message with additional details about the invocation result.
	Message *string

	// The effective outcome of the policy evaluation based on both the policy effect and evaluation result. Possible values are
	// Unknown, Allow, Audit, Deny, Error.
	PolicyAction *PolicyAction

	// The evaluation details returned by the policy evaluation engine.
	PolicyEvaluationDetails any

	// The details of the policy requiring the external endpoint invocation.
	PolicyInfo *LogInfo

	// The result of the external endpoint. Possible values are Succeeded and Failed.
	Result *ExternalEndpointResult

	// The date and time after which a failed endpoint invocation can be retried.
	RetryAfter *time.Time
}

// ExternalEvaluationEndpointSettings - The settings of an external endpoint providing evaluation results.
type ExternalEvaluationEndpointSettings struct {
	// The details of the endpoint.
	Details any

	// The kind of the endpoint.
	Kind *string
}

// ExternalEvaluationEnforcementSettings - The details of the source of external evaluation results required by the policy
// during enforcement evaluation.
type ExternalEvaluationEnforcementSettings struct {
	// The settings of an external endpoint providing evaluation results.
	EndpointSettings *ExternalEvaluationEndpointSettings

	// What to do when evaluating an enforcement policy that requires an external evaluation and the token is missing. Possible
	// values are Audit and Deny and language expressions are supported.
	MissingTokenAction *string

	// The lifespan of the endpoint invocation result after which it's no longer valid. Value is expected to follow the ISO 8601
	// duration format and language expressions are supported.
	ResultLifespan *string

	// An array of the role definition Ids the assignment's MSI will need in order to invoke the endpoint.
	RoleDefinitionIDs []*string
}

// Identity for the resource. Policy assignments support a maximum of one identity. That is either a system assigned identity
// or a single user assigned identity.
type Identity struct {
	// The identity type. This is the only required field when adding a system or user assigned identity to a resource.
	Type *ResourceIdentityType

	// The user identity associated with the policy. The user identity dictionary key references will be ARM resource ids in the
	// form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
	UserAssignedIdentities map[string]*UserAssignedIdentitiesValue

	// READ-ONLY; The principal ID of the resource identity. This property will only be provided for a system assigned identity
	PrincipalID *string

	// READ-ONLY; The tenant ID of the resource identity. This property will only be provided for a system assigned identity
	TenantID *string
}

// LogInfo - The policy log info.
type LogInfo struct {
	// The policy assignment Id.
	PolicyAssignmentID *string

	// The policy assignment name.
	PolicyAssignmentName *string

	// The policy assignment scope.
	PolicyAssignmentScope *string

	// The policy assignment version.
	PolicyAssignmentVersion *string

	// The policy definition action.
	PolicyDefinitionEffect *string

	// The policy definition Id.
	PolicyDefinitionID *string

	// The policy definition name.
	PolicyDefinitionName *string

	// The policy definition instance Id inside a policy set.
	PolicyDefinitionReferenceID *string

	// The policy definition version.
	PolicyDefinitionVersion *string

	// The policy set definition Id.
	PolicySetDefinitionID *string

	// The policy set definition name.
	PolicySetDefinitionName *string

	// The policy set definition version.
	PolicySetDefinitionVersion *string
}

// NonComplianceMessage - A message that describes why a resource is non-compliant with the policy. This is shown in 'deny'
// error messages and on resource's non-compliant compliance results.
type NonComplianceMessage struct {
	// REQUIRED; A message that describes why a resource is non-compliant with the policy. This is shown in 'deny' error messages
	// and on resource's non-compliant compliance results.
	Message *string

	// The policy definition reference ID within a policy set definition the message is intended for. This is only applicable
	// if the policy assignment assigns a policy set definition. If this is not provided the message applies to all policies assigned
	// by this policy assignment.
	PolicyDefinitionReferenceID *string
}

// Override - The policy property value override.
type Override struct {
	// The override kind.
	Kind *OverrideKind

	// The list of the selector expressions.
	Selectors []*Selector

	// The value to override the policy property.
	Value *string
}

// ParameterDefinitionsValue - The definition of a parameter that can be provided to the policy.
type ParameterDefinitionsValue struct {
	// The allowed values for the parameter.
	AllowedValues []any

	// The default value for the parameter if no value is provided.
	DefaultValue any

	// General metadata for the parameter.
	Metadata *ParameterDefinitionsValueMetadata

	// Provides validation of parameter inputs during assignment using a self-defined JSON schema. This property is only supported
	// for object-type parameters and follows the Json.NET Schema 2019-09 implementation. You can learn more about using schemas
	// at https://json-schema.org/ and test draft schemas at https://www.jsonschemavalidator.net/.
	Schema any

	// The data type of the parameter.
	Type *ParameterType
}

// ParameterDefinitionsValueMetadata - General metadata for the parameter.
type ParameterDefinitionsValueMetadata struct {
	AdditionalProperties map[string]any

	// Set to true to have Azure portal create role assignments on the resource ID or resource scope value of this parameter during
	// policy assignment. This property is useful in case you wish to assign permissions outside the assignment scope.
	AssignPermissions *bool

	// The description of the parameter.
	Description *string

	// The display name for the parameter.
	DisplayName *string

	// Used when assigning the policy definition through the portal. Provides a context aware list of values for the user to choose
	// from.
	StrongType *string
}

// ParameterValuesValue - The value of a parameter.
type ParameterValuesValue struct {
	// The value of the parameter.
	Value any
}

// ResourceSelector - The resource selector to filter policies by resource properties.
type ResourceSelector struct {
	// The name of the resource selector.
	Name *string

	// The list of the selector expressions.
	Selectors []*Selector
}

// ResourceTypeAliases - The resource type aliases definition.
type ResourceTypeAliases struct {
	// The aliases for property names.
	Aliases []*Alias

	// The resource type name.
	ResourceType *string
}

// Selector - The selector expression.
type Selector struct {
	// The list of values to filter in.
	In []*string

	// The selector kind.
	Kind *SelectorKind

	// The list of values to filter out.
	NotIn []*string
}

// SelfServeExemptionSettings - The self-serve exemption settings for a policy assignment.
type SelfServeExemptionSettings struct {
	// Indicates whether self-serve exemption is enabled.
	Enabled *bool

	// The policy definition reference IDs for self-serve exemption.
	PolicyDefinitionReferenceIDs []*string
}

// SetDefinition - The policy set definition.
type SetDefinition struct {
	// The policy set definition properties.
	Properties *SetDefinitionProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// SetDefinitionListResult - The response of a PolicySetDefinition list operation.
type SetDefinitionListResult struct {
	// REQUIRED; The PolicySetDefinition items on this page
	Value []*SetDefinition

	// The link to the next page of items
	NextLink *string
}

// SetDefinitionProperties - The policy set definition properties.
type SetDefinitionProperties struct {
	// REQUIRED; An array of policy definition references.
	PolicyDefinitions []*DefinitionReference

	// The policy set definition description.
	Description *string

	// The display name of the policy set definition.
	DisplayName *string

	// The policy set definition metadata. Metadata is an open ended object and is typically a collection of key value pairs.
	Metadata any

	// The policy set definition parameters that can be used in policy definition references.
	Parameters map[string]*ParameterDefinitionsValue

	// The metadata describing groups of policy definition references within the policy set definition.
	PolicyDefinitionGroups []*DefinitionGroup

	// The type of policy set definition. Possible values are NotSpecified, BuiltIn, Custom, and Static.
	PolicyType *PolicyType

	// The policy set definition version in #.#.# format.
	Version *string

	// A list of available versions for this policy set definition.
	Versions []*string
}

// SetDefinitionVersion - The policy set definition version.
type SetDefinitionVersion struct {
	// The policy set definition version properties.
	Properties *SetDefinitionVersionProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// SetDefinitionVersionListResult - The response of a PolicySetDefinitionVersion list operation.
type SetDefinitionVersionListResult struct {
	// REQUIRED; The PolicySetDefinitionVersion items on this page
	Value []*SetDefinitionVersion

	// The link to the next page of items
	NextLink *string
}

// SetDefinitionVersionProperties - The policy set definition properties.
type SetDefinitionVersionProperties struct {
	// REQUIRED; An array of policy definition references.
	PolicyDefinitions []*DefinitionReference

	// The policy set definition description.
	Description *string

	// The display name of the policy set definition.
	DisplayName *string

	// The policy set definition metadata. Metadata is an open ended object and is typically a collection of key value pairs.
	Metadata any

	// The policy set definition parameters that can be used in policy definition references.
	Parameters map[string]*ParameterDefinitionsValue

	// The metadata describing groups of policy definition references within the policy set definition.
	PolicyDefinitionGroups []*DefinitionGroup

	// The type of policy definition. Possible values are NotSpecified, BuiltIn, Custom, and Static.
	PolicyType *PolicyType

	// The policy set definition version in #.#.# format.
	Version *string
}

// SystemData - Metadata pertaining to creation and last modification of the resource.
type SystemData struct {
	// The timestamp of resource creation (UTC).
	CreatedAt *time.Time

	// The identity that created the resource.
	CreatedBy *string

	// The type of identity that created the resource.
	CreatedByType *CreatedByType

	// The timestamp of resource last modification (UTC)
	LastModifiedAt *time.Time

	// The identity that last modified the resource.
	LastModifiedBy *string

	// The type of identity that last modified the resource.
	LastModifiedByType *CreatedByType
}

// TokenEvaluatedRequestDetails - The policy token evaluated request details.
type TokenEvaluatedRequestDetails struct {
	// REQUIRED; The api-version of the resource operation that is targeted by the issued token.
	APIVersion *string

	// REQUIRED; The authorization action of the resource operation that is targeted by the issued token.
	AuthorizationAction *string

	// REQUIRED; The hashed payload of the resource operation that is targeted by the issued token.
	ContentHash *string

	// REQUIRED; The http method of the resource operation that is targeted by the issued token.
	HTTPMethod *string

	// REQUIRED; The resource Id of the resource operation that is targeted by the issued token.
	ResourceID *string

	// REQUIRED; The request URI of the resource operation that is targeted by the issued token.
	URI *string
}

// TokenOperation - The resource operation to acquire a token for.
type TokenOperation struct {
	// REQUIRED; The http method of the resource operation.
	HTTPMethod *string

	// REQUIRED; The request URI of the resource operation.
	URI *string

	// The payload of the resource operation.
	Content any
}

// TokenRequest - The policy token request properties.
type TokenRequest struct {
	// REQUIRED; The resource operation to acquire a token for.
	Operation *TokenOperation

	// The change reference.
	ChangeReference *string
}

// TokenResponse - The policy token response properties.
type TokenResponse struct {
	// The change reference associated with the operation for which the token is acquired.
	ChangeReference *string

	// The expiration of the policy token.
	Expiration *time.Time

	// Status message with additional details about the token acquisition operation result.
	Message *string

	// The external evaluation request details.
	RequestDetails *TokenEvaluatedRequestDetails

	// The result of the completed token acquisition operation. Possible values are Succeeded and Failed.
	Result *PolicyTokenResult

	// An array of external evaluation endpoint invocation results.
	Results []*ExternalEvaluationEndpointInvocationResult

	// The date and time after which the client can try to acquire a token again in the case of retry-able failures.
	RetryAfter *time.Time

	// The issued policy token.
	Token *string

	// The unique Id assigned to the policy token.
	TokenID *string
}

type UserAssignedIdentitiesValue struct {
	// READ-ONLY; The client id of user assigned identity.
	ClientID *string

	// READ-ONLY; The principal id of user assigned identity.
	PrincipalID *string
}

// Variable - The variable.
type Variable struct {
	// Properties for the variable.
	Properties *VariableProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// VariableColumn - The variable column.
type VariableColumn struct {
	// REQUIRED; The name of this policy variable column.
	ColumnName *string
}

// VariableListResult - The response of a Variable list operation.
type VariableListResult struct {
	// REQUIRED; The Variable items on this page
	Value []*Variable

	// The link to the next page of items
	NextLink *string
}

// VariableProperties - The variable properties.
type VariableProperties struct {
	// REQUIRED; Variable column definitions.
	Columns []*VariableColumn
}

// VariableValue - The variable value.
type VariableValue struct {
	// Properties for the variable value.
	Properties *VariableValueProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// VariableValueColumnValue - The name value tuple for this variable value column.
type VariableValueColumnValue struct {
	// REQUIRED; Column name for the variable value
	ColumnName *string

	// REQUIRED; Column value for the variable value; this can be an integer, double, boolean, null or a string.
	ColumnValue any
}

// VariableValueListResult - The response of a VariableValue list operation.
type VariableValueListResult struct {
	// REQUIRED; The VariableValue items on this page
	Value []*VariableValue

	// The link to the next page of items
	NextLink *string
}

// VariableValueProperties - The variable value properties.
type VariableValueProperties struct {
	// REQUIRED; Variable value column value array.
	Values []*VariableValueColumnValue
}
