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

import "time"

// ARecord - An A record.
type ARecord struct {
	// The IPv4 address of this A record.
	IPv4Address *string
}

// AaaaRecord - An AAAA record.
type AaaaRecord struct {
	// The IPv6 address of this AAAA record.
	IPv6Address *string
}

// CnameRecord - A CNAME record.
type CnameRecord struct {
	// The canonical name for this CNAME record.
	Cname *string
}

// MxRecord - An MX record.
type MxRecord struct {
	// The domain name of the mail host for this MX record.
	Exchange *string

	// The preference value for this MX record.
	Preference *int32
}

// PrivateZone - Describes a Private DNS zone.
type PrivateZone struct {
	// The ETag of the zone.
	Etag *string

	// The Azure Region where the resource lives
	Location *string

	// Properties of the Private DNS zone.
	Properties *PrivateZoneProperties

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

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

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

// PrivateZoneProperties - Represents the properties of the Private DNS zone.
type PrivateZoneProperties struct {
	// READ-ONLY; Private zone internal Id
	InternalID *string

	// READ-ONLY; The maximum number of record sets that can be created in this Private DNS zone. This is a read-only property
	// and any attempt to set this value will be ignored.
	MaxNumberOfRecordSets *int64

	// READ-ONLY; The maximum number of virtual networks that can be linked to this Private DNS zone. This is a read-only property
	// and any attempt to set this value will be ignored.
	MaxNumberOfVirtualNetworkLinks *int64

	// READ-ONLY; The maximum number of virtual networks that can be linked to this Private DNS zone with registration enabled.
	// This is a read-only property and any attempt to set this value will be ignored.
	MaxNumberOfVirtualNetworkLinksWithRegistration *int64

	// READ-ONLY; The current number of record sets in this Private DNS zone. This is a read-only property and any attempt to
	// set this value will be ignored.
	NumberOfRecordSets *int64

	// READ-ONLY; The current number of virtual networks that are linked to this Private DNS zone. This is a read-only property
	// and any attempt to set this value will be ignored.
	NumberOfVirtualNetworkLinks *int64

	// READ-ONLY; The current number of virtual networks that are linked to this Private DNS zone with registration enabled. This
	// is a read-only property and any attempt to set this value will be ignored.
	NumberOfVirtualNetworkLinksWithRegistration *int64

	// READ-ONLY; The provisioning state of the resource. This is a read-only property and any attempt to set this value will
	// be ignored.
	ProvisioningState *ProvisioningState
}

// PtrRecord - A PTR record.
type PtrRecord struct {
	// The PTR target domain name for this PTR record.
	Ptrdname *string
}

// RecordSet - Describes a DNS record set (a collection of DNS records with the same name and type) in a Private DNS zone.
type RecordSet struct {
	// The ETag of the record set.
	Etag *string

	// The properties of the record set.
	Properties *RecordSetProperties

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

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

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

// RecordSetProperties - Represents the properties of the records in the record set.
type RecordSetProperties struct {
	// The list of A records in the record set.
	ARecords []*ARecord

	// The list of AAAA records in the record set.
	AaaaRecords []*AaaaRecord

	// The CNAME record in the record set.
	CnameRecord *CnameRecord

	// The metadata attached to the record set.
	Metadata map[string]*string

	// The list of MX records in the record set.
	MxRecords []*MxRecord

	// The list of PTR records in the record set.
	PtrRecords []*PtrRecord

	// The SOA record in the record set.
	SoaRecord *SoaRecord

	// The list of SRV records in the record set.
	SrvRecords []*SrvRecord

	// The TTL (time-to-live) of the records in the record set.
	TTL *int64

	// The list of TXT records in the record set.
	TxtRecords []*TxtRecord

	// READ-ONLY; Fully qualified domain name of the record set.
	Fqdn *string

	// READ-ONLY; Is the record set auto-registered in the Private DNS zone through a virtual network link?
	IsAutoRegistered *bool
}

// SoaRecord - An SOA record.
type SoaRecord struct {
	// The email contact for this SOA record.
	Email *string

	// The expire time for this SOA record.
	ExpireTime *int64

	// The domain name of the authoritative name server for this SOA record.
	Host *string

	// The minimum value for this SOA record. By convention this is used to determine the negative caching duration.
	MinimumTTL *int64

	// The refresh value for this SOA record.
	RefreshTime *int64

	// The retry time for this SOA record.
	RetryTime *int64

	// The serial number for this SOA record.
	SerialNumber *int64
}

// SrvRecord - An SRV record.
type SrvRecord struct {
	// The port value for this SRV record.
	Port *int32

	// The priority value for this SRV record.
	Priority *int32

	// The target domain name for this SRV record.
	Target *string

	// The weight value for this SRV record.
	Weight *int32
}

// SubResource - Reference to another subresource.
type SubResource struct {
	// Resource ID.
	ID *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
}

// TxtRecord - A TXT record.
type TxtRecord struct {
	// The text value of this TXT record.
	Value []*string
}

// VirtualNetworkLink - Describes a link to virtual network for a Private DNS zone.
type VirtualNetworkLink struct {
	// The ETag of the virtual network link.
	Etag *string

	// The Azure Region where the resource lives
	Location *string

	// Properties of the virtual network link to the Private DNS zone.
	Properties *VirtualNetworkLinkProperties

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

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

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

// VirtualNetworkLinkProperties - Represents the properties of the Private DNS zone.
type VirtualNetworkLinkProperties struct {
	// Is auto-registration of virtual machine records in the virtual network in the Private DNS zone enabled?
	RegistrationEnabled *bool

	// The resolution policy on the virtual network link. Only applicable for virtual network links to privatelink zones, and
	// for A,AAAA,CNAME queries. When set to 'NxDomainRedirect', Azure DNS resolver falls back to public resolution if private
	// dns query resolution results in non-existent domain response.
	ResolutionPolicy *ResolutionPolicy

	// The reference of the virtual network.
	VirtualNetwork *SubResource

	// READ-ONLY; The provisioning state of the resource. This is a read-only property and any attempt to set this value will
	// be ignored.
	ProvisioningState *ProvisioningState

	// READ-ONLY; The status of the virtual network link to the Private DNS zone. Possible values are 'InProgress' and 'Done'.
	// This is a read-only property and any attempt to set this value will be ignored.
	VirtualNetworkLinkState *VirtualNetworkLinkState
}
