// 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 armservicenetworking

import "time"

// Association Subresource of Traffic Controller
type Association struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The resource-specific properties for this resource.
	Properties *AssociationProperties

	// Resource tags.
	Tags map[string]*string

	// 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
}

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

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

// AssociationProperties - Association Properties.
type AssociationProperties struct {
	// REQUIRED; Association Type
	AssociationType *AssociationType

	// Association Subnet
	Subnet *AssociationSubnet

	// READ-ONLY; Provisioning State of Traffic Controller Association Resource
	ProvisioningState *ProvisioningState
}

// AssociationSubnet - Association Subnet.
type AssociationSubnet struct {
	// REQUIRED; Association ID.
	ID *string
}

// AssociationSubnetUpdate - Association Subnet.
type AssociationSubnetUpdate struct {
	// Association ID.
	ID *string
}

// AssociationUpdate - The type used for update operations of the Association.
type AssociationUpdate struct {
	// The resource-specific properties for this resource.
	Properties *AssociationUpdateProperties

	// Resource tags.
	Tags map[string]*string
}

// AssociationUpdateProperties - The updatable properties of the Association.
type AssociationUpdateProperties struct {
	// Association Type
	AssociationType *AssociationType

	// Association Subnet
	Subnet *AssociationSubnetUpdate
}

// Frontend Sub Resource of Traffic Controller.
type Frontend struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The resource-specific properties for this resource.
	Properties *FrontendProperties

	// Resource tags.
	Tags map[string]*string

	// 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
}

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

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

// FrontendProperties - Frontend Properties.
type FrontendProperties struct {
	// Frontend Security Policy Configuration
	SecurityPolicyConfigurations *SecurityPolicyConfigurations

	// READ-ONLY; The Fully Qualified Domain Name of the DNS record associated to a Traffic Controller frontend.
	Fqdn *string

	// READ-ONLY; Provisioning State of Traffic Controller Frontend Resource
	ProvisioningState *ProvisioningState
}

// FrontendUpdate - The type used for update operations of the Frontend.
type FrontendUpdate struct {
	// The resource-specific properties for this resource.
	Properties *FrontendUpdateProperties

	// Resource tags.
	Tags map[string]*string
}

// FrontendUpdateProperties - The updatable properties of the Frontend.
type FrontendUpdateProperties struct {
	// Frontend Security Policy Configuration
	SecurityPolicyConfigurations *SecurityPolicyConfigurations
}

// IPAccessRule - Ip Access Policy Rules
type IPAccessRule struct {
	// REQUIRED; Action of the Rule
	Action *IPAccessRuleAction

	// REQUIRED; Name of the Ip Access Rule
	Name *string

	// REQUIRED; The priority of the rule. The value can be between 1 and 500. The priority number must be unique for each rule
	// in the collection. The lower the priority number, the higher the priority of the rule.
	Priority *int32

	// REQUIRED; Source Address Prefixed Applied by the Rule. Asterisk '*' can also be used to match all source IPs.
	SourceAddressPrefixes []*string
}

// IPAccessRulesPolicy - Ip Access Policy
type IPAccessRulesPolicy struct {
	// Ip Access Policy Rules List
	Rules []*IPAccessRule
}

// IPAccessRulesSecurityPolicy - IpAccessRules Security Policy
type IPAccessRulesSecurityPolicy struct {
	// REQUIRED; Resource ID of the Ip Access Rules Security Policy
	ID *string
}

// Operation - REST API Operation
//
// Details of a REST API operation, returned from the Resource Provider Operations API
type Operation struct {
	// Localized display information for this particular operation.
	Display *OperationDisplay

	// READ-ONLY; Extensible enum. Indicates the action type. "Internal" refers to actions that are for internal only APIs.
	ActionType *ActionType

	// READ-ONLY; Whether the operation applies to data-plane. This is "true" for data-plane operations and "false" for Azure
	// Resource Manager/control-plane operations.
	IsDataAction *bool

	// READ-ONLY; The name of the operation, as per Resource-Based Access Control (RBAC). Examples: "Microsoft.Compute/virtualMachines/write",
	// "Microsoft.Compute/virtualMachines/capture/action"
	Name *string

	// READ-ONLY; The intended executor of the operation; as in Resource Based Access Control (RBAC) and audit logs UX. Default
	// value is "user,system"
	Origin *Origin
}

// OperationDisplay - Localized display information for and operation.
type OperationDisplay struct {
	// READ-ONLY; The short, localized friendly description of the operation; suitable for tool tips and detailed views.
	Description *string

	// READ-ONLY; The concise, localized friendly name for the operation; suitable for dropdowns. E.g. "Create or Update Virtual
	// Machine", "Restart Virtual Machine".
	Operation *string

	// READ-ONLY; The localized friendly form of the resource provider name, e.g. "Microsoft Monitoring Insights" or "Microsoft
	// Compute".
	Provider *string

	// READ-ONLY; The localized friendly name of the resource type related to this operation. E.g. "Virtual Machines" or "Job
	// Schedule Collections".
	Resource *string
}

// OperationListResult - A list of REST API operations supported by an Azure Resource Provider. It contains an URL link to
// get the next set of results.
type OperationListResult struct {
	// REQUIRED; The Operation items on this page
	Value []*Operation

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

// ResourceID - Resource ID definition used by parent to reference child resources.
type ResourceID struct {
	// REQUIRED; Resource ID of child resource.
	ID *string
}

// SecurityPolicy Subresource of Traffic Controller.
type SecurityPolicy struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The resource-specific properties for this resource.
	Properties *SecurityPolicyProperties

	// Resource tags.
	Tags map[string]*string

	// 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
}

// SecurityPolicyConfigurations Subresource of Traffic Controller.
type SecurityPolicyConfigurations struct {
	// Contains reference to a IpAccessRules-type security policy.
	IPAccessRulesSecurityPolicy *IPAccessRulesSecurityPolicy

	// Contains reference to a WAF-type security policy.
	WafSecurityPolicy *WafSecurityPolicy
}

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

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

// SecurityPolicyProperties - SecurityPolicy Properties.
type SecurityPolicyProperties struct {
	// Ip Access Policy of the Traffic Controller Security Policy. Single Security Policy can have only one policy type set.
	IPAccessRulesPolicy *IPAccessRulesPolicy

	// Web Application Firewall Policy of the Traffic Controller Security Policy. Single Security Policy can have only one policy
	// type set.
	WafPolicy *WafPolicy

	// READ-ONLY; Type of the Traffic Controller Security Policy
	PolicyType *PolicyType

	// READ-ONLY; Provisioning State of Traffic Controller SecurityPolicy Resource
	ProvisioningState *ProvisioningState
}

// SecurityPolicyUpdate - The type used for update operations of the SecurityPolicy.
type SecurityPolicyUpdate struct {
	// The resource-specific properties for this resource.
	Properties *SecurityPolicyUpdateProperties

	// Resource tags.
	Tags map[string]*string
}

// SecurityPolicyUpdateProperties - The updatable properties of the SecurityPolicy.
type SecurityPolicyUpdateProperties struct {
	// Ip Access Policy of the Traffic Controller Security Policy. Single Security Policy can have only one policy type set.
	IPAccessRulesPolicy *IPAccessRulesPolicy

	// Web Application Firewall Policy of the Traffic Controller Security Policy. Single Security Policy can have only one policy
	// type set.
	WafPolicy *WafPolicy
}

// 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
}

// TrafficController - Concrete tracked resource types can be created by aliasing this type using a specific property type.
type TrafficController struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The resource-specific properties for this resource.
	Properties *TrafficControllerProperties

	// Resource tags.
	Tags map[string]*string

	// 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
}

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

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

// TrafficControllerProperties - Traffic Controller Properties.
type TrafficControllerProperties struct {
	// Security Policy Configuration
	SecurityPolicyConfigurations *SecurityPolicyConfigurations

	// READ-ONLY; Associations References List
	Associations []*ResourceID

	// READ-ONLY; Configuration Endpoints.
	ConfigurationEndpoints []*string

	// READ-ONLY; Frontends References List
	Frontends []*ResourceID

	// READ-ONLY; The status of the last operation.
	ProvisioningState *ProvisioningState

	// READ-ONLY; Security Policies References List
	SecurityPolicies []*ResourceID
}

// TrafficControllerUpdate - The type used for update operations of the TrafficController.
type TrafficControllerUpdate struct {
	// The resource-specific properties for this resource.
	Properties *TrafficControllerUpdateProperties

	// Resource tags.
	Tags map[string]*string
}

// TrafficControllerUpdateProperties - The updatable properties of the TrafficController.
type TrafficControllerUpdateProperties struct {
	// Security Policy Configuration
	SecurityPolicyConfigurations *SecurityPolicyConfigurations
}

// WafPolicy - Web Application Firewall Policy
type WafPolicy struct {
	// REQUIRED; Resource ID of the WAF
	ID *string
}

// WafSecurityPolicy - Web Application Firewall Security Policy
type WafSecurityPolicy struct {
	// REQUIRED; Resource ID of the Waf Security Policy
	ID *string
}
